woodpecker/web/src/compositions/useDarkMode.ts
Anbraten 58838f225c
Rewrite of WebUI (#245)
Rewrite of the UI using Typescript, Vue3, Windicss and Vite. The design should  be close to the current one with some changes:
- latest pipeline in a sidebar on the right
- secrets and registry as part of the repo-settings (secrets and registry entries shouldn't be used as much so they can be "hidden" under settings IMO)
- start page shows list of active repositories with button to enable / add new ones (currently you see all repositories and in most cases you only add new repositories once in a while)
2021-11-03 17:40:31 +01:00

44 lines
1 KiB
TypeScript

import { computed, ref, watch } from 'vue';
const LS_DARK_MODE = 'woodpecker:dark-mode';
const isDarkModeActive = ref(false);
watch(isDarkModeActive, (isActive) => {
if (isActive) {
document.documentElement.classList.remove('light');
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
document.documentElement.classList.add('light');
}
});
function setDarkMode(isActive: boolean) {
isDarkModeActive.value = isActive;
localStorage.setItem(LS_DARK_MODE, isActive ? 'dark' : 'light');
}
function load() {
const isActive = localStorage.getItem(LS_DARK_MODE) as 'dark' | 'light' | null;
if (isActive === null) {
setDarkMode(window.matchMedia('(prefers-color-scheme: dark)').matches);
} else {
setDarkMode(isActive === 'dark');
}
}
load();
export function useDarkMode() {
return {
darkMode: computed({
get() {
return isDarkModeActive.value;
},
set(isActive: boolean) {
setDarkMode(isActive);
},
}),
};
}