| ... | @@ -16,6 +16,8 @@ | ... | @@ -16,6 +16,8 @@ |
| 16 | var domListFields = document.getElementById("listFields"); | 16 | var domListFields = document.getElementById("listFields"); |
| 17 | var domSectGlobalVars = document.getElementById("sectGlobalVars"); | 17 | var domSectGlobalVars = document.getElementById("sectGlobalVars"); |
| 18 | var domListGlobalVars = document.getElementById("listGlobalVars"); | 18 | var domListGlobalVars = document.getElementById("listGlobalVars"); |
| | 19 | var domSectValues = document.getElementById("sectValues"); |
| | 20 | var domListValues = document.getElementById("listValues"); |
| 19 | var domFnProto = document.getElementById("fnProto"); | 21 | var domFnProto = document.getElementById("fnProto"); |
| 20 | var domFnProtoCode = document.getElementById("fnProtoCode"); | 22 | var domFnProtoCode = document.getElementById("fnProtoCode"); |
| 21 | var domFnDocs = document.getElementById("fnDocs"); | 23 | var domFnDocs = document.getElementById("fnDocs"); |
| ... | @@ -63,6 +65,7 @@ | ... | @@ -63,6 +65,7 @@ |
| 63 | }; | 65 | }; |
| 64 | var curNavSearch = ""; | 66 | var curNavSearch = ""; |
| 65 | var curSearchIndex = -1; | 67 | var curSearchIndex = -1; |
| | 68 | var imFeelingLucky = false; |
| 66 | | 69 | |
| 67 | var rootIsStd = detectRootIsStd(); | 70 | var rootIsStd = detectRootIsStd(); |
| 68 | | 71 | |
| ... | @@ -111,6 +114,7 @@ | ... | @@ -111,6 +114,7 @@ |
| 111 | domFnErrorsAnyError.classList.add("hidden"); | 114 | domFnErrorsAnyError.classList.add("hidden"); |
| 112 | domTableFnErrors.classList.add("hidden"); | 115 | domTableFnErrors.classList.add("hidden"); |
| 113 | domSectGlobalVars.classList.add("hidden"); | 116 | domSectGlobalVars.classList.add("hidden"); |
| | 117 | domSectValues.classList.add("hidden"); |
| 114 | | 118 | |
| 115 | renderTitle(); | 119 | renderTitle(); |
| 116 | renderInfo(); | 120 | renderInfo(); |
| ... | @@ -157,13 +161,13 @@ | ... | @@ -157,13 +161,13 @@ |
| 157 | var lastDecl = curNav.declObjs[curNav.declObjs.length - 1]; | 161 | var lastDecl = curNav.declObjs[curNav.declObjs.length - 1]; |
| 158 | if (lastDecl.kind === 'var') { | 162 | if (lastDecl.kind === 'var') { |
| 159 | return renderVar(lastDecl); | 163 | return renderVar(lastDecl); |
| 160 | } | 164 | } else if (lastDecl.kind === 'const' && lastDecl.type != null) { |
| 161 | if (lastDecl.type != null) { | | |
| 162 | var typeObj = zigAnalysis.types[lastDecl.type]; | 165 | var typeObj = zigAnalysis.types[lastDecl.type]; |
| 163 | if (typeObj.kind === typeKinds.Fn) { | 166 | if (typeObj.kind === typeKinds.Fn) { |
| 164 | return renderFn(lastDecl); | 167 | return renderFn(lastDecl); |
| | 168 | } else { |
| | 169 | return renderValue(lastDecl); |
| 165 | } | 170 | } |
| 166 | throw new Error("docs for this decl which is not a container"); | | |
| 167 | } | 171 | } |
| 168 | if (lastDecl.kind != null) { | 172 | if (lastDecl.kind != null) { |
| 169 | renderType(lastDecl); | 173 | renderType(lastDecl); |
| ... | @@ -208,7 +212,7 @@ | ... | @@ -208,7 +212,7 @@ |
| 208 | var retType = zigAnalysis.types[typeObj.ret]; | 212 | var retType = zigAnalysis.types[typeObj.ret]; |
| 209 | if (retType.kind === typeKinds.ErrorSet) { | 213 | if (retType.kind === typeKinds.ErrorSet) { |
| 210 | errSetTypeIndex = typeObj.ret; | 214 | errSetTypeIndex = typeObj.ret; |
| 211 | } else if (retType.kind === typeKinds.Union) { | 215 | } else if (retType.kind === typeKinds.ErrorUnion) { |
| 212 | errSetTypeIndex = retType.err; | 216 | errSetTypeIndex = retType.err; |
| 213 | } | 217 | } |
| 214 | } | 218 | } |
| ... | @@ -515,7 +519,7 @@ | ... | @@ -515,7 +519,7 @@ |
| 515 | return typeObj.name; | 519 | return typeObj.name; |
| 516 | } | 520 | } |
| 517 | } | 521 | } |
| 518 | case typeKinds.Union: | 522 | case typeKinds.ErrorUnion: |
| 519 | var errSetTypeObj = zigAnalysis.types[typeObj.err]; | 523 | var errSetTypeObj = zigAnalysis.types[typeObj.err]; |
| 520 | var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null); | 524 | var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null); |
| 521 | if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) { | 525 | if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) { |
| ... | @@ -625,6 +629,19 @@ | ... | @@ -625,6 +629,19 @@ |
| 625 | return true; | 629 | return true; |
| 626 | } | 630 | } |
| 627 | | 631 | |
| | 632 | function renderValue(decl) { |
| | 633 | domFnProtoCode.innerHTML = '<span class="tok-kw">pub</span> <span class="tok-kw">const</span> ' + |
| | 634 | escapeHtml(decl.name) + ': ' + typeIndexName(decl.type, true, true); |
| | 635 | |
| | 636 | var docs = zigAnalysis.astNodes[decl.src].docs; |
| | 637 | if (docs != null) { |
| | 638 | domFnDocs.innerHTML = markdown(docs); |
| | 639 | domFnDocs.classList.remove("hidden"); |
| | 640 | } |
| | 641 | |
| | 642 | domFnProto.classList.remove("hidden"); |
| | 643 | } |
| | 644 | |
| 628 | function renderVar(decl) { | 645 | function renderVar(decl) { |
| 629 | domFnProtoCode.innerHTML = '<span class="tok-kw">pub</span> <span class="tok-kw">var</span> ' + | 646 | domFnProtoCode.innerHTML = '<span class="tok-kw">pub</span> <span class="tok-kw">var</span> ' + |
| 630 | escapeHtml(decl.name) + ': ' + typeIndexName(decl.type, true, true); | 647 | escapeHtml(decl.name) + ': ' + typeIndexName(decl.type, true, true); |
| ... | @@ -644,13 +661,13 @@ | ... | @@ -644,13 +661,13 @@ |
| 644 | var errSetsList = []; | 661 | var errSetsList = []; |
| 645 | var fnsList = []; | 662 | var fnsList = []; |
| 646 | var varsList = []; | 663 | var varsList = []; |
| | 664 | var valsList = []; |
| 647 | for (var i = 0; i < container.pubDecls.length; i += 1) { | 665 | for (var i = 0; i < container.pubDecls.length; i += 1) { |
| 648 | var decl = zigAnalysis.decls[container.pubDecls[i]]; | 666 | var decl = zigAnalysis.decls[container.pubDecls[i]]; |
| 649 | if (decl.kind === 'var') { | 667 | if (decl.kind === 'var') { |
| 650 | varsList.push(decl); | 668 | varsList.push(decl); |
| 651 | continue; | 669 | continue; |
| 652 | } | 670 | } else if (decl.kind === 'const' && decl.type != null) { |
| 653 | if (decl.type != null) { | | |
| 654 | if (decl.type == typeTypeId) { | 671 | if (decl.type == typeTypeId) { |
| 655 | if (typeIsErrSet(decl.value)) { | 672 | if (typeIsErrSet(decl.value)) { |
| 656 | errSetsList.push(decl); | 673 | errSetsList.push(decl); |
| ... | @@ -667,25 +684,18 @@ | ... | @@ -667,25 +684,18 @@ |
| 667 | } else { | 684 | } else { |
| 668 | fnsList.push(decl); | 685 | fnsList.push(decl); |
| 669 | } | 686 | } |
| | 687 | } else { |
| | 688 | valsList.push(decl); |
| 670 | } | 689 | } |
| 671 | } | 690 | } |
| 672 | } | 691 | } |
| 673 | } | 692 | } |
| 674 | typesList.sort(function(a, b) { | 693 | typesList.sort(byNameProperty); |
| 675 | return operatorCompare(a.name, b.name); | 694 | namespacesList.sort(byNameProperty); |
| 676 | }); | 695 | errSetsList.sort(byNameProperty); |
| 677 | namespacesList.sort(function(a, b) { | 696 | fnsList.sort(byNameProperty); |
| 678 | return operatorCompare(a.name, b.name); | 697 | varsList.sort(byNameProperty); |
| 679 | }); | 698 | valsList.sort(byNameProperty); |
| 680 | errSetsList.sort(function(a, b) { | | |
| 681 | return operatorCompare(a.name, b.name); | | |
| 682 | }); | | |
| 683 | fnsList.sort(function(a, b) { | | |
| 684 | return operatorCompare(a.name, b.name); | | |
| 685 | }); | | |
| 686 | varsList.sort(function(a, b) { | | |
| 687 | return operatorCompare(a.name, b.name); | | |
| 688 | }); | | |
| 689 | | 699 | |
| 690 | if (typesList.length !== 0) { | 700 | if (typesList.length !== 0) { |
| 691 | resizeDomList(domListTypes, typesList.length, '<li><a href="#"></a></li>'); | 701 | resizeDomList(domListTypes, typesList.length, '<li><a href="#"></a></li>'); |
| ... | @@ -793,6 +803,33 @@ | ... | @@ -793,6 +803,33 @@ |
| 793 | } | 803 | } |
| 794 | domSectGlobalVars.classList.remove("hidden"); | 804 | domSectGlobalVars.classList.remove("hidden"); |
| 795 | } | 805 | } |
| | 806 | |
| | 807 | if (valsList.length !== 0) { |
| | 808 | resizeDomList(domListValues, valsList.length, |
| | 809 | '<tr><td><a href="#"></a></td><td></td><td></td></tr>'); |
| | 810 | for (var i = 0; i < valsList.length; i += 1) { |
| | 811 | var decl = valsList[i]; |
| | 812 | var trDom = domListValues.children[i]; |
| | 813 | |
| | 814 | var tdName = trDom.children[0]; |
| | 815 | var tdNameA = tdName.children[0]; |
| | 816 | var tdType = trDom.children[1]; |
| | 817 | var tdDesc = trDom.children[2]; |
| | 818 | |
| | 819 | tdNameA.setAttribute('href', navLinkDecl(decl.name)); |
| | 820 | tdNameA.textContent = decl.name; |
| | 821 | |
| | 822 | tdType.innerHTML = typeIndexName(decl.type, true, true); |
| | 823 | |
| | 824 | var docs = zigAnalysis.astNodes[decl.src].docs; |
| | 825 | if (docs != null) { |
| | 826 | tdDesc.innerHTML = shortDescMarkdown(docs); |
| | 827 | } else { |
| | 828 | tdDesc.textContent = ""; |
| | 829 | } |
| | 830 | } |
| | 831 | domSectValues.classList.remove("hidden"); |
| | 832 | } |
| 796 | } | 833 | } |
| 797 | | 834 | |
| 798 | function operatorCompare(a, b) { | 835 | function operatorCompare(a, b) { |
| ... | @@ -840,7 +877,7 @@ | ... | @@ -840,7 +877,7 @@ |
| 840 | throw new Error("No type 'type' found"); | 877 | throw new Error("No type 'type' found"); |
| 841 | } | 878 | } |
| 842 | | 879 | |
| 843 | function onHashChange() { | 880 | function updateCurNav() { |
| 844 | curNav = { | 881 | curNav = { |
| 845 | pkgNames: [], | 882 | pkgNames: [], |
| 846 | pkgObjs: [], | 883 | pkgObjs: [], |
| ... | @@ -865,10 +902,18 @@ | ... | @@ -865,10 +902,18 @@ |
| 865 | curNav.declNames = decodeURIComponent(parts[1]).split("."); | 902 | curNav.declNames = decodeURIComponent(parts[1]).split("."); |
| 866 | } | 903 | } |
| 867 | } | 904 | } |
| | 905 | } |
| | 906 | |
| | 907 | function onHashChange() { |
| | 908 | updateCurNav(); |
| 868 | if (domSearch.value !== curNavSearch) { | 909 | if (domSearch.value !== curNavSearch) { |
| 869 | domSearch.value = curNavSearch; | 910 | domSearch.value = curNavSearch; |
| 870 | } | 911 | } |
| 871 | render(); | 912 | render(); |
| | 913 | if (imFeelingLucky) { |
| | 914 | imFeelingLucky = false; |
| | 915 | activateSelectedResult(); |
| | 916 | } |
| 872 | } | 917 | } |
| 873 | | 918 | |
| 874 | function findSubDecl(parentType, childName) { | 919 | function findSubDecl(parentType, childName) { |
| ... | @@ -999,21 +1044,38 @@ | ... | @@ -999,21 +1044,38 @@ |
| 999 | return escapeHtml(mdText); | 1044 | return escapeHtml(mdText); |
| 1000 | } | 1045 | } |
| 1001 | | 1046 | |
| | 1047 | function activateSelectedResult() { |
| | 1048 | if (domSectSearchResults.classList.contains("hidden")) { |
| | 1049 | return; |
| | 1050 | } |
| | 1051 | |
| | 1052 | var liDom = domListSearchResults.children[curSearchIndex]; |
| | 1053 | if (liDom == null && domListSearchResults.children.length !== 0) { |
| | 1054 | liDom = domListSearchResults.children[0]; |
| | 1055 | } |
| | 1056 | if (liDom != null) { |
| | 1057 | var aDom = liDom.children[0]; |
| | 1058 | location.href = aDom.getAttribute("href"); |
| | 1059 | curSearchIndex = -1; |
| | 1060 | } |
| | 1061 | domSearch.blur(); |
| | 1062 | } |
| | 1063 | |
| 1002 | function onSearchKeyDown(ev) { | 1064 | function onSearchKeyDown(ev) { |
| 1003 | switch (ev.which) { | 1065 | switch (ev.which) { |
| 1004 | case 13: | 1066 | case 13: |
| 1005 | var liDom = domListSearchResults.children[curSearchIndex]; | 1067 | // detect if this search changes anything |
| 1006 | if (liDom == null && domListSearchResults.children.length !== 0) { | 1068 | var terms1 = getSearchTerms(); |
| 1007 | liDom = domListSearchResults.children[0]; | 1069 | startSearch(); |
| 1008 | } | 1070 | updateCurNav(); |
| 1009 | if (liDom != null) { | 1071 | var terms2 = getSearchTerms(); |
| 1010 | var aDom = liDom.children[0]; | 1072 | // we might have to wait for onHashChange to trigger |
| 1011 | location.href = aDom.getAttribute("href"); | 1073 | imFeelingLucky = (terms1.join(' ') !== terms2.join(' ')); |
| 1012 | curSearchIndex = -1; | 1074 | if (!imFeelingLucky) activateSelectedResult(); |
| 1013 | ev.preventDefault(); | 1075 | |
| 1014 | ev.stopPropagation(); | 1076 | ev.preventDefault(); |
| 1015 | return; | 1077 | ev.stopPropagation(); |
| 1016 | } | 1078 | return; |
| 1017 | case 27: | 1079 | case 27: |
| 1018 | domSearch.value = ""; | 1080 | domSearch.value = ""; |
| 1019 | domSearch.blur(); | 1081 | domSearch.blur(); |
| ... | @@ -1036,6 +1098,7 @@ | ... | @@ -1036,6 +1098,7 @@ |
| 1036 | curSearchIndex = -1; | 1098 | curSearchIndex = -1; |
| 1037 | ev.stopPropagation(); | 1099 | ev.stopPropagation(); |
| 1038 | startAsyncSearch(); | 1100 | startAsyncSearch(); |
| | 1101 | return; |
| 1039 | } | 1102 | } |
| 1040 | } | 1103 | } |
| 1041 | | 1104 | |
| ... | @@ -1090,7 +1153,10 @@ | ... | @@ -1090,7 +1153,10 @@ |
| 1090 | } | 1153 | } |
| 1091 | | 1154 | |
| 1092 | function clearAsyncSearch() { | 1155 | function clearAsyncSearch() { |
| 1093 | if (searchTimer != null) clearTimeout(searchTimer); | 1156 | if (searchTimer != null) { |
| | 1157 | clearTimeout(searchTimer); |
| | 1158 | searchTimer = null; |
| | 1159 | } |
| 1094 | } | 1160 | } |
| 1095 | | 1161 | |
| 1096 | function startAsyncSearch() { | 1162 | function startAsyncSearch() { |
| ... | @@ -1098,18 +1164,21 @@ | ... | @@ -1098,18 +1164,21 @@ |
| 1098 | searchTimer = setTimeout(startSearch, 100); | 1164 | searchTimer = setTimeout(startSearch, 100); |
| 1099 | } | 1165 | } |
| 1100 | function startSearch() { | 1166 | function startSearch() { |
| 1101 | var parts = location.hash.split("?"); | 1167 | clearAsyncSearch(); |
| | 1168 | var oldHash = location.hash; |
| | 1169 | var parts = oldHash.split("?"); |
| 1102 | var newPart2 = (domSearch.value === "") ? "" : ("?" + domSearch.value); | 1170 | var newPart2 = (domSearch.value === "") ? "" : ("?" + domSearch.value); |
| 1103 | if (parts.length === 1) { | 1171 | location.hash = (parts.length === 1) ? (oldHash + newPart2) : (parts[0] + newPart2); |
| 1104 | location.hash = location.hash + newPart2; | 1172 | } |
| 1105 | } else { | 1173 | function getSearchTerms() { |
| 1106 | location.hash = parts[0] + newPart2; | 1174 | var list = curNavSearch.trim().split(/[ \r\n\t]+/); |
| 1107 | } | 1175 | list.sort(); |
| | 1176 | return list; |
| 1108 | } | 1177 | } |
| 1109 | function renderSearch() { | 1178 | function renderSearch() { |
| 1110 | var matchedItems = []; | 1179 | var matchedItems = []; |
| 1111 | var ignoreCase = (curNavSearch.toLowerCase() === curNavSearch); | 1180 | var ignoreCase = (curNavSearch.toLowerCase() === curNavSearch); |
| 1112 | var terms = curNavSearch.split(/[ \r\n\t]+/); | 1181 | var terms = getSearchTerms(); |
| 1113 | | 1182 | |
| 1114 | decl_loop: for (var declIndex = 0; declIndex < zigAnalysis.decls.length; declIndex += 1) { | 1183 | decl_loop: for (var declIndex = 0; declIndex < zigAnalysis.decls.length; declIndex += 1) { |
| 1115 | var canonPath = getCanonDeclPath(declIndex); | 1184 | var canonPath = getCanonDeclPath(declIndex); |
| ... | @@ -1226,4 +1295,8 @@ | ... | @@ -1226,4 +1295,8 @@ |
| 1226 | } | 1295 | } |
| 1227 | return map; | 1296 | return map; |
| 1228 | } | 1297 | } |
| | 1298 | |
| | 1299 | function byNameProperty(a, b) { |
| | 1300 | return operatorCompare(a.name, b.name); |
| | 1301 | } |
| 1229 | })(); | 1302 | })(); |