aboutsummaryrefslogtreecommitdiff
path: root/src/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend')
-rw-r--r--src/frontend/pages/mod.rs11
-rw-r--r--src/frontend/pages/node.rs55
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(&params.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 }
+ }
+
}