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 ) ) }) })), ) }