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 @@
1414 background-color: #111;
1515 color: #bbb;
1616 }
17 a {
18 color: #88f;
19 }
1720 }
1821 </style>
1922 </head>
lib/std/special/doc/main.js+105-16
......@@ -6,28 +6,76 @@
66 var domListTypes = document.getElementById("listTypes");
77
88 var curNav = {
9 kind: "pkg",
10 index: zigAnalysis.rootPkg,
9 // each element is a package name, e.g. @import("a") then within there @import("b")
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: [],
1119 };
1220
1321 var rootIsStd = detectRootIsStd();
1422 var typeKindTypeId = findTypeKindType();
1523 var typeTypeId = findTypeTypeId();
16 render();
24 window.addEventListener('hashchange', onHashChange, false);
25 onHashChange();
1726
1827 function render() {
1928 domStatus.classList.add("hidden");
2029
21 if (curNav.kind === "pkg") {
22 var pkg = zigAnalysis.packages[curNav.index];
23 renderPkgList(pkg);
24 var pkgStruct = zigAnalysis.types[pkg.main];
25 renderContainer(pkgStruct);
30 var pkg = zigAnalysis.packages[zigAnalysis.rootPkg];
31 curNav.pkgObjs = [pkg];
32 for (var i = 0; i < curNav.pkgNames.length; i += 1) {
33 var childPkg = zigAnalysis.packages[pkg.table[curNav.pkgNames[i]]];
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);
2667 } else {
27 throw new Error("TODO");
68 throw new Error("docs for this decl which is not a container");
2869 }
2970 }
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
3179 function renderPkgList(pkg) {
3280 var list = [];
3381 for (var key in pkg.table) {
......@@ -41,14 +89,19 @@
4189 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
4290 });
4391
44 resizeDomList(domListPkgs, list.length, '<li></li>');
45 var domItems = domListPkgs.children;
46 for (var i = 0; i < list.length; i += 1) {
47 var domItem = domItems[i];
48 domItem.textContent = list[i].name;
49 }
92 if (list.length === 0) {
93 domSectPkgs.classList.remove("hidden");
94 } else {
95 resizeDomList(domListPkgs, list.length, '<li><a href="#"></a></li>');
96 for (var i = 0; i < list.length; i += 1) {
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 }
52105 }
53106
54107 function resizeDomList(listDom, desiredLen, templateHtml) {
......@@ -123,4 +176,40 @@
123176 }
124177 throw new Error("No type 'type' found");
125178 }
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 }
126215})();