From 56d58a7ea24d8bb494ca5a652b8f96ba9ac01d8e Mon Sep 17 00:00:00 2001 From: NotXia <35894453+NotXia@users.noreply.github.com> Date: Sat, 14 Jan 2023 19:52:10 +0100 Subject: [PATCH] Add theme switch --- src/App.vue | 5 ++- src/components/Navbar/Navbar.vue | 33 ++++++++++------ src/components/ThemeSwitch/ThemeSwitch.vue | 44 ++++++++++++++++++++++ src/utilities/theme_handler.ts | 22 +++++++++++ 4 files changed, 90 insertions(+), 14 deletions(-) create mode 100644 src/components/ThemeSwitch/ThemeSwitch.vue create mode 100644 src/utilities/theme_handler.ts diff --git a/src/App.vue b/src/App.vue index f989ef8..85dfebe 100644 --- a/src/App.vue +++ b/src/App.vue @@ -8,8 +8,9 @@ \ No newline at end of file diff --git a/src/components/Navbar/Navbar.vue b/src/components/Navbar/Navbar.vue index d219698..72ae9b4 100644 --- a/src/components/Navbar/Navbar.vue +++ b/src/components/Navbar/Navbar.vue @@ -3,18 +3,26 @@
- - - @@ -23,5 +31,6 @@ diff --git a/src/components/ThemeSwitch/ThemeSwitch.vue b/src/components/ThemeSwitch/ThemeSwitch.vue new file mode 100644 index 0000000..21792fe --- /dev/null +++ b/src/components/ThemeSwitch/ThemeSwitch.vue @@ -0,0 +1,44 @@ + + + diff --git a/src/utilities/theme_handler.ts b/src/utilities/theme_handler.ts new file mode 100644 index 0000000..922c9e2 --- /dev/null +++ b/src/utilities/theme_handler.ts @@ -0,0 +1,22 @@ +export function getTheme():string { + return localStorage.getItem("theme") ?? "dark"; +} + +export function setTheme(theme:string):void { + if (theme !== "dark" && theme !== "light") { theme = "dark"; } + localStorage.setItem("theme", theme); +} + +export function flipTheme():void { + setTheme(getTheme() === "dark" ? "light" : "dark"); +} + +export function applyTheme(theme?:string):void { + if (!theme) { theme = getTheme(); } + + switch (theme) { + case "dark": document.documentElement.classList.add("dark"); break; + case "light": document.documentElement.classList.remove("dark"); break; + default: document.documentElement.classList.add("dark"); break; + } +} \ No newline at end of file