Skip to content

Commit 2291917

Browse files
author
sheepzh
committed
Support dark mode to follow the browser (#77)
1 parent c02c11e commit 2291917

File tree

6 files changed

+24
-14
lines changed

6 files changed

+24
-14
lines changed

global.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ declare namespace timer {
5353
| number // Weekday, From 1 to 7
5454

5555
type DarkMode =
56+
// Follow the OS, @since 1.3.3
57+
| "default"
5658
// Always on
5759
| "on"
5860
// Always off

src/app/components/option/components/appearance/dark-mode-input.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,11 @@ const _default = defineComponent({
5757
size: 'small',
5858
style: { width: '120px' },
5959
onChange: async (newVal: string) => {
60-
const before = darkMode.value
6160
darkMode.value = newVal as timer.option.DarkMode
6261
handleChange()
6362
}
6463
}, {
65-
default: () => ["on", "off", "timed"].map(
64+
default: () => ["default", "on", "off", "timed"].map(
6665
value => h(ElOption, { value, label: t(msg => msg.option.appearance.darkMode.options[value]) })
6766
)
6867
})]

src/app/components/option/components/appearance/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ const _default = defineComponent({
137137
})
138138
},
139139
msg => msg.appearance.darkMode.label,
140-
t(msg => msg.option.appearance.darkMode.options["off"])),
140+
t(msg => msg.option.appearance.darkMode.options.default)),
141141
h(ElDivider),
142142
renderOptionItem({
143143
input: locale(option)

src/app/locale/components/option.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,7 @@ export type OptionMessage = {
4545
},
4646
darkMode: {
4747
label: string
48-
options: {
49-
on: string
50-
off: string
51-
timed: string
52-
}
48+
options: Record<timer.option.DarkMode, string>
5349
}
5450
limitFilterType: Record<timer.limit.FilterType, string> & {
5551
label: string
@@ -87,6 +83,13 @@ export type OptionMessage = {
8783
defaultValue: string
8884
}
8985

86+
const FOLLOW_BROWSER: Record<timer.Locale, string> = {
87+
zh_CN: '跟随浏览器',
88+
zh_TW: '跟隨瀏覽器',
89+
en: 'Follow browser',
90+
ja: 'ブラウザと同じ',
91+
}
92+
9093
const _default: Messages<OptionMessage> = {
9194
zh_CN: {
9295
yes: '是',
@@ -112,7 +115,7 @@ const _default: Messages<OptionMessage> = {
112115
badgeTextContent: '当前网站的今日浏览时长',
113116
locale: {
114117
label: "语言设置 {input}",
115-
default: "跟随浏览器",
118+
default: FOLLOW_BROWSER.zh_CN,
116119
changeConfirm: "语言设置成功,请刷新页面!",
117120
reloadButton: "刷新"
118121
},
@@ -124,6 +127,7 @@ const _default: Messages<OptionMessage> = {
124127
darkMode: {
125128
label: "夜间模式 {input}",
126129
options: {
130+
default: FOLLOW_BROWSER.zh_CN,
127131
on: "始终开启",
128132
off: "始终关闭",
129133
timed: "定时开启"
@@ -194,7 +198,7 @@ const _default: Messages<OptionMessage> = {
194198
badgeTextContent: '當前網站的今日瀏覽時長',
195199
locale: {
196200
label: "語言設置 {input}",
197-
default: "跟隨瀏覽器",
201+
default: FOLLOW_BROWSER.zh_TW,
198202
changeConfirm: "語言設置成功,請刷新頁麵!",
199203
reloadButton: "刷新"
200204
},
@@ -206,6 +210,7 @@ const _default: Messages<OptionMessage> = {
206210
darkMode: {
207211
label: "黑暗模式 {input}",
208212
options: {
213+
default: FOLLOW_BROWSER.zh_TW,
209214
on: "始終開啟",
210215
off: "始終關閉",
211216
timed: "定時開啟"
@@ -275,7 +280,7 @@ const _default: Messages<OptionMessage> = {
275280
badgeTextContent: 'the browsing time of current website',
276281
locale: {
277282
label: "Language {input}",
278-
default: "Follow browser",
283+
default: FOLLOW_BROWSER.en,
279284
changeConfirm: "The language has been changed successfully, please reload this page!",
280285
reloadButton: "Reload"
281286
},
@@ -287,6 +292,7 @@ const _default: Messages<OptionMessage> = {
287292
darkMode: {
288293
label: "Dark mode {input}",
289294
options: {
295+
default: FOLLOW_BROWSER.en,
290296
on: "Always on",
291297
off: "Always off",
292298
timed: "Timed on"
@@ -357,7 +363,7 @@ const _default: Messages<OptionMessage> = {
357363
badgeTextContent: '現在のウェブサイトの閲覧時間',
358364
locale: {
359365
label: "言語設定 {input}",
360-
default: "ブラウザと同じ",
366+
default: FOLLOW_BROWSER.ja,
361367
changeConfirm: "言語が正常に変更されました。このページをリロードしてください。",
362368
reloadButton: "リロード"
363369
},
@@ -369,6 +375,7 @@ const _default: Messages<OptionMessage> = {
369375
darkMode: {
370376
label: "ダークモード {input}",
371377
options: {
378+
default: FOLLOW_BROWSER.ja,
372379
on: "常にオン",
373380
off: "常にオフ",
374381
timed: "時限スタート"

src/service/option-service.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ async function setOption(option: Partial<timer.option.AllOption>): Promise<void>
6161
async function isDarkMode(targetVal?: timer.option.AppearanceOption): Promise<boolean> {
6262
const option = targetVal || await getAllOption()
6363
const darkMode = option.darkMode
64-
if (darkMode === "on") {
64+
if (darkMode === "default") {
65+
return !!window.matchMedia('(prefers-color-scheme: dark)')?.matches
66+
} else if (darkMode === "on") {
6567
return true
6668
} else if (darkMode === "off") {
6769
return false

src/util/constant/option.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export function defaultAppearance(): timer.option.AppearanceOption {
2727
displayBadgeText: true,
2828
locale: "default",
2929
printInConsole: true,
30-
darkMode: "off",
30+
darkMode: "default",
3131
// 6 PM - 6 AM
3232
// 18*60*60
3333
darkModeTimeStart: 64800,

0 commit comments

Comments
 (0)