From 059fd84d06a3af1e385e1b0490803d158c4ad7ec Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 11 Feb 2022 13:33:42 -0500 Subject: [PATCH 01/11] Adds delete button to announcements list view It's handy to have it there --- .../settings/announcements/announcements.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bookwyrm/templates/settings/announcements/announcements.html b/bookwyrm/templates/settings/announcements/announcements.html index c86ecf3e..d60ef376 100644 --- a/bookwyrm/templates/settings/announcements/announcements.html +++ b/bookwyrm/templates/settings/announcements/announcements.html @@ -38,6 +38,9 @@ {% trans "Status" as text %} {% include 'snippets/table-sort-header.html' with field="active" sort=sort text=text %} + + {% trans "Actions" %} + {% for announcement in announcements %} @@ -46,6 +49,15 @@ {{ announcement.start_date|naturaltime|default:'' }} {{ announcement.end_date|naturaltime|default:'' }} {% if announcement.active %}{% trans "active" %}{% else %}{% trans "inactive" %}{% endif %} + +
+ {% csrf_token %} + +
+ {% endfor %} {% if not announcements %} From 62741a5d2e9a9872ccca2cff349f9f50035a28e2 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 11 Feb 2022 13:36:08 -0500 Subject: [PATCH 02/11] Allow html in announcement header --- bookwyrm/templates/snippets/announcement.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/snippets/announcement.html b/bookwyrm/templates/snippets/announcement.html index 8b856319..62dd4ea7 100644 --- a/bookwyrm/templates/snippets/announcement.html +++ b/bookwyrm/templates/snippets/announcement.html @@ -9,7 +9,7 @@ {% if announcement.event_date %} {{ announcement.event_date|naturalday|title }}: {% endif %} - {{ announcement.preview }} + {{ announcement.preview|safe }} {% if announcement.content %}
From ee23aba9946361dc391891510d5f411ebc617299 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 11 Feb 2022 13:50:55 -0500 Subject: [PATCH 03/11] Use details and summary for announcement panel --- bookwyrm/static/css/bookwyrm.css | 4 +-- bookwyrm/templates/snippets/announcement.html | 29 +++++++++---------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm.css b/bookwyrm/static/css/bookwyrm.css index f05ea3c9..66949387 100644 --- a/bookwyrm/static/css/bookwyrm.css +++ b/bookwyrm/static/css/bookwyrm.css @@ -319,7 +319,7 @@ details.details-panel summary { position: relative; } -details.details-panel summary .details-close { +details summary .details-close { position: absolute; right: 0; top: 0; @@ -327,7 +327,7 @@ details.details-panel summary .details-close { transition: transform 0.2s ease; } -details[open].details-panel summary .details-close { +details[open] summary .details-close { transform: rotate(0deg); } diff --git a/bookwyrm/templates/snippets/announcement.html b/bookwyrm/templates/snippets/announcement.html index 62dd4ea7..c8eca6ad 100644 --- a/bookwyrm/templates/snippets/announcement.html +++ b/bookwyrm/templates/snippets/announcement.html @@ -4,29 +4,26 @@ class="notification mb-1 p-3{% if not admin_mode %} is-hidden{% endif %} transition-y" {% if not admin_mode %}data-hide="hide_announcement_{{ announcement.id }}"{% endif %} > -
-
+
+ {% if announcement.event_date %} {{ announcement.event_date|naturalday|title }}: {% endif %} + {{ announcement.preview|safe }} -
+ + {% if announcement.content %} + + {% endif %} + {% if announcement.content %} -
- {% trans "Open" as button_text %} - {% include 'snippets/toggle/open_button.html' with text=button_text controls_text="announcement" class="is-small" controls_uid=uuid icon_with_text="arrow-down" %} - {% trans "Close" as button_text %} - {% include 'snippets/toggle/close_button.html' with text=button_text controls_text="announcement" class="is-small" controls_uid=uuid icon_with_text="arrow-up" %} +
+
+ {{ announcement.content|safe }} +
{% endif %} -
- {% if announcement.content %} -
-
- {{ announcement.content|safe }} -
-
- {% endif %} +

{% blocktrans with user_path=announcement.user.local_path username=announcement.user.display_name %}Posted by {{ username }}{% endblocktrans %}

{% if not admin_mode %} From cfa91e25704d8a0c73a6648761824e734458e6be Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 11 Feb 2022 14:00:01 -0500 Subject: [PATCH 04/11] Adds color options to announcements --- .../0134_announcement_display_type.py | 29 +++++++++++++++++++ bookwyrm/models/announcement.py | 18 ++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 bookwyrm/migrations/0134_announcement_display_type.py diff --git a/bookwyrm/migrations/0134_announcement_display_type.py b/bookwyrm/migrations/0134_announcement_display_type.py new file mode 100644 index 00000000..ba845012 --- /dev/null +++ b/bookwyrm/migrations/0134_announcement_display_type.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.11 on 2022-02-11 18:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0133_alter_listitem_notes"), + ] + + operations = [ + migrations.AddField( + model_name="announcement", + name="display_type", + field=models.CharField( + choices=[ + ("white-ter", "None"), + ("primary-light", "Primary"), + ("success-light", "Success"), + ("link-light", "Link"), + ("warning-light", "Warning"), + ("danger-light", "Danger"), + ], + default="white-ter", + max_length=20, + ), + ), + ] diff --git a/bookwyrm/models/announcement.py b/bookwyrm/models/announcement.py index 498d5041..cbed38ae 100644 --- a/bookwyrm/models/announcement.py +++ b/bookwyrm/models/announcement.py @@ -2,10 +2,21 @@ from django.db import models from django.db.models import Q from django.utils import timezone +from django.utils.translation import gettext_lazy as _ from .base_model import BookWyrmModel +DisplayTypes = [ + ("white-ter", _("None")), + ("primary-light", _("Primary")), + ("success-light", _("Success")), + ("link-light", _("Link")), + ("warning-light", _("Warning")), + ("danger-light", _("Danger")), +] + + class Announcement(BookWyrmModel): """The admin has something to say""" @@ -16,6 +27,13 @@ class Announcement(BookWyrmModel): start_date = models.DateTimeField(blank=True, null=True) end_date = models.DateTimeField(blank=True, null=True) active = models.BooleanField(default=True) + display_type = models.CharField( + max_length=20, + blank=False, + null=False, + choices=DisplayTypes, + default="white-ter", + ) @classmethod def active_announcements(cls): From 01b52f023a19e20dd1c2af63a844c48de1d64eff Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 11 Feb 2022 14:38:13 -0500 Subject: [PATCH 05/11] Adds edit announcement view --- .../settings/announcements/announcement.html | 14 +-- .../announcements/announcement_form.html | 80 ------------- .../settings/announcements/announcements.html | 13 +-- .../announcements/edit_announcement.html | 105 ++++++++++++++++++ bookwyrm/urls.py | 10 ++ bookwyrm/views/__init__.py | 3 +- bookwyrm/views/admin/announcements.py | 62 ++++++----- 7 files changed, 165 insertions(+), 122 deletions(-) delete mode 100644 bookwyrm/templates/settings/announcements/announcement_form.html create mode 100644 bookwyrm/templates/settings/announcements/edit_announcement.html diff --git a/bookwyrm/templates/settings/announcements/announcement.html b/bookwyrm/templates/settings/announcements/announcement.html index 8b49f4f4..09501382 100644 --- a/bookwyrm/templates/settings/announcements/announcement.html +++ b/bookwyrm/templates/settings/announcements/announcement.html @@ -1,5 +1,7 @@ {% extends 'settings/layout.html' %} -{% load i18n %}{% load humanize %} +{% load i18n %} +{% load humanize %} + {% block title %}{% trans "Announcement" %} - {{ announcement.preview }}{% endblock %} {% block header %} @@ -8,10 +10,12 @@ {% endblock %} {% block edit-button %} -{% trans "Edit Announcement" as button_text %}
- {% include 'snippets/toggle/open_button.html' with controls_text="edit_announcement" icon_with_text="pencil" text=button_text focus="edit_announcement_header" %} + + + {% trans "Edit Announcement" %} +
{% csrf_token %} @@ -25,10 +29,6 @@ {% block panel %} - - {% include 'settings/announcements/announcement_form.html' with controls_text="edit_announcement" %} -
-
{% trans "Visible:" %}
diff --git a/bookwyrm/templates/settings/announcements/announcement_form.html b/bookwyrm/templates/settings/announcements/announcement_form.html deleted file mode 100644 index 8f68e255..00000000 --- a/bookwyrm/templates/settings/announcements/announcement_form.html +++ /dev/null @@ -1,80 +0,0 @@ -{% extends 'components/inline_form.html' %} -{% load i18n %} - -{% block header %} -{% if announcement %} -{% trans "Edit Announcement" %} -{% else %} -{% trans "Create Announcement" %} -{% endif %} -{% endblock %} - -{% block form %} -{% csrf_token %} - -

- - {{ form.preview }} - - {% include 'snippets/form_errors.html' with errors_list=form.preview.errors id="desc_preview" %} -

-

- - {{ form.content }} - - {% include 'snippets/form_errors.html' with errors_list=form.content.errors id="desc_content" %} -

-

- - - - {% include 'snippets/form_errors.html' with errors_list=form.event_date.errors id="desc_event_date" %} -

- -
-
-

- - - - {% include 'snippets/form_errors.html' with errors_list=form.start_date.errors id="desc_start_date" %} -

-
-
-

- - - - {% include 'snippets/form_errors.html' with errors_list=form.end_date.errors id="desc_end_date" %} -

-
-
-

- - {{ form.active }} - - {% include 'snippets/form_errors.html' with errors_list=form.active.errors id="desc_active" %} -

-
-
- -
-
- -
-
-{% endblock %} diff --git a/bookwyrm/templates/settings/announcements/announcements.html b/bookwyrm/templates/settings/announcements/announcements.html index d60ef376..6299ba3d 100644 --- a/bookwyrm/templates/settings/announcements/announcements.html +++ b/bookwyrm/templates/settings/announcements/announcements.html @@ -5,16 +5,15 @@ {% block header %}{% trans "Announcements" %}{% endblock %} {% block edit-button %} -{% trans "Create Announcement" as button_text %} -{% include 'snippets/toggle/open_button.html' with controls_text="create_announcement" icon_with_text="plus" text=button_text focus="create_announcement_header" %} + + {% trans "Create Announcement" as text %} + + {{ text }} + {% endblock %} {% block panel %} -
- {% include 'settings/announcements/announcement_form.html' with controls_text="create_announcement" %} -
- -
+
diff --git a/bookwyrm/templates/settings/announcements/edit_announcement.html b/bookwyrm/templates/settings/announcements/edit_announcement.html new file mode 100644 index 00000000..ef10c2a0 --- /dev/null +++ b/bookwyrm/templates/settings/announcements/edit_announcement.html @@ -0,0 +1,105 @@ +{% extends 'settings/layout.html' %} +{% load i18n %} + +{% block header %} +{% if announcement %} +{% trans "Edit Announcement" %} +{% else %} +{% trans "Create Announcement" %} +{% endif %} +{% endblock %} + +{% block panel %} +
+ {% csrf_token %} + +

{% trans "Announcement content" %}

+
+

+ + {{ form.preview }} + + {% include 'snippets/form_errors.html' with errors_list=form.preview.errors id="desc_preview" %} +

+

+ + {{ form.content }} + + {% include 'snippets/form_errors.html' with errors_list=form.content.errors id="desc_content" %} +

+

+ + + + {% include 'snippets/form_errors.html' with errors_list=form.event_date.errors id="desc_event_date" %} +

+
+ +

{% trans "Display settings" %}

+
+
+
+

+ + + + {% include 'snippets/form_errors.html' with errors_list=form.start_date.errors id="desc_start_date" %} +

+
+
+

+ + + + {% include 'snippets/form_errors.html' with errors_list=form.end_date.errors id="desc_end_date" %} +

+
+
+ +
+ {{ form.display_type }} +
+ + {% include 'snippets/form_errors.html' with errors_list=form.active.errors id="desc_display_type" %} +
+
+

+ + + {% include 'snippets/form_errors.html' with errors_list=form.active.errors id="desc_active" %} +

+
+ +
+
+ +
+
+
+{% endblock %} diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 79d868c9..5ee09a3a 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -93,6 +93,16 @@ urlpatterns = [ views.Announcement.as_view(), name="settings-announcements", ), + re_path( + r"^settings/announcements/create/?$", + views.EditAnnouncement.as_view(), + name="settings-announcements-edit", + ), + re_path( + r"^settings/announcements/(?P\d+)/edit/?$", + views.EditAnnouncement.as_view(), + name="settings-announcements-edit", + ), re_path( r"^settings/announcements/(?P\d+)/delete/?$", views.delete_announcement, diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 359bee82..579e89cb 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -1,6 +1,7 @@ """ make sure all our nice views are available """ # site admin -from .admin.announcements import Announcements, Announcement, delete_announcement +from .admin.announcements import Announcements, Announcement +from .admin.announcements import EditAnnouncement, delete_announcement from .admin.dashboard import Dashboard from .admin.federation import Federation, FederatedServer from .admin.federation import AddFederatedServer, ImportServerBlocklist diff --git a/bookwyrm/views/admin/announcements.py b/bookwyrm/views/admin/announcements.py index 92ec1766..dd0ce862 100644 --- a/bookwyrm/views/admin/announcements.py +++ b/bookwyrm/views/admin/announcements.py @@ -45,23 +45,6 @@ class Announcements(View): request, "settings/announcements/announcements.html", data ) - def post(self, request): - """edit the site settings""" - form = forms.AnnouncementForm(request.POST) - if form.is_valid(): - form.save() - # reset the create form - form = forms.AnnouncementForm() - data = { - "announcements": Paginator( - models.Announcement.objects.order_by("-created_date"), PAGE_LENGTH - ).get_page(request.GET.get("page")), - "form": form, - } - return TemplateResponse( - request, "settings/announcements/announcements.html", data - ) - @method_decorator(login_required, name="dispatch") @method_decorator( @@ -76,27 +59,52 @@ class Announcement(View): announcement = get_object_or_404(models.Announcement, id=announcement_id) data = { "announcement": announcement, - "form": forms.AnnouncementForm(instance=announcement), } return TemplateResponse( request, "settings/announcements/announcement.html", data ) - def post(self, request, announcement_id): - """edit announcement""" - announcement = get_object_or_404(models.Announcement, id=announcement_id) - form = forms.AnnouncementForm(request.POST, instance=announcement) - if form.is_valid(): - announcement = form.save() - form = forms.AnnouncementForm(instance=announcement) + + +@method_decorator(login_required, name="dispatch") +@method_decorator( + permission_required("bookwyrm.edit_instance_settings", raise_exception=True), + name="dispatch", +) +class EditAnnouncement(View): + """Create of edit an announcement""" + def get(self, request, announcement_id=None): + """announcement forms""" + announcement = None + if announcement_id: + announcement = get_object_or_404(models.Announcement, id=announcement_id) + data = { "announcement": announcement, - "form": form, + "form": forms.AnnouncementForm(instance=announcement), } return TemplateResponse( - request, "settings/announcements/announcement.html", data + request, "settings/announcements/edit_announcement.html", data ) + def post(self, request, announcement_id=None): + """edit announcement""" + announcement = None + if announcement_id: + announcement = get_object_or_404(models.Announcement, id=announcement_id) + + form = forms.AnnouncementForm(request.POST, instance=announcement) + if not form.is_valid(): + data = { + "announcement": announcement, + "form": form, + } + return TemplateResponse( + request, "settings/announcements/edit_announcement.html", data + ) + announcement = form.save() + return redirect("settings-announcements", announcement.id) + @login_required @permission_required("bookwyrm.edit_instance_settings", raise_exception=True) From b95f0ed287a9f3dcd25932060c79e3e9d4b0bd36 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 11 Feb 2022 14:43:37 -0500 Subject: [PATCH 06/11] Use color in announcement --- bookwyrm/templates/snippets/announcement.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/snippets/announcement.html b/bookwyrm/templates/snippets/announcement.html index c8eca6ad..ec1555d8 100644 --- a/bookwyrm/templates/snippets/announcement.html +++ b/bookwyrm/templates/snippets/announcement.html @@ -1,7 +1,7 @@ {% load humanize %}{% load i18n %}{% load utilities %} {% with announcement.id|uuid as uuid %}