Skip to content

Commit 83cc1ef

Browse files
committed
nav.js: dark mode button with localStorage persistence
1 parent c1ac3b1 commit 83cc1ef

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

assets/nav.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
if(s) s.classList.toggle('open');
3333
">☰</button>
3434
<a href="${prefix}error/index.html" id="nav-errors-link"${isActive('error') ? ' class="active"' : ''}>Errors</a>
35+
<button id="nav-dark-btn" onclick="window.__toggleDark&&window.__toggleDark()" style="background:none;border:1px solid #e0e0e0;color:#555;padding:3px 10px;border-radius:4px;font-size:12px;cursor:pointer;margin-left:0.5rem;">🌙</button>
3536
`;
3637
}
3738

@@ -85,4 +86,36 @@
8586
s.src = SITE + '/assets/search.js';
8687
document.head.appendChild(s);
8788
}
89+
// Dark mode
90+
(function() {
91+
const DARK = {
92+
body: 'background:#1a1a2e;color:#e0e0e0',
93+
nav: 'background:#16213e;border-color:#0f3460',
94+
sidebar: 'background:#16213e;border-color:#0f3460',
95+
};
96+
function applyDark(on) {
97+
document.body.setAttribute('data-dark', on ? '1' : '');
98+
const btn = document.getElementById('nav-dark-btn');
99+
if (btn) btn.textContent = on ? '☀️' : '🌙';
100+
const nav = document.getElementById('site-nav');
101+
const sb = document.getElementById('site-sidebar') || document.querySelector('.sidebar');
102+
if (nav) { nav.style.background = on ? '#16213e' : ''; nav.style.borderColor = on ? '#0f3460' : ''; }
103+
if (sb) { sb.style.background = on ? '#16213e' : ''; }
104+
document.body.style.background = on ? '#1a1a2e' : '';
105+
document.body.style.color = on ? '#e0e0e0' : '';
106+
try { localStorage.setItem('darkMode', on ? '1' : '0'); } catch(e) {}
107+
}
108+
window.__toggleDark = function() {
109+
const on = document.body.getAttribute('data-dark') !== '1';
110+
applyDark(on);
111+
// Also update CodeMirror if on editor page
112+
if (window.editor && window.editor.setOption) {
113+
window.editor.setOption('theme', on ? 'cppmode-dark' : 'cppmode');
114+
}
115+
};
116+
// Restore preference
117+
try {
118+
if (localStorage.getItem('darkMode') === '1') applyDark(true);
119+
} catch(e) {}
120+
})();
88121
})();

0 commit comments

Comments
 (0)