From 05f77926b147fe3a849eb1dbeeed2afcf97ad866 Mon Sep 17 00:00:00 2001 From: Elias Haugsbakk Date: Thu, 2 Jul 2026 01:10:58 +0200 Subject: add blog post rendering --- .../clams/server/controller/BlogController.java | 32 ++++++++++++++-------- .../clams/server/utils/MarkdownConverter.java | 15 ++++++++++ 2 files changed, 35 insertions(+), 12 deletions(-) create mode 100644 clams-server/src/main/java/no/eliashaugsbakk/clams/server/utils/MarkdownConverter.java (limited to 'clams-server/src/main/java/no/eliashaugsbakk/clams/server') diff --git a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/BlogController.java b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/BlogController.java index 076e0e3..9111a0a 100644 --- a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/BlogController.java +++ b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/BlogController.java @@ -2,11 +2,13 @@ package no.eliashaugsbakk.clams.server.controller; import io.javalin.http.Context; import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; import no.eliashaugsbakk.clams.server.repository.BlogPostRepo; import no.eliashaugsbakk.clams.server.repository.BlogPostRepoSqlite; import no.eliashaugsbakk.clams.server.repository.SqliteManager; +import no.eliashaugsbakk.clams.server.utils.MarkdownConverter; public class BlogController { private final BlogPostRepo blogPostRepo; @@ -16,10 +18,17 @@ public class BlogController { } public void handleGetPost(Context ctx) { - ctx.render("templates/post.html", - Map.of("page_title", "place holder Title - Elias Haugsbakk", "page_css", "post", - "title", "place holder Title", "published_date", "place holder Release Date", - "author", "place holder Author", "content", "place holder Content")); + blogPostRepo.getPost(ctx.pathParam("slug")).ifPresentOrElse(post -> ctx.render( + "templates/post.html", + Map.of("page_title", post.title() + " -- Elias Haugsbakk", + "page_css", "post", + "title", post.title(), + "published_date", post.timePublished().atZone(ZoneId.of("Europe/Oslo")).format( + DateTimeFormatter.ofPattern("MMM dd, yyyy")), + "author", "by Elias Haugsbakk", + "content", MarkdownConverter.convertToHtml(post.content()), + "back_to_index", "back to all posts" + )), () -> ctx.status(404)); } public void handleGetOverview(Context ctx) { @@ -64,17 +73,16 @@ public class BlogController { featuredPosts.append(""); ctx.render("templates/blog.html", - Map.of("page_title", "Elias Haugsbakk's Blog", "page_css", "blog", - "all_posts", allPosts.toString(), "recent_posts", featuredPosts.toString())); + Map.of("page_title", "Elias Haugsbakk's Blog", "page_css", "blog", "all_posts", + allPosts.toString(), "recent_posts", featuredPosts.toString())); } } diff --git a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/utils/MarkdownConverter.java b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/utils/MarkdownConverter.java new file mode 100644 index 0000000..a0d24c8 --- /dev/null +++ b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/utils/MarkdownConverter.java @@ -0,0 +1,15 @@ +package no.eliashaugsbakk.clams.server.utils; + +import org.commonmark.node.Node; +import org.commonmark.parser.Parser; +import org.commonmark.renderer.html.HtmlRenderer; + +public class MarkdownConverter { + public static String convertToHtml(String markdown) { + Parser parser = Parser.builder().build(); + HtmlRenderer renderer = HtmlRenderer.builder().build(); + + Node document = parser.parse(markdown); + return renderer.render(document); + } +} -- cgit v1.2.3