@@ -2,7 +2,7 @@ import './polyfill'
22
33import { Links , MessageFrom , MessageKey , StorageKey } from '../constants'
44import { iconGitHub , iconLogo } from '../icons'
5- import type { MessageData } from '../types'
5+ import type { MessageData , Options , ThemeType } from '../types'
66import {
77 deepMerge ,
88 getRunEnv ,
@@ -12,14 +12,22 @@ import {
1212 setStorage ,
1313} from '../utils'
1414import { $body , $infoCard , $wrapper } from './globals'
15- import { loadIcons , postTask } from './helpers'
15+ import { loadIcons , postTask , setTheme } from './helpers'
1616
1717if ( $ ( '#site-header' ) . length > 0 ) {
1818 $body . addClass ( 'v2p-mobile' )
1919}
2020
2121/** 切换主题。 */
22- const toggleTheme = ( { $toggle, preferDark } : { $toggle : JQuery ; preferDark : boolean } ) => {
22+ const toggleTheme = ( {
23+ $toggle,
24+ preferDark,
25+ themeType = 'light-default' ,
26+ } : {
27+ $toggle : JQuery
28+ preferDark : boolean
29+ themeType ?: ThemeType
30+ } ) => {
2331 const shouldSync =
2432 ( preferDark && ! $wrapper . hasClass ( 'Night' ) ) || ( ! preferDark && $wrapper . hasClass ( 'Night' ) )
2533
@@ -40,14 +48,15 @@ const toggleTheme = ({ $toggle, preferDark }: { $toggle: JQuery; preferDark: boo
4048 $toggle . prop ( 'title' , '使用深色主题' )
4149 $toggle . html ( '<i data-lucide="moon"></i>' )
4250 }
51+
4352 loadIcons ( )
4453 }
4554
4655 if ( preferDark ) {
47- $body . addClass ( 'v2p-theme- dark-default')
56+ setTheme ( ' dark-default')
4857 $wrapper . addClass ( 'Night' )
4958 } else {
50- $body . removeClass ( 'v2p-theme-dark-default' )
59+ setTheme ( themeType )
5160 $wrapper . removeClass ( 'Night' )
5261 }
5362}
@@ -62,36 +71,29 @@ void (async () => {
6271
6372 const $toggle = $ ( '#Rightbar .light-toggle' ) . addClass ( 'v2p-color-mode-toggle' )
6473
65- if ( options . theme . type === 'dark-default' ) {
66- toggleTheme ( { $toggle, preferDark : true } )
67- } else {
68- toggleTheme ( { $toggle, preferDark : false } )
69- }
70-
71- if ( options . theme . type === 'dark-default' ) {
72- $body . addClass ( 'v2p-theme-dark-default' )
73- } else if ( options . theme . type === 'dawn' ) {
74- $body . addClass ( 'v2p-theme-dawn' )
75- } else {
76- $body . addClass ( 'v2p-theme-light-default' )
77- }
74+ const themeType = options . theme . type
75+ toggleTheme ( { $toggle, preferDark : themeType === 'dark-default' , themeType } )
7876
7977 // 处理自动切换「明/暗」主题。
8078 if ( options . theme . autoSwitch ) {
8179 const perfersDark = window . matchMedia ( '(prefers-color-scheme: dark)' )
8280
83- toggleTheme ( { $toggle, preferDark : perfersDark . matches } )
81+ toggleTheme ( { $toggle, preferDark : perfersDark . matches , themeType } )
8482
8583 perfersDark . addEventListener ( 'change' , ( { matches } ) => {
86- toggleTheme ( { $toggle, preferDark : matches } )
87- } )
88-
89- $toggle . on ( 'click' , ( ) => {
90- // 当用户主动设置颜色主题后,取消自动跟随系统。
91- void setStorage ( StorageKey . Options , deepMerge ( options , { theme : { autoSwitch : false } } ) )
84+ toggleTheme ( { $toggle, preferDark : matches , themeType } )
9285 } )
9386 }
9487
88+ $toggle . on ( 'click' , ( ) => {
89+ const newTheme : Partial < Options [ 'theme' ] > = {
90+ type : options . theme . type === 'dark-default' ? 'light-default' : 'dark-default' ,
91+ autoSwitch : false , // 当用户主动设置颜色主题后,取消自动跟随系统。
92+ }
93+
94+ void setStorage ( StorageKey . Options , deepMerge ( options , { theme : newTheme } ) )
95+ } )
96+
9597 const syncInfo = storage [ StorageKey . SyncInfo ]
9698
9799 // 当发现远程的配置有更新时,自动同步到本地。
0 commit comments