[sanitizer] Improve FreeBSD ASLR detection
[llvm-project.git] / clang-tools-extra / clang-doc / assets / index.js
bloba5ac90f2e06e78dd063453a492870cce28d64628
1 // Append using posix-style a file name or directory to Base
2 function append(Base, New) {
3 if (!New)
4 return Base;
5 if (Base)
6 Base += "/";
7 Base += New;
8 return Base;
11 // Get relative path to access FilePath from CurrentDirectory
12 function computeRelativePath(FilePath, CurrentDirectory) {
13 var Path = FilePath;
14 while (Path) {
15 if (CurrentDirectory == Path)
16 return FilePath.substring(Path.length + 1);
17 Path = Path.substring(0, Path.lastIndexOf("/"));
20 var Dir = CurrentDirectory;
21 var Result = "";
22 while (Dir) {
23 if (Dir == FilePath)
24 break;
25 Dir = Dir.substring(0, Dir.lastIndexOf("/"));
26 Result = append(Result, "..")
28 Result = append(Result, FilePath.substring(Dir.length))
29 return Result;
32 function genLink(Ref, CurrentDirectory) {
33 var Path = computeRelativePath(Ref.Path, CurrentDirectory);
34 if (Ref.RefType == "namespace")
35 Path = append(Path, "index.html");
36 else
37 Path = append(Path, Ref.Name + ".html")
39 ANode = document.createElement("a");
40 ANode.setAttribute("href", Path);
41 var TextNode = document.createTextNode(Ref.Name);
42 ANode.appendChild(TextNode);
43 return ANode;
46 function genHTMLOfIndex(Index, CurrentDirectory, IsOutermostList) {
47 // Out will store the HTML elements that Index requires to be generated
48 var Out = [];
49 if (Index.Name) {
50 var SpanNode = document.createElement("span");
51 var TextNode = document.createTextNode(Index.Name);
52 SpanNode.appendChild(genLink(Index, CurrentDirectory));
53 Out.push(SpanNode);
55 if (Index.Children.length == 0)
56 return Out;
57 // Only the outermost list should use ol, the others should use ul
58 var ListNodeName = IsOutermostList ? "ol" : "ul";
59 var ListNode = document.createElement(ListNodeName);
60 for (Child of Index.Children) {
61 var LiNode = document.createElement("li");
62 ChildNodes = genHTMLOfIndex(Child, CurrentDirectory, false);
63 for (Node of ChildNodes)
64 LiNode.appendChild(Node);
65 ListNode.appendChild(LiNode);
67 Out.push(ListNode);
68 return Out;
71 function createIndex(Index) {
72 // Get the DOM element where the index will be created
73 var IndexDiv = document.getElementById("sidebar-left");
74 // Get the relative path of this file
75 CurrentDirectory = IndexDiv.getAttribute("path");
76 var IndexNodes = genHTMLOfIndex(Index, CurrentDirectory, true);
77 for (Node of IndexNodes)
78 IndexDiv.appendChild(Node);
81 // Runs after DOM loads
82 document.addEventListener("DOMContentLoaded", function() {
83 // JsonIndex is a variable from another file that contains the index
84 // in JSON format
85 var Index = JSON.parse(JsonIndex);
86 createIndex(Index);
87 });