diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs
index dda749049319..cf5dda3f2d41 100644
--- a/src/librustdoc/html/render/mod.rs
+++ b/src/librustdoc/html/render/mod.rs
@@ -421,6 +421,12 @@ fn settings(root_path: &str, suffix: &str, theme_names: Vec) -> Result summary.hideme::after {
padding-top: 0px;
}
+ /* Space is at a premium on mobile, so remove the theme-picker icon. */
+ #theme-picker {
+ display: none;
+ width: 0;
+ }
+
.rustdoc {
flex-direction: column;
}
@@ -1873,12 +1879,6 @@ details.rustdoc-toggle[open] > summary.hideme::after {
height: 100%;
}
- nav.sub {
- width: calc(100% - 32px);
- margin-left: 32px;
- margin-bottom: 10px;
- }
-
.source nav:not(.sidebar).sub {
margin-left: 32px;
}
@@ -2075,11 +2075,6 @@ details.rustdoc-toggle[open] > summary.hideme::after {
border: 0;
}
- #crate-search + .search-input {
- width: calc(100% + 71px);
- margin-left: -36px;
- }
-
#theme-picker, #settings-menu {
padding: 5px;
width: 31px;
diff --git a/src/librustdoc/html/static/js/main.js b/src/librustdoc/html/static/js/main.js
index f41c1bd817ab..011e60b8fa0d 100644
--- a/src/librustdoc/html/static/js/main.js
+++ b/src/librustdoc/html/static/js/main.js
@@ -129,10 +129,15 @@ function hideThemeButtonState() {
// Set up the theme picker list.
(function () {
+ if (!document.location.href.startsWith("file:///")) {
+ return;
+ }
var themeChoices = getThemesElement();
var themePicker = getThemePickerElement();
var availableThemes = getVar("themes").split(",");
+ removeClass(themeChoices.parentElement, "hidden");
+
function switchThemeButtonState() {
if (themeChoices.style.display === "block") {
hideThemeButtonState();
diff --git a/src/librustdoc/html/static/js/settings.js b/src/librustdoc/html/static/js/settings.js
index 4f10e14e8558..e5c7e1ea1a03 100644
--- a/src/librustdoc/html/static/js/settings.js
+++ b/src/librustdoc/html/static/js/settings.js
@@ -1,15 +1,18 @@
// Local js definitions:
/* global getSettingValue, getVirtualKey, onEachLazy, updateLocalStorage, updateSystemTheme */
+/* global addClass, removeClass */
(function () {
function changeSetting(settingName, value) {
updateLocalStorage("rustdoc-" + settingName, value);
switch (settingName) {
+ case "theme":
case "preferred-dark-theme":
case "preferred-light-theme":
case "use-system-theme":
updateSystemTheme();
+ updateLightAndDark();
break;
}
}
@@ -29,7 +32,32 @@
}
}
+ function showLightAndDark() {
+ addClass(document.getElementById("theme").parentElement.parentElement, "hidden");
+ removeClass(document.getElementById("preferred-light-theme").parentElement.parentElement,
+ "hidden");
+ removeClass(document.getElementById("preferred-dark-theme").parentElement.parentElement,
+ "hidden");
+ }
+
+ function hideLightAndDark() {
+ addClass(document.getElementById("preferred-light-theme").parentElement.parentElement,
+ "hidden");
+ addClass(document.getElementById("preferred-dark-theme").parentElement.parentElement,
+ "hidden");
+ removeClass(document.getElementById("theme").parentElement.parentElement, "hidden");
+ }
+
+ function updateLightAndDark() {
+ if (getSettingValue("use-system-theme") !== "false") {
+ showLightAndDark();
+ } else {
+ hideLightAndDark();
+ }
+ }
+
function setEvents() {
+ updateLightAndDark();
onEachLazy(document.getElementsByClassName("slider"), function(elem) {
var toggle = elem.previousElementSibling;
var settingId = toggle.id;
diff --git a/src/librustdoc/html/static/js/storage.js b/src/librustdoc/html/static/js/storage.js
index d8b3ba92dcba..2394df4c715d 100644
--- a/src/librustdoc/html/static/js/storage.js
+++ b/src/librustdoc/html/static/js/storage.js
@@ -187,22 +187,25 @@ var updateSystemTheme = (function() {
var mql = window.matchMedia("(prefers-color-scheme: dark)");
function handlePreferenceChange(mql) {
+ let use = function(theme) {
+ switchTheme(window.currentTheme, window.mainTheme, theme, true);
+ };
// maybe the user has disabled the setting in the meantime!
if (getSettingValue("use-system-theme") !== "false") {
var lightTheme = getSettingValue("preferred-light-theme") || "light";
var darkTheme = getSettingValue("preferred-dark-theme") || "dark";
if (mql.matches) {
- // prefers a dark theme
- switchTheme(window.currentTheme, window.mainTheme, darkTheme, true);
+ use(darkTheme);
} else {
// prefers a light theme, or has no preference
- switchTheme(window.currentTheme, window.mainTheme, lightTheme, true);
+ use(lightTheme);
}
-
// note: we save the theme so that it doesn't suddenly change when
// the user disables "use-system-theme" and reloads the page or
// navigates to another page
+ } else {
+ use(getSettingValue("theme"));
}
}
diff --git a/src/librustdoc/templates/page.html b/src/librustdoc/templates/page.html
index 02808754b539..1ef001ec2b71 100644
--- a/src/librustdoc/templates/page.html
+++ b/src/librustdoc/templates/page.html
@@ -96,7 +96,7 @@
{%- endif -%}
{#- -#}