detached d1a7786

#33 feat(web): footer theme switch (auto, light, dark)

state
merged · 6a915d6 · squash
branch
feat/theme-switch → main
opened
bnema ·
updated

Adds a theme button to the footer, right of "keyboard shortcuts". Each click cycles auto -> light -> dark (Lucide sun-moon, sun, moon icons).

  • Saved in localStorage (key "theme") through ermiteStore; other tabs and pages restored from the back/forward cache follow.
  • store.js applies the theme before the first paint (html[data-theme], color-scheme and theme-color metas): no flash, no inline script (CSP script-src 'self').
  • Accessible name says the current and next mode; a click announces the new mode in the hint live region. Hidden without JavaScript (data-js).
  • The offline page of sw.js follows the system theme.

Checks: go build, go vet, go test ./internal/adapters/web/... ./internal/app, templ-drift.sh, node --test jstest (216 pass). Not checked in a real browser yet.

CommitSubjectAuthorDateSignatureStatus
d1a7786feat(web): announce theme changes, refresh on bfcache restore, match theme-color by data-schemebriceGPG Verified
bb7efc8feat(web): footer theme switch for auto, light and dark modesbriceGPG Verified

Checks 4

44 files · +458 -81
4/4
M docs/ci.md +1 -7
M internal/adapters/web/ASSETS.md +2 -2
M internal/adapters/web/jstest/a11y.test.mjs +1 -1
A internal/adapters/web/jstest/theme.test.mjs +151 -0
M internal/adapters/web/shell.templ +6 -3
M internal/adapters/web/shell_templ.go +7 -5
M internal/adapters/web/static/css/00-tokens.css +4 -0
M internal/adapters/web/static/css/20-shell.css +9 -1
A internal/adapters/web/static/icons/moon.svg +1 -0
A internal/adapters/web/static/icons/sun-moon.svg +1 -0
A internal/adapters/web/static/icons/sun.svg +1 -0
M internal/adapters/web/static/js/ermite.js +36 -0
M internal/adapters/web/static/js/store.js +52 -0
M internal/app/testdata/web/blob-binary.html +6 -2
M internal/app/testdata/web/blob-code.html +6 -2
M internal/app/testdata/web/blob-empty.html +6 -2
M internal/app/testdata/web/blob-image.html +6 -2
M internal/app/testdata/web/blob-markdown.html +6 -2
M internal/app/testdata/web/blob-svg.html +6 -2
M internal/app/testdata/web/blob-text.html +6 -2
M internal/app/testdata/web/blob-too-large.html +6 -2
M internal/app/testdata/web/blob-trojan.html +6 -2
M internal/app/testdata/web/commit-big.html +6 -2
M internal/app/testdata/web/commit-binary.html +6 -2
M internal/app/testdata/web/commit-merge.html +6 -2
M internal/app/testdata/web/commit-modify-split.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 modify a file and make a script executable · diffs · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -348,6 +348,10 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
348348 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
349349 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
350350 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
351+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
352+<span class="ico i-sun-moon" aria-hidden="true">
353+</span>
354+</button>
351355 </footer>
352356 <div class="hint">
353357 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 modify a file and make a script executable · diffs · example.test</title>7 <title>SHA7 modify a file and make a script executable · diffs · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -348,6 +348,10 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
348 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>348 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
349 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">349 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
350 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>350 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
351+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
352+<span class="ico i-sun-moon" aria-hidden="true">
353+</span>
354+</button>
351 </footer>355 </footer>
352 <div class="hint">356 <div class="hint">
353 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">357 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/commit-modify.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 modify a file and make a script executable · diffs · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -348,6 +348,10 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
348348 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
349349 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
350350 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
351+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
352+<span class="ico i-sun-moon" aria-hidden="true">
353+</span>
354+</button>
351355 </footer>
352356 <div class="hint">
353357 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 modify a file and make a script executable · diffs · example.test</title>7 <title>SHA7 modify a file and make a script executable · diffs · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -348,6 +348,10 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
348 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>348 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
349 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">349 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
350 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>350 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
351+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
352+<span class="ico i-sun-moon" aria-hidden="true">
353+</span>
354+</button>
351 </footer>355 </footer>
352 <div class="hint">356 <div class="hint">
353 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">357 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/commit-rename.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 rename a file and delete another · diffs · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -252,6 +252,10 @@
252252 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
253253 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
254254 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
255+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
256+<span class="ico i-sun-moon" aria-hidden="true">
257+</span>
258+</button>
255259 </footer>
256260 <div class="hint">
257261 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 rename a file and delete another · diffs · example.test</title>7 <title>SHA7 rename a file and delete another · diffs · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -252,6 +252,10 @@
252 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>252 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
253 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">253 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
254 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>254 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
255+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
256+<span class="ico i-sun-moon" aria-hidden="true">
257+</span>
258+</button>
255 </footer>259 </footer>
256 <div class="hint">260 <div class="hint">
257 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">261 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/commit-root.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 root: the first files · diffs · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -571,6 +571,10 @@
571571 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
572572 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
573573 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
574+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
575+<span class="ico i-sun-moon" aria-hidden="true">
576+</span>
577+</button>
574578 </footer>
575579 <div class="hint">
576580 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 root: the first files · diffs · example.test</title>7 <title>SHA7 root: the first files · diffs · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -571,6 +571,10 @@
571 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>571 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
572 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">572 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
573 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>573 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
574+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
575+<span class="ico i-sun-moon" aria-hidden="true">
576+</span>
577+</button>
574 </footer>578 </footer>
575 <div class="hint">579 <div class="hint">
576 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">580 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/commit-trojan.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 add evil.go · diffs · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -400,6 +400,10 @@
400400 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
401401 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
402402 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
403+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
404+<span class="ico i-sun-moon" aria-hidden="true">
405+</span>
406+</button>
403407 </footer>
404408 <div class="hint">
405409 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 add evil.go · diffs · example.test</title>7 <title>SHA7 add evil.go · diffs · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -400,6 +400,10 @@
400 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>400 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
401 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">401 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
402 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>402 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
403+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
404+<span class="ico i-sun-moon" aria-hidden="true">
405+</span>
406+</button>
403 </footer>407 </footer>
404 <div class="hint">408 <div class="hint">
405 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">409 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/commits-page2.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>commits · long · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -167,6 +167,10 @@
167167 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
168168 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
169169 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
170+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
171+<span class="ico i-sun-moon" aria-hidden="true">
172+</span>
173+</button>
170174 </footer>
171175 <div class="hint">
172176 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>commits · long · example.test</title>7 <title>commits · long · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -167,6 +167,10 @@
167 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>167 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
168 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">168 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
169 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>169 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
170+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
171+<span class="ico i-sun-moon" aria-hidden="true">
172+</span>
173+</button>
170 </footer>174 </footer>
171 <div class="hint">175 <div class="hint">
172 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">176 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/commits-path.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>history of a.txt · long · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -182,6 +182,10 @@
182182 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
183183 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
184184 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
185+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
186+<span class="ico i-sun-moon" aria-hidden="true">
187+</span>
188+</button>
185189 </footer>
186190 <div class="hint">
187191 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>history of a.txt · long · example.test</title>7 <title>history of a.txt · long · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -182,6 +182,10 @@
182 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>182 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
183 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">183 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
184 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>184 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
185+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
186+<span class="ico i-sun-moon" aria-hidden="true">
187+</span>
188+</button>
185 </footer>189 </footer>
186 <div class="hint">190 <div class="hint">
187 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">191 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/commits-root.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>commits · long · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -964,6 +964,10 @@
964964 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
965965 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
966966 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
967+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
968+<span class="ico i-sun-moon" aria-hidden="true">
969+</span>
970+</button>
967971 </footer>
968972 <div class="hint">
969973 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>commits · long · example.test</title>7 <title>commits · long · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -964,6 +964,10 @@
964 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>964 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
965 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">965 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
966 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>966 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
967+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
968+<span class="ico i-sun-moon" aria-hidden="true">
969+</span>
970+</button>
967 </footer>971 </footer>
968 <div class="hint">972 <div class="hint">
969 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">973 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/commits-small.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>commits · diffs · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -309,6 +309,10 @@
309309 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
310310 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
311311 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
312+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
313+<span class="ico i-sun-moon" aria-hidden="true">
314+</span>
315+</button>
312316 </footer>
313317 <div class="hint">
314318 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>commits · diffs · example.test</title>7 <title>commits · diffs · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -309,6 +309,10 @@
309 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>309 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
310 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">310 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
311 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>311 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
312+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
313+<span class="ico i-sun-moon" aria-hidden="true">
314+</span>
315+</button>
312 </footer>316 </footer>
313 <div class="hint">317 <div class="hint">
314 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">318 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/empty.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>quiet · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -85,6 +85,10 @@
8585 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
8686 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
8787 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
88+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
89+<span class="ico i-sun-moon" aria-hidden="true">
90+</span>
91+</button>
8892 </footer>
8993 <div class="hint">
9094 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>quiet · example.test</title>7 <title>quiet · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -85,6 +85,10 @@
85 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>85 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
86 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">86 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
87 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>87 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
88+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
89+<span class="ico i-sun-moon" aria-hidden="true">
90+</span>
91+</button>
88 </footer>92 </footer>
89 <div class="hint">93 <div class="hint">
90 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">94 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/home.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -181,6 +181,10 @@
181181 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
182182 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
183183 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
184+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
185+<span class="ico i-sun-moon" aria-hidden="true">
186+</span>
187+</button>
184188 </footer>
185189 <div class="hint">
186190 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>example.test</title>7 <title>example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -181,6 +181,10 @@
181 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>181 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
182 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">182 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
183 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>183 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
184+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
185+<span class="ico i-sun-moon" aria-hidden="true">
186+</span>
187+</button>
184 </footer>188 </footer>
185 <div class="hint">189 <div class="hint">
186 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">190 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/not-found-page.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>404 · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -74,6 +74,10 @@
7474 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
7575 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
7676 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
77+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
78+<span class="ico i-sun-moon" aria-hidden="true">
79+</span>
80+</button>
7781 </footer>
7882 <div class="hint">
7983 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>404 · example.test</title>7 <title>404 · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -74,6 +74,10 @@
74 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>74 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
75 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">75 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
76 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>76 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
77+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
78+<span class="ico i-sun-moon" aria-hidden="true">
79+</span>
80+</button>
77 </footer>81 </footer>
78 <div class="hint">82 <div class="hint">
79 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">83 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/not-found.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>404 · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -74,6 +74,10 @@
7474 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
7575 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
7676 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
77+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
78+<span class="ico i-sun-moon" aria-hidden="true">
79+</span>
80+</button>
7781 </footer>
7882 <div class="hint">
7983 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>404 · example.test</title>7 <title>404 · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -74,6 +74,10 @@
74 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>74 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
75 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">75 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
76 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>76 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
77+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
78+<span class="ico i-sun-moon" aria-hidden="true">
79+</span>
80+</button>
77 </footer>81 </footer>
78 <div class="hint">82 <div class="hint">
79 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">83 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/refs.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>refs · demo · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -191,6 +191,10 @@
191191 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
192192 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
193193 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
194+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
195+<span class="ico i-sun-moon" aria-hidden="true">
196+</span>
197+</button>
194198 </footer>
195199 <div class="hint">
196200 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>refs · demo · example.test</title>7 <title>refs · demo · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -191,6 +191,10 @@
191 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>191 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
192 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">192 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
193 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>193 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
194+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
195+<span class="ico i-sun-moon" aria-hidden="true">
196+</span>
197+</button>
194 </footer>198 </footer>
195 <div class="hint">199 <div class="hint">
196 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">200 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/summary.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>demo · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -217,6 +217,10 @@
217217 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
218218 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
219219 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
220+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
221+<span class="ico i-sun-moon" aria-hidden="true">
222+</span>
223+</button>
220224 </footer>
221225 <div class="hint">
222226 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>demo · example.test</title>7 <title>demo · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -217,6 +217,10 @@
217 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>217 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
218 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">218 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
219 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>219 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
220+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
221+<span class="ico i-sun-moon" aria-hidden="true">
222+</span>
223+</button>
220 </footer>224 </footer>
221 <div class="hint">225 <div class="hint">
222 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">226 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/tree-nested.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>src/lib · files · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -155,6 +155,10 @@
155155 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
156156 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
157157 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
158+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
159+<span class="ico i-sun-moon" aria-hidden="true">
160+</span>
161+</button>
158162 </footer>
159163 <div class="hint">
160164 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>src/lib · files · example.test</title>7 <title>src/lib · files · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -155,6 +155,10 @@
155 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>155 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
156 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">156 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
157 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>157 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
158+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
159+<span class="ico i-sun-moon" aria-hidden="true">
160+</span>
161+</button>
158 </footer>162 </footer>
159 <div class="hint">163 <div class="hint">
160 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">164 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/tree-root.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>tree · files · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -376,6 +376,10 @@
376376 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
377377 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
378378 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
379+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
380+<span class="ico i-sun-moon" aria-hidden="true">
381+</span>
382+</button>
379383 </footer>
380384 <div class="hint">
381385 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>tree · files · example.test</title>7 <title>tree · files · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -376,6 +376,10 @@
376 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>376 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
377 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">377 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
378 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>378 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
379+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
380+<span class="ico i-sun-moon" aria-hidden="true">
381+</span>
382+</button>
379 </footer>383 </footer>
380 <div class="hint">384 <div class="hint">
381 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">385 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/tree-slash-ref.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>x · files · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -152,6 +152,10 @@
152152 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
153153 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
154154 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
155+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
156+<span class="ico i-sun-moon" aria-hidden="true">
157+</span>
158+</button>
155159 </footer>
156160 <div class="hint">
157161 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>x · files · example.test</title>7 <title>x · files · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -152,6 +152,10 @@
152 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>152 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
153 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">153 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
154 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>154 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
155+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
156+<span class="ico i-sun-moon" aria-hidden="true">
157+</span>
158+</button>
155 </footer>159 </footer>
156 <div class="hint">160 <div class="hint">
157 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">161 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
M internal/app/testdata/web/tree-subdir.html +6 -2
@@ -5,8 +5,8 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>docs · files · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">
8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
1010 <meta name="apple-mobile-web-app-title" content="ermite">
1111 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
1212 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -168,6 +168,10 @@
168168 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
169169 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
170170 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
171+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
172+<span class="ico i-sun-moon" aria-hidden="true">
173+</span>
174+</button>
171175 </footer>
172176 <div class="hint">
173177 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">
@@ -5,8 +5,8 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>docs · files · example.test</title>7 <title>docs · files · example.test</title>
8-<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">8+<meta name="theme-color" data-scheme="light" media="(prefers-color-scheme: light)" content="#ffffff">
9-<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0c0c0c">9+<meta name="theme-color" data-scheme="dark" media="(prefers-color-scheme: dark)" content="#0c0c0c">
10 <meta name="apple-mobile-web-app-title" content="ermite">10 <meta name="apple-mobile-web-app-title" content="ermite">
11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">11 <link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">12 <link rel="apple-touch-icon" href="/-/static/app/apple-touch-icon.HASH.png">
@@ -168,6 +168,10 @@
168 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>168 <a href="http://example.test/ermite" rel="noopener" title="source of this version (AGPL-3.0-or-later)">source</a>
169 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">169 <button type="button" class="foot-keys" data-js data-fire="help" aria-haspopup="dialog" aria-controls="panel-help" aria-keyshortcuts="?">
170 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>170 <kbd aria-hidden="true">?</kbd> keyboard shortcuts</button>
171+<button type="button" class="foot-theme" data-js data-theme-switch aria-label="theme: auto (switch to light)" title="theme: auto (switch to light)">
172+<span class="ico i-sun-moon" aria-hidden="true">
173+</span>
174+</button>
171 </footer>175 </footer>
172 <div class="hint">176 <div class="hint">
173 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">177 <span aria-hidden="true" class="hint-nav" :text="document.body.dataset.nav || ''">

Comments0 open / 0

no comments yet.

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
l
merge request: the list of files (j k move, enter opens, esc back)
M
merge request: the merge menu; there 1–3 pick the mode, D deletes the branch, enter merges
R
merge request: mark the head read
esc
close a dialog, leave a field

Branches 2

Tags 42

↑↓ moveenter openesc close