diff --git a/src/components/DarkMode.vue b/src/components/DarkMode.vue
index a5aae41..02450d9 100644
--- a/src/components/DarkMode.vue
+++ b/src/components/DarkMode.vue
@@ -4,7 +4,7 @@
aria-label="Toggle dark mode"
class="navbar-item is-inline-block-mobile"
>
-
+
@@ -14,21 +14,49 @@ export default {
data: function () {
return {
isDark: null,
+ faClasses: null,
+ mode: null,
};
},
created: function () {
- this.isDark =
- "overrideDark" in localStorage
- ? JSON.parse(localStorage.overrideDark)
- : matchMedia("(prefers-color-scheme: dark)").matches;
+ this.faClasses = ["fas fa-adjust", "fas fa-circle", "far fa-circle"];
+ this.mode = 0;
+ if ("overrideDark" in localStorage) {
+ // 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);
},
methods: {
toggleTheme: function () {
- this.isDark = !this.isDark;
- localStorage.overrideDark = this.isDark;
+ this.mode = (this.mode + 1) % 3
+ 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);
},
+
+ getIsDark: function() {
+ const values = [matchMedia("(prefers-color-scheme: dark)").matches, false, true];
+ return values[this.mode];
+ }
},
};