diff options
| author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2020-04-26 06:09:57 +0200 | 
|---|---|---|
| committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2020-04-26 06:12:43 +0200 | 
| commit | 1c2a8a70eed63a6b59dde22bdcb1d029e8485089 (patch) | |
| tree | c3df25d8f9ff64daaeb27b19530eb13fc9e0b6b3 /src/main | |
| parent | 95d29a00d3f37d64f5256cea4e7308f5a975c86c (diff) | |
KB54 Put posts in date buckets for templating.
Change-Id: Ic17b2dede722f5962a55b9c4d3b4663a71480e9c
Diffstat (limited to 'src/main')
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>  | 
