view mrjunejune/pages/index.js @ 76:35b1abc37969

Updating my website to use seobeo library.
author June Park <parkjune1995@gmail.com>
date Wed, 31 Dec 2025 14:11:21 -0800
parents
children d55157451947
line wrap: on
line source

const STORAGE_KEY = 'theme-preference';
// Get stored preference or detect system preference
function getThemePreference()
{
  const stored = localStorage.getItem(STORAGE_KEY);
  if (stored) {
    return stored;
  }
  return 'auto';
}

function applyTheme(preference)
{
  const root = document.documentElement;

  if (preference === 'light') {
    root.classList.add('light-mode');
    root.classList.remove('dark');
  } else if (preference === 'dark') {
    root.classList.remove('light-mode');
    root.classList.add('dark');
  } else {
    // Auto - remove manual overrides and let CSS media query handle it
    root.classList.remove('light-mode', 'dark');
  }
}

function populateHeader()
{
  fetch("/parts/headers.html")
    .then(res => res.text())
    .then(headerHTML => {
      const range = document.createRange();
      const fragment = range.createContextualFragment(headerHTML);
      header.appendChild(fragment);
      
      const toggle = document.querySelector('#themeToggle');
      if (!toggle) return;

      toggle.addEventListener('click', function() {
        let preference = getThemePreference();

        // Cycle through: auto -> light -> dark -> auto
        if (preference === 'auto') {
          preference = 'light';
        } else if (preference === 'light') {
          preference = 'dark';
        } else {
          preference = 'auto';
        }

        localStorage.setItem(STORAGE_KEY, preference);
        applyTheme(preference);
      });
    });
}
populateHeader();

(function() {
  const currentPreference = getThemePreference();
  applyTheme(currentPreference);
})();