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...

+ 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();