authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-09 18:08:11-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-09 18:09:35-04:00
log6d54e8fc3c41247dc3fa5bd399733b629e9d621d
tree05f251af4c3cfd2fc5486f1ed4b0b2e4ba9dc2de
parent13ae7d47b77c4ac7b1769f3ac3b394c32ffebe6e
signaturelock-open Commit is signed but in an unrecognized format.

generated docs: render values

also fix pressing enter in search box before search finishes closes #3409

3 files changed, 127 insertions(+), 44 deletions(-)

lib/std/math.zig+3
...@@ -4,7 +4,10 @@ const TypeId = builtin.TypeId;...@@ -4,7 +4,10 @@ const TypeId = builtin.TypeId;
4const assert = std.debug.assert;4const assert = std.debug.assert;
5const testing = std.testing;5const testing = std.testing;
66
7/// Euler's number (e)
7pub const e = 2.71828182845904523536028747135266249775724709369995;8pub const e = 2.71828182845904523536028747135266249775724709369995;
9
10/// Archimedes' constant (π)
8pub const pi = 3.14159265358979323846264338327950288419716939937510;11pub const pi = 3.14159265358979323846264338327950288419716939937510;
912
10// From a small c++ [program using boost float128](https://github.com/winksaville/cpp_boost_float128)13// From a small c++ [program using boost float128](https://github.com/winksaville/cpp_boost_float128)
lib/std/special/docs/index.html+8-1
...@@ -156,7 +156,7 @@...@@ -156,7 +156,7 @@
156 font-weight: bold;156 font-weight: bold;
157 }157 }
158158
159 #sectGlobalVars td, #sectFns td, #sectFields td {159 td {
160 vertical-align: top;160 vertical-align: top;
161 margin: 0;161 margin: 0;
162 padding: 0.5em;162 padding: 0.5em;
...@@ -338,6 +338,13 @@...@@ -338,6 +338,13 @@
338 </tbody>338 </tbody>
339 </table>339 </table>
340 </div>340 </div>
341 <div id="sectValues" class="hidden">
342 <h2>Values</h2>
343 <table>
344 <tbody id="listValues">
345 </tbody>
346 </table>
347 </div>
341 <div id="sectErrSets" class="hidden">348 <div id="sectErrSets" class="hidden">
342 <h2>Error Sets</h2>349 <h2>Error Sets</h2>
343 <ul id="listErrSets">350 <ul id="listErrSets">
lib/std/special/docs/main.js+116-43
...@@ -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;
6669
67 var rootIsStd = detectRootIsStd();70 var rootIsStd = detectRootIsStd();
6871
...@@ -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");
114118
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 }
627631
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 });
689699
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 }
797834
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 }
842879
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 }
873918
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 }
10011046
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 }
10411104
...@@ -1090,7 +1153,10 @@...@@ -1090,7 +1153,10 @@
1090 }1153 }
10911154
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 }
10951161
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();
11131182
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})();