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);
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
,ext
:ext
});
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('keywords')) {
245 for(var i
=0;i
<doc
.keywords
.length
;i
++) {
246 var kw
= doc
.keywords
[i
];
249 doc
.match_weight
= fields
.length
;
261 var inProgress
= false;
267 var subclassCache
= {};
269 function getSubClasses(doc
) {
272 for(var i
=0;i
<doc
.subclasses
.length
;i
++) {
273 var x
= doc
.subclasses
[i
];
274 var v
= docmap
["Classes/"+x
];
277 a
= a
.concat(getSubClasses(v
));
284 var now
= Date
.now();
286 for(; cindex
<docs
.length
; cindex
++) {
287 var k
= docs
[cindex
][0];
288 var c
= docs
[cindex
][1];
290 var div
= document
.createElement("div");
291 div
.className
="result_category";
292 if(!k
) k
= "(uncategorized)";
294 node
.appendChild(div
);
296 for(;cindex2
<c
.length
;cindex2
++) {
298 var x
= v
.path
.split("/");
299 var div
= document
.createElement("div");
300 div
.className
= "result_item";
302 var n
= document
.createElement("a");
304 n
.setAttribute("href",v
.path
+".html#kw_"+v
.matched_kw
);
306 n
.setAttribute("href",v
.path
+".html");
308 n
.innerHTML
= v
.title
;
310 div
.appendChild(document
.createTextNode(" - "+v
.summary
+" "));
312 if(v
.installed
!="standard") {
313 var n
= document
.createElement("span");
314 n
.className
= "soft";
316 if(v
.installed
=="extension")
318 else if(v
.installed
=="missing")
320 n
.innerHTML
= res
+"]";
325 node
.appendChild(div
);
327 if(Date
.now()-now
> 200) {
338 var div
= document
.createElement("div");
339 div
.className
="result_category";
340 div
.innerHTML
= "Methods";
341 node
.appendChild(div
);
344 for(;mindex
<mets
.length
; mindex
++) {
345 var mname
= mets
[mindex
][0]; //name
346 var div
= document
.createElement("div");
347 div
.className
= "result_item";
348 var x
= document
.createElement("div");
349 x
.appendChild(document
.createTextNode(mname
));
350 x
.className
= "result_met";
352 var cnt
= document
.createElement("span");
353 cnt
.className
= "soft";
354 cnt
.innerHTML
= " ("+mets
[mindex
][1].length
+" matches)";
357 var x
= mets
[mindex
][1].sort(function(a
,b
) { //document list
358 a
= a
.pfx
+ a
.doc
.title
;
359 b
= b
.pfx
+ b
.doc
.title
;
367 for(var i
=0;i
<x
.length
;i
++) {
371 var div2
= document
.createElement("div");
372 div2
.className
= "met_docs";
373 div
.appendChild(div2
);
377 div2
.appendChild(document
.createTextNode(p
+" "));
378 var a
= document
.createElement("a");
379 a
.setAttribute("href",helpRoot
+"/"+v
.path
+".html#"+m
.pfx
+mname
);
380 a
.innerHTML
= v
.title
;
383 div2
.appendChild(document
.createTextNode("+"));
384 div2
.appendChild(document
.createTextNode(" - "+v
.summary
+" "));
385 var n
= document
.createElement("span");
386 n
.className
= "soft";
387 var res
= "["+v
.path
.split("/")[0];
388 if(v
.installed
=="extension")
390 else if(v
.installed
=="missing")
391 res
+= " - missing!";
392 n
.innerHTML
= res
+"]";
394 if(v
.path
=="Classes/Object") {
395 var n
= document
.createElement("div");
396 n
.className
= "met_subclasses";
397 n
.appendChild(document
.createTextNode("Inherited by: All classes"));
400 if(v
.subclasses
&& v
.subclasses
.length
>0) {
402 if(subclassCache
[v
.path
]) {
403 n
= subclassCache
[v
.path
].cloneNode(true);
405 var subs
= getSubClasses(v
);
406 n
= document
.createElement("div");
408 n
.className
= "met_subclasses";
409 n
.appendChild(document
.createTextNode("Inherited by: "));
410 for(var j
=0;j
<subs
.length
;j
++) {
411 var a
= document
.createElement("a");
412 a
.setAttribute("href", helpRoot
+"/Classes/"+subs
[j
]+".html");
413 if(j
==10 && subs
.length
> 14) {
414 m
= document
.createElement("span");
415 m
.className
= "hiddenspan";
416 m
.style
.display
= "none";
418 var a2
= document
.createElement("a");
419 a2
.setAttribute("href","#");
420 a2
.className
= "seemore";
421 a2
.innerHTML
= "… see "+(subs
.length
-10)+" more";
422 n
.appendChild(document
.createTextNode(" "));
426 m
.appendChild(document
.createTextNode(", "));
427 a
.innerHTML
= subs
[j
];
430 subclassCache
[v
.path
] = n
;
433 var a
= n
.getElementsByClassName("seemore")[0];
435 var m
= n
.getElementsByClassName("hiddenspan")[0];
436 a
.onclick = function() {
437 m
.style
.display
= "";
438 a
.parentNode
.removeChild(a
);
448 node
.appendChild(div
);
450 if(Date
.now()-now
> 200) {
458 function randomDoc() {
459 while(node
.hasChildNodes())
460 node
.removeChild(node
.lastChild
);
468 document
.getElementById("search_input").value
= "";
471 for(var k
in docmap
) {
472 if(docmap
.hasOwnProperty(k
))
473 list
.push(docmap
[k
]);
476 for(var i
=0;i
<100;i
++) {
477 var v
= list
[Math
.floor(Math
.random()*list
.length
)];
478 if(! /Undocumented classes/.test(v
.categories
)) {
479 docs
= [[v
.path
.split("/")[0],[v
]]];
486 document
.getElementById("search_count").innerHTML
= "random document";
489 function doSearch() {
492 while(node
.hasChildNodes())
493 node
.removeChild(node
.lastChild
);
507 if(!document
.getElementById("check_regexp").checked
) {
508 str
= escape_regexp(str
); //escape special chars
509 if(document
.getElementById("check_word").checked
)
510 str
= "\\b" + str
+ "\\b";
511 if(document
.getElementById("check_prefix").checked
)
513 if(document
.getElementById("check_suffix").checked
)
516 re
= RegExp(str
,document
.getElementById("ignore_case").checked
?"i":"");
518 document
.getElementById("search_count").innerHTML
= "Invalid regexp";
519 document
.getElementById("search_results").innerHTML
= err
;
525 for(var k
in docmap
) {
527 var x
= v
.path
.split("/");
529 var file
= x
[x
.length
-1];
531 if(matchDoc(v
,file
,folder
,re
)) {
532 if(!docs
.hasOwnProperty(folder
))
534 docs
[folder
].push(v
);
538 var tmp
= []; for(var k
in docs
) tmp
.push(
539 [k
, docs
[k
].sort(function(a
,b
) {
549 var order
= { Classes
:1, Reference
:2, Overviews
:3, Guides
:4, Tutorials
:5 };
550 docs
= tmp
.sort(function(a
,b
) {
551 a
= order
[a
[0]] || 10;
552 b
= order
[b
[0]] || 10;
561 var include_ext_classes
= document
.getElementById("check_extensions").checked
;
562 var filter_val
= filter
.value
;
563 if(document
.getElementById("check_methods").checked
) {
564 for(var mname
in methods
) {
565 var m
= methods
[mname
];
568 for(var i
=0;i
<m
.length
;i
++) {
571 if(doc
.installed
== "extension" && !include_ext_classes
) continue;
572 if(filter_val
!= "all" && doc
.path
.split("/")[0].toLowerCase() != filter_val
) continue
576 mets
.push([mname
,c
]);
587 document
.getElementById("search_count").innerHTML
= count
+" results";
590 function delayed_update() {
591 if(input
!= newinput
) {
594 } else if(inProgress
) {
598 window
.onhashchange
= checkHash
;
603 <ul id=
"menubar"></ul>
604 <body onload=
"onLoad()">
605 <div class='contents'
>
607 <div id='label'
>SuperCollider
</div>
609 <div id='summary'
>Search all documents
</div>
611 <div id=
"search_checks0">
613 <select id=
"menu_filter">
614 <option SELECTED
value=
"all">All documents
</option>
615 <option value=
"classes">Classes only
</option>
616 <option value=
"reference">Reference only
</option>
617 <option value=
"guides">Guides only
</option>
618 <option value=
"tutorials">Tutorials only
</option>
619 <option value=
"overviews">Overviews only
</option>
620 <option value=
"other">Other only
</option>
622 <input type=
"checkbox" id=
"check_extensions" checked=
"true">Include extensions
</input>
625 <div id=
"search_box">
626 Search text:
<input type=
"text" id=
"search_input" value=
"" size=
"40" onkeyup=
"SearchKeyPressed(this)"/>
629 <table id=
"search_settings">
632 <div id=
"search_checks">
633 <input type=
"checkbox" id=
"ignore_case" checked=
"true">Ignore case
</input>
634 <input class=
"nonregex" type=
"checkbox" id=
"check_word">Whole word
</input>
635 <input class=
"nonregex" type=
"checkbox" id=
"check_prefix">Starts with
</input>
636 <input class=
"nonregex" type=
"checkbox" id=
"check_suffix">Ends with
</input>
637 <input type=
"checkbox" id=
"check_regexp">Regexp
</input>
642 <div id=
"search_checks">
643 <input type=
"checkbox" id=
"check_title" checked=
"true">Title/Class
</input>
644 <input type=
"checkbox" id=
"check_summary" checked=
"true">Summary
</input>
645 <input type=
"checkbox" id=
"check_categories">Categories
</input>
646 <input type=
"checkbox" id=
"check_methods" checked=
"true">Methods
</input>
649 <div id=
"random"><a href=
"javascript:randomDoc()">random page
</a></div>
650 <div id=
"search_count">0 results
</div>
651 <div id=
"search_results"></div>
652 <div id=
"js_error"></div>