UNPKG

hexo-theme-redefine

Version:

Redefine your writing with Hexo Theme Redefine.

2 lines 3.7 kB
import{getStyleStatus as e,styleStatus as t,updateStyleStatus as i}from"../state/styleStatus.js";const o=".mermaid";let s=!1;const ensureOriginalData=()=>{document.querySelectorAll(o).forEach((e=>{e.getAttribute("data-original-code")||e.setAttribute("data-original-code",e.innerHTML)}))};export const ModeToggle={modeToggleButton_dom:null,iconDom:null,mermaidLightTheme:null,mermaidDarkTheme:null,mermaidInit(e){window.mermaid&&(ensureOriginalData(),document.querySelectorAll(o).forEach((e=>{const t=e.getAttribute("data-original-code");null!==t&&(e.removeAttribute("data-processed"),e.innerHTML=t)})),mermaid.initialize({theme:e}),mermaid.init({theme:e},document.querySelectorAll(o)))},enableLightMode(){document.body.classList.remove("dark-mode"),document.documentElement.classList.remove("dark"),document.body.classList.add("light-mode"),document.documentElement.classList.add("light"),this.iconDom&&(this.iconDom.className="fa-regular fa-moon"),i({isDark:!1}),this.mermaidInit(this.mermaidLightTheme),this.setGiscusTheme(),this.setUtterancesTheme()},enableDarkMode(){document.body.classList.remove("light-mode"),document.documentElement.classList.remove("light"),document.body.classList.add("dark-mode"),document.documentElement.classList.add("dark"),this.iconDom&&(this.iconDom.className="fa-regular fa-brightness"),i({isDark:!0}),this.mermaidInit(this.mermaidDarkTheme),this.setGiscusTheme(),this.setUtterancesTheme()},async setGiscusTheme(e){if(!document.querySelector("#giscus-container"))return;let i=document.querySelector("iframe.giscus-frame");for(;!i;)await new Promise((e=>setTimeout(e,1e3))),i=document.querySelector("iframe.giscus-frame");for(;i.classList.contains("giscus-frame--loading");)await new Promise((e=>setTimeout(e,1e3)));e??=t.isDark?"dark":"light",i.contentWindow.postMessage({giscus:{setConfig:{theme:e}}},"https://giscus.app")},async setUtterancesTheme(e){const i=document.querySelector("#utterances-container");if(!i)return;const o=i.dataset.utterancesThemeLight||"github-light",s=i.dataset.utterancesThemeDark||"github-dark";e??=t.isDark?s:o;let a=document.querySelector("iframe.utterances-frame");for(let e=0;e<10&&!a;e+=1)await new Promise((e=>setTimeout(e,300))),a=document.querySelector("iframe.utterances-frame");a&&a.contentWindow&&a.contentWindow.postMessage({type:"set-theme",theme:e},"https://utteranc.es")},isDarkPrefersColorScheme:()=>window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)"),initModeStatus(){const t=e();t?t.isDark?this.enableDarkMode():this.enableLightMode():this.isDarkPrefersColorScheme().matches?this.enableDarkMode():this.enableLightMode()},initModeToggleButton(e){if(!this.modeToggleButton_dom)return;const handler=()=>{document.body.classList.contains("dark-mode")?this.enableLightMode():this.enableDarkMode()};e?this.modeToggleButton_dom.addEventListener("click",handler,{signal:e}):this.modeToggleButton_dom.addEventListener("click",handler)},initModeAutoTrigger(e){const t=this.isDarkPrefersColorScheme();if(!t||s)return;s=!0;const handler=e=>{e.matches?this.enableDarkMode():this.enableLightMode()};e?t.addEventListener("change",handler,{signal:e}):t.addEventListener("change",handler)},init({signal:e,appSignal:t}={}){this.modeToggleButton_dom=document.querySelector(".tool-dark-light-toggle"),this.iconDom=document.querySelector(".tool-dark-light-toggle i");const i=theme.plugins?.mermaid?.theme||theme.mermaid?.style||{};this.mermaidLightTheme=i.light||"default",this.mermaidDarkTheme=i.dark||"dark",this.initModeStatus(),this.initModeToggleButton(e),this.initModeAutoTrigger(t),ensureOriginalData()}};export default function initModeToggle(e={}){ModeToggle.init(e)} //# sourceMappingURL=lightDarkSwitch.js.map