4 <link rel='stylesheet' href='./scdoc.css' type='text/css'
/>
5 <meta http-equiv='Content-Type' content='text/html; charset=UTF-
8'
/>
6 <script src=
"docmap.js" type=
"text/javascript"></script>
7 <script src=
"scdoc.js" type=
"text/javascript"></script>
8 <!-- <script src="methods.js" type="text/javascript"></script>-->
15 border:
1px solid #aaa;
20 border-bottom:
2px solid #aaa;
29 font-family: Andale Mono, monospace;
40 border-bottom:
1px solid #ccc;*/
46 /* margin-left:
2em;*/
54 div.met_subclasses a {
57 div.met_subclasses a.seemore {
64 padding-bottom:
0.25em;
72 border-bottom:
1px solid #ddd;
76 table#search_settings {
84 border-collapse: collapse;
95 font-family: Andale Mono, monospace;
102 <p>The search page needs JavaScript.
105 <script type=
"text/javascript">
109 var fields
= ["title","summary","categories"];
111 //var docmapdict = {};
113 escape_regexp = function(str
) {
114 var specials
= new RegExp("[.*+?|()\\[\\]{}\\\\]", "g"); // .*+?|()[]{}\
115 return str
.replace(specials
, "\\$&");
118 function debug(str
) {
119 document
.getElementById("js_error").innerHTML
+= str
+ "<br>"
123 function buildMethodList() {
125 for(var k
in docmap
) {
127 var mets
= doc
.methods
;
129 for(var j
=0;j
<mets
.length
;j
++) {
131 var mname
= m
.slice(2);
133 var undoc
= m
[0]=="?";
134 if(!methods
.hasOwnProperty(mname
))
136 if(!methods
[mname
].push
) {
137 debug("Problem with method '"+mname
+"' in "+doc
.path
);
138 debug(methods
[mname
].toString());
140 methods
[mname
].push({doc
:doc
,pfx
:pfx
,undoc
:undoc
});
147 function getQuerystring(key
)
149 key
= key
.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
150 var regex
= new RegExp("[\\?&]"+key
+"=([^&#]*)");
151 var qs
= regex
.exec(window
.location
.href
);
159 helpRoot
="."; fixTOC();
160 newinput
= document
.getElementById("search_input").value
;
163 for(var i
=0;i
<fields
.length
;i
++) {
164 checkboxes
[i
] = document
.getElementById("check_"+fields
[i
]);
167 var x
= ["check_extensions", "check_methods","ignore_case","check_word","check_prefix","check_suffix","check_title","check_summary","check_categories"];
168 for(var i
=0;i
<x
.length
;i
++) {
169 document
.getElementById(x
[i
]).onchange
= doSearch
;
172 for(var i
=0;i
<x
.length
;i
++) {
174 var val
= getQuerystring(name
);
176 document
.getElementById(name
).checked
= true;
177 else if(val
== "false")
178 document
.getElementById(name
).checked
= false;
181 document
.getElementById("check_regexp").onchange = function(e
) {
182 var x
= document
.getElementsByClassName("nonregex");
183 for(var i
=0;i
<x
.length
;i
++) {
184 x
[i
].disabled
= e
.target
.checked
;
189 document
.getElementById("search_input").focus();
191 node
= document
.getElementById("search_results");
197 filter
= document
.getElementById("menu_filter");
198 filter
.onchange
= doSearch
;
200 setInterval(delayed_update
,250);
203 function checkHash() {
204 var x
= unescape(window
.location
.hash
.slice(1));
205 if(x
!="" && newinput
!=x
) {
206 document
.getElementById("search_input").value
= x
;
208 // window.location.hash = "";
212 function SearchKeyPressed(e
) {
214 if(newinput
!= input
) {
215 document
.getElementById("search_results").innerHTML
= "Searching...";
219 /*function updateHash() {
220 if(window.location.hash != input)
221 window.location.hash = input;
225 function matchDoc(doc
,file
,folder
,re
) {
226 doc
.matched_kw
= null;
228 if(filter
.value
!= "all") {
229 if(folder
.toLowerCase() != filter
.value
)
233 if(doc
.installed
=="extension" && !document
.getElementById("check_extensions").checked
)
236 for(var i
=0;i
<fields
.length
;i
++) {
238 if(checkboxes
[i
].checked
&& doc
.hasOwnProperty(f
) && re
.test(doc
[f
])) {
239 doc
.match_weight
= i
;
244 if(doc
.hasOwnProperty('path') && checkboxes
[0].checked
&& re
.test(file
)) {
248 if(doc
.hasOwnProperty('keywords')) {
249 for(var i
=0;i
<doc
.keywords
.length
;i
++) {
250 var kw
= doc
.keywords
[i
];
253 doc
.match_weight
= fields
.length
;
265 var inProgress
= false;
271 var subclassCache
= {};
273 function strCmp(a
,b
) {
281 function getSubClasses(doc
) {
284 for(var i
=0;i
<doc
.subclasses
.length
;i
++) {
285 var x
= doc
.subclasses
[i
];
286 var v
= docmap
["Classes/"+x
];
289 a
= a
.concat(getSubClasses(v
));
296 var now
= Date
.now();
298 for(; cindex
<docs
.length
; cindex
++) {
299 var k
= docs
[cindex
][0];
300 var c
= docs
[cindex
][1];
302 var div
= document
.createElement("div");
303 div
.className
="result_category";
304 if(!k
) k
= "(uncategorized)";
306 node
.appendChild(div
);
308 for(;cindex2
<c
.length
;cindex2
++) {
310 var x
= v
.path
.split("/");
311 var div
= document
.createElement("div");
312 div
.className
= "result_item";
314 var n
= document
.createElement("a");
316 n
.setAttribute("href",v
.path
+".html#kw_"+v
.matched_kw
);
318 var link
= v
.hasOwnProperty("oldhelp")?v
.oldhelp
:(v
.path
+".html");
319 n
.setAttribute("href",link
);
321 n
.innerHTML
= v
.title
;
323 if(/Undocumented classes/.test(v
.categories
)) {
324 n
.className
= "undoc";
325 div
.appendChild(document
.createTextNode(" - "));
327 div
.appendChild(document
.createTextNode(" - "+v
.summary
+" "));
330 if(v
.installed
!="standard") {
331 var n
= document
.createElement("span");
332 n
.className
= "soft";
334 if(v
.installed
=="extension")
336 else if(v
.installed
=="missing")
338 n
.innerHTML
= res
+"]";
343 node
.appendChild(div
);
345 if(Date
.now()-now
> 200) {
356 var div
= document
.createElement("div");
357 div
.className
="result_category";
358 div
.innerHTML
= "Methods";
359 node
.appendChild(div
);
362 for(;mindex
<mets
.length
; mindex
++) {
363 var mname
= mets
[mindex
][0]; //name
364 var div
= document
.createElement("div");
365 div
.className
= "result_item";
366 var x
= document
.createElement("div");
367 x
.appendChild(document
.createTextNode(mname
));
368 x
.className
= "result_met";
370 var cnt
= document
.createElement("span");
371 cnt
.className
= "soft";
372 cnt
.innerHTML
= " ("+mets
[mindex
][1].length
+" matches)";
375 var x
= mets
[mindex
][1].sort(function(a
,b
) { //document list
376 a
= a
.pfx
+ a
.doc
.title
;
377 b
= b
.pfx
+ b
.doc
.title
;
381 for(var i
=0;i
<x
.length
;i
++) {
385 var div2
= document
.createElement("div");
387 div2
.className
= "met_docs";
389 div
.appendChild(div2
);
393 div2
.appendChild(document
.createTextNode(p
+" "));
394 var a
= document
.createElement("a");
395 a
.setAttribute("href",helpRoot
+"/"+v
.path
+".html#"+m
.pfx
+mname
);
396 a
.innerHTML
= v
.title
;
398 a
.className
= "undoc";
401 if(/Undocumented classes/.test(v
.categories
)) {
402 div2
.appendChild(document
.createTextNode(" - "));
404 div2
.appendChild(document
.createTextNode(" - "+v
.summary
+" "));
407 var n
= document
.createElement("span");
408 n
.className
= "soft";
409 var res
= "["+v
.path
.split("/")[0];
410 if(v
.installed
=="extension")
412 else if(v
.installed
=="missing")
413 res
+= " - missing!";
414 n
.innerHTML
= res
+"]";
416 if(v
.path
=="Classes/Object") {
417 var n
= document
.createElement("div");
418 n
.className
= "met_subclasses";
419 n
.appendChild(document
.createTextNode("Inherited by: All classes"));
422 if(v
.subclasses
&& v
.subclasses
.length
>0) {
424 if(subclassCache
[v
.path
]) {
425 n
= subclassCache
[v
.path
].cloneNode(true);
427 var subs
= getSubClasses(v
);
428 n
= document
.createElement("div");
430 n
.className
= "met_subclasses";
431 n
.appendChild(document
.createTextNode("Inherited by: "));
432 for(var j
=0;j
<subs
.length
;j
++) {
433 var a
= document
.createElement("a");
434 a
.setAttribute("href", helpRoot
+"/Classes/"+subs
[j
]+".html");
435 if(j
==10 && subs
.length
> 14) {
436 m
= document
.createElement("span");
437 m
.className
= "hiddenspan";
438 m
.style
.display
= "none";
440 var a2
= document
.createElement("a");
441 a2
.setAttribute("href","#");
442 a2
.className
= "seemore";
443 a2
.innerHTML
= "… see "+(subs
.length
-10)+" more";
444 n
.appendChild(document
.createTextNode(" "));
448 m
.appendChild(document
.createTextNode(", "));
449 a
.innerHTML
= subs
[j
];
452 subclassCache
[v
.path
] = n
;
455 var a
= n
.getElementsByClassName("seemore")[0];
457 var m
= n
.getElementsByClassName("hiddenspan")[0];
458 a
.onclick = function() {
459 m
.style
.display
= "";
460 a
.parentNode
.removeChild(a
);
470 node
.appendChild(div
);
472 if(Date
.now()-now
> 200) {
480 function randomDoc() {
481 while(node
.hasChildNodes())
482 node
.removeChild(node
.lastChild
);
490 document
.getElementById("search_input").value
= "";
493 for(var k
in docmap
) {
494 if(docmap
.hasOwnProperty(k
))
495 list
.push(docmap
[k
]);
498 for(var i
=0;i
<100;i
++) {
499 var v
= list
[Math
.floor(Math
.random()*list
.length
)];
500 if(! /Undocumented classes/.test(v
.categories
)) {
501 docs
= [[v
.path
.split("/")[0],[v
]]];
508 document
.getElementById("search_count").innerHTML
= "random document";
511 function doSearch() {
514 while(node
.hasChildNodes())
515 node
.removeChild(node
.lastChild
);
529 if(!document
.getElementById("check_regexp").checked
) {
530 str
= escape_regexp(str
); //escape special chars
531 if(document
.getElementById("check_word").checked
)
532 str
= "\\b" + str
+ "\\b";
533 if(document
.getElementById("check_prefix").checked
)
535 if(document
.getElementById("check_suffix").checked
)
538 re
= RegExp(str
,document
.getElementById("ignore_case").checked
?"i":"");
540 document
.getElementById("search_count").innerHTML
= "Invalid regexp";
541 document
.getElementById("search_results").innerHTML
= err
;
547 for(var k
in docmap
) {
549 var x
= v
.path
.split("/");
551 var file
= x
[x
.length
-1];
553 if(matchDoc(v
,file
,folder
,re
)) {
554 if(!docs
.hasOwnProperty(folder
))
556 docs
[folder
].push(v
);
560 var tmp
= []; for(var k
in docs
) tmp
.push(
561 [k
, docs
[k
].sort(function(a
,b
) {
567 var order
= { Classes
:1, Reference
:2, Overviews
:3, Guides
:4, Tutorials
:5 };
568 docs
= tmp
.sort(function(a
,b
) {
569 a
= order
[a
[0]] || 10;
570 b
= order
[b
[0]] || 10;
575 var include_ext_classes
= document
.getElementById("check_extensions").checked
;
576 var filter_val
= filter
.value
;
577 if(document
.getElementById("check_methods").checked
) {
578 for(var mname
in methods
) {
579 var m
= methods
[mname
];
582 for(var i
=0;i
<m
.length
;i
++) {
585 if(doc
.installed
== "extension" && !include_ext_classes
) continue;
586 if(filter_val
!= "all" && doc
.path
.split("/")[0].toLowerCase() != filter_val
) continue
590 mets
.push([mname
,c
]);
596 mets
= mets
.sort(function(a
,b
) {
606 document
.getElementById("search_count").innerHTML
= count
+" results";
609 function delayed_update() {
610 if(input
!= newinput
) {
613 } else if(inProgress
) {
617 window
.onhashchange
= checkHash
;
622 <ul id=
"menubar"></ul>
623 <body onload=
"onLoad()">
624 <div class='contents'
>
626 <div id='label'
>SuperCollider
</div>
628 <div id='summary'
>Search all documents
</div>
630 <div id=
"search_checks0">
632 <select id=
"menu_filter">
633 <option SELECTED
value=
"all">All documents
</option>
634 <option value=
"classes">Classes only
</option>
635 <option value=
"reference">Reference only
</option>
636 <option value=
"guides">Guides only
</option>
637 <option value=
"tutorials">Tutorials only
</option>
638 <option value=
"overviews">Overviews only
</option>
639 <option value=
"other">Other only
</option>
641 <input type=
"checkbox" id=
"check_extensions" checked=
"true">Include extensions
</input>
644 <div id=
"search_box">
645 Search text:
<input type=
"text" id=
"search_input" value=
"" size=
"40" onkeyup=
"SearchKeyPressed(this)"/>
648 <table id=
"search_settings">
651 <div id=
"search_checks">
652 <input type=
"checkbox" id=
"ignore_case" checked=
"true">Ignore case
</input>
653 <input class=
"nonregex" type=
"checkbox" id=
"check_word">Whole word
</input>
654 <input class=
"nonregex" type=
"checkbox" id=
"check_prefix">Starts with
</input>
655 <input class=
"nonregex" type=
"checkbox" id=
"check_suffix">Ends with
</input>
656 <input type=
"checkbox" id=
"check_regexp">Regexp
</input>
661 <div id=
"search_checks">
662 <input type=
"checkbox" id=
"check_title" checked=
"true">Title/Filename
</input>
663 <input type=
"checkbox" id=
"check_summary" checked=
"true">Summary
</input>
664 <input type=
"checkbox" id=
"check_categories">Categories
</input>
665 <input type=
"checkbox" id=
"check_methods" checked=
"true">Methods
</input>
668 <div id=
"random"><a href=
"javascript:randomDoc()">random page
</a></div>
669 <div id=
"search_count">0 results
</div>
670 <div id=
"search_results"></div>
671 <div id=
"js_error"></div>