From 948700d35f0eddbc2e0fd29548991e687362983d Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 11 Jan 2023 16:27:16 +0100 Subject: move files --- server/src/frontend/pages/node.rs | 60 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 server/src/frontend/pages/node.rs (limited to 'server/src/frontend/pages/node.rs') diff --git a/server/src/frontend/pages/node.rs b/server/src/frontend/pages/node.rs new file mode 100644 index 0000000..7ac4332 --- /dev/null +++ b/server/src/frontend/pages/node.rs @@ -0,0 +1,60 @@ +use crate::{ + frontend::pages::HtmlTemplate, + library::{Directory, Item, Node}, + AppState, +}; +use anyhow::Context; +use rocket::{get, uri, State}; +use std::{ops::Deref, path::PathBuf, sync::Arc}; + +use super::MyError; + +#[get("/library/")] +pub async fn page_library_node( + path: PathBuf, + state: &State, +) -> Result, MyError> { + let path = path.to_str().unwrap().to_string(); + let node = state + .library + .nested(&path) + .context("retrieving library node")? + .clone(); + Ok(HtmlTemplate( + format!("{}", node.title()), + markup::new! { + @NodePage { node: node.clone() } + }, + )) +} + +markup::define! { + NodePage(node: Arc) { + @match node.deref() { + Node::Directory(dir) => { @DirectoryPage { dir: dir.clone() } } + Node::Item(item) => { @ItemPage { item: item.clone() } } + } + } + DirectoryCard(dir: Arc) { + span { a[href=&uri!(page_library_node(&dir.lib_path)).to_string()] { @dir.data.name } } + } + DirectoryPage(dir: Arc) { + h1 { @dir.data.name } + ul.directorylisting { + @for el in &dir.children { + li { + span.title { @match el.deref().to_owned() { + Node::Directory(dir) => { @DirectoryCard { dir } } + Node::Item(item) => { @ItemCard { item } } + }} + } + } + } + } + ItemCard(item: Arc) { + span { a[href=&uri!(page_library_node(&item.lib_path)).to_string()] { @item.data.title } } + } + ItemPage(item: Arc) { + h1 { @item.data.title } + } +} -- cgit v1.2.3-70-g09d2