@@ -322,12 +322,20 @@ function playground_text(playground, hidden = true) {
322322 var theme ;
323323 try { theme = localStorage . getItem ( 'mdbook-theme' ) ; } catch ( e ) { }
324324 if ( theme === null || theme === undefined || ! themeIds . includes ( theme ) ) {
325- return default_theme ;
325+ if ( typeof default_dark_theme === 'undefined' ) {
326+ // A customized index.hbs might not define this, so fall back to
327+ // old behavior of determining the default on page load.
328+ return default_theme ;
329+ }
330+ return window . matchMedia ( "(prefers-color-scheme: dark)" ) . matches
331+ ? default_dark_theme
332+ : default_light_theme ;
326333 } else {
327334 return theme ;
328335 }
329336 }
330337
338+ var previousTheme = default_theme ;
331339 function set_theme ( theme , store = true ) {
332340 let ace_theme ;
333341
@@ -359,21 +367,23 @@ function playground_text(playground, hidden = true) {
359367 } ) ;
360368 }
361369
362- var previousTheme = get_theme ( ) ;
363-
364370 if ( store ) {
365371 try { localStorage . setItem ( 'mdbook-theme' , theme ) ; } catch ( e ) { }
366372 }
367373
368374 html . classList . remove ( previousTheme ) ;
369375 html . classList . add ( theme ) ;
376+ previousTheme = theme ;
370377 updateThemeSelected ( ) ;
371378 }
372379
373- // Set theme
374- var theme = get_theme ( ) ;
380+ const query = window . matchMedia ( "(prefers-color-scheme: dark)" ) ;
381+ query . onchange = function ( event ) {
382+ set_theme ( get_theme ( ) , false ) ;
383+ } ;
375384
376- set_theme ( theme , false ) ;
385+ // Set theme.
386+ set_theme ( get_theme ( ) , false ) ;
377387
378388 themeToggleButton . addEventListener ( 'click' , function ( ) {
379389 if ( themePopup . style . display === 'block' ) {
0 commit comments