From 67bca6c5bd721a9a454c3450bec0f614e3018ed8 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Sun, 23 Feb 2025 14:55:43 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/14167 --- app/src/config/appearance.ts | 43 ++++++++++++++---------------------- app/src/config/bazaar.ts | 6 +++-- app/src/util/assets.ts | 11 ++++++--- 3 files changed, 29 insertions(+), 31 deletions(-) diff --git a/app/src/config/appearance.ts b/app/src/config/appearance.ts index 773d34574..acdac0d50 100644 --- a/app/src/config/appearance.ts +++ b/app/src/config/appearance.ts @@ -171,9 +171,10 @@ export const appearance = { const themeLight = (appearance.element.querySelector("#themeLight") as HTMLSelectElement).value; const themeDark = (appearance.element.querySelector("#themeDark") as HTMLSelectElement).value; const modeElementValue = parseInt((appearance.element.querySelector("#mode") as HTMLSelectElement).value); + const OSTheme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; fetchPost("/api/setting/setAppearance", { icon: (appearance.element.querySelector("#icon") as HTMLSelectElement).value, - mode: modeElementValue === 2 ? window.siyuan.config.appearance.mode : modeElementValue, + mode: modeElementValue === 2 ? (OSTheme === "light" ? 0 : 1) : modeElementValue, modeOS: modeElementValue === 2, codeBlockThemeDark: (appearance.element.querySelector("#codeBlockThemeDark") as HTMLSelectElement).value, codeBlockThemeLight: (appearance.element.querySelector("#codeBlockThemeLight") as HTMLSelectElement).value, @@ -187,19 +188,21 @@ export const appearance = { hideStatusBar: (appearance.element.querySelector("#hideStatusBar") as HTMLInputElement).checked, }, async response => { if (window.siyuan.config.appearance.themeJS) { - if (window.destroyTheme) { - try { - await window.destroyTheme(); - window.destroyTheme = undefined; - } catch (e) { - console.error("destroyTheme error: " + e); - } - } else { - if (!response.data.modeOS && ( - response.data.mode !== window.siyuan.config.appearance.mode || - window.siyuan.config.appearance.themeLight !== response.data.themeLight || - window.siyuan.config.appearance.themeDark !== response.data.themeDark - )) { + if (response.data.mode !== window.siyuan.config.appearance.mode || + (response.data.mode === window.siyuan.config.appearance.mode && ( + (response.data.mode === 0 && window.siyuan.config.appearance.themeLight !== response.data.themeLight) || + (response.data.mode === 1 && window.siyuan.config.appearance.themeDark !== response.data.themeDark)) + ) + ) { + if (window.destroyTheme) { + try { + await window.destroyTheme(); + window.destroyTheme = undefined; + document.getElementById("themeScript").remove(); + } catch (e) { + console.error("destroyTheme error: " + e); + } + } else { exportLayout({ errorExit: false, cb() { @@ -208,18 +211,6 @@ export const appearance = { }); return; } - const OSTheme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; - if (response.data.modeOS && ( - (response.data.mode === 1 && OSTheme === "light") || (response.data.mode === 0 && OSTheme === "dark") - )) { - exportLayout({ - cb() { - window.location.reload(); - }, - errorExit: false, - }); - return; - } } } appearance.onSetappearance(response.data); diff --git a/app/src/config/bazaar.ts b/app/src/config/bazaar.ts index 4a932e13f..51edf7b90 100644 --- a/app/src/config/bazaar.ts +++ b/app/src/config/bazaar.ts @@ -685,6 +685,7 @@ export const bazaar = { try { await window.destroyTheme(); window.destroyTheme = undefined; + document.getElementById("themeScript").remove(); } catch (e) { console.error("destroyTheme error: " + e); } @@ -775,11 +776,11 @@ export const bazaar = { try { await window.destroyTheme(); window.destroyTheme = undefined; + document.getElementById("themeScript").remove(); + addScript(`/appearance/themes/${currentTheme}/theme.js?v=${response.data.appearance.themeVer}`, "themeScript"); } catch (e) { console.error("destroyTheme error: " + e); } - document.getElementById("themeScript").remove(); - addScript(`/appearance/themes/${currentTheme}/theme.js?v=${response.data.appearance.themeVer}`, "themeScript"); } else { exportLayout({ cb() { @@ -869,6 +870,7 @@ export const bazaar = { try { await window.destroyTheme(); window.destroyTheme = undefined; + document.getElementById("themeScript").remove(); } catch (e) { console.error("destroyTheme error: " + e); } diff --git a/app/src/util/assets.ts b/app/src/util/assets.ts index f3dca2fca..a54f060a8 100644 --- a/app/src/util/assets.ts +++ b/app/src/util/assets.ts @@ -90,10 +90,13 @@ export const loadAssets = (data: Config.IAppearance) => { const themeScriptElement = document.getElementById("themeScript"); const themeScriptAddress = `/appearance/themes/${data.mode === 1 ? data.themeDark : data.themeLight}/theme.js?v=${data.themeVer}`; if (themeScriptElement) { - // https://github.com/siyuan-note/siyuan/issues/10341 - themeScriptElement.remove(); + if (!themeScriptElement.getAttribute("src").startsWith(themeScriptAddress)) { + themeScriptElement.remove(); + addScript(themeScriptAddress, "themeScript"); + } + } else { + addScript(themeScriptAddress, "themeScript"); } - addScript(themeScriptAddress, "themeScript"); const iconDefaultScriptElement = document.getElementById("iconDefaultScript"); // 不能使用 data.iconVer,因为其他主题也需要加载默认图标,此时 data.iconVer 为其他图标的版本号 @@ -140,6 +143,7 @@ export const initAssets = () => { try { await window.destroyTheme(); window.destroyTheme = undefined; + document.getElementById("themeScript").remove(); } catch (e) { console.error("destroyTheme error: " + e); } @@ -382,6 +386,7 @@ export const setMode = (modeElementValue: number) => { try { await window.destroyTheme(); window.destroyTheme = undefined; + document.getElementById("themeScript").remove(); } catch (e) { console.error("destroyTheme error: " + e); }