From a78ee83cf1810846839423f8d0922aee5aa25572 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 21 Nov 2024 23:47:58 +0100 Subject: [PATCH] Apply these colors based on light/dark mode (#27) --- docs/overrides/javascript/extra.js | 46 +++++++++++------------------- 1 file changed, 16 insertions(+), 30 deletions(-) diff --git a/docs/overrides/javascript/extra.js b/docs/overrides/javascript/extra.js index 3db5624..a86a4ff 100644 --- a/docs/overrides/javascript/extra.js +++ b/docs/overrides/javascript/extra.js @@ -1,39 +1,25 @@ -// Light/Dark Mode ----------------------------------------------------------------------------------------------------- -const applyTheme = (isDark) => { - document.body.setAttribute( - "data-md-color-scheme", - isDark ? "slate" : "default", - ); - document.body.setAttribute( - "data-md-color-primary", - isDark ? "black" : "indigo", - ); +// Apply theme colors based on dark/light mode ------------------------------------------------------------------------- + document.body.setAttribute('data-md-color-scheme', isDark ? 'slate' : 'default'); + document.body.setAttribute('data-md-color-primary', isDark ? 'black' : 'indigo'); }; -// Check and apply auto theme -const checkAutoTheme = () => { - const palette = JSON.parse(localStorage.getItem(".__palette") || "{}"); - - if (palette.index === 0) { - applyTheme(window.matchMedia("(prefers-color-scheme: dark)").matches); +// Check and apply appropriate theme based on system/user preference +const checkTheme = () => { + const palette = JSON.parse(localStorage.getItem('.__palette') || '{}'); + if (palette.index === 0) { // Auto mode is selected + applyTheme(window.matchMedia('(prefers-color-scheme: dark)').matches); } }; -// Event listeners for theme changes -const mediaQueryList = window.matchMedia("(prefers-color-scheme: dark)"); -mediaQueryList.addListener(checkAutoTheme); - -// Initial theme check -checkAutoTheme(); +// Watch for system theme changes +window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', checkTheme); -// Auto theme input listener -document.addEventListener("DOMContentLoaded", () => { - const autoThemeInput = document.getElementById("__palette_1"); - autoThemeInput?.addEventListener("click", () => { - if (autoThemeInput.checked) { - setTimeout(checkAutoTheme); - } - }); +// Initialize theme handling on page load +document.addEventListener('DOMContentLoaded', () => { + document.getElementById('__palette_1')?.addEventListener('change', e => + e.target.checked && setTimeout(checkTheme) + ); + checkTheme(); }); // Inkeep --------------------------------------------------------------------------------------------------------------