Changelog ========= 6.0 (xx.xx.xxxx) - IN DEVELOPMENT ~~~~~~~~~~~~~~~~ * Added support for Django 5.0 * Added `search_index` option to StreamField blocks to control whether the block is indexed for searching (Vedant Pandey) * Remember previous location on returning from page add/edit actions (Robert Rollins) * Update settings file in project settings to address Django 4.2 deprecations (Sage Abdullah) * Improve layout and accessibility of the image URL generator page, reduce reliance on JavaScript (Temidayo Azeez) * Allow `UniqueConstraint` in place of `unique_together` for `TranslatableMixin`'s system check (Temidayo Azeez, Sage Abdullah) * Make use of `IndexView.get_add_url()` in snippets index view template (Christer Jensen, Sage Abdullah) * Allow `Page.permissions_for_user()` to be overridden by specific page types (Sébastien Corbin) * Improve visual alignment of explore icon in Page listings for longer content (Krzysztof Jeziorny) * Add `extra_actions` blocks to Snippets and generic index templates (Bhuvnesh Sharma) * Added page types usage report (Jhonatan Lopes) * Add support for defining `panels` / `edit_handler` on `ModelViewSet` (Sage Abdullah) * Use a single instance of `PagePermissionPolicy` in `wagtail.permissions` module (Sage Abdullah) * Add max tag length validation for multiple uploads (documents/images) (Temidayo Azeez) * Ensure expanded side panel does not overlap form content for most viewports (Chiemezuo Akujobi) * Add ability to modify the default ordering for the page explorer view (Shlomo Markowitz) * Remove overly verbose image captions in image listings for screen readers (Sage Abdullah) * Ensure screen readers and dictation tools can more easily navigate bulk actions in images, documents and page listings by streamlining labels and descriptions (Sage Abdullah) * Remove support for Safari 14 (Thibaud Colas) * Add ability to click to copy the URL in the image URL generator page (Sai Srikar Dumpeti) * Add ability to filter by page type and date updated in the page listing view (Matt Westcott) * Add ability to filter by owner and site in the page listing view (Matt Westcott) * Improve right-to-left support by using flow-relative float styles (Thibaud Colas) * Show edit as a main action in generic history and usage views (Sage Abdullah) * Make styles for header buttons consistent (Sage Abdullah) * Improve styles of slim header's search and filters (Sage Abdullah) * Change page listing's add button to icon-only (Sage Abdullah) * Add sublabel to breadcrumbs, including history, usage, and inspect views (Sage Abdullah) * Standardise search form placeholder to 'Search…' (Sage Abdullah) * Use SlugInput on all SlugFields by default (LB (Ben) Johnston) * Show character counts on RichTextBlock with `max_length` (Elhussein Almasri) * Move locale selector in generic IndexView to a filter (Sage Abdullah) * Add ability to customise a page's copy form (Neeraj Yetheendran) * Add optional caption field to `TypedTableBlock` (Tommaso Amici, Cynthia Kiser) * Switch the `TableBlock` header controls to a field that requires user input (Bhuvnesh Sharma, Aman Pandey, Cynthia Kiser) * Fix: Update system check for overwriting storage backends to recognise the `STORAGES` setting introduced in Django 4.2 (phijma-leukeleu) * Fix: Prevent password change form from raising a validation error when browser autocomplete fills in the "Old password" field (Chiemezuo Akujobi) * Fix: Ensure that the legacy dropdown options, when closed, do not get accidentally clicked by other interactions wide viewports (CheesyPhoenix, Christer Jensen) * Fix: Add a fallback background for the editing preview iframe for sites without a background (Ian Price) * Fix: Preserve whitespace in rendered comments (Elhussein Almasri) * Fix: Remove search logging from project template so that new projects without the search promotions module will not error (Matt Westcott) * Fix: Ensure text only email notifications for updated comments do not escape HTML characters (Rohit Sharma) * Fix: Use the latest draft when copying an unpublished page for translation (Andrey Nehaychik) * Fix: Make Workflow and Aging Pages reports only available to users with page-related permissions (Rohit Sharma) * Fix: Make searching on specific fields work correctly on Elasticsearch when boost is in use (Matt Westcott) * Fix: Use a visible border and background color to highlight active formatting in the rich text toolbar (Cassidy Pittman) * Fix: Ensure image focal point box can be removed (Gunnar Scherf) * Fix: Ensure that Snippets search results correctly use the `index_results.html` or `index_results_template_name` override on initial load (Stefan Hammer) * Fix: Avoid error when attempting to moderate a page drafted by a now deleted user (Dan Braghis) * Fix: Do not show multiple error messages when editing a Site to use existing hostname and port (Rohit Sharma) * Fix: Avoid error when exporting Aging Pages report where a page has an empty `last_published_by_user` (Chiemezuo Akujobi) * Fix: Ensure Page querysets support using `alias` and `specific` (Tomasz Knapik) * Fix: Ensure workflow dashboard panels work when the page/snippet is missing (Sage Abdullah) * Fix: Prevent a ValueError with `FormSubmissionsPanel` on Django 5.0 when creating a new form page (Matt Westcott) * Fix: Avoid duplicate entries in "Recent edits" panel when copying pages (Matt Westcott) * Fix: Prevent TitleFieldPanel from raising an error when the slug field is missing or read-only (Rohit Sharma) * Fix: Ensure that the close button on the new dialog designs is visible in the non-message variant (Nandini Arora) * Docs: Document, for contributors, the use of translate string literals passed as arguments to tags and filters using `_()` within templates (Chiemezuo Akujobi) * Docs: Document all features for the Documents app in one location (Neeraj Yetheendran) * Docs: Add section to testing docs about creating pages and working with page content (Mariana Bedran Lesche) * Docs: Add more nuance to the database recommendations in performance page (Jadesola Kareem) * Docs: Add clarity that MultipleChooserPanel may require a chooser viewset and how the functionality is expected to work (Andy Chosak) * Docs: Clarify where documentation build commands should be run (Nikhil S Kalburgi) * Docs: Add missing import to tutorial BlogPage example (Salvo Polizzi) * Docs: Update contributing guide documentation and GitHub templates to better support new contributors (Thibaud Colas) * 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) * Maintenance: Update djhtml to 3.0.6 (Matt Westcott) * Maintenance: Migrate the contrib settings edit view to a class-based view (Chiemezuo Akujobi, Sage Abdullah) * Maintenance: Remove django-pattern-library upper bound in testing dependencies (Sage Abdullah) * Maintenance: Split up functions in Elasticsearch backend for easier extensibility (Marcel Kornblum, Cameron Lamb, Sam Dudley) * Maintenance: Relax draftjs_exporter dependency to allow using version 5.x (Sylvain Fankhauser) * Maintenance: Refine styling of listings, account settings panels and the block chooser (Meli Imelda) * Maintenance: Remove icon font support (Matt Westcott) * Maintenance: Remove deprecated SVG icons (Matt Westcott) * Maintenance: Remove icon font styles (Thibaud Colas) * Maintenance: Migrate account editing view to a class-based view (Kehinde Bobade) * Maintenance: Upgrade frontend tooling to use Node 20 (LB (Ben) Johnston) * Maintenance: Upgrade `ruff` and replace `black` with `ruff format` (John-Scott Atlakson) * Maintenance: Update Willow upper bound to 2.x (Dan Braghis) * Maintenance: Removed support for Django < 4.2 (Dan Braghis) * Maintenance: Refactor page explorer index template to extend generic index template (Sage Abdullah) * Maintenance: Replace template components implementation with standalone `laces` library (Tibor Leupold) * Maintenance: Refactor snippets index view and template to make better use of generic IndexView (Sage Abdullah) * Maintenance: Introduce an internal `{% formattedfield %}` tag to replace direct use of `wagtailadmin/shared/field.html` (Matt Westcott) * Maintenance: Update Telepath dependency to 0.3.1 (Matt Westcott) * Maintenance: Upgrade to latest TypeScript and Storybook (Thibaud Colas, Sage Abdullah) * Maintenance: Turn on `skipLibCheck` for TypeScript (LB (Ben) Johnston) * Maintenance: Refactor documents listing view to use generic IndexView (Sage Abdullah) * Maintenance: Support for the Stimulus `CloneController` to auto clear the added content after a set duration (LB (Ben) Johnston) * Maintenance: Refactor images listing view to use generic IndexView (Sage Abdullah) * Maintenance: Refactor form pages listing view to use generic IndexView (Sage Abdullah) * Maintenance: Update Stylelint, our linting configuration, Sass, and related code changes (LB (Ben) Johnston) * Maintenance: Simplify browserslist and browser support documentation (Thibaud Colas) * Maintenance: Relax django-taggit dependency to allow 5.0 (Sylvain Fankhauser) * Maintenance: Fix various warnings when building docs (Cynthia Kiser) * Maintenance: Upgrade sphinxcontrib-spelling to 7.x for Python 3.12 compatibility (Matt Westcott) * Maintenance: Move logic for django-filters filtering into `BaseListingView` (Matt Westcott) * Maintenance: Refactor listing views to share more queryset ordering logic (Matt Westcott) * Maintenance: Remove `initTooltips` in favour of Stimulus controller (LB (Ben) Johnston) * Maintenance: Enhance the Stimulus `InitController` to allow for custom event dispatching when ready (Aditya, LB (Ben) Johnston) * Maintenance: Remove inline script usage for comment initialization and adopt an event listener/dispatch approach for better CSP compliance (Aditya, LB (Ben) Johnston) * Maintenance: Migrate styleguide ad-hoc JavaScript to use styles only to avoid CSP issues (LB (Ben) Johnston) 5.2.3 (xx.xx.xxxx) - IN DEVELOPMENT ~~~~~~~~~~~~~~~~ * Fix: Prevent a ValueError with `FormSubmissionsPanel` on Django 5.0 when creating a new form page (Matt Westcott) 5.2.2 (06.12.2023) ~~~~~~~~~~~~~~~~~~ * Added support for Django 5.0 * Fix: Use a visible border and background color to highlight active formatting in the rich text toolbar (Cassidy Pittman) * Fix: Ensure image focal point box can be removed (Gunnar Scherf) * Fix: Ensure that Snippets search results correctly use the `index_results.html` or `index_results_template_name` override on initial load (Stefan Hammer) * Fix: Avoid error when attempting to moderate a page drafted by a now deleted user (Dan Braghis) * Fix: Ensure workflow dashboard panels work when the page/snippet is missing (Sage Abdullah) * Fix: Prevent custom controls from stacking on top of the comment button in Draftail toolbar (Ben Morse) 5.2.1 (16.11.2023) ~~~~~~~~~~~~~~~~~~ * Fix: Add a fallback background for the editing preview iframe for sites without a background (Ian Price) * Fix: Remove search logging from project template so that new projects without the search promotions module will not error (Matt Westcott) * Fix: Ensure text only email notifications for updated comments do not escape HTML characters (Rohit Sharma) * Fix: Use logical OR operator to combine search fields for Django ORM in generic IndexView (Varun Kumar) * Fix: Ensure that explorer_results views fill in the correct next_url parameter on action URLs (Matt Westcott) * Fix: Fix crash when accessing the history view for a translatable snippet (Sage Abdullah) * Fix: Prevent upload of SVG images from failing when image feature detection is enabled (Joshua Munn) * Fix: Fix crash when using the locale switcher on the snippets create view (Sage Abdullah) * Fix: Fix performance regression on reports from calling `decorate_paginated_queryset` before pagination / filtering (Alex Tomkins) * Fix: Make searching on specific fields work correctly on Elasticsearch when boost is in use (Matt Westcott) * Fix: Prevent snippet permission post-migrate hook from failing on multiple database configurations (Joe Tsoi) * Fix: Reinstate ability to filter on page type when searching on an empty query (Sage Abdullah) * Fix: Prevent error on locked pages report when a user has locked multiple pages (Matt Westcott) * Docs: Fix code example for `{% picture ... as ... %}` template tag (Rezyapkin) 5.2 LTS (01.11.2023) ~~~~~~~~~~~~~~~~~~~~ * Redesigned page listing view (Ben Enright, Matt Westcott, Thibaud Colas, Sage Abdullah) * Support OpenSearch as an alternative to Elasticsearch (Matt Westcott) * Add support for Python 3.12 (Matt Westcott) * Add preview-aware and page-aware fragment caching template tags, `wagtailcache` & `wagtailpagecache` (Jake Howard) * Always set help text element ID for form fields with help text in `field.html` template (Sage Abdullah) * Move `SnippetViewSet` menu registration mechanism to base `ViewSet` class (Sage Abdullah) * Enable reference index tracking for models registered with `ModelViewSet` (Sage Abdullah) * When copying a page or creating an alias, copy its view restrictions to the destination (Sandeep Choudhary, Suyash Singh) * Support pickling of StreamField values (pySilver) * Move `SnippetViewSet` template override mechanism to `ModelViewSet` (Sage Abdullah) * Move `SnippetViewSet.list_display` to `ModelViewSet` (Sage Abdullah) * Remove `wagtail.publish` log action on aliases when they are created from live source pages or the source page is published (Dan Braghis) * Remove `wagtail.unpublish` log action on aliases when source page is unpublished (Dan Braghis) * Add compare buttons to workflow dashboard panel (Matt Westcott) * Add the ability to use filters and to export listings in generic `IndexView` (Sage Abdullah) * Move `list_filter`, `filterset_class`, `search_fields`, `search_backend_name`, `list_export`, `export_filename`, `list_per_page`, and `ordering` from `SnippetViewSet` to `ModelViewSet` (Sage Abdullah, Cynthia Kiser) * Add default header titles to generic `IndexView` and `CreateView` (Sage Abdullah) * Allow overriding `IndexView.export_headings` via `ModelViewSet` (Christer Jensen, Sage Abdullah) * Support specifying a `get_object_list` method on `ChooserViewSet` (Matt Westcott) * Add `linked_fields` mechanism on chooser widgets to allow choices to be limited by fields on the calling page (Matt Westcott) * Add support for merging cells within `TableBlock` with the `mergedCells` option (Gareth Palmer) * When adding a panel within `InlinePanel`, focus will now shift to that content similar to `StreamField` (Faishal Manzar) * Show the full first published at date within a tooltip on the Page status sidebar on the relative date (Rohit Sharma) * Extract generic breadcrumbs functionality from page breadcrumbs (Sage Abdullah) * Add support for `placement` in the `human_readable_date` tooltip template tag (Rohit Sharma) * Add breadcrumbs support to custom `ModelViewSet` views (Sage Abdullah) * Support passing extra context variables via the `{% component %}` tag (Matt Westcott) * Allow subclasses of `PagesAPIViewSet` override default Page model via the `model` attribute (Neeraj Yetheendran, Herbert Poul) * Allow `ModelViewSet` to be used with models that have non-integer primary keys (Sage Abdullah) * Add the ability to set an external link/text for promoted search result entries (TopDevPros, Brad Busenius) * Add support for subject and body in the Email link chooser form (TopDevPros, Alexandre Joly) * Extract generic `HistoryView` from snippets and add it to `ModelViewSet` (Sage Abdullah) * Add generic `UsageView` to `ModelViewSet` (Sage Abdullah) * Add the ability to define listing buttons on generic `IndexView` (Sage Abdullah) * Add a visual progress bar to the output of the `wagtail_update_image_renditions` management command (Faishal Manzar) * Increase the read buffer size to improve efficiency and performance when generating file hashes for document or image uploads, use `hashlib.file_digest` if available (Python 3.11+) (Jake Howard) * API ordering now supports multiple fields (Rohit Sharma, Jake Howard) * Pass block value to `Block.get_template` to allow varying template based on value (Florian Delizy) * Add `InlinePanel` DOM events for when ready and when items added or removed (Faishal Manzar) * Add a new `picture` template tag for Django Templates and Jinja (Thibaud Colas) * Add a new `srcset_image` template tag for Django Templates and Jinja (Thibaud Colas) * Support `Filter` instances as input for `AbstractImage.get_renditions()` (Thibaud Colas) * Improve error messages for image template tags (Thibaud Colas) * Do not render minimap if there are no panel anchors (Sage Abdullah) * Use dropdown buttons on listings in dashboard panels (Sage Abdullah) * Implement breadcrumbs design refinements (Thibaud Colas) * Support extending Wagtail client-side with Stimulus (LB (Ben) Johnston) * Update all `FieldPanel('title')` examples to use the recommended `TitleFieldPanel('title')` panel (Chinedu Ihedioha) * The `purge_revisions` management command now respects revisions that have a `on_delete=PROTECT` foreign key relation and won't delete them (Neeraj P Yetheendran, Meghana Reddy, Sage Abdullah, Storm Heg) * Add support for Shift + Click behaviour in form submissions and simple translations submissions (LB (Ben) Johnston) * Improve filtering of audit logging based on the user's permissions (Stefan Hammer) * Fix: Ensure that StreamField's `FieldBlock`s correctly set the `required` and `aria-describedby` attributes (Storm Heg) * Fix: Avoid an error when the moderation panel (admin dashboard) contains both snippets and private pages (Matt Westcott) * Fix: When deleting collections, ensure the collection name is correctly shown in the success message (LB (Ben) Johnston) * Fix: Filter out comments on Page editing counts that do not correspond to a valid field / block path on the page such as when a field has been removed (Matt Westcott) * Fix: Allow `PublishMenuItem` to more easily support overriding its label via `construct_page_action_menu` (Sébastien Corbin) * Fix: Allow locale selection when creating a page at the root level (Sage Abdullah) * Fix: Ensure the admin login template correctly displays all `non_fields_errors` for any custom form validation (Sébastien Corbin) * Fix: Ensure 'mark as active' label in workflow bulk action set active form can be translated (Rohit Sharma) * Fix: Ensure the panel title for a user's settings correctly reflects the `WAGTAIL_EMAIL_MANAGEMENT_ENABLED` setting by not showing 'email' if disabled (Omkar Jadhav) * Fix: Update Spotify oEmbed provider URL parsing to resolve correctly (Dhrűv) * Fix: Update link colours within help blocks to meet accessible contrast requirements (Rohit Sharma) * Fix: Ensure the search promotions popular search terms picker correctly refers to the correct model (LB (Ben) Johnston) * Fix: Correctly quote non-numeric primary keys on snippet inspect view (Sage Abdullah) * Fix: Prevent crash on snippet inspect view when displaying a null foreign key to an image (Sage Abdullah) * Fix: Ensure that pages in moderation show as "Live + In Moderation" in the page explorer rather than "Live + Draft" (Sage Abdullah) * Fix: Prevent error when updating reference index for objects with a lazy ParentalKey-related object (Chris Shaw) * Fix: Ignore conflicts when inserting reference index entries to prevent race conditions causing uniqueness errors (Chris Shaw) * Fix: Populate the correct return value when creating a new snippet within the snippet chooser (claudobahn) * Fix: Reinstate missing filter by page type on page search (Matt Westcott) * Fix: Ensure very long words can wrap when viewing saved comments (Chiemezuo Akujobi) * Fix: Avoid forgotten password link text conflicting with the supplied aria-label (Thibaud Colas) * Fix: Fix log message to record the correct restriction type when removing a page view restriction (Rohit Sharma, Hazh. M. Adam) * Fix: Avoid potential race condition with new Page subscriptions on the edit view (Alex Tomkins) * Fix: Use the correct action log when creating a redirect (Thibaud Colas) * Fix: Ensure that all password fields consistently allow leading & trailing whitespace (Neeraj P Yetheendran) * Docs: Expand documentation on using `ViewSet` and `ModelViewSet` (Sage Abdullah) * Docs: Document `WAGTAILADMIN_BASE_URL` on "Integrating Wagtail into a Django project" page (Shreshth Srivastava) * Docs: Replace incorrect screenshot for authors listing on tutorial (Shreshth Srivastava) * Docs: Add documentation for building non-model-based choosers using the _queryish_ library (Matt Westcott) * Docs: Fix incorrect tag library import on focal points example (Hatim Makki Hoho) * Docs: Add reminder about including your custom Draftail feature in any overridden `WAGTAILADMIN_RICH_TEXT_EDITORS` setting (Charlie Sue) * Docs: Mention the need to install `python3-venv` on Ubuntu (Brian Mugo) * Docs: Document the use of the Google developer documentation style guide in documentation (Damilola Oladele) * Docs: Fix Inconsistent URL Format in Getting Started tutorial (Olumide Micheal) * Maintenance: Fix snippet search test to work on non-fallback database backends (Matt Westcott) * Maintenance: Update Eslint, Prettier, Jest, a11y-dialog, axe-core and js-cookie npm packages (LB (Ben) Johnston) * Maintenance: Add npm scripts for TypeScript checks and formatting SCSS files (LB (Ben) Johnston) * Maintenance: Run tests in parallel in some of the CI setup (Sage Abdullah) * Maintenance: Remove unused WorkflowStatus view, urlpattern, and workflow-status.js (Storm Heg) * Maintenance: Add support for options/attrs in Telepath widgets so that attrs render on the created DOM (Storm Heg) * Maintenance: Update pre-commit hooks to be in sync with latest changes to Eslint & Prettier for client-side changes (Storm Heg) * Maintenance: Add `WagtailTestUtils.get_soup()` method for testing HTML content (Storm Heg, Sage Abdullah) * Maintenance: Allow `ViewSet` subclasses to customise `url_prefix` and `url_namespace` logic (Matt Westcott) * Maintenance: Simplify `SnippetViewSet` registration code (Sage Abdullah) * Maintenance: Rename groups `IndexView.results_template_name` to `results.html` (Sage Abdullah) * Maintenance: Migrate form submission listing checkbox toggling to the shared `w-bulk` Stimulus implementation (LB (Ben) Johnston) * Maintenance: Allow viewsets to define a common set of view kwargs (Matt Westcott) * Maintenance: Migrate the editor unsaved messages popup to be driven by Stimulus using the shared `w-message` controller (LB (Ben) Johnston, Hussain Saherwala) * Maintenance: Do not use jest inside `stubs.js` to prevent Storybook from crashing (LB (Ben) Johnston) * Maintenance: Refactor snippets templates to reuse the shared `slim_header.html` template (Sage Abdullah) * Maintenance: Refactor `slim_header.html` template to reduce code duplication (Sage Abdullah) * Maintenance: Upgrade Willow to v1.6.2 to support MIME type data without reliance on `imghdr` (Jake Howard) * Maintenance: Replace `imghdr` with Willow's built-in MIME type detection (Jake Howard) * Maintenance: Migrate all other `data-tippy` HTML attribute usage to the Stimulus data-*-value attributes for w-tooltip & w-dropdown (Subhajit Ghosh, LB (Ben) Johnston) * Maintenance: Replace `@total_ordering` usage with comparison functions implementation (Virag Jain) * Maintenance: Replace `