Add a toggle between dark and light theme

This commit is contained in:
Greg Burri 2025-03-31 15:31:06 +02:00
parent d22617538e
commit 559ed139aa
34 changed files with 640 additions and 469 deletions

View file

@ -0,0 +1,2 @@
[build]
target = "wasm32-unknown-unknown"

View file

@ -3,7 +3,7 @@ use gloo::{console::log, events::EventListener, utils::window};
use utils::by_id;
use wasm_bindgen::prelude::*;
use wasm_bindgen_futures::spawn_local;
use web_sys::{HtmlElement, HtmlSelectElement};
use web_sys::{HtmlElement, HtmlInputElement, HtmlSelectElement};
use crate::utils::selector;
@ -58,6 +58,7 @@ pub fn main() -> Result<(), JsValue> {
_ => log!("Path unknown: ", location),
}
// Language handling.
let select_language: HtmlSelectElement = by_id("select-website-language");
EventListener::new(&select_language.clone(), "input", move |_event| {
let lang = select_language.value();
@ -79,5 +80,23 @@ pub fn main() -> Result<(), JsValue> {
})
.forget();
// Dark/light theme handling.
let toggle_theme: HtmlInputElement = selector("#toggle-theme input");
EventListener::new(&toggle_theme.clone(), "change", move |_event| {
wasm_cookies::set(
common::consts::COOKIE_DARK_THEME,
&(!toggle_theme.checked()).to_string(),
&wasm_cookies::CookieOptions {
path: Some("/"),
domain: None,
expires: None,
secure: false,
same_site: wasm_cookies::SameSite::Strict,
},
);
window().location().reload().unwrap();
})
.forget();
Ok(())
}