function genLink(Ref) { // we treat the file paths different depending on if we're // serving via a http server or viewing from a local var Path = window.location.protocol.startsWith("file") ? `${window.location.protocol}//${window.location.host}/${Ref.Path}` : `${window.location.protocol}//${RootPath}/${Ref.Path}`; if (Ref.RefType === "namespace") { Path = `${Path}/index.html` } else if (Ref.Path === "") { Path = `${Path}${Ref.Name}.html`; } else { Path = `${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() { // LoadIndex is an asynchronous function that will be generated clang-doc. // It ensures that the function call will not block as soon the page loads, // since the index object are often huge and can contain thousands of lines. LoadIndex().then((Index) => { createIndex(Index); }); });