authorgravatar for pierre@jow.frPierre Guilleminot <pierre@jow.fr> 2020-04-12 23:17:20+02:00
committergravatar for pierre@jow.frPierre Guilleminot <pierre@jow.fr> 2020-04-12 23:17:20+02:00
log297452cf679029feddc18aa41697740c8b0db5aa
tree5563195080796594d68354455136f5023af39ab5
parentf76d59ef761746a3ea73aa9296dec146672d1dc2

improve search perf: trim search results


2 files changed, 25 insertions(+), 0 deletions(-)

lib/std/special/docs/index.html+1
......@@ -576,6 +576,7 @@
576576 <div id="sectSearchResults" class="hidden">
577577 <h2>Search Results</h2>
578578 <ul id="listSearchResults"></ul>
579 <p id="sectSearchAllResultsLink" class="hidden"><a href="">show all results</a></p>
579580 </div>
580581 <div id="sectSearchNoResults" class="hidden">
581582 <h2>No Results Found</h2>
lib/std/special/docs/main.js+24
......@@ -35,6 +35,7 @@
3535 var domSectSearchResults = document.getElementById("sectSearchResults");
3636 var domListSearchResults = document.getElementById("listSearchResults");
3737 var domSectSearchNoResults = document.getElementById("sectSearchNoResults");
38 var domSectSearchAllResultsLink = document.getElementById("sectSearchAllResultsLink");
3839 var domSectInfo = document.getElementById("sectInfo");
3940 var domTdTarget = document.getElementById("tdTarget");
4041 var domTdZigVer = document.getElementById("tdZigVer");
......@@ -42,6 +43,7 @@
4243 var domHelpModal = document.getElementById("helpDialog");
4344
4445 var searchTimer = null;
46 var searchTrimResults = true;
4547 var escapeHtmlReplacements = { "&": "&amp;", '"': "&quot;", "<": "&lt;", ">": "&gt;" };
4648
4749 var typeKinds = indexTypeKinds();
......@@ -82,6 +84,8 @@
8284 var nodesToCallsMap = indexNodesToCalls();
8385
8486 domSearch.addEventListener('keydown', onSearchKeyDown, false);
87 domSectSearchAllResultsLink.addEventListener('click', onClickSearchShowAllResults, false);
88
8589 window.addEventListener('hashchange', onHashChange, false);
8690 window.addEventListener('keydown', onWindowKeyDown, false);
8791 onHashChange();
......@@ -113,6 +117,7 @@
113117 domSectFields.classList.add("hidden");
114118 domSectSearchResults.classList.add("hidden");
115119 domSectSearchNoResults.classList.add("hidden");
120 domSectSearchAllResultsLink.classList.add("hidden");
116121 domSectInfo.classList.add("hidden");
117122 domHdrName.classList.add("hidden");
118123 domSectNav.classList.add("hidden");
......@@ -1810,6 +1815,13 @@
18101815 domHelpModal.focus();
18111816 }
18121817
1818 function onClickSearchShowAllResults(ev) {
1819 ev.preventDefault();
1820 ev.stopPropagation();
1821 searchTrimResults = false;
1822 onHashChange();
1823 }
1824
18131825 function clearAsyncSearch() {
18141826 if (searchTimer != null) {
18151827 clearTimeout(searchTimer);
......@@ -1819,6 +1831,7 @@
18191831
18201832 function startAsyncSearch() {
18211833 clearAsyncSearch();
1834 searchTrimResults = true;
18221835 searchTimer = setTimeout(startSearch, 10);
18231836 }
18241837 function startSearch() {
......@@ -1897,6 +1910,13 @@
18971910 return operatorCompare(a.decl.name, b.decl.name);
18981911 });
18991912
1913 var searchTrimmed = false
1914 var searchTrimResultsMaxItems = 200
1915 if (searchTrimResults && matchedItems.length > searchTrimResultsMaxItems) {
1916 matchedItems = matchedItems.slice(0, searchTrimResultsMaxItems)
1917 searchTrimmed = true
1918 }
1919
19001920 var domListSearchResultsFragment = createDomListFragment(matchedItems.length, '<li><a href="#"></a></li>');
19011921 for (var i = 0; i < matchedItems.length; i += 1) {
19021922 var liDom = domListSearchResultsFragment.children[i];
......@@ -1911,6 +1931,10 @@
19111931 domListSearchResults.appendChild(domListSearchResultsFragment);
19121932 domSectSearchResults.classList.remove("hidden");
19131933
1934 if (searchTrimmed) {
1935 domSectSearchAllResultsLink.classList.remove("hidden");
1936 }
1937
19141938 renderSearchCursor();
19151939 } else {
19161940 domSectSearchNoResults.classList.remove("hidden");