refactor: load and save settings from a single object
All checks were successful
ci/woodpecker/push/build-and-publish Pipeline was successful
ci/woodpecker/pr/build-and-publish Pipeline was successful

This commit is contained in:
Twig 2025-07-11 23:48:03 +02:00
parent cd1f294600
commit 5b4c278b83
No known key found for this signature in database
4 changed files with 49 additions and 13 deletions

18
app.vue
View file

@ -8,6 +8,7 @@
<script lang="ts" setup>
import ContextMenu from '~/components/ContextMenu.vue';
import { render } from 'vue';
import settingLoad from './utils/settingLoad';
const banner = useState("banner", () => false);
@ -43,21 +44,14 @@ function contextMenuHandler(e: MouseEvent) {
//]);
}
let currentTheme = "dark" // default theme
const savedTheme = localStorage.getItem("selectedTheme");
if (savedTheme) {
currentTheme = savedTheme;
}
const currentTheme = settingLoad("selectedThemeUrl") ?? "dark"
const baseURL = useRuntimeConfig().app.baseURL;
useHead({
link: [
{
rel: "stylesheet",
href: `${baseURL}themes/${currentTheme}.css`
}
]
link: [{
rel: "stylesheet",
href: `${baseURL}themes/${currentTheme}.css`
}]
})
</script>

View file

@ -26,6 +26,8 @@
</template>
<script lang="ts" setup>
import settingSave from '~/utils/settingSave';
const runtimeConfig = useRuntimeConfig()
const defaultThemes = runtimeConfig.public.defaultThemes
const baseURL = runtimeConfig.app.baseURL;
@ -46,7 +48,7 @@ function changeTheme(id: string, url: string) {
return;
}
localStorage.setItem("selectedTheme", id);
settingSave("selectedThemeUrl", id)
// if the theme didn't originally load for some reason, create it
if (!themeLinkElement) {

19
utils/settingLoad.ts Normal file
View file

@ -0,0 +1,19 @@
export default (key: string): any => {
let clientSettingsItem: string | null = localStorage.getItem("clientSettings")
if (typeof clientSettingsItem != "string") {
clientSettingsItem = "{}"
}
let clientSettings: { [key: string]: any } = {}
try {
clientSettings = JSON.parse(clientSettingsItem)
} catch {
clientSettings = {}
}
if (typeof clientSettings !== "object") {
clientSettings = {}
}
return clientSettings[key]
}

21
utils/settingSave.ts Normal file
View file

@ -0,0 +1,21 @@
export default (key: string, value: any): void => {
let clientSettingsItem: string | null = localStorage.getItem("clientSettings")
if (typeof clientSettingsItem != "string") {
clientSettingsItem = "{}"
}
let clientSettings: { [key: string]: any } = {}
try {
clientSettings = JSON.parse(clientSettingsItem)
} catch {
clientSettings = {}
}
if (typeof clientSettings !== "object") {
clientSettings = {}
}
clientSettings[key] = value
localStorage.setItem("clientSettings", JSON.stringify(clientSettings))
}