diff options
author | Vika <vika@fireburn.ru> | 2025-04-20 08:25:57 +0300 |
---|---|---|
committer | Vika <vika@fireburn.ru> | 2025-04-20 10:01:01 +0300 |
commit | 3207c8ea57eac714417494e06ce0f82864b7ff1e (patch) | |
tree | 70cfde719dd596dbe05d38276526e763d55eac1d /src/frontend | |
parent | b3288627d171fff9a289a56a4ae27307985f9f96 (diff) | |
download | kittybox-3207c8ea57eac714417494e06ce0f82864b7ff1e.tar.zst |
WIP: Theme support
Kittybox can now ship with several different stylesheets, provided by the renderer. Unknown stylesheets fall back to the default one, which is the same Kittybox has shipped since its inception. There's also a settings field for custom CSS, but it's not exposed anywhere yet. Change-Id: I2850dace5c40f9fed04b4651c551a861df5b83d3
Diffstat (limited to 'src/frontend')
-rw-r--r-- | src/frontend/mod.rs | 22 | ||||
-rw-r--r-- | src/frontend/onboarding.rs | 2 |
2 files changed, 19 insertions, 5 deletions
diff --git a/src/frontend/mod.rs b/src/frontend/mod.rs index 94b8aa7..a05c91d 100644 --- a/src/frontend/mod.rs +++ b/src/frontend/mod.rs @@ -1,4 +1,4 @@ -use crate::database::{Storage, StorageError}; +use crate::database::{settings::Setting, Storage, StorageError}; use axum::{ extract::{Query, State}, http::{StatusCode, Uri}, @@ -271,11 +271,13 @@ pub async fn homepage<D: Storage>( // other requests anyway if it's serious...) // // btw is it more efficient to fetch these in parallel? - let (blogname, webring, channels) = tokio::join!( + let (blogname, webring, theme, channels) = tokio::join!( db.get_setting::<crate::database::settings::SiteName>(&hcard_url) .map(Result::unwrap_or_default), db.get_setting::<crate::database::settings::Webring>(&hcard_url) .map(Result::unwrap_or_default), + db.get_setting::<crate::database::settings::Theme>(&hcard_url) + .map(Result::unwrap_or_default), db.get_channels(&hcard_url).map(|i| i.unwrap_or_default()) ); @@ -293,6 +295,7 @@ pub async fn homepage<D: Storage>( title: blogname.as_ref(), blog_name: blogname.as_ref(), feeds: channels, + theme: theme.into_inner(), user: session.as_deref(), content: MainPage { feed: &hfeed, @@ -319,9 +322,11 @@ pub async fn homepage<D: Storage>( } else { error!("Error while fetching h-card and/or h-feed: {}", err); // Return the error - let (blogname, channels) = tokio::join!( + let (blogname, theme, channels) = tokio::join!( db.get_setting::<crate::database::settings::SiteName>(&hcard_url) .map(Result::unwrap_or_default), + db.get_setting::<crate::database::settings::Theme>(&hcard_url) + .map(Result::unwrap_or_default), db.get_channels(&hcard_url).map(|i| i.unwrap_or_default()) ); @@ -332,6 +337,7 @@ pub async fn homepage<D: Storage>( title: blogname.as_ref(), blog_name: blogname.as_ref(), feeds: channels, + theme: theme.into_inner(), user: session.as_deref(), content: ErrorPage { code: err.code(), @@ -361,9 +367,11 @@ pub async fn catchall<D: Storage>( match get_post_from_database(&db, path.as_str(), query.after, user).await { Ok((post, cursor)) => { - let (blogname, channels) = tokio::join!( + let (blogname, theme, channels) = tokio::join!( db.get_setting::<crate::database::settings::SiteName>(&host) .map(Result::unwrap_or_default), + db.get_setting::<crate::database::settings::Theme>(&host) + .map(Result::unwrap_or_default), db.get_channels(&host).map(|i| i.unwrap_or_default()) ); let mut headers = axum::http::HeaderMap::new(); @@ -411,6 +419,7 @@ pub async fn catchall<D: Storage>( title: blogname.as_ref(), blog_name: blogname.as_ref(), feeds: channels, + theme: theme.into_inner(), user: session.as_deref(), content: match post.pointer("/type/0").and_then(|i| i.as_str()) { Some("h-entry") => Entry { @@ -434,9 +443,11 @@ pub async fn catchall<D: Storage>( .into_response() } Err(err) => { - let (blogname, channels) = tokio::join!( + let (blogname, theme, channels) = tokio::join!( db.get_setting::<crate::database::settings::SiteName>(&host) .map(Result::unwrap_or_default), + db.get_setting::<crate::database::settings::Theme>(&host) + .map(Result::unwrap_or_default), db.get_channels(&host).map(|i| i.unwrap_or_default()) ); ( @@ -449,6 +460,7 @@ pub async fn catchall<D: Storage>( title: blogname.as_ref(), blog_name: blogname.as_ref(), feeds: channels, + theme: theme.into_inner(), user: session.as_deref(), content: ErrorPage { code: err.code(), diff --git a/src/frontend/onboarding.rs b/src/frontend/onboarding.rs index 3b53911..3caa458 100644 --- a/src/frontend/onboarding.rs +++ b/src/frontend/onboarding.rs @@ -21,6 +21,7 @@ pub async fn get() -> Html<String> { title: "Kittybox - Onboarding", blog_name: "Kittybox", feeds: vec![], + theme: Default::default(), user: None, content: OnboardingPage {}.to_string(), } @@ -150,6 +151,7 @@ pub async fn post<D: Storage + 'static>( title: "Kittybox - Onboarding", blog_name: "Kittybox", feeds: vec![], + theme: Default::default(), user: None, content: ErrorPage { code: err.code(), |