diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs
index 17094aac4bed..3d3fa3aaeaa5 100644
--- a/src/librustdoc/html/layout.rs
+++ b/src/librustdoc/html/layout.rs
@@ -67,11 +67,12 @@ crate fn render(
) -> String {
let static_root_path = page.get_static_root_path();
let krate_with_trailing_slash = ensure_trailing_slash(&layout.krate).to_string();
- let themes = style_files
+ let mut themes: Vec = style_files
.iter()
.map(StylePath::basename)
.collect::>()
.unwrap_or_default();
+ themes.sort();
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);
diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs
index cbb575586361..0d5ba8e80d24 100644
--- a/src/librustdoc/html/render/write_shared.rs
+++ b/src/librustdoc/html/render/write_shared.rs
@@ -181,42 +181,34 @@ pub(super) fn write_shared(
cx.write_shared(SharedResource::InvocationSpecific { basename: p }, content, &options.emit)
};
- fn add_background_image_to_css(
- cx: &Context<'_>,
- css: &mut String,
- rule: &str,
- file: &'static str,
- ) {
- css.push_str(&format!(
- "{} {{ background-image: url({}); }}",
- rule,
- SharedResource::ToolchainSpecific { basename: file }
+ // Given "foo.svg", return e.g. "url(\"foo1.58.0.svg\")"
+ fn ver_url(cx: &Context<'_>, basename: &'static str) -> String {
+ format!(
+ "url(\"{}\")",
+ SharedResource::ToolchainSpecific { basename }
.path(cx)
.file_name()
.unwrap()
.to_str()
.unwrap()
- ))
+ )
}
- // Add all the static files. These may already exist, but we just
- // overwrite them anyway to make sure that they're fresh and up-to-date.
- let mut rustdoc_css = static_files::RUSTDOC_CSS.to_owned();
- add_background_image_to_css(
+ // We use the AUTOREPLACE mechanism to inject into our static JS and CSS certain
+ // values that are only known at doc build time. Since this mechanism is somewhat
+ // surprising when reading the code, please limit it to rustdoc.css.
+ write_minify(
+ "rustdoc.css",
+ static_files::RUSTDOC_CSS
+ .replace(
+ "/* AUTOREPLACE: */url(\"toggle-minus.svg\")",
+ &ver_url(cx, "toggle-minus.svg"),
+ )
+ .replace("/* AUTOREPLACE: */url(\"toggle-plus.svg\")", &ver_url(cx, "toggle-plus.svg"))
+ .replace("/* AUTOREPLACE: */url(\"down-arrow.svg\")", &ver_url(cx, "down-arrow.svg")),
cx,
- &mut rustdoc_css,
- "details.undocumented[open] > summary::before, \
- details.rustdoc-toggle[open] > summary::before, \
- details.rustdoc-toggle[open] > summary.hideme::before",
- "toggle-minus.svg",
- );
- add_background_image_to_css(
- cx,
- &mut rustdoc_css,
- "details.undocumented > summary::before, details.rustdoc-toggle > summary::before",
- "toggle-plus.svg",
- );
- write_minify("rustdoc.css", rustdoc_css, cx, options)?;
+ options,
+ )?;
// Add all the static files. These may already exist, but we just
// overwrite them anyway to make sure that they're fresh and up-to-date.
diff --git a/src/librustdoc/html/static/css/rustdoc.css b/src/librustdoc/html/static/css/rustdoc.css
index 0f3eb2ca07d2..61ab502a8503 100644
--- a/src/librustdoc/html/static/css/rustdoc.css
+++ b/src/librustdoc/html/static/css/rustdoc.css
@@ -824,6 +824,7 @@ h2.small-section-header > .anchor {
background-color: transparent;
background-size: 20px;
background-position: calc(100% - 1px) 56%;
+ background-image: /* AUTOREPLACE: */url("down-arrow.svg");
}
.search-container > .top-button {
position: absolute;
@@ -1604,6 +1605,16 @@ details.rustdoc-toggle[open] > summary.hideme > span {
display: none;
}
+details.undocumented[open] > summary::before,
+details.rustdoc-toggle[open] > summary::before,
+details.rustdoc-toggle[open] > summary.hideme::before {
+ background-image: /* AUTOREPLACE: */url("toggle-minus.svg");
+}
+
+details.undocumented > summary::before, details.rustdoc-toggle > summary::before {
+ background-image: /* AUTOREPLACE: */url("toggle-plus.svg");
+}
+
details.rustdoc-toggle[open] > summary::before,
details.rustdoc-toggle[open] > summary.hideme::before {
width: 17px;
diff --git a/src/librustdoc/html/static/js/main.js b/src/librustdoc/html/static/js/main.js
index 4843aa575b8c..5661d4973342 100644
--- a/src/librustdoc/html/static/js/main.js
+++ b/src/librustdoc/html/static/js/main.js
@@ -58,8 +58,8 @@ function resourcePath(basename, extension) {
(function () {
window.rootPath = getVar("root-path");
window.currentCrate = getVar("current-crate");
- window.searchJS = resourcePath("search", "js");
- window.searchIndexJS = resourcePath("search-index", "js");
+ window.searchJS = resourcePath("search", ".js");
+ window.searchIndexJS = resourcePath("search-index", ".js");
var sidebarVars = document.getElementById("sidebar-vars");
if (sidebarVars) {
window.sidebarCurrent = {
diff --git a/src/librustdoc/html/templates/page.html b/src/librustdoc/html/templates/page.html
index 44a3518828da..2a783c6da57e 100644
--- a/src/librustdoc/html/templates/page.html
+++ b/src/librustdoc/html/templates/page.html
@@ -58,11 +58,6 @@
href="{{static_root_path | safe}}favicon{{page.resource_suffix}}.svg"> {#- -#}
{%- endif -%}
{{- layout.external_html.in_header | safe -}}
- {#- -#}
{#- -#}
{#- -#}