diff --git a/lib/std/special/doc/index.html b/lib/std/special/doc/index.html
index 34810b29a2..4fadc35e18 100644
--- a/lib/std/special/doc/index.html
+++ b/lib/std/special/doc/index.html
@@ -5,22 +5,52 @@
Documentation - Zig
+
Loading...
Packages
@@ -32,6 +62,11 @@
+
diff --git a/lib/std/special/doc/main.js b/lib/std/special/doc/main.js
index d27efd2b48..4de26fe4bb 100644
--- a/lib/std/special/doc/main.js
+++ b/lib/std/special/doc/main.js
@@ -1,9 +1,17 @@
(function() {
var domStatus = document.getElementById("status");
+ var domSectNav = document.getElementById("sectNav");
+ var domListNav = document.getElementById("listNav");
var domSectPkgs = document.getElementById("sectPkgs");
var domListPkgs = document.getElementById("listPkgs");
var domSectTypes = document.getElementById("sectTypes");
var domListTypes = document.getElementById("listTypes");
+ var domSectFns = document.getElementById("sectFns");
+ var domListFns = document.getElementById("listFns");
+
+ var typeKindTypeId;
+ var typeKindFnId;
+ findTypeKinds();
var curNav = {
// each element is a package name, e.g. @import("a") then within there @import("b")
@@ -19,14 +27,29 @@
};
var rootIsStd = detectRootIsStd();
- var typeKindTypeId = findTypeKindType();
var typeTypeId = findTypeTypeId();
window.addEventListener('hashchange', onHashChange, false);
onHashChange();
+ function renderTitle() {
+ var list = curNav.pkgNames.concat(curNav.declNames);
+ var suffix = " - Zig";
+ if (list.length === 0) {
+ if (rootIsStd) {
+ document.title = "std" + suffix;
+ } else {
+ document.title = zigAnalysis.params.rootName + suffix;
+ }
+ } else {
+ document.title = list.join('.') + suffix;
+ }
+ }
+
function render() {
domStatus.classList.add("hidden");
+ renderTitle();
+
var pkg = zigAnalysis.packages[zigAnalysis.rootPkg];
curNav.pkgObjs = [pkg];
for (var i = 0; i < curNav.pkgNames.length; i += 1) {
@@ -58,6 +81,8 @@
curNav.declObjs.push(decl);
}
+ renderNav();
+
var lastPkg = curNav.pkgObjs[curNav.pkgObjs.length - 1];
renderPkgList(lastPkg);
@@ -69,11 +94,46 @@
}
}
+ function renderNav() {
+ var len = curNav.pkgNames.length + curNav.declNames.length;
+ resizeDomList(domListNav, len, '');
+ var list = [];
+ var hrefPkgNames = [];
+ var hrefDeclNames = [];
+ for (var i = 0; i < curNav.pkgNames.length; i += 1) {
+ hrefPkgNames.push(curNav.pkgNames[i]);
+ list.push({
+ name: curNav.pkgNames[i],
+ link: navLink(hrefPkgNames, hrefDeclNames),
+ });
+ }
+ for (var i = 0; i < curNav.declNames.length; i += 1) {
+ hrefDeclNames.push(curNav.declNames[i]);
+ list.push({
+ name: curNav.declNames[i],
+ link: navLink(hrefPkgNames, hrefDeclNames),
+ });
+ }
+
+ for (var i = 0; i < list.length; i += 1) {
+ var liDom = domListNav.children[i];
+ var aDom = liDom.children[0];
+ aDom.textContent = list[i].name;
+ aDom.setAttribute('href', list[i].link);
+ if (i + 1 == list.length) {
+ aDom.classList.add("active");
+ } else {
+ aDom.classList.remove("active");
+ }
+ }
+ }
+
function render404() {
domStatus.textContent = "404 Not Found";
domStatus.classList.remove("hidden");
domSectPkgs.classList.add("hidden");
domSectTypes.classList.add("hidden");
+ domSectFns.classList.add("hidden");
}
function renderPkgList(pkg) {
@@ -104,12 +164,22 @@
}
}
+ function navLink(pkgNames, declNames) {
+ if (pkgNames.length === 0 && declNames.length === 0) {
+ return '#';
+ } else if (declNames.length === 0) {
+ return '#' + pkgNames.join('.');
+ } else {
+ return '#' + pkgNames.join('.') + ';' + declNames.join('.');
+ }
+ }
+
function navLinkPkg(childName) {
- return '#' + (curNav.pkgNames.concat([childName])).join(',');
+ return navLink(curNav.pkgNames.concat([childName]), []);
}
function navLinkDecl(childName) {
- return '#' + curNav.pkgNames.join(",") + ';' + (curNav.declNames.concat([childName])).join(",");
+ return navLink(curNav.pkgNames, curNav.declNames.concat([childName]));
}
function resizeDomList(listDom, desiredLen, templateHtml) {
@@ -125,28 +195,55 @@
}
function renderContainer(container) {
- // Find only the types of this package
- var list = [];
+ var typesList = [];
+ var fnsList = [];
for (var i = 0; i < container.decls.length; i += 1) {
var decl = zigAnalysis.decls[container.decls[i]];
- if (decl.type == typeTypeId) {
- list.push(decl);
+ if (decl.type != null) {
+ if (decl.type == typeTypeId) {
+ typesList.push(decl);
+ } else {
+ var typeKind = zigAnalysis.types[decl.type].kind;
+ if (typeKind === typeKindFnId) {
+ fnsList.push(decl);
+ }
+ }
}
}
- list.sort(function(a, b) {
+ typesList.sort(function(a, b) {
+ return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
+ });
+ fnsList.sort(function(a, b) {
return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
});
- resizeDomList(domListTypes, list.length, '');
- for (var i = 0; i < list.length; i += 1) {
- var liDom = domListTypes.children[i];
- var aDom = liDom.children[0];
- var decl = list[i];
- aDom.textContent = decl.name;
- aDom.setAttribute('href', navLinkDecl(decl.name));
+ if (typesList.length === 0) {
+ domSectTypes.classList.add("hidden");
+ } else {
+ resizeDomList(domListTypes, typesList.length, '');
+ for (var i = 0; i < typesList.length; i += 1) {
+ var liDom = domListTypes.children[i];
+ var aDom = liDom.children[0];
+ var decl = typesList[i];
+ aDom.textContent = decl.name;
+ aDom.setAttribute('href', navLinkDecl(decl.name));
+ }
+ domSectTypes.classList.remove("hidden");
}
- domSectTypes.classList.remove("hidden");
+ if (fnsList.length === 0) {
+ domSectFns.classList.add("hidden");
+ } else {
+ resizeDomList(domListFns, fnsList.length, '');
+ for (var i = 0; i < fnsList.length; i += 1) {
+ var liDom = domListFns.children[i];
+ var aDom = liDom.children[0];
+ var decl = fnsList[i];
+ aDom.textContent = decl.name;
+ aDom.setAttribute('href', navLinkDecl(decl.name));
+ }
+ domSectFns.classList.remove("hidden");
+ }
}
function operatorCompare(a, b) {
@@ -169,13 +266,20 @@
return rootPkg.file === stdPkg.file;
}
- function findTypeKindType() {
+ function findTypeKinds() {
for (var i = 0; i < zigAnalysis.typeKinds.length; i += 1) {
if (zigAnalysis.typeKinds[i] === "Type") {
- return i;
+ typeKindTypeId = i;
+ } else if (zigAnalysis.typeKinds[i] === "Fn") {
+ typeKindFnId = i;
}
}
- throw new Error("No type kind 'Type' found");
+ if (typeKindTypeId == null) {
+ throw new Error("No type kind 'Type' found");
+ }
+ if (typeKindFnId == null) {
+ throw new Error("No type kind 'Fn' found");
+ }
}
function findTypeTypeId() {
@@ -194,11 +298,11 @@
declNames: [],
declObjs: [],
};
- if (location.hash[0] === '#') {
+ if (location.hash[0] === '#' && location.hash.length > 1) {
var parts = location.hash.substring(1).split(";");
curNav.pkgNames = parts[0].split(".");
if (parts[1] != null) {
- curNav.declNames = parts[1] ? parts[1].split(".") : [];
+ curNav.declNames = parts[1].split(".");
}
}
render();