diff options
Diffstat (limited to 'ui/src/lib.rs')
-rw-r--r-- | ui/src/lib.rs | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/ui/src/lib.rs b/ui/src/lib.rs index 67dc067..2521054 100644 --- a/ui/src/lib.rs +++ b/ui/src/lib.rs @@ -14,6 +14,34 @@ pub mod scaffold; pub mod search; pub mod settings; pub mod stats; +pub mod items; +pub mod admin; + +use locale::Language; +use markup::DynRender; +use scaffold::{RenderInfo, Scaffold}; +use serde::{Deserialize, Serialize}; +use std::{ + path::PathBuf, + sync::{LazyLock, Mutex}, +}; + +#[rustfmt::skip] +#[derive(Debug, Deserialize, Serialize, Default)] +pub struct Config { + brand: String, + slogan: String, + asset_path: PathBuf, +} + +static CONF: LazyLock<Config> = LazyLock::new(|| { + CONF_PRELOAD + .lock() + .unwrap() + .take() + .expect("cache config not preloaded. logic error") +}); +static CONF_PRELOAD: Mutex<Option<Config>> = Mutex::new(None); /// render as supertrait would be possible but is not /// dyn compatible and I really dont want to expose generics @@ -26,16 +54,26 @@ pub trait Page { } } -use markup::DynRender; -use scaffold::Scaffold; - -pub fn render_page(page: &dyn Page) -> String { +pub fn render_page(page: &dyn Page, renderinfo: RenderInfo, lang: Language) -> String { Scaffold { lang, - context, + renderinfo, class: page.class().unwrap_or("aaaa"), title: page.title(), main: page.to_render(), } .to_string() } + +pub struct CustomPage { + pub title: String, + pub body: String, +} +impl Page for CustomPage { + fn title(&self) -> String { + self.title.clone() + } + fn to_render(&self) -> DynRender { + markup::new!(@markup::raw(&self.body)) + } +} |