You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by me...@apache.org on 2026/02/17 20:52:52 UTC

(fineract-chat-archive) branch main updated (a0651fd -> cddce07)

This is an automated email from the ASF dual-hosted git repository.

meonkeys pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/fineract-chat-archive.git


    from a0651fd  add some more UTF-8 glyphs to EMOJI_MAP
     new 6889337  add some linebreaks to HTML output
     new cddce07  fix unit test

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../apache/fineract/chat/archive/HtmlRenderer.java | 82 +++++++++++-----------
 .../fineract/chat/archive/HtmlRendererTest.java    |  8 ++-
 2 files changed, 46 insertions(+), 44 deletions(-)


(fineract-chat-archive) 02/02: fix unit test

Posted by me...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

meonkeys pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fineract-chat-archive.git

commit cddce07f3e85881ecf8cf79dd05b922b217b7393
Author: Adam Monsen <ha...@gmail.com>
AuthorDate: Tue Feb 17 12:52:10 2026 -0800

    fix unit test
    
    also, use UTF-8 glyphs in mock data and UTF-16BE codepoints in assertion
---
 src/main/java/org/apache/fineract/chat/archive/HtmlRenderer.java  | 2 +-
 .../java/org/apache/fineract/chat/archive/HtmlRendererTest.java   | 8 +++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/fineract/chat/archive/HtmlRenderer.java b/src/main/java/org/apache/fineract/chat/archive/HtmlRenderer.java
index cb395e1..0334872 100644
--- a/src/main/java/org/apache/fineract/chat/archive/HtmlRenderer.java
+++ b/src/main/java/org/apache/fineract/chat/archive/HtmlRenderer.java
@@ -175,7 +175,7 @@ final class HtmlRenderer {
         if (row.reactions() != null && !row.reactions().isEmpty()) {
             builder.append("<div class=\"archive-reactions\">");
             for (String reaction : row.reactions()) {
-                builder.append("<span class=\"archive-reaction\">\n")
+                builder.append("<span class=\"archive-reaction\">")
                         .append(escapeHtml(normalize(reaction)))
                         .append("</span>\n");
             }
diff --git a/src/test/java/org/apache/fineract/chat/archive/HtmlRendererTest.java b/src/test/java/org/apache/fineract/chat/archive/HtmlRendererTest.java
index 7414683..8192547 100644
--- a/src/test/java/org/apache/fineract/chat/archive/HtmlRendererTest.java
+++ b/src/test/java/org/apache/fineract/chat/archive/HtmlRendererTest.java
@@ -32,12 +32,12 @@ class HtmlRendererTest {
         List<HtmlRenderer.Row> rows = List.of(
                 new HtmlRenderer.Row(false, "Thu 09:15", "Thu, 12 Feb 2026 09:15:00 GMT",
                         "alex", "Thread root with <a class=\"archive-link\" href=\"https://example.org\">link</a>",
-                        "https://slack.example/permalink", List.of("\uD83D\uDC4D 1")),
+                        "https://slack.example/permalink", List.of("👍 1")),
                 new HtmlRenderer.Row(true, "Thu 09:16", "Thu, 12 Feb 2026 09:16:00 GMT",
                         "sam", "_Okay_\n*Passed ?*\n~Maybe~\n- Check\n- LFG",
-                        "https://slack.example/permalink2", List.of("\uD83D\uDC4B 2")),
+                        "https://slack.example/permalink2", List.of("👋 2")),
                 new HtmlRenderer.Row(true, "Thu 09:18", "Thu, 12 Feb 2026 09:18:00 GMT",
-                        "jo", "Looks good \uD83D\uDC4D", "https://slack.example/permalink3",
+                        "jo", "Looks good 👍", "https://slack.example/permalink3",
                         List.of()));
 
         String page = HtmlRenderer.renderDailyPage("fineract", LocalDate.parse("2026-02-12"), rows);
@@ -56,6 +56,8 @@ class HtmlRendererTest {
         assertTrue(page.contains("<ul class=\"archive-list\">"));
         assertTrue(page.contains("<li>Check</li>"));
         assertTrue(page.contains("class=\"archive-reactions\""));
+        // intentionally left UTF-16BE "thumbs up" codepoint here to confirm we
+        // used the correct UTF-8 emoji glyph above
         assertTrue(page.contains("class=\"archive-reaction\">\uD83D\uDC4D 1</span>"));
         assertTrue(page.contains("href=\"../../../assets/chat-archive.css\""));
         assertFalse(page.contains("permalink:"));


(fineract-chat-archive) 01/02: add some linebreaks to HTML output

Posted by me...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

meonkeys pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fineract-chat-archive.git

commit 68893375570e57b7183ed77ef35180623efffb70
Author: Adam Monsen <ha...@gmail.com>
AuthorDate: Tue Feb 17 12:42:52 2026 -0800

    add some linebreaks to HTML output
    
    so when there are changes to the archive they are easier to diff
---
 .../apache/fineract/chat/archive/HtmlRenderer.java | 84 +++++++++++-----------
 1 file changed, 42 insertions(+), 42 deletions(-)

diff --git a/src/main/java/org/apache/fineract/chat/archive/HtmlRenderer.java b/src/main/java/org/apache/fineract/chat/archive/HtmlRenderer.java
index 040a439..cb395e1 100644
--- a/src/main/java/org/apache/fineract/chat/archive/HtmlRenderer.java
+++ b/src/main/java/org/apache/fineract/chat/archive/HtmlRenderer.java
@@ -43,7 +43,7 @@ final class HtmlRenderer {
         String safeDate = escapeHtml(date.toString());
 
         StringBuilder body = new StringBuilder();
-        body.append("<header class=\"archive-header\">")
+        body.append("<header class=\"archive-header\">\n")
                 .append("<p class=\"archive-breadcrumb\">")
                 .append("<a href=\"../../../\">Channels</a> / ")
                 .append("<a href=\"../\">#").append(safeChannel).append("</a> / ")
@@ -68,7 +68,7 @@ final class HtmlRenderer {
             body.append(renderMessageRow(row));
             int replyIndex = index + 1;
             if (replyIndex < rows.size() && rows.get(replyIndex).isReply()) {
-                body.append("<section class=\"archive-thread\" aria-label=\"Thread replies\">");
+                body.append("<section class=\"archive-thread\" aria-label=\"Thread replies\">\n");
                 while (replyIndex < rows.size() && rows.get(replyIndex).isReply()) {
                     body.append(renderMessageRow(rows.get(replyIndex)));
                     replyIndex++;
@@ -87,22 +87,22 @@ final class HtmlRenderer {
         String safeChannel = escapeHtml(normalize(channelName));
 
         StringBuilder body = new StringBuilder();
-        body.append("<header class=\"archive-header\">")
-                .append("<p class=\"archive-breadcrumb\">")
+        body.append("<header class=\"archive-header\">\n")
+                .append("<p class=\"archive-breadcrumb\">\n")
                 .append("<a href=\"../../\">Channels</a> / #").append(safeChannel)
-                .append("</p>")
-                .append("<h1>#").append(safeChannel).append("</h1>")
-                .append("</header>");
-        body.append("<section class=\"archive-index\">")
-                .append("<h2>Days</h2>")
-                .append("<ul class=\"archive-day-list\">");
+                .append("</p>\n")
+                .append("<h1>#").append(safeChannel).append("</h1>\n")
+                .append("</header>\n");
+        body.append("<section class=\"archive-index\">\n")
+                .append("<h2>Days</h2>\n")
+                .append("<ul class=\"archive-day-list\">\n");
         for (LocalDate date : dates) {
             String safeDate = escapeHtml(date.toString());
-            body.append("<li><a href=\"").append(safeDate).append("/\">")
+            body.append("<li><a href=\"").append(safeDate).append("/\">\n")
                     .append(safeDate)
-                    .append("</a></li>");
+                    .append("</a></li>\n");
         }
-        body.append("</ul>")
+        body.append("</ul>\n")
                 .append("</section>");
 
         return renderDocument("#" + normalize(channelName), CHANNEL_STYLESHEET_PATH,
@@ -111,21 +111,21 @@ final class HtmlRenderer {
 
     static String renderGlobalIndex(List<String> channels) {
         StringBuilder body = new StringBuilder();
-        body.append("<header class=\"archive-header\">")
-                .append("<h1>Chat Archive</h1>")
-                .append("</header>");
-        body.append("<section class=\"archive-index\">")
-                .append("<h2>Channels</h2>")
-                .append("<ul class=\"archive-channel-list\">");
+        body.append("<header class=\"archive-header\">\n")
+                .append("<h1>Chat Archive</h1>\n")
+                .append("</header>\n");
+        body.append("<section class=\"archive-index\">\n")
+                .append("<h2>Channels</h2>\n")
+                .append("<ul class=\"archive-channel-list\">\n");
         for (String channel : channels) {
             String safeChannel = escapeHtml(normalize(channel));
             body.append("<li><a href=\"daily/")
                     .append(safeChannel)
                     .append("/\">#")
                     .append(safeChannel)
-                    .append("</a></li>");
+                    .append("</a></li>\n");
         }
-        body.append("</ul>")
+        body.append("</ul>\n")
                 .append("</section>");
 
         return renderDocument("Chat Archive", ROOT_STYLESHEET_PATH, body.toString());
@@ -158,28 +158,28 @@ final class HtmlRenderer {
         if (row.isReply()) {
             builder.append(" archive-message-reply");
         }
-        builder.append("\">");
-        builder.append("<div class=\"archive-meta\">");
+        builder.append("\">\n");
+        builder.append("<div class=\"archive-meta\">\n");
         if (row.isReply()) {
-            builder.append("<span class=\"archive-reply-indicator\" aria-hidden=\"true\">&rarr;</span>");
-            builder.append("<span class=\"archive-reply-label\">reply</span>");
+            builder.append("<span class=\"archive-reply-indicator\" aria-hidden=\"true\">&rarr;</span>\n");
+            builder.append("<span class=\"archive-reply-label\">reply</span>\n");
         }
         builder.append(formatTimeCell(row));
-        builder.append("<span class=\"archive-user\">")
+        builder.append("<span class=\"archive-user\">\n")
                 .append(escapeHtml(normalize(row.user())))
-                .append("</span>");
-        builder.append("</div>");
-        builder.append("<div class=\"archive-text\">")
+                .append("</span>\n");
+        builder.append("</div>\n");
+        builder.append("<div class=\"archive-text\">\n")
                 .append(formatMessage(row.message()))
-                .append("</div>");
+                .append("</div>\n");
         if (row.reactions() != null && !row.reactions().isEmpty()) {
             builder.append("<div class=\"archive-reactions\">");
             for (String reaction : row.reactions()) {
-                builder.append("<span class=\"archive-reaction\">")
+                builder.append("<span class=\"archive-reaction\">\n")
                         .append(escapeHtml(normalize(reaction)))
-                        .append("</span>");
+                        .append("</span>\n");
             }
-            builder.append("</div>");
+            builder.append("</div>\n");
         }
         builder.append("</article>");
         return builder.toString();
@@ -203,14 +203,14 @@ final class HtmlRenderer {
                 listType = switchToList(builder, listType, ListType.UNORDERED);
                 builder.append("<li>")
                         .append(applyInlineMarkup(unorderedMatcher.group(1).trim()))
-                        .append("</li>");
+                        .append("</li>\n");
                 continue;
             }
             if (orderedMatcher.matches()) {
                 listType = switchToList(builder, listType, ListType.ORDERED);
                 builder.append("<li>")
                         .append(applyInlineMarkup(orderedMatcher.group(1).trim()))
-                        .append("</li>");
+                        .append("</li>\n");
                 continue;
             }
 
@@ -220,13 +220,13 @@ final class HtmlRenderer {
             }
 
             if (line.isBlank()) {
-                builder.append("<br>");
+                builder.append("<br>\n");
                 continue;
             }
 
-            builder.append("<span class=\"archive-line\">")
+            builder.append("<span class=\"archive-line\">\n")
                     .append(applyInlineMarkup(line))
-                    .append("</span>");
+                    .append("</span>\n");
             if (index < lines.length - 1) {
                 builder.append("<br>");
             }
@@ -279,18 +279,18 @@ final class HtmlRenderer {
             closeList(builder, current);
         }
         if (target == ListType.UNORDERED) {
-            builder.append("<ul class=\"archive-list\">");
+            builder.append("<ul class=\"archive-list\">\n");
         } else if (target == ListType.ORDERED) {
-            builder.append("<ol class=\"archive-list archive-list-numbered\">");
+            builder.append("<ol class=\"archive-list archive-list-numbered\">\n");
         }
         return target;
     }
 
     private static void closeList(StringBuilder builder, ListType type) {
         if (type == ListType.UNORDERED) {
-            builder.append("</ul>");
+            builder.append("</ul>\n");
         } else if (type == ListType.ORDERED) {
-            builder.append("</ol>");
+            builder.append("</ol>\n");
         }
     }