authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-05 13:07:59-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-05 13:07:59-04:00
logf78d49c9168d894774ec9d61c7d734702c59dfe6
tree16e5b4fd8960af3b42c732a79609543e44aea00d
parentdca6e74fec247f2d15de3cfad9e0e23bc7884212
signaturelock-open Commit is signed but in an unrecognized format.

generated docs: navigable packages


2 files changed, 108 insertions(+), 16 deletions(-)

lib/std/special/doc/index.html+3
...@@ -14,6 +14,9 @@...@@ -14,6 +14,9 @@
14 background-color: #111;14 background-color: #111;
15 color: #bbb;15 color: #bbb;
16 }16 }
17 a {
18 color: #88f;
19 }
17 }20 }
18 </style>21 </style>
19 </head>22 </head>
lib/std/special/doc/main.js+105-16
...@@ -6,28 +6,76 @@...@@ -6,28 +6,76 @@
6 var domListTypes = document.getElementById("listTypes");6 var domListTypes = document.getElementById("listTypes");
77
8 var curNav = {8 var curNav = {
9 kind: "pkg",9 // each element is a package name, e.g. @import("a") then within there @import("b")
10 index: zigAnalysis.rootPkg,10 // starting implicitly from root package
11 pkgNames: [],
12 // same as above except actual packages, not names
13 pkgObjs: [],
14 // Each element is a decl name, `a.b.c`, a is 0, b is 1, c is 2, etc.
15 // empty array means refers to the package itself
16 declNames: [],
17 // these will be all types, except the last one may be a type or a decl
18 declObjs: [],
11 };19 };
1220
13 var rootIsStd = detectRootIsStd();21 var rootIsStd = detectRootIsStd();
14 var typeKindTypeId = findTypeKindType();22 var typeKindTypeId = findTypeKindType();
15 var typeTypeId = findTypeTypeId();23 var typeTypeId = findTypeTypeId();
16 render();24 window.addEventListener('hashchange', onHashChange, false);
25 onHashChange();
1726
18 function render() {27 function render() {
19 domStatus.classList.add("hidden");28 domStatus.classList.add("hidden");
2029
21 if (curNav.kind === "pkg") {30 var pkg = zigAnalysis.packages[zigAnalysis.rootPkg];
22 var pkg = zigAnalysis.packages[curNav.index];31 curNav.pkgObjs = [pkg];
23 renderPkgList(pkg);32 for (var i = 0; i < curNav.pkgNames.length; i += 1) {
24 var pkgStruct = zigAnalysis.types[pkg.main];33 var childPkg = zigAnalysis.packages[pkg.table[curNav.pkgNames[i]]];
25 renderContainer(pkgStruct);34 if (childPkg == null) {
35 return render404();
36 }
37 pkg = childPkg;
38 curNav.pkgObjs.push(pkg);
39 }
40
41 var decl = zigAnalysis.types[pkg.main];
42 curNav.declObjs = [decl];
43 for (var i = 0; i < curNav.declNames.length; i += 1) {
44 var childDecl = findSubDecl(decl, curNav.declNames[i]);
45 if (childDecl == null) {
46 return render404();
47 }
48 var container = getDeclContainerType(childDecl);
49 if (container == null) {
50 if (i + 1 === curNav.declNames.length) {
51 curNav.declObjs.push(childDecl);
52 break;
53 } else {
54 return render404();
55 }
56 }
57 decl = container;
58 curNav.declObjs.push(decl);
59 }
60
61 var lastPkg = curNav.pkgObjs[curNav.pkgObjs.length - 1];
62 renderPkgList(lastPkg);
63
64 var lastDecl = curNav.declObjs[curNav.declObjs.length - 1];
65 if (lastDecl.decls != null) {
66 return renderContainer(lastDecl);
26 } else {67 } else {
27 throw new Error("TODO");68 throw new Error("docs for this decl which is not a container");
28 }69 }
29 }70 }
3071
72 function render404() {
73 domStatus.textContent = "404 Not Found";
74 domStatus.classList.remove("hidden");
75 domSectPkgs.classList.add("hidden");
76 domListPkgs.classList.add("hidden");
77 }
78
31 function renderPkgList(pkg) {79 function renderPkgList(pkg) {
32 var list = [];80 var list = [];
33 for (var key in pkg.table) {81 for (var key in pkg.table) {
...@@ -41,14 +89,19 @@...@@ -41,14 +89,19 @@
41 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());89 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
42 });90 });
4391
44 resizeDomList(domListPkgs, list.length, '<li></li>');92 if (list.length === 0) {
45 var domItems = domListPkgs.children;93 domSectPkgs.classList.remove("hidden");
46 for (var i = 0; i < list.length; i += 1) {94 } else {
47 var domItem = domItems[i];95 resizeDomList(domListPkgs, list.length, '<li><a href="#"></a></li>');
48 domItem.textContent = list[i].name;96 for (var i = 0; i < list.length; i += 1) {
49 }97 var liDom = domListPkgs.children[i];
98 var aDom = liDom.children[0];
99 aDom.textContent = list[i].name;
100 aDom.setAttribute('href', "#" + list[i].name);
101 }
50102
51 domSectPkgs.classList.remove("hidden");103 domSectPkgs.classList.remove("hidden");
104 }
52 }105 }
53106
54 function resizeDomList(listDom, desiredLen, templateHtml) {107 function resizeDomList(listDom, desiredLen, templateHtml) {
...@@ -123,4 +176,40 @@...@@ -123,4 +176,40 @@
123 }176 }
124 throw new Error("No type 'type' found");177 throw new Error("No type 'type' found");
125 }178 }
179
180 function onHashChange() {
181 curNav = {
182 pkgNames: [],
183 pkgObjs: [],
184 declNames: [],
185 declObjs: [],
186 };
187 if (location.hash[0] === '#') {
188 var parts = location.hash.substring(1).split(";");
189 curNav.pkgNames = parts[0].split(".");
190 if (parts[1] != null) {
191 curNav.declNames = parts[1] ? parts[1].split(".") : [];
192 }
193 }
194 render();
195 }
196
197 function findSubDecl(parentType, childName) {
198 if (parentType.decls == null) throw new Error("parent object has no decls");
199 for (var i = 0; i < parentType.decls.length; i += 1) {
200 var declIndex = parentType.decls[i];
201 var childDecl = zigAnalysis.decls[declIndex];
202 if (childDecl.name === childName) {
203 return childDecl;
204 }
205 }
206 return null;
207 }
208
209 function getDeclContainerType(decl) {
210 if (decl.type === typeTypeId) {
211 return zigAnalysis.types[decl.value];
212 }
213 return null;
214 }
126})();215})();