comparison 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
comparison
equal deleted inserted replaced
75:ae6a88e6e484 76:35b1abc37969
1 const STORAGE_KEY = 'theme-preference';
2 // Get stored preference or detect system preference
3 function getThemePreference()
4 {
5 const stored = localStorage.getItem(STORAGE_KEY);
6 if (stored) {
7 return stored;
8 }
9 return 'auto';
10 }
11
12 function applyTheme(preference)
13 {
14 const root = document.documentElement;
15
16 if (preference === 'light') {
17 root.classList.add('light-mode');
18 root.classList.remove('dark');
19 } else if (preference === 'dark') {
20 root.classList.remove('light-mode');
21 root.classList.add('dark');
22 } else {
23 // Auto - remove manual overrides and let CSS media query handle it
24 root.classList.remove('light-mode', 'dark');
25 }
26 }
27
28 function populateHeader()
29 {
30 fetch("/parts/headers.html")
31 .then(res => res.text())
32 .then(headerHTML => {
33 const range = document.createRange();
34 const fragment = range.createContextualFragment(headerHTML);
35 header.appendChild(fragment);
36
37 const toggle = document.querySelector('#themeToggle');
38 if (!toggle) return;
39
40 toggle.addEventListener('click', function() {
41 let preference = getThemePreference();
42
43 // Cycle through: auto -> light -> dark -> auto
44 if (preference === 'auto') {
45 preference = 'light';
46 } else if (preference === 'light') {
47 preference = 'dark';
48 } else {
49 preference = 'auto';
50 }
51
52 localStorage.setItem(STORAGE_KEY, preference);
53 applyTheme(preference);
54 });
55 });
56 }
57 populateHeader();
58
59 (function() {
60 const currentPreference = getThemePreference();
61 applyTheme(currentPreference);
62 })();