From 1f69eefb399ab3b1720114960981b41852d79718 Mon Sep 17 00:00:00 2001 From: nycki Date: Fri, 21 Mar 2025 16:43:06 -0700 Subject: [PATCH] light theme toggle --- content/_includes/base.njk | 2 ++ content/_includes/home.njk | 2 +- content/index.css | 47 +++++++++++++++++++++++++++---------- static/ComicMono.woff | Bin 0 -> 16696 bytes static/light-toggle.js | 46 ++++++++++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 14 deletions(-) create mode 100644 static/ComicMono.woff create mode 100644 static/light-toggle.js diff --git a/content/_includes/base.njk b/content/_includes/base.njk index 965cffa..25642c9 100644 --- a/content/_includes/base.njk +++ b/content/_includes/base.njk @@ -14,6 +14,7 @@ + Skip to main content @@ -36,6 +37,7 @@
  • characters
  • cookbook
  • stickers
  • +
  • toggle theme
  • diff --git a/content/_includes/home.njk b/content/_includes/home.njk index 3b7b41f..02c73f9 100644 --- a/content/_includes/home.njk +++ b/content/_includes/home.njk @@ -6,7 +6,7 @@ layout: base.njk h2 ~ h2 { border: none; padding-top: 20px; - border-top: 12px double var(--xkcd-magenta); + border-top: 12px double var(--accent-color); } {% endcss %} diff --git a/content/index.css b/content/index.css index 597cf68..7f6c9a7 100644 --- a/content/index.css +++ b/content/index.css @@ -1,20 +1,41 @@ -/* Defaults */ -html { - --font-family: -apple-system, system-ui, sans-serif; - --font-family-monospace: Consolas, Menlo, Monaco, Andale Mono WT, Andale Mono, Lucida Console, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Courier New, Courier, monospace; +@font-face { + font-family: comic-mono; + src: url(ComicMono.woff); } -/* Theme colors */ +/* Defaults */ html { - --xkcd-light-grey: #d8dcd6; - --xkcd-steel-blue: #5a7d9a; - --xkcd-magenta: #c20078; + --font-family-monospace: comic-mono Consolas monospace; + --font-family: comic-mono Consolas sans-serif; + --syntax-tab-size: 2; - --background-color: black; + --background-color: var(--xkcd-very-dark-brown); --text-color: var(--xkcd-light-grey); --text-color-link: var(--xkcd-steel-blue); + --accent-color: var(--xkcd-bronze); +} - --syntax-tab-size: 2; +@media(prefers-color-scheme: light) { + html { + --background-color: var(--xkcd-eggshell); + --text-color: var(--xkcd-dark-grey); + --text-color-link: var(--xkcd-teal); + --accent-color: var(--xkcd-red-orange); + } +} + +[theme='dark'] { + --background-color: var(--xkcd-very-dark-brown); + --text-color: var(--xkcd-light-grey); + --text-color-link: var(--xkcd-steel-blue); + --accent-color: var(--xkcd-bronze); +} + +[theme='light'] { + --background-color: var(--xkcd-eggshell); + --text-color: var(--xkcd-dark-grey); + --text-color-link: var(--xkcd-teal); + --accent-color: var(--xkcd-red-orange); } /* Global stylesheet */ @@ -27,7 +48,7 @@ body { max-width: 100ch; padding: 0 1rem; margin: 0 auto 2rem; - font-family: var(--font-family); + font-family: comic-mono; color: var(--text-color); background-color: var(--background-color); } @@ -197,14 +218,14 @@ a[href].header-anchor:focus, h1 { padding-bottom: 20px; - border-bottom: 12px double var(--xkcd-magenta); + border-bottom: 12px double var(--accent-color); } article { overflow: auto; padding-bottom: 20px; margin-bottom: 20px; - border-bottom: 12px double var(--xkcd-magenta); + border-bottom: 12px double var(--accent-color); } img { diff --git a/static/ComicMono.woff b/static/ComicMono.woff new file mode 100644 index 0000000000000000000000000000000000000000..c3119f9b7ebeecf284cd151f11a7b0d2ec925700 GIT binary patch literal 16696 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 QyZvt&eP{u3koWil0I%lPCIA2c literal 0 HcmV?d00001 diff --git a/static/light-toggle.js b/static/light-toggle.js new file mode 100644 index 0000000..fb7c492 --- /dev/null +++ b/static/light-toggle.js @@ -0,0 +1,46 @@ +function themeToggle() { + const oldValue = localStorage.getItem('theme'); + let newValue; + if (oldValue == 'light') { + newValue = 'dark'; + } else if (oldValue == 'dark') { + newValue = 'light'; + } + localStorage.setItem('theme', newValue); + themeRefresh(); +} + +function themeClear() { + localStorage.setItem('theme', ''); + themeRefresh(); +} + +function themeRefresh(newValue) { + if (newValue !== undefined) { + localStorage.setItem('theme', newValue); + } + + const theme = localStorage.getItem('theme') + const el = document.getElementsByTagName('html')[0]; + if (theme == 'light') { + el.setAttribute('theme', 'light'); + } else if (theme == 'dark') { + el.setAttribute('theme', 'dark'); + } else { + el.setAttribute('theme', ''); + } +} + +function main() { + const buttonToggle = document.getElementsByClassName('theme-toggle'); + for (const el of buttonToggle) { + el.onclick = themeToggle; + } + const buttonClear = document.getElementsByTagName('theme-clear'); + for (const el of buttonClear) { + el.onclick = themeClear; + } + themeRefresh(); +} + +main();