diff options
3 files changed, 102 insertions, 71 deletions
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java b/src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java index 3a02e4e..bbfafa2 100644 --- a/src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java +++ b/src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java @@ -6,11 +6,15 @@ import eu.mulk.mulkcms2.benki.lazychat.LazychatMessage; import eu.mulk.mulkcms2.benki.users.User; import eu.mulk.mulkcms2.benki.users.User_; import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import java.time.LocalDate; import java.time.OffsetDateTime; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.Objects; import java.util.Set; +import java.util.TimeZone; +import java.util.stream.Collectors; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import javax.json.bind.annotation.JsonbTransient; @@ -173,7 +177,9 @@ public abstract class Post extends PanacheEntityBase { public @CheckForNull final Integer nextCursor; public final List<T> posts; - private PostPage( + private static final TimeZone timeZone = TimeZone.getDefault(); + + public PostPage( @CheckForNull Integer c0, @CheckForNull Integer c1, @CheckForNull Integer c2, @@ -183,6 +189,26 @@ public abstract class Post extends PanacheEntityBase { this.nextCursor = c2; this.posts = resultList; } + + public class Day { + public final @CheckForNull LocalDate date; + public final List<T> posts; + + private Day(LocalDate date, List<T> posts) { + this.date = date; + this.posts = posts; + } + } + + public List<Day> days() { + return posts.stream() + .collect(Collectors.groupingBy(post -> post.date.toLocalDate())) + .entrySet() + .stream() + .map(x -> new Day(x.getKey(), x.getValue())) + .sorted(Comparator.comparing((Day day) -> day.date).reversed()) + .collect(Collectors.toUnmodifiableList()); + } } public static List<Post> findViewable( diff --git a/src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java b/src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java index 5f3c8b4..92e2f4e 100644 --- a/src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java +++ b/src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java @@ -13,6 +13,7 @@ import com.rometools.rome.io.FeedException; import com.rometools.rome.io.WireFeedOutput; import eu.mulk.mulkcms2.benki.accesscontrol.PageKey; import eu.mulk.mulkcms2.benki.accesscontrol.Role; +import eu.mulk.mulkcms2.benki.posts.Post.PostPage; import eu.mulk.mulkcms2.benki.users.User; import io.quarkus.qute.Template; import io.quarkus.qute.TemplateExtension; @@ -116,7 +117,7 @@ public abstract class PostResource { } return postList - .data("posts", q.posts) + .data("postDays", q.days()) .data("feedUri", feedUri) .data("pageTitle", pageTitle) .data("showBookmarkForm", showBookmarkForm()) @@ -150,7 +151,7 @@ public abstract class PostResource { } return postList - .data("posts", q.posts) + .data("postDays", q.days()) .data("feedUri", feedUri) .data("pageTitle", pageTitle) .data("showBookmarkForm", showBookmarkForm()) @@ -191,7 +192,7 @@ public abstract class PostResource { var post = getPostIfVisible(id); return postList - .data("posts", List.of(post)) + .data("postDays", new PostPage<>(null, null, null, List.of(post)).days()) .data("pageTitle", pageTitle) .data("showBookmarkForm", false) .data("showLazychatForm", false) diff --git a/src/main/resources/templates/benki/posts/postList.html b/src/main/resources/templates/benki/posts/postList.html index bc479f4..2911be4 100644 --- a/src/main/resources/templates/benki/posts/postList.html +++ b/src/main/resources/templates/benki/posts/postList.html @@ -1,4 +1,4 @@ -{@java.util.List<eu.mulk.mulkcms2.benki.posts.Post> posts} +{@java.util.List<eu.mulk.mulkcms2.benki.posts.Day> postDays} {@java.lang.String pageTitle} {@java.lang.Boolean showBookmarkForm} {@java.lang.Boolean hasPreviousPage} @@ -52,72 +52,76 @@ </div> <section id="main-content"> - {#for post in posts} - {#with post} - {#if post.isBookmark} - <article class="bookmark"> - <header> - <div class="bookmark-info"> - <a class="post-link" href="/posts/{post.id}"> - <time datetime="{date.htmlDateTime}">{date.humanDateTime}</time> - <span class="bookmark-owner">{owner.firstName} {owner.lastName}</span> - </a> - </div> - - <div class="bookmark-controls"> - {#if showBookmarkForm} - <button class="pure-button bookmark-edit-button">Edit</button> - {/if} - </div> - </header> - - <section class="bookmark-editor post-editor"> - {#if showBookmarkForm} - <elix-expandable-panel class="bookmark-editor-pane editor-pane"> - <mlk-bookmark-submission-form edited-id="{post.id}"></mlk-bookmark-submission-form> - </elix-expandable-panel> - {/if} - </section> - - <section class="bookmark-title-section"> - <a href="{uri}" class="bookmark-title"><h1 class="bookmark-title">⇢ {title}</h1></a> - </section> - - <section class="bookmark-description"> - {descriptionHtml.raw} - </section> - </article> - {#else} - <article class="lazychat-message"> - <header> - <div class="lazychat-message-info"> - <a class="post-link" href="/posts/{post.id}"> - <time datetime="{date.htmlDateTime}">{date.humanDateTime}</time> - <span class="lazychat-message-owner">{owner.firstName} {owner.lastName}</span> - </a> - </div> - - <div class="lazychat-message-controls"> - {#if showLazychatForm} - <button class="pure-button lazychat-edit-button">Edit</button> - {/if} - </div> - </header> - - <section class="lazychat-editor post-editor"> - {#if showLazychatForm} - <elix-expandable-panel class="lazychat-editor-pane editor-pane"> - <mlk-lazychat-submission-form edited-id="{post.id}"></mlk-lazychat-submission-form> - </elix-expandable-panel> - {/if} - </section> - - <section class="lazychat-message-content"> - {contentHtml.raw} - </section> - </article> - {/if} - {/with} + {#for day in postDays} + <div class="post-day"> + {#for post in day.posts} + {#with post} + {#if post.isBookmark} + <article class="bookmark"> + <header> + <div class="bookmark-info"> + <a class="post-link" href="/posts/{post.id}"> + <time datetime="{date.htmlDateTime}">{date.humanDateTime}</time> + <span class="bookmark-owner">{owner.firstName} {owner.lastName}</span> + </a> + </div> + + <div class="bookmark-controls"> + {#if showBookmarkForm} + <button class="pure-button bookmark-edit-button">Edit</button> + {/if} + </div> + </header> + + <section class="bookmark-editor post-editor"> + {#if showBookmarkForm} + <elix-expandable-panel class="bookmark-editor-pane editor-pane"> + <mlk-bookmark-submission-form edited-id="{post.id}"></mlk-bookmark-submission-form> + </elix-expandable-panel> + {/if} + </section> + + <section class="bookmark-title-section"> + <a href="{uri}" class="bookmark-title"><h1 class="bookmark-title">⇢ {title}</h1></a> + </section> + + <section class="bookmark-description"> + {descriptionHtml.raw} + </section> + </article> + {#else} + <article class="lazychat-message"> + <header> + <div class="lazychat-message-info"> + <a class="post-link" href="/posts/{post.id}"> + <time datetime="{date.htmlDateTime}">{date.humanDateTime}</time> + <span class="lazychat-message-owner">{owner.firstName} {owner.lastName}</span> + </a> + </div> + + <div class="lazychat-message-controls"> + {#if showLazychatForm} + <button class="pure-button lazychat-edit-button">Edit</button> + {/if} + </div> + </header> + + <section class="lazychat-editor post-editor"> + {#if showLazychatForm} + <elix-expandable-panel class="lazychat-editor-pane editor-pane"> + <mlk-lazychat-submission-form edited-id="{post.id}"></mlk-lazychat-submission-form> + </elix-expandable-panel> + {/if} + </section> + + <section class="lazychat-message-content"> + {contentHtml.raw} + </section> + </article> + {/if} + {/with} + {/for} + </div> {/for} </section> |