diff options
Diffstat (limited to 'src/frontend')
-rw-r--r-- | src/frontend/pages/mod.rs | 11 | ||||
-rw-r--r-- | src/frontend/pages/node.rs | 55 |
2 files changed, 35 insertions, 31 deletions
diff --git a/src/frontend/pages/mod.rs b/src/frontend/pages/mod.rs index 6145886..0e54a9a 100644 --- a/src/frontend/pages/mod.rs +++ b/src/frontend/pages/mod.rs @@ -47,18 +47,13 @@ pub type MyResult<T> = actix_web::Result<T, MyError>; #[derive(Debug)] pub struct MyError(anyhow::Error); -impl Responder for MyError { - type Body = BoxBody; - fn respond_to(self, req: &actix_web::HttpRequest) -> actix_web::HttpResponse<Self::Body> { - HttpResponseBuilder::new(StatusCode::BAD_REQUEST) - .body(format!("error: {}", self.0)) - .respond_to(req) - } -} impl actix_web::error::ResponseError for MyError { fn status_code(&self) -> StatusCode { StatusCode::BAD_REQUEST } + fn error_response(&self) -> actix_web::HttpResponse<BoxBody> { + HttpResponseBuilder::new(StatusCode::BAD_REQUEST).body(format!("error: {}", self.0)) + } } impl Display for MyError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 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 } + } + } |