Skip to content

Commit 0c4a771

Browse files
author
Reshad Ahammed Ayon
authored
fix: toggle only between system and opposite theme
1 parent 288ff6b commit 0c4a771

2 files changed

Lines changed: 31 additions & 13 deletions

File tree

pages/assets/packhub.js

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,44 @@
11
const body = document.body;
2-
const themeToggleBtn = document.getElementById('theme-toggle');
2+
const themeToggleBtn = document.getElementById('themeToggleBtn');
33

4-
const themes = ['light', 'dark', 'system'];
54
const icons = {
65
light: `<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M480-360q50 0 85-35t35-85q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 50 35 85t85 35Zm0 80q-83 0-141.5-58.5T280-480q0-83 58.5-141.5T480-680q83 0 141.5 58.5T680-480q0 83-58.5 141.5T480-280ZM200-440H40v-80h160v80Zm720 0H760v-80h160v80ZM440-760v-160h80v160h-80Zm0 720v-160h80v160h-80ZM256-650l-101-97 57-59 96 100-52 56Zm492 496-97-101 53-55 101 97-57 59Zm-98-550 97-101 59 57-100 96-56-52ZM154-212l101-97 55 53-97 101-59-57Zm326-268Z"/></svg>`,
76
dark: `<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M480-120q-150 0-255-105T120-480q0-150 105-255t255-105q14 0 27.5 1t26.5 3q-41 29-65.5 75.5T444-660q0 90 63 153t153 63q55 0 101-24.5t75-65.5q2 13 3 26.5t1 27.5q0 150-105 255T480-120Zm0-80q88 0 158-48.5T740-375q-20 5-40 8t-40 3q-123 0-209.5-86.5T364-660q0-20 3-40t8-40q-78 32-126.5 102T200-480q0 116 82 198t198 82Zm-10-270Z"/></svg>`,
87
system: `<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm40-83q119-15 199.5-104.5T800-480q0-123-80.5-212.5T520-797v634Z"/></svg>`
98
};
109

11-
function setTheme(theme) {
12-
body.className = theme;
13-
localStorage.setItem('theme', theme);
14-
themeToggleBtn.innerHTML = icons[theme];
10+
function getSystemTheme() {
11+
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
1512
}
1613

17-
let currentTheme = localStorage.getItem('theme') || 'system';
18-
setTheme(currentTheme);
14+
function setTheme(mode) {
15+
if (mode === 'system') {
16+
body.className = 'system';
17+
themeToggleBtn.innerHTML = icons.system;
18+
} else {
19+
body.className = mode;
20+
themeToggleBtn.innerHTML = icons[mode];
21+
}
22+
23+
localStorage.setItem('themeMode', mode);
24+
}
25+
26+
let currentMode = localStorage.getItem('themeMode') || 'system';
27+
setTheme(currentMode);
1928

2029
themeToggleBtn.addEventListener('click', () => {
21-
let index = themes.indexOf(currentTheme);
22-
currentTheme = themes[(index + 1) % themes.length];
23-
setTheme(currentTheme);
30+
if (currentMode === 'system') {
31+
currentMode = getSystemTheme() === 'dark' ? 'light' : 'dark';
32+
} else {
33+
currentMode = 'system';
34+
}
35+
setTheme(currentMode);
36+
});
37+
38+
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
39+
if (currentMode === 'system') {
40+
setTheme('system');
41+
}
2442
});
2543

2644
function process_copy_button_click(id, klass) {

pages/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
<link href="https://fonts.googleapis.com/css2?family=Alfa+Slab+One&family=Fira+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
2626
</head>
2727

28-
<body id="idx" class="system">
28+
<body id="idx">
2929
<main>
3030
<header>
31-
<button id="theme-toggle" class="theme-btn"></button>
31+
<button id="themeToggleBtn" class="theme-btn"></button>
3232
<div>
3333
<div class="banner">
3434
<h1>PackHub<sup>beta</sup></h1>

0 commit comments

Comments
 (0)