Browse Source

Introduce get_header_title in WagtailAdminTemplateMixin for <title> and slim header's h1

Sage Abdullah 1 year ago
parent
commit
3c5f485201

+ 1 - 1
client/tests/integration/groups.test.js

@@ -4,7 +4,7 @@ describe('Groups', () => {
   }, 10000);
 
   it('has the right heading', async () => {
-    expect(await page.title()).toContain('Editing Editors - Wagtail');
+    expect(await page.title()).toContain('Editing: Editors - Wagtail');
   });
 
   it('axe', async () => {

+ 1 - 1
client/tests/integration/listing.test.js

@@ -5,7 +5,7 @@ describe('Listing', () => {
 
   it('has the right heading', async () => {
     expect(await page.title()).toContain(
-      'Exploring Welcome to your new Wagtail site! - Wagtail',
+      'Exploring: Welcome to your new Wagtail site! - Wagtail',
     );
   });
 

+ 2 - 1
wagtail/admin/templates/wagtailadmin/generic/base.html

@@ -1,6 +1,6 @@
 {% extends "wagtailadmin/base.html" %}
 
-{% block titletag %}{{ page_title }} {{ page_subtitle }}{% endblock %}
+{% block titletag %}{{ header_title }}{% endblock %}
 
 {% block content %}
 
@@ -8,6 +8,7 @@
         {% block slim_header %}
             {% if breadcrumbs_items %}
                 {# Ensure all necessary variables are passed explicitly here #}
+                {# TODO: Pass `title=header_title` once slim_header and main_header are mutually exclusive (to prevent multiple h1) #}
                 {% include "wagtailadmin/shared/headers/slim_header.html" with breadcrumbs_items=breadcrumbs_items side_panels=side_panels history_url=history_url only %}
             {% endif %}
         {% endblock %}

+ 2 - 4
wagtail/admin/templates/wagtailadmin/pages/create.html

@@ -1,12 +1,10 @@
-{% extends "wagtailadmin/base.html" %}
+{% extends "wagtailadmin/generic/base.html" %}
 {% load wagtailadmin_tags %}
 {% load i18n %}
 
-{% block titletag %}{% blocktrans trimmed with page_type=content_type.model_class.get_verbose_name %}New {{ page_type }}{% endblocktrans %}{% endblock %}
-
 {% block content %}
 
-    {% include 'wagtailadmin/shared/headers/page_create_header.html' %}
+    {% include 'wagtailadmin/shared/headers/page_create_header.html' with title=header_title %}
 
     <form id="page-edit-form" action="{% url 'wagtailadmin_pages:add' content_type.app_label content_type.model parent_page.id %}" method="POST" novalidate{% if form.is_multipart %} enctype="multipart/form-data"{% endif %} data-edit-form>
         {% csrf_token %}

+ 2 - 3
wagtail/admin/templates/wagtailadmin/pages/edit.html

@@ -1,14 +1,13 @@
-{% extends "wagtailadmin/base.html" %}
+{% extends "wagtailadmin/generic/base.html" %}
 {% load wagtailadmin_tags %}
 {% load i18n %}
 {% load l10n %}
-{% block titletag %}{% blocktrans trimmed with title=page.get_admin_display_title page_type=content_type.model_class.get_verbose_name %}Editing {{ page_type }}: {{ title }}{% endblocktrans %}{% endblock %}
 {% block bodyclass %}{% if page.live %}page-is-live{% endif %} {% if page_locked %}content-locked{% endif %}{% endblock %}
 
 {% block content %}
     {% page_permissions page as page_perms %}
 
-    {% include 'wagtailadmin/shared/headers/page_edit_header.html' %}
+    {% include 'wagtailadmin/shared/headers/page_edit_header.html' with title=header_title %}
 
     {% block form %}
 

+ 1 - 1
wagtail/admin/templates/wagtailadmin/pages/index.html

@@ -4,7 +4,7 @@
 
 {% block header %}
     {% page_permissions parent_page as parent_page_perms %}
-    {% include 'wagtailadmin/pages/page_listing_header.html' with title=parent_page.get_admin_display_title page_perms=parent_page_perms %}
+    {% include 'wagtailadmin/pages/page_listing_header.html' with title=header_title page_perms=parent_page_perms %}
 {% endblock %}
 
 {% block listing %}

+ 0 - 7
wagtail/admin/templates/wagtailadmin/pages/page_listing_header.html

@@ -1,13 +1,6 @@
 {% extends 'wagtailadmin/shared/headers/slim_header.html' %}
 {% load wagtailadmin_tags i18n %}
 
-{% block title %}
-    {# Accessible page title #}
-    <h1 class="w-sr-only">
-        {{ title }}
-    </h1>
-{% endblock %}
-
 {% block breadcrumbs %}
     {# breadcrumbs #}
     {% page_breadcrumbs parent_page 'wagtailadmin_explore' url_root_name='wagtailadmin_explore_root' is_expanded=parent_page.is_root classname='sm:w-py-2.5' %}

+ 0 - 6
wagtail/admin/templates/wagtailadmin/shared/headers/page_create_header.html

@@ -4,9 +4,3 @@
 {% block breadcrumbs %}
     {% page_breadcrumbs parent_page 'wagtailadmin_explore' url_root_name='wagtailadmin_explore_root' include_self=True trailing_breadcrumb_title=title %}
 {% endblock %}
-
-{% block title %}
-    <h1 class="w-sr-only">
-        {{ title }}
-    </h1>
-{% endblock %}

+ 0 - 6
wagtail/admin/templates/wagtailadmin/shared/headers/page_edit_header.html

@@ -5,12 +5,6 @@
     {% page_breadcrumbs page 'wagtailadmin_explore' url_root_name='wagtailadmin_explore_root' page_perms=page_perms %}
 {% endblock %}
 
-{% block title %}
-    <h1 class="w-sr-only">
-        {% blocktrans trimmed with title=page.get_admin_display_title page_type=content_type.model_class.get_verbose_name %}Editing {{ page_type }} {{ title }}{% endblocktrans %}
-    </h1>
-{% endblock %}
-
 {% block actions %}
     {# Page actions dropdown #}
     {% page_header_buttons page user=request.user view_name="edit" %}

+ 13 - 0
wagtail/admin/views/generic/base.py

@@ -33,6 +33,13 @@ class WagtailAdminTemplateMixin(TemplateResponseMixin, ContextMixin):
     def get_page_subtitle(self):
         return self.page_subtitle
 
+    def get_header_title(self):
+        title = self.get_page_title()
+        subtitle = self.get_page_subtitle()
+        if subtitle:
+            title = f"{title}: {subtitle}"
+        return title
+
     def get_header_icon(self):
         return self.header_icon
 
@@ -41,9 +48,15 @@ class WagtailAdminTemplateMixin(TemplateResponseMixin, ContextMixin):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
+        # These are only used for legacy header.html
+        # and view templates that don't use "wagtailadmin/generic/base.html"
         context["page_title"] = self.get_page_title()
         context["page_subtitle"] = self.get_page_subtitle()
         context["header_icon"] = self.get_header_icon()
+
+        # Once all appropriate views use "wagtailadmin/generic/base.html" and
+        # the slim_header.html, _show_breadcrumbs can be removed
+        context["header_title"] = self.get_header_title()
         context["breadcrumbs_items"] = None
         if self._show_breadcrumbs:
             context["breadcrumbs_items"] = self.get_breadcrumbs_items()

+ 8 - 2
wagtail/admin/views/pages/create.py

@@ -9,7 +9,8 @@ from django.template.response import TemplateResponse
 from django.urls import reverse
 from django.utils import timezone
 from django.utils.translation import gettext as _
-from django.views.generic.base import ContextMixin, TemplateResponseMixin, View
+from django.utils.translation import gettext_lazy
+from django.views.generic.base import View
 
 from wagtail.admin import messages, signals
 from wagtail.admin.action_menu import PageActionMenu
@@ -21,6 +22,7 @@ from wagtail.admin.ui.side_panels import (
 )
 from wagtail.admin.utils import get_valid_next_url_from_request
 from wagtail.admin.views.generic import HookResponseMixin
+from wagtail.admin.views.generic.base import WagtailAdminTemplateMixin
 from wagtail.models import Locale, Page, PageSubscription
 
 
@@ -59,8 +61,9 @@ def add_subpage(request, parent_page_id):
     )
 
 
-class CreateView(TemplateResponseMixin, ContextMixin, HookResponseMixin, View):
+class CreateView(WagtailAdminTemplateMixin, HookResponseMixin, View):
     template_name = "wagtailadmin/pages/create.html"
+    page_title = gettext_lazy("New")
 
     def dispatch(
         self, request, content_type_app_name, content_type_model_name, parent_page_id
@@ -160,6 +163,9 @@ class CreateView(TemplateResponseMixin, ContextMixin, HookResponseMixin, View):
         else:
             return self.save_action()
 
+    def get_page_subtitle(self):
+        return self.page_class.get_verbose_name()
+
     def get_edit_message_button(self):
         return messages.button(
             reverse("wagtailadmin_pages:edit", args=(self.page.id,)), _("Edit")

+ 11 - 2
wagtail/admin/views/pages/edit.py

@@ -11,7 +11,7 @@ from django.urls import reverse
 from django.utils import timezone
 from django.utils.html import format_html
 from django.utils.translation import gettext as _
-from django.views.generic.base import ContextMixin, TemplateResponseMixin, View
+from django.views.generic.base import View
 
 from wagtail.actions.publish_page_revision import PublishPageRevisionAction
 from wagtail.admin import messages
@@ -25,6 +25,7 @@ from wagtail.admin.ui.side_panels import (
 )
 from wagtail.admin.utils import get_valid_next_url_from_request
 from wagtail.admin.views.generic import HookResponseMixin
+from wagtail.admin.views.generic.base import WagtailAdminTemplateMixin
 from wagtail.exceptions import PageClassNotFoundError
 from wagtail.locks import BasicLock, ScheduledForPublishLock, WorkflowLock
 from wagtail.models import (
@@ -38,7 +39,15 @@ from wagtail.models import (
 from wagtail.utils.timestamps import render_timestamp
 
 
-class EditView(TemplateResponseMixin, ContextMixin, HookResponseMixin, View):
+class EditView(WagtailAdminTemplateMixin, HookResponseMixin, View):
+    def get_page_title(self):
+        return _("Editing %(page_type)s") % {
+            "page_type": self.page_class.get_verbose_name()
+        }
+
+    def get_page_subtitle(self):
+        return self.page.get_admin_display_title()
+
     def get_template_names(self):
         if self.page.alias_of_id:
             return ["wagtailadmin/pages/edit_alias.html"]

+ 3 - 4
wagtail/admin/views/pages/listing.py

@@ -93,6 +93,7 @@ class BaseIndexView(generic.IndexView):
     table_class = PageTable
     table_classname = "listing full-width"
     filterset_class = PageFilterSet
+    page_title = _("Exploring")
 
     columns = [
         BulkActionsColumn("bulk_actions", width="10px"),
@@ -302,10 +303,8 @@ class BaseIndexView(generic.IndexView):
             }
         return kwargs
 
-    def get_page_title(self):
-        return _("Exploring %(title)s") % {
-            "title": self.parent_page.get_admin_display_title()
-        }
+    def get_page_subtitle(self):
+        return self.parent_page.get_admin_display_title()
 
     def get_context_data(self, **kwargs):
         self.show_ordering_column = self.ordering == "ord"

+ 8 - 0
wagtail/admin/views/pages/revisions.py

@@ -33,6 +33,7 @@ def revisions_index(request, page_id):
 
 
 def revisions_revert(request, page_id, revision_id):
+    # TODO: refactor this into a class-based view that extends the EditView
     page = get_object_or_404(Page, id=page_id).specific
     page_perms = page.permissions_for_user(request.user)
     if not page_perms.can_edit():
@@ -116,6 +117,12 @@ def revisions_revert(request, page_id, revision_id):
         ),
     )
 
+    page_title = _("Editing %(page_type)s") % {
+        "page_type": page_class.get_verbose_name()
+    }
+    page_subtitle = page.get_admin_display_title()
+    header_title = f"{page_title}: {page_subtitle}"
+
     return TemplateResponse(
         request,
         "wagtailadmin/pages/edit.html",
@@ -128,6 +135,7 @@ def revisions_revert(request, page_id, revision_id):
             "errors_debug": None,
             "action_menu": action_menu,
             "side_panels": side_panels,
+            "header_title": header_title,
             "form": form,  # Used in unit tests
             "media": media,
         },