diff --git a/css/ddox.css b/css/ddox.css index 4295bada76..b05af7ea0f 100644 --- a/css/ddox.css +++ b/css/ddox.css @@ -53,52 +53,6 @@ a.inherited:after { content: url(../images/ddox/inherited.png); padding-left: 3p #symbolSearch { width: 112pt; } -#symbolSearchResults { - background: #F5F5F5; - border: 1px solid #CCC; - font-size: small; - list-style: none; - margin: 0; - margin-top: 5px; - padding: 0.3em; - position: absolute; - right: -1px; - top: 100%; - width: 100%; - z-index: 1000; -} - -#symbolSearchResults li { - background-repeat: no-repeat; - background-position: left center; - padding-left: 18px; -} - -#top #symbolSearchResults li a { - color: #B03931; - height: auto; - padding: 0; -} -#symbolSearchResults li a:hover -{ - background: transparent; - color: #742620; - text-decoration: underline; -} - -#symbolSearchResults .deprecated a { color: gray; } -#symbolSearchResults .module { background-image: url(../images/ddox/module.png); } -#symbolSearchResults .functiondeclaration { background-image: url(../images/ddox/function.png); } -#symbolSearchResults .classdeclaration { background-image: url(../images/ddox/class.png); } -#symbolSearchResults .interfacedeclaration { background-image: url(../images/ddox/interface.png); } -#symbolSearchResults .structdeclaration { background-image: url(../images/ddox/struct.png); } -#symbolSearchResults .variabledeclaration { background-image: url(../images/ddox/variable.png); } -#symbolSearchResults .property { background-image: url(../images/ddox/property.png); } -#symbolSearchResults .enumdeclaration { background-image: url(../images/ddox/enum.png); } -#symbolSearchResults .enummemberdeclaration { background-image: url(../images/ddox/enummember.png); } -#symbolSearchResults .aliasdeclaration { background-image: url(../images/ddox/alias.png); } -#symbolSearchResults .templatedeclaration { background-image: url(../images/ddox/template.png); } - /* Don't show simple handcrafted cheat sheets. DDOX does a good job generating * them. */ table.simple-cheatsheet { display: none; } diff --git a/css/style.css b/css/style.css index f7eb18deb0..f1f56a3f6e 100644 --- a/css/style.css +++ b/css/style.css @@ -2134,3 +2134,53 @@ Custom modifications to the navigation menu margin-bottom: 1em; padding-top: 0.5em; } + + + +#symbolSearchResults { + background: #F5F5F5; + border: 1px solid #CCC; + font-size: small; + list-style: none; + margin: 0; + margin-top: 5px; + padding: 0.3em; + position: absolute; + right: -1px; + top: 100%; + width: 100%; + z-index: 1000; +} + +#symbolSearchResults li { + background-repeat: no-repeat; + background-position: left center; + padding-left: 18px; +} + +#top #symbolSearchResults li a { + color: #B03931; + height: auto; + padding: 0; +} +#symbolSearchResults li a:hover +{ + background: transparent; + color: #742620; + text-decoration: underline; +} + +#symbolSearchResults .deprecated a { color: gray; } +#symbolSearchResults .module { background-image: url(../images/ddox/module.png); } +#symbolSearchResults .functiondeclaration { background-image: url(../images/ddox/function.png); } +#symbolSearchResults .classdeclaration { background-image: url(../images/ddox/class.png); } +#symbolSearchResults .interfacedeclaration { background-image: url(../images/ddox/interface.png); } +#symbolSearchResults .structdeclaration { background-image: url(../images/ddox/struct.png); } +#symbolSearchResults .variabledeclaration { background-image: url(../images/ddox/variable.png); } +#symbolSearchResults .property { background-image: url(../images/ddox/property.png); } +#symbolSearchResults .enumdeclaration { background-image: url(../images/ddox/enum.png); } +#symbolSearchResults .enummemberdeclaration { background-image: url(../images/ddox/enummember.png); } +#symbolSearchResults .aliasdeclaration { background-image: url(../images/ddox/alias.png); } +#symbolSearchResults .templatedeclaration { background-image: url(../images/ddox/template.png); } + + diff --git a/dlang.org.ddoc b/dlang.org.ddoc index 375ceb9fb4..91a699cec4 100644 --- a/dlang.org.ddoc +++ b/dlang.org.ddoc @@ -37,7 +37,9 @@ COMMON_SCRIPTS = _= COMMON_SCRIPTS_DLANG = $(SCRIPTLOAD $(STATIC js/codemirror-compressed.js)) + $(SCRIPTLOAD $(STATIC library/symbols.js)) $(SCRIPTLOAD $(STATIC js/run.js)) + $(SCRIPTLOAD $(STATIC js/ddox.js)) _= COMPATIBILITY_BOX_DEPRECATED = $(MESSAGE_BOX red, $(B Deprecated) - $0) @@ -411,6 +413,7 @@ SEARCH_BOX= ))$(SPANID search-submit, ) +
) SEARCH_OPTIONS_EXTRA= _= diff --git a/js/ddox.js b/js/ddox.js index eb3bf78e2f..83989bef60 100644 --- a/js/ddox.js +++ b/js/ddox.js @@ -34,7 +34,10 @@ function performSymbolSearch(maxlen) { if (maxlen === 'undefined') maxlen = 26; - var searchstring = $("#symbolSearch").val().toLowerCase(); + var el = $("#symbolSearch"); + if (el.length === 0) el = $("#q"); + + var searchstring = el.val().toLowerCase(); if (searchstring == lastSearchString) return; lastSearchString = searchstring; @@ -118,7 +121,17 @@ function performSymbolSearch(maxlen) if (np > 0) shortname = ".." + shortname; else shortname = shortname.substr(1); - el.append(''+shortname+''); + if (typeof(symbolSearchRootDir) === "undefined") { + // translate ddox path into ddoc path + var hashName = sym.name.replace(/(.*)[.](.*)$/g, "$2") + var path = sym.path.slice(0, -5); + path = path.replace(/(.*)\/(.*)$/g, "$1.html"); + path = path.replace(/\//g, "_").replace("._", ""); + path = path + "#" + hashName; + el.append(''+shortname+''); + } else { + el.append(''+shortname+''); + } $('#symbolSearchResults').append(el); } diff --git a/js/dlang.js b/js/dlang.js index 2ff4b721d5..1daba752e7 100644 --- a/js/dlang.js +++ b/js/dlang.js @@ -74,5 +74,83 @@ elem.show(); } }); + + var search = $("#q") + search.attr("placeholder", "API Search"); + search.attr("autocomplete", "off"); + var onChange = function(){ + performChmgenSearch(80); + }; + search.on("change", onChange); + search.on("keypress", onChange); + search.on("input", onChange); + }); + jQuery.get("../js/d-tags-prerelease.json", function(d){ + chmgenSymbols = d; }); })(jQuery); + +var chmgenSymbols = undefined; + +function performChmgenSearch(maxlen) +{ + // not loaded yet + if (!chmgenSymbols) return; + if (maxlen === 'undefined') maxlen = 26; + + var el = $("#symbolSearch"); + if (el.length === 0) el = $("#q"); + + var searchstring = el.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 (var key in chmgenSymbols) { + var sym = chmgenSymbols[key]; + var all_match = true; + for (var j in terms) + if (key.toLowerCase().indexOf(terms[j]) < 0) { + all_match = false; + break; + } + if (!all_match) continue; + + sym.forEach(function(e){ + results.push({ + name: key, + href: e, + }); + }); + } + + console.log(results); + + 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; + var shortname = sym.name; + el.append(''+shortname+''); + $('#symbolSearchResults').append(el); + } + + if (results.length > 100) { + $('#symbolSearchResults').append("