// Append using posix-style a file name or directory to Base function append(Base, New) { if (!New) return Base; if (Base) Base += "/"; Base += New; return Base; } // Get relative path to access FilePath from CurrentDirectory function computeRelativePath(FilePath, CurrentDirectory) { var Path = FilePath; while (Path) { if (CurrentDirectory == Path) return FilePath.substring(Path.length + 1); Path = Path.substring(0, Path.lastIndexOf("/")); } var Dir = CurrentDirectory; var Result = ""; while (Dir) { if (Dir == FilePath) break; Dir = Dir.substring(0, Dir.lastIndexOf("/")); Result = append(Result, "..") } Result = append(Result, FilePath.substring(Dir.length)) return Result; } function genLink(Ref, CurrentDirectory) { var Path = computeRelativePath(Ref.Path, CurrentDirectory); if (Ref.RefType == "namespace") Path = append(Path, "index.html"); else Path = append(Path, Ref.Name + ".html") ANode = document.createElement("a"); ANode.setAttribute("href", Path); var TextNode = document.createTextNode(Ref.Name); ANode.appendChild(TextNode); return ANode; } function genHTMLOfIndex(Index, CurrentDirectory, IsOutermostList) { // Out will store the HTML elements that Index requires to be generated var Out = []; if (Index.Name) { var SpanNode = document.createElement("span"); var TextNode = document.createTextNode(Index.Name); SpanNode.appendChild(genLink(Index, CurrentDirectory)); Out.push(SpanNode); } if (Index.Children.length == 0) return Out; // Only the outermost list should use ol, the others should use ul var ListNodeName = IsOutermostList ? "ol" : "ul"; var ListNode = document.createElement(ListNodeName); for (Child of Index.Children) { var LiNode = document.createElement("li"); ChildNodes = genHTMLOfIndex(Child, CurrentDirectory, false); for (Node of ChildNodes) LiNode.appendChild(Node); ListNode.appendChild(LiNode); } Out.push(ListNode); return Out; } function createIndex(Index) { // Get the DOM element where the index will be created var IndexDiv = document.getElementById("sidebar-left"); // Get the relative path of this file CurrentDirectory = IndexDiv.getAttribute("path"); var IndexNodes = genHTMLOfIndex(Index, CurrentDirectory, true); for (Node of IndexNodes) IndexDiv.appendChild(Node); } // Runs after DOM loads document.addEventListener("DOMContentLoaded", function() { // JsonIndex is a variable from another file that contains the index // in JSON format var Index = JSON.parse(JsonIndex); createIndex(Index); });