diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 7f3e5d15de192..a79b3e8ed084b 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -422,6 +422,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; } @@ -1884,12 +1890,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; } @@ -2086,11 +2086,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 f41c1bd817ab2..011e60b8fa0d2 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 4f10e14e8558c..e5c7e1ea1a03c 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 d8b3ba92dcba2..2394df4c715d4 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 02808754b539b..1ef001ec2b719 100644 --- a/src/librustdoc/templates/page.html +++ b/src/librustdoc/templates/page.html @@ -96,7 +96,7 @@ {%- endif -%} {#- -#}