diff --git a/src/lib.rs b/src/lib.rs index 6a43946..f534e79 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -148,7 +148,7 @@ async fn default_route(_req: Request, url: Url) -> MyResult { } else { // TODO: Actually render the page... return Response::new_with_opt_str_and_init( - Some(&blog::PostContentCache::find_or_render(&post).await.content), + Some(&render::render_post(post).await?), ResponseInit::new() .status(200) .headers(headers!{ diff --git a/src/render.rs b/src/render.rs index 0021413..69e7524 100644 --- a/src/render.rs +++ b/src/render.rs @@ -60,6 +60,15 @@ struct HomePageContext { next: Option } +#[derive(Serialize)] +struct PostContext { + blog: &'static BlogRootContext, + title: String, + url: String, + timestamp: u64, + content: String +} + lazy_static! { static ref THEME_CONFIG: serde_json::Value = serde_json::from_str( include_str!("../theme_config.json")).unwrap(); @@ -156,4 +165,19 @@ pub async fn render_homepage(url: Url) -> MyResult { } hbs.render("home.hbs", &context) .map_err(|e| Error::BadRequest(format!("{:#?}", e))) +} + +pub async fn render_post(post: blog::Post) -> MyResult { + let hbs = build_handlebars(); + let post_cache = blog::PostContentCache::find_or_render(&post).await; + let context = PostContext { + blog: &ROOT_CONTEXT, + title: post.title, + url: post.url, + timestamp: post.timestamp, + content: post_cache.content + }; + + hbs.render("post.hbs", &context) + .map_err(|e| Error::BadRequest(format!("{:#?}", e))) } \ No newline at end of file diff --git a/theme/default/post.hbs b/theme/default/post.hbs new file mode 100644 index 0000000..be88670 --- /dev/null +++ b/theme/default/post.hbs @@ -0,0 +1,24 @@ + + + + {{ title }} - {{ blog.title }} + + + +
+ {{> sidebar.hbs }} +
+

{{ title }}

+ {{ format_date timestamp "%e %b, %Y" }} + {{{ content }}} +
+
+ + + + \ No newline at end of file