forked from extern/homer
cycle between automatic-light-dark themes
This commit is contained in:
parent
66eace9e95
commit
4a1e8717e9
@ -4,7 +4,7 @@
|
|||||||
aria-label="Toggle dark mode"
|
aria-label="Toggle dark mode"
|
||||||
class="navbar-item is-inline-block-mobile"
|
class="navbar-item is-inline-block-mobile"
|
||||||
>
|
>
|
||||||
<i class="fas fa-fw fa-adjust"></i>
|
<i :class="`${faClasses[mode]}`" class="fa-fw"></i>
|
||||||
</a>
|
</a>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -14,21 +14,49 @@ export default {
|
|||||||
data: function () {
|
data: function () {
|
||||||
return {
|
return {
|
||||||
isDark: null,
|
isDark: null,
|
||||||
|
faClasses: null,
|
||||||
|
mode: null,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created: function () {
|
created: function () {
|
||||||
this.isDark =
|
this.faClasses = ["fas fa-adjust", "fas fa-circle", "far fa-circle"];
|
||||||
"overrideDark" in localStorage
|
this.mode = 0;
|
||||||
? JSON.parse(localStorage.overrideDark)
|
if ("overrideDark" in localStorage) {
|
||||||
: matchMedia("(prefers-color-scheme: dark)").matches;
|
// Light theme is 1 and Dark theme is 2
|
||||||
|
this.mode = JSON.parse(localStorage.overrideDark) ? 2 : 1;
|
||||||
|
}
|
||||||
|
this.isDark = this.getIsDark();
|
||||||
this.$emit("updated", this.isDark);
|
this.$emit("updated", this.isDark);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
toggleTheme: function () {
|
toggleTheme: function () {
|
||||||
this.isDark = !this.isDark;
|
this.mode = (this.mode + 1) % 3
|
||||||
localStorage.overrideDark = this.isDark;
|
switch(this.mode) {
|
||||||
|
// Default behavior
|
||||||
|
case 0:
|
||||||
|
localStorage.removeItem("overrideDark");
|
||||||
|
break
|
||||||
|
// Force light theme
|
||||||
|
case 1:
|
||||||
|
localStorage.overrideDark = false;
|
||||||
|
break
|
||||||
|
// Force dark theme
|
||||||
|
case 2:
|
||||||
|
localStorage.overrideDark = true;
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
// Should be unreachable
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
this.isDark = this.getIsDark();
|
||||||
this.$emit("updated", this.isDark);
|
this.$emit("updated", this.isDark);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getIsDark: function() {
|
||||||
|
const values = [matchMedia("(prefers-color-scheme: dark)").matches, false, true];
|
||||||
|
return values[this.mode];
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
Loading…
Reference in New Issue
Block a user