From 96ab77fd1e0c787902652d4f63ba751c18ecf322 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Sun, 17 Oct 2021 14:18:08 +0200 Subject: [PATCH] Implement a switch for switching between light and dark mode --- blog/sass/css/edition-2/main.scss | 46 ++++++++++++++++++++++++++++++ blog/static/js/edition-2/main.js | 24 ++++++++++++++++ blog/templates/edition-2/base.html | 2 ++ 3 files changed, 72 insertions(+) diff --git a/blog/sass/css/edition-2/main.scss b/blog/sass/css/edition-2/main.scss index f4712bbe..c8ca740f 100644 --- a/blog/sass/css/edition-2/main.scss +++ b/blog/sass/css/edition-2/main.scss @@ -961,6 +961,7 @@ img { background-color: white; } +/* Note that dark mode is experimental */ .dark-mode-note { display: none; @@ -978,3 +979,48 @@ body.dark .dark-mode-note { display: none; } } + +/* Manual switch between dark and light mode */ + +@mixin light-switch-light { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23004' class='bi bi-moon' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M14.53 10.53a7 7 0 0 1-9.058-9.058A7.003 7.003 0 0 0 8 15a7.002 7.002 0 0 0 6.53-4.47z'/%3E%3C/svg%3E"); +} + +@mixin light-switch-dark { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ff9' class='bi bi-brightness-high-fill' viewBox='0 0 16 16'%3E%3Cpath d='M12 8a4 4 0 1 1-8 0 4 4 0 0 1 8 0zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708z'/%3E%3C/svg%3E"); +} + +.light-switch { + @include light-switch-light(); +} + +body.dark .light-switch { + @include light-switch-dark(); +} + +@media (prefers-color-scheme: dark) { + .light-switch { + @include light-switch-dark(); + } + + body.light .light-switch { + @include light-switch-light(); + } +} + +.light-switch { + position: fixed; + left: 2rem; + bottom: 2rem; + background-repeat: no-repeat; + width: 2rem; + height: 2rem; + cursor: pointer; + opacity: 0.6; +} + +.light-switch:hover { + transform: scale(1.3); + transition: 200ms ease-out; + opacity: 1; +} diff --git a/blog/static/js/edition-2/main.js b/blog/static/js/edition-2/main.js index dfa1dd4d..513fcd9d 100644 --- a/blog/static/js/edition-2/main.js +++ b/blog/static/js/edition-2/main.js @@ -61,3 +61,27 @@ function toc_scroll_position(container) { current_toc_item.classList.add("active"); } } + +function toggle_lights() { + var body = document.querySelector("body"); + var comment_form = document.querySelector("iframe.giscus-frame"); + if (body != null) { + if (body.classList.contains("dark")) { + body.classList.replace("dark", "light"); + if (comment_form != null) { + comment_form.contentWindow.postMessage({ + giscus: { setConfig: { theme: 'light' } } + }, "https://giscus.app") + } + } else { + body.classList.remove("light"); + body.classList.add("dark"); + if (comment_form != null) { + comment_form.contentWindow.postMessage({ + giscus: { setConfig: { theme: 'dark' } } + }, "https://giscus.app") + } + } + console.log(body) + } +} diff --git a/blog/templates/edition-2/base.html b/blog/templates/edition-2/base.html index 1a2ab2e7..f7baa22d 100644 --- a/blog/templates/edition-2/base.html +++ b/blog/templates/edition-2/base.html @@ -50,6 +50,8 @@ +
+