use crate::{article_metadata, file_history, get_articles, markdown::blocks_to_html, ArticleMeta}; use laby::{frag, 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"), " ", a!(href = "./feed.atom", "atom") ), 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, frag!( laby::raw!(blocks_to_html(markdown::tokenize( &read_to_string(&path).unwrap() ))), hr!(), p!("changes to this article (as recorded with git; visible on the git repo, that i will create soon)"), pre!(file_history(&path)) ), ) } pub fn index(root: &str) -> impl Render { scaffold( "index".to_string(), ul!(iter!({ get_articles(&root).into_iter().map( |ArticleMeta { canonical_name, date, title, .. }| { li!( date.to_string(), ": ", a!(href = format!("./{canonical_name}.html",), title) ) }, ) })), ) }