| ... | ... | @@ -35,6 +35,7 @@ |
| 35 | 35 | var domSectSearchResults = document.getElementById("sectSearchResults"); |
| 36 | 36 | var domListSearchResults = document.getElementById("listSearchResults"); |
| 37 | 37 | var domSectSearchNoResults = document.getElementById("sectSearchNoResults"); |
| 38 | var domSectSearchAllResultsLink = document.getElementById("sectSearchAllResultsLink"); |
| 38 | 39 | var domSectInfo = document.getElementById("sectInfo"); |
| 39 | 40 | var domTdTarget = document.getElementById("tdTarget"); |
| 40 | 41 | var domTdZigVer = document.getElementById("tdZigVer"); |
| ... | ... | @@ -42,6 +43,7 @@ |
| 42 | 43 | var domHelpModal = document.getElementById("helpDialog"); |
| 43 | 44 | |
| 44 | 45 | var searchTimer = null; |
| 46 | var searchTrimResults = true; |
| 45 | 47 | var escapeHtmlReplacements = { "&": "&amp;", '"': "&quot;", "<": "&lt;", ">": "&gt;" }; |
| 46 | 48 | |
| 47 | 49 | var typeKinds = indexTypeKinds(); |
| ... | ... | @@ -82,6 +84,8 @@ |
| 82 | 84 | var nodesToCallsMap = indexNodesToCalls(); |
| 83 | 85 | |
| 84 | 86 | domSearch.addEventListener('keydown', onSearchKeyDown, false); |
| 87 | domSectSearchAllResultsLink.addEventListener('click', onClickSearchShowAllResults, false); |
| 88 | |
| 85 | 89 | window.addEventListener('hashchange', onHashChange, false); |
| 86 | 90 | window.addEventListener('keydown', onWindowKeyDown, false); |
| 87 | 91 | onHashChange(); |
| ... | ... | @@ -113,6 +117,7 @@ |
| 113 | 117 | domSectFields.classList.add("hidden"); |
| 114 | 118 | domSectSearchResults.classList.add("hidden"); |
| 115 | 119 | domSectSearchNoResults.classList.add("hidden"); |
| 120 | domSectSearchAllResultsLink.classList.add("hidden"); |
| 116 | 121 | domSectInfo.classList.add("hidden"); |
| 117 | 122 | domHdrName.classList.add("hidden"); |
| 118 | 123 | domSectNav.classList.add("hidden"); |
| ... | ... | @@ -256,13 +261,15 @@ |
| 256 | 261 | if (fnObj.combined === undefined) fnObj.combined = allCompTimeFnCallsResult(calls); |
| 257 | 262 | if (fnObj.combined != null) renderContainer(fnObj.combined); |
| 258 | 263 | |
| 259 | | resizeDomList(domListFnExamples, calls.length, '<li></li>'); |
| 264 | var domListFnExamplesFragment = createDomListFragment(calls.length, '<li></li>'); |
| 260 | 265 | |
| 261 | 266 | for (var callI = 0; callI < calls.length; callI += 1) { |
| 262 | | var liDom = domListFnExamples.children[callI]; |
| 267 | var liDom = domListFnExamplesFragment.children[callI]; |
| 263 | 268 | liDom.innerHTML = getCallHtml(fnDecl, calls[callI]); |
| 264 | 269 | } |
| 265 | 270 | |
| 271 | domListFnExamples.innerHTML = ""; |
| 272 | domListFnExamples.appendChild(domListFnExamplesFragment); |
| 266 | 273 | domFnExamples.classList.remove("hidden"); |
| 267 | 274 | } else if (instantiations != null) { |
| 268 | 275 | // TODO |
| ... | ... | @@ -303,7 +310,7 @@ |
| 303 | 310 | return; |
| 304 | 311 | } |
| 305 | 312 | |
| 306 | | resizeDomList(domListParams, docCount, '<div></div>'); |
| 313 | var domListParamsFragment = createDomListFragment(docCount, '<div></div>'); |
| 307 | 314 | var domIndex = 0; |
| 308 | 315 | |
| 309 | 316 | for (var i = 0; i < fields.length; i += 1) { |
| ... | ... | @@ -312,7 +319,7 @@ |
| 312 | 319 | if (fieldNode.docs == null) { |
| 313 | 320 | continue; |
| 314 | 321 | } |
| 315 | | var divDom = domListParams.children[domIndex]; |
| 322 | var divDom = domListParamsFragment.children[domIndex]; |
| 316 | 323 | domIndex += 1; |
| 317 | 324 | var argTypeIndex = typeObj.args[i]; |
| 318 | 325 | |
| ... | ... | @@ -333,12 +340,15 @@ |
| 333 | 340 | } |
| 334 | 341 | divDom.innerHTML = html; |
| 335 | 342 | } |
| 343 | |
| 344 | domListParams.innerHTML = ""; |
| 345 | domListParams.appendChild(domListParamsFragment); |
| 336 | 346 | domSectParams.classList.remove("hidden"); |
| 337 | 347 | } |
| 338 | 348 | |
| 339 | 349 | function renderNav() { |
| 340 | 350 | var len = curNav.pkgNames.length + curNav.declNames.length; |
| 341 | | resizeDomList(domListNav, len, '<li><a href="#"></a></li>'); |
| 351 | var domListNavFragment = createDomListFragment(len, '<li><a href="#"></a></li>'); |
| 342 | 352 | var list = []; |
| 343 | 353 | var hrefPkgNames = []; |
| 344 | 354 | var hrefDeclNames = []; |
| ... | ... | @@ -358,7 +368,7 @@ |
| 358 | 368 | } |
| 359 | 369 | |
| 360 | 370 | for (var i = 0; i < list.length; i += 1) { |
| 361 | | var liDom = domListNav.children[i]; |
| 371 | var liDom = domListNavFragment.children[i]; |
| 362 | 372 | var aDom = liDom.children[0]; |
| 363 | 373 | aDom.textContent = list[i].name; |
| 364 | 374 | aDom.setAttribute('href', list[i].link); |
| ... | ... | @@ -369,6 +379,8 @@ |
| 369 | 379 | } |
| 370 | 380 | } |
| 371 | 381 | |
| 382 | domListNav.innerHTML = ""; |
| 383 | domListNav.appendChild(domListNavFragment); |
| 372 | 384 | domSectNav.classList.remove("hidden"); |
| 373 | 385 | } |
| 374 | 386 | |
| ... | ... | @@ -401,9 +413,9 @@ |
| 401 | 413 | }); |
| 402 | 414 | |
| 403 | 415 | if (list.length !== 0) { |
| 404 | | resizeDomList(domListPkgs, list.length, '<li><a href="#"></a></li>'); |
| 416 | var domListPkgsFragment = createDomListFragment(list.length, '<li><a href="#"></a></li>'); |
| 405 | 417 | for (var i = 0; i < list.length; i += 1) { |
| 406 | | var liDom = domListPkgs.children[i]; |
| 418 | var liDom = domListPkgsFragment.children[i]; |
| 407 | 419 | var aDom = liDom.children[0]; |
| 408 | 420 | aDom.textContent = list[i].name; |
| 409 | 421 | aDom.setAttribute('href', navLinkPkg(list[i].pkg)); |
| ... | ... | @@ -414,6 +426,8 @@ |
| 414 | 426 | } |
| 415 | 427 | } |
| 416 | 428 | |
| 429 | domListPkgs.innerHTML = ""; |
| 430 | domListPkgs.appendChild(domListPkgsFragment); |
| 417 | 431 | domSectPkgs.classList.remove("hidden"); |
| 418 | 432 | } |
| 419 | 433 | } |
| ... | ... | @@ -454,29 +468,10 @@ |
| 454 | 468 | return navLink(curNav.pkgNames, declNamesCopy); |
| 455 | 469 | } |
| 456 | 470 | |
| 457 | | function resizeDomListDl(dlDom, desiredLen) { |
| 458 | | // add the missing dom entries |
| 459 | | var i, ev; |
| 460 | | for (i = dlDom.childElementCount / 2; i < desiredLen; i += 1) { |
| 461 | | dlDom.insertAdjacentHTML('beforeend', '<dt></dt><dd></dd>'); |
| 462 | | } |
| 463 | | // remove extra dom entries |
| 464 | | while (desiredLen < dlDom.childElementCount / 2) { |
| 465 | | dlDom.removeChild(dlDom.lastChild); |
| 466 | | dlDom.removeChild(dlDom.lastChild); |
| 467 | | } |
| 468 | | } |
| 469 | | |
| 470 | | function resizeDomList(listDom, desiredLen, templateHtml) { |
| 471 | | // add the missing dom entries |
| 472 | | var i, ev; |
| 473 | | for (i = listDom.childElementCount; i < desiredLen; i += 1) { |
| 474 | | listDom.insertAdjacentHTML('beforeend', templateHtml); |
| 475 | | } |
| 476 | | // remove extra dom entries |
| 477 | | while (desiredLen < listDom.childElementCount) { |
| 478 | | listDom.removeChild(listDom.lastChild); |
| 479 | | } |
| 471 | function createDomListFragment(desiredLen, templateHtml) { |
| 472 | var domTemplate = document.createElement("template"); |
| 473 | domTemplate.innerHTML = templateHtml.repeat(desiredLen); |
| 474 | return domTemplate.content; |
| 480 | 475 | } |
| 481 | 476 | |
| 482 | 477 | function typeIndexName(typeIndex, wantHtml, wantLink, fnDecl, linkFnNameDecl) { |
| ... | ... | @@ -831,10 +826,10 @@ |
| 831 | 826 | return operatorCompare(a.err.name.toLowerCase(), b.err.name.toLowerCase()); |
| 832 | 827 | }); |
| 833 | 828 | |
| 834 | | resizeDomListDl(domListFnErrors, errorList.length); |
| 829 | var domListFnErrorsFragment = createDomListFragment(errorList.length, "<dt></dt><dd></dd>"); |
| 835 | 830 | for (var i = 0; i < errorList.length; i += 1) { |
| 836 | | var nameTdDom = domListFnErrors.children[i * 2 + 0]; |
| 837 | | var descTdDom = domListFnErrors.children[i * 2 + 1]; |
| 831 | var nameTdDom = domListFnErrorsFragment.children[i * 2 + 0]; |
| 832 | var descTdDom = domListFnErrorsFragment.children[i * 2 + 1]; |
| 838 | 833 | nameTdDom.textContent = errorList[i].err.name; |
| 839 | 834 | var docs = errorList[i].docs; |
| 840 | 835 | if (docs != null) { |
| ... | ... | @@ -843,6 +838,8 @@ |
| 843 | 838 | descTdDom.textContent = ""; |
| 844 | 839 | } |
| 845 | 840 | } |
| 841 | domListFnErrors.innerHTML = ""; |
| 842 | domListFnErrors.appendChild(domListFnErrorsFragment); |
| 846 | 843 | domTableFnErrors.classList.remove("hidden"); |
| 847 | 844 | } |
| 848 | 845 | domSectFnErrors.classList.remove("hidden"); |
| ... | ... | @@ -1022,45 +1019,51 @@ |
| 1022 | 1019 | } |
| 1023 | 1020 | |
| 1024 | 1021 | if (typesList.length !== 0) { |
| 1025 | | resizeDomList(domListTypes, typesList.length, '<li><a href="#"></a></li>'); |
| 1022 | var domListTypesFragment = createDomListFragment(typesList.length, '<li><a href="#"></a></li>'); |
| 1026 | 1023 | for (var i = 0; i < typesList.length; i += 1) { |
| 1027 | | var liDom = domListTypes.children[i]; |
| 1024 | var liDom = domListTypesFragment.children[i]; |
| 1028 | 1025 | var aDom = liDom.children[0]; |
| 1029 | 1026 | var decl = typesList[i]; |
| 1030 | 1027 | aDom.textContent = decl.name; |
| 1031 | 1028 | aDom.setAttribute('href', navLinkDecl(decl.name)); |
| 1032 | 1029 | } |
| 1030 | domListTypes.innerHTML = ""; |
| 1031 | domListTypes.appendChild(domListTypesFragment); |
| 1033 | 1032 | domSectTypes.classList.remove("hidden"); |
| 1034 | 1033 | } |
| 1035 | 1034 | if (namespacesList.length !== 0) { |
| 1036 | | resizeDomList(domListNamespaces, namespacesList.length, '<li><a href="#"></a></li>'); |
| 1035 | var domListNamespacesFragment = createDomListFragment(namespacesList.length, '<li><a href="#"></a></li>'); |
| 1037 | 1036 | for (var i = 0; i < namespacesList.length; i += 1) { |
| 1038 | | var liDom = domListNamespaces.children[i]; |
| 1037 | var liDom = domListNamespacesFragment.children[i]; |
| 1039 | 1038 | var aDom = liDom.children[0]; |
| 1040 | 1039 | var decl = namespacesList[i]; |
| 1041 | 1040 | aDom.textContent = decl.name; |
| 1042 | 1041 | aDom.setAttribute('href', navLinkDecl(decl.name)); |
| 1043 | 1042 | } |
| 1043 | domListNamespaces.innerHTML = ""; |
| 1044 | domListNamespaces.appendChild(domListNamespacesFragment); |
| 1044 | 1045 | domSectNamespaces.classList.remove("hidden"); |
| 1045 | 1046 | } |
| 1046 | 1047 | |
| 1047 | 1048 | if (errSetsList.length !== 0) { |
| 1048 | | resizeDomList(domListErrSets, errSetsList.length, '<li><a href="#"></a></li>'); |
| 1049 | var domListErrSetsFragment = createDomListFragment(errSetsList.length, '<li><a href="#"></a></li>'); |
| 1049 | 1050 | for (var i = 0; i < errSetsList.length; i += 1) { |
| 1050 | | var liDom = domListErrSets.children[i]; |
| 1051 | var liDom = domListErrSetsFragment.children[i]; |
| 1051 | 1052 | var aDom = liDom.children[0]; |
| 1052 | 1053 | var decl = errSetsList[i]; |
| 1053 | 1054 | aDom.textContent = decl.name; |
| 1054 | 1055 | aDom.setAttribute('href', navLinkDecl(decl.name)); |
| 1055 | 1056 | } |
| 1057 | domListErrSets.innerHTML = ""; |
| 1058 | domListErrSets.appendChild(domListErrSetsFragment); |
| 1056 | 1059 | domSectErrSets.classList.remove("hidden"); |
| 1057 | 1060 | } |
| 1058 | 1061 | |
| 1059 | 1062 | if (fnsList.length !== 0) { |
| 1060 | | resizeDomList(domListFns, fnsList.length, '<tr><td></td><td></td></tr>'); |
| 1063 | var domListFnsFragment = createDomListFragment(fnsList.length, '<tr><td></td><td></td></tr>'); |
| 1061 | 1064 | for (var i = 0; i < fnsList.length; i += 1) { |
| 1062 | 1065 | var decl = fnsList[i]; |
| 1063 | | var trDom = domListFns.children[i]; |
| 1066 | var trDom = domListFnsFragment.children[i]; |
| 1064 | 1067 | |
| 1065 | 1068 | var tdFnCode = trDom.children[0]; |
| 1066 | 1069 | var tdDesc = trDom.children[1]; |
| ... | ... | @@ -1074,17 +1077,19 @@ |
| 1074 | 1077 | tdDesc.textContent = ""; |
| 1075 | 1078 | } |
| 1076 | 1079 | } |
| 1080 | domListFns.innerHTML = ""; |
| 1081 | domListFns.appendChild(domListFnsFragment); |
| 1077 | 1082 | domSectFns.classList.remove("hidden"); |
| 1078 | 1083 | } |
| 1079 | 1084 | |
| 1080 | 1085 | if (container.fields != null && container.fields.length !== 0) { |
| 1081 | | resizeDomList(domListFields, container.fields.length, '<div></div>'); |
| 1086 | var domListFieldsFragment = createDomListFragment(container.fields.length, '<div></div>'); |
| 1082 | 1087 | |
| 1083 | 1088 | var containerNode = zigAnalysis.astNodes[container.src]; |
| 1084 | 1089 | for (var i = 0; i < container.fields.length; i += 1) { |
| 1085 | 1090 | var field = container.fields[i]; |
| 1086 | 1091 | var fieldNode = zigAnalysis.astNodes[containerNode.fields[i]]; |
| 1087 | | var divDom = domListFields.children[i]; |
| 1092 | var divDom = domListFieldsFragment.children[i]; |
| 1088 | 1093 | |
| 1089 | 1094 | var html = '<div class="mobile-scroll-container"><pre class="scroll-item">' + escapeHtml(fieldNode.name); |
| 1090 | 1095 | |
| ... | ... | @@ -1107,15 +1112,17 @@ |
| 1107 | 1112 | } |
| 1108 | 1113 | divDom.innerHTML = html; |
| 1109 | 1114 | } |
| 1115 | domListFields.innerHTML = ""; |
| 1116 | domListFields.appendChild(domListFieldsFragment); |
| 1110 | 1117 | domSectFields.classList.remove("hidden"); |
| 1111 | 1118 | } |
| 1112 | 1119 | |
| 1113 | 1120 | if (varsList.length !== 0) { |
| 1114 | | resizeDomList(domListGlobalVars, varsList.length, |
| 1121 | var domListGlobalVarsFragment = createDomListFragment(varsList.length, |
| 1115 | 1122 | '<tr><td><a href="#"></a></td><td></td><td></td></tr>'); |
| 1116 | 1123 | for (var i = 0; i < varsList.length; i += 1) { |
| 1117 | 1124 | var decl = varsList[i]; |
| 1118 | | var trDom = domListGlobalVars.children[i]; |
| 1125 | var trDom = domListGlobalVarsFragment.children[i]; |
| 1119 | 1126 | |
| 1120 | 1127 | var tdName = trDom.children[0]; |
| 1121 | 1128 | var tdNameA = tdName.children[0]; |
| ... | ... | @@ -1134,15 +1141,17 @@ |
| 1134 | 1141 | tdDesc.textContent = ""; |
| 1135 | 1142 | } |
| 1136 | 1143 | } |
| 1144 | domListGlobalVars.innerHTML = ""; |
| 1145 | domListGlobalVars.appendChild(domListGlobalVarsFragment); |
| 1137 | 1146 | domSectGlobalVars.classList.remove("hidden"); |
| 1138 | 1147 | } |
| 1139 | 1148 | |
| 1140 | 1149 | if (valsList.length !== 0) { |
| 1141 | | resizeDomList(domListValues, valsList.length, |
| 1150 | var domListValuesFragment = createDomListFragment(valsList.length, |
| 1142 | 1151 | '<tr><td><a href="#"></a></td><td></td><td></td></tr>'); |
| 1143 | 1152 | for (var i = 0; i < valsList.length; i += 1) { |
| 1144 | 1153 | var decl = valsList[i]; |
| 1145 | | var trDom = domListValues.children[i]; |
| 1154 | var trDom = domListValuesFragment.children[i]; |
| 1146 | 1155 | |
| 1147 | 1156 | var tdName = trDom.children[0]; |
| 1148 | 1157 | var tdNameA = tdName.children[0]; |
| ... | ... | @@ -1161,6 +1170,8 @@ |
| 1161 | 1170 | tdDesc.textContent = ""; |
| 1162 | 1171 | } |
| 1163 | 1172 | } |
| 1173 | domListValues.innerHTML = ""; |
| 1174 | domListValues.appendChild(domListValuesFragment); |
| 1164 | 1175 | domSectValues.classList.remove("hidden"); |
| 1165 | 1176 | } |
| 1166 | 1177 | } |
| ... | ... | @@ -1807,7 +1818,7 @@ |
| 1807 | 1818 | if (ev.ctrlKey) name = "Ctrl+" + name; |
| 1808 | 1819 | return name; |
| 1809 | 1820 | } |
| 1810 | | |
| 1821 | |
| 1811 | 1822 | function onWindowKeyDown(ev) { |
| 1812 | 1823 | switch (getKeyString(ev)) { |
| 1813 | 1824 | case "Esc": |
| ... | ... | @@ -1839,6 +1850,13 @@ |
| 1839 | 1850 | domHelpModal.focus(); |
| 1840 | 1851 | } |
| 1841 | 1852 | |
| 1853 | function onClickSearchShowAllResults(ev) { |
| 1854 | ev.preventDefault(); |
| 1855 | ev.stopPropagation(); |
| 1856 | searchTrimResults = false; |
| 1857 | onHashChange(); |
| 1858 | } |
| 1859 | |
| 1842 | 1860 | function clearAsyncSearch() { |
| 1843 | 1861 | if (searchTimer != null) { |
| 1844 | 1862 | clearTimeout(searchTimer); |
| ... | ... | @@ -1848,7 +1866,8 @@ |
| 1848 | 1866 | |
| 1849 | 1867 | function startAsyncSearch() { |
| 1850 | 1868 | clearAsyncSearch(); |
| 1851 | | searchTimer = setTimeout(startSearch, 100); |
| 1869 | searchTrimResults = true; |
| 1870 | searchTimer = setTimeout(startSearch, 10); |
| 1852 | 1871 | } |
| 1853 | 1872 | function startSearch() { |
| 1854 | 1873 | clearAsyncSearch(); |
| ... | ... | @@ -1920,25 +1939,38 @@ |
| 1920 | 1939 | } |
| 1921 | 1940 | |
| 1922 | 1941 | if (matchedItems.length !== 0) { |
| 1923 | | resizeDomList(domListSearchResults, matchedItems.length, '<li><a href="#"></a></li>'); |
| 1924 | | |
| 1925 | 1942 | matchedItems.sort(function(a, b) { |
| 1926 | 1943 | var cmp = operatorCompare(b.points, a.points); |
| 1927 | 1944 | if (cmp != 0) return cmp; |
| 1928 | 1945 | return operatorCompare(a.decl.name, b.decl.name); |
| 1929 | 1946 | }); |
| 1930 | 1947 | |
| 1948 | var searchTrimmed = false |
| 1949 | var searchTrimResultsMaxItems = 200 |
| 1950 | if (searchTrimResults && matchedItems.length > searchTrimResultsMaxItems) { |
| 1951 | matchedItems = matchedItems.slice(0, searchTrimResultsMaxItems) |
| 1952 | searchTrimmed = true |
| 1953 | } |
| 1954 | |
| 1955 | var domListSearchResultsFragment = createDomListFragment(matchedItems.length, '<li><a href="#"></a></li>'); |
| 1931 | 1956 | for (var i = 0; i < matchedItems.length; i += 1) { |
| 1932 | | var liDom = domListSearchResults.children[i]; |
| 1957 | var liDom = domListSearchResultsFragment.children[i]; |
| 1933 | 1958 | var aDom = liDom.children[0]; |
| 1934 | 1959 | var match = matchedItems[i]; |
| 1935 | 1960 | var lastPkgName = match.path.pkgNames[match.path.pkgNames.length - 1]; |
| 1936 | 1961 | aDom.textContent = lastPkgName + "." + match.path.declNames.join('.'); |
| 1937 | 1962 | aDom.setAttribute('href', navLink(match.path.pkgNames, match.path.declNames)); |
| 1938 | 1963 | } |
| 1939 | | renderSearchCursor(); |
| 1940 | 1964 | |
| 1965 | domListSearchResults.innerHTML = ""; |
| 1966 | domListSearchResults.appendChild(domListSearchResultsFragment); |
| 1941 | 1967 | domSectSearchResults.classList.remove("hidden"); |
| 1968 | |
| 1969 | if (searchTrimmed) { |
| 1970 | domSectSearchAllResultsLink.classList.remove("hidden"); |
| 1971 | } |
| 1972 | |
| 1973 | renderSearchCursor(); |
| 1942 | 1974 | } else { |
| 1943 | 1975 | domSectSearchNoResults.classList.remove("hidden"); |
| 1944 | 1976 | } |