Skip to content

Commit 5dc4cc9

Browse files
committed
fix: 修复不正确地设置主题
1 parent bc0e759 commit 5dc4cc9

File tree

3 files changed

+29
-26
lines changed

3 files changed

+29
-26
lines changed

src/contents/common.ts

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import './polyfill'
22

33
import { Links, MessageFrom, MessageKey, StorageKey } from '../constants'
44
import { iconGitHub, iconLogo } from '../icons'
5-
import type { MessageData } from '../types'
5+
import type { MessageData, Options, ThemeType } from '../types'
66
import {
77
deepMerge,
88
getRunEnv,
@@ -12,14 +12,22 @@ import {
1212
setStorage,
1313
} from '../utils'
1414
import { $body, $infoCard, $wrapper } from './globals'
15-
import { loadIcons, postTask } from './helpers'
15+
import { loadIcons, postTask, setTheme } from './helpers'
1616

1717
if ($('#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
// 当发现远程的配置有更新时,自动同步到本地。

src/contents/helpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ export function getTagsText(tags: Tag[]): string {
370370
return tags.map((it) => it.name).join(',')
371371
}
372372

373-
const setTheme = (type: string) => {
373+
export function setTheme(type: ThemeType) {
374374
// 在切换主题时,先删除所有已有的主题类。
375375
$body.get(0)?.classList.forEach((cls) => {
376376
if (cls.startsWith('v2p-theme-')) {

src/styles/v2ex-effect.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ body {
259259
.v2p-tp-avatar {
260260
width: 20px;
261261
height: 20px;
262+
background-color: var(--v2p-color-bg-avatar);
262263
border-radius: 3px;
263264
}
264265

0 commit comments

Comments
 (0)