From: David ‘Bombe’ Roden Date: Wed, 8 Oct 2025 16:17:51 +0000 (+0200) Subject: ♻️ Use kotlinx.html to create HTML for comic state X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=refs%2Fheads%2Fmain;p=rhynodge.git ♻️ Use kotlinx.html to create HTML for comic state --- diff --git a/src/main/java/net/pterodactylus/rhynodge/states/ComicState.java b/src/main/java/net/pterodactylus/rhynodge/states/ComicState.java index 117f5b6..ad4874a 100644 --- a/src/main/java/net/pterodactylus/rhynodge/states/ComicState.java +++ b/src/main/java/net/pterodactylus/rhynodge/states/ComicState.java @@ -17,6 +17,7 @@ package net.pterodactylus.rhynodge.states; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -24,17 +25,20 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; - +import kotlinx.html.FlowContent; import net.pterodactylus.rhynodge.Reaction; import net.pterodactylus.rhynodge.states.ComicState.Comic; - -import com.fasterxml.jackson.annotation.JsonProperty; -import org.apache.commons.lang3.StringEscapeUtils; -import org.apache.commons.lang3.StringUtils; import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; import static java.lang.String.format; +import static kotlinx.html.Gen_consumer_tagsKt.html; +import static kotlinx.html.Gen_tag_groupsKt.div; +import static kotlinx.html.Gen_tag_unionsKt.h1; +import static kotlinx.html.Gen_tag_unionsKt.img; +import static kotlinx.html.Gen_tags_hKt.body; +import static kotlinx.html.stream.StreamKt.createHTML; +import static net.pterodactylus.util.dom.KotlinXHtml.wrapper; /** * {@link net.pterodactylus.rhynodge.State} that can store an arbitrary amout of @@ -103,7 +107,7 @@ public class ComicState extends AbstractState implements Iterable { text.append("Comic Found: ").append(newComic.title()).append("\n\n"); for (Strip strip : newComic) { text.append("Image: ").append(strip.imageUrl()).append("\n"); - if (!StringUtils.isBlank(strip.comment())) { + if (!strip.comment().isBlank()) { text.append("Comment: ").append(strip.comment()).append("\n"); } } @@ -116,40 +120,34 @@ public class ComicState extends AbstractState implements Iterable { @Nullable @Override protected String htmlText() { - StringBuilder html = new StringBuilder(); - html.append(""); - List latestComics = new ArrayList<>(comics()); Collections.reverse(latestComics); - for (Comic newComic : latestComics.stream().filter(newComics::contains).toList()) { - generateComicHtml(html, newComic); - } - - int comicCount = 0; - for (Comic comic : latestComics) { - if (newComics.contains(comic)) { - continue; - } - generateComicHtml(html, comic); - if (++comicCount == 7) { - break; - } - } - - return html.append("").toString(); + var tagConsumer = createHTML(false, true); + return html(tagConsumer, null, wrapper(html -> { + body(html, null, wrapper(body -> { + for (Comic newComic : latestComics.stream().filter(newComics::contains).toList()) { + generateComicHtml(body, newComic); + } + for (Comic comic : latestComics.stream().filter(comic -> !newComics.contains(comic)).limit(7).toList()) { + generateComicHtml(body, comic); + } + })); + })); } - private void generateComicHtml(StringBuilder html, Comic comic) { - html.append("
").append("

").append(StringEscapeUtils.escapeHtml4(comic.title())).append("

\n"); - for (Strip strip : comic) { - html.append("
\"").append(StringEscapeUtils.escapeHtml4(strip.comment()));
\n"); - html.append("
").append(StringEscapeUtils.escapeHtml4(strip.comment())).append("
\n"); - } - html.append("
"); + private void generateComicHtml(FlowContent flowContent, Comic comic) { + div(flowContent, null, wrapper(div -> { + h1(div, null, wrapper(h1 -> h1.text(comic.title()))); + for (Strip strip : comic) { + div(div, null, wrapper(imageDiv -> { + img(imageDiv, strip.comment(), strip.imageUrl(), null, null, wrapper(img -> + img.getAttributes().put("title", strip.comment()) + )); + })); + div(div, null, wrapper(commentDiv -> commentDiv.text(strip.comment()))); + } + })); } /**