diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs
index b5169b0599773..4458eea95f3e1 100644
--- a/src/librustdoc/html/layout.rs
+++ b/src/librustdoc/html/layout.rs
@@ -111,10 +111,7 @@ crate fn render(
\
\
{after_content}\
- \
+
\
{static_extra_scripts}\
{extra_scripts}\
diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs
index 33639055b59ef..cfa6cd96595d6 100644
--- a/src/librustdoc/html/markdown.rs
+++ b/src/librustdoc/html/markdown.rs
@@ -1313,6 +1313,8 @@ fn init_id_map() -> FxHashMap {
map.insert("toggle-all-docs".to_owned(), 1);
map.insert("all-types".to_owned(), 1);
map.insert("default-settings".to_owned(), 1);
+ map.insert("rustdoc-vars".to_owned(), 1);
+ map.insert("sidebar-vars".to_owned(), 1);
// This is the list of IDs used by rustdoc sections.
map.insert("fields".to_owned(), 1);
map.insert("variants".to_owned(), 1);
diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs
index 2db89e8a7ca68..03e091297e5b6 100644
--- a/src/librustdoc/html/render/mod.rs
+++ b/src/librustdoc/html/render/mod.rs
@@ -4216,11 +4216,8 @@ fn print_sidebar(cx: &Context<'_>, it: &clean::Item, buffer: &mut Buffer, cache:
let relpath = if it.is_mod() { "../" } else { "" };
write!(
buffer,
- "",
+ "",
name = it.name.unwrap_or(kw::Empty),
ty = it.type_(),
path = relpath
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index 3ffb72ba3ee8b..78a825fcca0ba 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -1,5 +1,5 @@
// From rust:
-/* global ALIASES, currentCrate, rootPath */
+/* global ALIASES */
// Local js definitions:
/* global addClass, getCurrentValue, hasClass */
@@ -40,6 +40,21 @@ if (!DOMTokenList.prototype.remove) {
};
}
+(function () {
+ var rustdocVars = document.getElementById("rustdoc-vars");
+ if (rustdocVars) {
+ window.rootPath = rustdocVars.attributes["data-root-path"].value;
+ window.currentCrate = rustdocVars.attributes["data-current-crate"].value;
+ }
+ var sidebarVars = document.getElementById("sidebar-vars");
+ if (sidebarVars) {
+ window.sidebarCurrent = {
+ name: sidebarVars.attributes["data-name"].value,
+ ty: sidebarVars.attributes["data-ty"].value,
+ relpath: sidebarVars.attributes["data-relpath"].value,
+ };
+ }
+}());
// Gets the human-readable string for the virtual-key code of the
// given KeyboardEvent, ev.
@@ -565,7 +580,7 @@ function defocusSearchBar() {
var i, match,
url = document.location.href,
stripped = "",
- len = rootPath.match(/\.\.\//g).length + 1;
+ len = window.rootPath.match(/\.\.\//g).length + 1;
for (i = 0; i < len; ++i) {
match = url.match(/\/[^\/]*$/);
@@ -1504,15 +1519,15 @@ function defocusSearchBar() {
if (type === "mod") {
displayPath = path + "::";
- href = rootPath + path.replace(/::/g, "/") + "/" +
+ href = window.rootPath + path.replace(/::/g, "/") + "/" +
name + "/index.html";
} else if (type === "primitive" || type === "keyword") {
displayPath = "";
- href = rootPath + path.replace(/::/g, "/") +
+ href = window.rootPath + path.replace(/::/g, "/") +
"/" + type + "." + name + ".html";
} else if (type === "externcrate") {
displayPath = "";
- href = rootPath + name + "/index.html";
+ href = window.rootPath + name + "/index.html";
} else if (item.parent !== undefined) {
var myparent = item.parent;
var anchor = "#" + type + "." + name;
@@ -1535,13 +1550,13 @@ function defocusSearchBar() {
} else {
displayPath = path + "::" + myparent.name + "::";
}
- href = rootPath + path.replace(/::/g, "/") +
+ href = window.rootPath + path.replace(/::/g, "/") +
"/" + pageType +
"." + pageName +
".html" + anchor;
} else {
displayPath = item.path + "::";
- href = rootPath + item.path.replace(/::/g, "/") +
+ href = window.rootPath + item.path.replace(/::/g, "/") +
"/" + type + "." + name + ".html";
}
return [displayPath, href];
@@ -1973,7 +1988,7 @@ function defocusSearchBar() {
startSearch();
// Draw a convenient sidebar of known crates if we have a listing
- if (rootPath === "../" || rootPath === "./") {
+ if (window.rootPath === "../" || window.rootPath === "./") {
var sidebar = document.getElementsByClassName("sidebar-elems")[0];
if (sidebar) {
var div = document.createElement("div");
@@ -1992,11 +2007,11 @@ function defocusSearchBar() {
crates.sort();
for (var i = 0; i < crates.length; ++i) {
var klass = "crate";
- if (rootPath !== "./" && crates[i] === window.currentCrate) {
+ if (window.rootPath !== "./" && crates[i] === window.currentCrate) {
klass += " current";
}
var link = document.createElement("a");
- link.href = rootPath + crates[i] + "/index.html";
+ link.href = window.rootPath + crates[i] + "/index.html";
// The summary in the search index has HTML, so we need to
// dynamically render it as plaintext.
link.title = convertHTMLToPlaintext(rawSearchIndex[crates[i]].doc);
@@ -2118,7 +2133,7 @@ function defocusSearchBar() {
var libs = Object.getOwnPropertyNames(imp);
for (var i = 0, llength = libs.length; i < llength; ++i) {
- if (libs[i] === currentCrate) { continue; }
+ if (libs[i] === window.currentCrate) { continue; }
var structs = imp[libs[i]];
struct_loop:
@@ -2143,7 +2158,7 @@ function defocusSearchBar() {
var href = elem.getAttribute("href");
if (href && href.indexOf("http") !== 0) {
- elem.setAttribute("href", rootPath + href);
+ elem.setAttribute("href", window.rootPath + href);
}
});
diff --git a/src/tools/rustdoc-js/tester.js b/src/tools/rustdoc-js/tester.js
index 63f2d2f5d2f68..3f6bd60397526 100644
--- a/src/tools/rustdoc-js/tester.js
+++ b/src/tools/rustdoc-js/tester.js
@@ -263,8 +263,7 @@ function loadMainJsAndIndex(mainJs, searchIndex, storageJs, crate) {
"handleAliases", "getQuery", "buildIndex", "execQuery", "execSearch"];
ALIASES = {};
- finalJS += 'window = { "currentCrate": "' + crate + '" };\n';
- finalJS += 'var rootPath = "../";\n';
+ finalJS += 'window = { "currentCrate": "' + crate + '", rootPath: "../" };\n';
finalJS += loadThings(["hasOwnProperty", "onEach"], 'function', extractFunction, storageJs);
finalJS += loadThings(arraysToLoad, 'array', extractArrayVariable, mainJs);
finalJS += loadThings(variablesToLoad, 'variable', extractVariable, mainJs);