@@ -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' ) {
0 commit comments