| ... | ... | @@ -16,6 +16,8 @@ |
| 16 | 16 | var domListFields = document.getElementById("listFields"); |
| 17 | 17 | var domSectGlobalVars = document.getElementById("sectGlobalVars"); |
| 18 | 18 | var domListGlobalVars = document.getElementById("listGlobalVars"); |
| 19 | var domSectValues = document.getElementById("sectValues"); |
| 20 | var domListValues = document.getElementById("listValues"); |
| 19 | 21 | var domFnProto = document.getElementById("fnProto"); |
| 20 | 22 | var domFnProtoCode = document.getElementById("fnProtoCode"); |
| 21 | 23 | var domFnDocs = document.getElementById("fnDocs"); |
| ... | ... | @@ -63,6 +65,7 @@ |
| 63 | 65 | }; |
| 64 | 66 | var curNavSearch = ""; |
| 65 | 67 | var curSearchIndex = -1; |
| 68 | var imFeelingLucky = false; |
| 66 | 69 | |
| 67 | 70 | var rootIsStd = detectRootIsStd(); |
| 68 | 71 | |
| ... | ... | @@ -111,6 +114,7 @@ |
| 111 | 114 | domFnErrorsAnyError.classList.add("hidden"); |
| 112 | 115 | domTableFnErrors.classList.add("hidden"); |
| 113 | 116 | domSectGlobalVars.classList.add("hidden"); |
| 117 | domSectValues.classList.add("hidden"); |
| 114 | 118 | |
| 115 | 119 | renderTitle(); |
| 116 | 120 | renderInfo(); |
| ... | ... | @@ -157,13 +161,13 @@ |
| 157 | 161 | var lastDecl = curNav.declObjs[curNav.declObjs.length - 1]; |
| 158 | 162 | if (lastDecl.kind === 'var') { |
| 159 | 163 | return renderVar(lastDecl); |
| 160 | | } |
| 161 | | if (lastDecl.type != null) { |
| 164 | } else if (lastDecl.kind === 'const' && lastDecl.type != null) { |
| 162 | 165 | var typeObj = zigAnalysis.types[lastDecl.type]; |
| 163 | 166 | if (typeObj.kind === typeKinds.Fn) { |
| 164 | 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 | 172 | if (lastDecl.kind != null) { |
| 169 | 173 | renderType(lastDecl); |
| ... | ... | @@ -208,7 +212,7 @@ |
| 208 | 212 | var retType = zigAnalysis.types[typeObj.ret]; |
| 209 | 213 | if (retType.kind === typeKinds.ErrorSet) { |
| 210 | 214 | errSetTypeIndex = typeObj.ret; |
| 211 | | } else if (retType.kind === typeKinds.Union) { |
| 215 | } else if (retType.kind === typeKinds.ErrorUnion) { |
| 212 | 216 | errSetTypeIndex = retType.err; |
| 213 | 217 | } |
| 214 | 218 | } |
| ... | ... | @@ -515,7 +519,7 @@ |
| 515 | 519 | return typeObj.name; |
| 516 | 520 | } |
| 517 | 521 | } |
| 518 | | case typeKinds.Union: |
| 522 | case typeKinds.ErrorUnion: |
| 519 | 523 | var errSetTypeObj = zigAnalysis.types[typeObj.err]; |
| 520 | 524 | var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null); |
| 521 | 525 | if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) { |
| ... | ... | @@ -625,6 +629,19 @@ |
| 625 | 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 | 645 | function renderVar(decl) { |
| 629 | 646 | domFnProtoCode.innerHTML = '<span class="tok-kw">pub</span> <span class="tok-kw">var</span> ' + |
| 630 | 647 | escapeHtml(decl.name) + ': ' + typeIndexName(decl.type, true, true); |
| ... | ... | @@ -644,13 +661,13 @@ |
| 644 | 661 | var errSetsList = []; |
| 645 | 662 | var fnsList = []; |
| 646 | 663 | var varsList = []; |
| 664 | var valsList = []; |
| 647 | 665 | for (var i = 0; i < container.pubDecls.length; i += 1) { |
| 648 | 666 | var decl = zigAnalysis.decls[container.pubDecls[i]]; |
| 649 | 667 | if (decl.kind === 'var') { |
| 650 | 668 | varsList.push(decl); |
| 651 | 669 | continue; |
| 652 | | } |
| 653 | | if (decl.type != null) { |
| 670 | } else if (decl.kind === 'const' && decl.type != null) { |
| 654 | 671 | if (decl.type == typeTypeId) { |
| 655 | 672 | if (typeIsErrSet(decl.value)) { |
| 656 | 673 | errSetsList.push(decl); |
| ... | ... | @@ -667,25 +684,18 @@ |
| 667 | 684 | } else { |
| 668 | 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) { |
| 675 | | return operatorCompare(a.name, b.name); |
| 676 | | }); |
| 677 | | namespacesList.sort(function(a, b) { |
| 678 | | return operatorCompare(a.name, b.name); |
| 679 | | }); |
| 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 | | }); |
| 693 | typesList.sort(byNameProperty); |
| 694 | namespacesList.sort(byNameProperty); |
| 695 | errSetsList.sort(byNameProperty); |
| 696 | fnsList.sort(byNameProperty); |
| 697 | varsList.sort(byNameProperty); |
| 698 | valsList.sort(byNameProperty); |
| 689 | 699 | |
| 690 | 700 | if (typesList.length !== 0) { |
| 691 | 701 | resizeDomList(domListTypes, typesList.length, '<li><a href="#"></a></li>'); |
| ... | ... | @@ -793,6 +803,33 @@ |
| 793 | 803 | } |
| 794 | 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 | 835 | function operatorCompare(a, b) { |
| ... | ... | @@ -840,7 +877,7 @@ |
| 840 | 877 | throw new Error("No type 'type' found"); |
| 841 | 878 | } |
| 842 | 879 | |
| 843 | | function onHashChange() { |
| 880 | function updateCurNav() { |
| 844 | 881 | curNav = { |
| 845 | 882 | pkgNames: [], |
| 846 | 883 | pkgObjs: [], |
| ... | ... | @@ -865,10 +902,18 @@ |
| 865 | 902 | curNav.declNames = decodeURIComponent(parts[1]).split("."); |
| 866 | 903 | } |
| 867 | 904 | } |
| 905 | } |
| 906 | |
| 907 | function onHashChange() { |
| 908 | updateCurNav(); |
| 868 | 909 | if (domSearch.value !== curNavSearch) { |
| 869 | 910 | domSearch.value = curNavSearch; |
| 870 | 911 | } |
| 871 | 912 | render(); |
| 913 | if (imFeelingLucky) { |
| 914 | imFeelingLucky = false; |
| 915 | activateSelectedResult(); |
| 916 | } |
| 872 | 917 | } |
| 873 | 918 | |
| 874 | 919 | function findSubDecl(parentType, childName) { |
| ... | ... | @@ -999,21 +1044,38 @@ |
| 999 | 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 | 1064 | function onSearchKeyDown(ev) { |
| 1003 | 1065 | switch (ev.which) { |
| 1004 | 1066 | case 13: |
| 1005 | | var liDom = domListSearchResults.children[curSearchIndex]; |
| 1006 | | if (liDom == null && domListSearchResults.children.length !== 0) { |
| 1007 | | liDom = domListSearchResults.children[0]; |
| 1008 | | } |
| 1009 | | if (liDom != null) { |
| 1010 | | var aDom = liDom.children[0]; |
| 1011 | | location.href = aDom.getAttribute("href"); |
| 1012 | | curSearchIndex = -1; |
| 1013 | | ev.preventDefault(); |
| 1014 | | ev.stopPropagation(); |
| 1015 | | return; |
| 1016 | | } |
| 1067 | // detect if this search changes anything |
| 1068 | var terms1 = getSearchTerms(); |
| 1069 | startSearch(); |
| 1070 | updateCurNav(); |
| 1071 | var terms2 = getSearchTerms(); |
| 1072 | // we might have to wait for onHashChange to trigger |
| 1073 | imFeelingLucky = (terms1.join(' ') !== terms2.join(' ')); |
| 1074 | if (!imFeelingLucky) activateSelectedResult(); |
| 1075 | |
| 1076 | ev.preventDefault(); |
| 1077 | ev.stopPropagation(); |
| 1078 | return; |
| 1017 | 1079 | case 27: |
| 1018 | 1080 | domSearch.value = ""; |
| 1019 | 1081 | domSearch.blur(); |
| ... | ... | @@ -1036,6 +1098,7 @@ |
| 1036 | 1098 | curSearchIndex = -1; |
| 1037 | 1099 | ev.stopPropagation(); |
| 1038 | 1100 | startAsyncSearch(); |
| 1101 | return; |
| 1039 | 1102 | } |
| 1040 | 1103 | } |
| 1041 | 1104 | |
| ... | ... | @@ -1090,7 +1153,10 @@ |
| 1090 | 1153 | } |
| 1091 | 1154 | |
| 1092 | 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 | 1162 | function startAsyncSearch() { |
| ... | ... | @@ -1098,18 +1164,21 @@ |
| 1098 | 1164 | searchTimer = setTimeout(startSearch, 100); |
| 1099 | 1165 | } |
| 1100 | 1166 | function startSearch() { |
| 1101 | | var parts = location.hash.split("?"); |
| 1167 | clearAsyncSearch(); |
| 1168 | var oldHash = location.hash; |
| 1169 | var parts = oldHash.split("?"); |
| 1102 | 1170 | var newPart2 = (domSearch.value === "") ? "" : ("?" + domSearch.value); |
| 1103 | | if (parts.length === 1) { |
| 1104 | | location.hash = location.hash + newPart2; |
| 1105 | | } else { |
| 1106 | | location.hash = parts[0] + newPart2; |
| 1107 | | } |
| 1171 | location.hash = (parts.length === 1) ? (oldHash + newPart2) : (parts[0] + newPart2); |
| 1172 | } |
| 1173 | function getSearchTerms() { |
| 1174 | var list = curNavSearch.trim().split(/[ \r\n\t]+/); |
| 1175 | list.sort(); |
| 1176 | return list; |
| 1108 | 1177 | } |
| 1109 | 1178 | function renderSearch() { |
| 1110 | 1179 | var matchedItems = []; |
| 1111 | 1180 | var ignoreCase = (curNavSearch.toLowerCase() === curNavSearch); |
| 1112 | | var terms = curNavSearch.split(/[ \r\n\t]+/); |
| 1181 | var terms = getSearchTerms(); |
| 1113 | 1182 | |
| 1114 | 1183 | decl_loop: for (var declIndex = 0; declIndex < zigAnalysis.decls.length; declIndex += 1) { |
| 1115 | 1184 | var canonPath = getCanonDeclPath(declIndex); |
| ... | ... | @@ -1226,4 +1295,8 @@ |
| 1226 | 1295 | } |
| 1227 | 1296 | return map; |
| 1228 | 1297 | } |
| 1298 | |
| 1299 | function byNameProperty(a, b) { |
| 1300 | return operatorCompare(a.name, b.name); |
| 1301 | } |
| 1229 | 1302 | })(); |