Skip to content

Commit f7e7d96

Browse files
committed
Use prefers-color-scheme
1 parent c1b6ddc commit f7e7d96

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

web/src/App.vue

+16-3
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,8 @@ import socket from '@/socket';
748748
import RestoreProjectForm from '@/components/RestoreProjectForm.vue';
749749
import YesNoDialog from '@/components/YesNoDialog.vue';
750750
751+
const prefersDarkMode = window.matchMedia('(prefers-color-scheme: dark)');
752+
751753
const PROJECT_COLORS = [
752754
'red',
753755
'blue',
@@ -887,8 +889,10 @@ export default {
887889
888890
darkMode(val) {
889891
this.$vuetify.theme.dark = val;
890-
if (val) {
892+
if (val && !prefersDarkMode.matches) {
891893
localStorage.setItem('darkMode', '1');
894+
} else if (!val && prefersDarkMode.matches) {
895+
localStorage.setItem('darkMode', '0');
892896
} else {
893897
localStorage.removeItem('darkMode');
894898
}
@@ -931,8 +935,17 @@ export default {
931935
},
932936
933937
async created() {
934-
if (localStorage.getItem('darkMode') === '1') {
935-
this.darkMode = true;
938+
const isDarkMode = localStorage.getItem('darkMode');
939+
if (isDarkMode !== null) {
940+
this.darkMode = isDarkMode === '1';
941+
} else {
942+
prefersDarkMode.addEventListener('change', (e) => {
943+
this.darkMode = e.matches;
944+
});
945+
946+
if (prefersDarkMode.matches && localStorage.getItem('darkMode') !== '0') {
947+
this.darkMode = true;
948+
}
936949
}
937950
938951
try {

web/src/views/Auth.vue

+9
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,8 @@
242242
import axios from 'axios';
243243
import { getErrorMessage } from '@/lib/error';
244244
245+
const prefersDarkMode = window.matchMedia('(prefers-color-scheme: dark)');
246+
245247
export default {
246248
data() {
247249
return {
@@ -254,6 +256,7 @@ export default {
254256
255257
loginHelpDialog: null,
256258
259+
darkMode: false,
257260
oidcProviders: [],
258261
loginWithPassword: null,
259262
authMethods: {},
@@ -266,6 +269,12 @@ export default {
266269
};
267270
},
268271
272+
watch: {
273+
darkMode(val) {
274+
this.$vuetify.theme.dark = val;
275+
},
276+
},
277+
269278
async created() {
270279
const { status, verificationMethod } = await this.getAuthenticationStatus();
271280

0 commit comments

Comments
 (0)