diff options
| author | Sivaldo <sivaldodavi@disroot.org> | 2026-06-13 19:20:23 -0300 |
|---|---|---|
| committer | Sivaldo <sivaldodavi@disroot.org> | 2026-06-13 19:20:23 -0300 |
| commit | 7316238f16655bd127b04476bbf7864b27f940f9 (patch) | |
| tree | 61f25290b3e5fd14894e52754cfe6dd4e85845ef /static/dark-mode.js | |
Diffstat (limited to 'static/dark-mode.js')
| -rw-r--r-- | static/dark-mode.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/static/dark-mode.js b/static/dark-mode.js new file mode 100644 index 0000000..8e2d761 --- /dev/null +++ b/static/dark-mode.js @@ -0,0 +1,59 @@ +/** + * Dark Mode Toggle + * Respeita a preferência do sistema e permite alternar manualmente + * Salva a preferência no localStorage + */ + +const DARK_MODE_KEY = 'caderno_dark_mode'; + +function initDarkMode() { + // Verificar preferência salva + const saved = localStorage.getItem(DARK_MODE_KEY); + let isDark; + + if (saved !== null) { + isDark = saved === 'true'; + } else { + // Respeitar preferência do sistema + isDark = window.matchMedia('(prefers-color-scheme: dark)').matches; + } + + applyDarkMode(isDark); +} + +function applyDarkMode(isDark) { + const html = document.documentElement; + const toggle = document.getElementById('dark-mode-toggle'); + + if (isDark) { + html.setAttribute('data-theme', 'dark'); + if (toggle) toggle.textContent = '☀️'; + } else { + html.removeAttribute('data-theme'); + if (toggle) toggle.textContent = '🌙'; + } + + localStorage.setItem(DARK_MODE_KEY, isDark); +} + +function toggleDarkMode() { + const html = document.documentElement; + const isDark = html.getAttribute('data-theme') === 'dark'; + applyDarkMode(!isDark); +} + +// Inicializar quando o DOM estiver pronto +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initDarkMode); +} else { + initDarkMode(); +} + +// Detectar mudanças na preferência do sistema +window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => { + const saved = localStorage.getItem(DARK_MODE_KEY); + if (saved === null) { + // Se o usuário não escolheu manualmente, seguir o sistema + applyDarkMode(e.matches); + } +}); |
