authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-05 15:33:23-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-05 15:33:23-04:00
logedadccde549b99305882e795e44672a9f41be037
tree10b8e55e7a39bd303e1e49142be9b53a3934c324
parent5aa1e7880747d80ddbbd31a87fc1343af46e7db6
signaturelock-open Commit is signed but in an unrecognized format.

generated docs: add navigation bar


2 files changed, 170 insertions(+), 31 deletions(-)

lib/std/special/doc/index.html+45-10
......@@ -5,22 +5,52 @@
55 <title>Documentation - Zig</title>
66 <link rel="icon" href="favicon.png">
77 <style type="text/css">
8 .hidden {
9 display: none;
10 }
11
12 @media (prefers-color-scheme: dark) {
13 body{
14 background-color: #111;
15 color: #bbb;
8 body {
9 font-family: system-ui, -apple-system, Roboto, "Segoe UI", sans-serif;
10 }
11 .hidden {
12 display: none;
1613 }
1714 a {
18 color: #88f;
15 color: #2A6286;
16 }
17 #listNav {
18 list-style-type: none;
19 margin: 0;
20 padding: 0;
21 overflow: hidden;
22 background-color: #333;
23 }
24 #listNav li {
25 float:left;
26 }
27 #listNav li a {
28 display: block;
29 color: #fff;
30 text-align: center;
31 padding: .8em .8em;
32 text-decoration: none;
33 }
34 #listNav li a:hover {
35 background-color: #111;
36 }
37 #listNav li a.active {
38 background-color: #4CAF50;
39 }
40
41 @media (prefers-color-scheme: dark) {
42 body{
43 background-color: #111;
44 color: #bbb;
45 }
46 a {
47 color: #88f;
48 }
1949 }
20 }
2150 </style>
2251 </head>
2352 <body>
53 <div id="sectNav"><ul id="listNav"></ul></div>
2454 <p id="status">Loading...</p>
2555 <div id="sectPkgs" class="hidden">
2656 <h2>Packages</h2>
......@@ -32,6 +62,11 @@
3262 <ul id="listTypes">
3363 </ul>
3464 </div>
65 <div id="sectFns" class="hidden">
66 <h2>Functions</h2>
67 <ul id="listFns">
68 </ul>
69 </div>
3570 <script src="data.js"></script>
3671 <script src="main.js"></script>
3772 </body>
lib/std/special/doc/main.js+125-21
......@@ -1,9 +1,17 @@
11(function() {
22 var domStatus = document.getElementById("status");
3 var domSectNav = document.getElementById("sectNav");
4 var domListNav = document.getElementById("listNav");
35 var domSectPkgs = document.getElementById("sectPkgs");
46 var domListPkgs = document.getElementById("listPkgs");
57 var domSectTypes = document.getElementById("sectTypes");
68 var domListTypes = document.getElementById("listTypes");
9 var domSectFns = document.getElementById("sectFns");
10 var domListFns = document.getElementById("listFns");
11
12 var typeKindTypeId;
13 var typeKindFnId;
14 findTypeKinds();
715
816 var curNav = {
917 // each element is a package name, e.g. @import("a") then within there @import("b")
......@@ -19,14 +27,29 @@
1927 };
2028
2129 var rootIsStd = detectRootIsStd();
22 var typeKindTypeId = findTypeKindType();
2330 var typeTypeId = findTypeTypeId();
2431 window.addEventListener('hashchange', onHashChange, false);
2532 onHashChange();
2633
34 function renderTitle() {
35 var list = curNav.pkgNames.concat(curNav.declNames);
36 var suffix = " - Zig";
37 if (list.length === 0) {
38 if (rootIsStd) {
39 document.title = "std" + suffix;
40 } else {
41 document.title = zigAnalysis.params.rootName + suffix;
42 }
43 } else {
44 document.title = list.join('.') + suffix;
45 }
46 }
47
2748 function render() {
2849 domStatus.classList.add("hidden");
2950
51 renderTitle();
52
3053 var pkg = zigAnalysis.packages[zigAnalysis.rootPkg];
3154 curNav.pkgObjs = [pkg];
3255 for (var i = 0; i < curNav.pkgNames.length; i += 1) {
......@@ -58,6 +81,8 @@
5881 curNav.declObjs.push(decl);
5982 }
6083
84 renderNav();
85
6186 var lastPkg = curNav.pkgObjs[curNav.pkgObjs.length - 1];
6287 renderPkgList(lastPkg);
6388
......@@ -69,11 +94,46 @@
6994 }
7095 }
7196
97 function renderNav() {
98 var len = curNav.pkgNames.length + curNav.declNames.length;
99 resizeDomList(domListNav, len, '<li><a href="#"></a></li>');
100 var list = [];
101 var hrefPkgNames = [];
102 var hrefDeclNames = [];
103 for (var i = 0; i < curNav.pkgNames.length; i += 1) {
104 hrefPkgNames.push(curNav.pkgNames[i]);
105 list.push({
106 name: curNav.pkgNames[i],
107 link: navLink(hrefPkgNames, hrefDeclNames),
108 });
109 }
110 for (var i = 0; i < curNav.declNames.length; i += 1) {
111 hrefDeclNames.push(curNav.declNames[i]);
112 list.push({
113 name: curNav.declNames[i],
114 link: navLink(hrefPkgNames, hrefDeclNames),
115 });
116 }
117
118 for (var i = 0; i < list.length; i += 1) {
119 var liDom = domListNav.children[i];
120 var aDom = liDom.children[0];
121 aDom.textContent = list[i].name;
122 aDom.setAttribute('href', list[i].link);
123 if (i + 1 == list.length) {
124 aDom.classList.add("active");
125 } else {
126 aDom.classList.remove("active");
127 }
128 }
129 }
130
72131 function render404() {
73132 domStatus.textContent = "404 Not Found";
74133 domStatus.classList.remove("hidden");
75134 domSectPkgs.classList.add("hidden");
76135 domSectTypes.classList.add("hidden");
136 domSectFns.classList.add("hidden");
77137 }
78138
79139 function renderPkgList(pkg) {
......@@ -104,12 +164,22 @@
104164 }
105165 }
106166
167 function navLink(pkgNames, declNames) {
168 if (pkgNames.length === 0 && declNames.length === 0) {
169 return '#';
170 } else if (declNames.length === 0) {
171 return '#' + pkgNames.join('.');
172 } else {
173 return '#' + pkgNames.join('.') + ';' + declNames.join('.');
174 }
175 }
176
107177 function navLinkPkg(childName) {
108 return '#' + (curNav.pkgNames.concat([childName])).join(',');
178 return navLink(curNav.pkgNames.concat([childName]), []);
109179 }
110180
111181 function navLinkDecl(childName) {
112 return '#' + curNav.pkgNames.join(",") + ';' + (curNav.declNames.concat([childName])).join(",");
182 return navLink(curNav.pkgNames, curNav.declNames.concat([childName]));
113183 }
114184
115185 function resizeDomList(listDom, desiredLen, templateHtml) {
......@@ -125,28 +195,55 @@
125195 }
126196
127197 function renderContainer(container) {
128 // Find only the types of this package
129 var list = [];
198 var typesList = [];
199 var fnsList = [];
130200 for (var i = 0; i < container.decls.length; i += 1) {
131201 var decl = zigAnalysis.decls[container.decls[i]];
132 if (decl.type == typeTypeId) {
133 list.push(decl);
202 if (decl.type != null) {
203 if (decl.type == typeTypeId) {
204 typesList.push(decl);
205 } else {
206 var typeKind = zigAnalysis.types[decl.type].kind;
207 if (typeKind === typeKindFnId) {
208 fnsList.push(decl);
209 }
210 }
134211 }
135212 }
136 list.sort(function(a, b) {
213 typesList.sort(function(a, b) {
214 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
215 });
216 fnsList.sort(function(a, b) {
137217 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
138218 });
139219
140 resizeDomList(domListTypes, list.length, '<li><a href="#"></a></li>');
141 for (var i = 0; i < list.length; i += 1) {
142 var liDom = domListTypes.children[i];
143 var aDom = liDom.children[0];
144 var decl = list[i];
145 aDom.textContent = decl.name;
146 aDom.setAttribute('href', navLinkDecl(decl.name));
220 if (typesList.length === 0) {
221 domSectTypes.classList.add("hidden");
222 } else {
223 resizeDomList(domListTypes, typesList.length, '<li><a href="#"></a></li>');
224 for (var i = 0; i < typesList.length; i += 1) {
225 var liDom = domListTypes.children[i];
226 var aDom = liDom.children[0];
227 var decl = typesList[i];
228 aDom.textContent = decl.name;
229 aDom.setAttribute('href', navLinkDecl(decl.name));
230 }
231 domSectTypes.classList.remove("hidden");
147232 }
148233
149 domSectTypes.classList.remove("hidden");
234 if (fnsList.length === 0) {
235 domSectFns.classList.add("hidden");
236 } else {
237 resizeDomList(domListFns, fnsList.length, '<li><a href="#"></a></li>');
238 for (var i = 0; i < fnsList.length; i += 1) {
239 var liDom = domListFns.children[i];
240 var aDom = liDom.children[0];
241 var decl = fnsList[i];
242 aDom.textContent = decl.name;
243 aDom.setAttribute('href', navLinkDecl(decl.name));
244 }
245 domSectFns.classList.remove("hidden");
246 }
150247 }
151248
152249 function operatorCompare(a, b) {
......@@ -169,13 +266,20 @@
169266 return rootPkg.file === stdPkg.file;
170267 }
171268
172 function findTypeKindType() {
269 function findTypeKinds() {
173270 for (var i = 0; i < zigAnalysis.typeKinds.length; i += 1) {
174271 if (zigAnalysis.typeKinds[i] === "Type") {
175 return i;
272 typeKindTypeId = i;
273 } else if (zigAnalysis.typeKinds[i] === "Fn") {
274 typeKindFnId = i;
176275 }
177276 }
178 throw new Error("No type kind 'Type' found");
277 if (typeKindTypeId == null) {
278 throw new Error("No type kind 'Type' found");
279 }
280 if (typeKindFnId == null) {
281 throw new Error("No type kind 'Fn' found");
282 }
179283 }
180284
181285 function findTypeTypeId() {
......@@ -194,11 +298,11 @@
194298 declNames: [],
195299 declObjs: [],
196300 };
197 if (location.hash[0] === '#') {
301 if (location.hash[0] === '#' && location.hash.length > 1) {
198302 var parts = location.hash.substring(1).split(";");
199303 curNav.pkgNames = parts[0].split(".");
200304 if (parts[1] != null) {
201 curNav.declNames = parts[1] ? parts[1].split(".") : [];
305 curNav.declNames = parts[1].split(".");
202306 }
203307 }
204308 render();