Simplefied dark mode toggle.
This commit is contained in:
		
							parent
							
								
									09bb699e0c
								
							
						
					
					
						commit
						d84457f038
					
				
					 3 changed files with 11 additions and 31 deletions
				
			
		| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
[default]
 | 
			
		||||
port = 8345
 | 
			
		||||
address = "100.64.0.2"
 | 
			
		||||
# workers = 16
 | 
			
		||||
# max_blocking = 512
 | 
			
		||||
# keep_alive = 5
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,7 @@ pub mod web_app_backend {
 | 
			
		|||
        let mut vdom = VirtualDom::new_with_props(
 | 
			
		||||
            void_app::HomePage,
 | 
			
		||||
            DarkModeProps {
 | 
			
		||||
                slug: Some(String::new()),
 | 
			
		||||
                slug: Some("/".to_string()),
 | 
			
		||||
                dark_mode,
 | 
			
		||||
            },
 | 
			
		||||
        );
 | 
			
		||||
| 
						 | 
				
			
			@ -52,13 +52,14 @@ pub mod web_app_backend {
 | 
			
		|||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[get("/toggle-dark-mode")]
 | 
			
		||||
    async fn dark_mode_root(cookies: &CookieJar<'_>) -> Redirect {
 | 
			
		||||
    #[get("/?dark_mode&<callback>")]
 | 
			
		||||
    async fn dark_mode(cookies: &CookieJar<'_>, callback: &str) -> Redirect {
 | 
			
		||||
        match cookies.get("dark-mode") {
 | 
			
		||||
            Some(_) => cookies.remove(Cookie::named("dark-mode")),
 | 
			
		||||
            None => cookies.add(Cookie::new("dark-mode", "true")),
 | 
			
		||||
        };
 | 
			
		||||
        Redirect::to("/")
 | 
			
		||||
        let callback_uri = format!("{callback}");
 | 
			
		||||
        Redirect::to(callback_uri)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[get("/")]
 | 
			
		||||
| 
						 | 
				
			
			@ -98,24 +99,6 @@ pub mod web_app_backend {
 | 
			
		|||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[get("/toggle-dark-mode")]
 | 
			
		||||
    async fn poems_dark_mode(cookies: &CookieJar<'_>) -> Redirect {
 | 
			
		||||
        match cookies.get("dark-mode") {
 | 
			
		||||
            Some(_) => cookies.remove(Cookie::named("dark-mode")),
 | 
			
		||||
            None => cookies.add(Cookie::new("dark-mode", "true")),
 | 
			
		||||
        };
 | 
			
		||||
        Redirect::to("/poems/")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[get("/<entry>/toggle-dark-mode")]
 | 
			
		||||
    async fn entry_dark_mode(cookies: &CookieJar<'_>, entry: &str) -> Redirect {
 | 
			
		||||
        match cookies.get("dark-mode") {
 | 
			
		||||
            Some(_) => cookies.remove(Cookie::named("dark-mode")),
 | 
			
		||||
            None => cookies.add(Cookie::new("dark-mode", "true")),
 | 
			
		||||
        };
 | 
			
		||||
        Redirect::to(format!("/poems/{entry}"))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[get("/")]
 | 
			
		||||
    async fn latest_entry() -> Redirect {
 | 
			
		||||
        let slug = void_app::get_latest_entry();
 | 
			
		||||
| 
						 | 
				
			
			@ -162,7 +145,7 @@ pub mod web_app_backend {
 | 
			
		|||
        let mut vdom = VirtualDom::new_with_props(
 | 
			
		||||
            void_app::PoemPage,
 | 
			
		||||
            PoemRequest {
 | 
			
		||||
                slug: entry.to_string(),
 | 
			
		||||
                slug: format!("{entry}"),
 | 
			
		||||
                dark_mode: Some(dark_mode),
 | 
			
		||||
            },
 | 
			
		||||
        );
 | 
			
		||||
| 
						 | 
				
			
			@ -192,11 +175,8 @@ pub mod web_app_backend {
 | 
			
		|||
            .mount("/poems/previous", routes![previous_entry])
 | 
			
		||||
            .mount("/poems/next", routes![next_entry])
 | 
			
		||||
            .mount("/poems/latest", routes![latest_entry])
 | 
			
		||||
            .mount(
 | 
			
		||||
                "/poems",
 | 
			
		||||
                routes![poems_dark_mode, poem_list, entry_dark_mode, poem],
 | 
			
		||||
            )
 | 
			
		||||
            .mount("/", routes![dark_mode_root, index])
 | 
			
		||||
            .mount("/poems", routes![poem_list, poem])
 | 
			
		||||
            .mount("/", routes![dark_mode, index])
 | 
			
		||||
            .attach(Template::fairing())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -146,7 +146,7 @@ pub mod void_app {
 | 
			
		|||
        let slug_ref = slug.as_str();
 | 
			
		||||
        let dark_mode = cx.props.dark_mode;
 | 
			
		||||
        cx.render(rsx! {
 | 
			
		||||
            a { href: "{slug_ref}/toggle-dark-mode",
 | 
			
		||||
            a { href: "/?dark_mode&callback={slug_ref}",
 | 
			
		||||
                match dark_mode {
 | 
			
		||||
                    true => {
 | 
			
		||||
                        rsx! {
 | 
			
		||||
| 
						 | 
				
			
			@ -490,6 +490,7 @@ pub mod void_app {
 | 
			
		|||
    // #[cfg(any(target_family = "unix", target_family = "windows"))]
 | 
			
		||||
    fn RenderPoemTitle(cx: Scope<PoemData>) -> Element {
 | 
			
		||||
        let slug = cx.props.slug.clone().expect("Slug prop was not passed.");
 | 
			
		||||
        let callback = format!("/poems/{slug}");
 | 
			
		||||
        let dark_mode = cx
 | 
			
		||||
            .props
 | 
			
		||||
            .dark_mode
 | 
			
		||||
| 
						 | 
				
			
			@ -500,7 +501,7 @@ pub mod void_app {
 | 
			
		|||
            span { class: "p-4 ml-2 mr-2 flex text-xl text-center ring-4 bg-alice-werefox-grey-lightest dark:bg-alice-werefox-grey-dark ring-alice-werefox-red-dark dark:ring-alice-werefox-red text-alice-werefox-grey-dark dark:text-alice-werefox-grey-light",
 | 
			
		||||
                span { class: "flex flex-row align-middle mx-auto max-w-full justify-center",
 | 
			
		||||
                    "{title} "
 | 
			
		||||
                    DarkModeButton { slug: slug, dark_mode: dark_mode }
 | 
			
		||||
                    DarkModeButton { slug: callback, dark_mode: dark_mode }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue