diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/src/error.rs | 27 | ||||
-rw-r--r-- | ui/src/home.rs | 4 | ||||
-rw-r--r-- | ui/src/lib.rs | 13 | ||||
-rw-r--r-- | ui/src/node_page.rs | 7 |
4 files changed, 48 insertions, 3 deletions
diff --git a/ui/src/error.rs b/ui/src/error.rs new file mode 100644 index 0000000..ddf05bb --- /dev/null +++ b/ui/src/error.rs @@ -0,0 +1,27 @@ +/* + This file is part of jellything (https://codeberg.org/metamuffin/jellything) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2025 metamuffin <metamuffin.org> +*/ + +use crate::Page; +use jellycommon::routes::u_account_login; + +impl Page for ErrorPage { + fn title(&self) -> String { + "Error".to_string() + } + fn to_render(&self) -> markup::DynRender { + markup::new!(@self) + } +} + +markup::define! { + ErrorPage(status: String) { + h2 { "Error" } + p { @status } + // @if status == Status::NotFound { + p { "You might need to " a[href=u_account_login()] { "log in" } ", to see this page" } + // } + } +} diff --git a/ui/src/home.rs b/ui/src/home.rs index 53055e8..21ce740 100644 --- a/ui/src/home.rs +++ b/ui/src/home.rs @@ -4,7 +4,7 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ use crate::{ - Page, + CONF, Page, locale::{Language, tr, trs}, node_card::NodeCard, }; @@ -13,7 +13,7 @@ use markup::DynRender; markup::define! { HomePage<'a>(lang: &'a Language, r: ApiHomeResponse) { - h2 { @trs(lang, "home.bin.root") } //.replace("{title}", &CONF.brand) } + h2 { @tr(**lang, &"home.bin.root").replace("{title}", &CONF.brand) } ul.children.hlist {@for (node, udata) in &r.toplevel { li { @NodeCard { node, udata, lang: &lang } } }} diff --git a/ui/src/lib.rs b/ui/src/lib.rs index cbfc298..0e7547e 100644 --- a/ui/src/lib.rs +++ b/ui/src/lib.rs @@ -16,7 +16,9 @@ pub mod props; pub mod scaffold; pub mod search; pub mod stats; +pub mod error; +use jellycommon::user::Theme; use locale::Language; use markup::DynRender; use scaffold::{RenderInfo, Scaffold}; @@ -64,8 +66,17 @@ pub trait Page { pub fn render_page(page: &dyn Page, renderinfo: RenderInfo, lang: Language) -> String { Scaffold { lang, + class: &format!( + "{} theme-{}", + page.class().unwrap_or("custom-page"), + renderinfo + .session + .as_ref() + .map(|s| s.user.theme) + .unwrap_or(Theme::Dark) + .to_str() + ), renderinfo, - class: page.class().unwrap_or("aaaa"), title: page.title(), main: page.to_render(), } diff --git a/ui/src/node_page.rs b/ui/src/node_page.rs index 7fb299f..45cf18c 100644 --- a/ui/src/node_page.rs +++ b/ui/src/node_page.rs @@ -28,6 +28,13 @@ impl Page for NodePage<'_> { fn title(&self) -> String { self.node.title.clone().unwrap_or_default() } + fn class(&self) -> Option<&'static str> { + if self.player { + Some("player") + } else { + Some("node-page") + } + } fn to_render(&self) -> markup::DynRender { markup::new!(@self) } |