diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..6a2803f7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Dave Gallant + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/themes/hugo-theme-gruvbox/assets/css/critical/15-colors.css b/themes/hugo-theme-gruvbox/assets/css/critical/15-colors.css index ccb15d42..e9b4716a 100644 --- a/themes/hugo-theme-gruvbox/assets/css/critical/15-colors.css +++ b/themes/hugo-theme-gruvbox/assets/css/critical/15-colors.css @@ -6,8 +6,7 @@ {{ $backgroundColor = "bg0_h" }} {{ end }} -@media (prefers-color-scheme: light) { - :root { +:root[data-theme="light"] { --bg: var(--{{ $backgroundColor }}); --bg0: #fbf1c7; --bg0_h: #f9f5d7; @@ -42,11 +41,9 @@ & .light--hidden { display: none; } - } } -@media (prefers-color-scheme: dark) { - :root { +:root[data-theme="dark"] { --bg: var(--{{ $backgroundColor }}); --bg0: #282828; --bg0_h: #1d2021; @@ -83,11 +80,8 @@ } } -} - :root { {{ $themeColor := .Param "themeColor" | default "blue" }} --primary: var(--{{ $themeColor }}1); --primary-alt: var(--{{ $themeColor }}2); } - diff --git a/themes/hugo-theme-gruvbox/assets/js/dark-mode.js b/themes/hugo-theme-gruvbox/assets/js/dark-mode.js index 6d9cfc0b..66147c44 100644 --- a/themes/hugo-theme-gruvbox/assets/js/dark-mode.js +++ b/themes/hugo-theme-gruvbox/assets/js/dark-mode.js @@ -1,11 +1,12 @@ function getTheme() { - if (window.matchMedia) { - // OS preference - return window.matchMedia("(prefers-color-scheme: light)").matches - ? "light" - : "dark"; + if (localStorage && localStorage.getItem("theme")) { + return localStorage.getItem("theme"); } - // Undefined + return "auto"; +} + +function saveTheme(theme) { + localStorage.setItem("theme", theme); } function setPrismTheme(theme) { @@ -26,16 +27,40 @@ function setCommentsTheme(theme) { } } +function setTheme(theme) { + if (theme == "auto") { + theme = window.matchMedia("(prefers-color-scheme: light)").matches + ? "light" + : "dark"; + } + document.documentElement.setAttribute("data-theme", theme); + setPrismTheme(theme); + setCommentsTheme(theme); +} + +function toggleTheme(e) { + const theme = e.currentTarget.classList.contains("light--hidden") + ? "light" + : "dark"; + setTheme(theme); + saveTheme(theme); +} + // Initial load const theme = getTheme(); -if (theme) { - setPrismTheme(theme); -} +setTheme(theme); window .matchMedia("(prefers-color-scheme: dark)") .addEventListener("change", (event) => { - const theme = event.matches ? "dark" : "light"; - setPrismTheme(theme); - setCommentsTheme(theme); + setTheme(getTheme()); }); + +// This script is inlined in the of the document, so we have to wait +// for the DOM content before can add event listeners to the toggle buttons +document.addEventListener("DOMContentLoaded", function () { + const toggleButtons = document.querySelectorAll(".theme__toggle"); + toggleButtons.forEach((btn) => { + btn.addEventListener("click", toggleTheme); + }); +}); diff --git a/themes/hugo-theme-gruvbox/layouts/partials/header.html b/themes/hugo-theme-gruvbox/layouts/partials/header.html index ec8f9b7b..b573ccb1 100644 --- a/themes/hugo-theme-gruvbox/layouts/partials/header.html +++ b/themes/hugo-theme-gruvbox/layouts/partials/header.html @@ -52,4 +52,11 @@ + + +