From 8835bdc47e6a23acbdb6d2961d63bffee8c2c548 Mon Sep 17 00:00:00 2001 From: Tyler Mandry Date: Fri, 7 Mar 2025 23:10:41 -0700 Subject: [PATCH 1/3] Switch theme when preferred color scheme changes --- src/theme/book.js | 22 ++++++++++++++++------ src/theme/index.hbs | 6 ++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/theme/book.js b/src/theme/book.js index 327c09fb51..9551a49552 100644 --- a/src/theme/book.js +++ b/src/theme/book.js @@ -346,12 +346,20 @@ aria-label="Show hidden lines">'; // ignore error. } if (theme === null || theme === undefined || !themeIds.includes(theme)) { - return default_theme; + if (typeof default_dark_theme === 'undefined') { + // A customized index.hbs might not define this, so fall back to + // old behavior of determining the default on page load. + return default_theme; + } + return window.matchMedia("(prefers-color-scheme: dark)").matches + ? default_dark_theme + : default_light_theme; } else { return theme; } } + var previousTheme = default_theme; function set_theme(theme, store = true) { let ace_theme; @@ -383,8 +391,6 @@ aria-label="Show hidden lines">'; }); } - const previousTheme = get_theme(); - if (store) { try { localStorage.setItem('mdbook-theme', theme); @@ -395,13 +401,17 @@ aria-label="Show hidden lines">'; html.classList.remove(previousTheme); html.classList.add(theme); + previousTheme = theme; updateThemeSelected(); } - // Set theme - const theme = get_theme(); + const query = window.matchMedia("(prefers-color-scheme: dark)"); + query.onchange = function(event) { + set_theme(get_theme(), false); + }; - set_theme(theme, false); + // Set theme. + set_theme(get_theme(), false); themeToggleButton.addEventListener('click', function() { if (themePopup.style.display === 'block') { diff --git a/src/theme/index.hbs b/src/theme/index.hbs index eade5ec7c2..6035750e7b 100644 --- a/src/theme/index.hbs +++ b/src/theme/index.hbs @@ -53,10 +53,11 @@ {{/if}} - + @@ -81,6 +82,7 @@