From f9011f5ef477c6d2beb1b4f01f74039b2e071c90 Mon Sep 17 00:00:00 2001 From: Michael DiLeo Date: Sun, 17 Aug 2025 12:29:26 -0500 Subject: [PATCH] fix dark/light theme toggle, adjust text, change images to png screenshots --- minify-build.js | 4 +- public/about.html | 2 +- public/index.html | 9 ++-- public/site-scripts/theme-toggle.js | 79 +++++++++++++---------------- 4 files changed, 43 insertions(+), 51 deletions(-) diff --git a/minify-build.js b/minify-build.js index bd51d3d..cd7b0a8 100644 --- a/minify-build.js +++ b/minify-build.js @@ -289,12 +289,12 @@ async function bundleAndMinifyJS() { async function minifyHTMLFile(inputPath, outputPath) { const html = await fs.readFile(inputPath, 'utf8'); - // Update CSS references for production and add script reference + // Update CSS references for production and update script reference let updatedHTML = html .replace(//g, '') .replace(//g, '') - .replace(/<\/body>/g, ''); + .replace(/ + \ No newline at end of file diff --git a/public/site-scripts/theme-toggle.js b/public/site-scripts/theme-toggle.js index 12c792c..ff286b1 100644 --- a/public/site-scripts/theme-toggle.js +++ b/public/site-scripts/theme-toggle.js @@ -1,23 +1,25 @@ (function() { const themeToggle = document.getElementById('theme-toggle'); const themeIcon = document.getElementById('theme-icon'); - - function getStoredTheme() { - return localStorage.getItem('picoPreferredColorScheme') || 'auto'; - } - + + function storeTheme(theme) { localStorage.setItem('picoPreferredColorScheme', theme); } - - function getSystemTheme() { - return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + + function getStoredTheme() { + return localStorage.getItem('picoPreferredColorScheme'); } - - function applyTheme(theme) { - document.documentElement.setAttribute('data-theme', theme); - - if (theme === 'dark') { + + function getCurrentTheme() { + return document.documentElement.getAttribute('data-theme') || + (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + } + + function applyTheme(currentTheme) { + const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; + document.documentElement.setAttribute('data-theme', newTheme); + if (newTheme === 'dark') { themeIcon.textContent = '☀️'; themeToggle.setAttribute('aria-pressed', 'true'); } else { @@ -25,39 +27,28 @@ themeToggle.setAttribute('aria-pressed', 'false'); } } - - function toggleTheme() { - let currentStored = getStoredTheme(); - if (currentStored === 'auto') { - currentStored = getSystemTheme(); - } - if (currentStored === 'auto') { - currentStored = 'light'; - } - let nextTheme; - - nextTheme = currentStored === 'light' ? 'dark' : 'light'; - - storeTheme(nextTheme); - applyTheme(nextTheme); - } - - function init() { - if (themeToggle) { - let storedTheme = getStoredTheme(); - if (storedTheme && storedTheme !== 'auto') { - applyTheme(storedTheme); + themeToggle.addEventListener('click', () => { + const currentTheme = getCurrentTheme(); + + applyTheme(currentTheme); + storeTheme(currentTheme); + }); + + function init() { + let storedTheme = getStoredTheme() || getCurrentTheme(); + + applyTheme(storedTheme); + + themeToggle.addEventListener('click', toggleTheme); + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + // Only apply theme if user hasn't made an explicit choice + const storedTheme = getStoredTheme(); + if (storedTheme === 'auto') { + applyTheme(); } - - themeToggle.addEventListener('click', toggleTheme); - - window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { - if (getStoredTheme() === 'auto') { - applyTheme(); - } - }); - } + }) } if (document.readyState !== 'loading') {