Skip to content

Commit c9dae17

Browse files
benediktwernerDylan-DPC
authored andcommitted
Better automatic dark mode (#1069)
* Don't save default theme to localStorage * Auto enable dark mode on no-js * Fix light theme with no-js
1 parent fcf2d7a commit c9dae17

File tree

3 files changed

+54
-8
lines changed

3 files changed

+54
-8
lines changed

src/theme/book.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ function playpen_text(playpen) {
296296
themeToggleButton.focus();
297297
}
298298

299-
function set_theme(theme) {
299+
function set_theme(theme, store = true) {
300300
let ace_theme;
301301

302302
if (theme == 'coal' || theme == 'navy') {
@@ -331,9 +331,10 @@ function playpen_text(playpen) {
331331
try { previousTheme = localStorage.getItem('mdbook-theme'); } catch (e) { }
332332
if (previousTheme === null || previousTheme === undefined) { previousTheme = default_theme; }
333333

334-
try { localStorage.setItem('mdbook-theme', theme); } catch (e) { }
334+
if (store) {
335+
try { localStorage.setItem('mdbook-theme', theme); } catch (e) { }
336+
}
335337

336-
document.body.className = theme;
337338
html.classList.remove(previousTheme);
338339
html.classList.add(theme);
339340
}
@@ -343,7 +344,7 @@ function playpen_text(playpen) {
343344
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
344345
if (theme === null || theme === undefined) { theme = default_theme; }
345346

346-
set_theme(theme);
347+
set_theme(theme, false);
347348

348349
themeToggleButton.addEventListener('click', function () {
349350
if (themePopup.style.display === 'block') {

src/theme/css/variables.css

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,3 +208,45 @@
208208
--searchresults-li-bg: #dec2a2;
209209
--search-mark-bg: #e69f67;
210210
}
211+
212+
@media (prefers-color-scheme: dark) {
213+
.light.no-js {
214+
--bg: hsl(200, 7%, 8%);
215+
--fg: #98a3ad;
216+
217+
--sidebar-bg: #292c2f;
218+
--sidebar-fg: #a1adb8;
219+
--sidebar-non-existant: #505254;
220+
--sidebar-active: #3473ad;
221+
--sidebar-spacer: #393939;
222+
223+
--scrollbar: var(--sidebar-fg);
224+
225+
--icons: #43484d;
226+
--icons-hover: #b3c0cc;
227+
228+
--links: #2b79a2;
229+
230+
--inline-code-color: #c5c8c6;;
231+
232+
--theme-popup-bg: #141617;
233+
--theme-popup-border: #43484d;
234+
--theme-hover: #1f2124;
235+
236+
--quote-bg: hsl(234, 21%, 18%);
237+
--quote-border: hsl(234, 21%, 23%);
238+
239+
--table-border-color: hsl(200, 7%, 13%);
240+
--table-header-bg: hsl(200, 7%, 28%);
241+
--table-alternate-bg: hsl(200, 7%, 11%);
242+
243+
--searchbar-border-color: #aaa;
244+
--searchbar-bg: #b7b7b7;
245+
--searchbar-fg: #000;
246+
--searchbar-shadow-color: #aaa;
247+
--searchresults-header-fg: #666;
248+
--searchresults-border-color: #98a3ad;
249+
--searchresults-li-bg: #2b2b2f;
250+
--search-mark-bg: #355c7d;
251+
}
252+
}

src/theme/index.hbs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!DOCTYPE HTML>
2-
<html lang="{{ language }}" class="sidebar-visible no-js">
2+
<html lang="{{ language }}" class="sidebar-visible no-js {{ default_theme }}">
33
<head>
44
<!-- Book generated using mdBook -->
55
<meta charset="UTF-8">
@@ -39,7 +39,7 @@
3939
<script async type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
4040
{{/if}}
4141
</head>
42-
<body class="{{ default_theme }}">
42+
<body>
4343
<!-- Provide site root to javascript -->
4444
<script type="text/javascript">
4545
var path_to_root = "{{ path_to_root }}";
@@ -67,8 +67,11 @@
6767
var theme;
6868
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
6969
if (theme === null || theme === undefined) { theme = default_theme; }
70-
document.body.className = theme;
71-
document.querySelector('html').className = theme + ' js';
70+
var html = document.querySelector('html');
71+
html.classList.remove('no-js')
72+
html.classList.remove('{{ default_theme }}')
73+
html.classList.add(theme);
74+
html.classList.add('js');
7275
</script>
7376

7477
<!-- Hide / unhide sidebar before it is displayed -->

0 commit comments

Comments
 (0)