From ae402342fe5736d74cf86e21c642abbb0805ff83 Mon Sep 17 00:00:00 2001
From: Matthias Andreas Benkard <code@mail.matthias.benkard.de>
Date: Sat, 25 Jan 2020 10:09:57 +0100
Subject: Web: Extract base template.

Change-Id: I20a4fbb04aa75a94f96617b0c4d1be00ab3e4aca
---
 .../eu/mulk/mulkcms2/benki/wiki/WikiResource.java  | 24 +++++++------
 src/main/resources/templates/base.html             | 15 ++++++++
 .../resources/templates/benki/wiki/wikiPage.html   | 42 ++++++++++------------
 3 files changed, 46 insertions(+), 35 deletions(-)
 create mode 100644 src/main/resources/templates/base.html

diff --git a/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java b/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
index ebed4e2..714b785 100644
--- a/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
+++ b/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
@@ -4,6 +4,7 @@ import static javax.ws.rs.core.MediaType.TEXT_HTML;
 
 import io.quarkus.panache.common.Sort;
 import io.quarkus.qute.Template;
+import io.quarkus.qute.TemplateExtension;
 import io.quarkus.qute.TemplateInstance;
 import io.quarkus.qute.api.ResourcePath;
 import io.quarkus.security.Authenticated;
@@ -11,6 +12,7 @@ import io.quarkus.security.identity.SecurityIdentity;
 import io.smallrye.jwt.auth.principal.JWTCallerPrincipal;
 import java.time.format.DateTimeFormatter;
 import java.time.format.FormatStyle;
+import java.time.temporal.TemporalAccessor;
 import java.util.Map;
 import java.util.Optional;
 import javax.inject.Inject;
@@ -55,17 +57,7 @@ public class WikiResource {
       throw new NotFoundException();
     }
     var page = maybePage.get();
-    return wikiPage
-        .data("title", page.title)
-        .data(
-            "date",
-            Map.of(
-                "htmlFormat", htmlDateFormatter.format(page.date),
-                "humanFormat", humanDateFormatter.format(page.date)))
-        .data(
-            "author",
-            Map.of("name", String.format("%s %s", page.author.firstName, page.author.lastName)))
-        .data("content", page.content);
+    return wikiPage.data("page", page);
   }
 
   @POST
@@ -85,4 +77,14 @@ public class WikiResource {
   public TemplateInstance getPageRevisions(@PathParam("pageName") String pageName) {
     throw new NotImplementedYetException();
   }
+
+  @TemplateExtension
+  static String humanDateTime(TemporalAccessor x) {
+    return humanDateFormatter.format(x);
+  }
+
+  @TemplateExtension
+  static String htmlDateTime(TemporalAccessor x) {
+    return htmlDateFormatter.format(x);
+  }
 }
diff --git a/src/main/resources/templates/base.html b/src/main/resources/templates/base.html
new file mode 100644
index 0000000..8fefe31
--- /dev/null
+++ b/src/main/resources/templates/base.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="UTF-8">
+
+  <title>{#insert title}{/}</title>
+
+  <link rel="stylesheet" type="text/css" href="/common.css" />
+  <script type="module" src="/components.js"></script>
+</head>
+
+<body>
+{#insert body}{/}
+</body>
+</html>
diff --git a/src/main/resources/templates/benki/wiki/wikiPage.html b/src/main/resources/templates/benki/wiki/wikiPage.html
index 865d3ba..7caf94d 100644
--- a/src/main/resources/templates/benki/wiki/wikiPage.html
+++ b/src/main/resources/templates/benki/wiki/wikiPage.html
@@ -1,28 +1,22 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="UTF-8">
+{@eu.mulk.mulkcms2.benki.wiki.WikiPageRevision page}
 
-  <title>{title} &#8212; Benki Wiki</title>
+{#include base.html}
+{#title}{page.title} &#8212; Benki Wiki{/title}
+{#body}
+<article id="wiki-page">
+  <header>
+    <h1>{page.title}</h1>
+  </header>
 
-  <link rel="stylesheet" type="text/css" href="/common.css" />
-</head>
+  <main>
+    {#with page}{content.raw}{/}
+  </main>
 
-<body>
-  <article id="wiki-page">
-    <header>
-      <h1>{title}</h1>
-    </header>
+  <hr>
 
-    <main>
-      {content.raw}
-    </main>
-
-    <hr>
-
-    <footer>
-      <a href="/wiki/{title}/revisions">Page revisions</a>
-    </footer>
-  </article>
-</body>
-</html>
+  <footer>
+    <a href="/wiki/{page.title}/revisions">Page revisions</a>
+  </footer>
+</article>
+{/body}
+{/include}
-- 
cgit v1.2.3