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 @@...@@ -576,6 +576,7 @@
576 <div id="sectSearchResults" class="hidden">576 <div id="sectSearchResults" class="hidden">
577 <h2>Search Results</h2>577 <h2>Search Results</h2>
578 <ul id="listSearchResults"></ul>578 <ul id="listSearchResults"></ul>
579 <p id="sectSearchAllResultsLink" class="hidden"><a href="">show all results</a></p>
579 </div>580 </div>
580 <div id="sectSearchNoResults" class="hidden">581 <div id="sectSearchNoResults" class="hidden">
581 <h2>No Results Found</h2>582 <h2>No Results Found</h2>
lib/std/special/docs/main.js+24
...@@ -35,6 +35,7 @@...@@ -35,6 +35,7 @@
35 var domSectSearchResults = document.getElementById("sectSearchResults");35 var domSectSearchResults = document.getElementById("sectSearchResults");
36 var domListSearchResults = document.getElementById("listSearchResults");36 var domListSearchResults = document.getElementById("listSearchResults");
37 var domSectSearchNoResults = document.getElementById("sectSearchNoResults");37 var domSectSearchNoResults = document.getElementById("sectSearchNoResults");
38 var domSectSearchAllResultsLink = document.getElementById("sectSearchAllResultsLink");
38 var domSectInfo = document.getElementById("sectInfo");39 var domSectInfo = document.getElementById("sectInfo");
39 var domTdTarget = document.getElementById("tdTarget");40 var domTdTarget = document.getElementById("tdTarget");
40 var domTdZigVer = document.getElementById("tdZigVer");41 var domTdZigVer = document.getElementById("tdZigVer");
...@@ -42,6 +43,7 @@...@@ -42,6 +43,7 @@
42 var domHelpModal = document.getElementById("helpDialog");43 var domHelpModal = document.getElementById("helpDialog");
4344
44 var searchTimer = null;45 var searchTimer = null;
46 var searchTrimResults = true;
45 var escapeHtmlReplacements = { "&": "&amp;", '"': "&quot;", "<": "&lt;", ">": "&gt;" };47 var escapeHtmlReplacements = { "&": "&amp;", '"': "&quot;", "<": "&lt;", ">": "&gt;" };
4648
47 var typeKinds = indexTypeKinds();49 var typeKinds = indexTypeKinds();
...@@ -82,6 +84,8 @@...@@ -82,6 +84,8 @@
82 var nodesToCallsMap = indexNodesToCalls();84 var nodesToCallsMap = indexNodesToCalls();
8385
84 domSearch.addEventListener('keydown', onSearchKeyDown, false);86 domSearch.addEventListener('keydown', onSearchKeyDown, false);
87 domSectSearchAllResultsLink.addEventListener('click', onClickSearchShowAllResults, false);
88
85 window.addEventListener('hashchange', onHashChange, false);89 window.addEventListener('hashchange', onHashChange, false);
86 window.addEventListener('keydown', onWindowKeyDown, false);90 window.addEventListener('keydown', onWindowKeyDown, false);
87 onHashChange();91 onHashChange();
...@@ -113,6 +117,7 @@...@@ -113,6 +117,7 @@
113 domSectFields.classList.add("hidden");117 domSectFields.classList.add("hidden");
114 domSectSearchResults.classList.add("hidden");118 domSectSearchResults.classList.add("hidden");
115 domSectSearchNoResults.classList.add("hidden");119 domSectSearchNoResults.classList.add("hidden");
120 domSectSearchAllResultsLink.classList.add("hidden");
116 domSectInfo.classList.add("hidden");121 domSectInfo.classList.add("hidden");
117 domHdrName.classList.add("hidden");122 domHdrName.classList.add("hidden");
118 domSectNav.classList.add("hidden");123 domSectNav.classList.add("hidden");
...@@ -1810,6 +1815,13 @@...@@ -1810,6 +1815,13 @@
1810 domHelpModal.focus();1815 domHelpModal.focus();
1811 }1816 }
18121817
1818 function onClickSearchShowAllResults(ev) {
1819 ev.preventDefault();
1820 ev.stopPropagation();
1821 searchTrimResults = false;
1822 onHashChange();
1823 }
1824
1813 function clearAsyncSearch() {1825 function clearAsyncSearch() {
1814 if (searchTimer != null) {1826 if (searchTimer != null) {
1815 clearTimeout(searchTimer);1827 clearTimeout(searchTimer);
...@@ -1819,6 +1831,7 @@...@@ -1819,6 +1831,7 @@
18191831
1820 function startAsyncSearch() {1832 function startAsyncSearch() {
1821 clearAsyncSearch();1833 clearAsyncSearch();
1834 searchTrimResults = true;
1822 searchTimer = setTimeout(startSearch, 10);1835 searchTimer = setTimeout(startSearch, 10);
1823 }1836 }
1824 function startSearch() {1837 function startSearch() {
...@@ -1897,6 +1910,13 @@...@@ -1897,6 +1910,13 @@
1897 return operatorCompare(a.decl.name, b.decl.name);1910 return operatorCompare(a.decl.name, b.decl.name);
1898 });1911 });
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
1900 var domListSearchResultsFragment = createDomListFragment(matchedItems.length, '<li><a href="#"></a></li>');1920 var domListSearchResultsFragment = createDomListFragment(matchedItems.length, '<li><a href="#"></a></li>');
1901 for (var i = 0; i < matchedItems.length; i += 1) {1921 for (var i = 0; i < matchedItems.length; i += 1) {
1902 var liDom = domListSearchResultsFragment.children[i];1922 var liDom = domListSearchResultsFragment.children[i];
...@@ -1911,6 +1931,10 @@...@@ -1911,6 +1931,10 @@
1911 domListSearchResults.appendChild(domListSearchResultsFragment);1931 domListSearchResults.appendChild(domListSearchResultsFragment);
1912 domSectSearchResults.classList.remove("hidden");1932 domSectSearchResults.classList.remove("hidden");
19131933
1934 if (searchTrimmed) {
1935 domSectSearchAllResultsLink.classList.remove("hidden");
1936 }
1937
1914 renderSearchCursor();1938 renderSearchCursor();
1915 } else {1939 } else {
1916 domSectSearchNoResults.classList.remove("hidden");1940 domSectSearchNoResults.classList.remove("hidden");