diff options
Diffstat (limited to 'src/frontend/pages/node.rs')
-rw-r--r-- | src/frontend/pages/node.rs | 55 |
1 files changed, 32 insertions, 23 deletions
diff --git a/src/frontend/pages/node.rs b/src/frontend/pages/node.rs index b956d3e..bb8eb6c 100644 --- a/src/frontend/pages/node.rs +++ b/src/frontend/pages/node.rs @@ -1,13 +1,10 @@ -use super::layout::Layout; use crate::{ - frontend::pages::MyResult, - library::{LibDirectory, LibItem, LibNode}, + frontend::pages::{HtmlTemplate, MyResult, layout::Layout}, + library::{Directory, Item, Node}, AppState, }; use actix_web::{get, web, Responder}; -use actix_web_lab::respond::Html; use log::debug; -use markup::Render; use std::{ops::Deref, sync::Arc}; #[get("/library/{path:.*}")] @@ -17,34 +14,46 @@ pub async fn page_library_node( ) -> MyResult<impl Responder> { debug!("request: {:?}", params.0); let node = state.library.nested(¶ms.0)?; - let mut out = String::new(); - match node.deref() { - LibNode::Directory(dir) => Layout { - title: format!("{} - Library", node.title()), - main: Directory { dir: dir.clone() }, - } - .render(&mut out)?, - LibNode::Item(item) => Layout { - title: "".to_string(), - main: Item { item: item.clone() }, + Ok(HtmlTemplate(markup::new! { + @match node.deref() { + Node::Directory(dir) => { + @Layout { + title: format!("{} - Library", node.title()), + main: DirectoryPage { dir: dir.clone() }, + } + } + Node::Item(item) => { + @Layout { + title: "".to_string(), + main: ItemPage { item: item.clone() }, + } + } } - .render(&mut out)?, - }; - Ok(Html(out)) + })) } markup::define! { - Directory(dir: Arc<LibDirectory>) { + DirectoryCard(dir: Arc<Directory>) { + span { a[href=&dir.identifier] { @dir.data.name } } + } + DirectoryPage(dir: Arc<Directory>) { h1 { @dir.data.name } ul.directorylisting { - @for el in &dir.child_nodes().unwrap() { + @for el in &dir.children { li { - span.title { @el.title() } + span.title { @match el.deref().to_owned() { + Node::Directory(dir) => { @DirectoryCard { dir } } + Node::Item(item) => { @ItemCard { item } } + }} } } } } - Item(item: Arc<LibItem>) { - h1 { "thats an item" } + ItemCard(item: Arc<Item>) { + span { a[href=&item.identifier] { @item.data.title } } } + ItemPage(item: Arc<Item>) { + h1 { @item.data.title } + } + } |