// Has to be in the head tag, otherwise a flicker effect will occur. let toggleTheme = (theme) => { if (theme == "dark") { setTheme("light"); } else { setTheme("dark"); } }; let setTheme = (theme) => { transTheme(); setHighlight(theme); setGiscusTheme(theme); if (theme) { document.documentElement.setAttribute("data-theme", theme); // Add class to tables. let tables = document.getElementsByTagName("table"); for (let i = 0; i < tables.length; i++) { if (theme == "dark") { tables[i].classList.add("table-dark"); } else { tables[i].classList.remove("table-dark"); } } // Set jupyter notebooks themes. let jupyterNotebooks = document.getElementsByClassName("jupyter-notebook-iframe-container"); for (let i = 0; i < jupyterNotebooks.length; i++) { let bodyElement = jupyterNotebooks[i].getElementsByTagName("iframe")[0].contentWindow.document.body; if (theme == "dark") { bodyElement.setAttribute("data-jp-theme-light", "false"); bodyElement.setAttribute("data-jp-theme-name", "JupyterLab Dark"); } else { bodyElement.setAttribute("data-jp-theme-light", "true"); bodyElement.setAttribute("data-jp-theme-name", "JupyterLab Light"); } } } else { document.documentElement.removeAttribute("data-theme"); } localStorage.setItem("theme", theme); // Updates the background of medium-zoom overlay. if (typeof medium_zoom !== "undefined") { medium_zoom.update({ background: getComputedStyle(document.documentElement).getPropertyValue( "--global-bg-color" ) + "ee", // + 'ee' for trasparency. }); } }; let setHighlight = (theme) => { if (theme == "dark") { document.getElementById("highlight_theme_light").media = "none"; document.getElementById("highlight_theme_dark").media = ""; } else { document.getElementById("highlight_theme_dark").media = "none"; document.getElementById("highlight_theme_light").media = ""; } }; let setGiscusTheme = (theme) => { function sendMessage(message) { const iframe = document.querySelector("iframe.giscus-frame"); if (!iframe) return; iframe.contentWindow.postMessage({ giscus: message }, "https://giscus.app"); } sendMessage({ setConfig: { theme: theme, }, }); }; let transTheme = () => { document.documentElement.classList.add("transition"); window.setTimeout(() => { document.documentElement.classList.remove("transition"); }, 500); }; let initTheme = (theme) => { if (theme == null || theme == "null") { const userPref = window.matchMedia; if (userPref && userPref("(prefers-color-scheme: dark)").matches) { theme = "dark"; } } setTheme(theme); }; initTheme(localStorage.getItem("theme"));