diff --git a/src/theme/book.js b/src/theme/book.js
index 327c09fb..9551a495 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 eade5ec7..6035750e 100644
--- a/src/theme/index.hbs
+++ b/src/theme/index.hbs
@@ -53,10 +53,11 @@
{{/if}}
-
+
@@ -81,6 +82,7 @@