From 638761687b8104c46a64cfae9fc624d2db193d8c Mon Sep 17 00:00:00 2001 From: Chiemezuo Date: Thu, 26 Oct 2023 15:16:10 +0100 Subject: [PATCH] Migrate styleguide contrib index view to a class based view - Relates to #8365 --- CHANGELOG.txt | 1 + docs/releases/5.3.md | 1 + .../templates/wagtailstyleguide/base.html | 3 +- wagtail/contrib/styleguide/views.py | 112 ++++++++++-------- wagtail/contrib/styleguide/wagtail_hooks.py | 2 +- 5 files changed, 64 insertions(+), 55 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 615c11d06a..51dda36d66 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -11,6 +11,7 @@ Changelog * Maintenance: Update BeautifulSoup upper bound to 4.12.x (scott-8) * Maintenance: Migrate initialization of classes (such as `body.ready`) from multiple JavaScript implementations to one Stimulus controller `w-init` (Chiemezuo Akujobi) * Maintenance: Adopt the usage of of translate string literals using `arg=_('...')` in all `wagtailadmin` module templates (Chiemezuo Akujobi) + * Maintenance: Migrate the contrib styleguide index view to a class based view (Chiemezuo Akujobi) 5.2 LTS (xx.xx.xxxx) - IN DEVELOPMENT diff --git a/docs/releases/5.3.md b/docs/releases/5.3.md index 5a246f31d6..0a6aa281e7 100644 --- a/docs/releases/5.3.md +++ b/docs/releases/5.3.md @@ -31,6 +31,7 @@ depth: 1 * Update BeautifulSoup upper bound to 4.12.x (scott-8) * Migrate initialization of classes (such as `body.ready`) from multiple JavaScript implementations to one Stimulus controller `w-init` (Chiemezuo Akujobi) * Adopt the usage of of translate string literals using `arg=_('...')` in all `wagtailadmin` module templates (Chiemezuo Akujobi) + * Migrate the contrib styleguide index view to a class based view (Chiemezuo Akujobi) ## Upgrade considerations - changes affecting all projects diff --git a/wagtail/contrib/styleguide/templates/wagtailstyleguide/base.html b/wagtail/contrib/styleguide/templates/wagtailstyleguide/base.html index b5e9ec3c4c..179a3996e9 100644 --- a/wagtail/contrib/styleguide/templates/wagtailstyleguide/base.html +++ b/wagtail/contrib/styleguide/templates/wagtailstyleguide/base.html @@ -1,4 +1,4 @@ -{% extends "wagtailadmin/base.html" %} +{% extends "wagtailadmin/generic/base.html" %} {% load wagtailadmin_tags i18n %} {% block extra_css %} @@ -7,7 +7,6 @@ {{ example_form.media.css }} {% endblock %} -{% block titletag %}{% trans 'Styleguide' %}{% endblock %} {% block bodyclass %}styleguide{% endblock %} {% block content %} diff --git a/wagtail/contrib/styleguide/views.py b/wagtail/contrib/styleguide/views.py index 6d2ee37fa5..77bc0babd4 100644 --- a/wagtail/contrib/styleguide/views.py +++ b/wagtail/contrib/styleguide/views.py @@ -6,13 +6,14 @@ from collections import defaultdict from django import forms from django.core.paginator import Paginator from django.template.loader import render_to_string -from django.template.response import TemplateResponse from django.utils.translation import gettext as _ +from django.views.generic.base import TemplateView from wagtail import hooks from wagtail.admin import messages from wagtail.admin.forms.search import SearchForm from wagtail.admin.rich_text import get_rich_text_editor_widget +from wagtail.admin.views.generic import WagtailAdminTemplateMixin from wagtail.admin.widgets import ( AdminAutoHeightTextInput, AdminDateInput, @@ -95,58 +96,65 @@ icon_id_pattern = re.compile(r"id=\"icon-([a-z0-9-]+)\"") icon_comment_pattern = re.compile(r"") -def index(request): +class IndexView(WagtailAdminTemplateMixin, TemplateView): + template_name = "wagtailstyleguide/base.html" + page_title = _("Styleguide") - form = SearchForm(placeholder=_("Search something")) + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) - example_form = ExampleForm() - - messages.success( - request, - _("Success message"), - buttons=[messages.button("", _("View live")), messages.button("", _("Edit"))], - ) - messages.warning( - request, - _("Warning message"), - buttons=[messages.button("", _("View live")), messages.button("", _("Edit"))], - ) - messages.error( - request, - _("Error message"), - buttons=[messages.button("", _("View live")), messages.button("", _("Edit"))], - ) - - paginator = Paginator(list(range(100)), 10) - page = paginator.page(2) - - icon_hooks = hooks.get_hooks("register_icons") - registered_icons = itertools.chain.from_iterable(hook([]) for hook in icon_hooks) - all_icons = defaultdict(list) - for icon_path in registered_icons: - folder, filename = os.path.split(icon_path) - icon = render_to_string(icon_path) - id_match = icon_id_pattern.search(icon) - name = id_match.group(1) if id_match else None - source_match = icon_comment_pattern.search(icon) - - all_icons[folder].append( - { - "folder": folder, - "file_path": icon_path, - "name": name, - "source": source_match.group(1) if source_match else None, - "icon": icon, - } + messages.success( + self.request, + _("Success message"), + buttons=[ + messages.button("", _("View live")), + messages.button("", _("Edit")), + ], + ) + messages.warning( + self.request, + _("Warning message"), + buttons=[ + messages.button("", _("View live")), + messages.button("", _("Edit")), + ], + ) + messages.error( + self.request, + _("Error message"), + buttons=[ + messages.button("", _("View live")), + messages.button("", _("Edit")), + ], ) - return TemplateResponse( - request, - "wagtailstyleguide/base.html", - { - "all_icons": all_icons.items(), - "search_form": form, - "example_form": example_form, - "example_page": page, - }, - ) + context["all_icons"] = self.get_icons() + context["example_form"] = ExampleForm() + context["example_page"] = Paginator(list(range(100)), 10).page(2) + context["search_form"] = SearchForm(placeholder=_("Search something")) + + return context + + def get_icons(self): + icon_hooks = hooks.get_hooks("register_icons") + registered_icons = itertools.chain.from_iterable( + hook([]) for hook in icon_hooks + ) + all_icons = defaultdict(list) + for icon_path in registered_icons: + folder, filename = os.path.split(icon_path) + icon = render_to_string(icon_path) + id_match = icon_id_pattern.search(icon) + name = id_match.group(1) if id_match else None + source_match = icon_comment_pattern.search(icon) + + all_icons[folder].append( + { + "folder": folder, + "file_path": icon_path, + "name": name, + "source": source_match.group(1) if source_match else None, + "icon": icon, + } + ) + return all_icons.items() diff --git a/wagtail/contrib/styleguide/wagtail_hooks.py b/wagtail/contrib/styleguide/wagtail_hooks.py index 9071c1ca3b..199d55013d 100644 --- a/wagtail/contrib/styleguide/wagtail_hooks.py +++ b/wagtail/contrib/styleguide/wagtail_hooks.py @@ -10,7 +10,7 @@ from . import views @hooks.register("register_admin_urls") def register_admin_urls(): return [ - path("styleguide/", views.index, name="wagtailstyleguide"), + path("styleguide/", views.IndexView.as_view(), name="wagtailstyleguide"), ]