2 /* global sourcesIndex */
4 // Local js definitions:
5 /* global addClass, getCurrentValue, hasClass, removeClass, updateLocalStorage */
7 function getCurrentFilePath() {
8 var parts = window.location.pathname.split("/");
9 var rootPathParts = window.rootPath.split("/");
11 for (var i = 0; i < rootPathParts.length; ++i) {
12 if (rootPathParts[i] === "..") {
16 var file = window.location.pathname.substring(parts.join("/").length);
17 if (file.startsWith("/")) {
18 file = file.substring(1);
20 return file.substring(0, file.length - 5);
23 function createDirEntry(elem, parent, fullPath, currentFile, hasFoundFile) {
24 var name = document.createElement("div");
25 name.className = "name";
27 fullPath += elem["name"] + "/";
29 name.onclick = function() {
30 if (hasClass(this, "expand")) {
31 removeClass(this, "expand");
33 addClass(this, "expand");
36 name.innerText = elem["name"];
38 var children = document.createElement("div");
39 children.className = "children";
40 var folders = document.createElement("div");
41 folders.className = "folders";
42 for (var i = 0; i < elem.dirs.length; ++i) {
43 if (createDirEntry(elem.dirs[i], folders, fullPath, currentFile,
44 hasFoundFile) === true) {
45 addClass(name, "expand");
49 children.appendChild(folders);
51 var files = document.createElement("div");
52 files.className = "files";
53 for (i = 0; i < elem.files.length; ++i) {
54 var file = document.createElement("a");
55 file.innerText = elem.files[i];
56 file.href = window.rootPath + "src/" + fullPath + elem.files[i] + ".html";
57 if (hasFoundFile === false &&
58 currentFile === fullPath + elem.files[i]) {
59 file.className = "selected";
60 addClass(name, "expand");
63 files.appendChild(file);
65 search.fullPath = fullPath;
66 children.appendChild(files);
67 parent.appendChild(name);
68 parent.appendChild(children);
69 return hasFoundFile === true && currentFile.startsWith(fullPath);
72 function toggleSidebar() {
73 var sidebar = document.getElementById("source-sidebar");
74 var child = this.children[0].children[0];
75 if (child.innerText === ">") {
76 sidebar.style.left = "";
78 child.innerText = "<";
79 updateLocalStorage("rustdoc-source-sidebar-show", "true");
81 sidebar.style.left = "-300px";
82 this.style.left = "0";
83 child.innerText = ">";
84 updateLocalStorage("rustdoc-source-sidebar-show", "false");
88 function createSidebarToggle() {
89 var sidebarToggle = document.createElement("div");
90 sidebarToggle.id = "sidebar-toggle";
91 sidebarToggle.onclick = toggleSidebar;
93 var inner1 = document.createElement("div");
94 inner1.style.position = "relative";
96 var inner2 = document.createElement("div");
97 inner2.style.paddingTop = "3px";
98 if (getCurrentValue("rustdoc-source-sidebar-show") === "true") {
99 inner2.innerText = "<";
101 inner2.innerText = ">";
102 sidebarToggle.style.left = "0";
105 inner1.appendChild(inner2);
106 sidebarToggle.appendChild(inner1);
107 return sidebarToggle;
110 function createSourceSidebar() {
111 if (window.rootPath.endsWith("/") === false) {
112 window.rootPath += "/";
114 var main = document.getElementById("main");
116 var sidebarToggle = createSidebarToggle();
117 main.insertBefore(sidebarToggle, main.firstChild);
119 var sidebar = document.createElement("div");
120 sidebar.id = "source-sidebar";
121 if (getCurrentValue("rustdoc-source-sidebar-show") !== "true") {
122 sidebar.style.left = "-300px";
125 var currentFile = getCurrentFilePath();
126 var hasFoundFile = false;
128 var title = document.createElement("div");
129 title.className = "title";
130 title.innerText = "Files";
131 sidebar.appendChild(title);
132 Object.keys(sourcesIndex).forEach(function(key) {
133 sourcesIndex[key].name = key;
134 hasFoundFile = createDirEntry(sourcesIndex[key], sidebar, "",
135 currentFile, hasFoundFile);
138 main.insertBefore(sidebar, main.firstChild);