diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2025-09-29 19:17:13 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2025-10-01 07:51:11 +0200 |
| commit | 4c41e477e13d37e187c8de4225c7e8056bd9ed28 (patch) | |
| tree | 33a7b51a0ed2c2ae207fc8f89f1454ccb77596a5 /layouts/partials/header/theme-button.html | |
| parent | 4720b07e9f18915cf1f6466245a92dedd11fdc55 (diff) | |
Internalise theme
Diffstat (limited to 'layouts/partials/header/theme-button.html')
| -rw-r--r-- | layouts/partials/header/theme-button.html | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/layouts/partials/header/theme-button.html b/layouts/partials/header/theme-button.html new file mode 100644 index 0000000..0a8313b --- /dev/null +++ b/layouts/partials/header/theme-button.html @@ -0,0 +1,47 @@ +<button class="toggle-theme" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()"> + <span class="theme-icon light"> {{ partial "utils/icon" "sun" }} </span> + <span class="theme-icon dark"> {{ partial "utils/icon" "moon" }} </span> +</button> + +<script> + document.addEventListener('DOMContentLoaded', function () { + const theme = localStorage.getItem('theme'); + + if (!theme || theme === 'light') { + setTheme('light'); + } else { + setTheme(theme); + } + }); + + function setTheme(theme) { + const html = document.querySelector('html'); + localStorage.setItem('theme', theme); + + if (theme === 'light') { + if (html.classList.contains('dark')) { + document.querySelector('html').classList.remove('dark'); + } + + document.querySelector('.theme-icon.light').style.display = 'none'; + document.querySelector('.theme-icon.dark').style.display = 'block'; + } else { + if (!html.classList.contains('dark')) { + document.querySelector('html').classList.add('dark'); + } + + document.querySelector('.theme-icon.dark').style.display = 'none'; + document.querySelector('.theme-icon.light').style.display = 'block'; + } + } + + function toggleTheme() { + const theme = localStorage.getItem('theme'); + + if (theme === 'light') { + setTheme('dark'); + } else { + setTheme('light'); + } + } +</script>
\ No newline at end of file |
