1+ -- -
2+ layout : null
3+ -- -
4+ var darkTheme = document . createElement ( "link" ) ;
5+ darkTheme . rel = "stylesheet alternate" ;
6+ darkTheme . href = "{{ '/assets/css/main.dark.css' | relative_url }}" ;
7+ document . head . appendChild ( darkTheme ) ;
8+ window . addEventListener ( "DOMContentLoaded" , function ( ) {
9+ var list = document . querySelector ( ".masthead .visible-links" ) ;
10+ if ( ! list ) return ;
11+ var mediaQuery = window . matchMedia ( "(prefers-color-scheme: dark)" ) ;
12+ function handler ( ) {
13+ darkTheme . rel = mediaQuery . matches ? "stylesheet" : "stylesheet alternate" ;
14+ }
15+ var current = 0 ;
16+ var modes = [ "light" , "dark" , "auto" ] ;
17+ var modeNames = [ "亮色" , "暗色" , "自动" ] ;
18+ var switcher = document . createElement ( "a" ) ;
19+ switcher . className = "masthead__menu-item" ;
20+ switcher . innerText = modeNames [ current ] ;
21+ switcher . href = "javascript:;" ;
22+ switcher . onclick = function ( ) {
23+ themeApply ( current + 1 ) ;
24+ }
25+ list . appendChild ( switcher ) ;
26+ function themeApply ( index ) {
27+ index = ( Number ( index ) || 0 ) % modes . length ;
28+ if ( index === current ) return ;
29+ if ( modes [ current ] === "auto" ) mediaQuery . removeEventListener ( "change" , handler ) ;
30+ current = index ;
31+ var mode = modes [ current ] ;
32+ switcher . innerText = modeNames [ current ] ;
33+ localStorage . setItem ( "theme" , current ) ;
34+ if ( mode === "light" ) darkTheme . rel = "stylesheet alternate" ;
35+ else if ( mode === "dark" ) darkTheme . rel = "stylesheet" ;
36+ else {
37+ mediaQuery . addEventListener ( "change" , handler ) ;
38+ handler ( ) ;
39+ }
40+ }
41+ themeApply ( localStorage . getItem ( "theme" ) ) ;
42+ window . addEventListener ( "storage" , function ( event ) {
43+ event . key === "theme" && themeApply ( event . newValue ) ;
44+ } ) ;
45+ } ) ;
0 commit comments