From 21cfcd5dfe623bca4015284a6bf8eb61a063aa7b Mon Sep 17 00:00:00 2001
From: Lucas Brandstaetter <lucas@brandstaetter.tech>
Date: Sat, 7 Dec 2024 03:21:29 +0100
Subject: [PATCH 1/4] Update plainui message templates

---
 .../plainui/personal_message_list.html.j2     | 251 +++++++++---------
 .../plainui/personal_message_send.html.j2     |  33 +--
 .../plainui/personal_message_show.html.j2     |  79 +++---
 src/plainui/locale/de/LC_MESSAGES/django.po   |  28 +-
 src/plainui/locale/en/LC_MESSAGES/django.po   |  28 +-
 5 files changed, 211 insertions(+), 208 deletions(-)

diff --git a/src/plainui/jinja2/plainui/personal_message_list.html.j2 b/src/plainui/jinja2/plainui/personal_message_list.html.j2
index 19ddd35f5..696407bf0 100644
--- a/src/plainui/jinja2/plainui/personal_message_list.html.j2
+++ b/src/plainui/jinja2/plainui/personal_message_list.html.j2
@@ -10,149 +10,146 @@
 {% block content %}
   {{ navMacro.top_nav(_("Personal Messages") ) }}
 
-  <div class="m-0 my-6 p-0 text-left">
-    <ul class="m-0 d-flex list-unstyled">
-      {% if sent_mode %}
-        <li class="py-2">
+  <div class="m-0 p-0">
+    <div class="d-flex">
+      <h2 class="hub-section-title flex-grow-1">
+        {% if not sent_mode %}
+          {{ _("Received Messages") }}
+        {% else %}
+          {{ _("Sent Messages") }}
+        {% endif %}
+      </h2>
+      <div class="m-0 float-end hub-tags">
+        {% if sent_mode %}
           <a role="button"
-             class="a a-bold"
+             class="a a-bold hub-tag hub-tag--secondary"
              href="{{ url('plainui:personal_message') }}">{{ _("Inbox") }}</a>
-        </li>
-      {% endif %}
-      {% if not sent_mode %}
-        <li class="py-2">
+        {% endif %}
+        {% if not sent_mode %}
           <a role="button"
-             class="a a-bold"
+             class="a a-bold hub-tag hub-tag--secondary"
              href="{{ url('plainui:personal_message_outbox') }}">{{ _("Outbox") }}</a>
-        </li>
-      {% endif %}
-      <li class="ms-auto py-2">
+        {% endif %}
+
         <a role="button"
-           class="btn"
+           class="a hub-tag hub-tag--secondary"
            href="{{ url('plainui:personal_message_send') }}">{{ _("New PM") }}</a>
-      </li>
-    </ul>
-  </div>
-
-  <div class="border p-0 mx-0 mb-11">
-    <h2 class="bg-secondary text-center text-dark m-0 px-3 py-1">
-      {% if not sent_mode %}
-        {{ _("Received Messages") }}
-      {% else %}
-        {{ _("Sent Messages") }}
-      {% endif %}
-    </h2>
-    <form method="post"
-          action="{{ url('plainui:personal_message_delete') }}"
-          class="p-3">
-      {{ csrf_input }}
-      <p class="mb-3 font-headings text-white text-right p-0">{{ msgs | length }} {{ _("messages_x_of_n") }} {{ total }}</p>
-      <ul class="list-unstyled mb-0">
-        {%- for msg in msgs %}
-          <li class="hub-tile-message card mb-5">
-            <article class="row no-gutters flex-nowrap">
-              <figure class="hub-tile-message__icon-col col mb-0">
-                <a class="hub-tile-message__icon-container text-white"
-                   href="{{ url('plainui:personal_message_show', msg_id=msg.id) }}">
-                  {% if not sent_mode %}
-                    {% if msg.has_responded %}
-                      <svg class="hub-tile-message__icon-flag bi bi-reply-fill"
-                           xmlns="http://www.w3.org/2000/svg"
-                           width="16"
-                           height="16"
-                           fill="currentColor"
-                           viewBox="0 0 16 16">
-                        <title>{{ _("messages_was_responded") }}</title>
-                        <path transform="translate(16), scale(-1, 1)" d="M9.079 11.9l4.568-3.281a.719.719 0 0 0 0-1.238L9.079 4.1A.716.716 0 0 0 8 4.719V6c-1.5 0-6 0-7 8 2.5-4.5 7-4 7-4v1.281c0 .56.606.898 1.079.62z" />
-                      </svg>
-                    {% endif %}
-                    {% if msg.was_read %}
-                      <svg class="hub-tile-message__icon bi bi-envelope-open"
-                           xmlns="http://www.w3.org/2000/svg"
-                           width="3.125rem"
-                           height="3.125rem"
-                           fill="currentColor"
-                           viewBox="0 0 16 16">
-                        <title>{{ _("messages_was_read") }}</title>
-                        <path d="M8.47 1.318a1 1 0 0 0-.94 0l-6 3.2A1 1 0 0 0 1 5.4v.818l5.724 3.465L8 8.917l1.276.766L15 6.218V5.4a1 1 0 0 0-.53-.882l-6-3.2zM15 7.388l-4.754 2.877L15 13.117v-5.73zm-.035 6.874L8 10.083l-6.965 4.18A1 1 0 0 0 2 15h12a1 1 0 0 0 .965-.738zM1 13.117l4.754-2.852L1 7.387v5.73zM7.059.435a2 2 0 0 1 1.882 0l6 3.2A2 2 0 0 1 16 5.4V14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V5.4a2 2 0 0 1 1.059-1.765l6-3.2z" />
-                      </svg>
+      </div>
+    </div>
+    {% if msgs %}
+      <form method="post"
+            action="{{ url('plainui:personal_message_delete') }}"
+            class="p-3">
+        {{ csrf_input }}
+        <ul class="hub-list mb-0">
+          {%- for msg in msgs %}
+            <li class="hub-list-item hub-grid-title-buttons">
+              <article class="row no-gutters flex-nowrap">
+                <figure class="hub-tile-message__icon-col col mb-0">
+                  <a class="hub-tile-message__icon-container text-white"
+                     href="{{ url('plainui:personal_message_show', msg_id=msg.id) }}">
+                    {% if not sent_mode %}
+                      {% if msg.has_responded %}
+                        <svg class="hub-tile-message__icon-flag bi bi-reply-fill"
+                             xmlns="http://www.w3.org/2000/svg"
+                             width="16"
+                             height="16"
+                             fill="currentColor"
+                             viewBox="0 0 16 16">
+                          <title>{{ _("messages_was_responded") }}</title>
+                          <path transform="translate(16), scale(-1, 1)" d="M9.079 11.9l4.568-3.281a.719.719 0 0 0 0-1.238L9.079 4.1A.716.716 0 0 0 8 4.719V6c-1.5 0-6 0-7 8 2.5-4.5 7-4 7-4v1.281c0 .56.606.898 1.079.62z" />
+                        </svg>
+                      {% endif %}
+                      {% if msg.was_read %}
+                        <svg class="hub-tile-message__icon bi bi-envelope-open"
+                             xmlns="http://www.w3.org/2000/svg"
+                             width="3.125rem"
+                             height="3.125rem"
+                             fill="currentColor"
+                             viewBox="0 0 16 16">
+                          <title>{{ _("messages_was_read") }}</title>
+                          <path d="M8.47 1.318a1 1 0 0 0-.94 0l-6 3.2A1 1 0 0 0 1 5.4v.818l5.724 3.465L8 8.917l1.276.766L15 6.218V5.4a1 1 0 0 0-.53-.882l-6-3.2zM15 7.388l-4.754 2.877L15 13.117v-5.73zm-.035 6.874L8 10.083l-6.965 4.18A1 1 0 0 0 2 15h12a1 1 0 0 0 .965-.738zM1 13.117l4.754-2.852L1 7.387v5.73zM7.059.435a2 2 0 0 1 1.882 0l6 3.2A2 2 0 0 1 16 5.4V14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V5.4a2 2 0 0 1 1.059-1.765l6-3.2z" />
+                        </svg>
+                      {% else %}
+                        <svg class="hub-tile-message__icon bi bi-envelope-fill"
+                             xmlns="http://www.w3.org/2000/svg"
+                             width="3.125rem"
+                             height="3.125rem"
+                             fill="currentColor"
+                             viewBox="0 0 16 16">
+                          <title>{{ _("messages_is_new") }}</title>
+                          <path d="M.05 3.555A2 2 0 0 1 2 2h12a2 2 0 0 1 1.95 1.555L8 8.414.05 3.555zM0 4.697v7.104l5.803-3.558L0 4.697zM6.761 8.83l-6.57 4.027A2 2 0 0 0 2 14h12a2 2 0 0 0 1.808-1.144l-6.57-4.027L8 9.586l-1.239-.757zm3.436-.586L16 11.801V4.697l-5.803 3.546z" />
+                        </svg>
+                      {% endif %}
                     {% else %}
-                      <svg class="hub-tile-message__icon bi bi-envelope-fill"
+                      <svg class="hub-tile-message__icon bi bi-mailbox"
                            xmlns="http://www.w3.org/2000/svg"
                            width="3.125rem"
                            height="3.125rem"
                            fill="currentColor"
                            viewBox="0 0 16 16">
-                        <title>{{ _("messages_is_new") }}</title>
-                        <path d="M.05 3.555A2 2 0 0 1 2 2h12a2 2 0 0 1 1.95 1.555L8 8.414.05 3.555zM0 4.697v7.104l5.803-3.558L0 4.697zM6.761 8.83l-6.57 4.027A2 2 0 0 0 2 14h12a2 2 0 0 0 1.808-1.144l-6.57-4.027L8 9.586l-1.239-.757zm3.436-.586L16 11.801V4.697l-5.803 3.546z" />
+                        <title>{{ _("messages_was_sent") }}</title>
+                        <path fill-rule="evenodd" d="M6 8a.5.5 0 0 0 .5.5h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L12.293 7.5H6.5A.5.5 0 0 0 6 8zm-2.5 7a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5z" />
                       </svg>
                     {% endif %}
-                  {% else %}
-                    <svg class="hub-tile-message__icon bi bi-mailbox"
-                         xmlns="http://www.w3.org/2000/svg"
-                         width="3.125rem"
-                         height="3.125rem"
-                         fill="currentColor"
-                         viewBox="0 0 16 16">
-                      <title>{{ _("messages_was_sent") }}</title>
-                      <path fill-rule="evenodd" d="M6 8a.5.5 0 0 0 .5.5h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L12.293 7.5H6.5A.5.5 0 0 0 6 8zm-2.5 7a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5z" />
-                    </svg>
-                  {% endif %}
-                </a>
-              </figure>
-              <section class="col pt-3 px-2">
+                  </a>
+                </figure>
+                <section class="col pt-3 px-2">
 
-                {% set recipient = msg.sender.display_name if not sent_mode else msg.recipient.display_name %}
-                {% set recipient_pronouns = msg.sender.pronouns if not sent_mode else msg.recipient.pronouns %}
-                {% set recipient_slug = msg.sender.slug if not sent_mode else msg.recipient.slug %}
+                  {% set recipient = msg.sender.display_name if not sent_mode else msg.recipient.display_name %}
+                  {% set recipient_pronouns = msg.sender.pronouns if not sent_mode else msg.recipient.pronouns %}
+                  {% set recipient_slug = msg.sender.slug if not sent_mode else msg.recipient.slug %}
 
-                <a class="text-white"
-                   href="{{ url('plainui:personal_message_show', msg_id=msg.id) }}">
-                  <p class="px-2 card-title h4 text-white">{{ msg.subject }}</p>
-                </a>
+                  <a class="text-white"
+                     href="{{ url('plainui:personal_message_show', msg_id=msg.id) }}">
+                    <p class="card-title h4 text-white">{{ msg.subject }}</p>
+                  </a>
 
-                <footer class="card-footer d-flex align-items-center bg-transparent text-white font-sans-serif fs-medium">
-                  <a class="pe-1 a a-bold"
-                     href="{{ url('plainui:user', user_slug=recipient_slug) }}">{{ recipient }},</a>
-                  <time datetime="{{ msg.timestamp }}">{{ msg.timestamp | strftime }}</time>
-                  <div class="d-inline-flex ms-auto">
-                    <a class="me-2 btn-icon-big btn btn-transparent"
-                       title="{{ _('read') }}"
-                       href="{{ url('plainui:personal_message_show', msg_id=msg.id) }}">
-                      <svg xmlns="http://www.w3.org/2000/svg"
-                           width="16"
-                           height="16"
-                           fill="currentColor"
-                           class="bi bi-chevron-double-right"
-                           viewBox="0 0 16 16">
-                        <path fill-rule="evenodd" d="M3.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L9.293 8 3.646 2.354a.5.5 0 0 1 0-.708z" />
-                        <path fill-rule="evenodd" d="M7.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L13.293 8 7.646 2.354a.5.5 0 0 1 0-.708z" />
-                      </svg>
-                    </a>
-                    <button class="me-2 btn-icon-big btn btn-transparent"
-                            type="submit"
-                            name="id"
-                            value="{{ msg.id }}"
-                            title="{{ _('messages_delete') }}">
-                      <svg xmlns="http://www.w3.org/2000/svg"
-                           width="16"
-                           height="16"
-                           fill="currentColor"
-                           class="bi bi-trash"
-                           viewBox="0 0 16 16">
-                        <path d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z" />
-                        <path fill-rule="evenodd" d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4L4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z" />
-                      </svg>
-                    </button>
-                    {% if not sent_mode %}{{ fbtns.report(report_url=msg.id, kind="pn", title=_("report this message") ) }}{% endif %}
-                  </div>
-                </footer>
-              </section>
-            </article>
-          </li>
-        {%- endfor %}
-      </ul>
-      <p class="font-headings text-white text-right p-0">{{ msgs | length }} {{ _("messages_x_of_n") }} {{ total }}</p>
-    </form>
+                  <footer class="card-footer d-flex align-items-center bg-transparent text-white font-sans-serif fs-medium">
+                    <a class="pe-1 a a-bold"
+                       href="{{ url('plainui:user', user_slug=recipient_slug) }}">{{ recipient }},</a>
+                    <time datetime="{{ msg.timestamp }}">{{ msg.timestamp | strftime }}</time>
+                    <div class="d-inline-flex ms-auto">
+                      <a class="me-2 btn-icon-big btn btn-transparent"
+                         title="{{ _('read') }}"
+                         href="{{ url('plainui:personal_message_show', msg_id=msg.id) }}">
+                        <svg xmlns="http://www.w3.org/2000/svg"
+                             width="16"
+                             height="16"
+                             fill="currentColor"
+                             class="bi bi-chevron-double-right"
+                             viewBox="0 0 16 16">
+                          <path fill-rule="evenodd" d="M3.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L9.293 8 3.646 2.354a.5.5 0 0 1 0-.708z" />
+                          <path fill-rule="evenodd" d="M7.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L13.293 8 7.646 2.354a.5.5 0 0 1 0-.708z" />
+                        </svg>
+                      </a>
+                      <button class="me-2 btn-icon-big btn btn-transparent"
+                              type="submit"
+                              name="id"
+                              value="{{ msg.id }}"
+                              title="{{ _('messages_delete') }}">
+                        <svg xmlns="http://www.w3.org/2000/svg"
+                             width="16"
+                             height="16"
+                             fill="currentColor"
+                             class="bi bi-trash"
+                             viewBox="0 0 16 16">
+                          <path d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z" />
+                          <path fill-rule="evenodd" d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4L4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z" />
+                        </svg>
+                      </button>
+                      {% if not sent_mode %}{{ fbtns.report(report_url=msg.id, kind="pn", title=_("report this message") ) }}{% endif %}
+                    </div>
+                  </footer>
+                </section>
+              </article>
+            </li>
+          {%- endfor %}
+        </ul>
+        <p class="font-headings text-white text-right p-0">{{ msgs | length }} {{ _("messages_x_of_n") }} {{ total }}</p>
+      </form>
+    {% else %}
+      <p class="hub-empty-section">{{ _("No entries available.") }}</p>
+    {% endif %}
   </div>
 {% endblock content %}
diff --git a/src/plainui/jinja2/plainui/personal_message_send.html.j2 b/src/plainui/jinja2/plainui/personal_message_send.html.j2
index e0c6eb5d5..1877be6c2 100644
--- a/src/plainui/jinja2/plainui/personal_message_send.html.j2
+++ b/src/plainui/jinja2/plainui/personal_message_send.html.j2
@@ -20,23 +20,26 @@
     </ol>
   </nav>
 
-  <form method="post"
-        class="border p-0 mx-auto {% if form.errors %}border-danger{% endif %}">
-    <h2 class="bg-secondary text-center text-dark m-0 px-3 py-1">{{ _("new message") }}</h2>
-    <div class="p-3">
-      {{ csrf_input }}
+  <form method="post" class="{% if form.errors %}border-danger{% endif %}">
+    <div class="m-0 p-0">
+      <h2 class="hub-section-title">{{ _("New Personal Message") }}</h2>
+      <div class="hub-card">
+        <div class="p-3">
+          {{ csrf_input }}
 
-      {{ form_elements.errors(form) }}
-      {{ form_elements.hidden(form, 'in_reply_to') }}
-      {{ form_elements.text(form, 'recipient') }}
-      {{ form_elements.text(form, 'subject') }}
-      {{ form_elements.textarea(form, 'body') }}
+          {{ form_elements.errors(form) }}
+          {{ form_elements.hidden(form, 'in_reply_to') }}
+          {{ form_elements.text(form, 'recipient') }}
+          {{ form_elements.text(form, 'subject') }}
+          {{ form_elements.textarea(form, 'body') }}
 
-      <ul class="d-flex justify-content-center list-unstyled mb-0">
-        <li class="m-2">
-          <button type="submit" class="btn btn-primary">{{ _("Send") }}</button>
-        </li>
-      </ul>
+          <ul class="d-flex justify-content-center list-unstyled mb-0">
+            <li class="m-2">
+              <button type="submit" class="btn btn-primary">{{ _("Send") }}</button>
+            </li>
+          </ul>
+        </div>
+      </div>
     </div>
   </form>
 
diff --git a/src/plainui/jinja2/plainui/personal_message_show.html.j2 b/src/plainui/jinja2/plainui/personal_message_show.html.j2
index ae39db88d..cfdce134f 100644
--- a/src/plainui/jinja2/plainui/personal_message_show.html.j2
+++ b/src/plainui/jinja2/plainui/personal_message_show.html.j2
@@ -23,44 +23,47 @@
       </ol>
     </nav>
 
-    <ul class="mb-0 my-6 d-flex list-unstyled">
-      <li class="me-2 py-2">
-        <form method="post" action="{{ url('plainui:personal_message_delete') }}">
-          {{ csrf_input }}
-          <button class="btn btn-dark"
-                  type="submit"
-                  name="id"
-                  value="{{ msg.id }}"
-                  title="{{ _('messages_delete') }}">{{ _("Delete") }}</button>
-        </form>
-      </li>
-
-      {% if user.id == msg.recipient.id %}
-        <li class="me-2 py-2">
-          <a class="btn"
-             href="{{ url('plainui:personal_message_send_to', recipient=msg.sender.username) ~ '?in_reply_to=' ~ msg.id | urlencode ~ '&subject=AW: ' ~ msg.subject | truncate(100) | urlencode }}">
-            {{ _("Reply") }}
-          </a>
-        </li>
-      {% endif %}
-    </ul>
-
-    <div class="d-flex flex-row flex-wrap mt-6 bg-secondary">
-      <h2 class="bg-secondary text-center text-dark m-0 px-3 py-1">{{ msg.subject }}</h2>
-      <p class="d-block text-transform-none font-sans-serif ml-auto align-self-center p-2">
-        {% if msg.sender %}
-          <a class="m-0 px-3 py-1 a a-bold text-dark"
-             href="{{ url('plainui:user', user_slug=msg.sender.slug) }}">{{ msg.sender.display_name }}</a>
-        {% else %}
-          <span class="m-0 px-3 py-1 text-dark">{{ _("disabled user") }}</span>
-        {% endif %}
-        <time datetime="{{ msg.timestamp }}"
-              class="text-dark font-sans-serif fw-normal m-0 px-3 py-1">
-          {{ msg.timestamp | strftime }}
-        </time>
-      </p>
+    <div class="p-0 m-0">
+      <div class="hub-card">
+        <div class="d-flex">
+          <h2 class="hub-head-main flex-grow-1">{{ msg.subject }}</h2>
+          <div class="m-0 float-end hub-tags">
+            {% if user.id == msg.recipient.id %}
+              <a class="a hub-tag hub-tag--primary"
+                 href="{{ url('plainui:personal_message_send_to', recipient=msg.sender.username) ~ '?in_reply_to=' ~ msg.id | urlencode ~ '&subject=AW: ' ~ msg.subject | truncate(100) | urlencode }}">
+                {{ _("Reply") }}
+              </a>
+              <a class="a hub-tag text-bg-warning"
+                 href="{{ build_report_url(request, reported_url=msg.id, kind='pn', next_url=request.url) }}">
+                {{ _("Report") }}
+              </a>
+            {% endif %}
+            <form method="post" action="{{ url('plainui:personal_message_delete') }}">
+              {{ csrf_input }}
+              <button class="a hub-tag hub-tag--danger"
+                      type="submit"
+                      name="id"
+                      value="{{ msg.id }}"
+                      title="{{ _('messages_delete') }}">{{ _("Delete") }}</button>
+            </form>
+          </div>
+        </div>
+        <div class="card-title pe-4">
+          <p>
+            {% if msg.sender %}
+              <a class="a a-bold"
+                 href="{{ url('plainui:user', user_slug=msg.sender.slug) }}">{{ msg.sender.display_name }}</a>
+            {% else %}
+              <span class="m-0 ps-3">{{ _("disabled user") }}</span>
+            {% endif %}
+            <time datetime="{{ msg.timestamp }}"
+                  class="font-sans-serif fw-normal m-0 ps-3">
+              {{ msg.timestamp | strftime }}
+            </time>
+          </p>
+        </div>
+        <div class="card-body">{{ markdown(msg_body, border=False) }}</div>
+      </div>
     </div>
-
-    {{ markdown(msg_body) }}
   </article>
 {% endblock content %}
diff --git a/src/plainui/locale/de/LC_MESSAGES/django.po b/src/plainui/locale/de/LC_MESSAGES/django.po
index 1c39633ed..c984dbc03 100644
--- a/src/plainui/locale/de/LC_MESSAGES/django.po
+++ b/src/plainui/locale/de/LC_MESSAGES/django.po
@@ -533,6 +533,12 @@ msgstr "Wenn du keine E-Mail erhältst, vergewissere dich bitte, dass du die Adr
 msgid "Personal Messages"
 msgstr "Persönliche Nachrichten"
 
+msgid "Received Messages"
+msgstr "Empfangene Nachrichten"
+
+msgid "Sent Messages"
+msgstr "Gesendete Nachrichten"
+
 msgid "Inbox"
 msgstr "Posteingang"
 
@@ -542,15 +548,6 @@ msgstr "Postausgang"
 msgid "New PM"
 msgstr "Neue DN"
 
-msgid "Received Messages"
-msgstr "Empfangene Nachrichten"
-
-msgid "Sent Messages"
-msgstr "Gesendete Nachrichten"
-
-msgid "messages_x_of_n"
-msgstr "von"
-
 msgid "messages_was_responded"
 msgstr "geantwortet"
 
@@ -569,11 +566,14 @@ msgstr "lesen"
 msgid "messages_delete"
 msgstr "löschen"
 
+msgid "messages_x_of_n"
+msgstr "von"
+
 msgid "Personal Messages - Send"
 msgstr "Persönliche Nachrichten - Senden"
 
-msgid "new message"
-msgstr "Neue Nachricht"
+msgid "New Personal Message"
+msgstr "Neue Persönliche Nachricht"
 
 msgid "Send"
 msgstr "senden"
@@ -584,6 +584,9 @@ msgstr "Persönliche Nachricht"
 msgid "Reply"
 msgstr "Antwort"
 
+msgid "Report"
+msgstr "Melden"
+
 msgid "disabled user"
 msgstr "deaktivierter User"
 
@@ -741,9 +744,6 @@ msgstr "Die angegebene Version der Seite existiert nicht."
 msgid "Global History"
 msgstr "Letzte Änderungen"
 
-msgid "Report"
-msgstr "Melden"
-
 msgid "History"
 msgstr "Historie"
 
diff --git a/src/plainui/locale/en/LC_MESSAGES/django.po b/src/plainui/locale/en/LC_MESSAGES/django.po
index 59458723b..29627425a 100644
--- a/src/plainui/locale/en/LC_MESSAGES/django.po
+++ b/src/plainui/locale/en/LC_MESSAGES/django.po
@@ -533,6 +533,12 @@ msgstr ""
 msgid "Personal Messages"
 msgstr ""
 
+msgid "Received Messages"
+msgstr "Received Messages"
+
+msgid "Sent Messages"
+msgstr "Sent Messages"
+
 msgid "Inbox"
 msgstr ""
 
@@ -542,15 +548,6 @@ msgstr ""
 msgid "New PM"
 msgstr "New DM"
 
-msgid "Received Messages"
-msgstr "Received Messages"
-
-msgid "Sent Messages"
-msgstr "Sent Messages"
-
-msgid "messages_x_of_n"
-msgstr "of"
-
 msgid "messages_was_responded"
 msgstr "responded"
 
@@ -569,11 +566,14 @@ msgstr "read"
 msgid "messages_delete"
 msgstr "Delete"
 
+msgid "messages_x_of_n"
+msgstr "of"
+
 msgid "Personal Messages - Send"
 msgstr ""
 
-msgid "new message"
-msgstr "new message"
+msgid "New Personal Message"
+msgstr ""
 
 msgid "Send"
 msgstr ""
@@ -584,6 +584,9 @@ msgstr ""
 msgid "Reply"
 msgstr ""
 
+msgid "Report"
+msgstr ""
+
 msgid "disabled user"
 msgstr ""
 
@@ -741,9 +744,6 @@ msgstr ""
 msgid "Global History"
 msgstr ""
 
-msgid "Report"
-msgstr ""
-
 msgid "History"
 msgstr ""
 
-- 
GitLab


From 468897086504c7cc04ffdee2e5b99c1dd9a2b63b Mon Sep 17 00:00:00 2001
From: Lucas Brandstaetter <lucas@brandstaetter.tech>
Date: Sat, 7 Dec 2024 03:38:59 +0100
Subject: [PATCH 2/4] Add render of original message to reply form

---
 .../jinja2/plainui/personal_message_send.html.j2      | 11 ++++++++++-
 src/plainui/views/personal_messages.py                |  9 +++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/plainui/jinja2/plainui/personal_message_send.html.j2 b/src/plainui/jinja2/plainui/personal_message_send.html.j2
index 1877be6c2..309837476 100644
--- a/src/plainui/jinja2/plainui/personal_message_send.html.j2
+++ b/src/plainui/jinja2/plainui/personal_message_send.html.j2
@@ -1,5 +1,6 @@
 {% import "plainui/components/form_elements.html.j2" as form_elements %}
 {% import "plainui/components/nav.html.j2" as navMacro with context %}
+{% from "plainui/components/markdown.html.j2" import markdown %}
 
 {% extends "plainui/base.html.j2" %}
 
@@ -42,6 +43,14 @@
       </div>
     </div>
   </form>
-
+  {% if in_reply_to %}
+    <hr class="hub-spacer">
+    <div class="p-0 m-0">
+      <div class="hub-card">
+        <h2 class="hub-head-main">{{ in_reply_to.subject }}</h2>
+        <div class="card-body">{{ markdown(in_reply_to_body, border=False) }}</div>
+      </div>
+    </div>
+  {% endif %}
   <hr class="hub-spacer">
 {% endblock content %}
diff --git a/src/plainui/views/personal_messages.py b/src/plainui/views/personal_messages.py
index 195d38beb..0806dfd57 100644
--- a/src/plainui/views/personal_messages.py
+++ b/src/plainui/views/personal_messages.py
@@ -5,6 +5,8 @@ __all__ = (
     'PersonalMessageShowView',
 )
 
+import contextlib
+
 from django_ratelimit.decorators import ratelimit
 
 from django.contrib import messages
@@ -67,10 +69,17 @@ class PersonalMessageSendView(ConferenceRequiredMixin, FormView):
     form_class = NewDirectMessageForm
 
     def get_context_data(self, **kwargs):
+        in_reply_to_uuid = self.request.POST.get('in_reply_to', self.request.GET.get('in_reply_to', ''))
+        in_reply_to = None
+        if in_reply_to_uuid:
+            with contextlib.suppress(DirectMessage.DoesNotExist):
+                in_reply_to = DirectMessage.objects.filter(recipient=self.request.user, deleted_by_recipient=False).get(id=in_reply_to_uuid)
         return {
             **super().get_context_data(**kwargs),
             'conf': self.conf,
             'disable_share': True,
+            'in_reply_to': in_reply_to,
+            'in_reply_to_body': render_markdown(self.conf, in_reply_to.body) if in_reply_to else '',
         }
 
     def get_initial(self):
-- 
GitLab


From f45d690c63d5e49e7cb6722eb376a0f457c8d3c1 Mon Sep 17 00:00:00 2001
From: Lucas Brandstaetter <lucas@brandstaetter.tech>
Date: Sat, 7 Dec 2024 04:01:30 +0100
Subject: [PATCH 3/4] Add response information to personal messages view

Fixes #262
---
 src/plainui/jinja2/plainui/personal_message_show.html.j2 | 1 +
 src/plainui/locale/de/LC_MESSAGES/django.po              | 3 +++
 src/plainui/locale/en/LC_MESSAGES/django.po              | 3 +++
 3 files changed, 7 insertions(+)

diff --git a/src/plainui/jinja2/plainui/personal_message_show.html.j2 b/src/plainui/jinja2/plainui/personal_message_show.html.j2
index cfdce134f..f3aca15e4 100644
--- a/src/plainui/jinja2/plainui/personal_message_show.html.j2
+++ b/src/plainui/jinja2/plainui/personal_message_show.html.j2
@@ -60,6 +60,7 @@
                   class="font-sans-serif fw-normal m-0 ps-3">
               {{ msg.timestamp | strftime }}
             </time>
+            {% if msg.has_responded %}<span class="m-0 ps-3">{{ _("you have responded") }}</span>{% endif %}
           </p>
         </div>
         <div class="card-body">{{ markdown(msg_body, border=False) }}</div>
diff --git a/src/plainui/locale/de/LC_MESSAGES/django.po b/src/plainui/locale/de/LC_MESSAGES/django.po
index c984dbc03..e96ccbe92 100644
--- a/src/plainui/locale/de/LC_MESSAGES/django.po
+++ b/src/plainui/locale/de/LC_MESSAGES/django.po
@@ -590,6 +590,9 @@ msgstr "Melden"
 msgid "disabled user"
 msgstr "deaktivierter User"
 
+msgid "you have responded"
+msgstr "du hast geantwortet"
+
 msgid "last login"
 msgstr "Letzter Login"
 
diff --git a/src/plainui/locale/en/LC_MESSAGES/django.po b/src/plainui/locale/en/LC_MESSAGES/django.po
index 29627425a..d81ef5900 100644
--- a/src/plainui/locale/en/LC_MESSAGES/django.po
+++ b/src/plainui/locale/en/LC_MESSAGES/django.po
@@ -590,6 +590,9 @@ msgstr ""
 msgid "disabled user"
 msgstr ""
 
+msgid "you have responded"
+msgstr ""
+
 msgid "last login"
 msgstr ""
 
-- 
GitLab


From e4955b4f7f06c1d258d9829a56ba080d67e813c1 Mon Sep 17 00:00:00 2001
From: weeman <weeman@frankfurt.ccc.de>
Date: Mon, 16 Dec 2024 21:28:34 +0100
Subject: [PATCH 4/4] =?UTF-8?q?=C3=9Cberarbeite=20Nachrichten=20UI?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../plainui/personal_message_list.html.j2     |  71 ++++++------
 .../plainui/personal_message_send.html.j2     |  67 ++++++------
 .../plainui/personal_message_show.html.j2     | 102 +++++++++---------
 src/plainui/locale/de/LC_MESSAGES/django.po   |  24 ++---
 src/plainui/locale/en/LC_MESSAGES/django.po   |  20 ++--
 5 files changed, 130 insertions(+), 154 deletions(-)

diff --git a/src/plainui/jinja2/plainui/personal_message_list.html.j2 b/src/plainui/jinja2/plainui/personal_message_list.html.j2
index 696407bf0..763cfeee4 100644
--- a/src/plainui/jinja2/plainui/personal_message_list.html.j2
+++ b/src/plainui/jinja2/plainui/personal_message_list.html.j2
@@ -1,5 +1,6 @@
 {% import "plainui/components/function_btns.html.j2" as fbtns with context %}
 {% import "plainui/components/nav.html.j2" as navMacro with context %}
+{% import "plainui/components/tagbox.html.j2" as tagboxMacro %}
 
 {% extends "plainui/base.html.j2" %}
 
@@ -10,42 +11,31 @@
 {% block content %}
   {{ navMacro.top_nav(_("Personal Messages") ) }}
 
-  <div class="m-0 p-0">
+  <div>
     <div class="d-flex">
-      <h2 class="hub-section-title flex-grow-1">
-        {% if not sent_mode %}
-          {{ _("Received Messages") }}
-        {% else %}
-          {{ _("Sent Messages") }}
-        {% endif %}
-      </h2>
-      <div class="m-0 float-end hub-tags">
-        {% if sent_mode %}
-          <a role="button"
-             class="a a-bold hub-tag hub-tag--secondary"
+      <ul class="nav nav-pills mb-3">
+        <li class="nav-item">
+          <a class="nav-link {% if not sent_mode %}active{% endif %}"
              href="{{ url('plainui:personal_message') }}">{{ _("Inbox") }}</a>
-        {% endif %}
-        {% if not sent_mode %}
-          <a role="button"
-             class="a a-bold hub-tag hub-tag--secondary"
+        </li>
+        <li class="nav-item">
+          <a class="nav-link {% if sent_mode %}active{% endif %}"
              href="{{ url('plainui:personal_message_outbox') }}">{{ _("Outbox") }}</a>
-        {% endif %}
+        </li>
+        <li class="nav-item">
+          <a class="nav-link" href="{{ url('plainui:personal_message_send') }}">{{ _("New PM") }}</a>
+        </li>
+      </ul>
 
-        <a role="button"
-           class="a hub-tag hub-tag--secondary"
-           href="{{ url('plainui:personal_message_send') }}">{{ _("New PM") }}</a>
-      </div>
     </div>
     {% if msgs %}
-      <form method="post"
-            action="{{ url('plainui:personal_message_delete') }}"
-            class="p-3">
+      <form method="post" action="{{ url('plainui:personal_message_delete') }}">
         {{ csrf_input }}
-        <ul class="hub-list mb-0">
+        <ul class="hub-list">
           {%- for msg in msgs %}
             <li class="hub-list-item hub-grid-title-buttons">
-              <article class="row no-gutters flex-nowrap">
-                <figure class="hub-tile-message__icon-col col mb-0">
+              <article class="row flex-column flex-lg-row no-gutters flex-nowrap">
+                <figure class="hub-tile-message__icon-col col mb-0 d-none d-lg-flex">
                   <a class="hub-tile-message__icon-container text-white"
                      href="{{ url('plainui:personal_message_show', msg_id=msg.id) }}">
                     {% if not sent_mode %}
@@ -94,22 +84,23 @@
                     {% endif %}
                   </a>
                 </figure>
-                <section class="col pt-3 px-2">
-
-                  {% set recipient = msg.sender.display_name if not sent_mode else msg.recipient.display_name %}
-                  {% set recipient_pronouns = msg.sender.pronouns if not sent_mode else msg.recipient.pronouns %}
-                  {% set recipient_slug = msg.sender.slug if not sent_mode else msg.recipient.slug %}
-
-                  <a class="text-white"
+                <section class="col">
+                  <a class="text-white d-block mb-2 mb-lg-0"
                      href="{{ url('plainui:personal_message_show', msg_id=msg.id) }}">
                     <p class="card-title h4 text-white">{{ msg.subject }}</p>
                   </a>
 
-                  <footer class="card-footer d-flex align-items-center bg-transparent text-white font-sans-serif fs-medium">
-                    <a class="pe-1 a a-bold"
-                       href="{{ url('plainui:user', user_slug=recipient_slug) }}">{{ recipient }},</a>
-                    <time datetime="{{ msg.timestamp }}">{{ msg.timestamp | strftime }}</time>
-                    <div class="d-inline-flex ms-auto">
+                  <footer class="card-footer d-flex flex-column flex-lg-row align-items-lg-center bg-transparent text-white font-sans-serif fs-medium gap-2">
+                    <div class="d-md-flex">
+                      <div class="me-2">
+                        {{ tagboxMacro.user(msg.sender.get_display_name() ,
+                        link=url('plainui:user', user_slug=msg.sender.slug)
+                        ) }}
+                      </div>
+
+                      <time datetime="{{ msg.timestamp }}">{{ msg.timestamp | strftime }}</time>
+                    </div>
+                    <div class="d-inline-flex ms-lg-auto">
                       <a class="me-2 btn-icon-big btn btn-transparent"
                          title="{{ _('read') }}"
                          href="{{ url('plainui:personal_message_show', msg_id=msg.id) }}">
@@ -146,7 +137,7 @@
             </li>
           {%- endfor %}
         </ul>
-        <p class="font-headings text-white text-right p-0">{{ msgs | length }} {{ _("messages_x_of_n") }} {{ total }}</p>
+        <p class="font-headings text-white text-end pt-2">{{ msgs | length }} {{ _("messages_x_of_n") }} {{ total }}</p>
       </form>
     {% else %}
       <p class="hub-empty-section">{{ _("No entries available.") }}</p>
diff --git a/src/plainui/jinja2/plainui/personal_message_send.html.j2 b/src/plainui/jinja2/plainui/personal_message_send.html.j2
index 309837476..80de8b428 100644
--- a/src/plainui/jinja2/plainui/personal_message_send.html.j2
+++ b/src/plainui/jinja2/plainui/personal_message_send.html.j2
@@ -9,48 +9,47 @@
 {% endblock title %}
 
 {% block content %}
-  {{ navMacro.top_nav(_("Send Personal Message") , has_breadcrumbs=True) }}
-  <nav aria-label="breadcrumb">
-    <ol class="breadcrumb hub-breadcrumbs">
-      <li class="breadcrumb-item">
-        <a href="{{ url('plainui:index') }}">{{ conf.name }}</a>
-      </li>
-      <li class="breadcrumb-item">
-        <a href="{{ url('plainui:personal_message') }}">{{ _("Personal Messages") }}</a>
-      </li>
-    </ol>
-  </nav>
+  {{ navMacro.top_nav(_("Personal Messages") ) }}
+
+  <ul class="nav nav-pills mb-3">
+    <li class="nav-item">
+      <a class="nav-link" href="{{ url('plainui:personal_message') }}">{{ _("Inbox") }}</a>
+    </li>
+    <li class="nav-item">
+      <a class="nav-link" href="{{ url('plainui:personal_message_outbox') }}">{{ _("Outbox") }}</a>
+    </li>
+    <li class="nav-item">
+      <a class="nav-link active"
+         href="{{ url('plainui:personal_message_send') }}">{{ _("New PM") }}</a>
+    </li>
+  </ul>
 
   <form method="post" class="{% if form.errors %}border-danger{% endif %}">
-    <div class="m-0 p-0">
+    <div class="hub-card">
       <h2 class="hub-section-title">{{ _("New Personal Message") }}</h2>
-      <div class="hub-card">
-        <div class="p-3">
-          {{ csrf_input }}
-
-          {{ form_elements.errors(form) }}
-          {{ form_elements.hidden(form, 'in_reply_to') }}
-          {{ form_elements.text(form, 'recipient') }}
-          {{ form_elements.text(form, 'subject') }}
-          {{ form_elements.textarea(form, 'body') }}
-
-          <ul class="d-flex justify-content-center list-unstyled mb-0">
-            <li class="m-2">
-              <button type="submit" class="btn btn-primary">{{ _("Send") }}</button>
-            </li>
-          </ul>
-        </div>
+
+      {{ csrf_input }}
+
+      {{ form_elements.errors(form) }}
+      {{ form_elements.hidden(form, 'in_reply_to') }}
+      {{ form_elements.text(form, 'recipient') }}
+      {{ form_elements.text(form, 'subject') }}
+      {{ form_elements.textarea(form, 'body') }}
+
+      <div class="mt-3">
+        <button type="submit" class="btn btn-primary">{{ _("Send") }}</button>
       </div>
     </div>
   </form>
   {% if in_reply_to %}
     <hr class="hub-spacer">
-    <div class="p-0 m-0">
-      <div class="hub-card">
-        <h2 class="hub-head-main">{{ in_reply_to.subject }}</h2>
-        <div class="card-body">{{ markdown(in_reply_to_body, border=False) }}</div>
-      </div>
+    <div class="hub-card">
+      <h2 class="hub-section-title">
+        <small>{{ _("In Reply To") }}</small>
+        <br>
+        {{ in_reply_to.subject }}
+      </h2>
+      <div class="card-body">{{ markdown(in_reply_to_body, border=False) }}</div>
     </div>
   {% endif %}
-  <hr class="hub-spacer">
 {% endblock content %}
diff --git a/src/plainui/jinja2/plainui/personal_message_show.html.j2 b/src/plainui/jinja2/plainui/personal_message_show.html.j2
index f3aca15e4..f7b93563d 100644
--- a/src/plainui/jinja2/plainui/personal_message_show.html.j2
+++ b/src/plainui/jinja2/plainui/personal_message_show.html.j2
@@ -1,6 +1,7 @@
 {% import "plainui/components/function_btns.html.j2" as fbtns with context %}
 {% import "plainui/components/nav.html.j2" as navMacro with context %}
 {% from "plainui/components/markdown.html.j2" import markdown %}
+{% import "plainui/components/tagbox.html.j2" as tagboxMacro %}
 
 {% extends "plainui/base.html.j2" %}
 
@@ -9,61 +10,58 @@
 {% endblock title %}
 
 {% block content %}
-  {{ navMacro.top_nav(_("Message from %(user)s", user=msg.sender.display_name) , has_breadcrumbs=True) }}
+  {{ navMacro.top_nav(_("Message from %(user)s", user=msg.sender.display_name) ) }}
 
   <article class="mb-11">
-    <nav aria-label="breadcrumb">
-      <ol class="breadcrumb hub-breadcrumbs">
-        <li class="breadcrumb-item">
-          <a href="{{ url('plainui:index') }}">{{ conf.name }}</a>
-        </li>
-        <li class="breadcrumb-item">
-          <a href="{{ url('plainui:personal_message') }}">{{ _("Personal Messages") }}</a>
-        </li>
-      </ol>
-    </nav>
+    <ul class="nav nav-pills mb-3">
+      <li class="nav-item">
+        <a class="nav-link" href="{{ url('plainui:personal_message') }}">{{ _("Inbox") }}</a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="{{ url('plainui:personal_message_outbox') }}">{{ _("Outbox") }}</a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="{{ url('plainui:personal_message_send') }}">{{ _("New PM") }}</a>
+      </li>
+    </ul>
 
-    <div class="p-0 m-0">
-      <div class="hub-card">
-        <div class="d-flex">
-          <h2 class="hub-head-main flex-grow-1">{{ msg.subject }}</h2>
-          <div class="m-0 float-end hub-tags">
-            {% if user.id == msg.recipient.id %}
-              <a class="a hub-tag hub-tag--primary"
-                 href="{{ url('plainui:personal_message_send_to', recipient=msg.sender.username) ~ '?in_reply_to=' ~ msg.id | urlencode ~ '&subject=AW: ' ~ msg.subject | truncate(100) | urlencode }}">
-                {{ _("Reply") }}
-              </a>
-              <a class="a hub-tag text-bg-warning"
-                 href="{{ build_report_url(request, reported_url=msg.id, kind='pn', next_url=request.url) }}">
-                {{ _("Report") }}
-              </a>
-            {% endif %}
-            <form method="post" action="{{ url('plainui:personal_message_delete') }}">
-              {{ csrf_input }}
-              <button class="a hub-tag hub-tag--danger"
-                      type="submit"
-                      name="id"
-                      value="{{ msg.id }}"
-                      title="{{ _('messages_delete') }}">{{ _("Delete") }}</button>
-            </form>
-          </div>
-        </div>
-        <div class="card-title pe-4">
-          <p>
-            {% if msg.sender %}
-              <a class="a a-bold"
-                 href="{{ url('plainui:user', user_slug=msg.sender.slug) }}">{{ msg.sender.display_name }}</a>
-            {% else %}
-              <span class="m-0 ps-3">{{ _("disabled user") }}</span>
-            {% endif %}
-            <time datetime="{{ msg.timestamp }}"
-                  class="font-sans-serif fw-normal m-0 ps-3">
-              {{ msg.timestamp | strftime }}
-            </time>
-            {% if msg.has_responded %}<span class="m-0 ps-3">{{ _("you have responded") }}</span>{% endif %}
-          </p>
-        </div>
-        <div class="card-body">{{ markdown(msg_body, border=False) }}</div>
+    <div class="hub-card p-4">
+      <h2 class="hub-head-main">{{ msg.subject }}</h2>
+      <div class="hub-tags my-3">
+        {% if msg.sender %}
+          {{ tagboxMacro.user(msg.sender.get_display_name() ,
+          link=url('plainui:user', user_slug=msg.sender.slug)
+          ) }}
+        {% else %}
+          <span>{{ _("disabled user") }}</span>
+        {% endif %}
+        <time datetime="{{ msg.timestamp }}" class="font-sans-serif fw-normal">
+          {{ msg.timestamp | strftime }}
+        </time>
+        {% if msg.has_responded %}<span>({{ _("you have responded") }})</span>{% endif %}
+      </div>
+      <div class="card-body mb-3">{{ markdown(msg_body, border=False) }}</div>
+      <div class="d-flex gap-3">
+        {% if user.id == msg.recipient.id %}
+          <a class="btn btn-primary me-auto"
+             href="{{ url('plainui:personal_message_send_to', recipient=msg.sender.username) ~ '?in_reply_to=' ~ msg.id | urlencode ~ '&subject=AW: ' ~ msg.subject | truncate(100) | urlencode }}">
+            {{ _("Reply") }}
+          </a>
+          <a class="btn btn-warning"
+             href="{{ build_report_url(request, reported_url=msg.id, kind='pn', next_url=request.url) }}">
+            {{ _("Report") }}
+          </a>
+        {% endif %}
+        <form class="d-inline-block"
+              method="post"
+              action="{{ url('plainui:personal_message_delete') }}">
+          {{ csrf_input }}
+          <button class="btn btn-danger ms-auto"
+                  type="submit"
+                  name="id"
+                  value="{{ msg.id }}"
+                  title="{{ _('messages_delete') }}">{{ _("Delete") }}</button>
+        </form>
       </div>
     </div>
   </article>
diff --git a/src/plainui/locale/de/LC_MESSAGES/django.po b/src/plainui/locale/de/LC_MESSAGES/django.po
index e96ccbe92..2615eaf84 100644
--- a/src/plainui/locale/de/LC_MESSAGES/django.po
+++ b/src/plainui/locale/de/LC_MESSAGES/django.po
@@ -533,12 +533,6 @@ msgstr "Wenn du keine E-Mail erhältst, vergewissere dich bitte, dass du die Adr
 msgid "Personal Messages"
 msgstr "Persönliche Nachrichten"
 
-msgid "Received Messages"
-msgstr "Empfangene Nachrichten"
-
-msgid "Sent Messages"
-msgstr "Gesendete Nachrichten"
-
 msgid "Inbox"
 msgstr "Posteingang"
 
@@ -578,21 +572,24 @@ msgstr "Neue Persönliche Nachricht"
 msgid "Send"
 msgstr "senden"
 
+msgid "In Reply To"
+msgstr "Als Antwort auf"
+
 msgid "Personal Message"
 msgstr "Persönliche Nachricht"
 
-msgid "Reply"
-msgstr "Antwort"
-
-msgid "Report"
-msgstr "Melden"
-
 msgid "disabled user"
 msgstr "deaktivierter User"
 
 msgid "you have responded"
 msgstr "du hast geantwortet"
 
+msgid "Reply"
+msgstr "Antwort"
+
+msgid "Report"
+msgstr "Melden"
+
 msgid "last login"
 msgstr "Letzter Login"
 
@@ -1005,9 +1002,6 @@ msgstr "%(conf)s - Passwort-Reset gesendet"
 msgid "report this message"
 msgstr "diese Nachricht melden"
 
-msgid "Send Personal Message"
-msgstr "Persönliche Nachricht senden"
-
 #, python-format
 msgid "Message from %(user)s"
 msgstr "Nachricht von %(user)s"
diff --git a/src/plainui/locale/en/LC_MESSAGES/django.po b/src/plainui/locale/en/LC_MESSAGES/django.po
index d81ef5900..36d0dc33f 100644
--- a/src/plainui/locale/en/LC_MESSAGES/django.po
+++ b/src/plainui/locale/en/LC_MESSAGES/django.po
@@ -533,12 +533,6 @@ msgstr ""
 msgid "Personal Messages"
 msgstr ""
 
-msgid "Received Messages"
-msgstr "Received Messages"
-
-msgid "Sent Messages"
-msgstr "Sent Messages"
-
 msgid "Inbox"
 msgstr ""
 
@@ -578,19 +572,22 @@ msgstr ""
 msgid "Send"
 msgstr ""
 
+msgid "In Reply To"
+msgstr ""
+
 msgid "Personal Message"
 msgstr ""
 
-msgid "Reply"
+msgid "disabled user"
 msgstr ""
 
-msgid "Report"
+msgid "you have responded"
 msgstr ""
 
-msgid "disabled user"
+msgid "Reply"
 msgstr ""
 
-msgid "you have responded"
+msgid "Report"
 msgstr ""
 
 msgid "last login"
@@ -1005,9 +1002,6 @@ msgstr ""
 msgid "report this message"
 msgstr ""
 
-msgid "Send Personal Message"
-msgstr ""
-
 #, python-format
 msgid "Message from %(user)s"
 msgstr ""
-- 
GitLab