From 20eea0b41e39e58bdb9ea5103aba06cb19bfe01f Mon Sep 17 00:00:00 2001 From: Tyler Mandry Date: Sat, 8 Mar 2025 00:02:16 -0700 Subject: [PATCH] Add "Auto" option to theme menu This switches between light and dark based on the OS, and provides a way to remove a saved preference. --- src/theme/book.js | 28 ++++++++++++++++++++++++---- src/theme/index.hbs | 1 + 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/theme/book.js b/src/theme/book.js index 9551a495..6070e3af 100644 --- a/src/theme/book.js +++ b/src/theme/book.js @@ -329,7 +329,13 @@ aria-label="Show hidden lines">'; themePopup.querySelectorAll('.theme-selected').forEach(function(el) { el.classList.remove('theme-selected'); }); - themePopup.querySelector('button#' + get_theme()).classList.add('theme-selected'); + const selected = get_saved_theme() ?? "default_theme"; + var element = themePopup.querySelector("button#" + selected); + if (element === null) { + // Fall back in case there is no "Default" item. + element = themePopup.querySelector("button#" + get_theme()); + } + element.classList.add('theme-selected'); } function hideThemes() { @@ -338,13 +344,22 @@ aria-label="Show hidden lines">'; themeToggleButton.focus(); } - function get_theme() { - let theme; + function get_saved_theme() { + var theme = null; try { theme = localStorage.getItem('mdbook-theme'); } catch (e) { // ignore error. } + return theme; + } + + function delete_saved_theme() { + localStorage.removeItem('mdbook-theme'); + } + + function get_theme() { + var theme = get_saved_theme(); if (theme === null || theme === undefined || !themeIds.includes(theme)) { if (typeof default_dark_theme === 'undefined') { // A customized index.hbs might not define this, so fall back to @@ -430,7 +445,12 @@ aria-label="Show hidden lines">'; } else { return; } - set_theme(theme); + if (theme === "default_theme" || theme == null) { + delete_saved_theme(); + set_theme(get_theme(), false); + } else { + set_theme(theme); + } }); themePopup.addEventListener('focusout', function(e) { diff --git a/src/theme/index.hbs b/src/theme/index.hbs index 6035750e..98f3b886 100644 --- a/src/theme/index.hbs +++ b/src/theme/index.hbs @@ -134,6 +134,7 @@