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