diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs index 03ad784ef77c..17094aac4bed 100644 --- a/src/librustdoc/html/layout.rs +++ b/src/librustdoc/html/layout.rs @@ -54,6 +54,7 @@ struct PageLayout<'a> { sidebar: String, content: String, krate_with_trailing_slash: String, + crate rustdoc_version: &'a str, } crate fn render( @@ -71,6 +72,7 @@ crate fn render( .map(StylePath::basename) .collect::>() .unwrap_or_default(); + let rustdoc_version = rustc_interface::util::version_str().unwrap_or("unknown version"); let content = Buffer::html().to_display(t); // Note: This must happen before making the sidebar. let sidebar = Buffer::html().to_display(sidebar); let teractx = tera::Context::from_serialize(PageLayout { @@ -81,6 +83,7 @@ crate fn render( sidebar, content, krate_with_trailing_slash, + rustdoc_version, }) .unwrap(); templates.render("page.html", &teractx).unwrap() diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs index 6b0f8dad4c50..cbb575586361 100644 --- a/src/librustdoc/html/render/write_shared.rs +++ b/src/librustdoc/html/render/write_shared.rs @@ -265,26 +265,7 @@ pub(super) fn write_shared( let mut themes: Vec<&String> = themes.iter().collect(); themes.sort(); - // FIXME: this should probably not be a toolchain file since it depends on `--theme`. - // But it seems a shame to copy it over and over when it's almost always the same. - // Maybe we can change the representation to move this out of main.js? - write_minify( - "main.js", - static_files::MAIN_JS - .replace( - "/* INSERT THEMES HERE */", - &format!(" = {}", serde_json::to_string(&themes).unwrap()), - ) - .replace( - "/* INSERT RUSTDOC_VERSION HERE */", - &format!( - "rustdoc {}", - rustc_interface::util::version_str().unwrap_or("unknown version") - ), - ), - cx, - options, - )?; + write_minify("main.js", static_files::MAIN_JS, cx, options)?; write_minify("search.js", static_files::SEARCH_JS, cx, options)?; write_minify("settings.js", static_files::SETTINGS_JS, cx, options)?; @@ -292,18 +273,7 @@ pub(super) fn write_shared( write_minify("source-script.js", static_files::sidebar::SOURCE_SCRIPT, cx, options)?; } - { - write_minify( - "storage.js", - format!( - "var resourcesSuffix = \"{}\";{}", - cx.shared.resource_suffix, - static_files::STORAGE_JS - ), - cx, - options, - )?; - } + write_minify("storage.js", static_files::STORAGE_JS, cx, options)?; if cx.shared.layout.scrape_examples_extension { cx.write_minify( diff --git a/src/librustdoc/html/static/js/main.js b/src/librustdoc/html/static/js/main.js index c9fa72cbaab0..4843aa575b8c 100644 --- a/src/librustdoc/html/static/js/main.js +++ b/src/librustdoc/html/static/js/main.js @@ -37,14 +37,29 @@ 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; - window.searchJS = rustdocVars.attributes["data-search-js"].value; - window.searchIndexJS = rustdocVars.attributes["data-search-index-js"].value; +// Get a value from the rustdoc-vars div, which is used to convey data from +// Rust to the JS. If there is no such element, return null. +function getVar(name) { + var el = document.getElementById("rustdoc-vars"); + if (el) { + return el.attributes["data-" + name].value; + } else { + return null; } +} + +// Given a basename (e.g. "storage") and an extension (e.g. ".js"), return a URL +// for a resource under the root-path, with the resource-suffix. +function resourcePath(basename, extension) { + return getVar("root-path") + basename + getVar("resource-suffix") + extension; +} + + +(function () { + window.rootPath = getVar("root-path"); + window.currentCrate = getVar("current-crate"); + window.searchJS = resourcePath("search", "js"); + window.searchIndexJS = resourcePath("search-index", "js"); var sidebarVars = document.getElementById("sidebar-vars"); if (sidebarVars) { window.sidebarCurrent = { @@ -115,7 +130,7 @@ function hideThemeButtonState() { (function () { var themeChoices = getThemesElement(); var themePicker = getThemePickerElement(); - var availableThemes/* INSERT THEMES HERE */; + var availableThemes = getVar("themes").split(","); function switchThemeButtonState() { if (themeChoices.style.display === "block") { @@ -980,7 +995,7 @@ function hideThemeButtonState() { var rustdoc_version = document.createElement("span"); rustdoc_version.className = "bottom"; var rustdoc_version_code = document.createElement("code"); - rustdoc_version_code.innerText = "/* INSERT RUSTDOC_VERSION HERE */"; + rustdoc_version_code.innerText = "rustdoc " + getVar("rustdoc-version"); rustdoc_version.appendChild(rustdoc_version_code); container.appendChild(rustdoc_version); diff --git a/src/librustdoc/html/static/js/storage.js b/src/librustdoc/html/static/js/storage.js index 78ed17e6899e..606c237aea7d 100644 --- a/src/librustdoc/html/static/js/storage.js +++ b/src/librustdoc/html/static/js/storage.js @@ -1,5 +1,3 @@ -// From rust: -/* global resourcesSuffix */ var darkThemes = ["dark", "ayu"]; window.currentTheme = document.getElementById("themeStyle"); window.mainTheme = document.getElementById("mainThemeStyle"); @@ -107,9 +105,8 @@ function getCurrentValue(name) { } function switchTheme(styleElem, mainStyleElem, newTheme, saveTheme) { - var fullBasicCss = "rustdoc" + resourcesSuffix + ".css"; - var fullNewTheme = newTheme + resourcesSuffix + ".css"; - var newHref = mainStyleElem.href.replace(fullBasicCss, fullNewTheme); + var newHref = mainStyleElem.href.replace( + /\/rustdoc([^/]*)\.css/, "/" + newTheme + "$1" + ".css"); // If this new value comes from a system setting or from the previously // saved theme, no need to save it. diff --git a/src/librustdoc/html/templates/page.html b/src/librustdoc/html/templates/page.html index 863bf53eff3a..44a3518828da 100644 --- a/src/librustdoc/html/templates/page.html +++ b/src/librustdoc/html/templates/page.html @@ -14,12 +14,13 @@ id="mainThemeStyle"> {#- -#} {%- for theme in themes -%} {#- -#} + > {%- endfor -%}