From 130a9ebd93946b51775365955af6617851e11c9f Mon Sep 17 00:00:00 2001
From: Sage Abdullah <sage.abdullah@torchbox.com>
Date: Fri, 6 Dec 2024 15:54:48 +0000
Subject: [PATCH] Enable breadcrumbs by default

---
 wagtail/admin/views/collections.py     |  2 --
 wagtail/admin/views/generic/base.py    | 30 +++++++++++++++++---------
 wagtail/admin/views/generic/history.py |  1 -
 wagtail/admin/views/pages/utils.py     |  1 -
 wagtail/admin/views/workflows.py       |  4 ----
 wagtail/admin/viewsets/model.py        |  4 ----
 wagtail/admin/viewsets/pages.py        |  1 -
 wagtail/contrib/redirects/views.py     |  2 --
 wagtail/contrib/settings/views.py      |  1 -
 wagtail/documents/views/documents.py   |  2 --
 wagtail/documents/views/multiple.py    |  1 -
 wagtail/images/views/images.py         |  3 ---
 wagtail/images/views/multiple.py       |  1 -
 13 files changed, 20 insertions(+), 33 deletions(-)

diff --git a/wagtail/admin/views/collections.py b/wagtail/admin/views/collections.py
index 02a015c37b..afe0749ca9 100644
--- a/wagtail/admin/views/collections.py
+++ b/wagtail/admin/views/collections.py
@@ -50,7 +50,6 @@ class Create(CreateView):
     edit_url_name = "wagtailadmin_collections:edit"
     index_url_name = "wagtailadmin_collections:index"
     header_icon = "folder-open-1"
-    _show_breadcrumbs = True
 
     def get_form(self, form_class=None):
         form = super().get_form(form_class)
@@ -80,7 +79,6 @@ class Edit(EditView):
     delete_url_name = "wagtailadmin_collections:delete"
     context_object_name = "collection"
     header_icon = "folder-open-1"
-    _show_breadcrumbs = True
 
     def _user_may_move_collection(self, user, instance):
         """
diff --git a/wagtail/admin/views/generic/base.py b/wagtail/admin/views/generic/base.py
index 182542633c..7bedda9caa 100644
--- a/wagtail/admin/views/generic/base.py
+++ b/wagtail/admin/views/generic/base.py
@@ -41,9 +41,17 @@ class WagtailAdminTemplateMixin(TemplateResponseMixin, ContextMixin):
     page_title = ""
     page_subtitle = ""
     header_icon = ""
-    # Breadcrumbs are opt-in until we have a design that can be consistently applied
-    _show_breadcrumbs = False
+
     breadcrumbs_items = [{"url": reverse_lazy("wagtailadmin_home"), "label": _("Home")}]
+    """
+    The base set of breadcrumbs items to be displayed on the page.
+    The property can be overridden by subclasses and viewsets to provide
+    custom base items, e.g. page tree breadcrumbs or add the "Snippets" item.
+
+    Views should copy and append to this list in :meth:`get_breadcrumbs_items()`
+    to define the path to the current view.
+    """
+
     template_name = "wagtailadmin/generic/base.html"
     header_buttons = []
     header_more_buttons = []
@@ -65,6 +73,12 @@ class WagtailAdminTemplateMixin(TemplateResponseMixin, ContextMixin):
         return self.header_icon
 
     def get_breadcrumbs_items(self):
+        """
+        Define the current path to the view by copying the base
+        :attr:`breadcrumbs_items` and appending the list.
+
+        If breadcrumbs are not required, return an empty list.
+        """
         return self.breadcrumbs_items
 
     def get_header_buttons(self):
@@ -92,14 +106,11 @@ class WagtailAdminTemplateMixin(TemplateResponseMixin, ContextMixin):
         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()
-            context["header_buttons"] = self.get_header_buttons()
+
+        # Breadcrumbs are enabled by default.
+        context["breadcrumbs_items"] = self.get_breadcrumbs_items()
+        context["header_buttons"] = self.get_header_buttons()
         return context
 
     def get_template_names(self):
@@ -203,7 +214,6 @@ class BaseListingView(WagtailAdminTemplateMixin, BaseListView):
     default_ordering = None
     filterset_class = None
     verbose_name_plural = None
-    _show_breadcrumbs = True
 
     def get_template_names(self):
         if self.results_only:
diff --git a/wagtail/admin/views/generic/history.py b/wagtail/admin/views/generic/history.py
index 4d01671afe..e8afbebb9e 100644
--- a/wagtail/admin/views/generic/history.py
+++ b/wagtail/admin/views/generic/history.py
@@ -415,7 +415,6 @@ class WorkflowHistoryDetailView(
     page_title = gettext_lazy("Workflow progress")
     header_icon = "list-ul"
     object_icon = "doc-empty-inverse"
-    _show_breadcrumbs = True
 
     @cached_property
     def index_url(self):
diff --git a/wagtail/admin/views/pages/utils.py b/wagtail/admin/views/pages/utils.py
index df8cd15ed0..8bc03d8d66 100644
--- a/wagtail/admin/views/pages/utils.py
+++ b/wagtail/admin/views/pages/utils.py
@@ -50,7 +50,6 @@ class GenericPageBreadcrumbsMixin:
     item of the generic view's generated breadcrumbs items.
     """
 
-    _show_breadcrumbs = True
     breadcrumbs_items_to_take = 1
 
     @cached_property
diff --git a/wagtail/admin/views/workflows.py b/wagtail/admin/views/workflows.py
index 6d4e8589c8..1f0d7afe96 100644
--- a/wagtail/admin/views/workflows.py
+++ b/wagtail/admin/views/workflows.py
@@ -175,7 +175,6 @@ class Create(CreateView):
     index_url_name = "wagtailadmin_workflows:index"
     header_icon = "tasks"
     edit_handler = None
-    _show_breadcrumbs = True
 
     def get_edit_handler(self):
         if not self.edit_handler:
@@ -263,7 +262,6 @@ class Edit(EditView):
     header_more_buttons = []
     edit_handler = None
     MAX_PAGES = 5
-    _show_breadcrumbs = True
 
     def get_edit_handler(self):
         if not self.edit_handler:
@@ -647,7 +645,6 @@ class CreateTask(CreateView):
     edit_url_name = "wagtailadmin_workflows:edit_task"
     index_url_name = "wagtailadmin_workflows:task_index"
     header_icon = "thumbtack"
-    _show_breadcrumbs = True
 
     @cached_property
     def model(self):
@@ -710,7 +707,6 @@ class EditTask(EditView):
     enable_url_name = "wagtailadmin_workflows:enable_task"
     header_icon = "thumbtack"
     header_more_buttons = []
-    _show_breadcrumbs = True
 
     @cached_property
     def model(self):
diff --git a/wagtail/admin/viewsets/model.py b/wagtail/admin/viewsets/model.py
index 8545577615..c67e690577 100644
--- a/wagtail/admin/viewsets/model.py
+++ b/wagtail/admin/viewsets/model.py
@@ -63,9 +63,6 @@ class ModelViewSet(ViewSet):
     #: The view class to use for the inspect view; must be a subclass of ``wagtail.admin.views.generic.InspectView``.
     inspect_view_class = generic.InspectView
 
-    # Breadcrumbs can be turned off until we have a design that can be consistently applied
-    _show_breadcrumbs = True
-
     #: The prefix of template names to look for when rendering the admin views.
     template_prefix = ""
 
@@ -136,7 +133,6 @@ class ModelViewSet(ViewSet):
                 "edit_url_name": self.get_url_name("edit"),
                 "delete_url_name": self.get_url_name("delete"),
                 "header_icon": self.icon,
-                "_show_breadcrumbs": self._show_breadcrumbs,
                 **kwargs,
             }
         )
diff --git a/wagtail/admin/viewsets/pages.py b/wagtail/admin/viewsets/pages.py
index 1784d2e717..33a03d327b 100644
--- a/wagtail/admin/viewsets/pages.py
+++ b/wagtail/admin/viewsets/pages.py
@@ -31,7 +31,6 @@ class PageListingViewSet(ViewSet):
     def get_common_view_kwargs(self, **kwargs):
         return super().get_common_view_kwargs(
             **{
-                "_show_breadcrumbs": True,
                 "header_icon": self.icon,
                 "model": self.model,
                 "index_url_name": self.get_url_name("index"),
diff --git a/wagtail/contrib/redirects/views.py b/wagtail/contrib/redirects/views.py
index a3c5ce6e7e..a56e2d123e 100644
--- a/wagtail/contrib/redirects/views.py
+++ b/wagtail/contrib/redirects/views.py
@@ -145,7 +145,6 @@ class EditView(generic.EditView):
     pk_url_kwarg = "redirect_id"
     error_message = gettext_lazy("The redirect could not be saved due to errors.")
     header_icon = "redirect"
-    _show_breadcrumbs = True
 
     def get_success_message(self):
         return _("Redirect '%(redirect_title)s' updated.") % {
@@ -196,7 +195,6 @@ class CreateView(generic.CreateView):
     edit_url_name = "wagtailredirects:edit"
     error_message = gettext_lazy("The redirect could not be created due to errors.")
     header_icon = "redirect"
-    _show_breadcrumbs = True
 
     def get_success_message(self, instance):
         return _("Redirect '%(redirect_title)s' added.") % {
diff --git a/wagtail/contrib/settings/views.py b/wagtail/contrib/settings/views.py
index b3a466bd63..7c241a5803 100644
--- a/wagtail/contrib/settings/views.py
+++ b/wagtail/contrib/settings/views.py
@@ -84,7 +84,6 @@ class EditView(generic.EditView):
     edit_url_name = "wagtailsettings:edit"
     error_message = gettext_lazy("The setting could not be saved due to errors.")
     permission_required = "change"
-    _show_breadcrumbs = True
 
     def setup(self, request, app_name, model_name, *args, **kwargs):
         self.app_name = app_name
diff --git a/wagtail/documents/views/documents.py b/wagtail/documents/views/documents.py
index 42597d8556..afac402a7e 100644
--- a/wagtail/documents/views/documents.py
+++ b/wagtail/documents/views/documents.py
@@ -162,7 +162,6 @@ class CreateView(generic.CreateView):
     error_message = gettext_lazy("The document could not be created due to errors.")
     template_name = "wagtaildocs/documents/add.html"
     header_icon = "doc-full-inverse"
-    _show_breadcrumbs = True
 
     @cached_property
     def model(self):
@@ -197,7 +196,6 @@ class EditView(generic.EditView):
     delete_url_name = "wagtaildocs:delete"
     header_icon = "doc-full-inverse"
     context_object_name = "document"
-    _show_breadcrumbs = True
 
     @cached_property
     def model(self):
diff --git a/wagtail/documents/views/multiple.py b/wagtail/documents/views/multiple.py
index 09591de15e..b49712834c 100644
--- a/wagtail/documents/views/multiple.py
+++ b/wagtail/documents/views/multiple.py
@@ -25,7 +25,6 @@ class AddView(WagtailAdminTemplateMixin, BaseAddView):
     template_name = "wagtaildocs/multiple/add.html"
     header_icon = "doc-full-inverse"
     page_title = gettext_lazy("Add documents")
-    _show_breadcrumbs = True
 
     index_url_name = "wagtaildocs:index"
     edit_object_url_name = "wagtaildocs:edit_multiple"
diff --git a/wagtail/images/views/images.py b/wagtail/images/views/images.py
index 4880a3abbd..c50d9c85ee 100644
--- a/wagtail/images/views/images.py
+++ b/wagtail/images/views/images.py
@@ -134,7 +134,6 @@ class EditView(generic.EditView):
     url_generator_url_name = "wagtailimages:url_generator"
     header_icon = "image"
     context_object_name = "image"
-    _show_breadcrumbs = True
 
     @cached_property
     def model(self):
@@ -212,7 +211,6 @@ class URLGeneratorView(generic.InspectView):
     template_name = "wagtailimages/images/url_generator.html"
     index_url_name = "wagtailimages:index"
     edit_url_name = "wagtailimages:edit"
-    _show_breadcrumbs = True
 
     def get_page_subtitle(self):
         return self.object.title
@@ -346,7 +344,6 @@ class CreateView(generic.CreateView):
     error_message = gettext_lazy("The image could not be created due to errors.")
     template_name = "wagtailimages/images/add.html"
     header_icon = "image"
-    _show_breadcrumbs = True
 
     @cached_property
     def model(self):
diff --git a/wagtail/images/views/multiple.py b/wagtail/images/views/multiple.py
index b3ad9b33fd..4b48ce825a 100644
--- a/wagtail/images/views/multiple.py
+++ b/wagtail/images/views/multiple.py
@@ -27,7 +27,6 @@ class AddView(WagtailAdminTemplateMixin, BaseAddView):
     template_name = "wagtailimages/multiple/add.html"
     header_icon = "image"
     page_title = gettext_lazy("Add images")
-    _show_breadcrumbs = True
 
     index_url_name = "wagtailimages:index"
     edit_object_url_name = "wagtailimages:edit_multiple"