mirror of https://github.com/buggins/dlangui.git
121 lines
3.1 KiB
JavaScript
121 lines
3.1 KiB
JavaScript
function setupDdox()
|
|
{
|
|
$(".tree-view").children(".package").click(toggleTree);
|
|
$(".tree-view.collapsed").children("ul").hide();
|
|
$("#symbolSearch").attr("tabindex", "1000");
|
|
}
|
|
|
|
function toggleTree()
|
|
{
|
|
node = $(this).parent();
|
|
node.toggleClass("collapsed");
|
|
if( node.hasClass("collapsed") ){
|
|
node.children("ul").hide();
|
|
} else {
|
|
node.children("ul").show();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
var searchCounter = 0;
|
|
var lastSearchString = "";
|
|
|
|
function performSymbolSearch(maxlen)
|
|
{
|
|
if (maxlen === 'undefined') maxlen = 26;
|
|
|
|
var searchstring = $("#symbolSearch").val().toLowerCase();
|
|
|
|
if (searchstring == lastSearchString) return;
|
|
lastSearchString = searchstring;
|
|
|
|
var scnt = ++searchCounter;
|
|
$('#symbolSearchResults').hide();
|
|
$('#symbolSearchResults').empty();
|
|
|
|
var terms = $.trim(searchstring).split(/\s+/);
|
|
if (terms.length == 0 || (terms.length == 1 && terms[0].length < 2)) return;
|
|
|
|
var results = [];
|
|
for (i in symbols) {
|
|
var sym = symbols[i];
|
|
var all_match = true;
|
|
for (j in terms)
|
|
if (sym.name.toLowerCase().indexOf(terms[j]) < 0) {
|
|
all_match = false;
|
|
break;
|
|
}
|
|
if (!all_match) continue;
|
|
|
|
results.push(sym);
|
|
}
|
|
|
|
function compare(a, b) {
|
|
// prefer non-deprecated matches
|
|
var adep = a.attributes.indexOf("deprecated") >= 0;
|
|
var bdep = b.attributes.indexOf("deprecated") >= 0;
|
|
if (adep != bdep) return adep - bdep;
|
|
|
|
// normalize the names
|
|
var aname = a.name.toLowerCase();
|
|
var bname = b.name.toLowerCase();
|
|
|
|
var anameparts = aname.split(".");
|
|
var bnameparts = bname.split(".");
|
|
|
|
var asname = anameparts[anameparts.length-1];
|
|
var bsname = bnameparts[bnameparts.length-1];
|
|
|
|
// prefer exact matches
|
|
var aexact = terms.indexOf(asname) >= 0;
|
|
var bexact = terms.indexOf(bsname) >= 0;
|
|
if (aexact != bexact) return bexact - aexact;
|
|
|
|
// prefer elements with less nesting
|
|
if (anameparts.length < bnameparts.length) return -1;
|
|
if (anameparts.length > bnameparts.length) return 1;
|
|
|
|
// prefer matches with a shorter name
|
|
if (asname.length < bsname.length) return -1;
|
|
if (asname.length > bsname.length) return 1;
|
|
|
|
// sort the rest alphabetically
|
|
if (aname < bname) return -1;
|
|
if (aname > bname) return 1;
|
|
return 0;
|
|
}
|
|
|
|
results.sort(compare);
|
|
|
|
for (i = 0; i < results.length && i < 100; i++) {
|
|
var sym = results[i];
|
|
|
|
var el = $(document.createElement("li"));
|
|
el.addClass(sym.kind);
|
|
for (j in sym.attributes)
|
|
el.addClass(sym.attributes[j]);
|
|
|
|
var name = sym.name;
|
|
|
|
// compute a length limited representation of the full name
|
|
var nameparts = name.split(".");
|
|
var np = nameparts.length-1;
|
|
var shortname = "." + nameparts[np];
|
|
while (np > 0 && nameparts[np-1].length + shortname.length <= maxlen) {
|
|
np--;
|
|
shortname = "." + nameparts[np] + shortname;
|
|
}
|
|
if (np > 0) shortname = ".." + shortname;
|
|
else shortname = shortname.substr(1);
|
|
|
|
el.append('<a href="'+symbolSearchRootDir+sym.path+'" title="'+name+'" tabindex="1001">'+shortname+'</a>');
|
|
$('#symbolSearchResults').append(el);
|
|
}
|
|
|
|
if (results.length > 100) {
|
|
$('#symbolSearchResults').append("<li>…"+(results.length-100)+" additional results</li>");
|
|
}
|
|
|
|
$('#symbolSearchResults').show();
|
|
}
|