feat: theme - 01
This commit is contained in:
+14
-9
@@ -60,24 +60,29 @@ let settingsState = {
|
||||
selectedTheme: "default",
|
||||
selectedColorMode: "dark",
|
||||
};
|
||||
const VALID_THEME_FAMILIES = ["default", "macos-soft", "midnight", "graphite", "windows11"];
|
||||
const VALID_COLOR_MODES = ["dark", "light"];
|
||||
let searchState = {
|
||||
pane: "left",
|
||||
path: "/Volumes",
|
||||
query: "",
|
||||
};
|
||||
function effectiveThemeKey(theme, colorMode) {
|
||||
const family = theme === "default" ? "default" : "default";
|
||||
const mode = colorMode === "light" ? "light" : "dark";
|
||||
const family = VALID_THEME_FAMILIES.includes(theme) ? theme : "default";
|
||||
const mode = VALID_COLOR_MODES.includes(colorMode) ? colorMode : "dark";
|
||||
return `${family}-${mode}`;
|
||||
}
|
||||
|
||||
function currentColorMode() {
|
||||
return (document.documentElement.dataset.theme || "").endsWith("-light") ? "light" : "dark";
|
||||
return document.documentElement.dataset.colorMode === "light" ? "light" : "dark";
|
||||
}
|
||||
|
||||
function applyTheme(theme, colorMode) {
|
||||
const nextTheme = effectiveThemeKey(theme, colorMode);
|
||||
const mode = colorMode === "light" ? "light" : "dark";
|
||||
const family = VALID_THEME_FAMILIES.includes(theme) ? theme : "default";
|
||||
const mode = VALID_COLOR_MODES.includes(colorMode) ? colorMode : "dark";
|
||||
const nextTheme = effectiveThemeKey(family, mode);
|
||||
document.documentElement.dataset.themeFamily = family;
|
||||
document.documentElement.dataset.colorMode = mode;
|
||||
document.documentElement.dataset.theme = nextTheme;
|
||||
const icon = document.getElementById("theme-toggle-icon");
|
||||
const button = document.getElementById("theme-toggle");
|
||||
@@ -516,8 +521,8 @@ async function loadSettings() {
|
||||
settingsState.showThumbnails = !!data.show_thumbnails;
|
||||
settingsState.preferredStartupPathLeft = data.preferred_startup_path_left || null;
|
||||
settingsState.preferredStartupPathRight = data.preferred_startup_path_right || null;
|
||||
settingsState.selectedTheme = data.selected_theme || "default";
|
||||
settingsState.selectedColorMode = data.selected_color_mode || "dark";
|
||||
settingsState.selectedTheme = VALID_THEME_FAMILIES.includes(data.selected_theme) ? data.selected_theme : "default";
|
||||
settingsState.selectedColorMode = VALID_COLOR_MODES.includes(data.selected_color_mode) ? data.selected_color_mode : "dark";
|
||||
const elements = settingsElements();
|
||||
if (elements.showThumbnailsInput) {
|
||||
elements.showThumbnailsInput.checked = settingsState.showThumbnails;
|
||||
@@ -538,8 +543,8 @@ async function saveSettings(update) {
|
||||
settingsState.showThumbnails = !!data.show_thumbnails;
|
||||
settingsState.preferredStartupPathLeft = data.preferred_startup_path_left || null;
|
||||
settingsState.preferredStartupPathRight = data.preferred_startup_path_right || null;
|
||||
settingsState.selectedTheme = data.selected_theme || "default";
|
||||
settingsState.selectedColorMode = data.selected_color_mode || "dark";
|
||||
settingsState.selectedTheme = VALID_THEME_FAMILIES.includes(data.selected_theme) ? data.selected_theme : "default";
|
||||
settingsState.selectedColorMode = VALID_COLOR_MODES.includes(data.selected_color_mode) ? data.selected_color_mode : "dark";
|
||||
const elements = settingsElements();
|
||||
if (elements.showThumbnailsInput) {
|
||||
elements.showThumbnailsInput.checked = settingsState.showThumbnails;
|
||||
|
||||
Reference in New Issue
Block a user