1
1
"use strict" ;
2
2
3
3
function changeThemeTo ( val ) {
4
- document . documentElement . setAttribute ( "data-theme" , val ) ;
5
- // save theme prefs in the browser
6
- if ( storageAvailable ( "localStorage" ) ) {
7
- localStorage . setItem ( "blog-rust-lang-org-theme" , val ) ;
4
+ if ( val === "system" ) {
5
+ setThemeToSystemPref ( ) ;
6
+ // delete explicit theme pref from browser storage
7
+ if ( storageAvailable ( "localStorage" ) ) {
8
+ localStorage . removeItem ( "blog-rust-lang-org-theme" ) ;
9
+ }
10
+ } else {
11
+ document . documentElement . setAttribute ( "data-theme" , val ) ;
12
+ // save theme prefs in the browser
13
+ if ( storageAvailable ( "localStorage" ) ) {
14
+ localStorage . setItem ( "blog-rust-lang-org-theme" , val ) ;
15
+ }
8
16
}
9
17
// the theme dropdown will close itself when returning to the dropdown() caller
10
18
}
@@ -44,6 +52,14 @@ function handleBlur(event) {
44
52
}
45
53
}
46
54
55
+ function setThemeToSystemPref ( ) {
56
+ if ( window . matchMedia ( "(prefers-color-scheme: dark)" ) . matches ) {
57
+ document . documentElement . setAttribute ( "data-theme" , "dark" ) ;
58
+ } else {
59
+ document . documentElement . setAttribute ( "data-theme" , "light" ) ;
60
+ }
61
+ }
62
+
47
63
// close the theme dropdown if clicking somewhere else
48
64
document . querySelector ( '.theme-icon' ) . onblur = handleBlur ;
49
65
@@ -54,9 +70,8 @@ if (storageAvailable("localStorage")) {
54
70
}
55
71
if ( savedTheme ) {
56
72
document . documentElement . setAttribute ( "data-theme" , savedTheme ) ;
57
- } else if ( window . matchMedia ( "(prefers-color-scheme: dark)" ) . matches ) {
58
- document . documentElement . setAttribute ( "data-theme" , "dark" ) ;
59
- localStorage . setItem ( "blog-rust-lang-org-theme" , "dark" ) ;
73
+ } else {
74
+ setThemeToSystemPref ( ) ;
60
75
}
61
76
62
77
// show the theme selector only if JavaScript is enabled/available
0 commit comments