# Wagtail 7.1 release notes - IN DEVELOPMENT _Unreleased_ ```{contents} --- local: depth: 1 --- ``` ## What's new ### Site setting permissions The [](../reference/contrib/settings) app now allows permission over site settings to be granted on a per-site basis. This makes it possible to give non-superuser accounts full control over the configuration of an individual site. This feature was developed by Matt Westcott. ### Other features * 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) * Render listing buttons as template components (Sage Abdullah) * Define default `GenericRelations` for `RevisionMixin` and `WorkflowMixin`, to avoid issues with deletion cascades (Sage Abdullah) * Update Twitter oEmbed provider to recognize x.com links (manu) * 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 userbar 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`](date_field_validation) 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 API for extracting preview page content (Sage Abdullah) ### Bug fixes * Handle lazy translation strings as `preview_value` for `RichTextBlock` (Seb Corbin) * Fix handling of newline-separated choices in form builder when using non-windows newline characters (Baptiste Mispelon) * Ensure `WAGTAILADMIN_LOGIN_URL` is respected when logging out of the admin (Antoine Rodriguez, Ramon de Jezus) * Fix behavior of `ViewSet.inject_view_methods` with multiple methods (Gorlik) * Preserve query strings in URLs submitted to CloudFront for invalidation (Jigyasu Rajput) * Handle non-JSON-safe fields in `exclude_fields_in_copy` (Matt Westcott) * Allow upload of AVIF images through image chooser on Firefox (Matt Westcott) * Accept any string beginning with 'y' as confirmation for `import_redirects` command (Matt Westcott) * Fix error when accessing the submissions listing view with a non-form page (Sage Abdullah) * Replace inline styles with CSS classes in HTML files (Srishti Jaiswal) * Refactor remaining inline styles to avoid unsafe-inline style-src CSP (Chiemezuo Akujobi) * Avoid breaking words in listing table cells unless specifically enabled (Ziyao Yan) * Ensure that "all items in listing" option on image / document bulk actions respects user permissions (Alex Morega) * Adjust accessibility dialog position based on userbar position (Anees Asghar, Sage Abdullah) * Correctly handle ordering API results by mixed ascending and descending order (Rohit Sharma, Mahmoud Nasser) * Ensure that draft changes to an editable `first_published_at` field are preserved on reloading (Talha Rizwan) * Remove ngram parser on MySQL that prevented autocomplete search from returning results (Vince Salvino) * Only enable ManifestStaticFilesStorage in production settings, to aid test running (M. Sumair Khokhar) * Update `BooleanColumn` icons so they can be distinguished without relying on color (Sage Abdullah) * Do not delete default homepage by ID in home app migration (Matt Westcott) * Update the start project template to align with Django's recommendation to have the `django.middleware.security.SecurityMiddleware` first (Brylie Christopher Oxley) * Ensure keyboard usage will correctly focus on new comments, including replies, when the side panel is open or closed (Dhruvi Patel) * Handle `help_text` kwarg in `FloatBlock` (Nick Smith) ### Documentation * Add missing tag library imports to footer template code in tutorial (Dimaco) * Improve documentation around securing user-uploaded files (Jake Howard) * Introduce search_fields in a dedicated tutorial section instead of the introduction (Matt Westcott) * Add note about PDF XSS to security page (Matt Westcott) * Add documentation for how to [group blocks within the StreamField picker](block_grouping) (Gaurav Verma) ### Maintenance * Refactor `get_embed` to remove `finder` argument which was only used for mocking in unit tests (Jigyasu Rajput) * Simplify handling of `None` values in `TypedTableBlock` (Jigyasu Rajput) * Remove squash.io configuration (Sage Abdullah) * Use `utf8mb4` charset and collation for MySQL test database (Sage Abdullah) * Add `django.contrib.postgres` to test settings `INSTALLED_APPS` (Sage Abdullah) * Add integrity & resolved checksums to package-lock.json (Sylvain Fankhauser) * Replace `SlugController` with more generic and reusable `CleanController` (LB (Ben) Johnston) * Remove outdated nginx / uWSGI example config files from `/etc` (LB (Ben) Johnston) * Use browser built-in `EventTarget` instead of `events.EventEmitter` from Webpack (Sage Abdullah) ## Upgrade considerations - changes affecting all projects ## Upgrade considerations - deprecation of old functionality ## Upgrade considerations - changes affecting Wagtail customizations ### Deprecation of `PageListingButton`, `SnippetListingButton`, and `UserListingButton` The `PageListingButton`, `SnippetListingButton`, and `UserListingButton` classes have been deprecated in favour of the generic `ListingButton` and `Button` classes. The `PageListingButton` class was previously documented as part of the [`register_page_listing_buttons`](register_page_listing_buttons) hook. If you used this hook to add buttons to the page listing, you should now replace `wagtail.admin.widgets.PageListingButton` with `wagtail.admin.widgets.ListingButton`. Using the `PageListingButton` class will continue to work for now, but will raise a deprecation warning. The `SnippetListingButton` and `UserListingButton` classes were previously documented as part of the [`register_snippet_listing_buttons`](register_snippet_listing_buttons) and [`register_user_listing_buttons`](register_user_listing_buttons) hooks, respectively. If you used these hooks to add buttons to the snippet or user listing, you should now replace `wagtail.snippets.widgets.SnippetListingButton` and `wagtail.users.widgets.UserListingButton` with one of the following: - Use `wagtail.admin.widgets.Button` if you want the button to appear as an item inside the "More" actions dropdown in the listing. - Use `wagtail.admin.widgets.ListingButton` if you want the button to appear as a top-level button in the listing. Using the `SnippetListingButton` or `UserListingButton` classes will continue to work for now, but will raise a deprecation warning. The `PageListingButton`, `SnippetListingButton`, and `UserListingButton` classes will be removed in a future release. ### Using `ListingButton` in `IndexView.get_list_more_buttons` now renders the button as a top-level button If you have overridden the undocumented `get_list_more_buttons` method on a generic `IndexView` subclass (e.g. for a `ModelViewSet`) and used the `ListingButton` class to add buttons to the "More" actions dropdown, these buttons will now be rendered as top-level buttons in the listing. If you want the buttons to appear inside the "More" actions dropdown, you should use the `Button` class instead. ### `init_new_page` moved to `wagtail.signals` The [](init_new_page_signal) signal, previously defined in `wagtail.admin.signals`, has now been moved to `wagtail.signals`. Any import lines referencing the old location need to be updated. ## Upgrade considerations - changes to undocumented internals