summaryrefslogtreecommitdiff
path: root/clams-server/src/main/java/no/eliashaugsbakk/clams/server
diff options
context:
space:
mode:
Diffstat (limited to 'clams-server/src/main/java/no/eliashaugsbakk/clams/server')
-rw-r--r--clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/BlogController.java32
-rw-r--r--clams-server/src/main/java/no/eliashaugsbakk/clams/server/utils/MarkdownConverter.java15
2 files changed, 35 insertions, 12 deletions
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", "<a href=\"/blog/\">back to all posts</a>"
+ )), () -> ctx.status(404));
}
public void handleGetOverview(Context ctx) {
@@ -64,17 +73,16 @@ public class BlogController {
featuredPosts.append("<ul class=\"recent-list\">");
for (String slug : featuredSlugs) {
- blogPostRepo.getPost(slug).ifPresent(post -> featuredPosts.append(
- String.format("""
- <li>
- <a href="/blog/%s">%s</a> <span class="featured-desc">-- %s</span>
- </li>
- """, post.slug(), post.title(), post.summary())));
+ blogPostRepo.getPost(slug).ifPresent(post -> featuredPosts.append(String.format("""
+ <li>
+ <a href="/blog/%s">%s</a> <span class="featured-desc">-- %s</span>
+ </li>
+ """, post.slug(), post.title(), post.summary())));
}
featuredPosts.append("</ul>");
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);
+ }
+}