Changelog ========= 7.4 LTS (xx.xx.xxxx) - IN DEVELOPMENT ~~~~~~~~~~~~~~~~~~~~ * Add `is_deferred_validation` flag to support skipping custom validation when saving drafts (Daniel Kirkham) * Fix: Handle nested inline models when displaying object usage information (Sage Abdullah, Kacper Walęga, Tian Jie Wong) * Fix: Avoid duplicate `get_object()` DB query in API detail view (Siddheshwar Kadam) * Fix: Ensure `ImageBlock` alt text populates on choosing a new image after unchecking decorative state (Pratham Jaiswal) * Docs: Add documentation for the `filter_spec` parameter of `ImageRenditionField` (Soumya-codr) * Docs: Add guide for testing document upload forms (Wenli Tsai, Bhavesh Sharma) * Docs: Document the `nested_default_fields` attribute on API viewsets (Deepanshu Tevathiya) * Docs: Replace `http` with `https` in example URLs (Kunal Gupta) * Docs: Use `pathlib.Path` for settings in "Integrating into Django" documentation (Kunal Gupta) * Docs: Clarify example of how to implement custom embed finders (Naman Sharma S) * Docs: Add documentation for using the `ReferenceIndex` API (Saptami) * Docs: Retitle documentation page for settings contrib module to "Settings models" (Karl Hobley) * Maintenance: Removed support for Django 4.2 * Maintenance: Fix LocaleController test failures caused by differing timezone representations between Node versions (Saptami, Matt Westcott) * Maintenance: Fix frontend coverage upload to Codecov (Sage Abdullah) * Maintenance: Update semgrep to 1.150.0 (Pravin Kamble) * Maintenance: Fix `hash_filelike` test case to account for line break differences on Windows (Mustansir Dabhiya) * Maintenance: Fix temporary file handling in redirect import tests on Windows (Mustansir Dabhiya) * Maintenance: Fix use of platform-specific date formatting in edit handler tests (Mustansir Dabhiya) * Maintenance: Bump Node.js to 24 (active LTS), upgrade Jest and Storybook (Sage Abdullah) 7.3 (03.02.2026) ~~~~~~~~~~~~~~~~ * Add support for Django 6.0 * Resize overly large avatar images on upload (Harshit Ranjan) * Add natural keys for `Page` and `Collection` models (Samya Aggarwal) * Add Loom oEmbed provider (Nick Ivons) * Add `ModelViewSet.pk_path_converter` with defaults for `IntegerField` and `UUIDField` primary keys (Seb Corbin) * Improve accessibility for sidebar menu with visual active (expanded) menu item indicators (Vignesh Shivhare) * Add `before_edit_setting` / `after_edit_setting` hooks (Baptiste Mispelon) * Lower default AVIF encoding quality from 80 to 73 (Thibaud Colas) * Provide a structured rendering of `StreamBlock` in comparison view (Taras Panasiuk) * Add support for settings and custom block layouts for StructBlock (Sage Abdullah) * Add llms.txt versions of the developer documentation and Wagtail user guide (Thibaud Colas) * Lower default JPEG and AVIF image quality settings to provide consistent perceptual quality between formats (Thibaud Colas) * Add support for custom content checks with client-side registration (Thibaud Colas) * Initial support for autosave (Matt Westcott, Sage Abdullah) * Fix: Do not try to resolve locale during fixture load (Jake Howard, Seb Corbin) * Fix: Gracefully handle oEmbed responses with a non-200 status or missing type (Shivam Kumar, Bhavesh Sharma) * Fix: Keep action button labelled as "Publish" rather than "Schedule to publish" if go-live date has passed (Vishrut Ramraj) * Fix: Pass accumulated icons to each `register_icons` hook (Joey Jurjens, Sage Abdullah) * Fix: Skip revisions that are missing the specified field in StreamField migrations (Joshua Munn) * Fix: Preserve listing search and filter parameters when redirecting from bulk actions (Sage Abdullah) * Fix: Ensure that object references within `TypedTableBlock` are counted in the reference index (Aman Bora) * Fix: Fix slug auto-generation when slug field is omitted from page edit form (Pravin Kamble) * Fix: Ensure `request.is_preview` and `request.preview_mode` are set for password-required responses (Ishtpreet Singh) * Fix: Optimise storage of redirect paths containing Unicode characters and ensure percent-encoded characters are matched case-insensitively (Andy Babic, Florin Barnea, Aman Bora, Matt Westcott) * Fix: Ensure that reference index records are deleted when the target object is deleted (bettercallok) * Fix: Ensure filters are applied to export button URLs in custom page listings (Ritik Arya, Sage Abdullah) * Fix: Prevent conflicting IDs in nested `StructBlock`s with blocks named `content` (Sage Abdullah, Serkan Korkusuz) * Fix: CVE-2026-25517: Improper permission handling on admin preview endpoints (thxtech, Matt Westcott, Jake Howard) * Docs: Recommend running `purge_embeds` after an embed provider changes policies (Paul Souders) * Docs: Document `WAGTAILIMAGES_FORMAT_CONVERSIONS` in the settings docs (David Buxton) * Docs: Wording changes to Draftail extension docs to improve searchability (Lasse Schmieding) * Docs: Fix StreamField param name (Baptiste Mispelon) * Docs: Clarify that `before_delete_page` and similar hooks only trigger on the individual page view, not bulk actions (Shivam Kumar) * Docs: Clarify template location in custom user model documentation (Akhil Muraleedharan) * Docs: Improve signposting for contributor docs (Matt Westcott) * Docs: Add mention of novalidate attribute in form builder docs (Thibaud Colas) * Docs: Fix formatting for `PageQuerySet.prefetch_related` performance note (Lasse Schmieding) * Docs: Fix path to `search.html` in tutorial (Lee Hart) * Docs: Grammar fixes to contributor guidelines (Biswajeet Yadav) * Docs: Mention punctuation is unsupported in paths for `RoutablePageMixin` (Tibor Leupold) * Docs: Various typo and grammar fixes (Mustansir Dabhiya) * Docs: Improve instructions for building documentation on Windows (Mustansir Dabhiya) * Docs: Provide recommended image quality settings for common use cases (Thibaud Colas) * Docs: Add detailed documentation on reordering within generic listing view (Ankit Chaudhary) * Docs: Document early notification process for security releases (Jake Howard) * Docs: Remove mention of Wagtailtrans from internationalization docs (Andreas Nüßlein) * Maintenance: Dropped support for Django 5.1 * Maintenance: Updated NPM packages (LB (Ben) Johnston) * Maintenance: Rationalize front-end linting tasks and run concurrently (LB (Ben) Johnston) * Maintenance: Add a basic set of Storybook stories for the Stimulus Autosize controller (LB (Ben) Johnston) * Maintenance: Remove use of `_WAGTAILSEARCH_FORCE_AUTO_UPDATE` in search tests (Matt Westcott) * Maintenance: Add unit test for `SubmitController` error handling (LB (Ben) Johnston) * Maintenance: Improve nightly release upload scripts (Jake Howard) * Maintenance: Upload redundant `latest.whl` nightly build for ease of use with package managers (Sage Abdullah) * Maintenance: Move MANIFEST.in settings into pyproject.toml (Pravin Kamble) * Maintenance: Fix linting rules B006 and B904 (Vivek Subramani, Matt Westcott) * Maintenance: Remove jQuery dependency for image URL generator (LB (Ben) Johnston) * Maintenance: Upgrade to django-modelcluster 6.4.1 for Django 6.0 compatibility (Matt Westcott) * Maintenance: Refactor CreateView/EditView validation logic to support non-form validation (Matt Westcott) * Maintenance: Formalized support for Django 6.0 (Pravin Kamble) * Maintenance: Add `no-jquery` ESLint plugin to start final deprecation of jQuery (LB (Ben) Johnston) * Maintenance: Add `mode` value to `w-teleport` to allow different DOM update strategies (Sage Abdullah) * Maintenance: Ignore 'build' dir when running ESLint (Matt Westcott) * Maintenance: Upgrade to django-tasks 0.11.0 for Django 6.0 and Python 3.11 compatibility (Guilhem Saurel) * Maintenance: Switch userbar items to the template components API (Thibaud Colas) 7.2.2 (03.02.2026) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent conflicting IDs in nested `StructBlock`s with blocks named `content` (Sage Abdullah, Serkan Korkusuz) * Fix: CVE-2026-25517: Improper permission handling on admin preview endpoints (thxtech, Matt Westcott, Jake Howard) 7.2.1 (26.11.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Allow userbar in page previews to render without needing to configure site record (Sage Abdullah) * Fix: Disable usage count ordering when searching on documents and images listing views, to prevent unsupported search query (Sage Abdullah) * Fix: Do not replace existing document or image title when uploading a new file (Sage Abdullah) * Fix: Use a more efficient query for fetching usage counts on image and document listings when not ordering by usage count (Sage Abdullah) * Fix: Add composite indexes to improve reference index performance (Sage Abdullah) * Maintenance: Remove use of `_WAGTAILSEARCH_FORCE_AUTO_UPDATE` in search tests (Matt Westcott) 7.2 (05.11.2025) ~~~~~~~~~~~~~~~~ * Added support for Python 3.14 (Sage Abdullah) * Add usage count filter to the admin image and document listings (Joel William) * Add keyboard shortcut (`?`) to activate the keyboard shortcuts dialog (Dhruvi Patel) * Add keyboard shortcut (`/`) to activate and focus on the search input in the sidebar (Dhruvi Patel) * Allow deep contentpath for comments on fields other than StreamField (Lasse Schmieding, Sébastien Corbin, Joel William, Sage Abdullah) * Reorganize keyboard shortcuts into better categories with an ordering from most common to most specific (Dhruvi Patel) * Add `max_value` of 100 (%) for the `closeness` field in Image URL Generator form (LB (Ben) Johnston) * Add reordering support to generic model and snippet listing views (Joey Jurjens, Sage Abdullah) * Add messaging within the keyboard shortcuts dialog to indicate when keyboard shortcuts are disabled or how to disable them via user preferences (Pravin Kamble) * Allow defining a custom `WorkflowLock` subclass via `Task.lock_class` in a custom task (Dan Braghis) * Add new toggle from grid to list layout for image choosers (Joel William) * Update grid-list layout toggle to new design (Joel William) * Add readability score metric to content checks (Thibaud Colas) * Add explainer panel for content metrics (Thibaud Colas) * Add a button to jump to the first validation error in header messages (Srishti Jaiswal, Sage Abdullah, LB (Ben) Johnston) * Support calculating content metrics without opening the preview panel (Sage Abdullah) * Update project template settings to use pathlib Path object (Eric Matthes) * Migrate to django-modelsearch library, providing Elasticsearch 9 and OpenSearch backends (Karl Hobley, Matt Westcott) * Fix: Use the correct method of resolving the file storage dynamically for FileField usage in images & documents (Amir Mahmoodi) * Fix: Ensure the add comment keyboard shortcut is disabled when keyboard shortcuts are disabled in user preferences (Dhruvi Patel) * Fix: Use model name when ordering by page type in page listings (Sage Abdullah) * Fix: Prevent error from default `update_fields` parameter on `Page.asave()` (Tosinibikunle) * Fix: Ignore hidden error messages in minimap & `CountController` default `findValue` (Sage Abdullah) * Fix: Change default ordering for `UserViewSet` to `User.USERNAME_FIELD` to support default ordering with custom User models that may not have a `name` field (Lynwee) * Fix: Ensure starter tests in the project template pass (Lasse Schmieding) * Fix: Ensure fixed RichText toolbar shows under footer actions (Maciek Baron) * Fix: Prevent error when iterating over specific tasks with missing models (Lasse Schmieding) * Fix: Ensure `TableBlock` header dropdown default option can be translated (arpitmak) * Fix: Fix missing cache key prefix when removing cached redirect files (Heric Libong) * Docs: Fix cross-reference links to the TypeDoc-generated docs (Sage Abdullah) * Docs: Refine readthedocs' search indexing for releases and client-side code (Sage Abdullah) * Docs: Fix incorrect link to third party site in advanced topics (Yousef Al-Hadhrami (Yemeni)) * Docs: Fix incorrect import references and update steps for clarity in getting started tutorial (Hunzlah Malik, Pravin Kamble) * Docs: Fix code example for `construct_wagtail_userbar` (Baptiste Mispelon) * Docs: Add a note about CSP for background image position and responsive embed styles (Thibaud Colas, Chiemezuo Akujobi, Sage Abdullah) * Docs: Add guidance for AI-led contributions to contributor docs (Andrew Selzer) * Docs: Add guidance for AI agents via `AGENTS.md` (Andrew Selzer) * Docs: Add Windows command examples for contributing setup (Shivam Kumar) * Docs: Add recent third party tutorials from 2025 (LB (Ben) Johnston) * Maintenance: Removed support for Python 3.9 (Matt Westcott) * Maintenance: Updated NPM packages and linting configuration (LB (Ben) Johnston) * Maintenance: Added linting script to keep package.json and pre-commit package versions in sync (LB (Ben) Johnston) * Maintenance: Migrate privacy switch modal field hiding to the Stimulus `RulesController` (LB (Ben) Johnston) * Maintenance: Add semgrep rules for inline styles and scripts (Chiemezuo Akujobi, Sage Abdullah) * Maintenance: Fix intermittent test failures caused by nondeterministic order in TestFilteredModelChoiceField (Sage Abdullah) * Maintenance: Add support for `attrs` in `formattedfield` tag & clean up other usages of the `attrs` template include (LB (Ben) Johnston) * Maintenance: Allow exempting external templates from number formatting checks (Sage Abdullah) * Maintenance: Migrate file title generation to SyncController for CSP compliance (Aayushman Singh, Chiemezuo Akujobi, LB (Ben) Johnston, Sage Abdullah) * Maintenance: Remove outdated pytest configuration (Shivam Kumar) * Maintenance: Avoid mutable default argument in `ImageNode` within image template tags (minusf) * Maintenance: Use consistent sentence format for user-facing errors (LB (Ben) Johnson) * Maintenance: Update django-tasks dependency to allow 0.9, for preliminary Django 6.0 support (Sage Abdullah) * Maintenance: Fix linting issues B009, B010, B033 (minusf) 7.1.3 (03.02.2026) ~~~~~~~~~~~~~~~~~~ * Fix: Allow userbar in page previews to render without needing to configure site record (Sage Abdullah) * Fix: Disable usage count ordering when searching on documents and images listing views, to prevent unsupported search query (Sage Abdullah) * Fix: Prevent conflicting IDs in nested `StructBlock`s with blocks named `content` (Sage Abdullah, Serkan Korkusuz) * Fix: CVE-2026-25517: Improper permission handling on admin preview endpoints (thxtech, Matt Westcott, Jake Howard) 7.1.2 (23.10.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Allow `label_format` to be set to an empty string to hide the block summary label (Sage Abdullah) * Fix: Better support userbar loading on multi-site through site hosts (Sage Abdullah) * Fix: Prevent error on custom generic create and edit views without a header icon (Sage Abdullah) * Fix: Use the correct origin when computing content metrics via cross-origin communications (Sage Abdullah) * Docs: Link to django-treebeard's `Node.move()` in `Page.move()` documentation (Baptiste Mispelon) 7.1.1 (28.08.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Ensure the add comment keyboard shortcut is disabled when keyboard shortcuts are disabled in user preferences (Dhruvi Patel) * Fix: Fix crash when the Wagtail API is accessed without `rest_framework` installed (Vijay Raj) * Fix: Fix failure of `FieldPanel` and `TitleFieldPanel` with `read_only=True` (Sage Abdullah) * Fix: Fix broken Javascript interactions on nested inline panels (Matt Westcott, Sage Abdullah) * Fix: Fix rendering of StructBlock with custom form templates (Sage Abdullah) * Fix: Prevent crash when previewing a form page with an empty field type (Sage Abdullah) * Docs: Fix cross-reference links to the TypeDoc-generated docs (Sage Abdullah) * Docs: Refine readthedocs' search indexing for releases and client-side code (Sage Abdullah) * Docs: Add section about closing stale pull requests to the issue tracking documentation (Thibaud Colas, Sage Abdullah, LB (Ben) Johnston) * Docs: Add backporting policy for UI and accessibility fixes with updated "active support" and "security support" definitions (Thibaud Colas, Sage Abdullah, Scott Cranfill) 7.1 (04.08.2025) ~~~~~~~~~~~~~~~~ * Allow configuring permissions for site settings on a per-site basis (Matt Westcott) * Add iHeart oEmbed provider (Storm Heg) * Add locale-aware `NumberColumn` to display numbers in universal listings (Baptiste Mispelon) * Add ability for the header breadcrumbs to save their open/closed state across navigation & refresh (Srishti Jaiswal) * Update Twitter oEmbed provider to recognize x.com links (manu) * Render listing buttons as template components (Sage Abdullah) * Define default `GenericRelations` for `RevisionMixin` and `WorkflowMixin`, to avoid issues with deletion cascades (Sage Abdullah) * Document and relocate the `init_new_page` signal (Maciek Baron) * Use `requests` to access oEmbed endpoints, for more robust SSL certificate handling (Matt Westcott) * Ensure that bulk deletion views respect protected foreign keys (Sage Abdullah) * Add minimum length validation for `RichTextBlock` and `RichTextField` (Alec Baron) * Allow `SnippetChooserBlock`'s `icon` to take precedence over `SnippetViewSet.icon` (Matt Westcott) * Allow searching the users index on custom fields (Paul Craciunoiu, Sage Abdullah) * Support `preserve-svg` in Jinja2 image tags (Vishesh Garg) * Recognize `preserve-svg` as a filter when calling `Image.get_rendition` directly (Richard Allen) * Add support for `preserve-svg` for `Image.get_renditions`, picture, and srcset_image tags (Matt Westcott) * Include `TypedTableBlock` content when indexing for search (Charan T M) * Preserve query parameters when redirecting from the API `find` view to the `detail` view (Andrew Hosgood) * Add 'Edit' button to success message after copying page (Dhruvi Patel) * Restrict file dialog in multiple image uploader to the allowed image file types (Mustopha Mubarak O) * Raise clear error when non-StreamBlock is used as top-level block in StreamField (Clifford Gama) * Refactor user bar rendering to better support headless websites (Sage Abdullah) * Add type-to-confirm step when deleting large numbers of pages through bulk actions (Rachel Smith) * Add `NoFutureDateValidator` to validate against dates in the future (Talha Rizwan) * Extract separate `background_position_x` and `background_position_y` properties from `AbstractRendition.background_position_style` (Chiemezuo Akujobi) * Add support for translated string concatenation in the locale selector when switching between a model's language in the admin (Matt Westcott, Ellie Walsh-O'Neill) * Switch to check / cross icons for users’ active state in users listing (Sage Abdullah) * Add a keyboard shortcut to easily toggle the visibility of the minimap side panel (Dhruvi Patel) * Add a new user profile setting to disable Wagtail’s custom keyboard shortcuts (Dhruvi Patel) * Add API for extracting preview page content (Sage Abdullah) * Add toggle from grid to list layout for image listings (Joel William) * Add `UsageCountColumn` to document and image listings (Joel William, Sage Abdullah) * Make `StructBlock`s collapsible when nested to support block settings (Sage Abdullah) * Improve `label_format` support for more widget types in StreamField (Sage Abdullah) * Add `form_attrs` support to all StreamField blocks (Sage Abdullah) * Update project template documentation to include testing instructions and include starting test file in template (Aditya (megatrron)) * Add support for `preview_value` and `default` in `Block` meta options as callables for dynamic previews within StreamField (Ziyao Yan, Sage Abdullah) * Add previews support for generic and site settings (Sébastien Corbin, Sage Abdullah) * Provide client-side access to the editing form panel structure (Matt Westcott) * Make transliteration of titles to slugs locale-aware, and provide further customisation options (LB (Ben) Johnston) * Add a keyboard shortcut to easily toggle the visibility of the main menu (Dhruvi Patel) * Fix: Handle lazy translation strings as `preview_value` for `RichTextBlock` (Seb Corbin) * Fix: Fix handling of newline-separated choices in form builder when using non-windows newline characters (Baptiste Mispelon) * Fix: Ensure `WAGTAILADMIN_LOGIN_URL` is respected when logging out of the admin (Antoine Rodriguez, Ramon de Jezus) * Fix: Fix behavior of `ViewSet.inject_view_methods` with multiple methods (Gorlik) * Fix: Preserve query strings in URLs submitted to CloudFront for invalidation (Jigyasu Rajput) * Fix: Handle non-JSON-safe fields in `exclude_fields_in_copy` (Matt Westcott) * Fix: Allow upload of AVIF images through image chooser on Firefox (Matt Westcott) * Fix: Accept any string beginning with 'y' as confirmation for `import_redirects` command (Matt Westcott) * Fix: Fix error when accessing the submissions listing view with a non-form page (Sage Abdullah) * Fix: Replace inline styles with CSS classes in HTML files (Srishti Jaiswal) * Fix: Refactor remaining inline styles to avoid unsafe-inline style-src CSP (Chiemezuo Akujobi) * Fix: Avoid breaking words in listing table cells unless specifically enabled (Ziyao Yan) * Fix: Ensure that "all items in listing" option on image / document bulk actions respects user permissions (Alex Morega) * Fix: Adjust accessibility dialog position based on user bar position (Anees Asghar, Sage Abdullah) * Fix: Correctly handle ordering API results by mixed ascending and descending order (Rohit Sharma, Mahmoud Nasser) * Fix: Ensure that draft changes to an editable `first_published_at` field are preserved on reloading (Talha Rizwan) * Fix: Remove ngram parser on MySQL that prevented autocomplete search from returning results (Vince Salvino) * Fix: Only enable ManifestStaticFilesStorage in production settings, to aid test running (M. Sumair Khokhar) * Fix: Update `BooleanColumn` icons so they can be distinguished without relying on color (Sage Abdullah) * Fix: Do not delete default homepage by ID in home app migration (Matt Westcott) * Fix: Update the start project template to align with Django's recommendation to have the `django.middleware.security.SecurityMiddleware` first (Brylie Christopher Oxley) * Fix: Ensure keyboard usage will correctly focus on new comments, including replies, when the side panel is open or closed (Dhruvi Patel) * Fix: Handle `help_text` kwarg in `FloatBlock` (Nick Smith) * Fix: Set `aria-invalid` on StreamField widgets input when there is an error (Sage Abdullah) * Fix: Make sure the label of panel collapse buttons is translatable (Thibaud Colas) * Fix: Ensure there is suitable padding for large numbers on pagination within universal listings (M. Sumair Khokhar) * Fix: Use the correct localized format utils in the `human_readable_date` template tag (Seb Corbin) * Fix: Ensure the editing of translation alias pages correctly shows links to the source page if the alias was created from a draft (Dan Braghis) * Fix: Support complex `order_by` expressions in database search backends (Seb Corbin) * Fix: Improve handling of capitalization of InlinePanel labels and headings (Stefan Hammer) * Docs: Add missing tag library imports to footer template code in tutorial (Dimaco) * Docs: Improve documentation around securing user-uploaded files (Jake Howard) * Docs: Introduce search_fields in a dedicated tutorial section instead of the introduction (Matt Westcott) * Docs: Add note about PDF XSS to security page (Matt Westcott) * Docs: Add documentation for how to group blocks within the StreamField picker (Gaurav Verma) * Docs: Clarify the user bar does not have moderation features (Sage Abdullah) * Docs: Add experimental documentation for admin UI components and client-side code (Sage Abdullah) * Docs: Clean up JSDoc documentation comments, syntax, and update spelling where suitable (LB (Ben) Johnston) * Docs: Add more examples of all images settings and include `avif` in `WAGTAILIMAGES_EXTENSIONS` example (Thibaud Colas) * Docs: Add an example of using `data-edit-form` and interacting with the editor form and preview panel (Sage Abdullah) * Maintenance: Refactor `get_embed` to remove `finder` argument which was only used for mocking in unit tests (Jigyasu Rajput) * Maintenance: Simplify handling of `None` values in `TypedTableBlock` (Jigyasu Rajput) * Maintenance: Remove squash.io configuration (Sage Abdullah) * Maintenance: Use `utf8mb4` charset and collation for MySQL test database (Sage Abdullah) * Maintenance: Add `django.contrib.postgres` to test settings `INSTALLED_APPS` (Sage Abdullah) * Maintenance: Add integrity & resolved checksums to package-lock.json (Sylvain Fankhauser) * Maintenance: Replace `SlugController` with more generic and reusable `CleanController` (LB (Ben) Johnston) * Maintenance: Remove outdated nginx / uWSGI example config files from `/etc` (LB (Ben) Johnston) * Maintenance: Use browser built-in `EventTarget` instead of `events.EventEmitter` from Webpack (Sage Abdullah) * Maintenance: Split code from `telepath/widgets.js` into separate files (Matt Westcott) * Maintenance: Update development UI guidelines to adopt best practices for image handling within the admin interface (Thibaud Colas) * Maintenance: Bump minimum Willow version to v1.11.0 to use Pillow's built-in AVIF support (Sage Abdullah) * Maintenance: Add overridable blocks in comments and checks side panel templates (Sage Abdullah) * Maintenance: Rewrite Tabs component frontend to use Stimulus and TypeScript (Sai Srikar Dumpeti, LB (Ben) Johnston, Sage Abdullah) * Maintenance: Upgrade django-tasks to 0.8.x (Jake Howard) * Maintenance: Refresh accessibility targets in contributing docs (Thibaud Colas) 7.0.5 (12.02.2026) ~~~~~~~~~~~~~~~~~~ * Remove upper bound on Pillow dependency (Kunal Hemnani) 7.0.4 (03.02.2026) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent error on custom generic create and edit views without a header icon (Sage Abdullah) * Fix: CVE-2026-25517: Improper permission handling on admin preview endpoints (thxtech, Matt Westcott, Jake Howard) 7.0.3 (28.08.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent crash when previewing a form page with an empty field type (Sage Abdullah) 7.0.2 (24.07.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent error when restoring scroll position for cross-domain preview iframe (Sage Abdullah) * Fix: Remove ngram parser on MySQL that prevented autocomplete search from returning results (Vince Salvino) * Fix: Ensure the editing of translation alias pages correctly shows links to the source page if the alias was created from a draft (Dan Braghis) 7.0.1 (12.06.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Fix type hints for `register_filter_adapter_class` parameters (Sébastien Corbin) * Fix: Use correct URL when redirecting back to the listing after filtering and deleting form submissions (Sage Abdullah) * Fix: Fix broken migration when ListBlock is defined with a `child_block` kwarg (Matt Westcott) * Fix: Fix saving of empty values in EmbedBlock (Matt Westcott) * Fix: Sanitize request data when logging method not allowed (Jake Howard) * Docs: Use tuple instead of set in `UniqueConstraint` examples for a custom rendition model to avoid spurious migrations (Alec Baron) * Docs: Document how to turn off StreamField block previews (Shlomo Markowitz) * Maintenance: Use `utf8mb4` charset and collation for MySQL test database (Sage Abdullah) 7.0 LTS (06.05.2025) ~~~~~~~~~~~~~~~~~~~~ * Add formal support for Django 5.2 (Matt Westcott) * Allow validation of required fields to be deferred on saving drafts (Matt Westcott, Sage Abdullah) * Add `WAGTAIL_` prefix to Wagtail-specific tag settings (Aayushman Singh) * Implement `normalize` on `TypedTableBlock` to assist with setting `default` and `preview_value` (Sage Abdullah) * Apply normalization when modifying a `StreamBlock`'s value to assist with programmatic changes to `StreamField` (Matt Westcott) * Allow a custom image rendition model to define its unique constraint with `models.UniqueConstraint` instead of `unique_together` (Oliver Parker, Cynthia Kiser, Sage Abdullah) * Default to the `standard` tokenizer on Elasticsearch, to correctly handle numbers as tokens (Matt Westcott) * Add color-scheme meta tag to Wagtail admin (Ashish Nagmoti) * Add the ability to set the default privacy restriction for new pages using `get_default_privacy_setting` (Shlomo Markowitz) * Improve performance of batch purging page urls in the frontend cache, avoiding n+1 query issues (Andy Babic) * Add better support and documentation for overriding or extending icons used in the in the userbar (Sébastien Corbin) * List the comments action, if comments are enabled, within the admin keyboard shortcuts dialog (Dhruvi Patel) * Add better support and documentation for overriding the default field widgets used within form pages (Baptiste Mispelon) * Allow workflow tasks to specify a template for the action modal via `get_template_for_action` (Sage Abdullah) * Change 'Publish' button label to 'Schedule to publish' if go-live schedule is set (Sage Abdullah) * Exclude snippets that have their own menu items from the "Snippets" menu (Andy Chosak, Matt Westcott) * Introduce new designs for listings and chooser pagination (except page chooser) (Jordan Teichmann, Sage Abdullah) * Add default "Locale" column to listings and choosers of translatable models (Dan Braghis, Sage Abdullah) * Apply current content's locale in choosers by default and add the ability to clear the locale filter (Dan Braghis) * Hide add locale button when no more languages are available (Dan Braghis) * Allow customizing `InspectView` field display value via methods on the view (Dan Braghis) * Make rendering of active listing filters extensible, to support additional filter types (Sage Abdullah) * Fix: Take preferred language into account for translatable strings in client-side code (Bernhard Bliem, Sage Abdullah) * Fix: Do not show the content type column as sortable when searching pages (Srishti Jaiswal, Sage Abdullah) * Fix: Support simple subqueries for `in` and `exact` lookup on Elasticsearch (Sage Abdullah) * Fix: Force preview panel scroll behavior to instant to avoid flickering (Sage Abdullah) * Fix: Support translating with the preferred language for rich text formatting labels (Bernhard Bliem, Sage Abdullah) * Fix: Make "Actions" label translatable within the rich text toolbar (Bernhard Bliem, Sage Abdullah) * Fix: Fix incorrect "Views (past week)" heading on promoted search results listing (Baptiste Mispelon) * Fix: Ensure `InlinePanel` will be correctly ordered after the first save when `min_num` is used (Elhussein Almasri, Joel William) * Fix: Avoid deprecation warnings about URLField `assume_scheme` on Django 5.x (Sage Abdullah) * Fix: Fix setup.cfg syntax for setuptools v78 (Sage Abdullah) * Fix: Ensure `ImproperlyConfigured` is thrown from `db_field` on unbound `FieldPanel`s as intended (Matt Westcott) * Fix: Refine the positioning of the add comment button next to select, radio, checkbox fields and between field row columns (Srishti Jaiswal) * Fix: Show the correct privacy status for child collections of private collections (Shlomo Markowitz) * Fix: Ensure reference index correctly handles models with primary keys not named `id` (Sage Abdullah) * Fix: On "move page" bulk action, do not prefill the destination with the root page (Stefan Hammer) * Fix: Ensure the default preferred language respects the `WAGTAILADMIN_PERMITTED_LANGUAGES` setting (Sébastien Corbin) * Fix: Ensure there is consistent padding in homepage panels table headers (Aditya (megatrron)) * Fix: Prevent redundant calls to context processors when rendering userbar (Ihor Marhitych) * Fix: Fix validation of duplicate field names in form builder when fields have been deleted (Ian Meigh) * Fix: Fix font size of footer action buttons when there is only one item (Sage Abdullah) * Docs: Add missing `django.contrib.admin` to list of apps in "add to Django project" guide (Mohamed Rabiaa) * Docs: Add tutorial on deploying on Ubuntu to third-party tutorials (Mohammad Fathi Rahman) * Docs: Document that request_or_site is optional on BaseGenericSetting.load (Matt Westcott) * Docs: Mention third-party StreamField based form builder packages in the form builder documentation (Matt Westcott) * Docs: Clarify that `insert_editor_js` hook applies to all core editing/creation views (LB (Ben) Johnston) * Docs: Clarify requirement for non-page models using model mixins to be registered as snippets (Sage Abdullah) * Docs: Clarify that `Page.get_url_parts` will return a tuple, not `None` for `NoReverseMatch` errors (Arthur Tripp) * Docs: Add how-to Django Ninja to API documentation (Thibaud Colas) * Docs: Document the `expand_db_html` utility function to create HTML ready for display (Thibaud Colas) * Docs: Mention `expand_db_html` usage for rich text in REST framework API (Thibaud Colas) * Docs: Further document usage of API `?limit` with `WAGTAILAPI_LIMIT_MAX` (Thibaud Colas) * Maintenance: Migrate away from deprecated Sass import rules to module system (Srishti Jaiswal) * Maintenance: Apply Sass mixed declarations migration in preparation for CSS nesting (Prabhpreet Kaur) * Maintenance: Refactor styles for Draftail, minimap, and comments to fix remaining Sass migration warnings (Thibaud Colas) * Maintenance: npm package updates; `downshift`, `focus-trap-react`, `immer`, `redux`, `uuid` (LB (Ben) Johnston) * Maintenance: Validate against invalid characters in Lexeme values (Matt Westcott) * Maintenance: Split up `wagtail.models` module into submodules (Matt Westcott) * Maintenance: Update `ruff` to 0.9.6 (Sage Abdullah) * Maintenance: Fix up `stubs` & `adapter` contents to better support Jest testing (LB (Ben) Johnston) * Maintenance: Cleanup Stimulus controller imports, JSDoc & linting (LB (Ben) Johnston) * Maintenance: Rename `SkipLinkController` to `FocusController` with improved reusability, updated unit tests, and added story (LB (Ben) Johnston) * Maintenance: Fix CI testing issues with the Stimulus `LocaleController` time zones & non-deterministic page ordering tests (Sage Abdullah) * Maintenance: Make GitHub highlight `.html` files as Django templates (Jake Howard) * Maintenance: Remove admin JavaScript imports from shared template includes, moving the imports to the appropriate core admin inclusion locations (Sai Srikar Dumpeti) * Maintenance: Remove non-editing view inclusions of the `insert_editor_js` hook output, deprecate the wrapper template tag `_editor_js.html` (Sai Srikar Dumpeti, LB (Ben) Johnston) * Maintenance: Remove upper bound on Django dependency (Matt Westcott) * Maintenance: Add `default_auto_field` setting to home app in project template (Sylvain Boissel) * Maintenance: Migrate setuptools configuration from `setup.py` and `setup.cfg` to `pyproject.toml` (Sage Abdullah) * Maintenance: Refactor `move_choose_destination` to a class-based view (Chiemezuo Akujobi) * Maintenance: Remove deprecated `wagtailadmin/shared/ajax_pagination_nav.html` template (Sage Abdullah) * Maintenance: Formally deprecate support for listing views with no breadcrumbs (Sage Abdullah) * Maintenance: Update `django-tasks` to 0.7.x (Jake Howard) 6.4.2 (12.06.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Do not show upgrade notification if the installed version is the latest (Sage Abdullah) * Fix: Use correct URL when redirecting back to the listing after filtering and deleting form submissions (Sage Abdullah) * Fix: Fix broken migration when ListBlock is defined with a `child_block` kwarg (Matt Westcott) * Fix: Sanitize request data when logging method not allowed (Jake Howard) * Maintenance: Use `utf8mb4` charset and collation for MySQL test database (Sage Abdullah) 6.4.1 (21.02.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent error when filtering by locale and searching with Elasticsearch (Sage Abdullah) * Fix: Support searching `none()` querysets (Matt Westcott) * Fix: Correctly handle UUID primary keys when invoking background tasks (Matt Westcott) * Fix: Fix regression where nested sub-menu items would not be visible (Sage Abdullah) * Fix: Ensure the top of the minimap correctly adjusts when resizing the browser viewport (Thibaud Colas) * Fix: Remove obsolete SubqueryConstraint check in search backends, for provisional Django 5.2 compatibility (Sage Abdullah) * Fix: Add missing “Close” label to the upgrade notification dismiss button (Sage Abdullah) * Fix: Fix white text on white background in previews for sites that use color-scheme without a background-color (Sage Abdullah) * Docs: Fix typo in the headless documentation page (Mahmoud Nasser) * Docs: Fix typo in `Page.get_route_paths` docstring (Baptiste Mispelon) * Docs: Upgrade sphinx-wagtail-theme to v6.5.0 (Sage Abdullah) * Maintenance: Remove upper version boundary for django-filter (Dan Braghis) * Maintenance: Relax upper version boundaries for django-taggit and beautifulsoup4 (Matt Westcott) 6.4 (03.02.2025) ~~~~~~~~~~~~~~~~ * Support for background tasks using `django-tasks` (Jake Howard) * Add search terms report (Noah van der Meer, Sage Abdullah) * Add the ability to apply basic Page QuerySet optimizations to `specific()` sub-queries using `select_related` & `prefetch_related` (Andy Babic) * Increase `DATA_UPLOAD_MAX_NUMBER_FIELDS` in project template (Matt Westcott) * Stop invalid Site hostname records from breaking preview (Matt Westcott) * Set sensible defaults for InlinePanel heading and label (Matt Westcott) * Limit tags autocompletion to 10 items and add delay to avoid performance issues with large number of matching tags (Aayushman Singh) * Add the ability to restrict what types of requests a Pages supports via `allowed_http_methods` (Andy Babic) * Allow plain strings in panel definitions as shorthand for `FieldPanel` / `InlinePanel` (Matt Westcott) * Only allow selection of valid new parents within the copy Page view (Mauro Soche) * Add `on_serve_page` hook to modify the serving chain of pages (Krystian Magdziarz, Dawid Bugajewski) * Add support for `WAGTAIL_GRAVATAR_PROVIDER_URL` URLs with query string parameters (Ayaan Qadri, Guilhem Saurel) * Add `get_avatar_url` hook to customise user avatars (James Harrington) * Set content security policy (CSP) headers to block embedded content when serving images and documents (Jake Howard, with thanks to Ali İltizar for the initial report) * Add `page` as a third parameter to the `construct_wagtail_userbar` hook (claudobahn) * Enable breadcrumbs in revisions compare view (Sage Abdullah) * Skip loading of unused JavaScript to speed up 404 page rendering (Sage Abdullah) * Replace l18n library with JavaScript Intl API for time zone options in Account view (Sage Abdullah) * Use explicit label for defaulting to server language in account settings (Sage Abdullah) * Add support for specifying an operator on `Fuzzy` queries (Tom Usher) * Remove support for Safari 15 (Thibaud Colas) * Populate the ImageBlock alt text from the image’s default alt text when selecting a new image (Matt Westcott) * Prevent main menu from re-rendering when clicking outside while the menu is closed (Sage Abdullah) * Fill in the ImageBlock alt text from the image’s default alt text when converting from ImageChooserBlock (Cynthia Kiser) * Make sure typing text at the bottom of the page editor always scrolls enough to keep the text into view (Jatin Bhardwaj) * Add StreamField and InlinePanel interfaces support for drag-and-drop reordering of items (Thibaud Colas, Sage Abdullah) * Add previews support for StreamField blocks inside the block picker (Sage Abdullah, Thibaud Colas) * Fix: Improve handling of translations for bulk page action confirmation messages (Matt Westcott) * Fix: Ensure custom rich text feature icons are correctly handled when provided as a list of SVG paths (Temidayo Azeez, Joel William, LB (Ben) Johnston) * Fix: Prevent error on lazily loading StreamField blocks after the stream has been modified (Stefan Hammer) * Fix: Fix sub-menus within the main menu cannot be closed on mobile (Bojan Mihelac) * Fix: Fix animation overflow transition when navigating through subpages in the sidebar page explorer (manu) * Fix: Ensure form builder supports custom admin form validation (John-Scott Atlakson, LB (Ben) Johnston) * Fix: Ensure form builder correctly checks for duplicate field names when using a custom related name (John-Scott Atlakson, LB (Ben) Johnston) * Fix: Normalize `StreamField.get_default()` to prevent creation forms from breaking (Matt Westcott) * Fix: Prevent out-of-order migrations from skipping creation of image/document choose permissions (Matt Westcott) * Fix: Use correct connections on multi-database setups in database search backends (Jake Howard) * Fix: Ensure CloudFront cache invalidation is called with a list, for compatibility with current botocore versions (Jake Howard) * Fix: Show the correct privacy status in the sidebar when creating a new page (Joel William) * Fix: Prevent generic model edit view from unquoting non-integer primary keys multiple times (Matt Westcott) * Fix: Ensure comments are functional when editing Page models with `read_only` `Fieldpanel`s in use (Strapchay) * Fix: Ensure the accessible labels and tooltips reflect the correct private/public status on the live link button within pages after changing the privacy (Ayaan Qadri) * Fix: Fix empty `th` (table heading) elements that are not compliant with accessibility standards (Jai Vignesh J) * Fix: Ensure `MultipleChooserPanel` using images or documents work when nested within an `InlinePanel` when no other choosers are in use within the model (Elhussein Almasri) * Fix: Ensure `MultipleChooserPanel` works after doing a search in the page chooser modal (Matt Westcott) * Fix: Ensure new `ListBlock` instances get created with unique IDs in the admin client for accessibility and mini-map element references (Srishti Jaiswal) * Fix: Return never-cache HTTP headers when serving pages and documents with view restrictions (Krystian Magdziarz, Dawid Bugajewski) * Fix: Implement `get_block_by_content_path` on `ImageBlock` to prevent errors on commenting (Matt Westcott) * Fix: Add `aria-expanded` attribute to new column button on `TypedTableBlock` to reflect menu state (Ayaan Qadri, Scott Cranfill) * Fix: Allow page models to extend base `Page` panel definitions without importing `wagtail.admin` (Matt Westcott) * Fix: Fix crash when loading the dashboard with only the "unlock" or "bulk delete" page permissions (Unyime Emmanuel Udoh, Sage Abdullah) * Fix: Improve deprecation warning for `WidgetWithScript` by raising it with `stacklevel=3` (Joren Hammudoglu) * Fix: Correctly place comment buttons next to date / datetime / time fields. (Srishti Jaiswal) * Fix: Add missing heading and breadcrumbs in Account view (Sage Abdullah) * Fix: Reduce confusing spacing below StreamField blocks help text (Rishabh Sharma) * Fix: Prevent redundant calls to `Site.find_for_request()` from `Page.get_url_parts()` (Andy Babic) * Fix: Prevent error on listings when searching and filtering by locale (Matt Westcott, Sage Abdullah) * Fix: Add missing space in panels check warning message (Stéphane Blondon) * Fix: Make sure alt text quality check is on by default as documented (Thibaud Colas) * Fix: Prevent `StreamChildrenToListBlockOperation` from duplicating data across multiple StreamField instances (Joshua Munn) * Fix: Prevent database error when calling permission_order.register on app ready (Daniel Kirkham, Matt Westcott) * Fix: Prevent syntax error on MySQL search when query includes symbols (Matt Westcott) * Docs: Move the model reference page from reference/pages to the references section as it covers all Wagtail core models (Srishti Jaiswal) * Docs: Move the panels reference page from references/pages to the references section as panels are available for any model editing, merge panels API into this page (Srishti Jaiswal) * Docs: Move the tags documentation to standalone advanced topic, instead of being inside the reference/pages section (Srishti Jaiswal) * Docs: Refine the adding reports page so that common (page/non-page) class references are at the top and the full page only example has correct heading nesting (Alessandro Chitarrini) * Docs: Add the `wagtail start` command to the management commands reference page (Damilola Oladele) * Docs: Refine the project template page sections and document common issues encountered when creating custom templates (Damilola Oladele) * Docs: Refine titles, references and URLS to better align with the documentation style guide, including US spelling (Srishti Jaiswal) * Docs: Recommend a larger `DATA_UPLOAD_MAX_NUMBER_FIELDS` when integrating Wagtail into Django (Matt Westcott) * Docs: Improve code highlighting and formatting for Python docstrings in core models (Srishti Jaiswal) * Docs: Update all JavaScript inline scripts & some CSS inline style tags to a CSP compliant approach by using external scripts/styles (Aayushman Singh) * Docs: Update usage of `mark_safe` to `format_html` for any script inclusions, to better avoid XSS issues from example code (Aayushman Singh) * Docs: Update documentation writing guidelines to encourage better considerations of security, accessibility and good practice when writing code examples (Aayushman Singh, LB (Ben) Johnston) * Docs: Update documentation guidelines on writing links and API reference (Sage Abdullah) * Docs: Replace absolute URLs with intersphinx links where possible to avoid broken links (Sage Abdullah) * Docs: Update upgrading guide and release process to better reflect the current practices (Sage Abdullah) * Docs: Document usage of custom validation for admin form pages when using `AbstractEmailForm` or `AbstractForm` pages (John-Scott Atlakson, LB (Ben) Johnston) * Docs: Reword `BlogTagIndexPage` example for clarity (Clifford Gama) * Docs: Change title of blog index page in tutorial to avoid slug issues (Thibaud Colas) * Docs: Fix `wagtailcache` and `wagtailpagecache` examples to not use quotes for the `fragment_name` (Shiv) * Docs: Update tutorial to reflect the move of the "Add child page" action to a top-level button in the header as a '+' icon (Clifford Gama) * Docs: Fix link to `HTTPMethod` in `Page.handle_options_request()` docs (Sage Abdullah) * Docs: Improve the Pages Theory page with added & more consistent section headings and admonitions to aid in readability (Clifford Gama) * Docs: Fix non-functional link to the community guidelines in the Your first contribution page (Ankit Kumar) * Docs: Introduce tags and filters by name in "Writing templates" docs (Clifford Gama) * Docs: Add a new headless section to the documentation, incorporating parts of the 'are we headless' website content (Sævar Öfjörð Magnússon, Alex Fulcher) * Docs: Fix Django HTML syntax formatting issue on the documents overview page (LB (Ben) Johnston) * Docs: Separate virtual environment creation and activation steps in tutorial (Ankit Kumar) * Docs: Update tutorial to use plain strings in place of `FieldPanel` / `InlinePanel` where appropriate (Unyime Emmanuel Udoh) * Docs: Update example for customizing "p-as-heading" accessibility check without overriding built-in checks (Cynthia Kiser) * Docs: Document `get_template` method on StreamField blocks (Matt Westcott) * Docs: Update accessibility considerations on alt text in light of contextual alt text improvements (Cynthia Kiser) * Docs: Revert incorrect example of appending a `RichTextBlock` to a `StreamField` (Matt Westcott) * Maintenance: Close open files when reading within utils/setup.py (Ataf Fazledin Ahamed) * Maintenance: Avoid redundant `ALLOWED_HOSTS` check in `Site.find_for_request` (Jake Howard) * Maintenance: Update `CloneController` to ensure that `added`/`cleared` events are not dispatched as cancelable (LB (Ben) Johnston) * Maintenance: Remove unused `uuid` UMD module as all code is now using the NPM module (LB (Ben) Johnston) * Maintenance: Clean up JS comments throughout codebase to be aligned to JSDoc where practical (LB (Ben) Johnston) * Maintenance: Replace `eslint-disable no-undef` linter directives with `global` comments (LB (Ben) Johnston) * Maintenance: Upgrade Node tooling to active LTS version 22 (LB (Ben) Johnston) * Maintenance: Remove defunct oEmbed providers (Rahul Samant) * Maintenance: Remove obsolete non-upsert-based code for Postgres search indexing (Jake Howard) * Maintenance: Remove unused Rangy JS library (LB (Ben) Johnston) * Maintenance: Update `PreviewController` usage to leverage Stimulus actions instead of calling `preventDefault` manually (Ayaan Qadri) * Maintenance: Various performance optimizations to page publishing (Jake Howard) * Maintenance: Remove unnecessary DOM canvas.toBlob polyfill (LB (Ben) Johnston) * Maintenance: Ensure Storybook core files are correctly running through Eslint (LB (Ben) Johnston) * Maintenance: Add a new Stimulus `ZoneController` (`w-zone`) to support dynamic class name changes & event handling on container elements (Ayaan Qadri) * Maintenance: Migrate jQuery class toggling & drag/drop event handling within the multiple upload views to the Stimulus ZoneController usage (Ayaan Qadri) * Maintenance: Test project template for warnings when run against Django pre-release versions (Sage Abdullah) * Maintenance: Refactor redirects create/delete views to use generic views (Sage Abdullah) * Maintenance: Add JSDoc description, adopt linting recommendations, and add more unit tests for `ModalWorkflow` (LB (Ben) Johnston) * Maintenance: Add support for for a `delay` value in `TagController` to debounce async autocomplete tag fetch requests (Aayushman Singh) * Maintenance: Add unit tests, Storybook stories & JSDoc items for the Stimulus `DrilldownController` (Srishti Jaiswal) * Maintenance: Enhance sidebar preview performance by eliminating duplicate asset loads on preview error (Sage Abdullah) * Maintenance: Remove unused `LinkController` (`w-link`) (Sage Abdullah) * Maintenance: Refactor settings `EditView` to make better use of generic `EditView` (Sage Abdullah) * Maintenance: Add a new Stimulus `RulesController` (`w-rules`) to support declarative conditional field enabling from other field values in a form (LB (Ben) Johnston) * Maintenance: Migrate the conditional enabling of fields in the image URL builder view away from ad-hoc jQuery to use the `RulesController` (`w-rules`) approach (LB (Ben) Johnston) * Maintenance: Enhance the Stimulus `ZoneController` (`w-zone`) to support inactive class and a mechanism to switch the mode based on data within events (Ayaan Qadri) * Maintenance: Use the Stimulus `ZoneController` (`w-zone`) to remove ad-hoc jQuery for the privacy switch when toggling visibility of private/public elements (Ayaan Qadri) * Maintenance: Remove unused `is_active` & `active_menu_items` from `wagtail.admin.menu.MenuItem` (Srishti Jaiswal) * Maintenance: Only call `openpyxl` at runtime to improve performance for projects that do not use `ReportView`, `SpreadsheetExportMixin` and `wagtail.contrib.redirects` (Sébastien Corbin) * Maintenance: Adopt the update value `mp` instead of `mm` for 'mystery person' as the default Gravatar if no avatar found (Harsh Dange) * Maintenance: Refactor search promotions views to use generic views and templates (Sage Abdullah, Rohit Sharma) * Maintenance: Use built-in `venv` instead of `pipenv` in CircleCI (Sage Abdullah) * Maintenance: Add a new Stimulus `FormsetController` (`w-formset`) to support dynamic formset insertion/deletion behavior (LB (Ben) Johnston) * Maintenance: Enable breadcrumbs by default on admin views using generic templates (Sage Abdullah) * Maintenance: Refactor pages `revisions_revert` view to be a subclass of `EditView` (Sage Abdullah) * Maintenance: Move images and documents `get_usage().count()` call to view code (Sage Abdullah) * Maintenance: Upgrade sass-loader to resolve Sass deprecation warnings (Ayaan Qadri) 6.3.7 (12.02.2026) ~~~~~~~~~~~~~~~~~~ * Remove upper bound on Pillow dependency 6.3.6 (03.02.2026) ~~~~~~~~~~~~~~~~~~ * Fix: Remove ngram parser on MySQL that prevented autocomplete search from returning results (Vince Salvino) * Fix: CVE-2026-25517: Improper permission handling on admin preview endpoints (thxtech, Matt Westcott, Jake Howard) 6.3.5 (12.06.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Use correct URL when redirecting back to the listing after filtering and deleting form submissions (Sage Abdullah) * Fix: Fix broken migration when ListBlock is defined with a `child_block` kwarg (Matt Westcott) * Maintenance: Use `utf8mb4` charset and collation for MySQL test database (Sage Abdullah) 6.3.4 (24.04.2025) ~~~~~~~~~~~~~~~~~~ * Added support for Django 5.2 * Fix: Add missing “Close” label to the upgrade notification dismiss button (Sage Abdullah) * Fix: Fix white text on white background in previews for sites that use color-scheme without a background-color (Sage Abdullah) * Maintenance: Remove upper version boundary for django-filter (Dan Braghis) 6.3.3 (03.02.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Correctly place comment buttons next to date / datetime / time fields. (Srishti Jaiswal) * Fix: Reduce confusing spacing below StreamField blocks help text (Rishabh Sharma) * Fix: Make sure alt text quality check is on by default as documented (Thibaud Colas) * Fix: Prevent `StreamChildrenToListBlockOperation` from duplicating data across multiple StreamField instances (Joshua Munn) * Fix: Prevent database error when calling permission_order.register on app ready (Daniel Kirkham, Matt Westcott) * Fix: Prevent error on lazily loading StreamField blocks after the stream has been modified (Stefan Hammer) * Fix: Prevent syntax error on MySQL search when query includes symbols (Matt Westcott) * Docs: Update example for customizing "p-as-heading" accessibility check without overriding built-in checks (Cynthia Kiser) * Docs: Update accessibility considerations on alt text in light of contextual alt text improvements (Cynthia Kiser) * Docs: Revert incorrect example of appending a `RichTextBlock` to a `StreamField` (Matt Westcott) 6.3.2 (02.01.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Ensure CloudFront cache invalidation is called with a list, for compatibility with current botocore versions (Jake Howard) * Fix: Ensure Draftail features wrap when a large amount of features are added (Bart Cieliński) * Fix: Implement `get_block_by_content_path` on `ImageBlock` to prevent errors on commenting (Matt Westcott) * Docs: Update tutorial to reflect the move of the "Add child page" action to a top-level button in the header as a '+' icon (Clifford Gama) 6.3.1 (19.11.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Restore ability to upload profile picture through account settings (Sage Abdullah) * Fix: Correctly handle `ImageChooserBlock` to `ImageBlock` data conversions where all inputs to `bulk_to_python` are null (Storm Heg, Matt Westcott) * Fix: Improve spacing of page / collection permissions table in Group settings (Sage Abdullah) * Fix: Remove forced capitalization of site name on admin dashboard (Thibaud Colas) * Docs: Reword `BlogTagIndexPage` example for clarity (Clifford Gama) * Docs: Change title of blog index page in tutorial to avoid slug issues (Thibaud Colas) * Docs: Fix `wagtailcache` and `wagtailpagecache` examples to not use quotes for the `fragment_name` (Shiv) * Docs: Lower search result ranking for release notes on readthedocs search (Sage Abdullah) 6.3 LTS (01.11.2024) ~~~~~~~~~~~~~~~~~~~~ * Add support for Python 3.13 (Matt Westcott) * Add formal support for Django 5.1 (Matt Westcott) * Add `ImageBlock` with alt text support (Chiemezuo Akujobi for Google Summer of Code, mentored by Storm Heg, Saptak Sengupta, Thibaud Colas and Matt Westcott) * Implement incremental dashboard design enhancements (Albina Starykova, Ben Enright) * Add a new enhanced contrast admin theming option for the admin interface (Albina Starykova, Victoria Ottah) * Migrate workflow history views to universal listings (Sage Abdullah) * Refactor documents views to use universal designs (Sage Abdullah) * Refactor images views to use universal designs (Sage Abdullah) * Implement universal listings for workflow usage and page type usage views (Sage Abdullah) * Add search and filters to form pages listing (Sage Abdullah) * Add support for uploading HEIC / HEIF images (Matt Westcott) * Allow customization of preview device sizes in the live preview panel (Bart Cieliński, alexkiro, Sage Abdullah) * Formalize support for MariaDB (Sage Abdullah, Daniel Black) * Redirect to the last viewed listing page after deleting form submissions (Matthias Brück) * Provide `getTextLabel` method on date / time StreamField blocks (Vaughn Dickson) * Purge frontend cache when modifying redirects (Jake Howard) * Deprecate the `WAGTAIL_AUTO_UPDATE_PREVIEW` setting, use `WAGTAIL_AUTO_UPDATE_PREVIEW_INTERVAL = 0` instead (Sage Abdullah) * Consistently use `capfirst` for title-casing model verbose names (Sébastien Corbin) * Fire `copy_for_translation_done` signal when copying translatable models as well as pages (Coen van der Kamp) * Add support for an image `description` field across all images, to better support accessible image descriptions (Chiemezuo Akujobi) * Prompt the user about unsaved changes when editing snippets (Sage Abdullah) * Make dashboard upgrade banners dismissible (Sage Abdullah) * Add support for specifying different preview modes to the "View draft" URL for pages (Robin Varghese) * Implement new designs for the footer actions dropdown with more contrast and larger text (Sage Abdullah) * All create/edit admin forms now use a sticky submit button, for consistency and to speed up edits (Sage Abdullah) * Secondary form actions such as "Delete" are now in the header actions menu (Sage Abdullah) * Allow setting page privacy rules when a restriction already exists on an ancestor page (Bojan Mihelac) * Automatically create links when pasting content that contain URLs into a rich text input (Thibaud Colas) * Add Uyghur language support * Fix: Prevent page type business rules from blocking reordering of pages (Andy Babic, Sage Abdullah) * Fix: Improve layout of object permissions table (Sage Abdullah) * Fix: Fix typo in aria-label attribute of page explorer navigation link (Sébastien Corbin) * Fix: Reinstate transparency indicator on image chooser widgets (Sébastien Corbin) * Fix: Remove table headers that have no text (Matt Westcott) * Fix: Fix broken link to user search (Shlomo Markowitz) * Fix: Ensure that JS slugify function strips Unicode characters disallowed by Django slug validation (Atif Khan) * Fix: Do not show notices about root / unroutable pages when searching or filtering in the page explorer (Matt Westcott) * Fix: Resolve contrast issue for page deletion warning (Sanjeev Holla S) * Fix: Make sure content metrics falls back to body element only when intended (Sage Abdullah) * Fix: Remove wrongly-added filters from redirects index (Matt Westcott) * Fix: Prevent popular tags filter from generating overly complex queries when not filtering (Matt Westcott) * Fix: Fix content path links in usage view to scroll to the correct element (Sage Abdullah) * Fix: Always show the minimap toggle button (Albina Starykova) * Fix: Ensure that dropdown button toggles show with a border in high contrast mode (Ishwari8104, LB (Ben) Johnston) * Fix: Update email notification header to the new logo design (Rahul Samant) * Fix: Change `file_size` field on document model to avoid artificial 2Gb limit (Gabriel Getzie) * Fix: Ensure that `TypedTableBlock` uses the correct API representations of child blocks (Matt Westcott) * Fix: Footer action buttons now include their `media` definitions (Sage Abdullah) * Fix: Improve the text contrast of the bulk actions "Select all" button (Sage Abdullah) * Fix: Fix error on workflow settings view with multiple snippet types assigned to the same workflow on Postgres (Sage Abdullah) * Fix: Fix datetime fields overflowing its parent wrapper in listing filters (Rohit Singh) * Fix: Prevent multiple URLs from being combined into one when pasting links into a rich text input (Thibaud Colas) * Fix: Improve layout of report listing tables (Sage Abdullah) * Fix: Fix regression from creation of `AbstractGroupApprovalTask` to ensure `can_handle` checks for the abstract class correctly (Sumana Sree Angajala) * Docs: Upgrade Sphinx to 7.3 (Matt Westcott) * Docs: Upgrade sphinx-wagtail-theme to v6.4.0, with a new search integration and Read the Docs Addons bug fixes (Thibaud Colas) * Docs: Document how to customize date/time format settings (Vince Salvino) * Docs: Create a new documentation section for deployment and move fly.io deployment from the tutorial to this section (Vince Salvino) * Docs: Clarify process for UserViewSet customization (Sage Abdullah) * Docs: Correct `WAGTAIL_WORKFLOW_REQUIRE_REAPPROVAL_ON_EDIT` documentation to state that it defaults to `False` (Matt Westcott) * Docs: Add an example of customizing a default accessibility check (Cynthia Kiser) * Docs: Demonstrate access protection with `TokenAuthentication` in the Wagtail API v2 Configuration Guide (Krzysztof Jeziorny) * Docs: Replace X links with Mastodon in the README (Alex Morega) * Docs: Re-enable building offline formats in online documentation (Read the docs) for EPUB/PDF/HTML downloads (Joel William, Sage Abdullah) * Docs: Resolve multiple output errors in the documentation ePub format (Sage Abdullah) * Docs: Update social media examples to use LinkedIn, Reddit, Facebook (Ayaan Qadri) * Maintenance: Removed support for Python 3.8 (Matt Westcott) * Maintenance: Drop pytz dependency in favour of `zoneinfo.available_timezones` (Sage Abdullah) * Maintenance: Relax django-taggit dependency to allow 6.0 (Matt Westcott) * Maintenance: Improve page listing performance (Sage Abdullah) * Maintenance: Phase out usage of SECRET_KEY in version and icon hashes (Jake Howard) * Maintenance: Audit all use of localized and non-localized numbers in templates (Matt Westcott) * Maintenance: Refactor StreamField `get_prep_value` for closer alignment with JSONField (Sage Abdullah) * Maintenance: Move search implementation logic from generic `IndexView` to `BaseListingView` (Sage Abdullah) * Maintenance: Upgrade Puppeteer integration tests for reliability (Matt Westcott) * Maintenance: Restore ability to use `.in_bulk()` on specific querysets under Django 5.2a0 (Sage Abdullah) * Maintenance: Add generated `test-media` to .gitignore (Shlomo Markowitz) * Maintenance: Improve `debounce` util's return type for better TypeScript usage (Sage Abdullah) * Maintenance: Ensure the side panel's show event is dispatched after any hide events (Sage Abdullah) * Maintenance: Migrate preview-panel JavaScript to Stimulus & TypeScript, add full unit testing (Sage Abdullah) * Maintenance: Move `wagtailConfig` values from inline scripts to the `wagtail_config` template tag (LB (Ben) Johnston, Sage Abdullah) * Maintenance: Deprecate the `{% locales %}` and `{% js_translation_strings %}` template tags (LB (Ben) Johnston, Sage Abdullah) * Maintenance: Ensure multi-line comments are cleaned from custom icons in addition to just single line comments (Jake Howard) * Maintenance: Deprecate `window.wagtailConfig.BULK_ACTION_ITEM_TYPE` usage in JavaScript to reduce reliance on inline scripts (LB (Ben) Johnston) * Maintenance: Remove `window.fileupload_opts` usage in JavaScript, use data attributes on fields instead to reduce reliance on inline scripts (LB (Ben) Johnston) * Maintenance: Remove `image_format_name_to_content_type` helper function that duplicates Willow functionality (Matt Westcott) * Maintenance: Improve code reuse for footer actions markup across generic views (Sage Abdullah) * Maintenance: Deprecate internal `DeleteMenuItem` API for footer actions (Sage Abdullah) * Maintenance: Update Pillow dependency to allow 11.x (Storm Heg) 6.2.4 (12.06.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Fix broken migration when ListBlock is defined with a `child_block` kwarg (Matt Westcott) 6.2.3 (01.11.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent multiple URLs from being combined into one when pasting links into a rich text input (Thibaud Colas) * Fix: Fix error on workflow settings view with multiple snippet types assigned to the same workflow on Postgres (Sage Abdullah) * Fix: Prevent history view from breaking if a log entry's revision is missing (Matt Westcott) * Docs: Upgrade sphinx-wagtail-theme to v6.4.0, with a new search integration and Read the Docs Addons bug fixes (Thibaud Colas) 6.2.2 (24.09.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Fix various instances of `USE_THOUSAND_SEPARATOR` formatting numbers where formatting is invalid (Sébastien Corbin, Matt Westcott) * Fix: Fix broken link to user search (Shlomo Markowitz) * Fix: Make sure content metrics falls back to body element only when intended (Sage Abdullah) * Fix: Remove wrongly-added filters from redirects index (Matt Westcott) * Fix: Prevent popular tags filter from generating overly complex queries when not filtering (Matt Westcott) * Docs: Clarify process for UserViewSet customization (Sage Abdullah) 6.2.1 (20.08.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Handle `child_block` being passed as a kwarg in ListBlock migrations (Matt Westcott) * Fix: Fix broken task type filter in workflow task chooser modal (Sage Abdullah) * Fix: Prevent circular imports between `wagtail.admin.models` and custom user models (Matt Westcott) * Fix: Ensure that concurrent editing check works for users who only have edit access via workflows (Matt Westcott) 6.2 (01.08.2024) ~~~~~~~~~~~~~~~~ * Optimize and consolidate redirects report view into the index view (Jake Howard, Dan Braghis) * Support a `HOSTNAMES` parameter on `WAGTAILFRONTENDCACHE` to define which hostnames a backend should respond to (Jake Howard, sponsored by Oxfam America) * Refactor redirects edit view to use the generic `EditView` and breadcrumbs (Rohit Sharma) * Allow custom permission policies on snippets to prevent superusers from creating or editing them (Sage Abdullah) * Do not link to edit view from listing views if user has no permission to edit (Sage Abdullah) * Allow access to snippets and other model viewsets to users with "View" permission (Sage Abdullah) * Skip `ChooseParentView` if only one possible valid parent page is available (Matthias Brück) * Add `copy_for_translation_done` signal when a page is copied for translation (Arnar Tumi Þorsteinsson) * Remove reduced opacity for draft page title in listings (Inju Michorius) * Adopt more compact representation for StreamField definitions in migrations (Matt Westcott) * Implement a new design for locale labels in listings (Albina Starykova) * Add alt text validation rule in the accessibility checker (Albina Starykova) * Add a `deactivate()` method to `ProgressController` (Alex Morega) * Allow manually specifying credentials for CloudFront frontend cache backend (Jake Howard) * Automatically register permissions for models registered with a `ModelViewSet` (Sage Abdullah) * Implement universal listings UI for report views (Sage Abdullah) * Make `routable_resolver_match` attribute available on RoutablePageMixin responses (Andy Chosak) * Support customizations to `UserViewSet` via the app config (Sage Abdullah) * Add word count and reading time metrics within the page editor (Albina Starykova. Sponsored by The Motley Fool) * Implement a new design for accessibility checks (Albina Starykova) * Allow changing available privacy options per page model (Shlomo Markowitz) * Add concurrent editing notifications for pages and snippets (Matt Westcott, Sage Abdullah) * Add "soft" client-side validation for `StreamBlock` / `ListBlock` `min_num` / `max_num` (Matt Westcott) * Log accessibility checker results in the console to help developers with troubleshooting (Thibaud Colas) * Disable pointer events on checker highlights to simplify DevTools inspections (Thibaud Colas) * `StaticBlock` now renders nothing by default when no template is specified (Sævar Öfjörð Magnússon) * Fix: Make `WAGTAILIMAGES_CHOOSER_PAGE_SIZE` setting functional again (Rohit Sharma) * Fix: Enable `richtext` template tag to convert lazy translation values (Benjamin Bach) * Fix: Ensure permission labels on group permissions page are translated where available (Matt Westcott) * Fix: Preserve whitespace in comment replies (Elhussein Almasri) * Fix: Address layout issues in the title cell of universal listings (Sage Abdullah) * Fix: Support SVG icon id attributes with single quotes in the styleguide (Sage Abdullah) * Fix: Do not show delete button on model edit views if per-instance permissions prevent deletion (Matt Westcott) * Fix: Remove duplicate header in privacy dialog when a privacy setting is set on a parent page or collection (Matthias Brück) * Fix: Allow renditions of `.ico` images (Julie Rymer) * Fix: Handle choice groups as dictionaries in active filters (Sébastien Corbin) * Fix: Add separators when displaying multiple error messages on a StructBlock (Kyle Bayliss) * Fix: Specify `verbose_name` on `TranslatableMixin.locale` so that it is translated when used as a label (Romein van Buren) * Fix: Disallow null characters in API filter values (Jochen Wersdörfer) * Fix: Fix image preview when Willow optimizers are enabled (Alex Tomkins) * Fix: Ensure external-to-internal link conversion works when the `wagtail_serve` view is on a non-root path (Sage Abdullah) * Fix: Add missing `for_instance` method to `PageLogEntryManager` (Matt Westcott) * Fix: Ensure that "User" column on history view is translatable (Romein van Buren) * Fix: Handle StreamField migrations where the field value is null (Joshua Munn) * Fix: Prevent incorrect menu ordering when order value is 0 (Ben Dickinson) * Fix: Fix dynamic image serve view with certain backends (Sébastien Corbin) * Fix: Show not allowed extension in error message (Sahil Jangra) * Fix: Fix focal point chooser when localization enabled (Sébastien Corbin) * Fix: Ensure that system checks for `WAGTAIL_DATE_FORMAT`, `WAGTAIL_DATETIME_FORMAT` and `WAGTAIL_TIME_FORMAT` take `FORMAT_MODULE_PATH` into account (Sébastien Corbin) * Fix: Prevent rich text fields inside choosers from being duplicated when opened repeatedly (Sage Abdullah) * Fix: Prevent history view from breaking if a log entry's revision is missing (Matt Westcott) * Fix: Prevent long filenames from breaking layout on document chooser listings (Frank Yiu, Shaurya Panchal) * Docs: Remove duplicate section on frontend caching proxies from performance page (Jake Howard) * Docs: Document `restriction_type` field on PageViewRestriction (Shlomo Markowitz) * Docs: Document Wagtail's bug bounty policy (Jake Howard) * Docs: Fix incorrect Sphinx-style code references to use MyST style (Byron Peebles) * Docs: Document the fact that `Orderable` is not required for inline panels (Bojan Mihelac) * Docs: Add note about `prefers-reduced-motion` to the accessibility documentation (Roel Koper) * Docs: Update deployment instructions for Fly.io (Jeroen de Vries) * Docs: Add better docs for generating URLs on creating admin views (Shlomo Markowitz) * Docs: Document the `vary_fields` property for custom image filters (Daniel Kirkham) * Docs: Fix documentation build errors (Himanshu Garg, Chris Shenton) * Docs: Fix PDF export (Nathanaël Jourdane) * Maintenance: Use `DjangoJSONEncoder` instead of custom `LazyStringEncoder` to serialize Draftail config (Sage Abdullah) * Maintenance: Refactor image chooser pagination to check `WAGTAILIMAGES_CHOOSER_PAGE_SIZE` at runtime (Matt Westcott) * Maintenance: Exclude the `client/scss` directory in Tailwind content config to speed up CSS compilation (Sage Abdullah) * Maintenance: Split `contrib.frontend_cache.backends` into dedicated sub-modules (Andy Babic) * Maintenance: Remove unused `docs/autobuild.sh` script (Sævar Öfjörð Magnússon) * Maintenance: Replace `urlparse` with `urlsplit` to improve performance (Jake Howard) * Maintenance: Optimize embed finder lookups (Jake Howard) * Maintenance: Improve performance of initial admin loading by moving sprite hashing out of module import time (Jake Howard) * Maintenance: Remove workaround and inline scripts for activating workflow actions (Sage Abdullah) * Maintenance: Prevent `'BlockWidget' object has no attribute '_block_json'` from masking errors during StreamField serialization (Matt Westcott) 6.1.3 (11.07.2024) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2024-39317: Regular expression denial-of-service via search query parsing (Jake Howard) * Fix: Allow renditions of `.ico` images (Julie Rymer) * Fix: Handle choice groups as dictionaries in active filters (Sébastien Corbin) * Fix: Fix image preview when Willow optimizers are enabled (Alex Tomkins) * Fix: Fix dynamic image serve view with certain backends (Sébastien Corbin) 6.1.2 (30.05.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Fix client-side handling of select inputs within `ChoiceBlock` (Matt Westcott) * Fix: Support SVG icon id attributes with single quotes in the styleguide (Sage Abdullah) * Fix: CVE-2024-35228: Improper handling of insufficient permissions in `wagtail.contrib.settings` (Victor Miti, Matt Westcott, Jake Howard) 6.1.1 (21.05.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Fix form action URL in user edit and delete views for custom user models (Sage Abdullah) * Fix: Fix snippet copy view not prefilling form data (Sage Abdullah) * Fix: Address layout issues in the title cell of universal listings (Sage Abdullah) * Fix: Fix incorrect rich text to HTML conversion when multiple link / embed types are present (Andy Chosak, Matt Westcott) * Fix: Restore ability for custom widgets in StreamField blocks to have multiple top-level nodes (Sage Abdullah, Matt Westcott) 6.1 (01.05.2024) ~~~~~~~~~~~~~~~~ * Refine wording of page & collection privacy using password is a shared password and should not be used for secure content (Rohit Sharma, Jake Howard) * Add RelatedObjectsColumn to the table UI framework (Matt Westcott) * Reduce memory usage when rebuilding search indexes (Jake Howard) * Support creating images in .ico format (Jake Howard) * Add the ability to disable the usage of a shared password for enhanced security for the private pages and collections (documents) feature (Salvo Polizzi, Jake Howard) * Add system checks to ensure that `WAGTAIL_DATE_FORMAT`, `WAGTAIL_DATETIME_FORMAT`, `WAGTAIL_TIME_FORMAT` are correctly configured (Rohit Sharma, Coen van der Kamp) * Allow custom permissions with the same prefix as built-in permissions (Sage Abdullah) * Allow displaying permissions linked to the Admin model's content type (Sage Abdullah) * Add support for Draftail's JavaScript to use chooserUrls provided by entity options & for the Draftail widget to encode lazy URLs/ translations (Elhussein Almasri) * Reimplement search promotions `IndexView` using the `generic.IndexView` (Rohit Sharma, Sage Abdullah, Storm Heg) * Reimplement redirects `IndexView` using the `generic.IndexView` (Rohit Sharma, Sage Abdullah, Temidayo Azeez) * Add `PageListingViewSet` for custom per-page-type page listings (Matt Westcott) * Add `ChooseParentView` to `PageListingViewSet` to allow creating pages from custom page listings (Abdelrahman Hamada, Sage Abdullah) * Implement new universal listings design for image listing view (Sage Abdullah) * Implement new universal listings design for document listing view (Sage Abdullah) * Implement new universal listings design for site and locale listing views (Sage Abdullah) * Implement new universal listings design for page and snippet history view (Sage Abdullah) * Implement new universal listings design for form builder submissions view (Sage Abdullah) * Implement new universal listings design for collections listing view (Sage Abdullah) * Implement new universal listings design for groups views (Sage Abdullah) * Implement new universal listings design for users views (Sage Abdullah) * Implement new universal listings design for workflow and task views (Sage Abdullah) * Refine slim header button style to match designs (Sage Abdullah) * Add simple admin keyboard shortcuts overview dialog, available in the help sub-menu (Karthik Ayangar, Rohit Sharma) * Add ability to bulk toggle permissions in the user group editing view, including shift+click for multiple selections (LB (Ben) Johnston, Kalob Taulien) * Update the minimum version of `djangorestframework` to 3.15.1 (Sage Abdullah) * Add support for related fields in generic `IndexView.list_display` (Abdelrahman Hamada) * Improve page fetching logic and cache route results per request (Gordon Pendleton) * Optimize rewriting of links / embeds in rich text using bulk database lookups (Andy Chosak) * Add normalization mechanism to StreamField so that assignments and defaults can be passed in a wider range of data types (Joshua Munn, Matt Westcott) * Allow specifying a `STORAGES` alias name for `WAGTAILIMAGES_RENDITION_STORAGE` (Alec Baron) * Update `PASSWORD_REQUIRED_TEMPLATE` setting to `WAGTAIL_PASSWORD_REQUIRED_TEMPLATE` with deprecation of previous naming (Saksham Misra, LB (Ben) Johnston) * Update `DOCUMENT_PASSWORD_REQUIRED_TEMPLATE` setting to `WAGTAILDOCS_PASSWORD_REQUIRED_TEMPLATE` with deprecation of previous naming (Saksham Misra, LB (Ben) Johnston) * When editing settings (contrib) use the same icon in the editing view that was declared when registering the setting (Vince Salvino, Rohit Sharma) * Populate django-treebeard cache during page routing to improve performance of `get_parent` (Nigel van Keulen) * Add a new user profile preference to configure user interface information density (Thibaud Colas) * Add additional field types to Elasticsearch mapping (scott-8) * Fix: CVE-2024-32882: Permission check bypass when editing a model with per-field restrictions through `wagtail.contrib.settings` or `ModelViewSet` (Ben Morse, Joshua Munn, Jake Howard, Sage Abdullah) * Fix: Fix typo in `__str__` for MySQL search index (Jake Howard) * Fix: Ensure that unit tests correctly check for migrations in all core Wagtail apps (Matt Westcott) * Fix: Correctly handle `date` objects on `human_readable_date` template tag (Jhonatan Lopes) * Fix: Ensure re-ordering buttons work correctly when using a nested InlinePanel (Adrien Hamraoui) * Fix: Consistently remove model's `verbose_name` in group edit view when listing custom permissions (Sage Abdullah, Neeraj Yetheendran, Omkar Jadhav) * Fix: Resolve issue local development of docs when running `make livehtml` (Sage Abdullah) * Fix: Resolve issue with unwanted padding in chooser modal listings (Sage Abdullah) * Fix: Ensure form builder emails that have date or datetime fields correctly localize dates based on the configured `LANGUAGE_CODE` (Mark Niehues) * Fix: Ensure the Stimulus `UnsavedController` checks for nested removal/additions of inputs so that the unsaved warning shows in more valid cases when editing a page (Karthik Ayangar) * Fix: Ensure `get_add_url()` is always used to re-render the add button when the listing is refreshed in viewsets (Sage Abdullah) * Fix: Ensure dropdown content cannot get higher than the viewport and add scrolling within content if needed (Chiemezuo Akujobi) * Fix: Prevent snippets model index view from crashing when a model does not have an `objects` manager (Jhonatan Lopes) * Fix: Fix `get_dummy_request`'s resulting host name when running tests with `ALLOWED_HOSTS = ["*"]` (David Buxton) * Fix: Fix timezone handling in the `timesince_last_update` template tag (Matt Westcott) * Fix: Fix Postgres phrase search to respect the language set in settings (Ihar Marhitych) * Fix: Retain query parameters when switching between locales in the page chooser (Abdelrahman Hamada, Sage Abdullah) * Fix: Add `w-kbd-scope-value` with support for `global` so that specific keyboard shortcuts (e.g. ctrl+s/cmd+s) trigger consistently even when focused on fields (Neeraj Yetheendran) * Fix: Improve exception handling when generating image renditions concurrently (Andy Babic) * Fix: Respect `WAGTAIL_ALLOW_UNICODE_SLUGS` setting when auto-generating slugs (LB (Ben) Johnston) * Fix: Use correct URL when redirecting back to page search results after an AJAX search (Sage Abdullah) * Fix: Reinstate missing static files in style guide (Sage Abdullah) * Fix: Provide `convert_mariadb_uuids` management command to assist with upgrading to Django 5.0+ on MariaDB (Matt Westcott) * Fix: Ensure invalid submissions are marked as dirty edits on load to trigger UI and browser warnings for unsaved changes, restoring previous behavior from Wagtail 5.2 (Sage Abdullah) * Fix: Update polldaddy oEmbed provider to use the crowdsignal URL (Matthew Scouten) * Fix: Remove polleverywhere oEmbed provider as it this application longer supports oEmbed (Matthew Scouten) * Docs: Add contributing development documentation on how to work with a fork of Wagtail (Nix Asteri, Dan Braghis) * Docs: Make sure the settings panel is listed in tabbed interface examples (Tibor Leupold) * Docs: Update content and page names to their US spelling instead of UK spelling (Victoria Poromon) * Docs: Update broken and incorrect links throughout the documentation (EK303) * Docs: Fix formatting of `--purge-only` in `wagtail_update_image_renditions` management command section (Pranith Beeram) * Docs: Update template components documentation to better explain the usage of the Laces library (Tibor Leupold) * Docs: Update Sphinx theme to `6.3.0` with a fix for the missing favicon (Sage Abdullah) * Docs: Document risk of XSS attacks on document upload (Matt Westcott, with thanks to Georgios Roumeliotis of TwelveSec for the original report) * Docs: Add clarity to how custom StreamField validation works (Tibor Leupold) * Docs: Add additional reference to the `wagtail_update_image_renditions` management command on the using images page (LB (Ben) Johnston) * Docs: Correct information about line endings in Window development docs (Sage Abdullah) * Docs: Improve code snippets for "Create a footer for all pages" tutorial section (Drikus Roor) * Docs: Update list of third-party tutorials (LB (Ben) Johnston) * Docs: Update "Integrating into Django" documentation to emphasise creating page models (Matt Westcott) * Maintenance: Move RichText HTML whitelist parser to use the faster, built in `html.parser` (Jake Howard) * Maintenance: Remove duplicate 'path' in default_exclude_fields_in_copy (Ramchandra Shahi Thakuri) * Maintenance: Update unit tests to always use the faster, built in `html.parser` & remove `html5lib` dependency (Jake Howard) * Maintenance: Adjust Eslint rules for TypeScript files (Karthik Ayangar) * Maintenance: Rename the React `Button` that only renders links (a element) to `Link` and remove unused prop & behavior that was non-compliant for aria role usage (Advik Kabra) * Maintenance: Set up an `wagtail.models.AbstractWorkflow` model to support future customizations around workflows (Hossein) * Maintenance: Improve `classnames` template tag to handle nested lists of strings, use template tag for admin `body` element (LB (Ben) Johnston) * Maintenance: Merge `UploadedDocument` and `UploadedImage` into new `UploadedFile` model for easier shared code usage (Advik Kabra, Karl Hobley) * Maintenance: Optimize queries in dashboard panels (Sage Abdullah) * Maintenance: Optimize queries in group create/edit view (Sage Abdullah) * Maintenance: Move modal-workflow.js script usage to base admin template instead of ad-hoc imports (Elhussein Almasri) * Maintenance: Update all Draftail chooserUrls to be passed in via the Entity options instead of using `window.chooserUrls` globals, removing the need for inline scripts (Elhussein Almasri) * Maintenance: Enhance `w-init` (InitController) to support a `detail` value to be dispatched on events (Chiemezuo Akujobi) * Maintenance: Remove usage of inline scripts and instead use event dispatching to instantiate standalone Draftail editor instances (Chiemezuo Akujobi) * Maintenance: Refactor `page_breadcrumbs` tag to use shared `breadcrumbs.html` template (Sage Abdullah) * Maintenance: Add `keyboard` icon to admin icon set (Rohit Sharma) * Maintenance: Remove dead code in the minimap when elements are not found (LB (Ben) Johnston) * Maintenance: Ensure untrusted data sources are logged correctly in the Stimulus `SwapController` (LB (Ben) Johnston) * Maintenance: Update Wagtail logo in admin sidebar & favicon plus documentation to the latest version (Osaf AliSayed, Albina Starykova, LB (Ben) Johnston) * Maintenance: Remove usage of inline scripts and instead use a new Stimulus controller (`w-block`/`BlockController`) to instantiate `StreamField` blocks (Karthik Ayangar) * Maintenance: Update NPM Babel, TypeScript and Webpack packages (Neeraj Yetheendran) * Maintenance: Replace ad-hoc JavaScript and vendor Mousetrap usage to a new Stimulus controller (`w-kbd`/`KeyboardController`) (Neeraj Yetheendran) * Maintenance: Update django-filter to 24.x (Sebastian Muthwill) * Maintenance: Remove jQuery usage in telepath widget classes (Matt Westcott) * Maintenance: Remove `xregexp` (IE11 polyfill) along with `window.XRegExp` global util (LB (Ben) Johnston) * Maintenance: Refactor the Django port of `urlify` to use TypeScript, officially deprecate `window.URLify` global util (LB (Ben) Johnston) * Maintenance: Adopt the modern best practice for `beforeunload` usage in `UnsavedController` to trigger a leave page warning when edits have been made (Shubham Mukati, Sage Abdullah) 6.0.6 (11.07.2024) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2024-39317: Regular expression denial-of-service via search query parsing (Jake Howard) 6.0.5 (30.05.2024) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2024-35228: Improper handling of insufficient permissions in `wagtail.contrib.settings` (Victor Miti, Matt Westcott, Jake Howard) 6.0.4 (21.05.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Fix snippet copy view not prefilling form data (Sage Abdullah) 6.0.3 (01.05.2024) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2024-32882: Permission check bypass when editing a model with per-field restrictions through `wagtail.contrib.settings` or `ModelViewSet` (Ben Morse, Joshua Munn, Jake Howard, Sage Abdullah) * Fix: Respect `WAGTAIL_ALLOW_UNICODE_SLUGS` setting when auto-generating slugs (LB (Ben) Johnston) * Fix: Use correct URL when redirecting back to page search results after an AJAX search (Sage Abdullah) * Fix: Reinstate missing static files in style guide (Sage Abdullah) * Fix: Provide `convert_mariadb_uuids` management command to assist with upgrading to Django 5.0+ on MariaDB (Matt Westcott) * Fix: Fix generic CopyView for models with primary keys that need to be quoted (Sage Abdullah) 6.0.2 (03.04.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Ensure that modal tabs width are not impacted by side panel opening (LB (Ben) Johnston) * Fix: Resolve issue local development of docs when running `make livehtml` (Sage Abdullah) * Fix: Resolve issue with unwanted padding in chooser modal listings (Sage Abdullah) * Fix: Ensure `get_add_url()` is always used to re-render the add button when the listing is refreshed in viewsets (Sage Abdullah) * Fix: Move `modal-workflow.js` script usage to base admin template instead of ad-hoc imports so that choosers work in `ModelViewSet`s (Elhussein Almasri) * Fix: Ensure JavaScript for common widgets such as `InlinePanel` is included by default in `ModelViewSet`'s create and edit views (Sage Abdullah) * Fix: Reinstate styles for customizations of `extra_footer_actions` block in page create/edit templates (LB (Ben) Johnston, Sage Abdullah) * Fix: Prevent crash when loading an empty table block in the editor (Sage Abdullah) * Docs: Update Sphinx theme to `6.3.0` with a fix for the missing favicon (Sage Abdullah) 6.0.1 (15.02.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Ensure `BooleanRadioSelect` uses the same styles as `RadioSelect` (Thibaud Colas) * Fix: Prevent failure on `collectstatic` when `ManifestStaticFilesStorage` is in use (Matt Westcott) * Fix: Prevent error on submitting an empty search in the admin under Elasticsearch (Maikel Martens) 6.0 (07.02.2024) ~~~~~~~~~~~~~~~~ * Added support for Django 5.0 * Implemented universal listings – a unified listing and filtering interface for Pages, Snippets, Forms (Ben Enright, Matt Westcott, Thibaud Colas, Sage Abdullah) * Add the accessibility checker within the page and snippets editor (Thibaud Colas) * 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) * Improve right-to-left support by mirroring Wagtail icons as needed (Sage Abdullah) * Add support for mirroring third-party icons added in Wagtail (Sage Abdullah) * 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 customize 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) * Add `WAGTAILADMIN_LOGIN_URL` setting to allow customizing the login URL (Neeraj Yetheendran) * Replace legacy dropdown component with new Tippy dropdown-button (Thibaud Colas) * Add ability to filter by existence of child pages in the page listing view (Matt Westcott) * Polish dark theme styles and update color tokens (Thibaud Colas, Rohit Sharma) * Keep database state of pages and snippets updated while in draft state (Stefan Hammer) * Add `DrilldownController` and `w-drilldown` component to support drilldown menus (Thibaud Colas) * Add support for `caption` on admin UI Table component (Aman Pandey) * Add API support for a redirects (contrib) endpoint (Rohit Sharma, Jaap Roes, Andreas Donig) * Add the default ability for all `SnippetViewSet` & `ModelViewSet` to support being copied (Shlomo Markowitz) * Support dynamic Wagtail guide links in the admin that are based on the running version of Wagtail (Tidiane Dia) * Added `AbstractGroupApprovalTask` to simplify customizing behavior of custom `Task` models (John-Scott Atlakson) * Fix: Update system check for overwriting storage backends to recognize 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 on 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: Ensure `ActionController` explicitly checks for elements that allow select functionality (Nandini Arora) * 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) * Fix: Ensure the sidebar account toggle has no duplicate accessible labels (Nandini Arora) * Fix: Avoid text overflow issues in comment replies and scroll position issues for long comments (Rohit Sharma) * Fix: Ensure that page listing re-ordering messages and accessible labels can be translated (Aman Pandey, LB (Ben) Johnston) * Fix: Resolve multiple issues with page listing re-ordering using keyboard and screen readers (Aman Pandey) * Fix: Remove 'Page' from page types filter on aging pages report (Matt Westcott) * Fix: Prevent page types filter from showing other non-Page models that match by name (Matt Westcott) * Fix: Ensure `MultipleChooserPanel` modal works correctly when `USE_THOUSAND_SEPARATOR` is `True` for pages with ids over 1,000 (Sankalp, Rohit Sharma) * Fix: When using an empty table header (`th`) for visual spacing, ensure this is ignored by accessibility tooling (V Rohitansh) * Fix: Ensure the panel anchor button sizes meet accessibility guidelines for minimum dimensions (Nandini Arora) * Fix: Raise a 404 for bulk actions for models that don't exist instead of throwing a 500 error (Alex Tomkins) * Fix: Raise a `SiteSetting.DoesNotExist` error when retrieving settings for an unrecognized site (Nick Smith) * Fix: Ensure that defaulted or unique values declared in `exclude_fields_in_copy` are correctly excluded in new copies, resolving to the default value (Elhussein Almasri) * Fix: Ensure that `default_ordering` set on IndexView is preserved if ModelViewSet does not specify an explicit ordering (Cynthia Kiser) * Fix: Ensure that TableBlock cells are accessible when using keyboard control only (Elhussein Almasri) * Fix: Resolve issue where clicking Publish for a Page that was in workflow in Safari would block publishing and not trigger the workflow confirmation modal (Alex Morega) * Fix: Fix pagination links on model history and usage views (Matt Westcott) * Fix: Fix crash when accessing workflow reports with a deleted snippet (Sage Abdullah) * Docs: New developer tutorial (Damilola Oladele, Meagen Voss, Thibaud Colas) * 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) * Docs: Add more CSS authoring guidelines (Thibaud Colas) * Docs: Update MyST documentation parser library to 2.0.0 (Neeraj Yetheendran) * Docs: Add documentation writing guidelines for intersphinx / external links (LB (Ben) Johnston) * Docs: Add `Page` model reference `get_children` documentation (Salvo Polizzi) * Docs: Enforce CI build checks for documentation so that malformed links or missing images will not be allowed (Neeraj Yetheendran) * Docs: Update spelling on customizing admin template and page model section from British to American English (Victoria Poromon) * Docs: Add documentation for how to override the file locations for custom image models via `get_upload_to` methods (Osaf AliSayed, Dharmik Gangani) * Docs: Update documentation theme (Sphinx Wagtail Theme) to 6.2.0, fixing the incorrect favicon (LB (Ben) Johnston, Sahil Jangra) * Docs: Refactor promotion banner without jQuery and use sameSite cookies when storing if cleared (LB (Ben) Johnston) * Docs: Use cross-reference for compatible Python versions in tutorial instead of the out-of-date listing (mirusu400) * 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 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: Allow `ActionController` to have a `noop` method to more easily leverage standalone Stimulus action options (Nandini Arora) * 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: Remove or replace legacy CSS classes: visuallyhidden, visuallyvisible, divider-after, divider-before, inline, inline-block, block, u-hidden, clearfix, reordering, overflow (Thibaud Colas) * Maintenance: Prevent future issues with icon.html end-of-file newlines (Thibaud Colas) * Maintenance: Rewrite styles using legacy `c-`, `o-`, `u-`, `t-`, `is-` prefixes (Thibaud Colas) * Maintenance: Remove invalid CSS styles / Sass selector concatenation (Thibaud Colas) * Maintenance: Refactor listing views to share more queryset ordering logic (Matt Westcott) * Maintenance: Remove `initTooltips` in favor 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) * Maintenance: Update Jest version - frontend tooling (Nandini Arora) * Maintenance: Remove non-functional and inaccessible auto-focus on first field in page create forms (LB (Ben) Johnston) * Maintenance: Migrate the unsaved form checks & confirmation trigger to Stimulus `UnsavedController` (Sai Srikar Dumpeti, LB (Ben) Johnston) * Maintenance: Reduce gap between snippets and generic views/templates (Sage Abdullah) * Maintenance: Migrate page listing menu re-ordering (drag & drop) from jQuery inline scripts to `OrderableController` with a more accessible solution (Aman Pandey, LB (Ben) Johnston) * Maintenance: Clean up scss variable usage, remove unused variables and mixins, adopt more core token variables (Jai Vignesh J, Nandini Arora, LB (Ben) Johnston) * Maintenance: Migrate Image URL generator views to class-based views (Rohit Sharma) * Maintenance: Use Django's `FileResponse` when serving files such as Images or Documents (Jake Howard) * Maintenance: Deprecated `WidgetWithScript` base widget class (LB (Ben) Johnston) * Maintenance: Remove support for Django 4.1 and below (Sage Abdullah) 5.2.8 (03.02.2025) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent database error when calling permission_order.register on app ready (Daniel Kirkham, Matt Westcott) * Fix: Handle StreamField migrations where the field value is null (Joshua Munn) * Fix: Prevent `StreamChildrenToListBlockOperation` from duplicating data across multiple StreamField instances (Joshua Munn) * Fix: Prevent error on lazily loading StreamField blocks after the stream has been modified (Stefan Hammer) * Fix: Prevent syntax error on MySQL search when query includes symbols (Matt Westcott) 5.2.7 (01.11.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent multiple URLs from being combined into one when pasting links into a rich text input (Thibaud Colas) * Fix: Fix error on workflow settings view with multiple snippet types assigned to the same workflow on Postgres (Sage Abdullah) 5.2.6 (11.07.2024) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2024-39317: Regular expression denial-of-service via search query parsing (Jake Howard) * Fix: Fix image preview when Willow optimizers are enabled (Alex Tomkins) * Maintenance: Remove django-pattern-library upper bound in testing dependencies (Sage Abdullah) 5.2.5 (01.05.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Respect `WAGTAIL_ALLOW_UNICODE_SLUGS` setting when auto-generating slugs (LB (Ben) Johnston) * Fix: Use correct URL when redirecting back to page search results after an AJAX search (Sage Abdullah) * Fix: Provide `convert_mariadb_uuids` management command to assist with upgrading to Django 5.0+ on MariaDB (Matt Westcott) 5.2.4 (03.04.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent TitleFieldPanel from raising an error when the slug field is missing or read-only (Rohit Sharma) * Fix: Fix pagination links on model history and usage views (Matt Westcott) * Fix: Fix crash when accessing workflow reports with a deleted snippet (Sage Abdullah) * Fix: Prevent error on submitting an empty search in the admin under Elasticsearch (Maikel Martens) 5.2.3 (23.01.2024) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent a ValueError with `FormSubmissionsPanel` on Django 5.0 when creating a new form page (Matt Westcott) * Fix: Specify telepath 0.3.1 as the minimum supported version, for Django 5.0 compatibility (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 behavior 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 colors 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 customize `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 `