Skip to content

Commit 8835bdc

Browse files
tmandryehuss
authored andcommitted
Switch theme when preferred color scheme changes
1 parent 7a1977a commit 8835bdc

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

src/theme/book.js

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -346,12 +346,20 @@ aria-label="Show hidden lines"></button>';
346346
// ignore error.
347347
}
348348
if (theme === null || theme === undefined || !themeIds.includes(theme)) {
349-
return default_theme;
349+
if (typeof default_dark_theme === 'undefined') {
350+
// A customized index.hbs might not define this, so fall back to
351+
// old behavior of determining the default on page load.
352+
return default_theme;
353+
}
354+
return window.matchMedia("(prefers-color-scheme: dark)").matches
355+
? default_dark_theme
356+
: default_light_theme;
350357
} else {
351358
return theme;
352359
}
353360
}
354361

362+
var previousTheme = default_theme;
355363
function set_theme(theme, store = true) {
356364
let ace_theme;
357365

@@ -383,8 +391,6 @@ aria-label="Show hidden lines"></button>';
383391
});
384392
}
385393

386-
const previousTheme = get_theme();
387-
388394
if (store) {
389395
try {
390396
localStorage.setItem('mdbook-theme', theme);
@@ -395,13 +401,17 @@ aria-label="Show hidden lines"></button>';
395401

396402
html.classList.remove(previousTheme);
397403
html.classList.add(theme);
404+
previousTheme = theme;
398405
updateThemeSelected();
399406
}
400407

401-
// Set theme
402-
const theme = get_theme();
408+
const query = window.matchMedia("(prefers-color-scheme: dark)");
409+
query.onchange = function(event) {
410+
set_theme(get_theme(), false);
411+
};
403412

404-
set_theme(theme, false);
413+
// Set theme.
414+
set_theme(get_theme(), false);
405415

406416
themeToggleButton.addEventListener('click', function() {
407417
if (themePopup.style.display === 'block') {

src/theme/index.hbs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,11 @@
5353
<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
5454
{{/if}}
5555

56-
<!-- Provide site root to javascript -->
56+
<!-- Provide site root and default themes to javascript -->
5757
<script>
5858
const path_to_root = "{{ path_to_root }}";
59-
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "{{ preferred_dark_theme }}" : "{{ default_theme }}";
59+
const default_light_theme = "{{ default_theme }}";
60+
const default_dark_theme = "{{ preferred_dark_theme }}";
6061
</script>
6162
<!-- Start loading toc.js asap -->
6263
<script src="{{ resource "toc.js" }}"></script>
@@ -81,6 +82,7 @@
8182

8283
<!-- Set the theme before any content is loaded, prevents flash -->
8384
<script>
85+
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
8486
let theme;
8587
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
8688
if (theme === null || theme === undefined) { theme = default_theme; }

0 commit comments

Comments
 (0)