aboutsummaryrefslogtreecommitdiff
path: root/src/frontend
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-01-10 23:06:31 +0100
committermetamuffin <metamuffin@disroot.org>2023-01-10 23:06:31 +0100
commitd38812fdbb968b14538ec59989873b1daf1fa7ab (patch)
treee4609858b89607417ae39f7d655903ef610662fa /src/frontend
parent552a3eb82347ee051855016f51ec452906cdc4d6 (diff)
downloadjellything-d38812fdbb968b14538ec59989873b1daf1fa7ab.tar
jellything-d38812fdbb968b14538ec59989873b1daf1fa7ab.tar.bz2
jellything-d38812fdbb968b14538ec59989873b1daf1fa7ab.tar.zst
directory browser works (somewhat)
Diffstat (limited to 'src/frontend')
-rw-r--r--src/frontend/pages/home.rs19
-rw-r--r--src/frontend/pages/mod.rs11
-rw-r--r--src/frontend/pages/node.rs28
3 files changed, 30 insertions, 28 deletions
diff --git a/src/frontend/pages/home.rs b/src/frontend/pages/home.rs
index 3595c19..d76fc6e 100644
--- a/src/frontend/pages/home.rs
+++ b/src/frontend/pages/home.rs
@@ -1,15 +1,14 @@
-use crate::{
- frontend::pages::{layout::Layout, HtmlTemplate},
- AppState,
-};
+use crate::frontend::pages::node::NodePage;
+use crate::{frontend::pages::HtmlTemplate, AppState};
use rocket::{get, State};
#[get("/")]
-pub async fn page_home(state: &State<AppState>) -> HtmlTemplate<impl markup::Render> {
- HtmlTemplate(Layout {
- title: String::from("Home"),
- main: markup::new! {
- h1 { "It works!" }
+pub async fn page_home(state: &State<AppState>) -> HtmlTemplate<markup::DynRender> {
+ HtmlTemplate(
+ "Home".to_string(),
+ markup::new! {
+ h1 { "Welcome to Jellything" }
+ @NodePage { node: state.library.root.clone() }
},
- })
+ )
}
diff --git a/src/frontend/pages/mod.rs b/src/frontend/pages/mod.rs
index 46e2067..fa1133e 100644
--- a/src/frontend/pages/mod.rs
+++ b/src/frontend/pages/mod.rs
@@ -6,16 +6,23 @@ use rocket::{
};
use std::{fmt::Display, io::Cursor};
+use self::layout::Layout;
+
pub mod home;
pub mod layout;
pub mod node;
-pub struct HtmlTemplate<T>(pub T);
+pub struct HtmlTemplate<T>(pub String, pub T);
impl<'r, T: Render> Responder<'r, 'static> for HtmlTemplate<T> {
fn respond_to(self, _: &'r Request<'_>) -> response::Result<'static> {
let mut out = String::new();
- self.0.render(&mut out).unwrap();
+ Layout {
+ title: self.0,
+ main: self.1,
+ }
+ .render(&mut out)
+ .unwrap();
Response::build()
.header(ContentType::HTML)
.streamed_body(Cursor::new(out))
diff --git a/src/frontend/pages/node.rs b/src/frontend/pages/node.rs
index cd0b4ec..b454793 100644
--- a/src/frontend/pages/node.rs
+++ b/src/frontend/pages/node.rs
@@ -15,25 +15,21 @@ pub async fn page_library_node(
) -> Result<HtmlTemplate<markup::DynRender>, MyError> {
let path = path.to_str().unwrap().to_string();
let node = state.library.nested(&path)?.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() },
- }
- }
- }
- }))
+ Ok(HtmlTemplate(
+ format!("{}", node.title()),
+ markup::new! {
+ @NodePage { node: node.clone() }
+ },
+ ))
}
markup::define! {
+ NodePage(node: Arc<Node>) {
+ @match node.deref() {
+ Node::Directory(dir) => { @DirectoryPage { dir: dir.clone() } }
+ Node::Item(item) => { @ItemPage { item: item.clone() } }
+ }
+ }
DirectoryCard(dir: Arc<Directory>) {
span { a[href=&uri!(page_library_node(&dir.lib_path)).to_string()] { @dir.data.name } }
}