Files
2025-08-05 18:36:07 +02:00

56 lines
1.5 KiB
JavaScript

let theme_name = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);
const theme_modes = FHC_JS_DATA_STORAGE_OBJECT.theme.modes;
const toggleTheme = (theme)=>{
if (!theme) return;
for (const theme of theme_modes) {
document.documentElement.classList.remove(theme);
}
theme_name.value = theme;
document.documentElement.classList.add(theme);
document.body.setAttribute("data-bs-theme", theme);
let stylesheet = document.querySelector('link[href*="primevue/resources/themes"]');
if (theme == "dark") {
stylesheet.attributes.href.value = stylesheet.attributes.href.value.replace("bootstrap4-light-blue", "bootstrap4-dark-blue");
} else if (theme == "light") {
stylesheet.attributes.href.value = stylesheet.attributes.href.value.replace("bootstrap4-dark-blue", "bootstrap4-light-blue");
}
else{
if (stylesheet.attributes.href.value.includes("bootstrap4-dark-blue"))
stylesheet.attributes.href.value = stylesheet.attributes.href.value.replace("bootstrap4-dark-blue", "bootstrap4-light-blue");
}
localStorage.setItem("theme", theme);
}
const initializeTheme = ()=>{
let theme = localStorage.getItem("theme");
if (!theme || !theme_modes.includes(theme)) {
// set the first theme mode as default
theme = theme_modes[0];
localStorage.setItem("theme",theme);
}
toggleTheme(theme);
}
export default {
install: (app,options)=>{
document.documentElement.classList.add(theme_name.value);
initializeTheme();
app.config.globalProperties.$theme = {
theme_name,
theme_modes,
switchTheme: (theme) => {
toggleTheme(theme);
},
}
}
}