From 3eb1adfeb8dd477479404a1269c8682e3b4edf12 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 29 Aug 2022 22:53:37 +0200 Subject: split files --- code/src/html.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 code/src/html.rs (limited to 'code/src/html.rs') diff --git a/code/src/html.rs b/code/src/html.rs new file mode 100644 index 0000000..bdc9a78 --- /dev/null +++ b/code/src/html.rs @@ -0,0 +1,44 @@ +use crate::{article_metadata, get_articles, markdown::blocks_to_html}; +use laby::{html, iter, li, ul, Render}; +use std::fs::read_to_string; + +pub fn scaffold(title: String, body: impl Render) -> impl Render { + html!( + head!( + link!(rel = "stylesheet", href = "./style.css"), + title!(format!("{} - metamuffin's blog", title)) + ), + body!( + nav!(h2!("metamuffin's blog"), a!(href = "./index.html", "index")), + article!(body), + footer!(p!("written by metamuffin, licensed under CC-BY-ND-4.0")) + ) + ) +} + +pub fn article(path: String) -> impl Render { + scaffold( + article_metadata(path.clone().into()).title, + laby::raw!(blocks_to_html(markdown::tokenize( + &read_to_string(path).unwrap() + ))), + ) +} + +pub fn index(root: &str) -> impl Render { + scaffold( + "index".to_string(), + ul!(iter!({ + get_articles(&root).into_iter().map(|meta| { + li!( + meta.date.to_string(), + ": ", + a!( + href = format!("./{}", meta.path.to_str().unwrap().replace(".md", ".html")), + meta.title + ) + ) + }) + })), + ) +} -- cgit v1.2.3-70-g09d2