Changelog ========= 5.2 (xx.xx.xxxx) - IN DEVELOPMENT ~~~~~~~~~~~~~~~~ * 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) * Maintenance: Fix snippet search test to work on non-fallback database backends (Matt Westcott) * Maintenance: Update Eslint, Prettier & Jest npm packages (LB (Ben) Johnston) * Maintenance: Add npm scripts for TypeScript checks and formatting SCSS files (LB (Ben) Johnston) 5.1 (01.08.2023) ~~~~~~~~~~~~~~~~ * Add support for read-only FieldPanels (Andy Babic) * Add support for query-time boosting to Elasticsearch 6 and above (Shohan Dutta Roy) * Add support for Elasticsearch 8 (Matt Westcott, Wesley van Lee) * Mark calls to `md5` as not being used for secure purposes, to avoid flagging on FIPS-mode systems (Sean Kelly) * Return filters from `parse_query_string` as a `QueryDict` to support multiple values (Aman Pandey) * Explicitly specify `MenuItem.name` for all admin menu and submenu items (Justin Koestinger) * Add oEmbed provider patterns for YouTube Shorts and YouTube Live URLs (valnuro, Fabien Le Frapper) * Add initial implementation of `PagePermissionPolicy` (Sage Abdullah) * Refactor `UserPagePermissionsProxy` and `PagePermissionTester` to use `PagePermissionPolicy` (Sage Abdullah, Tidiane Dia) * Add a predictable default ordering of the "Object/Other permissions" in the Group Editing view, allow this ordering to be customised (Daniel Kirkham) * Add `AbstractImage.get_renditions()` for efficient generation of multiple renditions (Andy Babic) * Optimise queries in collection permission policies using cache on the user object (Sage Abdullah) * Phone numbers entered via a link chooser will now have any spaces stripped out, ensuring a valid href="tel:..." attribute (Sahil Jangra) * Auto-select the `StreamField` block when only one block type is declared (Sébastien Corbin) * Add support for more advanced Draftail customisation APIs (Thibaud Colas) * Add the ability to export snippets listing via `SnippetViewSet.list_export` (Sage Abdullah) * Add support for adding HTML `attrs` on `FieldPanel`, `FieldRowPanel`, `MultiFieldPanel`, and others (Aman Pandey, Antoni Martyniuk, LB (Ben) Johnston) * Add support for `--template` option to `wagtail start` (Thibaud Colas) * Change to always cache renditions (Jake Howard) * Update link/document rich text tooltips for consistency with the inline toolbar (Albina Starykova) * Increase the contrast between the rich text / StreamField block picker and the page in dark mode (Albina Starykova) * Purge revisions of non-page models in `purge_revisions` command (Sage Abdullah) * Add support for AVIF images (Aman Pandey) * Change the default WebP quality to 80 to match AVIF (Aman Pandey) * Adopt optimised Wagtail logo in the admin interface (Albina Starykova) * Add support for presenting the userbar (Wagtail button) in dark mode (Albina Starykova) * Add Inspect view to snippets (Sage Abdullah) * Fix: Prevent choosers from failing when initial value is an unrecognised ID, e.g. when moving a page from a location where `parent_page_types` would disallow it (Dan Braghis) * Fix: Move comment notifications toggle to the comments side panel (Sage Abdullah) * Fix: Remove comment button on InlinePanel fields (Sage Abdullah) * Fix: Fix missing link to `UsageView` from `EditView` for snippets (Christer Jensen) * Fix: Prevent lowercase conversions of IndexView column headers (Virag Jain) * Fix: Ensure that `RichText` objects with the same values compare as equal (NikilTn) * Fix: Use `gettext_lazy` on generic model views so that language settings are correctly used (Matt Westcott) * Fix: Prevent JS error when reverting the spinner on a submit button after a validation error (LB (Ben) Johnston) * Fix: Prevent crash when comparing page revisions that include `MultipleChooserPanel` (Matt Westcott) * Fix: Ensure that title and slug continue syncing after entering non-URL-safe characters (LB (Ben) Johnston) * Fix: Ensure that title and slug are synced on keypress, not just on blur (LB (Ben) Johnston) * Fix: Add a more visible active state for side panel toggle buttons (Thibaud Colas) * Fix: Debounce and optimise live preview panel to prevent excessive requests (Sage Abdullah) * Fix: Use constant-time comparison for image serve URL signatures (Jake Howard) * Fix: Ensure taggit field type-ahead options show correctly in the dark mode theme (Sage Abdullah) * Fix: Fix the lock description message missing the model_name variable when locked only by system (Sébastien Corbin) * Fix: Fix empty blocks created in migration operations (Sandil Ranasinghe) * Fix: Ensure that gettext_lazy works correctly when using verbose_name on a generic Settings models (Sébastien Corbin) * Fix: Remove unnecessary usage of `innerHTML` when modifying DOM content (LB (Ben) Johnston) * Fix: Avoid `ValueError` when extending `PagesAPIViewSet` and setting `meta_fields` to an empty list (Henry Harutyunyan, Alex Morega) * Fix: Improve accessibility for header search, remove autofocus on page load, advise screen readers that content has changed when results update (LB (Ben) Johnston) * Fix: Fix incorrect override of `PagePermissionHelper.user_can_unpublish_obj()` in ModelAdmin (Sébastien Corbin) * Fix: Prevent memory exhaustion when updating a large number of image renditions (Jake Howard) * Fix: Add missing Time Zone conversions and date formatting throughout the admin (Stefan Hammer) * Fix: Ensure that audit logs and revisions consistently use UTC and add migration for existing entries (Stefan Hammer) * Fix: Make sure "critical" buttons have enough colour contrast in dark mode (Albina Starykova) * Fix: Improve visibility of scheduled publishing errors in status side panel (Sage Abdullah) * Fix: Prevent 'choose' permission from being ignored when looking up 'choose', 'edit' and 'delete' permissions in combination (Sage Abdullah) * Fix: Take user's permissions into account for image / document counts on the admin dashboard (Sage Abdullah) * Fix: Avoid N+1 queries in users index view (Tidiane Dia) * Fix: Use a theme-agnostic color token for read-only panels support in dark mode (Thibaud Colas) * Fix: Ensure collapsible StreamBlocks expand as necessary to show validation errors (Storm Heg) * Fix: Ensure userbar dialog can sit above other website content (LB (Ben) Johnston) * Fix: Fix preview panel loading issues (Sage Abdullah) * Fix: Fix `search_promotions` `0004_copy_queries` migration for long-lived Wagtail instances (Sage Abdullah) * Fix: Guard against `TypeError` in `0088_fix_log_entry_json_timestamps` migration (Sage Abdullah) * Fix: Add migration to replace JSON null values with empty objects in log entries' data (Sage Abdullah) * Fix: Typo in the `page_header_buttons` template tag when accessing the context's request object (Robert Rollins) * Docs: Document how to add non-ModelAdmin views to a `ModelAdminGroup` (Onno Timmerman) * Docs: Document how to add StructBlock data to a StreamField (Ramon Wenger) * Docs: Update ReadTheDocs settings to v2 to resolve urllib3 issue in linkcheck extension (Thibaud Colas) * Docs: Update documentation for `log_action` parameter on `RevisionMixin.save_revision` (Christer Jensen) * Docs: Reorganise snippets documentation to cover customisations and optional features (Sage Abdullah) * Docs: Update color customisations guidance to include theme-agnostic options (Thibaud Colas) * Docs: Mark LTS releases in release note page titles (Thiago C. S. Tioma) * Docs: Revise main Getting started tutorial for clarity (Kevin Chung (kev-odin)) * Docs: Revamp the start of the getting started section, with separate quick install page (Damilola Oladele) * Docs: Move the tutorial’s snippets section to come before tags (Damilola Oladele) * Docs: Rewrite the getting started tutorial to address identified friction points (Damilola Oladele) * Docs: Switch the Getting started tutorial’s snippets example to be more understandable (Damilola Oladele) * Docs: Update the deployment documentation page and remove outdated information (Jake Howard) * Docs: Add more items to performance page regarding pre-fetching images and frontend caching (Jake Howard) * Docs: Add docs for managing stored queries in `searchpromotions` (Scott Foster) * Docs: Add docs for migrating from ModelAdmin to Snippets (Sage Abdullah) * Maintenance: Removed support for Python 3.7 (Dan Braghis) * Maintenance: Switch to ruff for flake8 / isort code checking (Oliver Parker) * Maintenance: Deprecate `insert_editor_css` in favour of `insert_global_admin_css` (Ester Beltrami) * Maintenance: Optimise use of `specific` on Task and TaskState (Matt Westcott) * Maintenance: Use table UI component for workflow task index view (Matt Westcott) * Maintenance: Make header search available on generic index view (Matt Westcott) * Maintenance: Update pagination behaviour to reject out-of-range / invalid page numbers (Matt Westcott) * Maintenance: Remove color tokens which are duplicates / unused (Thibaud Colas) * Maintenance: Add tests to help with maintenance of theme color tokens (Thibaud Colas) * Maintenance: Split out a base listing view from generic index view (Matt Westcott) * Maintenance: Update type hints in admin/ui/components.py so that `parent_context` is mutable (Andreas Nüßlein) * Maintenance: Deprecate `UserPagePermissionsProxy` (Sage Abdullah) * Maintenance: Optimise the Settings context processor to avoid redundantly finding a Site to improve cache ratios (Jake Howard) * Maintenance: Convert page listing to a class-based view (Matt Westcott) * Maintenance: Clean up page reports and type usage views to be independent of page listing views (Matt Westcott) * Maintenance: Migrate Tagit initialisation to a Stimulus Controller (LB (Ben) Johnston) * Maintenance: Refactor GroupPagePermission to use Django's Permission model (Sage Abdullah) * Maintenance: Convert the CONTRIBUTORS file to Markdown (Dan Braghis) * Maintenance: Move `django-filter` version upper bound to v24 (Yuekui) * Maintenance: Update Pillow dependency to allow 10.x, only include support for >= 9.1.0 (Yuekui) * Maintenance: Migrate async header search and search within the Task chooser modal to `w-swap`, a Stimulus controller (LB (Ben) Johnston) * Maintenance: Replace Bootstrap tooltips with a new `w-tooltip` Stimulus controller (LB (Ben) Johnston) * Maintenance: Replace ModelAdmin history header human readable date template tag (LB (Ben) Johnston) * Maintenance: Update uuid to v9 and Jest to v29, with `jest-environment-jsdom` and new snapshot format (LB (Ben) Johnston) * Maintenance: Update test cases producing undesirable console output due to missing mocks, uncaught errors, warnings (LB (Ben) Johnston) * Maintenance: Remove unused snippets _header_with_history.html template (Thibaud Colas) * Maintenance: Migrate dialog instantiation to a new `w-dialog` Stimulus controller (Loveth Omokaro, LB (Ben) Johnston) * Maintenance: Support dialog template cloning using a new `w-teleport` Stimulus controller (Loveth Omokaro, LB (Ben) Johnston) * Maintenance: Migrate away from using the `"wagtailadmin/shared/field_as_li.html"` template include (Storm Heg) * Maintenance: Deprecate `wagtail.contrib.modeladmin` (Sage Abdullah) * Maintenance: Upgrade documentation theme `sphinx_wagtail_theme` to v6.1.1 which includes multiple styling fixes and always visible code copy buttons (LB (Ben) Johnston) * Maintenance: Don't update the reference index while deleting it (Andy Chosak) 5.0.2 (21.06.2023) ~~~~~~~~~~~~~~~~~~ * Added `TitleFieldPanel` to support title / slug field synchronisation (LB (Ben) Johnston) * Fix: Prevent JS error when reverting the spinner on a submit button after a validation error (LB (Ben) Johnston) * Fix: Prevent crash when comparing page revisions that include `MultipleChooserPanel` (Matt Westcott) * Fix: Ensure that title and slug continue syncing after entering non-URL-safe characters (LB (Ben) Johnston) * Fix: Ensure that title and slug are synced on keypress, not just on blur (LB (Ben) Johnston) * Fix: Add a more visible active state for side panel toggle buttons (Thibaud Colas) * Fix: Use custom dark theme colors for revision comparisons (Thibaud Colas) 5.0.1 (25.05.2023) ~~~~~~~~~~~~~~~~~~ * Fix: Rectify previous fix for TableBlock becoming uneditable after save (Sage Abdullah) * Fix: Ensure that copying page correctly picks up the latest revision (Matt Westcott) * Fix: Ensure comment buttons always respect `WAGTAILADMIN_COMMENTS_ENABLED` (Thibaud Colas) * Fix: Fix error when deleting a single snippet through the bulk actions interface (Sage Abdullah) * Fix: Pass the correct `for_update` value for `get_form_class` in `SnippetViewSet` edit views (Sage Abdullah) * Fix: Move comment notifications toggle to the comments side panel (Sage Abdullah) * Fix: Remove comment button on InlinePanel fields (Sage Abdullah) * Fix: Fix missing link to `UsageView` from `EditView` for snippets (Christer Jensen) * Fix: Prevent lowercase conversions of IndexView column headers (Virag Jain) * Fix: Fix various colour issues in dark mode (Thibaud Colas) * Docs: Update documentation for `log_action` parameter on `RevisionMixin.save_revision` (Christer Jensen) 5.0 (02.05.2023) ~~~~~~~~~~~~~~~~ * Added support for Django 4.2 * Object usage information on deleting objects (Sage Abdullah) * Support for SVG images (Joshua Munn, with sponsorship from YouGov) * Custom validation support for StreamField (Matt Westcott) * Add `WAGTAILIMAGES_EXTENSIONS` setting to restrict image uploads to specific file types (Aman Pandey, Ananjan-R) * Update user list column level to `Access level` to be easier to understand (Vallabh Tiwari) * Migrate `.button-longrunning` behaviour to a Stimulus controller with support for custom label element & duration (Loveth Omokaro) * Implement new simplified userbar designs (Albina Starykova) * Add more Axe rules to the accessibility checker (Albina Starykova) * Sort accessibility checker results by position on the page (Albina Starykova) * Highlight elements with errors in accessibility checker (Albina Starykova) * Add usage view for pages (Sage Abdullah) * Copy page form now updates the slug field dynamically with a slugified value on blur (Loveth Omokaro) * Ensure selected collection is kept when navigating from documents or images listings to add multiple views & upon upload (Aman Pandey, Bojan Mihelac) * Keep applied filters when downloading form submissions (Suyash Srivastava) * Messages added dynamically via JavaScript now have an icon to be consistent with those supplied in the page's HTML (Aman Pandey) * Switch lock/unlock side panel toggle to a switch, with more appropriate confirmation message status (Sage Abdullah) * Ensure that changed or cleared selection from choosers will dispatch a DOM `change` event (George Sakkis) * Add the ability to disable model indexing by setting `search_fields = []` (Daniel Kirkham) * Enhance `wagtail.search.utils.parse_query_string` to allow inner single quotes for key/value parsing (Aman Pandey) * Add helpful properties to `Locale` for more convenient usage within templates (Andy Babic) * Allow customising icons for snippets via `SnippetViewSet.icon` (Daniel Kirkham, Sage Abdullah) * Allow customising the base URL and URL namespace for snippet views (Sage Abdullah) * Allow customising the default ordering and number of items per page for snippet listing views (Sage Abdullah) * Re-label "StreamField blocks" option in block picker to "Blocks" (Thibaud Colas) * Re-implement styleguide icons list as an auto-generated sequence of tables (Thibaud Colas) * Switch styleguide navigation to use panel components and minimap (Thibaud Colas) * Explicitly specify `MenuItem.name` for Snippets, Reports, and Settings menu items (Sage Abdullah) * Move the help text of fields and blocks directly below their label for easier reading (Thibaud Colas) * Allow filters on snippet and generic index views to be customised through the `list_filter` attribute (Sage Abdullah) * The select all checkbox in simple translation's submit translation page will now be in sync with other checkbox changes (Hanoon) * Update Wagtail’s default icon set to Font Awesome 6 (Thibaud Colas) * Allow admin templates for snippets to be overridden on a per-model or per-app basis (Sage Abdullah) * Allow overriding the base queryset to be used in snippet `IndexView` (Sage Abdullah) * Revise alignment and spacing of form fields and sections (Thibaud Colas) * Update Wagtail’s type scale so StreamField block labels and field labels are the same size (Thibaud Colas) * Allow customising the `search_fields` and search backend via SnippetViewSet (Sage Abdullah) * Style comments as per page editor design, in side panel (Karl Hobley, Thibaud Colas) * Add support for custom panel icons, with defaults, displayed for top-level editor panels (Sage Abdullah) * Add new icons for StreamField blocks (Sage Abdullah) * Reveal the minimap on click rather than hover, keeping it expanded until dismissed, with state saved between page loads (Thibaud Colas) * Expand a collapsed form section when navigating to it with the minimap (Thibaud Colas) * The minimap and "Collapse all" button now appear next to side panels rather than underneath, so they can be used at any time (Thibaud Colas) * Allow `panels` / `edit_handler` to be specified via `SnippetViewSet` (Sage Abdullah) * Introduce dark mode support for the Wagtail admin interface, with a toggle in account preferences (Thibaud Colas) * Allow snippets to be registered into arbitrary admin menu items (Sage Abdullah) * Add configuration APIs in user bar accessibility checker for simpler customisation of the checks performed * ReferenceIndex modified to only index Wagtail-related models, and allow other models to be explicitly registered (Daniel Kirkham) * Fix: Ensure `label_format` on StructBlock gracefully handles missing variables (Aadi jindal) * Fix: Adopt a no-JavaScript and more accessible solution for the 'Reset to default' switch to Gravatar when editing user profile (Loveth Omokaro) * Fix: Ensure `Site.get_site_root_paths` works on cache backends that do not preserve Python objects (Jaap Roes) * Fix: Ignore right clicks on side panel resizer (Sage Abdullah) * Fix: Resize in the correct direction for RTL languages with the side panel resizer (Sage Abdullah) * Fix: Support creating `StructValue` copies (Tidiane Dia) * Fix: Fix image uploads on storage backends that require file pointer to be at the start of the file (Matt Westcott) * Fix: Fix "Edit this page" missing from userbar (Satvik Vashisht) * Fix: No longer allow invalid duplicate site hostname creation as hostnames and domain names are a case insensitive (Coen van der Kamp) * Fix: Image and Document multiple upload update forms now correctly use the progress button (longrunning) behaviour when clicked (Loveth Omokaro) * Fix: Prevent audit log report from failing on missing models (Andy Chosak) * Fix: Ensure that the privacy collection privacy edit button is styled as a button (Jatin Kumar) * Fix: Fix page/snippet cannot proceed a `GroupApprovalTask` if it's locked by someone outside of the group (Sage Abdullah) * Fix: Allow manual lock even if `WorkflowLock` is currently applied (Sage Abdullah) * Fix: Add missing log information for `wagtail.schedule.cancel` (Stefan Hammer) * Fix: Fix timezone activation leaking into subsequent requests in `require_admin_access()` (Stefan Hammer) * Fix: Fix dialog component's message to have rounded corners at the top side (Sam) * Fix: When multiple documents are uploaded and then subsequently updated, ensure that existing success messages are cleared correctly (Aman Pandey) * Fix: Prevent matches from unrelated models from leaking into SQLite FTS searches (Matt Westcott) * Fix: Prevent duplicate addition of StreamField blocks with the new block picker (Deepam Priyadarshi) * Fix: Enable partial search on images and documents index view where available (Mng) * Fix: Adopt a no-JavaScript and more accessible solution for option selection in reporting, using HTML only `radio` input fields (Mehul Aggarwal) * Fix: Ensure that document search results count shows the correct all matches, not the paginate total (Andy Chosak) * Fix: Fix radio and checkbox elements shrinking when using a long label (Sage Abdullah) * Fix: Fix select elements expanding beyond their container when using a long option label (Sage Abdullah) * Fix: Fix timezone handling of `TemplateResponse`s for users with a custom timezone (Stefan Hammer, Sage Abdullah) * Fix: Ensure TableBlock initialisation correctly runs after load and its width is aligned with the parent panel (Dan Braghis) * Fix: Ensure that the JavaScript media files are loaded by default in Snippet index listings for date fields (Sage Abdullah) * Fix: Fix server-side caching of the icons sprite (Thibaud Colas) * Fix: Avoid showing scrollbars in the block picker unless necessary (Babitha Kumari) * Fix: Always show Add buttons, guide lines, Move up/down, Duplicate, Delete; in StreamField and Inline Panel (Thibaud Colas) * Fix: Make admin JS i18n endpoint accessible to non-authenticated users (Matt Westcott) * Fix: Fix incorrect API serialisation for document `download_url` when `WAGTAILDOCS_SERVE_METHOD` is `direct` (Swojak-A) * Fix: Fix template configuration of snippets index results view (fidoriel, Sage Abdullah) * Fix: Prevent long preview mode names from making the select element overflow the side panel (Sage Abdullah) * Fix: Autosize text area field will now correctly resize when switching between comments toggle states (Suyash Srivastava) * Fix: When i18n is not enabled, avoid making a Locale query on every page view (Dan Braghis) * Fix: Fix initialisation of commenting widgets within StreamField (Thibaud Colas) * Fix: Fix various regressions in the commenting UI (Thibaud Colas) * Fix: Prevent TableBlock from becoming uneditable after save (Sage Abdullah) * Fix: Correctly show the "new item" badge within menu sections previously dismissed (Sage Abdullah) * Fix: Fix side panel stuck in resize state when pointer is released outside the grip (Sage Abdullah) * Docs: Add code block to make it easier to understand contribution docs (Suyash Singh) * Docs: Add new "Icons" page for icons customisation and reuse across the admin interface (Coen van der Kamp, Thibaud Colas) * Docs: Fix broken formatting for MultiFieldPanel / FieldRowPanel permission kwarg docs (Matt Westcott) * Docs: Add helpful troubleshooting links and refine wording for getting started with development (Loveth Omokaro) * Docs: Ensure search autocomplete overlay on mobile does not overflow the viewport (Ayman Makroo) * Docs: Improve documentation for InlinePanel (Vallabh Tiwari) * Docs: Add contributor guidelines for building Stimulus Controllers (Thibaud Colas, Loveth Omokaro, LB (Ben) Johnston) * Docs: Fix typo in "Extending Draftail" documentation (Hans Kelson) * Docs: Clarify `ClusterableModel` requirements for using relations with `RevisionMixin`-enabled models (Sage Abdullah) * Docs: Add guide to making your first contribution (LB (Ben) Johnston) * Maintenance: Removed features deprecated in Wagtail 3.0 and 4.0 (Matt Westcott) * Maintenance: Update djhtml (html formatting) library to v 1.5.2 (Loveth Omokaro) * Maintenance: Re-enable `strictPropertyInitialization` in tsconfig (Thibaud Colas) * Maintenance: Refactor accessibility checker userbar item (Albina Starykova) * Maintenance: Removed unused `Page.get_static_site_paths` method (Yosr Karoui) * Maintenance: Provisional Django 5.0 compatibility fixes (Sage Abdullah) * Maintenance: Add unit tests for `CollapseAll` and `MinimapItem` components (Albina Starykova) * Maintenance: Code quality fixes (GLEF1X) * Maintenance: Refactor image / document / snippet usage views into a shared generic view (Sage Abdullah) * Maintenance: Rename the Stimulus `AutoFieldController` to the less confusing `SubmitController` (Loveth Omokaro) * Maintenance: Replace `script` tags with `template` tag for image/document bulk uploads (Rishabh Kumar Bahukhandi) * Maintenance: Remove unneeded float styles on 404 page (Fabien Le Frapper) * Maintenance: Convert userbar implementation to TypeScript (Albina Starykova) * Maintenance: Migrate slug field behaviour to a Stimulus controller and create new `SlugInput` widget (Loveth Omokaro) * Maintenance: Refactor `status` HTML usage to shared template tag (Aman Pandey, LB (Ben) Johnston, Himanshu Garg) * Maintenance: Add curlylint and update djhtml, semgrep versions in pre-commit config (Himanshu Garg) * Maintenance: Use shared header template for `ModelAdmin` and Snippets type index header (Aman Pandey) * Maintenance: Move models and forms for `wagtailsearch.Query` to `wagtail.contrib.search_promotions` (Karl Hobley) * Maintenance: Migrate `initErrorDetection` (tabs error counts) to a Stimulus Controller `w-count` (Aman Pandey) * Maintenance: Migrate `window.addMessage` behaviour to a global event listener & Stimulus Controller approach with `w-messages` (Aman Pandey) * Maintenance: Update Algolia DocSearch to use new application and correct versioning setup (Thibaud Colas) * Maintenance: Move snippet choosers and model check registration to `SnippetViewSet.on_register()` (Sage Abdullah) * Maintenance: Remove unused snippets delete-multiple view (Sage Abdullah) * Maintenance: Improve performance of determining live page URLs across the admin interface using `pageurl` template tag (Satvik Vashisht) * Maintenance: Migrate `window.initSlugAutoPopulate` behaviour to a Stimulus Controller `w-sync` (Loveth Omokaro) * Maintenance: Rename `status` classes to `w-status` to align with preferred CSS class naming conventions (Mansi Gundre) * Maintenance: Include wagtail-factories in `wagtail.test.utils` to avoid cross-dependency issues (Matt Westcott) * Maintenance: Fix search tests to correctly reflect behaviour of search backends other than the fallback backend (Matt Westcott) * Maintenance: Migrate select all checkbox in simple translation's submit translation page to Stimulus controller `w-bulk`, remove inline script usage (Hanoon) * Maintenance: Refactor `SnippetViewSet` to extend `ModelViewSet` (Sage Abdullah) * Maintenance: Migrate initDismissibles behaviour to a Stimulus controller `w-disimissible` (Loveth Omokaro) * Maintenance: Replace jQuery autosize v3 with Stimulus `w-autosize` controller using autosize npm package v6 (Suyash Srivastava) * Maintenance: Update `w-action` controller to support a click method (Suyash Srivastava) * Maintenance: Migrate the site settings switcher select from jQuery to a refined version of the `w-action` controller usage (Aadi jindal, LB (Ben) Johnston) * Maintenance: Always use expanded Sass output so CSS processing is identical in development and production builds (Thibaud Colas) * Maintenance: Refactor admin color palette to semantic, theme-agnostic design tokens (Thibaud Colas) 4.2.4 (25.05.2023) ~~~~~~~~~~~~~~~~~~ * Fix: Rectify previous fix for TableBlock becoming uneditable after save (Sage Abdullah) * Fix: Ensure that copying page correctly picks up the latest revision (Matt Westcott) * Fix: Adjust collection field alignment in multi-upload forms (LB (Ben) Johnston) * Fix: Prevent lowercase conversions of IndexView column headers (Virag Jain) * Docs: Update documentation for `log_action` parameter on `RevisionMixin.save_revision` (Christer Jensen) 4.2.3 (02.05.2023) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent TableBlock from becoming uneditable after save (Sage Abdullah) 4.2.2 (03.04.2023) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2023-28836 - Stored XSS attack via ModelAdmin views (Thibaud Colas) * Fix: CVE-2023-28837 - Denial-of-service via memory exhaustion when uploading large files (Jake Howard) * Fix: Fix radio and checkbox elements shrinking when using a long label (Sage Abdullah) * Fix: Fix select elements expanding beyond their container when using a long option label (Sage Abdullah) * Fix: Fix timezone handling of `TemplateResponse`s for users with a custom timezone (Stefan Hammer, Sage Abdullah) * Fix: Ensure TableBlock initialisation correctly runs after load and its width is aligned with the parent panel (Dan Braghis) * Fix: Ensure that the JavaScript media files are loaded by default in Snippet index listings for date fields (Sage Abdullah) * Fix: Fix server-side caching of the icons sprite (Thibaud Colas) * Fix: Avoid showing scrollbars in the block picker unless necessary (Babitha Kumari) * Fix: Always show Add buttons, guide lines, Move up/down, Duplicate, Delete; in StreamField and Inline Panel (Thibaud Colas) * Fix: Ensure datetimepicker widget overlay shows over modals & drop-downs (LB (Ben) Johnston) * Docs: Fix module path for `MultipleChooserPanel` in panel reference docs * Maintenance: Render large image renditions to disk (Jake Howard) 4.2.1 (13.03.2023) ~~~~~~~~~~~~~~~~~~ * Fix: Support creating `StructValue` copies (Tidiane Dia) * Fix: Fix image uploads on storage backends that require file pointer to be at the start of the file (Matt Westcott) * Fix: Fix "Edit this page" missing from userbar (Satvik Vashisht) * Fix: Prevent audit log report from failing on missing models (Andy Chosak) * Fix: Fix page/snippet cannot proceed a `GroupApprovalTask` if it's locked by someone outside of the group (Sage Abdullah) * Fix: Add missing log information for `wagtail.schedule.cancel` (Stefan Hammer) * Fix: Fix timezone activation leaking into subsequent requests in `require_admin_access()` (Stefan Hammer) * Fix: Fix dialog component's message to have rounded corners at the top side (Sam) * Fix: Prevent matches from unrelated models from leaking into SQLite FTS searches (Matt Westcott) * Fix: Prevent duplicate addition of StreamField blocks with the new block picker (Deepam Priyadarshi) * Docs: Clarify `ClusterableModel` requirements for using relations with `RevisionMixin`-enabled models (Sage Abdullah) * Maintenance: Update Algolia DocSearch to use new application and correct versioning setup (Thibaud Colas) 4.2 (06.02.2023) ~~~~~~~~~~~~~~~~ * Added StreamField data migration helpers (Sandil Ranasinghe, Jacob Topp-Mugglestone, Joshua Munn, Karl Hobley) * Added ability to lock snippet models with `LockableMixin` (Sage Abdullah) * Added ability to submit snippets for moderation with `WorkflowMixin` (Sage Abdullah) * Create `{% fullpageurl %}` tag for getting the absolute URL of a page (Jake Howard) * Added `MultipleChooserPanel`, a variant of `InlinePanel` with improved editor experience when inserting multiple linked objects (Matt Westcott) * Test assertion util `WagtailPageTestCase.assertCanCreate` now supports the kwarg `publish=True` to determine whether to publish the page (Harry Percival, Akua Dokua Asiedu, Matt Westcott) * Ensure that the `rebuild_references_index` command can run without console output if called with `--verbosity 0` (Omerzahid Ali, Aman Pandey) * Add full support for secondary buttons with icons in the Wagtail design system - `button bicolor button--icon button-secondary` including the `button-small` variant (Seremba Patrick) * Add `purge_embeds` management command to delete all the cached embed objects in the database (Aman Pandey) * Make it possible to resize the page editor’s side panels (Sage Abdullah) * Add ability to include `form_fields` as an APIField on `FormPage` (Sævar Öfjörð Magnússon, Suyash Singh, LB (Ben) Johnston) * Ensure that images listings are more consistently aligned when there are fewer images uploaded (Theresa Okoro) * Add more informative validation error messages for non-unique slugs within the admin interface and for programmatic page creation (Benjamin Bach) * Always show the page editor title field’s border when the field is empty (Thibaud Colas) * Snippet models extending `DraftStateMixin` now automatically define a "Publish" permission type (Sage Abdullah) * Users now remain on the edit page after saving a snippet as draft (Sage Abdullah) * Base project template now populates the meta description tag from the search description field (Aman Pandey) * Added support for `azure-mgmt-cdn` version >= 10 and `azure-mgmt-frontdoor` version >= 1 in the frontend cache invalidator (Sylvain Fankhauser) * Add a system check to warn when a `django-storages` backend is configured to allow overwriting (Rishabh jain) * Update admin focus outline color to have higher contrast against white backgrounds (Thibaud Colas) * Implement latest design for the admin dashboard header (Thibaud Colas, Steven Steinwand) * Add Axe accessibility checker integration within userbar, with count and list of errors (Albina Starykova) * Restyle the userbar to follow the visual design of the Wagtail admin (Albina Starykova) * Allow configuring Axe accessibility checker integration via `construct_wagtail_userbar` hook (Sage Abdullah) * Support pinning and un-pinning the rich text editor toolbar depending on user preference (Thibaud Colas) * Make the rich text block trigger and slash-commands always available regardless of where the cursor is (Thibaud Colas) * Adjust the size of panel labels on the "Account" form (Thibaud Colas) * Delay hiding the contents of the side panels when closing, so the animation is smoother (Thibaud Colas) * ListBlock now shows item-by-item differences when comparing versions (Tidiane Dia) * Implement a new design for chooser buttons with better accessibility (Thibaud Colas) * Fix: Make sure workflow timeline icons are visible in high-contrast mode (Loveth Omokaro) * Fix: Ensure authentication forms (login, password reset) have a visible border in Windows high-contrast mode (Loveth Omokaro) * Fix: Ensure visual consistency between buttons and links as buttons in Windows high-contrast mode (Albina Starykova) * Fix: references extraction for ChooserBlock (Alex Tomkins) * Fix: Incorrectly formatted link in the documentation for Wagtail community support (Bolarinwa Comfort Ajayi) * Fix: Text within status tags text will now resize correctly when customizing browser font size (Mary Ojo) * Fix: Ensure logo shows correctly on log in page in Windows high-contrast mode (Loveth Omokaro) * Fix: Comments notice background overflows its container (Yekasumah) * Fix: Ensure links within help blocks meet colour contrast guidelines for accessibility (Theresa Okoro) * Fix: Ensure the skip link (used for keyboard control) meets colour contrast guidelines for accessibility (Dauda Yusuf) * Fix: Ensure tag fields correctly show in both dark and light Windows high-contrast modes (Albina Starykova) * Fix: Ensure new tooltips & tooltip menus have visible borders and tip triangle in Windows high-contrast mode (Juliet Adeboye) * Fix: Ensure there is a visual difference of 'active/current link' vs normal links in Windows high-contrast mode (Mohammad Areeb) * Fix: Avoid issues where trailing whitespace could be accidentally removed in translations for new page & snippet headers (Florian Vogt) * Fix: Make sure minimap error indicators follow the minimap scrolling (Thibaud Colas) * Fix: Remove the ability to view or add comments to `InlinePanel` inner fields to avoid lost or incorrectly linked comments (Jacob Topp-Mugglestone) * Fix: Use consistent heading styles on top-level fields in the page editor (Sage Abdullah) * Fix: Allow button labels to wrap onto two lines in dropdown buttons (Coen van der Kamp) * Fix: Remove spurious horizontal resize handle from text areas (Matt Westcott) * Fix: Move DateField, DateTimeField, TimeField comment buttons to be right next to the fields (Theresa Okoro) * Fix: Support text resizing in workflow steps cards (Ivy Jeptoo) * Fix: Ignore images added via fixtures when using `WAGTAILIMAGES_FEATURE_DETECTION_ENABLED` to avoid errors for images that do not exist (Aman Pandey) * Fix: Restore ability to perform JSONField query operations against StreamField when running against the Django 4.2 development branch (Sage Abdullah) * Fix: Ensure there is correct grammar and pluralisation for Tab error counts shown to screen readers (Aman Pandey) * Fix: Pass through expected expected `cc`, `bcc` and `reply_to` to the Django mail helper from `wagtail.admin.mail.send_mail` (Ben Gosney) * Fix: Allow reviewing or reverting to a Page's initial revision (Andy Chosak) * Fix: Use the correct padding for autocomplete block picker (Umar Farouk Yunusa) * Fix: Ensure that short content pages (such as editing snippets) do not show an inconsistent background (Sage Abdullah) * Fix: Fix horizontal positioning of rich text inline toolbar (Thibaud Colas) * Fix: Ensure that `DecimalBlock` correctly handles `None`, when `required=False`, values (Natarajan Balaji) * Fix: Close the userbar when clicking its toggle (Albina Starykova) * Fix: Add a border around the userbar menu in Windows high-contrast mode so it can be identified (Albina Starykova) * Fix: Make sure browser font resizing applies to the userbar (Albina Starykova) * Fix: Fix check for `delete_url_name` attribute in generic `DeleteView` (Alex Simpson) * Fix: Re-implement design system colors so HSL values exactly match the desired RGB (Albina Starykova) * Fix: Resolve issue where workflow and other notification emails would not include the correct tab URL for account notification management (LB (Ben) Johnston) * Fix: Use consistent spacing above and below page headers (Thibaud Colas) * Fix: Use the correct icon sizes and spacing in slim header (Thibaud Colas) * Fix: Use the correct color for placeholders in rich text fields (Thibaud Colas) * Fix: Prevent obstructing the outline around rich text fields (Thibaud Colas) * Fix: Page editor dropdowns now use indigo backgrounds like elsewhere in the admin interface (Thibaud Colas) * Fix: Allow parsing of multiple key/value pairs from string in `wagtail.search.utils.parse_query_string` (Beniamin Bucur) * Fix: Prevent memory exhaustion when purging a large number of revisions (Jake Howard) * Fix: Add right-to-left (RTL) support for the following form components: Switch, Minimap, live preview (Thibaud Colas) * Fix: Improve right-to-left (RTL) positioning for the following components: Page explorer, Sidebar sub-menu, rich text tooltips, rich text toolbar trigger, editor section headers (Thibaud Colas) * Fix: Use the workflow name as the workflow information dialog title (Sage Abdullah) * Fix: Link to workflow history view instead of page history view in the workflow information dialog (Sage Abdullah) * Fix: Fix in-progress count in warning message when disabling workflows (Sage Abdullah) * Fix: Show workflow name on workflow history index page (Sage Abdullah) * Fix: Fix workflow history detail timeline content from showing on initial load (Sage Abdullah) * Fix: Center-align StreamField and rich text block picker buttons with the dotted guide line (Thibaud Colas) * Fix: Search bar in chooser modals now performs autocomplete searches under PostgreSQL (Matt Westcott) * Fix: Server-side document filenames are preserved when replacing a document file (Suyash Singh, Matt Westcott) * Fix: Add missing wagtailadmin_tags in `workflow_state_approved.html` template (Alex Tomkins) * Fix: Do not show bulk actions checkbox in page type usage view (Sage Abdullah) * Fix: Prevent account name from overflowing the sidebar (Aman Pandey) * Fix: Ensure edit form is displayed as unlocked immediately after cancelling a workflow (Sage Abdullah) * Fix: Prevent `latest_revision` pointer from being copied over when copying translatable snippets for translation (Sage Abdullah) * Fix: Page listings actions under the "More" dropdown are now accessible for screen reader and keyboard users (Thibaud Colas) * Fix: Bulk actions under the "More" dropdown are now accessible for screen reader and keyboard users (Thibaud Colas) * Fix: Navigation to translations via the locale dropdown is now accessible for screen reader and keyboard users (Thibaud Colas) * Fix: Make it possible for speech recognition users to reveal chooser buttons (Thibaud Colas) * Docs: Add custom permissions section to permissions documentation page (Dan Hayden) * Docs: Add documentation for how to get started with contributing translations for the Wagtail admin (Ogunbanjo Oluwadamilare) * Docs: Officially recommend `fnm` over `nvm` in development documentation (LB (Ben) Johnston) * Docs: Mention the importance of passing `request` and `current_site` to `get_url` on the performance documentation page (Jake Howard) * Docs: Add documentation for `register_user_listing_buttons` hook (LB (Ben Johnston)) * Docs: Add development (contributing to Wagtail) documentation notes for development on Windows (Akua Dokua Asiedu) * Docs: Mention Wagtail’s usage of Django’s default user model by default (Temidayo Azeez) * Docs: Add links to treebeard documentation for relevant methods (Temidayo Azeez) * Docs: Add clarification on where to register entity plugins (Mark McOsker) * Docs: Fix logo in README not being visible in high-contrast mode (Benita Anawonah) * Docs: Improve 'first wagtail site' tutorial (Akua Dokua Asiedu) * Docs: Grammatical adjustments of `page models` usage guide (Damilola Oladele) * Docs: Add class inheritance information to StreamField block sreference (Temidayo Azeez) * Docs: Document the hook `register_image_operations` and add an example of a custom Image filter (Coen van der Kamp) * Docs: Fix incorrect example code for StreamField migration of `RichTextField` (Matt Westcott) * Docs: Document the policy needed to create invalidations in CloudFront (Jake Howard) * Docs: Document how to add permission restriction to a report view (Rishabh jain) * Docs: Add example for how to configure API `renderer_classes` (Aman Pandey) * Docs: Document potential data loss for BaseLogEntry migration in 3.0 (Sage Abdullah) * Docs: Add documentation for the reference index mechanism (Daniel Kirkham) * Docs: Remove confusing `SettingsPanel` reference in the page editing `TabbedInterface` example as `SettingsPanel` no longer shows anything as of 4.1 (Kenny Wolf, Julian Bigler) * Maintenance: Switch to using Willow instead of Pillow for images (Darrel O'Pry) * Maintenance: Remove unsquashed `testapp` migrations (Matt Westcott) * Maintenance: Upgrade to Node 18 for frontend build tooling (LB (Ben) Johnston) * Maintenance: Run Python tests with coverage and upload coverage data to codecov (Sage Abdullah) * Maintenance: Clean up duplicate JavaScript for the `escapeHtml` function (Jordan Rob) * Maintenance: Clean up Prettier & Eslint usage for search promotions formset JS file (LB (Ben Johnston)) * Maintenance: Ensure that translation file generation ignores JavaScript unit tests and clean up unit tests for Django gettext utils (LB (Ben Johnston)) * Maintenance: Migrated `initButtonSelects` from core.js to own TypesScript file and add unit tests (Loveth Omokaro) * Maintenance: Migrated `initSkipLink` util to TypeScript and add JSDoc & unit tests (Juliet Adeboye) * Maintenance: Clean up some unused utility classes and migrate `unlist` to Tailwind utility class `w-list-none` (Loveth Omokaro) * Maintenance: Clean up linting on legacy code and add shared util `hasOwn` in TypeScript (Loveth Omokaro) * Maintenance: Remove unnecessary box-sizing: border-box declarations in SCSS (Albina Starykova) * Maintenance: Migrated `initTooltips` to TypeScript add JSDoc and unit tests (Fatuma Abdullahi) * Maintenance: Migrated `initTagField` from core.js to own TypeScript file and add unit tests (Chisom Okeoma) * Maintenance: Added unit tests & JSDoc to `initDissmisibles` (Yekasumah) * Maintenance: Standardise on `classname` for passing HTML class attributes (LB (Ben Johnston)) * Maintenance: Clean up expanding formset and `InlinePanel` JavaScript initialisation code and adopt a class approach (Matt Westcott) * Maintenance: Extracted revision and draft state logic from generic views into mixins (Sage Abdullah) * Maintenance: Extracted generic lock / unlock views from page lock / unlock views (Sage Abdullah) * Maintenance: Move `identity` JavaScript util into shared utils folder (LB (Ben Johnston)) * Maintenance: Remove unnecessary declaration of function to determine URL query params, instead use `URLSearchParams` (Loveth Omokaro) * Maintenance: Update `tsconfig` to better support modern TypeScript development and clean up some code quality issues via Eslint (Loveth Omokaro) * Maintenance: Set up Stimulus application initialisation according to RFC 78 (LB (Ben) Johnston) * Maintenance: Refactor submit-on-change search filters for image and document listings to use Stimulus (LB (Ben) Johnston) * Maintenance: Switch userbar to initialise a Web Component to avoid styling clashes (Albina Starykova) * Maintenance: Refactor userbar stylesheets to use the same CSS loading as the rest of the admin (Albina Starykova) * Maintenance: Remove unused search-bar and button-filter styles (Thibaud Colas) * Maintenance: Use util method to construct dummy requests in tests (Jake Howard) * Maintenance: Remove unused dev-only react-axe integration (Thibaud Colas) * Maintenance: Migrate accessible Skip Link implementation to a Stimulus controller (Loveth Omokaro) * Maintenance: Split up `wagtail.admin.panels` into submodules, existing exports have been preserved (Matt Westcott) * Maintenance: Refactor userbar styles to use the same stylesheet as other components (Thibaud Colas) * Maintenance: Add deprecation warnings for `wagtail.core` and other imports deprecated in Wagtail 3.0 (Matt Westcott) * Maintenance: Migrate admin upgrade notification message implementation to a Stimulus controller (Loveth Omokaro) * Maintenance: Migrate workflow and workflow tasks enable action and lock/unlock actions to a Stimulus controller (Loveth Omokaro) * Maintenance: Pull out icon sprite setup function from inline script to its own TypeScript file & add unit tests (Loveth Omokaro) * Maintenance: Upgraded Transifex configuration to v3 (Loic Teixeira) * Maintenance: Replace repeated HTML `avatar` component with a template tag include `{% avatar ... %}` throughout the admin interface (Aman Pandey) * Maintenance: Remove unused `icon-help` and `help-inverse` code (Thibaud Colas) * Maintenance: Migrate privacy switch, FileFields, history buttons, error messages, Datetimepicker, ordering icons, thumbnails, ModelAdmin, page listings, workflows, and user creation form controls to SVG icons (Thibaud Colas) * Maintenance: Switch form submission listings to use the same ordering icons as other listings (Thibaud Colas) * Maintenance: Refactor "More" dropdowns, locale selector, "Switch locales", page actions, to use the same dropdown component (Thibaud Colas) 4.1.6 (25.05.2023) ~~~~~~~~~~~~~~~~~~ * Fix: Rectify previous fix for TableBlock becoming uneditable after save (Sage Abdullah) * Fix: Ensure that copying page correctly picks up the latest revision (Matt Westcott) * Fix: Adjust collection field alignment in multi-upload forms (LB (Ben) Johnston) * Fix: Prevent lowercase conversions of IndexView column headers (Virag Jain) * Docs: Update documentation for `log_action` parameter on `RevisionMixin.save_revision` (Christer Jensen) 4.1.5 (02.05.2023) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent TableBlock from becoming uneditable after save (Sage Abdullah) 4.1.4 (03.04.2023) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2023-28836 - Stored XSS attack via ModelAdmin views (Thibaud Colas) * Fix: CVE-2023-28837 - Denial-of-service via memory exhaustion when uploading large files (Jake Howard) * Fix: Fix radio and checkbox elements shrinking when using a long label (Sage Abdullah) * Fix: Fix select elements expanding beyond their container when using a long option label (Sage Abdullah) * Fix: Fix timezone handling of `TemplateResponse`s for users with a custom timezone (Stefan Hammer, Sage Abdullah) * Fix: Ensure TableBlock initialisation correctly runs after load and its width is aligned with the parent panel (Dan Braghis) * Fix: Ensure that the JavaScript media files are loaded by default in Snippet index listings for date fields (Sage Abdullah) * Fix: Fix server-side caching of the icons sprite (Thibaud Colas) * Fix: Always show Add buttons, guide lines, Move up/down, Duplicate, Delete; in StreamField and Inline Panel (Thibaud Colas) * Fix: Ensure datetimepicker widget overlay shows over modals & drop-downs (LB (Ben) Johnston) * Maintenance: Render large image renditions to disk (Jake Howard) 4.1.3 (13.03.2023) ~~~~~~~~~~~~~~~~~~ * Fix: Add right-to-left (RTL) support for the following form components: Switch, Minimap, live preview (Thibaud Colas) * Fix: Improve right-to-left (RTL) positioning for the following components: Page explorer, Sidebar sub-menu, rich text tooltips, rich text toolbar trigger, editor section headers (Thibaud Colas) * Fix: Ensure links within help blocks meet colour contrast guidelines for accessibility (Theresa Okoro) * Fix: Support creating `StructValue` copies (Tidiane Dia) * Fix: Fix "Edit this page" missing from userbar (Satvik Vashisht) * Fix: Prevent audit log report from failing on missing models (Andy Chosak) * Fix: Add missing log information for `wagtail.schedule.cancel` (Stefan Hammer) * Fix: Fix timezone activation leaking into subsequent requests in `require_admin_access()` (Stefan Hammer) * Fix: Prevent matches from unrelated models from leaking into SQLite FTS searches (Matt Westcott) * Docs: Clarify `ClusterableModel` requirements for using relations with `RevisionMixin`-enabled models (Sage Abdullah) * Maintenance: Update Algolia DocSearch to use new application and correct versioning setup (Thibaud Colas) 4.1.2 (06.02.2023) ~~~~~~~~~~~~~~~~~~ * Fix: Make "Cancel scheduled publish" button correctly redirect back to the edit view (Sage Abdullah) * Fix: Prevent crash when reverting revisions on a snippet with `PreviewableMixin` applied (Sage Abdullah) * Fix: Use consistent heading styles on top-level fields in the page editor (Sage Abdullah) * Fix: Allow button labels to wrap onto two lines in dropdown buttons (Coen van der Kamp) * Fix: Move DateField, DateTimeField, TimeField comment buttons to be right next to the fields (Theresa Okoro) * Fix: Support text resizing in workflow steps cards (Ivy Jeptoo) * Fix: Use the correct padding for autocomplete block picker (Umar Farouk Yunusa) * Fix: Fix horizontal positioning of rich text inline toolbar (Thibaud Colas) * Fix: Close the userbar when clicking its toggle (Albina Starykova) * Fix: Do not show bulk actions checkbox in page type usage view (Sage Abdullah) * Fix: Prevent account name from overflowing the sidebar (Aman Pandey) * Fix: Ensure edit form is displayed as unlocked immediately after cancelling a workflow (Sage Abdullah) * Fix: Prevent `latest_revision` pointer from being copied over when copying translatable snippets for translation (Sage Abdullah) * Docs: Document potential data loss for BaseLogEntry migration in 3.0 (Sage Abdullah) * Docs: Add documentation for the reference index mechanism (Daniel Kirkham) 4.1.1 (11.11.2022) ~~~~~~~~~~~~~~~~~~ * Fix: Fix issue where lock/unlock buttons would not work on the Dashboard (home) page or the page index listing via the status sidebar (Stefan Hammer) * Fix: Fix disabled style on StreamField add button (Matt Westcott) * Fix: Ensure models are fully loaded before registering snippets, to avoid circular import issues (Matt Westcott) * Fix: Prevent fields without a `verbose_name` property from breaking usage report views (Matt Westcott) * Fix: Exclude tags from the reference index (Matt Westcott) * Fix: Fix errors in handling generic foreign keys when populating the reference index (Matt Westcott) * Fix: Prevent error in handling null ParentalKeys when populating the reference index (Matt Westcott) * Fix: Make sure minimap error indicators follow the minimap scrolling (Thibaud Colas) * Fix: Ensure background HTTP request to clear stale preview data correctly respects the `CSRF_HEADER_NAME` setting (Sage Abdullah) * Fix: Prevent error on aging pages report when "Last published by" user has been deleted (Joshua Munn) 4.1 LTS (01.11.2022) ~~~~~~~~~~~~~~~~~~~~ * New scheduled publishing UI, available from the Status side panel (Sage Abdullah) * Allow snippet admin views to be customised via `SnippetViewSet` (Sage Abdullah) * Implement scheduled publishing for snippets inheriting from `DraftStateMixin` (Sage Abdullah) * Add reference index and usage reports for images, documents and snippets (Karl Hobley, Matt Westcott) * Formalised support for Python 3.11 (Matt Westcott) * Add basic keyboard control and screen reader support for page listing re-ordering (Paarth Agarwal, Thomas van der Hoeven) * Add `PageQuerySet.private` method as an alias of `not_public` (Mehrdad Moradizadeh) * Most images in the admin will now only load once they are visible on screen (Jake Howard) * Allow setting default attributes on image tags (Jake Howard) * Optimise the performance of the Wagtail userbar to remove duplicated queries, improving page loads when viewing live pages while signed in (Jake Howard) * Remove legacy styling classes for buttons (`unbutton`, `button-neutral`, `button-strokeonhover`, `hover-no`, `yes`) and refactor button styles to be more maintainable (Paarth Agarwal, LB (Ben Johnston)) * Add button variations to the pattern library (Paarth Agarwal) * Provide a more accessible page title where the unique information is shown first and the CMS name is shown last (Mehrdad Moradizadeh) * Pull out behaviour from `AbstractFormField` to `FormMixin` and `AbstractEmailForm` to `EmailFormMixin` to allow use with subclasses of `Page` (Mehrdad Moradizadeh, Kurt Wall) * Add a `docs.wagtail.org/.well-known/security.txt` so that the security policy is available as per the specification on https://securitytxt.org/ (Jake Howard) * Add unit tests for the `classnames` Wagtail admin template tag (Mehrdad Moradizadeh) * Show an inverse locked indicator when the page has been locked by the current user in reports and dashboard listings (Vaibhav Shukla, LB (Ben Johnston)) * Add clarity to the development documentation that `admonition` should not be used and titles for `note` are not supported, including clean up of some existing incorrect usage (LB (Ben Johnston)) * Unify the styling of delete/destructive button styles across the admin interface (Paarth Agarwal) * Adopt new designs and unify the styling styles for `.button-secondary` buttons across the admin interface (Paarth Agarwal) * Refine designs for disabled buttons throughout the admin interface (Paarth Agarwal) * Update expanding formset add buttons to use `button` not link for behaviour (LB (Ben) Johnston) * Add robust unit testing for authentication scenarios across the user management admin pages (Mehrdad Moradizadeh) * Avoid assuming an integer PK named 'id' on multiple upload views (Matt Westcott) * Add a toggle to collapse/expand all page panels at once (Helen Chapman) * Improve the GitHub Workflows (CI) security (Alex (sashashura)) * Use `search` type input in documentation search (LB (Ben) Johnston) * Render `help_text` when set on `FieldPanel`, `MultiFieldPanel`, `FieldRowPanel`, and other panel APIs where it previously worked without official support (Matt Westcott) * Consolidate usage of Excel libraries to a single library `openpyxl`, removing usage of `XlsxWriter`, `tablib`, `xlrd` and `xlwt` (Jaap Roes) * Adopt `wagtail.admin.views.generic.IndexView` for the Users index listing and search results (Mehrdad Moradizadeh) * Adopt `wagtail.admin.views.generic.CreateView` for the User creation view (Mehrdad Moradizadeh) * Adopt `wagtail.admin.views.generic.DeleteView` for the User delete view (Mehrdad Moradizadeh) * Adopt `wagtail.admin.views.generic.EditView` for the User edit view (Mehrdad Moradizadeh) * Add `button-secondary bicolor` variants to the pattern library and styleguide (Adinapunyo Banerjee) * Add better support for non-integer / non-`id` primary keys into Wagtail's generic views, including for Snippets and custom User models (Mehrdad Moradizadeh) * Upgrade jQuery UI to version 1.13.2 (LB (Ben) Johnston) * Update pattern library background & text examples (Albina Starykova) * Switch StreamField blocks to use a `
` element so screen reader users can bypass them more easily (Thibaud Colas) * Add anchor links to StreamField blocks so users can navigate straight to a given block (Thibaud Colas) * Support "Ctrl + f" in-page search within collapsed StreamField blocks (Thibaud Colas) * Remember the last opened side panel in the page editor, activating it on page load (Sage Abdullah) * Ensure that the `update_index` command can run without console output if called with `--verbosity 0` (Ben Sturmfels, Oliver Parker) * Improve side panels’ resizing in page editor and listings (Steven Steinwand) * Adjust breadcrumb text alignment and size in page listings & page editor (Steven Steinwand) * Improvements to getting started tutorial aimed at developers who are very new to Python and have no Django experience (Damilola Oladele) * Update documentation dependencies; Sphinx Wagtail Theme to v5.3.2, MyST Parser to v0.18.1, add Sphinx Copy Button (LB (Ben) Johnston) * Add "What's New" dashboard banner and "Help" menu in sidebar (Sage Abdullah) * Implement new "minimap" component for the page editor (Thibaud Colas) * The `image_url` template tag, when using the serve view to redirect rather than serve directly, will now use temporary redirects with a cache header instead of permanent redirects (Jake Howard) * Add new test assertions to `WagtailPageTestCase` - `assertPageIsRoutable`, `assertPageIsRenderable`, `assertPageIsEditable`, `assertPageIsPreviewable` (Andy Babic) * Add documentation to the performance section about how to better create image URLs when not used directly on the page (Jake Howard) * Add ability to provide a required `permission` to `PanelGroup`, used by `TabbedInterface`, `ObjectList`, `FieldRowPanel` and `MultiFieldPanel` (Oliver Parker) * Update documentation screenshots of the admin interface to align with changes in this release (Thibaud Colas) * Fix: Prevent `PageQuerySet.not_public` from returning all pages when no page restrictions exist (Mehrdad Moradizadeh) * Fix: Ensure that duplicate block ids are unique when duplicating stream blocks in the page editor (Joshua Munn) * Fix: Revise colour usage so that privacy & locked indicators can be seen in Windows High Contrast mode (LB (Ben Johnston)) * Fix: Ensure that disabled buttons have a consistent presentation on hover to indicate no interaction is available (Paarth Agarwal) * Fix: Update the 'Locked pages' report menu title so that it is consistent with other pages reports and its own title on viewing (Nicholas Johnson) * Fix: Support `formfield_callback` handling on `ModelForm.Meta` for future Django 4.2 release (Matt Westcott) * Fix: Ensure that `ModelAdmin` correctly supports filters in combination with subsequent searches without clearing the applied filters (Stefan Hammer) * Fix: Add missing translated values to site settings' headers plus models presented in listings and audit report filtering labels (Stefan Hammer) * Fix: Remove `capitalize()` calls to avoid issues with other languages or incorrectly presented model names for reporting and parts of site settings (Stefan Hammer) * Fix: Add back rendering of `help_text` for InlinePanel (Matt Westcott) * Fix: Ensure `for_user` argument is passed to the form class when previewing pages (Matt Westcott) * Fix: Ensure the capitalisation of the `timesince_simple` tag is consistently added in the template based on usage in context (Stefan Hammer) * Fix: Add missing translation usage for the `timesince_last_update` and ensure the translated labels can be easier to work with in Transifex (Stefan Hammer) * Fix: Add additional checks for duplicate form field `clean_name` values in the Form Builder validation and increase performance of checks (Dan Bentley) * Fix: Use correct color for labels of radio and checkbox fields (Steven Steinwand) * Fix: Adjust spacing of fields’ error messages and position in tables (Steven Steinwand) * Fix: Update dead or redirected links throughout the documentation (LB (Ben) Johnston) * Fix: Use different icons for workflow timeline component, so the steps can be distinguished with other means than color (Sam Moran) * Fix: Use the correct custom font for the Wagtail userbar (Umar Farouk Yunusa) * Fix: StreamField blocks are now collapsible with the keyboard (Thibaud Colas) * Fix: StreamField block headings now have a label for screen reader users (Thibaud Colas) * Fix: Display the "*" required field indicator for StreamField blocks (Thibaud Colas) * Fix: Resolve inconsistency in action button positions in InlinePanel (Thibaud Colas) * Fix: Use h3 elements with a counter in InlinePanel so screen reader users can navigate by heading (Thibaud Colas) * Fix: Ensure that buttons on custom chooser widgets are correctly shown on hover (Thibaud Colas) * Fix: Add missing asterisk to title field placeholder (Seremba Patrick, Stefan Hammer) * Fix: Avoid creating an extra rich text block when inserting a new block at the end of the content (Matt Westcott) * Fix: Removed the extra dot in the Wagtail version shown within the admin settings menu item (Loveth Omokaro) * Fix: Fully remove the obsolete `wagtailsearch_editorspick` table that prevents flushing the database (Matt Westcott) * Fix: Update latest version message on Dashboard to accept dev build version format used on nlightly builds (Sam Moran) * Fix: references extraction for ChooserBlock (Alex Tomkins) * Fix: Regression in field width for authentication pages (log in / password reset) (Chisom Okeoma) * Fix: Ensure the new minimap correctly pluralises error counts for `aria-label`s (Matt Westcott) 4.0.4 (18.10.2022) ~~~~~~~~~~~~~~~~~~ * Render `help_text` when set on `FieldPanel`, `MultiFieldPanel`, `FieldRowPanel`, and other panel APIs where it previously worked without official support (Matt Westcott) * Update special-purpose `FieldPanel` deprecation message to add clarity for developers (Matt Westcott) * Fix: Add back rendering of `help_text` for InlinePanel (Matt Westcott) * Fix: Ensure that `AbstractForm` & `AbstractEmailForm` page models correctly pass the form to the preview context (Dan Bentley) * Fix: Use the correct custom font for the Wagtail userbar (Umar Farouk Yunusa) * Fix: Ensure that buttons on custom chooser widgets are correctly shown on hover (Thibaud Colas) 4.0.3 (18.10.2022) ~~~~~~~~~~~~~~~~~~ [release withdrawn due to packaging issues] 4.0.2 (23.09.2022) ~~~~~~~~~~~~~~~~~~ * Update all images and sections of the Wagtail Editor's guide to align with the new admin interface changes from Wagtail 3.0 and 4.0 (Thibaud Colas) * Ensure all images in the documentation have a suitable alt text (Thibaud Colas) * Fix: Ensure tag autocompletion dropdown has a solid background (LB (Ben) Johnston) * Fix: Allow inline panels to be ordered (LB (Ben) Johnston) * Fix: Only show draft / live status tags on snippets that have `DraftStateMixin` applied (Sage Abdullah) * Fix: Prevent JS error when initialising chooser modals with no tabs (LB (Ben) Johnston) * Fix: Add missing vertical spacing between chooser modal header and body when there are no tabs (LB (Ben) Johnston) * Fix: Reinstate specific labels for chooser buttons (for example 'Choose another page', 'Edit this page' not 'Change', 'Edit') so that it is clearer for users and non-English translations (Matt Westcott) * Fix: Resolve issue where searches with a tag and a query param in the image listing would result in an `FilterFieldError` (Stefan Hammer) * Fix: Add missing vertical space between header and content in embed chooser modal (LB (Ben) Johnston) * Fix: Use the correct type scale for heading levels in rich text (Steven Steinwand) * Fix: Update alignment and reveal logic of fields’ comment buttons (Steven Steinwand) * Fix: Regression from Markdown conversion in documentation for API configuration - update to correctly use PEP-8 for example code (Storm Heg) * Fix: Prevent 'Delete' link on page edit view from redirecting back to the deleted page (LB (Ben) Johnston) * Fix: Prevent JS error on images index view when collections dropdown is omitted (Tidiane Dia) * Fix: Prevent "Entries per page" dropdown on images index view from reverting to 10 (Tidiane Dia) * Fix: Set related_name on user revision relation to avoid conflict with django-reversion (Matt Westcott) * Fix: Ensure the "recent edits" panel on the Dashboard (home) page works when page record is missing (Matt Westcott) * Fix: Only add Translate buttons when the `simple_translation` app is installed (Dan Braghis) * Fix: Ensure that `MultiFieldPanel` correctly outputs all child classnames in the template (Matt Westcott) * Fix: Remove over-eager caching on ModelAdmin permission checks (Matt Westcott, Stefan Hammer) 4.0.1 (05.09.2022) ~~~~~~~~~~~~~~~~~~ * Fix: On the Locked pages report, limit the "locked by" filter to just users who have locked pages (Stefan Hammer) * Fix: Prevent JavaScript error when using StreamField on views without commenting support, such as snippets (Jacob Topp-Mugglestone) * Fix: Modify base template for new projects so that links opened from the preview panel open in a new window (Sage Abdullah) * Fix: Prevent circular import error between custom document models and document chooser blocks (Matt Westcott) 4.0 (31.08.2022) ~~~~~~~~~~~~~~~~ * Added support for Django 4.1 * Added a new `BaseGenericSetting` base model class that allows defining a settings model that applies to all sites rather than just a single site (Kyle Bayliss) * Add clarity to confirmation when being asked to convert an external link to an internal one (Thijs Kramer) * Convert the rest of the documentation to Markdown (Khanh Hoang, Vu Pham, Daniel Kirkham, LB (Ben) Johnston, Thiago Costa de Souza, Benedict Faw, Noble Mittal, Sævar Öfjörð Magnússon, Sandeep M A, Stefano Silvestri) * Add `base_url_path` to `ModelAdmin` so that the default URL structure of app_label/model_name can be overridden (Vu Pham, Khanh Hoang) * Add `full_url` to the API output of `ImageRenditionField` (Paarth Agarwal) * Use `InlinePanel`'s label when available for field comparison label (Sandil Ranasinghe) * Drop support for Safari 13 by removing left/right positioning in favour of CSS logical properties (Thibaud Colas) * Use `FormData` instead of jQuery's `form.serialize` when editing documents or images just added so that additional fields can be better supported (Stefan Hammer) * Add informational Codecov status checks for GitHub CI pipelines (Tom Hu) * Replace `PageRevision` with generic `Revision` model (Sage Abdullah) * Make it possible to reuse and customise Wagtail’s fonts with CSS variables (LB (Ben) Johnston) * Add better handling and informative developer errors for cross linking URLS (e.g. success after add) in generic views `wagtail.admin.views.generic` (Matt Westcott) * Introduce `wagtail.admin.widgets.chooser.BaseChooser` to make it easier to build custom chooser inputs (Matt Westcott) * Introduce JavaScript chooser module, including a SearchController class which encapsulates the standard pattern of re-rendering the results panel in response to search queries and pagination (Matt Westcott) * Migrate Image and Document choosers to new JavaScript chooser module (Matt Westcott) * Add ability to select multiple items at once within bulk actions selections when holding shift on subsequent clicks (Hitansh Shah) * Upgrade notification, shown to admins on the dashboard if Wagtail is out of date, will now link to the release notes for the closest minor branch instead of the latest patch (Tibor Leupold) * Upgrade notification can now be configured to only show updates when there is a new LTS available via `WAGTAIL_ENABLE_UPDATE_CHECK = 'lts'` (Tibor Leupold) * Implement redesign of the Workflow Status dialog, fixing accessibility issues (Steven Steinwand) * Add the ability to change the number of images displayed per page in the image library (Tidiane Dia, with sponsorship from YouGov) * Allow users to sort by different fields in the image library (Tidiane Dia, with sponsorship from YouGov) * Add `prefetch_renditions` method to `ImageQueryset` for performance optimisation on image listings (Tidiane Dia, Karl Hobley) * Add ability to define a custom `get_field_clean_name` method when defining `FormField` models that extend `AbstractFormField` (LB (Ben) Johnston) * Migrate Home (Dashboard) view to use generic Wagtail class based view (LB (Ben) Johnston) * Combine most of Wagtail’s stylesheets into the global `core.css` file (Thibaud Colas) * Add new Breadcrumbs and Tabs to the Wagtail pattern library (Paarth Agarwal) * Adopt new Page Editor UI tabs in the workflow history report page (Paarth Agarwal) * Update `ReportView` to extend from generic `wagtail.admin.views.generic.models.IndexView` (Sage Abdullah) * Introduce a `wagtail.admin.viewsets.chooser.ChooserViewSet` module to serve as a common base implementation for chooser modals (Matt Westcott) * Add documentation for `wagtail.admin.viewsets.model.ModelViewSet` (Matt Westcott) * Enhance new breadcrumbs so they can be added to any header or container element (Paarth Agarwal) * Adopt new breadcrumbs on the page explorer (listing) view and the page chooser modal, remove legacy breadcrumbs code for move page as no longer used (Paarth Agarwal) * Added multi-site support to the API (Sævar Öfjörð Magnússon) * Add `add_to_admin_menu` option for `ModelAdmin` (Oliver Parker) * Implement Fuzzy matching for Elasticsearch (Nick Smith) * Rename `Page.get_latest_revision_as_page` to `Page.get_latest_revision_as_object` (Sage Abdullah) * Cache model permission codenames in `PermissionHelper` (Tidiane Dia) * Selecting a new parent page for moving a page now uses the chooser modal which allows searching (Viggo de Vries) * Move `get_snippet_edit_handler` function to `wagtail.admin.panels.get_edit_handler` (Sage Abdullah) * Add clarity to the search indexing documentation for how `boost` works when using Postgres with the database search backend (Tibor Leupold) * Rename `explorer_breadcrumb` template tag to `breadcrumbs` as it is now used in multiple locations (Paarth Agarwal) * Updated `django-filter` version to support 23 (Yuekui) * Use `.iterator()` in a few more places in the admin, to make it more stable on sites with many pages (Andy Babic) * Migrate some simple React component files to TypeScript (LB (Ben) Johnston) * Deprecate the usage and documentation of the `wagtail.contrib.modeladmin.menus.SubMenu` class, provide a warning if used directing developers to use `wagtail.admin.menu.Menu` instead (Matt Westcott) * Remove legacy (non-next) breadcrumbs no longer used, remove `ModelAdmin` usage of breadcrumbs completely (Paarth Agarwal) * Replace human-readable-date hover pattern with accessible tooltip variant across all of admin (Bernd de Ridder) * Added `WAGTAILADMIN_USER_PASSWORD_RESET_FORM` setting for overriding the admin password reset form (Michael Karamuth) * Prefetch workflow states in edit page view to avoid queries in other parts of the view/templates that need it (Tidiane Dia) * Remove the edit link from edit bird in previews to avoid confusion (Sævar Öfjörð Magnússon) * Introduce new template fragment and block level enclosure tags for easier template composition (Thibaud Colas) * Add a `classnames` template tag to easily build up classes from variables provided to a template (Paarth Agarwal) * Migrate the dashboard (home) view header to the shared header template and update designs (Paarth Agarwal) * Switch all report workflow, redirects, form submissions, site settings views to use Wagtail’s reusable header component (Paarth Agarwal) * Update classes and styles for the shared header templates to align with UI guidelines (Paarth Agarwal) * Clean up multiple eslint rules usage and configs to align better with the Wagtail coding guidelines (LB (Ben Johnston)) * Add inline toolbar for Draftail, to avoid clashing with the page’s header (Thibaud Colas) * Add command palette in rich text editor to change text format with the keyboard only (Thibaud Colas) * Add a live-updating character count to the Draftail rich text editor (Thibaud Colas) * Add rich text editor paste to auto-create links (Thibaud Colas) * Add rich text editor text shortcuts undo, to allow typing text normally detected as a shortcut (Thibaud Colas) * Add support for right-to-left (RTL) languages to the rich text editor (Thibaud Colas) * Change rich text editor placeholder to follow the user’s focus on empty blocks (Thibaud Colas) * Add rich text editor empty block highlight by showing their block type (Thibaud Colas) * Add ability to split a rich text field and insert a StreamField block at the same time (Jacob Topp-Mugglestone) * Make `ModelAdmin` `InspectView` footer actions consistent with other parts of the UI (Thibaud Colas) * Introduce a new auto-updating preview panel inside the page editor (Sage Abdullah) * Add support for Twitter and other text-only embeds in Draftail embed previews (Iman Syed, Paarth Agarwal) * Use new modal dialog component for privacy settings modal (Sage Abdullah) * Add `menu_item_name` to modify `MenuItem`'s name for `ModelAdmin` (Alexander Rogovskyy, Vu Pham) * Add an extra confirmation prompt when deleting pages with a large number of child pages (Jaspreet Singh) * Adopt the slim header in page listing views, with buttons moved under the "Actions" dropdown, including addition of translation page in the parent "more" button (Paarth Agarwal) * Improve help block styles in Windows High Contrast Mode with less reliance on communication via colour alone (Anuja Verma) * Add a bottom border to top messages so they stand out from the header (Anuja Verma) * Replace latin abbreviations (i.e. / e.g.) with common English phrases so that documentation is easier to understand (Dominik Lech) * Add shortcut for accessing StreamField blocks by block name with new `blocks_by_name` and `first_block_by_name` methods on `StreamValue` (Tidiane Dia, Matt Westcott) * Extend support for custom user interface colours across almost all admin colours (Thibaud Colas) * Add HTML-aware max_length validation and character count on RichTextField and RichTextBlock (Matt Westcott, Thibaud Colas) * Remove undocumented `SearchableListMixin` (Sage Abdullah) * Extract filtering code from ReportView to generic IndexView (Sage Abdullah) * Extract unpublish code for pages to generic UnpublishView (Sage Abdullah) * Retain other query params in header search behaviour (Sage Abdullah) * Remove `is_parent` kwarg in various page button hooks as this approach is no longer required (Paarth Agarwal) * Improve security of redirect imports by adding a file hash (signature) check for so that any tampering of file contents between requests will throw a `BadSignature` error (Jaap Roes) * Refresh designs for Home (Dashboard) site summary panels, use theme spacing and colours, add support for RTL layouts and better support for small devices (Paarth Agarwal, LB (Ben) Johnston) * Include all CSS system colours in allowed values in Stylelint's declaration-strict-value rule (Thibaud Colas) * Add JavaScript `range` utility function (LB (Ben) Johnston) * Allow generic chooser viewsets to support non-model data such as an API endpoint (Matt Westcott) * Update all widget styles across the admin UI (Thibaud Colas) * Update field styles across forms, with help text consistently under fields, error messages above, and comment buttons to the side (Thibaud Colas) * Make all sections of the page editing UI collapsible by default (Thibaud Colas) * Update the side panels to prevent overlap with form fields unless necessary (Thibaud Colas) * Remove unused change password page, was not removed when account management view was converted to tabs (Paarth Agarwal) * Rework layout of login and password reset pages to ensure `main` id on main element (for skip link) and consistent DOM layout for h1 header (Paarth Agarwal, LB (Ben) Johnston) * Adopt new design, including logo, for login and password reset pages (Paarth Agarwal, LB (Ben) Johnston) * Remove usage of inline script to focus on the username field, instead use `autofocus` (LB (Ben) Johnston) * Improve organisation of the settings reference page in the documentation (Akash Kumar Sen) * Added `path` and `re_path` decorators to the `RoutablePageMixin` module which emulate their Django URL utils equivalent, redirect `re_path` to the original `route` decorator (Tidiane Dia) * `BaseChooser` widget now provides a Telepath adapter that's directly usable for any subclasses that use the chooser widget and modal JS as-is with no customisations (Matt Westcott) * Implement the new chooser widget styles as part of the page editor redesign (Thibaud Colas) * Update base Draftail/TextField form designs as part of the page editor redesign (Thibaud Colas) * Move commenting trigger to inline toolbar and move block splitting to the block toolbar and command palette only in Draftail (Thibaud Colas) * Pages are now locked when they are scheduled for publishing (Karl Hobley) * Simplify page chooser views by converting to class-based views (Matt Westcott) * Add support for previews, revisions and drafts on snippets (Sage Abdullah) * Add "Translate" button within pages’ Actions dropdown when editing pages (Sage Abdullah) * Add translated labels to the bulk actions tags and collections bulk update fields (Stefan Hammer) * Add bulk actions support for snippet listings (Shohan Dutta Roy) * Fix: Typo in `ResumeWorkflowActionFormatter` message (Stefan Hammer) * Fix: Issue where `ModelAdmin` index listings with export list enabled would show buttons with an incorrect layout (Josh Woodcock) * Fix: Throw a meaningful error when saving an image to an unrecognised image format (Christian Franke) * Fix: Remove extra padding for headers with breadcrumbs on mobile viewport (Steven Steinwand) * Fix: Ensure that custom document or image models support custom tag models (Matt Westcott) * Fix: Ensure comments use translated values for their placeholder text (Stefan Hammer) * Fix: Ensure the upgrade notification, shown to admins on the dashboard if Wagtail is out of date, content is translatable (LB (Ben) Johnston) * Fix: Show the re-ordering option to users that have permission to publish pages within the page listing (Stefan Hammer) * Fix: Ensure default sidebar branding (bird logo) is not cropped in RTL mode (Steven Steinwand) * Fix: Add an accessible label to the image focal point input when editing images (Lucie Le Frapper) * Fix: Remove unused header search JavaScript on the redirects import page (LB (Ben) Johnston) * Fix: Ensure non-square avatar images will correctly show throughout the admin (LB (Ben) Johnston) * Fix: Ignore translations in test files and re-include some translations that were accidentally ignored (Stefan Hammer) * Fix: Show alternative message when no page types are available to be created (Jaspreet Singh) * Fix: Prevent error on sending notifications for the legacy moderation process when no user was specified (Yves Serrano) * Fix: Ensure `aria-label` is not set on locale selection dropdown within page chooser modal as it was a duplicate of the button contents (LB (Ben Johnston)) * Fix: Revise the `ModelAdmin` title column behaviour to only link to 'edit' if the user has the correct permissions, fallback to the 'inspect' view or a non-clickable title if needed (Stefan Hammer) * Fix: Ensure that `DecimalBlock` preserves the `Decimal` type when retrieving from the database (Yves Serrano) * Fix: When no snippets are added, ensure the snippet chooser modal would have the correct URL for creating a new snippet (Matt Westcott) * Fix: `ngettext` in Wagtail's internal JavaScript internationalisation utilities now works (LB (Ben) Johnston) * Fix: Ensure the linting/formatting npm scripts work on Windows (Anuja Verma) * Fix: Fix display of dates in exported xlsx files on macOS Preview and Numbers (Jaap Roes) * Fix: Make progress bars’ progress visible in forced colors mode (Anuja Verma) * Fix: Make checkboxes visible in forced colors mode (Anuja Verma) * Fix: Display the correct color for icons in forced colors mode (Anuja Verma) * Fix: Add a border around modal dialogs so they can be identified in forced colors mode (Anuja Verma) * Fix: Remove outdated reference to 30-character limit on usernames in help text (minusf) * Fix: Resolve multiple form submissions index listing page layout issues including title not being visible on mobile and interaction with large tables (Paarth Agarwal) * Fix: Ensure `ModelAdmin` single selection lists show correctly with Django 4.0 form template changes (Coen van der Kamp) * Fix: Ensure icons within help blocks have accessible contrasting colours, and links have a darker colour plus underline to indicate they are links (Paarth Agarwal) * Fix: Ensure consistent sidebar icon position whether expanded or collapsed (Scott Cranfill) * Fix: Avoid redirects import error if the file had lots of columns (Jaap Roes) * Fix: Resolve accessibility and styling issues with the expanding status panel (Sage Abdullah) * Fix: Avoid 503 `AttributeError` when an empty search param `q=` is combined with other filters in the Images index view (Paritosh Kabra) * Fix: Fix error with string representation of FormSubmission not returning a string (LB (Ben) Johnston) * Fix: Ensure disabled buttons are distinguishable from active buttons in forced colors mode (Anuja Verma) * Fix: Revise usage of `extra_actions` in new changes to shared header template to avoid invalid template variable usage (Paarth Agarwal) * Fix: Ensure that bulk actions correctly support models with non-integer primary keys (id) (LB (Ben) Johnston) * Fix: Make it possible to toggle collapsible panels in the edit UI with the keyboard (Thibaud Colas) * Fix: Re-implement checkbox styles so the checked state is visible in forced colors mode (Thibaud Colas) * Fix: Re-implement switch component styles so the checked state is visible in forced colors mode (Thibaud Colas) * Fix: Always render select widgets consistently regardless of where they are in the admin (Thibaud Colas) * Fix: Make sure input labels and always take up the available space (Thibaud Colas) * Fix: Correctly style BooleanBlock within StructBlock (Thibaud Colas) * Fix: Make sure comment icons can’t overlap with help text (Thibaud Colas) * Fix: Make it possible to scroll input fields in admin on safari mobile (Thibaud Colas) * Fix: Stop rich text fields from overlapping with sidebar (Thibaud Colas) * Fix: Prevent comment buttons from overlapping with fields (Thibaud Colas) * Fix: Resolve MySQL search compatibility issue with Django 4.1 (Andy Chosak) * Fix: Ensure that the fields on login and password reset forms are visible in forced colors mode (Paarth Agarwal) * Fix: Missing a outline on dropdown content and malformed tooltip arrow in forced colors mode (Anuja Verma, LB (Ben) Johnston) * Fix: Layout issues with reports (including form submissions listings) on md device widths (Akash Kumar Sen, LB (Ben) Johnston) * Fix: Layout issue with page explorer's inner header item on small device widths (Akash Kumar Sen) * Fix: Ensure that `BaseSiteSetting` / `BaseGenericSetting` objects can be pickled (Andy Babic) * Fix: Ensure `DocumentChooserBlock` can be deconstructed for migrations (Matt Westcott) * Fix: Resolve frontend console error and unintented console logging issues (Matt Westcott, Paarth Agarwal) * Fix: Resolve issue with sites that have not yet migrated away from `BaseSetting` when upgrading to Wagtail 4.0 (Stefan Hammer) * Fix: Use correct classnames for showing/hiding edit button on chooser widget (Matt Westcott) * Fix: Render MultiFieldPanel’s heading even when nested (Thibaud Colas) * Fix: Make sure select widgets render correctly regardless of the Django field and widget type (Thibaud Colas) * Fix: Consistently display boolean field labels above the widget so they render correctly (Thibaud Colas) * Fix: Address form field label alignment issues by always displaying labels above the widget (Thibaud Colas) * Fix: Make sure rich text URL editing tooltip is fully visible when displayed inside InlinePanel blocks (Thibaud Colas) * Fix: Allow input fields to scroll horizontally in Safari iOS (Thibaud Colas) * Fix: Ensure screen readers are made aware of page level messages added dynamically to the top of the page (Paarth Agarwal) * Fix: Fix `updatemodulepaths` command for Python 3.7 (Matt Westcott) * Fix: Only show locale filter in choosers when i18n is enabled in settings (Matt Westcott) * Fix: Ensure that the live preview panel correctly clears the cache when a new page is created (Sage Abdullah) * Fix: Ensure that there is a larger hoverable area for add block (+) within the Draftail editor (Steven Steinwand) * Fix: Resolve multiple header styling issues for modal, alignment on small devices, outside click handling target on medium devices, close button target size and hover styles (Paarth Agarwal) * Fix: Fix issue where comments could not be added in StreamField that were already already saved (Jacob Topp-Mugglestone) * Fix: Remove outdated reference to Image.LoaderError (Matt Westcott) 3.0.3 (05.09.2022) ~~~~~~~~~~~~~~~~~~ * Fix: On the Locked pages report, limit the "locked by" filter to just users who have locked pages (Stefan Hammer) * Fix: Prevent JavaScript error when using StreamField on views without commenting support, such as snippets (Jacob Topp-Mugglestone) 3.0.2 (30.08.2022) ~~~~~~~~~~~~~~~~~~ * Fix: Ensure string representation of `FormSubmission` returns a string (LB (Ben Johnston)) * Fix: Fix `updatemodulepaths` command for Python 3.7 (Matt Westcott) * Fix: Fix issue where comments could not be added in StreamField that were already already saved (Jacob Topp-Mugglestone) * Fix: Remove outdated reference to Image.LoaderError (Matt Westcott) 3.0.1 (16.06.2022) ~~~~~~~~~~~~~~~~~~ * Add warning when `WAGTAILADMIN_BASE_URL` is not configured (Matt Westcott) * Fix: Ensure `TabbedInterface` will not show a tab if no panels are visible due to permissions (Paarth Agarwal) * Fix: Specific snippets list language picker was not properly styled (Sage Abdullah) * Fix: Ensure the upgrade notification request for the latest release, which can be disabled via the `WAGTAIL_ENABLE_UPDATE_CHECK` sends the referrer origin with `strict-origin-when-cross-origin` (Karl Hobley) * Fix: Fix misaligned spinner icon on page action button (LB (Ben Johnston)) * Fix: Ensure radio buttons / checkboxes display vertically under Django 4.0 (Matt Westcott) * Fix: Prevent failures when splitting blocks at the start or end of a block, or with highlighted text (Jacob Topp-Mugglestone) * Fix: Allow scheduled publishing to complete when the initial editor did not have publish permission (Matt Westcott) * Fix: Stop emails from breaking when `WAGTAILADMIN_BASE_URL` is absent due to the request object not being available (Matt Westcott) * Fix: Make try/except on sending email less broad so that legitimate template rendering errors are exposed (Matt Westcott) 3.0 (16.05.2022) ~~~~~~~~~~~~~~~~ * Phase out special-purpose panel types (`StreamFieldPanel`, `RichTextFieldPanel`, `ImageChooserPanel`, `DocumentChooserPanel`, `PageChooserPanel`, `SnippetChooserPanel`) in favour of `FieldPanel` (Matt Westcott) * Implement splitting of rich text blocks within StreamField (Jacob Topp-Mugglestone) * Add support for image rendition prefetching (Andy Babic) * Upgrade ESLint and Stylelint configurations to latest shared Wagtail configs (Thibaud Colas, Paarth Agarwal) * Major updates to frontend tooling; move Node tooling from Gulp to Webpack, upgrade to Node v16 and npm v8, eslint v8, stylelint v14 and others (Thibaud Colas) * Change comment headers’ date formatting to use browser APIs instead of requiring a library (LB (Ben Johnston)) * Lint with flake8-comprehensions and flake8-assertive, including adding a pre-commit hook for these (Mads Jensen, Dan Braghis) * Switch the Wagtail branding font to a system font stack (Steven Steinwand, Paarth Agarwal) * Add black configuration and reformat code using it (Dan Braghis) * Remove UI code for legacy browser support: polyfills, IE11 workarounds, Modernizr (Thibaud Colas) * Remove redirect auto-creation recipe from documentation as this feature is now supported in Wagtail core (Andy Babic) * Remove IE11 warnings (Gianluca De Cola) * Remove the legacy Hallo rich text editor as it has moved to an external package (LB (Ben Johnston)) * Increase the size of checkboxes throughout the UI, and simplify their alignment (Steven Steinwand) * Adopt [MyST](https://myst-parser.readthedocs.io/en/latest/) for parsing documentation written in Markdown, replaces recommonmark (LB (Ben Johnston), Thibaud Colas) * Installing docs extras requirements in CircleCI so issues with the docs requirements are picked up earlier (Thibaud Colas) * Remove core usage of jinjalint and migrate to curlylint to resolve dependency incompatibility issues (Thibaud Colas) * Switch focus outlines implementation to `:focus-visible` for cross-browser consistency (Paarth Agarwal) * Remove most uppercased text styles from admin UI (Paarth Agarwal) * Convert all UI code to CSS logical properties for Right-to-Left (RTL) language support (Thibaud Colas) * Migrate multiple documentation pages from RST to MD - including the editor's guide (Vibhakar Solanki, LB (Ben Johnston), Shwet Khatri) * Add documentation for defining custom form validation on models used in Wagtail's `modelAdmin` (Serafeim Papastefanos) * Update `README.md` logo to work for GitHub dark mode (Paarth Agarwal) * Avoid an unnecessary page reload when pressing enter within the header search bar (Images, Pages, Documents) (Riley de Mestre) * Removed unofficial length parameter on `If-Modified-Since` header in `sendfile_streaming_backend` which was only used by IE (Mariusz Felisiak) * Add Pinterest support to the list of default oEmbed providers (Dharmik Gangani) * Update Jinja2 template support for Jinja2 3.x (Seb Brown) * Add ability for `StreamField` to use `JSONField` to store data, rather than `TextField` (Sage Abdullah) * Replace `content_json` `TextField` with `content` `JSONField` in `PageRevision` (Sage Abdullah) * Remove `replace_text` management command (Sage Abdullah) * Replace `data_json` `TextField` with `data` `JSONField` in `BaseLogEntry` (Sage Abdullah) * Split up linting / formatting tasks in Makefile into client and server components (Hitansh Shah) * Add support for embedding Instagram reels (Luis Nell) * Use Django’s JavaScript catalog feature to manage translatable strings in JavaScript (Karl Hobley) * Add a `page_description` to the Page model, to provide help text for a given page type (Kalob Taulien, Thibaud Colas, Matt Westcott, Stefan Hammer) * Add `trimmed` attribute to all blocktrans tags, so spacing is more reliable in translated strings (Harris Lapiroff) * Add documentation that describes how to use `ModelAdmin` to manage `Tag`s (Abdulmajeed Isa) * Rename the setting `BASE_URL` (undocumented) to `WAGTAILADMIN_BASE_URL` and add to documentation, `BASE_URL` will be removed in a future release (Sandil Ranasinghe) * Validate to and from email addresses within form builder pages when using `AbstractEmailForm` (Jake Howard) * Add `WAGTAILIMAGES_RENDITION_STORAGE` setting to allow an alternative image rendition storage (Heather White) * Add `wagtail_update_image_renditions` management command to regenerate image renditions or purge all existing renditions (Hitansh Shah, Onno Timmerman, Damian Moore) * Fully remove the legacy sidebar, with slim sidebar replacing it for all users (Thibaud Colas) * Add support for adding custom attributes for link menu items in the slim sidebar (Thibaud Colas) * Implement new slim page editor header with breadcrumb (Steven Steinwand, Karl Hobley) * Add the ability for choices to be separated by new lines instead of just commas within the form builder, commas will still be supported if used (Abdulmajeed Isa) * Add internationalisation UI to modeladmin (Andrés Martano) * Support chunking in `PageQuerySet.specific()` to reduce memory consumption (Andy Babic) * Implement new tabs design across the admin interface (Steven Steinwand) * Move page meta information from the header to a new status side panel component inside of the page editing UI (Steven Steinwand, Karl Hobley) * Add useful help text to Tag fields to advise what content is allowed inside tags, including when `TAG_SPACES_ALLOWED` is `True` or `False` (Abdulmajeed Isa) * Change `AbstractFormSubmission`'s `form_data` to use JSONField to store form submissions (Jake Howard) * Add image duplicate detection on upload (Tidiane Dia, with sponsorship from The Motley Fool) * Add a system font stack for monospace fonts (Rishank Kanaparti) * Fix: When using `simple_translations` ensure that the user is redirected to the page edit view when submitting for a single locale (Mitchel Cabuloy) * Fix: When previewing unsaved changes to `Form` pages, ensure that all added fields are correctly shown in the preview (Joshua Munn) * Fix: When Documents (e.g. PDFs) have been configured to be served inline via `WAGTAILDOCS_CONTENT_TYPES` & `WAGTAILDOCS_INLINE_CONTENT_TYPES` ensure that the filename is correctly set in the `Content-Disposition` header so that saving the files will use the correct filename (John-Scott Atlakson) * Fix: Improve the contrast of the “Remember me” checkbox against the login page’s background (Steven Steinwand) * Fix: Group permission rows with custom permissions no longer have extra padding (Steven Steinwand) * Fix: Make sure the focus outline of checkboxes is fully around the outer border (Steven Steinwand) * Fix: Consistently set `aria-haspopup="menu"` for all sidebar menu items that have sub-menus (LB (Ben Johnston)) * Fix: Make sure `aria-expanded` is always explicitly set as a string in sidebar (LB (Ben Johnston)) * Fix: Use a button element instead of a link for page explorer menu item, for the correct semantics and behaviour (LB (Ben Johnston)) * Fix: Make sure the “Title” column label can be translated in the page chooser and page move UI (Stephanie Cheng Smith) * Fix: Remove redundant `role="main"` attributes on `
` elements causing HTML validation issues (Luis Espinoza) * Fix: Allow bulk publishing of pages without revisions (Andy Chosak) * Fix: Stop skipping heading levels in Wagtail welcome page (Jesse Menn) * Fix: Add missing `lang` attributes to `` elements (James Ray) * Fix: Avoid 503 server error when entering tags over 100chars and instead show a user facing validation error (Vu Pham, Khanh Hoang) * Fix: Ensure `thumb_col_header_text` is correctly used by `ThumbnailMixin` within `ModelAdmin` as the column header label (Kyle J. Roux) * Fix: Page copy in Wagtail admin ignores `exclude_fields_in_copy` (John-Scott Atlakson) * Fix: Translation key `IntegrityError` when publishing pages with translatable `Orderable`s that were copied without being published (Kalob Taulien, Dan Braghis) * Fix: Ignore `GenericRelation` when copying pages (John-Scott Atlakson) * Fix: Implement ARIA tabs markup and keyboards interactions for admin tabs (Steven Steinwand) * Fix: Ensure `wagtail updatemodulepaths` works when system locale is not UTF-8 (Matt Westcott) * Fix: Re-establish focus trap for Pages explorer in slim sidebar (Thibaud Colas) * Fix: Ensure the icon font loads correctly when `STATIC_URL` is not `"/static/"` (Jacob Topp-Mugglestone) 2.16.3 (05.09.2022) ~~~~~~~~~~~~~~~~~~~ * Fix: Ensure the upgrade notification request for the latest release, which can be disabled via the `WAGTAIL_ENABLE_UPDATE_CHECK` sends the referrer origin with `strict-origin-when-cross-origin` (Karl Hobley) * Fix: On the Locked pages report, limit the "locked by" filter to just users who have locked pages (Stefan Hammer) * Fix: Ensure Python 3.10 compatibility when using Elasticsearch backend (Przemysław Buczkowski, Matt Westcott) 2.16.2 (11.04.2022) ~~~~~~~~~~~~~~~~~~~ * Fix: Update django-treebeard dependency to 4.5.1 or above (Serafeim Papastefanos) * Fix: Fix permission error when sorting pages having page type restrictions (Thijs Kramer) * Fix: Allow bulk publishing of pages without revisions (Andy Chosak) * Fix: Ensure that all descendant pages are logged when deleting a page, not just immediate children (Jake Howard) * Fix: Refactor `FormPagesListView` in wagtail.contrib.forms to avoid undefined `locale` variable when subclassing (Dan Braghis) * Fix: Page copy in Wagtail admin ignores `exclude_fields_in_copy` (John-Scott Atlakson) * Fix: Translation key `IntegrityError` when publishing pages with translatable `Orderable`s that were copied without being published (Kalob Taulien, Dan Braghis) * Fix: Ignore `GenericRelation` when copying pages (John-Scott Atlakson) * Fix: Ensure 'next' links from image / document listings do not redirect back to partial AJAX view (Matt Westcott) * Fix: Skip creation of automatic redirects when page cannot be routed (Matt Westcott) * Fix: Prevent JS errors on locale switcher in page chooser (Matt Westcott) 2.16.1 (11.02.2022) ~~~~~~~~~~~~~~~~~~~ * Fix: Ensure that correct sidebar submenus open when labels use non-Latin alphabets (Matt Westcott) * Fix: Fix issue where invalid bulk action URLs would incorrectly trigger a server error (500) instead of a valid not found (404) (Ihor Marhitych) * Fix: Fix issue where bulk actions would not work for object IDs greater than 999 when `USE_THOUSAND_SEPARATOR` (Dennis McGregor) * Fix: Set cookie for sidebar collapsed state to "SameSite: lax" (LB (Ben Johnston)) * Fix: Prevent error on creating automatic redirects for sites with non-standard ports (Matt Westcott) * Fix: Restore ability to customise admin UI colours via CSS (LB (Ben Johnston)) 2.16 (07.02.2022) ~~~~~~~~~~~~~~~~~ * Added support for Django 4.0 * Removed support for Django 3.0 and 3.1 * Removed support for Python 3.6 * Added persistent IDs for ListBlock items, allowing commenting and improvements to revision comparisons (Matt Westcott, Tidiane Dia, with sponsorship from [NHS](https://www.nhs.uk/)) * Added Aging Pages report (Tidiane Dia) * Added automatic redirect creation feature (Andy Babic, with sponsorship from [The National Archives](https://www.nationalarchives.gov.uk)) * Added `page_slug_changed` signal for pages (Andy Babic) * Add more SketchFab oEmbed patterns for models (Tom Usher) * Add collapse option to `StreamField`, `StreamBlock`, and `ListBlock` which will load all sub-blocks initially collapsed (Matt Westcott) * Private pages can now be fetched over the API (Nabil Khalil) * Added `alias_of` field to the pages API (Dmitrii Faiazov) * Add support for Azure CDN and Front Door front-end cache invalidation (Tomasz Knapik) * Improved styling of workflow timeline modal view (Tidiane Dia) * Add secondary actions menu in edit page headers (Tidiane Dia) * Removed WOFF fonts * Add system check for missing core Page fields in `search_fields` (LB (Ben Johnston)) * Improve CircleCI frontend & backend build caches, add automated browser accessibility test suite in CircleCI (Thibaud Colas) * Add a 'remember me' checkbox to the admin sign in form, if unticked (default) the auth session will expire if the browser is closed (Michael Karamuth, Jake Howard) * When returning to image or document listing views after editing, filters (collection or tag) are now remembered (Tidiane Dia) * Improve the visibility of field error messages, in Windows high-contrast mode and out (Jason Attwood) * Improve implementations of visually-hidden text in explorer and main menu toggle (Martin Coote) * Add locale labels to page listings (Dan Braghis) * Add locale labels to page reports (Dan Braghis) * Change release check domain to releases.wagtail.org (Jake Howard) * Add the user who submitted a page for moderation to the "Awaiting your review" homepage summary panel (Tidiane Dia) * When moving pages, default to the current parent section (Tidiane Dia) * `admin/expanding_formset.js` has been renamed to `admin/expanding-formset.js` (LB (Ben Johnston)) * Change docs URL to docs.wagtail.org (Jake Howard) * Update links to wagtail.io to point to new domain wagtail.org (Jake Howard) * Add borders to TypedTableBlock to help visualize rows and columns (Scott Cranfill) * Set default submit button label on generic create views to 'Create' instead of 'Save' (Matt Westcott) * Improve display of image listing for long image titles (Krzysztof Jeziorny) * Use SVG icons in admin home page site summary items (Jérôme Lebleu) * Ensure site summary items wrap on smaller devices on the admin home page (Jérôme Lebleu) * Rework Workflow task chooser modal to align with other chooser modals, using consistent pagination and leveraging class based views (Matt Westcott) * Implemented a locale switcher on the forms listing page in the admin (Dan Braghis) * Implemented a locale switcher on the page chooser modal (Dan Braghis) * Implemented the `wagtail_site` template tag for Jinja2 (Vladimir Tananko) * Change webmaster to website administrator in the admin (Naomi Morduch Toubman) * Added documentation for creating custom submenus in the admin menu (Sævar Öfjörð Magnússon) * Choice blocks in StreamField now show label rather than value when collapsed (Jérôme Lebleu) * Added documentation to clarify configuration of user-uploaded files (Cynthia Kiser) * Change security contact address to security@wagtail.org (Jake Howard) * Fix: Accessibility fixes for Windows high contrast mode; Dashboard icons colour and contrast, help/error/warning blocks for fields and general content, side comment buttons within the page editor, dropdown buttons (Sakshi Uppoor, Shariq Jamil, LB (Ben Johnston), Jason Attwood) * Fix: Rename additional 'spin' CSS animations to avoid clashes with other libraries (Kevin Gutiérrez) * Fix: `default_app_config` deprecations for Django >= 3.2 (Tibor Leupold) * Fix: Refresh page from database on create before passing to hooks. Page aliases get correct `first_published_date` and `last_published_date` (Dan Braghis) * Fix: Additional login form fields from `WAGTAILADMIN_USER_LOGIN_FORM` are now rendered correctly (Michael Karamuth) * Fix: Icon only button styling issue on small devices where height would not be set correctly (Vu Pham) * Fix: Add padding to the Draftail editor to ensure `ol` items are not cut off (Khanh Hoang) * Fix: Prevent opening choosers multiple times for Image, Page, Document, Snippet (LB (Ben Johnston)) * Fix: Ensure subsequent changes to styles files are picked up by Gulp watch (Jason Attwood) * Fix: Ensure that programmatic page moves are correctly logged as 'move' and not 'reorder' in some cases (Andy Babic) * Fix: Add missing translation usage in Workflow templates (Anuja Verma, Saurabh Kumar) 2.15.6 (05.09.2022) ~~~~~~~~~~~~~~~~~~~ * Fix: Ensure the upgrade notification request for the latest release, which can be disabled via the `WAGTAIL_ENABLE_UPDATE_CHECK` sends the referrer origin with `strict-origin-when-cross-origin` (Karl Hobley) * Fix: On the Locked pages report, limit the "locked by" filter to just users who have locked pages (Stefan Hammer) * Fix: Ensure Python 3.10 compatibility when using Elasticsearch backend (Przemysław Buczkowski, Matt Westcott) 2.15.5 (11.04.2022) ~~~~~~~~~~~~~~~~~~~ * Fix: Allow bulk publishing of pages without revisions (Andy Chosak) * Fix: Ensure that all descendant pages are logged when deleting a page, not just immediate children (Jake Howard) * Fix: Translation key `IntegrityError` when publishing pages with translatable `Orderable`s that were copied without being published (Kalob Taulien, Dan Braghis) * Fix: Ignore `GenericRelation` when copying pages (John-Scott Atlakson) 2.15.4 (11.02.2022) ~~~~~~~~~~~~~~~~~~~ * Fix: Fix issue where invalid bulk action URLs would incorrectly trigger a server error (500) instead of a valid not found (404) (Ihor Marhitych) * Fix: Fix issue where bulk actions would not work for object IDs greater than 999 when `USE_THOUSAND_SEPARATOR` (Dennis McGregor) * Fix: Fix syntax when logging image rendition generation (Jake Howard) 2.15.3 (26.01.2022) ~~~~~~~~~~~~~~~~~~~ * Fix: Implement correct check for SQLite installations without full-text search support (Matt Westcott) 2.15.2 (18.01.2022) ~~~~~~~~~~~~~~~~~~~ * Fix: CVE-2022-21683 - Comment reply notifications sent to incorrect users (Ihor Marhitych, Jacob Topp-Mugglestone) * Fix: Transform operations in Filter.run() when image has been re-oriented (Justin Michalicek) * Fix: Remove extraneous header action buttons when creating or editing workflows and tasks (Matt Westcott) * Fix: Ensure that bulk publish actions pick up the latest draft revision (Matt Westcott) * Fix: Ensure the `checkbox_aria_label` is used correctly in the Bulk Actions checkboxes (Vu Pham) * Fix: Prevent error on MySQL search backend when searching three or more terms (Aldán Creo) * Fix: Allow wagtail.search app migrations to complete on versions of SQLite without full-text search support (Matt Westcott) * Fix: Update Pillow dependency to allow 9.x (Matt Westcott) 2.15.1 (11.11.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Fix syntax when logging image rendition generation (Jake Howard) * Fix: Increase version range for django-filter dependency (Serafeim Papastefanos) * Fix: Prevent bulk action checkboxes from displaying on page reports and other non-explorer listings (Matt Westcott) * Fix: Fix errors on publishing pages via bulk actions (Matt Westcott) * Fix: Fix `csrf_token` issue when using the Approve or Unlock buttons on pages on the Wagtail admin home (Matt Westcott) 2.15 LTS (04.11.2021) ~~~~~~~~~~~~~~~~~~~~~ * Implemented a new database search backend that supports the FTS features of the database in use (Developed by Aldán Creo. Mentored by Karl Hobley and Cynthia Kiser. Funded by Google Summer of Code) * Added bulk actions in the Wagtail Admin for Pages, Users, Images and Documents (Developed by Shohan Dutta Roy. Mentored by Dan Braghis, Jacob Topp-Mugglestone, and Storm Heg.) * Extended audit logging to all models and added a history view for snippets and ModelAdmin (Matt Westcott. Sponsored by The Motley Fool) * Allow granting collection management permissions over individual collections (Cynthia Kiser) * Added `TypedTableBlock` block type for StreamField, for building tables with mixed data types (Matt Westcott, Coen van der Kamp, Scott Cranfill. Sponsored by YouGov) * Add the ability for the page chooser to convert external urls that match a page to internal links (Jacob Topp-Mugglestone. Sponsored by The Motley Fool) * Added "Extending Wagtail" section to documentation (Matt Westcott) * Introduced template components, a standard mechanism for renderable objects in the admin (Matt Westcott) * Support `min_num` / `max_num` options on ListBlock (Matt Westcott) * Implemented automatic tree synchronisation for `contrib.simple_translation` (Mitchel Cabuloy) * Added a `background_position_style` property to renditions (Karl Hobley) * Added a distinct `wagtail.copy_for_translation` log action type (Karl Hobley) * Add a debug logger around image rendition generation (Jake Howard) * Convert Documents and Images to class based views for easier overriding (Matt Westcott) * Isolate admin URLs for Documents and Images search listing results with the name `'listing_results'` (Matt Westcott) * Removed `request.is_ajax()` usage in Documents, Image and Snippet views (Matt Westcott) * Simplify generic admin view templates plus ensure `page_title` and `page_subtitle` are used consistently (Matt Westcott) * Extend support for collapsing edit panels from just MultiFieldPanels to all kinds of panels (Fabien Le Frapper, Robbie Mackay) * Add object count to header within modeladmin listing view (Jonathan "Yoni" Knoll) * Add ability to return HTML in multiple image upload errors (Gordon Pendleton) * Upgrade internal JS tooling; Node v14 plus other smaller package upgrades (LB (Ben Johnston)) * Add support for `non_field_errors` rendering in Workflow action modal (LB (Ben Johnston)) * Support calling `get_image_model` and `get_document_model` at import time (Matt Westcott) * When copying a page, default the 'Publish copied page' field to false (Justin Slay) * Open Preview and Live page links in the same tab, except where it would interrupt editing a Page (Sagar Agarwal) * Added `ExcelDateFormatter` to `wagtail.admin.views.mixins` so that dates in Excel exports will appear in the locale's `SHORT_DATETIME_FORMAT` (Andrew Stone) * Add TIDAL support to the list of oEmbed providers (Wout De Puysseleir) * Add `label_format` attribute to customise the label shown for a collapsed StructBlock (Matt Westcott) * User Group permissions will now show all custom object permissions in one row instead of a separate table (Kamil Marut) * Create `ImageFileMixin` to extract shared file handling methods from `AbstractImage` and `AbstractRendition` (Fabien Le Frapper) * Add `before_delete_page` and `register_permissions` examples to Hooks documentation (Jane Liu, Daniel Fairhead) * Add clarity to modeladmin template override behaviour in the documentation (Joe Howard, Dan Swain) * Add section about CSV exports to security documentation (Matt Westcott) * Add initial support for Django 4.0 deprecations (Matt Westcott, Jochen Wersdörfer) * Move translations in `nl_NL` to `nl` (Loïc Teixeira, Coen van der Kamp) * Add documentation for how to redirect to a separate page on Form builder submissions using ``RoutablePageMixin`` (Nick Smith) * Refactored index listing views and made column sort-by headings more consistent (Matt Westcott) * The title field on Image and Document uploads will now default to the filename without the file extension and this behaviour can be customised (LB Johnston) * Add support for Python 3.10 (Matt Westcott) * Introduce, `autocomplete`, a separate method which performs partial matching on specific autocomplete fields. This is useful for suggesting pages to the user in real-time as they type their query. (Karl Hobley, Matt Westcott) * Use SVG icons in modeladmin headers and StreamField buttons/headers (Jérôme Lebleu) * Add tags to existing Django registered checks (LB Johnston) * Upgrade admin frontend JS libraries jQuery to 3.6.0 (Fabien Le Frapper) * Added `request.preview_mode` so that template rendering can vary based on preview mode (Andy Chosak) * Fix: Delete button is now correct colour on snippets and modeladmin listings (Brandon Murch) * Fix: Ensure that StreamBlock / ListBlock-level validation errors are counted towards error counts (Matt Westcott) * Fix: InlinePanel add button is now keyboard navigatable (Jesse Menn) * Fix: Remove redundant 'clear' button from site root page chooser (Matt Westcott) * Fix: Make ModelAdmin IndexView keyboard-navigable (Saptak Sengupta) * Fix: Prevent error on refreshing page previews when multiple preview tabs are open (Alex Tomkins) * Fix: Multiple accessibility fixes for Windows high contrast mode; Admin fields, Dropdown button, Editor Tabs, Icon visibility, Page Editor field panels, sidebar menu, sidebar hamburger icon, sidebar search, streamfield, checkboxes (Dmitrii Faiazov, Chakita Muttaraju, Onkar Apte, Desai Akshata, LB (Ben Johnston), Amy Chan, Dan Braghis, Thibaud Colas, Shariq Jamil) * Fix: Menu sidebar hamburger icon on smaller viewports now correctly indicates it is a button to screen readers and can be accessed via keyboard (Amy Chan, Dan Braghis) * Fix: `blocks.MultipleChoiceBlock`, `forms.CheckboxSelectMultiple` and `ArrayField` checkboxes will now stack instead of display inline to align with all other checkboxes fields (Seb Brown) * Fix: Screen readers can now access login screen field labels (Amy Chan) * Fix: Admin breadcrumbs home icon now shows for users with access to a subtree only (Stefan Hammer) * Fix: Add handling of invalid inline styles submitted to `RichText` so `ConfigException` is not thrown (Alex Tomkins) * Fix: Ensure comment notifications dropdown handles longer translations without overflowing content (Krzysztof Jeziorny) * Fix: Set `default_auto_field` in `postgres_search` `AppConfig` (Nick Moreton) * Fix: Ensure admin tab JS events are handled on page load (Andrew Stone) * Fix: `EmailNotificationMixin` and `send_notification` should only send emails to active users (Bryan Williams) * Fix: Disable Task confirmation now shows the correct value for quantity of tasks in progress (LB Johnston) * Fix: Page history now works correctly when it contains changes by a deleted user (Dan Braghis) * Fix: Add `gettext_lazy` to `ModelAdmin` built in view titles so that language settings are correctly used (Matt Westcott) * Fix: Tabbing and keyboard interaction on the Wagtail userbar now aligns with ARIA best practices (Storm Heg) * Fix: Add full support for custom `edit_handler` usage by adding missing `bind_to` call to `PreviewOnEdit` view (Stefan Hammer) * Fix: Only show active (not disabled) tasks in the workflow task chooser (LB Johnston) * Fix: CSS build scripts now output to the correct directory paths on Windows (Vince Salvino) * Fix: Capture log output from style fallback to avoid noise in unit tests (Matt Westcott) * Fix: Switch widgets on/off states are now visually different for high-contrast mode users (Sakshi Uppoor) * Fix: Nested InlinePanel usage no longer fails to save when creating two or more items (Indresh P, Rinish Sam, Anirudh V S) * Fix: Changed relation name used for admin commenting from `comments` to `wagtail_admin_comments` to avoid conflicts with third-party commenting apps (Matt Westcott) * Fix: CSS variables are now correctly used for the filtering menu in modeladmin (Noah H) * Fix: Panel heading attribute is no longer ignored when nested inside a `MultiFieldPanel` (Jérôme Lebleu) 2.14.2 (14.10.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Allow relation name used for admin commenting to be overridden to avoid conflicts with third-party commenting apps (Matt Westcott) * Fix: Corrected badly-formed format strings in translations (Matt Westcott) * Fix: Page history now works correctly when it contains changes by a deleted user (Dan Braghis) 2.14.1 (12.08.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Prevent failure on Twitter embeds and others which return cache_age as a string (Matt Westcott) * Fix: Fix Uncaught ReferenceError when editing links in Hallo (Cynthia Kiser) 2.14 (02.08.2021) ~~~~~~~~~~~~~~~~~ * Removed support for Django 2.2 * Added `ancestor_of` API filter (Jaap Roes) * Added support for customising group management views (Jan Seifert) * Added `full_url` property to image renditions (Shreyash Srivastava) * Added locale selector when choosing translatable snippets (Karl Hobley) * Added `WAGTAIL_WORKFLOW_ENABLED` setting for enabling / disabling moderation workflows globally (Matt Westcott) * Allow specifying `max_width` and `max_height` on EmbedBlock (Petr Dlouhý) * Add warning when StreamField is used without a StreamFieldPanel (Naomi Morduch Toubman) * Added keyboard and screen reader support to Wagtail user bar (LB Johnston, Storm Heg) * Add Google Data Studio to the list of oEmbed providers (Petr Dlouhý) * Added instructions on copying and aliasing pages to the editor's guide in documentation (Vlad Podgurschi) * Allow ListBlock to raise validation errors that are not attached to an individual child block (Matt Westcott) * Use `DATETIME_FORMAT` for localization in templates (Andrew Stone) * Added documentation on multi-site, multi instance and multi tenancy setups (Coen Van Der Kamp) * Updated Facebook / Instagram oEmbed endpoints to v11.0 (Thomas Kremmel) * Performance improvements for admin listing pages (Jake Howard, Dan Braghis, Tom Usher) * Fix: Invalid filter values for foreign key fields in the API now give an error instead of crashing (Tidiane Dia) * Fix: Ordering specified in `construct_explorer_page_queryset` hook is now taken into account again by the page explorer API (Andre Fonseca) * Fix: Deleting a page from its listing view no longer results in a 404 error (Tidiane Dia) * Fix: The Wagtail admin urls will now respect the `APPEND_SLASH` setting (Tidiane Dia) * Fix: Prevent “Forgotten password” link from overlapping with field on mobile devices (Helen Chapman) * Fix: Snippet admin urls are now namespaced to avoid ambiguity with the primary key component of the url (Matt Westcott) * Fix: Save order of promoted search results (Hardcodd) * Fix: Prevent error on copying pages with ClusterTaggableManager relations and multi-level inheritance (Chris Pollard) * Fix: Prevent failure on root page when registering the Page model with ModelAdmin (Jake Howard) * Fix: Prevent error when filtering page search results with a malformed content_type (Chris Pollard) * Fix: Prevent multiple submissions of "update" form when uploading images / documents (Mike Brown) * Fix: Ensure HTML title is populated on project template 404 page (Matt Westcott) * Fix: Respect cache_age parameters on embeds (Gordon Pendleton) * Fix: Page comparison view now reflects request-level customisations to edit handlers (Matt Westcott) * Fix: Add `block.super` to remaining `extra_js` & `extra_css` blocks (Andrew Stone) * Fix: Ensure that `editor` and `features` arguments on RichTextField are preserved by `clone()` (Daniel Fairhead) * Fix: Rename 'spin' CSS animation to avoid clashes with other libraries (Kevin Gutiérrez) * Fix: Prevent crash when copying a page from a section where the user has no publish permission (Karl Hobley) * Fix: Ensure that rich text conversion correctly handles images / embeds inside links or inline styles (Matt Westcott) 2.13.5 (14.10.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Allow relation name used for admin commenting to be overridden to avoid conflicts with third-party commenting apps (Matt Westcott) * Fix: Corrected badly-formed format strings in translations (Matt Westcott) * Fix: Correctly handle non-numeric user IDs for deleted users in reports (Dan Braghis) 2.13.4 (13.07.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Prevent embed thumbnail_url migration from failing on URLs longer than 200 characters (Matt Westcott) 2.13.3 (05.07.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Prevent error when using rich text on views where commenting is unavailable (Jacob Topp-Mugglestone) * Fix: Include form media on account settings page (Matt Westcott) * Fix: Avoid error when rendering validation error messages on ListBlock children (Matt Westcott) * Fix: Prevent comments CSS from overriding admin UI colour customisations (Matt Westcott) * Fix: Avoid validation error when editing rich text content preceding a comment (Jacob Topp-Mugglestone) 2.13.2 (17.06.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: CVE-2021-32681 - fix improper escaping of HTML ('Cross-site Scripting') in Wagtail StreamField blocks (Karen Tracey, Matt Westcott) 2.13.1 (01.06.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Ensure comment notification checkbox is fully hidden when commenting is disabled (Karl Hobley) * Fix: Prevent commenting from failing for user models with UUID primary keys (Jacob Topp-Mugglestone) * Fix: Fix incorrect link in comment notification HTML email (Matt Westcott) 2.13 (12.05.2021) ~~~~~~~~~~~~~~~~~ * New StreamField implementation with performance and functionality improvements (Matt Westcott, Karl Hobley) * Added a simple translation module into `wagtail.contrib.simple_translation` (Coen van der Kamp) * Combined account settings into a single form (Karl Hobley) * Add support for exporting redirects (Martin Sandström) * The documentation now uses Sphinx Wagtail Theme https://github.com/wagtail/sphinx_wagtail_theme (Storm Heg, Tibor Leupold, Thibaud Colas and Coen van der Kamp). * Add support for Django 3.2 * Support passing `min_num`, `max_num` and `block_counts` arguments directly to `StreamField` (Haydn Greatnews, Matt Westcott) * Add the option to set rich text images as decorative, without alt text (Helen Chapman, Thibaud Colas) * Add support for `__year` lookup in Elasticsearch queries (Seb Brown) * Support passing multiple models as arguments to `type()`, `not_type()`, `exact_type()` and `not_exact_type()` methods on `PageQuerySet` (Andy Babic) * Update default attribute copying behaviour of `Page.get_specific()` and added the `copy_attrs_exclude` option (Andy Babic) * Update `PageQueryset.specific(defer=True)` to only perform a single database query (Andy Babic) * Add `PageQueryset.defer_streamfields()` (Andy Babic) * Utilize `PageQuerySet.defer_streamfields()` to improve efficiency in a few key places (Andy Babic) * Switch ``register_setting``, ``register_settings_menu_item`` to use SVG icons (Thibaud Colas) * Add support to SVG icons for ``SearchArea`` subclasses in ``register_admin_search_area`` (Thibaud Colas) * Add `wagtail.reorder` page audit log action (Storm Heg) * `get_settings` template tag now supports specifying the variable name with `{% get_settings as var %}` (Samir Shah) * Reinstate submitter's name on moderation notification email (Matt Westcott) * Add a new switch input widget as an alternative to checkboxes (Karl Hobley) * Allow `{% pageurl %}` fallback to be a direct URL or an object with a `get_absolute_url` method (Andy Babic) * Support slicing on StreamField / StreamBlock values (Matt Westcott) * Switch Wagtail choosers to use SVG icons instead of font icon (Storm Heg) * Save revision when restart workflow (Ihor Marhitych) * Add a visible indicator of unsaved changes to the page editor (Jacob Topp-Mugglestone) * Fix: StreamField required status is now consistently handled by the `blank` keyword argument (Matt Westcott) * Fix: Show 'required' asterisks for blocks inside required StreamFields (Matt Westcott) * Fix: Make image chooser "Select format" fields translatable (Helen Chapman, Thibaud Colas) * Fix: Move labels above the form field in the image format chooser, to avoid styling issues at tablet size (Helen Chapman) * Fix: `{% include_block with context %}` now passes local variables into the block template (Jonny Scholes) * Fix: Fix pagination on 'view users in a group' (Sagar Agarwal) * Fix: Prevent page privacy menu from being triggered by pressing enter on a char field (Sagar Agarwal) * Fix: Validate host/scheme of return URLs on password authentication forms (Susan Dreher) * Fix: Reordering a page now includes the correct user in the audit log (Storm Heg) * Fix: Reverse migration errors in images and documents (Mike Brown) * Fix: Apply enough chevron padding to all applicable select elements (Scott Cranfill) * Fix: Reduce database queries in the page edit view (Ihor Marhitych) 2.12.6 (13.07.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Prevent embed thumbnail_url migration from failing on URLs longer than 200 characters (Matt Westcott) 2.12.5 (17.06.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: CVE-2021-32681 - fix improper escaping of HTML ('Cross-site Scripting') in Wagtail StreamField blocks (Karen Tracey, Matt Westcott) 2.12.4 (19.04.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: CVE-2021-29434 - fix improper validation of URLs ('Cross-site Scripting') in rich text fields (Kevin Breen, Matt Westcott) * Fix: Reverse migration errors in images and documents (Mike Brown) * Fix: Avoid wagtailembeds migration failure on MySQL 8.0.13+ (Matt Westcott) 2.12.3 (05.03.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Un-pin django-treebeard following upstream fix for migration issue (Matt Westcott) * Fix: Prevent crash when copying an alias page (Karl Hobley) * Fix: Prevent errors on page editing after changing LANGUAGE_CODE (Matt Westcott) * Fix: Correctly handle model inheritance and `ClusterableModel` on `copy_for_translation` (Karl Hobley) 2.12.2 (18.02.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Pin django-treebeard to <4.5 to prevent migration conflicts (Matt Westcott) 2.12.1 (16.02.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Ensure aliases are published when the source page is published (Karl Hobley) * Fix: Make page privacy rules apply to aliases (Karl Hobley) * Fix: Prevent error when saving embeds that do not include a thumbnail URL (Cynthia Kiser) * Fix: Ensure that duplicate embed records are deleted when upgrading (Matt Westcott) * Fix: Prevent failure when running `manage.py dumpdata` with no arguments (Matt Westcott) 2.12 (02.02.2021) ~~~~~~~~~~~~~~~~~ * Added a distinct 'choose' permission for images and documents (Robert Rollins) * StreamField values can now be modified in-place (Matt Westcott) * Added support for custom admin color themes (Joshua Marantz) * Added support for Python 3.9 * Added `WAGTAILIMAGES_IMAGE_FORM_BASE` and `WAGTAILDOCS_DOCUMENT_FORM_BASE` settings to customise the forms for images and documents (Dan Braghis) * Switch pagination icons to use SVG instead of icon fonts (Scott Cranfill) * Added string representation to image Format class (Andreas Nüßlein) * Support returning None from `register_page_action_menu_item` and `register_snippet_action_menu_item` to skip registering an item (Vadim Karpenko) * Fields on a custom image model can now be defined as required / `blank=False` (Matt Westcott) * Add combined index for Postgres search backend (Will Giddens) * Add `Page.specific_deferred` property for accessing specific page instance without up-front database queries (Andy Babic) * Add hash lookup to embeds to support URLs longer than 255 characters (Coen van der Kamp) * Fix: Stop menu icon overlapping the breadcrumb on small viewport widths in page editor (Karran Besen) * Fix: Make sure document chooser pagination preserves the selected collection when moving between pages (Alex Sa) * Fix: Gracefully handle oEmbed endpoints returning non-JSON responses (Matt Westcott) * Fix: Fix unique constraint on WorkflowState for SQL Server compatibility (David Beitey) * Fix: Reinstate chevron on collection dropdown (Mike Brown) * Fix: Prevent delete button showing on collection / workflow edit views when delete permission is absent (Helder Correia) 2.11.9 (24.01.2022) ~~~~~~~~~~~~~~~~~~~ * Fix: Update Pillow dependency to allow 9.x (Rizwan Mansuri) 2.11.8 (17.06.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: CVE-2021-32681 - fix improper escaping of HTML ('Cross-site Scripting') in Wagtail StreamField blocks (Karen Tracey, Matt Westcott) 2.11.7 (19.04.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: CVE-2021-29434 - fix improper validation of URLs ('Cross-site Scripting') in rich text fields (Kevin Breen, Matt Westcott) 2.11.6 (05.03.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Un-pin django-treebeard following upstream fix for migration issue (Matt Westcott) * Fix: Prevent crash when copying an alias page (Karl Hobley) * Fix: Prevent errors on page editing after changing LANGUAGE_CODE (Matt Westcott) * Fix: Correctly handle model inheritance and `ClusterableModel` on `copy_for_translation` (Karl Hobley) 2.11.5 (18.02.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Pin django-treebeard to <4.5 to prevent migration conflicts (Matt Westcott) 2.11.4 (16.02.2021) ~~~~~~~~~~~~~~~~~~~ * Fix: Prevent delete button showing on collection / workflow edit views when delete permission is absent (Helder Correia) * Fix: Ensure aliases are published when the source page is published (Karl Hobley) * Fix: Make page privacy rules apply to aliases (Karl Hobley) 2.11.3 (10.12.2020) ~~~~~~~~~~~~~~~~~~~ * Fix: Updated project template migrations to ensure that initial homepage creation runs before addition of locale field (Dan Braghis) * Fix: Restore ability to use translatable strings in `LANGUAGES` / `WAGTAIL_CONTENT_LANGUAGES` settings (Andreas Morgenstern) * Fix: Allow `locale` / `translation_of` API filters to be used in combination with search (Matt Westcott) * Fix: Prevent error on `create_log_entries_from_revisions` when checking publish state on a revision that cannot be restored (Kristin Riebe) 2.11.2 (17.11.2020) ~~~~~~~~~~~~~~~~~~~ * Add custom finder to support Instagram oEmbed API (Luis Nell) * Add custom finder to support Facebook oEmbed API (Cynthia Kiser) * Fix: Improve performance of permission check on translations for edit page (Karl Hobley) * Fix: Gracefully handle missing Locale records on `Locale.get_active` and `.localized` (Matt Westcott) * Fix: Handle `get_supported_language_variant` returning a language variant not in `LANGUAGES` (Matt Westcott) * Fix: Reinstate missing icon on settings edit view (Jérôme Lebleu) * Fix: Avoid performance and pagination logic issues with a large number of languages (Karl Hobley) * Fix: Allow deleting the default locale (Matt Westcott) 2.11.1 (06.11.2020) ~~~~~~~~~~~~~~~~~~~ * Fix: Ensure that cached `wagtail_site_root_paths` structures from older Wagtail versions are invalidated (Sævar Öfjörð Magnússon) * Fix: Avoid circular import between wagtail.admin.auth and custom user models (Matt Westcott) * Fix: Prevent error on resolving page URLs when a locale outside of `WAGTAIL_CONTENT_LANGUAGES` is active (Matt Westcott) 2.11 LTS (02.11.2020) ~~~~~~~~~~~~~~~~~~~~~ * Add support for multi-lingual content (Karl Hobley) * Add support for aliased pages (Karl Hobley) * Add support for hierarchical/nested Collections (Robert Rollins) * Extend treebeard's `fix_tree` method with the ability to non-destructively fix path issues and add a --full option to apply path fixes (Matt Westcott) * Add `before_edit_snippet`, `before_create_snippet` and `before_delete_snippet` hooks and documentation (Karl Hobley. Sponsored by the Mozilla Foundation) * Add `register_snippet_listing_buttons` and `construct_snippet_listing_buttons` hooks and documentation (Karl Hobley. Sponsored by the Mozilla Foundation) * Add `wagtail --version` to available Wagtail CLI commands (Kalob Taulien) * Add `hooks.register_temporarily` utility function for testing hooks (Karl Hobley. Sponsored by the Mozilla Foundation) * Remove `unidecode` and use `anyascii` in for Unicode to ASCII conversion (Robbie Mackay) * Add `render` helper to `RoutablePageMixin` to support serving template responses according to Wagtail conventions (Andy Babic) * Specify minimum Python version in setup.py (Vince Salvino) * Show user's full name in report views (Matt Westcott) * Improve Wagtail admin page load performance by caching SVG icons sprite in localStorage (Coen van der Kamp) * Support SVG icons in ModelAdmin menu items (Scott Cranfill) * Support SVG icons in admin breadcrumbs (Coen van der Kamp) * Serve PDFs inline in the browser (Matt Westcott) * Make document `content-type` and `content-disposition` configurable via `WAGTAILDOCS_CONTENT_TYPES` and `WAGTAILDOCS_INLINE_CONTENT_TYPES` (Matt Westcott) * Slug generation no longer removes stopwords (Andy Chosak, Scott Cranfill) * Add check to disallow StreamField block names that do not match Python variable syntax (François Poulain) * The `BASE_URL` setting is now converted to a string, if it isn't already, when constructing API URLs (thenewguy) * Preview from 'pages awaiting moderation' now opens in a new window (Cynthia Kiser) * Add document extension validation if `WAGTAIL_DOCS_EXTENSIONS` is set (Meghana Bhange) * Use `django-admin` command in place of `django-admin.py` (minusf) * Add `register_snippet_action_menu_item` and `construct_snippet_action_menu` hooks to modify the actions available when creating / editing a snippet (Karl Hobley) * Moved `generate_signature` and `verify_signature` functions into `wagtail.images.utils` (Noah H) * Implement `bulk_to_python` on all structural StreamField block types (Matt Westcott) * Add natural key support to `GroupCollectionPermission` (Jim Jazwiecki) * Implement `prepopulated_fields` for `wagtail.contrib.modeladmin` (David Bramwell) * Change `classname` keyword argument on basic StreamField blocks to `form_classname` (Meghana Bhange) * Replace page explorer pushPage/popPage with gotoPage for more flexible explorer navigation (Karl Hobley) * Fix: Make page-level actions accessible to keyboard users in page listing tables (Jesse Menn) * Fix: `WAGTAILFRONTENDCACHE_LANGUAGES` was being interpreted incorrectly. It now accepts a list of strings, as documented (Karl Hobley) * Fix: Update oEmbed endpoints to use https where available (Matt Westcott) * Fix: Revise `edit_handler` bind order in ModelAdmin views and fix duplicate form instance creation (Jérôme Lebleu) * Fix: Properly distinguish child blocks when comparing revisions with nested StreamBlocks (Martin Mena) * Fix: Correctly handle Turkish 'İ' characters in client-side slug generation (Matt Westcott) * Fix: Page chooser widgets now reflect custom ``get_admin_display_title`` methods (Saptak Sengupta) * Fix: `Page.copy()` now raises an error if the page being copied is unsaved (Anton Zhyltsou) * Fix: `Page.copy()` now triggers a `page_published` if the copied page is live (Anton Zhyltsou) * Fix: The Elasticsearch `URLS` setting can now take a string on its own instead of a list (Sævar Öfjörð Magnússon) * Fix: Avoid retranslating month / weekday names that Django already provides (Matt Westcott) * Fix: Fixed padding around checkbox and radio inputs (Cole Maclean) * Fix: Fix spacing around the privacy indicator panel (Sævar Öfjörð Magnússon, Dan Braghis) * Fix: Consistently redirect to admin home on permission denied (Matt Westcott, Anton Zhyltsou) 2.10.2 (25.09.2020) ~~~~~~~~~~~~~~~~~~~ * Fix: Avoid use of `icon` class name on userbar icon to prevent clashes with front-end styles (Karran Besen) * Fix: Prevent focused button labels from displaying as white on white (Karran Bessen) * Fix: Avoid showing preview button on moderation dashboard for page types with preview disabled (Dino Perovic) * Fix: Prevent oversized buttons in moderation dashboard panel (Dan Braghis) * Fix: `create_log_entries_from_revisions` now handles revisions that cannot be restored due to foreign key constraints (Matt Westcott) 2.10.1 (26.08.2020) ~~~~~~~~~~~~~~~~~~~ * Fix: Prevent `create_log_entries_from_revisions` command from failing when page model classes are missing (Dan Braghis) * Fix: Prevent page audit log views from failing for user models without a `username` field (Vyacheslav Matyukhin) * Fix: Fix icon alignment on menu items (Coen van der Kamp) * Fix: Page editor header bar now correctly shows 'Published' or 'Draft' status when no revisions exist (Matt Westcott) * Fix: Prevent page editor from failing when `USE_TZ` is false (Matt Westcott) * Fix: Ensure whitespace between block-level elements is preserved when stripping tags from rich text for search indexing (Matt Westcott) 2.10 (11.08.2020) ~~~~~~~~~~~~~~~~~ * Added Django 3.1 support (Matt Westcott, Karl Hobley) * Removed support for Python 3.5 * Implemented configurable moderation workflow (Jacob Topp-Mugglestone, Karl Hobley, Matt Westcott, Dan Braghis) * Implemented phrase searching and structured search query expressions (Karl Hobley) * Add ability to import redirects from an uploaded file (CSV, TSV, XLS, and XLSX) (Martin Sandström) * Added `webpquality` and `format-webp-lossless` image filters and `WAGTAILIMAGES_WEBP_QUALITY` setting (Nikolay Lukyanov) * Reorganised Dockerfile in project template to follow best practices (Tomasz Knapik, Jannik Wempe) * Added filtering to locked pages report (Karl Hobley) * Adds ability to view a group's users via standalone admin URL and a link to this on the group edit view (Karran Besen) * Redirect to previous url when deleting/copying/unpublish a page and modify this url via the relevant hooks (Ascani Carlo) * Added `next_url` keyword argument on `register_page_listing_buttons` and `register_page_listing_more_buttons` hooks (Ascani Carlo, Matt Westcott, LB (Ben Johnston)) * `AbstractEmailForm` will use `SHORT_DATETIME_FORMAT` and `SHORT_DATE_FORMAT` Django settings to format date/time values in email (Haydn Greatnews) * `AbstractEmailForm` now has a separate method (`render_email`) to build up email content on submission emails (Haydn Greatnews) * Add `pre_page_move` and `post_page_move` signals (Andy Babic) * Add ability to sort search promotions on listing page (Chris Ranjana, LB (Ben Johnston)) * Upgrade internal JS tooling; Node v10, Gulp v4 & Jest v23 (Jim Jazwiecki, Kim LaRocca, Thibaud Colas) * Add `after_publish_page`, `before_publish_page`, `after_unpublish_page` & `before_unpublish_page` hooks (Jonatas Baldin, Coen van der Kamp) * Add convenience `page_url` shortcut to improve how page URLs can be accessed from site settings in Django templates (Andy Babic) * Show more granular error messages from Pillow when uploading images (Rick van Hattem) * Add ordering to `Site` object, so that index page and `Site` switcher will be sorted consistently (Coen van der Kamp, Tim Leguijt) * Add Reddit to oEmbed provider list (Luke Hardwick) * Add ability to replace the default Wagtail logo in the userbar, via `branding_logo` block (Meteor0id) * Remove sticky footer on small devices, so that content is not blocked and more easily editable (Saeed Tahmasebi) * Add `alt` property to `ImageRenditionField` api representation (Liam Mullens) * Add `purge_revisions` management command to purge old page revisions (Jacob Topp-Mugglestone, Tom Dyson) * Render the Wagtail User Bar on non `Page` views (Caitlin White, Coen van der Kamp) * Add ability to define `form_classname` on `ListBlock` & `StreamBlock` (LB (Ben Johnston)) * Add documentation about how to use `Rustface` for image feature detection (Neal Todd) * Improve performance of public/not_public queries in `PageQuerySet` (Timothy Bautista) * Add `add_redirect` static method to `Redirect` class for programmatic redirect creation (Brylie Christopher Oxley, Lacey Williams Henschel) * Add reference documentation for `wagtail.contrib.redirects` (LB (Ben Johnston)) * `bulk_delete` page permission is no longer required to move pages, even if those pages have children (Robert Rollins, LB (Ben Johnston)) * Add `after_edit_snippet`, `after_create_snippet` and `after_delete_snippet` hooks and documentation (Kalob Taulien) * Improve performance of empty search results by avoiding downloading the entire search index in these scenarios (Lars van de Kerkhof, Coen van der Kamp) * Replace `gulp-sass` with `gulp-dart-sass` to improve core development across different platforms (Thibaud Colas) * Add SVG icons to resolve accessibility and customisation issues and start using them in a subset of Wagtail's admin (Coen van der Kamp, Scott Cranfill, Thibaud Colas, Dan Braghis) * Switch userbar and header H1s to use SVG icons (Coen van der Kamp) * Remove markup around rich text rendering by default, provide a way to use old behaviour via `wagtail.contrib.legacy.richtext` (Coen van der Kamp, Dan Braghis) * Apply title length normalisation to improve ranking on PostgreSQL search (Karl Hobley) * Add `WAGTAIL_TIME_FORMAT` setting (Jacob Topp-Mugglestone) * Allow omitting the default editor from `WAGTAILADMIN_RICH_TEXT_EDITORS` (Gassan Gousseinov) * Disable password auto-completion on user creation form (Samir Shah) * Upgrade jQuery to version 3.5.1 to reduce penetration testing false positives (Matt Westcott) * Add ability to extend `EditHandler` without a children attribute (Seb Brown) * `Page.objects.specific` now gracefully handles pages with missing specific records (Andy Babic) * StreamField 'add' buttons are now disabled when maximum count is reached (Max Gabrielsson) * Use underscores for form builder field names to allow use as template variables (Ashia Zawaduk, LB (Ben Johnston)) * Deprecate use of unidecode within form builder field names (Michael van Tellingen, LB (Ben Johnston)) * Improve error feedback when editing a page with a missing model class (Andy Babic) * Change Wagtail tabs implementation to only allow slug-formatted tab identifiers, reducing false positives from security audits (Matt Westcott) * Add skip link for keyboard users to bypass Wagtail navigation in the admin (Martin Coote) * Ensure errors during Postgres search indexing are left uncaught to assist troubleshooting (Karl Hobley) * Add ability to edit images and embeds in rich text editor (Maylon Pedroso, Samuel Mendes, Gabriel Peracio) * Fix: Support IPv6 domain (Alex Gleason, Coen van der Kamp) * Fix: Ensure link to add a new user works when no users are visible in the users list (LB (Ben Johnston)) * Fix: `AbstractEmailForm` saved submission fields are now aligned with the email content fields, `form.cleaned_data` will be used instead of `form.fields` (Haydn Greatnews) * Fix: Removed ARIA `role="table"` from TableBlock output (Thibaud Colas) * Fix: Set Cache-Control header to prevent page preview responses from being cached (Tomas Walch) * Fix: Accept unicode characters in slugs on the "copy page" form (François Poulain) * Fix: Remove top padding when `FieldRowPanel` is used inside a `MultiFieldPanel` (Jérôme Lebleu) * Fix: Add Wagtail User Bar back to page previews and ensure moderation actions are available (Coen van der Kamp) * Fix: Resolve issue where queryset annotations were lost (e.g. `.annotate_score()`) when using specific models in page query (Dan Bentley) * Fix: Prevent date/time picker from losing an hour on losing focus when 12-hour times are in use (Jacob Topp-Mugglestone) * Fix: Strip out HTML tags from `RichTextField` & `RichTextBlock` search index content (Timothy Bautista) * Fix: Avoid using null on string `Site.site_name` blank values to avoid different values for no name (Coen van der Kamp) * Fix: Fix deprecation warnings on Elasticsearch 7 (Yngve Høiseth) * Fix: Remove use of Node.forEach for IE 11 compatibility in admin menu items (Thibaud Colas) * Fix: Fix incorrect method name in SiteMiddleware deprecation warning (LB (Ben Johnston)) * Fix: `wagtail.contrib.sitemaps` no longer depends on SiteMiddleware (Matt Westcott) * Fix: Purge image renditions cache when renditions are deleted (Pascal Widdershoven, Matt Westcott) * Fix: Image / document forms now display non-field errors such as `unique_together` constraints (Matt Westcott) * Fix: Make "Site" chooser in site settings translatable (Andreas Bernacca) * Fix: Add missing dropdown icons to image upload, document upload, and site settings screens (Andreas Bernacca) * Fix: Prevent snippets’ bulk delete button from being present for screen reader users when it’s absent for sighted users (LB (Ben Johnston)) * Fix: Fix group permission checkboxes not being clickable in IE11 (LB (Ben Johnston)) 2.9.3 (20.07.2020) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2020-15118 - prevent HTML injection through form field help text (Timothy Bautista, Matt Westcott) 2.9.2 (03.07.2020) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent startup failure when `wagtail.contrib.sitemaps` is in `INSTALLED_APPS` (Matt Westcott) 2.9.1 (30.06.2020) ~~~~~~~~~~~~~~~~~~ * Fix: Fix incorrect method name in SiteMiddleware deprecation warning (LB (Ben Johnston)) * Fix: `wagtail.contrib.sitemaps` no longer depends on SiteMiddleware (Matt Westcott) * Fix: Purge image renditions cache when renditions are deleted (Pascal Widdershoven, Matt Westcott) 2.9 (04.05.2020) ~~~~~~~~~~~~~~~~ * Removed support for Django 2.1 * Added data exports in XLSX and CSV format for reports, ModelAdmin and form submissions (Jacob Topp-Mugglestone) * Added support for creating custom reports (Jacob Topp-Mugglestone) * Skip page validation when unpublishing a page (Samir Shah) * Added `MultipleChoiceBlock` block type for StreamField (James O'Toole) * ChoiceBlock now accepts a `widget` keyword argument (James O'Toole) * Reduced contrast of rich text toolbar (Jack Paine) * Support the rel attribute on custom ModelAdmin buttons (Andy Chosak) * Server-side page slug generation now respects `WAGTAIL_ALLOW_UNICODE_SLUGS` (Arkadiusz Michał Ryś) * Wagtail admin no longer depends on SiteMiddleware, avoiding incompatibility with Django sites framework and redundant database queries (aritas1, timmysmalls, Matt Westcott) * Tag field autocompletion now handles custom tag models (Matt Westcott) * `wagtail_serve` URL route can now be omitted for headless sites (Storm Heg) * Allow free tagging to be disabled on custom tag models (Matt Westcott) * Allow disabling page preview by setting `preview_modes` to an empty list (Casper Timmers) * Add Vidyard to oEmbed provider list (Steve Lyall) * Optimise compiling media definitions for complex StreamBlocks (pimarc) * FieldPanel now accepts a 'heading' argument (Jacob Topp-Mugglestone) * Replaced deprecated `ugettext` / `ungettext` calls with `gettext` / `ngettext` (Mohamed Feddad) * ListBlocks now call child block `bulk_to_python` if defined (Andy Chosak) * Site settings are now identifiable/cacheable by request as well as site (Andy Babic) * Added `select_related` attribute to site settings to enable more efficient fetching of foreign key values (Andy Babic) * Add caching of image renditions (Tom Dyson, Tim Kamanin) * Add documentation for reporting security issues and internationalisation (Matt Westcott) * Fields on a custom image model can now be defined as required `blank=False` (Matt Westcott) * Fix: CVE-2020-11037 - avoid potential timing attack on password-protected private pages (Thibaud Colas) * Fix: Added ARIA alert role to live search forms in the admin (Casper Timmers) * Fix: Reorder login form elements to match expected tab order (Kjartan Sverrisson) * Fix: Re-add 'Close Explorer' button on mobile viewports (Sævar Öfjörð Magnússon) * Fix: Add a more descriptive label to Password reset link for screen reader users (Casper Timmers, Martin Coote) * Fix: Improve Wagtail logo contrast by adding a background (Brian Edelman, Simon Evans, Ben Enright) * Fix: Prevent duplicate notification messages on page locking (Jacob Topp-Mugglestone) * Fix: Fix InlinePanel item non field errors not visible (Storm Heg) * Fix: `{% image ... as var %}` now clears the context variable when passed None as an image (Maylon Pedroso) * Fix: `refresh_index` method on Elasticsearch no longer fails (Lars van de Kerkhof) * Fix: Document tags no longer fail to update when replacing the document file at the same time (Matt Westcott) * Fix: Prevent error from very tall / wide images being resized to 0 pixels (Fidel Ramos) * Fix: Remove excess margin when editing snippets (Quadric) * Fix: Added `scope` attribute to table headers in TableBlock output (Quadric) * Fix: Prevent KeyError when accessing a StreamField on a deferred queryset (Paulo Alvarado) * Fix: Hide empty 'view live' links (Karran Besen) * Fix: Mark up a few strings for translation (Luiz Boaretto) * Fix: Invalid focal_point attribute on image edit view (Michał (Quadric) Sieradzki) * Fix: No longer expose the `.delete()` method on the default Page.objects manager (Nick Smith) * Fix: `exclude_fields_in_copy` on Page models will now work for for modelcluster parental / many to many relations (LB (Ben Johnston)) * Fix: Response header (content disposition) now correctly handles filenames with non-ascii characters when using a storage backend (Rich Brennan) * Fix: Improved accessibility fixes for `main`, `header` and `footer` elements in the admin page layout (Mitchel Cabuloy) * Fix: Prevent version number from obscuring long settings menus (Naomi Morduch Toubman) * Fix: Admin views using TemplateResponse now respect the user's language setting (Jacob Topp-Mugglestone) * Fix: Fixed incorrect language code for Japanese in language setting dropdown (Tomonori Tanabe) 2.8.2 (04.05.2020) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2020-11037 - avoid potential timing attack on password-protected private pages (Thibaud Colas) 2.8.1 (14.04.2020) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2020-11001 - prevent XSS attack via page revision comparison view (Vlad Gerasimenko, Matt Westcott) 2.8 (03.02.2020) ~~~~~~~~~~~~~~~~ * Django 3.0 support (Matt Westcott, Mads Jensen) * Improved page locking to give editors exclusive edit access (Karl Hobley, Jacob Topp-Mugglestone) * Removed support for Django 2.0 * Removed leftover Python 2.x compatibility code (Sergey Fedoseev) * Combine flake8 configurations (Sergey Fedoseev) * Improve diffing behaviour for text fields (Aliosha Padovani) * Improve contrast of disabled inputs (Nick Smith) * Added `get_document_model_string` function (Andrey Smirnov) * Added support for Cloudflare API tokens for frontend cache invalidation (Tom Usher) * Cloudflare frontend cache invalidation requests are now sent in chunks of 30 to fit within API limits (Tom Usher) * Added `ancestors` field to the pages endpoint in admin API (Karl Hobley) * Removed Django admin management of `Page` & `Site` models (Andreas Bernacca) * Cleaned up Django docs URLs in documentation (Pete Andrew) * Add StreamFieldPanel to available panel types in documentation (Dan Swain) * Add `{{ block.super }}` example to ModelAdmin customisation in documentation (Dan Swain) * Add ability to filter image index by a tag (Benedikt Willi) * Add partial experimental support for nested InlinePanels (Matt Westcott, Sam Costigan, Andy Chosak, Scott Cranfill) * Added cache control headers when serving documents (Johannes Vogel) * Use `sensitive_post_parameters` on password reset form (Dan Braghis) * Add `WAGTAILEMBEDS_RESPONSIVE_HTML` setting to remove automatic addition of `responsive-object` around embeds (Kalob Taulien) * Fix: Rename documents listing column 'uploaded' to 'created' (LB (Ben Johnston)) * Fix: Unbundle the l18n library as it was bundled to avoid installation errors which have been resolved (Matt Westcott) * Fix: Prevent error when comparing pages that reference a model with a custom primary key (Fidel Ramos) * Fix: Moved `get_document_model` location so it can be imported when Models are not yet loaded (Andrey Smirnov) * Fix: Use correct HTML escaping of Jinja2 form templates for StructBlocks (Brady Moe) * Fix: All templates with wagtailsettings and modeladmin now use `block.super` for `extra_js` & `extra_css` (Timothy Bautista) * Fix: Layout issue when using `FieldRowPanel` with a heading (Andreas Bernacca) * Fix: `file_size` and `file_hash` now updated when Document file changed (Andreas Bernacca) * Fix: Fixed order of URLs in project template so that static / media URLs are not blocked (Nick Smith) * Fix: Added `verbose_name_plural` to form submission model (Janneke Janssen) * Fix: Prevent `update_index` failures and incorrect front-end rendering on blank `TableBlock` (Carlo Ascani) * Fix: Dropdown initialisation on the search page after AJAX call (Eric Sherman) * Fix: Make sure all modal chooser search results correspond to the latest search by cancelling previous requests (Esper Kuijs) 2.7.4 (20.07.2020) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2020-15118 - prevent HTML injection through form field help text (Timothy Bautista, Matt Westcott) * Fix: Expand Pillow dependency range to include 7.x (Harris Lapiroff, Matt Westcott) 2.7.3 (04.05.2020) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2020-11037 - avoid potential timing attack on password-protected private pages (Thibaud Colas) 2.7.2 (14.04.2020) ~~~~~~~~~~~~~~~~~~ * Fix: CVE-2020-11001 - prevent XSS attack via page revision comparison view (Vlad Gerasimenko, Matt Westcott) 2.7.1 (08.01.2020) ~~~~~~~~~~~~~~~~~~ * Fix: Management command startup checks under `ManifestStaticFilesStorage` no longer fail if `collectstatic` has not been run first (Alex Tomkins) 2.7 LTS (06.11.2019) ~~~~~~~~~~~~~~~~~~~~ * Improved StreamField design (Bertrand Bordage) * Added WebP image support (frmdstryr, Karl Hobley, Matt Westcott) * Added Elasticsearch 7 support (pySilver) * Added Python 3.8 support (John Carter, Matt Westcott) * Added `construct_page_listing_buttons` hook (Michael van Tellingen) * Added more detailed documentation and troubleshooting for installing OpenCV for feature detection (Daniele Procida) * Added Table Block caption for accessibility (Rahmi Pruitt) * Move and refactor upgrade notification JS (Jonny Scholes) * Add ability to insert internal anchor links/links with fragment identifiers in Draftail (rich text) fields (Iman Syed) * Remove need for Elasticsearch `update_all_types` workaround, upgrade minimum release to 6.4.0 or above (Jonathan Liuti) * Add ability for users to change their own name via the account settings page (Kevin Howbrook) * Add ability to insert telephone numbers as links in Draftail (rich text) fields (Mikael Engström and Liam Brenner) * Increase delay before search in the snippet chooser, to prevent redundant search request round trips (Robert Rollins) * Add `WAGTAIL_EMAIL_MANAGEMENT_ENABLED` setting to determine whether users can change their email address (Janne Alatalo) * Recognise Soundcloud artist URLs as embeddable (Kiril Staikov) * Add `WAGTAILDOCS_SERVE_METHOD` setting to determine how document downloads will be linked to and served (Tobias McNulty, Matt Westcott) * Add `WAGTAIL_MODERATION_ENABLED` setting to enable / disable the 'Submit for Moderation' option (Jacob Topp-Mugglestone) * Added settings to customise pagination page size for the Images admin area (Brian Whitton) * Added ARIA role to TableBlock output (Matt Westcott) * Added cache-busting query parameters to static files within the Wagtail admin (Matt Westcott) * Allow `register_page_action_menu_item` and `construct_page_action_menu` hooks to override the default menu action (Rahmi Pruitt, Matt Westcott) * `WAGTAILIMAGES_MAX_IMAGE_PIXELS` limit now takes the number of animation frames into account (Karl Hobley) * Fix: Added line breaks to long filenames on multiple image / document uploader (Kevin Howbrook) * Fix: Added https support for Scribd oEmbed provider (Rodrigo) * Fix: Changed StreamField group labels color so labels are visible (Catherine Farman) * Fix: Prevented images with a very wide aspect ratio from being displayed distorted in the rich text editor (Iman Syed) * Fix: Prevent exception when deleting a model with a protected One-to-one relationship (Neal Todd) * Fix: Added labels to snippet bulk edit checkboxes for screen reader users (Martey Dodoo) * Fix: Middleware responses during page preview are now properly returned to the user (Matt Westcott) * Fix: Default text of page links in rich text uses the public page title rather than the admin display title (Andy Chosak) * Fix: Specific page permission checks are now enforced when viewing a page revision (Andy Chosak) * Fix: `pageurl` and `slugurl` tags no longer fail when `request.site` is `None` (Samir Shah) * Fix: Output form media on add/edit image forms with custom models (Matt Westcott) * Fix: Output form media on add/edit document forms with custom models (Sergey Fedoseev) * Fix: Layout for the clear checkbox in default FileField widget (Mikalai Radchuk) * Fix: Remove ASCII conversion from Postgres search backend, to support stemming in non-Latin alphabets (Pavel Denisov) * Fix: Prevent tab labels on page edit view from being cut off on very narrow screens (Kevin Howbrook) * Fix: Very long words in page listings are now broken where necessary (Kevin Howbrook) * Fix: Language chosen in user preferences no longer persists on subsequent requests (Bojan Mihelac) * Fix: Prevent new block IDs from being assigned on repeated calls to `StreamBlock.get_prep_value` (Colin Klein) * Fix: Prevent broken images in notification emails when static files are hosted on a remote domain (Eduard Luca) * Fix: Replace styleguide example avatar with default image to avoid issues when custom user model is used (Matt Westcott) * Fix: `DraftailRichTextArea` is no longer treated as a hidden field by Django's form logic (Sergey Fedoseev) * Fix: Replace format() placeholders in translatable strings with % formatting (Matt Westcott) * Fix: Altering Django REST Framework's `DEFAULT_AUTHENTICATION_CLASSES` setting no longer breaks the page explorer menu and admin API (Matt Westcott) * Fix: Regression - missing label for external link URL field in link chooser (Stefani Castellanos) 2.6.3 (22.10.2019) ~~~~~~~~~~~~~~~~~~ * Fix: Altering Django REST Framework's `DEFAULT_AUTHENTICATION_CLASSES` setting no longer breaks the page explorer menu and admin API (Matt Westcott) 2.6.2 (19.09.2019) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent search indexing failures on Postgres 9.4 and Django >= 2.2.1 (Matt Westcott) 2.6.1 (05.08.2019) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent JavaScript errors caused by unescaped quote characters in translation strings (Matt Westcott) 2.6 (01.08.2019) ~~~~~~~~~~~~~~~~ * Removed support for Python 3.4 * Added support for `short_description` for field labels in modeladmin's `InspectView` (Wesley van Lee) * Rearranged SCSS folder structure to the client folder and split them approximately according to ITCSS. (Naomi Morduch Toubman, Jonny Scholes, Janneke Janssen, Hugo van den Berg) * Added support for specifying cell alignment on TableBlock (Samuel Mendes) * Added more informative error when a non-image object is passed to the `image` template tag (Deniz Dogan) * Added more ARIA landmarks across the admin interface and welcome page for screen reader users to navigate the CMS more easily (Beth Menzies) * Added ButtonHelper examples in the modelAdmin primer page within documentation (Kalob Taulien) * Multiple clarifications, grammar and typo fixes throughout documentation (Dan Swain) * Use correct URL in API example in documentation (Michael Bunsen) * Move datetime widget initialiser JS into the widget's form media instead of page editor media (Matt Westcott) * Add form field prefixes for input forms in chooser modals (Matt Westcott) * Increase font-size across the whole admin (Beth Menzies, Katie Locke) * Improved text color contrast across the whole admin (Beth Menzies, Katie Locke) * Added consistent focus outline styles across the whole admin (Thibaud Colas) * Removed version number from the logo link’s title. The version can now be found under the Settings menu (Thibaud Colas) * Added "don't delete" option to confirmation screen when deleting images, documents and modeladmin models (Kevin Howbrook) * Added `branding_title` template block for the admin title prefix (Dillen Meijboom) * Add image dimensions in image gallery and image choosers for screen reader users (Helen Chapman) * Added support for custom search handler classes to modeladmin's IndexView, and added a class that uses the default Wagtail search backend for searching (Seb Brown, Andy Babic) * Improved heading structure for screen reader users navigating the CMS admin (Beth Menzies, Helen Chapman) * Updated group edit view to expose the Permission object for each checkbox (George Hickman) * Improve performance of Pages for Moderation panel (Fidel Ramos) * Add more contextual information for screen readers in the explorer menu’s links (Helen Chapman) * Added `process_child_object` and `exclude_fields` arguments to ``Page.copy()`` to make it easier for third-party apps to customise copy behaviour (Karl Hobley) * Added `Page.with_content_json()`, allowing revision content loading behaviour to be customised on a per-model basis (Karl Hobley) * Improved screen-reader labels for action links in page listing (Helen Chapman, Katie Locke) * Added screen-reader labels for table headings in page listing (Helen Chapman, Katie Locke) * Added screen reader labels for page privacy toggle, edit lock, status tag in page explorer & edit views (Helen Chapman, Katie Locke) * Added screen-reader labels for dashboard summary cards (Helen Chapman, Katie Locke) * Added screen-reader labels for privacy toggle of collections (Helen Chapman, Katie Locke) * Added `construct_settings_menu` hook (Jordan Bauer, Quadric) * Fixed compatibility of date / time choosers with wagtail-react-streamfield (Mike Hearn) * Performance optimization of several admin functions, including breadcrumbs, home and index pages (Fidel Ramos) * Fix: ModelAdmin no longer fails when filtering over a foreign key relation (Jason Dilworth, Matt Westcott) * Fix: The Wagtail version number is now visible within the Settings menu (Kevin Howbrook) * Fix: Scaling images now rounds values to an integer so that images render without errors (Adrian Brunyate) * Fix: Revised test decorator to ensure TestPageEditHandlers test cases run correctly (Alex Tomkins) * Fix: Wagtail bird animation in admin now ends correctly on all browsers (Deniz Dogan) * Fix: Explorer menu no longer shows sibling pages for which the user does not have access (Mike Hearn) * Fix: Fixed occurrences of invalid HTML across the CMS admin (Thibaud Colas) * Fix: Admin HTML now includes the correct `dir` attribute for the active language (Andreas Bernacca) * Fix: Fix type error when using `--chunk_size` argument on `./manage.py update_index` (Seb Brown) * Fix: Avoid rendering entire form in EditHandler's `repr` method (Alex Tomkins) * Fix: Add empty alt attributes to HTML output of Embedly and oEmbed embed finders (Andreas Bernacca) * Fix: Add empty alt attributes to all images in the CMS admin (Andreas Bernacca) * Fix: Make URL generator preview image alt translatable (Thibaud Colas) * Fix: Clear pending AJAX request if error occurs on page chooser (Matt Westcott) * Fix: Prevent text from overlapping in focal point editing UI (Beth Menzies) * Fix: Screen readers now announce "Dashboard" for the main nav’s logo link instead of Wagtail’s version number (Thibaud Colas) * Fix: Screen readers now treat page-level action dropdowns as navigation instead of menus (Helen Chapman) * Fix: Make icon font implementation more screen-reader-friendly (Thibaud Colas) * Fix: Remove duplicate labels in image gallery and image choosers for screen reader users (Helen Chapman) * Fix: Restore custom "Date" icon for scheduled publishing panel in Edit page’s Settings tab (Helen Chapman) * Fix: Added missing form media to user edit form template (Matt Westcott) * Fix: Add a label to the modals’ “close” button for screen reader users (Helen Chapman, Katie Locke) * Fix: Ensure the 'add child page' button displays when focused (Helen Chapman, Katie Locke) * Fix: Remove tab order customisations in CMS admin (Jordan Bauer) * Fix: Add labels to permission checkboxes for screen reader users (Helen Chapman, Katie Locke) * Fix: Page.copy() no longer copies child objects when the accessor name is included in `exclude_fields_in_copy` (Karl Hobley) * Fix: Move focus to the pages explorer menu when open (Helen Chapman) * Fix: Clicking the privacy toggle while the page is still loading no longer loads the wrong data in the page (Helen Chapman) * Fix: Added missing `is_stored_locally` method to `AbstractDocument` (jonny5532) * Fix: Query model no longer removes punctuation as part of string normalisation (William Blackie) * Fix: Make login test helper work with user models with non-default username fields (Andrew Miller) * Fix: Delay dirty form check to prevent "unsaved changes" warning from being wrongly triggered (Thibaud Colas) * Fix: Make "Collection" and "Parent" form field labels translatable (Thibaud Colas) 2.5.2 (01.08.2019) ~~~~~~~~~~~~~~~~~~ * Fix: Delay dirty form check to prevent "unsaved changes" warning from being wrongly triggered (Thibaud Colas) 2.5.1 (07.05.2019) ~~~~~~~~~~~~~~~~~~ * Fix: Prevent crash when comparing StructBlocks in revision history (Adrian Turjak, Matt Westcott) 2.5 (24.04.2019) ~~~~~~~~~~~~~~~~ * Django 2.2 support (Matt Westcott, Andy Babic) * Added support for customising EditHandler-based forms on a per-request basis (Bertrand Bordage) * Added more informative error message when `|richtext` filter is applied to a non-string value (mukesh5) * Automatic search indexing can now be disabled on a per-model basis via the `search_auto_update` attribute (Karl Hobley) * Improved diffing of StreamFields when comparing page revisions (Karl Hobley) * Highlight broken links to pages and missing documents in rich text (Brady Moe) * Preserve links when copy-pasting rich text content from Wagtail to other tools (Thibaud Colas) * Rich text to contentstate conversion now prioritises more specific rules, to accommodate `

` and `
` elements with attributes (Matt Westcott) * Added limit image upload size by number of pixels (Thomas Elliott) * Added `manage.py wagtail_update_index` alias to avoid clashes with `update_index` commands from other packages (Matt Westcott) * Renamed `target_model` argument on `PageChooserBlock` to `page_type` (Loic Teixeira) * `edit_handler` and `panels` can now be defined on a `ModelAdmin` definition (Thomas Kremmel) * Add Learn Wagtail to third-party tutorials in documentation (Matt Westcott) * Add a Django setting `TAG_LIMIT` to limit number of tags that can be added to any taggit model (Mani) * Added instructions on how to generate urls for `ModelAdmin` to documentation (LB (Ben Johnston), Andy Babic) * Added option to specify a fallback URL on `{% pageurl %}` (Arthur Holzner) * Add support for more rich text formats, disabled by default: `blockquote`, `superscript`, `subscript`, `strikethrough`, `code` (Md Arifin Ibne Matin) * Added `max_count_per_parent` option on page models to limit the number of pages of a given type that can be created under one parent page (Wesley van Lee) * `StreamField` field blocks now accept a `validators` argument (Tom Usher) * Added edit / delete buttons to snippet index and "don't delete" option to confirmation screen, for consistency with pages (Kevin Howbrook) * Added support for Markdown shortcuts for inline formatting in rich text editor, e.g. `**` for bold, `_` for italic, etc. (Thibaud Colas) * Added name attributes to all built-in page action menu items (LB (Ben Johnston)) * Added validation on the filter string to the Jinja2 image template tag (Jonny Scholes) * Changed the pages reordering UI toggle to make it easier to find (Katie Locke, Thibaud Colas) * Added support for rich text link rewrite handlers for `external` and `email` links (Md Arifin Ibne Matin) * Clarify installation instructions in documentation, especially regarding virtual environments. (Naomi Morduch Toubman) * Fix: Set `SERVER_PORT` to 443 in `Page.dummy_request()` for HTTPS sites (Sergey Fedoseev) * Fix: Include port number in `Host` header of `Page.dummy_request()` (Sergey Fedoseev) * Fix: Validation error messages in `InlinePanel` no longer count towards `max_num` when disabling the 'add' button (Todd Dembrey, Thibaud Colas) * Fix: Rich text to contentstate conversion now ignores stray closing tags (frmdstryr) * Fix: Escape backslashes in `postgres_search` queries (Hammy Goonan) * Fix: Parent page link in page chooser search results no longer navigates away (Asanka Lihiniyagoda, Sævar Öfjörð Magnússon) * Fix: `routablepageurl` tag now correctly omits domain part when multiple sites exist at the same root (Gassan Gousseinov) * Fix: Added missing collection column specifier on document listing template (Sergey Fedoseev) * Fix: Page Copy will now also copy ParentalManyToMany field relations (LB (Ben Johnston)) * Fix: Admin HTML header now includes correct language code (Matt Westcott) * Fix: Unclear error message when saving image after focal point edit (Hugo van den Berg) * Fix: `send_mail` now correctly uses the `html_message` kwarg for HTML messages (Tiago Requeijo) * Fix: Page copying no longer allowed if page model has reached its `max_count` (Andy Babic) * Fix: Don't show page type on page chooser button when multiple types are allowed (Thijs Kramer) * Fix: Make sure page chooser search results correspond to the latest search by cancelling previous requests (Esper Kuijs) * Fix: Inform user when moving a page from one parent to another where there is an already existing page with the same slug (Casper Timmers) * Fix: User add/edit forms now support form widgets with JS/CSS media (Damian Grinwis) * Fix: Rich text processing now preserves non-breaking spaces instead of converting them to normal spaces (Wesley van Lee) * Fix: Prevent autocomplete dropdowns from appearing over date choosers on Chrome (Kevin Howbrook) * Fix: Prevent crash when logging HTTP errors from Cloudflare (Kevin Howbrook) * Fix: Prevent rich text editor crash when filtering copy-pasted content and the last block is to be removed, e.g. unsupported image (Thibaud Colas) * Fix: Removing rich text links / documents now also works when the text selection is backwards (Thibaud Colas) * Fix: Prevent the rich text editor from crashing when copy-paste filtering removes all of its content (Thibaud Colas) * Fix: Page chooser now respects custom `get_admin_display_title` methods on parent page and breadcrumb (Haydn Greatnews) * Fix: Added consistent whitespace around sortable table headings (Matt Westcott) * Fix: Moved locale names for Chinese (Simplified) and Chinese (Traditional) to `zh_Hans` and `zh_Hant` (Matt Westcott) * Fix: Increase max length on `Embed.thumbnail_url` to 255 characters (Kevin Howbrook) 2.4 (19.12.2018) ~~~~~~~~~~~~~~~~ * Added support for Python 3.7 (Matt Westcott) * Removed support for Django 1.11 (Matt Westcott) * Added `max_count` option on page models to limit the number of pages of a particular type that can be created (Dan Braghis) * Document and image choosers now show the document / image's collection (Alejandro Garza, Janneke Janssen) * Added new "Welcome to your Wagtail site" Starter Page when using wagtail start command (Timothy Allen, Scott Cranfill) * Added ability to run individual tests through tox (Benjamin Bach) * Collection listings are now ordered by name (Seb Brown) * Added `file_hash` field to documents (Karl Hobley, Dan Braghis) * Added last login to the user overview (Noah B Johnson) * Changed design of image editing page (Janneke Janssen, Ben Enright) * Added Slovak character map for JavaScript slug generation (Andy Chosak) * Make documentation links on welcome page work for prereleases (Matt Westcott) * Allow overridden `copy()` methods in `Page` subclasses to be called from the page copy view (Robert Rollins) * Users without a preferred language set on their profile now use language selected by Django's `LocaleMiddleware` (Benjamin Bach) * Added hooks to customise the actions menu on the page create/edit views (Matt Westcott) * Cleanup: Use `functools.partial()` instead of `django.utils.functional.curry()` (Sergey Fedoseev) * Squashed migrations for wagtailimages (Karl Hobley) * Added `before_move_page` and `after_move_page` hooks (Maylon Pedroso) * Bulk deletion button for snippets is now hidden until items are selected (Karl Hobley) * Fix: Query objects returned from `PageQuerySet.type_q` can now be merged with `|` (Brady Moe) * Fix: Add `rel="noopener noreferrer"` to target blank links (Anselm Bradford) * Fix: Additional fields on custom document models now show on the multiple document upload view (Robert Rollins, Sergey Fedoseev) * Fix: Help text is partially hidden when using a combination of BooleanField and FieldPanel in page model (Dzianis Sheka) * Fix: Allow custom logos of any height in the admin menu (Meteor0id) * Fix: Allow nav menu to take up all available space instead of scrolling (Meteor0id) * Fix: Redirects now return 404 when destination is unspecified or a page with no site (Hillary Jeffrey) * Fix: Refactor all breakpoint definitions, removing style overlaps (Janneke Janssen) * Fix: Updated draftjs_exporter to 2.1.5 to fix bug in handling adjacent entities (Thibaud Colas) * Fix: Page titles consisting only of stopwords now generate a non-empty default slug (Andy Chosak, Janneke Janssen) * Fix: Sitemap generator now allows passing a sitemap instance in the URL configuration (Mitchel Cabuloy, Dan Braghis) 2.3 LTS (23.10.2018) ~~~~~~~~~~~~~~~~~~~~ * Added support for Django 2.1 (Ryan Verner, Matt Westcott) * Improved colour contrast (Coen van der Kamp, Naomi Morduch Toubman, Naa Marteki Reed, Edd Baldry, Ben Enright) * Added 'scale' image filter (Oliver Wilkerson) * Added meta tag to prevent search engines from indexing admin pages (Karl Hobley) * EmbedBlock now validates against recognised embed providers on save (Bertrand Bordage) * Made cache control headers on Wagtail admin consistent with Django admin (Tomasz Knapik) * Notification emails now include an "Auto-Submitted: auto-generated" header (Dan Braghis) * Image chooser panels now show alt text as title (Samir Shah) * Added `download_url` field to images in the API (Michael Harrison) * Dummy requests for preview now preserve the HTTP Authorization header (Ben Dickinson) * Fix: Respect next param on login (Loic Teixeira) * Fix: InlinePanel now handles relations that specify a related_query_name (Aram Dulyan) * Fix: before_delete_page / after_delete_page hooks now run within the same database transaction as the page deletion (Tomasz Knapik) * Fix: Snippet chooser modal no longer fails on snippet models with UUID primary keys (Sævar Öfjörð Magnússon) * Fix: Restored localisation in date/time pickers (David Moore, Thibaud Colas) * Fix: Tag input field no longer treats 'б' on Russian keyboards as a comma (Michael Borisov) * Fix: Disabled autocomplete dropdowns on date/time chooser fields (Janneke Janssen) * Fix: Split up `wagtail.admin.forms` to make it less prone to circular imports (Matt Westcott) * Fix: Disable linking to root page in rich text, making the page non-functional (Matt Westcott) * Fix: Pages should be editable and save-able even if there are broken page or document links in rich text (Matt Westcott) * Fix: Avoid redundant round-trips of JSON StreamField data on save, improving performance and preventing consistency issues on fixture loading (Andy Chosak, Matt Westcott) * Fix: Users are not logged out when changing their own password through the Users area (Matt Westcott) 2.2.2 (29.08.2018) ~~~~~~~~~~~~~~~~~~ * Fix: Seek to the beginning of image files when uploading, to restore compatibility with django-storages Google Cloud and Azure backends (Mikalai Radchuk) * Fix: Respect next param on login (Loic Teixeira) 2.2.1 (13.08.2018) ~~~~~~~~~~~~~~~~~~ * Fix: Pin Beautiful Soup to 4.6.0 due to further regressions in formatting empty elements (Matt Westcott) * Fix: Prevent AppRegistryNotReady error when wagtail.contrib.sitemaps is in INSTALLED_APPS (Matt Westcott) 2.2 (10.08.2018) ~~~~~~~~~~~~~~~~ * Added faceted search using the `.facet()` method (Karl Hobley) * Added page type filtering and ordering to the Wagtail admin page search (Karl Hobley) * Added another valid AudioBoom oEmbed pattern (Bertrand Bordage) * Added `annotate_score` support to PostgreSQL search backend (Bertrand Bordage) * Pillow's image optimisation is now applied when saving PNG images (Dmitry Vasilev) * JS / CSS media files can now be associated with Draftail feature definitions (Matt Westcott) * The `{% slugurl %}` template tag is now site-aware (Samir Shah) * Added `file_size` field to documents (Karl Hobley) * Added `file_hash` field to images (Karl Hobley) * Update documentation (configuring Django for Wagtail) to contain all current settings options (Matt Westcott, LB (Ben Johnston)) * Added `defer` flag to `PageQuerySet.specific` (Karl Hobley) * Snippets can now be deleted from the listing view (LB (Ben Johnston)) * Increased max length of redirect URL field to 255 (Michael Harrison) * Added documentation for new JS/CSS media files association with Draftail feature definitions (Ed Henderson) * Added accessible colour contrast guidelines to the style guide (Catherine Farman) * Admin modal views no longer rely on JavaScript `eval()`, for better CSP compliance (Matt Westcott) * Update editor guide for embeds and documents in rich text (Kevin Howbrook) * Improved performance of sitemap generation (Michael van Tellingen, Bertrand Bordage) * Added an internal API for autocomplete (Karl Hobley, Bertrand Bordage) * Fix: Handle all exceptions from `Image.get_file_size` (Andrew Plummer) * Fix: Fix display of breadcrumbs in ModelAdmin (LB (Ben Johnston)) * Fix: Remove duplicate border radius of avatars (Benjamin Thurm) * Fix: Site.get_site_root_paths() preferring other sites over the default when some sites share the same root_page (Andy Babic) * Fix: Pages with missing model definitions no longer crash the API (Abdulmalik Abdulwahab) * Fix: Rich text image chooser no longer skips format selection after a validation error (Matt Westcott) * Fix: Null characters in URLs no longer crash the redirect middleware on PostgreSQL (Andrew Crewdson, Matt Westcott) * Fix: Permission checks no longer prevent a non-live page from being unscheduled (Abdulmalik Abdulwahab) * Fix: Copy-paste between Draftail editors now preserves all formatting/content (Thibaud Colas) * Fix: Fix alignment of checkboxes and radio buttons on Firefox (Matt Westcott) 2.1.3 (13.08.2018) ~~~~~~~~~~~~~~~~~~ * Fix: Pin Beautiful Soup to 4.6.0 due to further regressions in formatting empty elements (Matt Westcott) 2.1.2 (06.08.2018) ~~~~~~~~~~~~~~~~~~ * Fix: Bundle the l18n package to avoid installation issues on systems with a non-Unicode locale (Matt Westcott) * Fix: Mark Beautiful Soup 4.6.1 as incompatible due to bug in formatting empty elements (Matt Westcott) 2.1.1 (04.07.2018) ~~~~~~~~~~~~~~~~~~ * Fix: Site.get_site_root_paths() preferring other sites over the default when some sites share the same root_page (Andy Babic) * Fix: Rich text image chooser no longer skips format selection after a validation error (Matt Westcott) * Fix: Null characters in URLs no longer crash the redirect middleware on PostgreSQL (Matt Westcott) 2.1 (22.05.2018) ~~~~~~~~~~~~~~~~ * Add `HelpPanel` to add HTML within an edit form (Keving Chung) * Added direct profile picture upload to account preferences (Daniel Chimeno, Pierre Geier, Matt Westcott) * Added API endpoint for finding pages by HTML path (Karl Hobley) * Added time zone setting to account preferences (David Moore) * Added Elasticsearch 6 support (Karl Hobley) * Persist tab hash in URL to allow direct navigation to tabs in the admin interface (Ben Weatherman) * Animate the chevron icon when opening sub-menus in the admin (Carlo Ascani) * Look through the target link and target page slug (in addition to the old slug) when searching for redirects in the admin (Michael Harrison) * Remove support for IE6 to IE9 from project template (Samir Shah) * Remove outdated X-UA-Compatible meta from admin template (Thibaud Colas) * Add JavaScript source maps in production build for packaged Wagtail (Thibaud Colas) * Removed `assert` statements from Wagtail API (Kim Chee Leong) * Update `jquery-datetimepicker` dependency to make Wagtail more CSP-friendly (`unsafe-eval`) (Pomax) * Added error notification when running the `wagtail` command on Python <3.4 (Matt Westcott) * `update_index` management command now accepts a `--chunk_size` option to determine the number of items to load at once (Dave Bell) * Added hook `register_account_menu_item` to add new account preference items (Michael van Tellingen) * Added change email functionality from the account settings (Alejandro Garza, Alexs Mathilda) * Add request parameter to edit handlers (Rajeev J Sebastian) * ImageChooser now sets a default title based on filename (Coen van der Kamp) * Added error handling to the Draftail editor (Thibaud Colas) * Add new `wagtail_icon` template tag to facilitate making admin icons accessible (Sander Tuit) * Set `ALLOWED_HOSTS` in the project template to allow any host in development (Tom Dyson) * Expose reusable client-side code to build Draftail extensions (Thibaud Colas) * Added `WAGTAILFRONTENDCACHE_LANGUAGES` setting to specify the languages whose URLs are to be purged when using `i18n_patterns` (PyMan Claudio Marinozzi) * Added `extra_footer_actions` template blocks for customising the add/edit page views (Arthur Holzner) * Fix: Status button on 'edit page' now links to the correct URL when live and draft slug differ (LB (Ben Johnston)) * Fix: Image title text in the gallery and in the chooser now wraps for long filenames (LB (Ben Johnston), Luiz Boaretto) * Fix: Move image editor action buttons to the bottom of the form on mobile (Julian Gallo) * Fix: StreamField icons are now correctly sorted into groups on the 'append' menu (Tim Heap) * Fix: Draftail now supports features specified via the `WAGTAILADMIN_RICH_TEXT_EDITORS` setting (Todd Dembrey) * Fix: Password reset form no longer indicates whether the email is recognised, as per standard Django behaviour (Bertrand Bordage) * Fix: `UserAttributeSimilarityValidator` is now correctly enforced on user creation / editing forms (Tim Heap) * Fix: Focal area removal not working in IE11 and MS Edge (Thibaud Colas) * Fix: Rewrite password change feedback message to be more user-friendly (Casper Timmers) * Fix: Correct dropdown arrow styling in Firefox, IE11 (Janneke Janssen, Alexs Mathilda) * Fix: Password reset no indicates specific validation errors on certain password restrictions (Lucas Moeskops) * Fix: Confirmation page on page deletion now respects custom `get_admin_display_title` methods (Kim Chee Leong) * Fix: Adding external link with selected text now includes text in link chooser (Tony Yates, Thibaud Colas, Alexs Mathilda) * Fix: Editing setting object with no site configured no longer crashes (Harm Zeinstra) * Fix: Creating a new object with inlines while mandatory fields are empty no longer crashes (Bertrand Bordage) * Fix: Localization of image and apps verbose names * Fix: Draftail editor no longer crashes after deleting image/embed using DEL key (Thibaud Colas) * Fix: Breadcrumb navigation now respects custom `get_admin_display_title` methods (Arthur Holzner, Wietze Helmantel, Matt Westcott) * Fix: Inconsistent order of heading features when adding h1, h5 or h6 as default feature for Hallo RichText editor (Loic Teixeira) * Fix: Add invalid password reset link error message (Coen van der Kamp) * Fix: Bypass select/prefetch related optimisation on `update_index` for `ParentalManyToManyField` to fix crash (Tim Kamanin) * Fix: 'Add user' is now rendered as a button due to the use of quotes within translations (Benoît Vogel) * Fix: Menu icon no longer overlaps with title in Modeladmin on mobile (Coen van der Kamp) * Fix: Background color overflow within the Wagtail documentation (Sergey Fedoseev) * Fix: Page count on homepage summary panel now takes account of user permissions (Andy Chosak) * Fix: Explorer view now prevents navigating outside of the common ancestor of the user's permissions (Andy Chosak) * Fix: Generate URL for the current site when multiple sites share the same root page (Codie Roelf) * Fix: Restored ability to use non-model fields with FieldPanel (Matt Westcott, LB (Ben Johnston)) * Fix: Stop revision comparison view from crashing when non-model FieldPanels are in use (LB (Ben Johnston)) * Fix: Ordering in the page explorer now respects custom `get_admin_display_title` methods when sorting <100 pages (Matt Westcott) * Fix: Use index-specific Elasticsearch endpoints for bulk insertion, for compatibility with providers that lock down the root endpoint (Karl Hobley) * Fix: Fix usage URL on the document edit page (Jérôme Lebleu) 2.0.2 (13.08.2018) ~~~~~~~~~~~~~~~~~~ * Fix: Restored ability to use non-model fields with FieldPanel (Matt Westcott, LB (Ben Johnston)) * Fix: Fix usage URL on the document edit page (Jérôme Lebleu) * Fix: Pin Beautiful Soup to 4.6.0 due to further regressions in formatting empty elements (Matt Westcott) 2.0.1 (04.04.2018) ~~~~~~~~~~~~~~~~~~ * Added error notification when running the `wagtail` command on Python <3.4 (Matt Westcott) * Added error handling to the Draftail editor (Thibaud Colas) * Fix: Draftail now supports features specified via the `WAGTAILADMIN_RICH_TEXT_EDITORS` setting (Todd Dembrey) * Fix: Password reset form no longer indicates whether the email is recognised, as per standard Django behaviour (Bertrand Bordage) * Fix: `UserAttributeSimilarityValidator` is now correctly enforced on user creation / editing forms (Tim Heap) * Fix: Editing setting object with no site configured no longer crashes (Harm Zeinstra) * Fix: Creating a new object with inlines while mandatory fields are empty no longer crashes (Bertrand Bordage) 2.0 (28.02.2018) ~~~~~~~~~~~~~~~~ * Added support for Django 2.0 (Matt Westcott, Karl Hobley, LB (Ben Johnston), Mads Jensen) * Reorganised module paths (Karl Hobley, Matt Westcott) * Replaced the hallo.js rich text editor with Draftail (Thibaud Colas, Loïc Teixeira, Matt Westcott) * Removed support for Python 2.7, Django 1.8 and Django 1.10 * Removed support for Elasticsearch 1.x * Added the ability to schedule updates to existing published pages (Patrick Woods) * Moved Wagtail API v1 implementation (`wagtail.contrib.api`) to an external app (https://github.com/wagtail/wagtailapi_legacy) (Karl Hobley) * The page chooser now searches all fields of a page, instead of just the title (Bertrand Bordage) * Implement ordering by date in form submission view (LB (Ben Johnston)) * Elasticsearch scroll API is now used when fetching more than 100 search results (Karl Hobley) * Added hidden field to the form builder (Ross Crawford-d'Heureuse) * Usage count now shows on delete confirmation page when WAGTAIL_USAGE_COUNT_ENABLED is active (Kees Hink) * Added usage count to snippets (Kees Hink) * Moved usage count to the sidebar on the edit page (Kees Hink) * Explorer menu now reflects customisations to the page listing made via the `construct_explorer_page_queryset` hook and `ModelAdmin.exclude_from_explorer` property (Tim Heap) * "Choose another image" button changed to "Change image" to avoid ambiguity (Edd Baldry) * Added hooks `before_create_user`, `after_create_user`, `before_delete_user`, `after_delete_user`, `before_edit_user`, `after_edit_user` (Jon Carmack) * Added `exclude_fields_in_copy` property to Page to define fields that should not be included on page copy (LB (Ben Johnston)) * Improved error message on incorrect `{% image %}` tag syntax (LB (Ben Johnston)) * Optimised preview data storage (Bertrand Bordage) * Added `render_landing_page` method to `AbstractForm` to be easily overridden and pass `form_submission` to landing page context (Stein Strindhaug) * Added `heading` kwarg to `InlinePanel` to allow heading to be set independently of button label (Adrian Turjak) * The value type returned from a `StructBlock` can now be customised (LB (Ben Johnston)) * Added `bgcolor` image operation (Karl Hobley) * Added `WAGTAILADMIN_USER_LOGIN_FORM` setting for overriding the admin login form (Mike Dingjan) * Snippets now support custom primary keys (Sævar Öfjörð Magnússon) * Upgraded jQuery to version 3.2.1 (Janneke Janssen) * Updated documentation styling (LB (Ben Johnston)) * Rich text fields now take feature lists into account when whitelisting HTML elements (Matt Westcott) * FormPage lists and Form submission lists in admin now use class based views for easy overriding (Johan Arensman) * Form submission csv exports now have the export date in the filename and can be customised (Johan Arensman) * FormBuilder class now uses bound methods for field generation, adding custom fields is now easier and documented (LB (Ben) Johnston) * Added `WAGTAILADMIN_NOTIFICATION_INCLUDE_SUPERUSERS` setting to determine whether superusers are included in moderation email notifications (Bruno Alla) * Added a basic Dockerfile to the project template (Tom Dyson) * StreamField blocks now allow custom `get_template` methods for overriding templates in instances (Christopher Bledsoe) * Simplified edit handler API (Florent Osmont, Bertrand Bordage) * Made 'add/change/delete collection' permissions configurable from the group edit page (Matt Westcott) * Update autoprefixer configuration to better match browser support targets (Janneke Janssen) * Update React and related dependencies to latest versions (Janneke Janssen, Hugo van den Berg) * Remove Hallo editor `.richtext` CSS class in favour of more explicit extension points (Thibaud Colas) * Expose React-related dependencies as global variables for extension in the admin interface (Thibaud Colas) * Added helper functions for constructing form data for use with `assertCanCreate` (Tim Heap, Matt Westcott) * Fix: Do not remove stopwords when generating slugs from non-ASCII titles, to avoid issues with incorrect word boundaries (Sævar Öfjörð Magnússon) * Fix: The PostgreSQL search backend now preserves ordering of the `QuerySet` when searching with `order_by_relevance=False` (Bertrand Bordage) * Fix: Using `modeladmin_register` as a decorator no longer replaces the decorated class with `None` (Tim Heap) * Fix: Fixed crash in XML sitemap generator when all pages on the site are private (Stein Strindhaug) * Fix: The `{% routablepageurl %}` template tag no longer generates invalid URLs when the `WAGTAIL_APPEND_SLASH` setting was set to `False` (Venelin Stoykov) * Fix: The "View live" button is no longer shown if the page doesn't have a routable URL (Tim Heap) * Fix: Fixed rendering of border on dropdown arrow buttons on Chrome (Bertrand Bordage) * Fix: Fixed incorrect z-index on userbar causing it to appear behind page content (Stein Strindhaug) * Fix: Form submissions pagination no longer looses date filter when changing page (Bertrand Bordage) * Fix: PostgreSQL search backend now removes duplicate page instances from the database (Bertrand Bordage) * Fix: `FormSubmissionsPanel` now recognises custom form submission classes (LB (Ben Johnston)) * Fix: Prevent the footer and revisions link from unnecessarily collapsing on mobile (Jack Paine) * Fix: Empty searches were activated when paginating through images and documents (LB (Ben Johnston)) * Fix: Summary numbers of pages, images and documents were not responsive when greater than 4 digits (Michael Palmer) * Fix: Project template now has password validators enabled by default (Matt Westcott) * Fix: Alignment options correctly removed from `TableBlock` context menu (LB (Ben Johnston)) * Fix: Fix support of `ATOMIC_REBUILD` for projects with Elasticsearch client >=1.7.0 (Mikalai Radchuk) * Fix: Fixed error on Elasticsearch backend when passing a queryset as an `__in` filter (Karl Hobley, Matt Westcott) * Fix: `__isnull` filters no longer fail on Elasticsearch 5 (Karl Hobley) * Fix: Prevented intermittent failures on Postgres search backend when a field is defined as both a `SearchField` and a `FilterField` (Matt Westcott) * Fix: Alt text of images in rich text is no longer truncated on double-quote characters (Matt Westcott) * Fix: Ampersands in embed URLs within rich text are no longer double-escaped (Matt Westcott) * Fix: Using RGBA images no longer crashes with Pillow >= 4.2.0 (Karl Hobley) * Fix: Copying a page with PostgreSQL search enabled no longer crashes (Bertrand Bordage) * Fix: Style of the page unlock button was broken (Bertrand Bordage) * Fix: Admin search no longer floods browser history (Bertrand Bordage) * Fix: Version comparison now handles custom primary keys on inline models correctly (LB (Ben Johnston)) * Fix: Fixed error when inserting chooser panels into FieldRowPanel (Florent Osmont, Bertrand Bordage) * Fix: Reinstated missing error reporting on image upload (Matt Westcott) * Fix: Only load Hallo CSS if Hallo is in use (Thibaud Colas) * Fix: Prevent style leak of Wagtail panel icons in widgets using ``h2`` elements (THibaud Colas) 1.13.4 (13.08.2018) ~~~~~~~~~~~~~~~~~~~ * Fix: Pin Beautiful Soup to 4.6.0 due to further regressions in formatting empty elements (Matt Westcott) 1.13.3 (13.08.2018) ~~~~~~~~~~~~~~~~~~~ * Fix: Pin django-taggit to <0.23 to restore Django 1.8 compatibility (Matt Westcott) * Fix: Mark Beautiful Soup 4.6.1 as incompatible due to bug in formatting empty elements (Matt Westcott) 1.13.2 (04.07.2018) ~~~~~~~~~~~~~~~~~~~ * Fix: Fix support of `ATOMIC_REBUILD` for projects with Elasticsearch client >=1.7.0 (Mikalai Radchuk) * Fix: Logging an indexing failure on an object with a non-ASCII representation no longer crashes on Python 2 (Aram Dulyan) * Fix: Rich text image chooser no longer skips format selection after a validation error (Matt Westcott) * Fix: Null characters in URLs no longer crash the redirect middleware on PostgreSQL (Matt Westcott) 1.13.1 (17.11.2017) ~~~~~~~~~~~~~~~~~~~ * Fix: API listing views no longer fail when no site records are defined (Karl Hobley) * Fix: Fixed crash in XML sitemap generator when all pages on the site are private (Stein Strindhaug) * Fix: Fixed incorrect z-index on userbar causing it to appear behind page content (Stein Strindhaug) * Fix: Fixed error in Postgres search backend when searching specific fields of a specific() Page queryset (Bertrand Bordage, Matt Westcott) * Fix: Fixed error on Elasticsearch backend when passing a queryset as an `__in` filter (Karl Hobley, Matt Westcott) * Fix: `__isnull` filters no longer fail on Elasticsearch 5 (Karl Hobley) * Fix: Prevented intermittent failures on Postgres search backend when a field is defined as both a `SearchField` and a `FilterField` (Matt Westcott) 1.13 LTS (16.10.2017) ~~~~~~~~~~~~~~~~~~~~~ * Front-end cache invalidator now supports purging URLs as a batch (Karl Hobley) * Custom document model is now documented (Emily Horsman) * Use minified versions of CSS in the admin by adding minification to the front-end tooling (Vincent Audebert, Thibaud Colas) * Wagtailforms serve view now passes `request.FILES`, for use in custom form handlers (LB (Ben Johnston)) * Documents and images are now given new filenames on re-uploading, to avoid old versions being kept in cache (Bertrand Bordage) * Added custom 404 page for admin interface (Jack Paine) * Breadcrumb navigation now uses globe icon to indicate tree root, rather than home icon (Matt Westcott) * Updated React to 15.6.2 due to relicensing (Janneke Janssen) * User search in the Wagtail admin UI now works across multiple fields (Will Giddens) * `Page.last_published_at` is now a filterable field for search (Mikalai Radchuk) * Page search results and usage listings now include navigation links (Matt Westcott) * Fix: "Open Link in New Tab" on a right arrow in page explorer should open page list (Emily Horsman) * Fix: Using `order_by_relevance=False` when searching with PostgreSQL now works (Mitchel Cabuloy) * Fix: Inline panel first and last sorting arrows correctly hidden in non-default tabs (Matt Westcott) * Fix: `WAGTAILAPI_LIMIT_MAX` now accepts None to disable limiting (jcronyn) * Fix: In PostgreSQL, new default ordering when ranking of objects is the same (Bertrand Bordage) * Fix: Fixed overlapping header elements on form submissions view on mobile (Jack Paine) * Fix: Fixed avatar position in footer on mobile (Jack Paine) * Fix: Custom document models no longer require their own post-delete signal handler (Gordon Pendleton) * Fix: Deletion of image / document files now only happens when database transaction has completed (Gordon Pendleton) * Fix: Fixed Node build scripts to work on Windows (Mikalai Radchuk) * Fix: Stop breadcrumb home icon from showing as ellipsis in Chrome 60 (Matt Westcott) * Fix: Prevent `USE_THOUSAND_SEPARATOR = True` from breaking the image focal point chooser (Sævar Öfjörð Magnússon) * Fix: Removed deprecated `SessionAuthenticationMiddleware` from project template (Samir Shah) * Fix: Custom display page titles defined with `get_admin_display_title` are now shown in search results (Ben Sturmfels, Matt Westcott) * Fix: Custom PageManagers now return the correct PageQuerySet subclass (Matt Westcott) * Fix: API listing views no longer fail when no site records are defined (Karl Hobley) 1.12.6 (13.08.2018) ~~~~~~~~~~~~~~~~~~~ * Fix: Pin Beautiful Soup to 4.6.0 due to further regressions in formatting empty elements (Matt Westcott) 1.12.5 (13.08.2018) ~~~~~~~~~~~~~~~~~~~ * Fix: Pin django-taggit to <0.23 to restore Django 1.8 compatibility (Matt Westcott) * Fix: Mark Beautiful Soup 4.6.1 as incompatible due to bug in formatting empty elements (Matt Westcott) 1.12.4 (04.07.2018) ~~~~~~~~~~~~~~~~~~~ * Fix: Fix support of `ATOMIC_REBUILD` for projects with Elasticsearch client >=1.7.0 (Mikalai Radchuk) * Fix: Logging an indexing failure on an object with a non-ASCII representation no longer crashes on Python 2 (Aram Dulyan) * Fix: Rich text image chooser no longer skips format selection after a validation error (Matt Westcott) * Fix: Null characters in URLs no longer crash the redirect middleware on PostgreSQL (Matt Westcott) 1.12.3 (17.11.2017) ~~~~~~~~~~~~~~~~~~~ * Fix: API listing views no longer fail when no site records are defined (Karl Hobley) * Fix: Pinned Django REST Framework to <3.7 to restore Django 1.8 compatibility (Matt Westcott) * Fix: Fixed crash in XML sitemap generator when all pages on the site are private (Stein Strindhaug) * Fix: Fixed error in Postgres search backend when searching specific fields of a specific() Page queryset (Bertrand Bordage, Matt Westcott) * Fix: Fixed error on Elasticsearch backend when passing a queryset as an `__in` filter (Karl Hobley, Matt Westcott) * Fix: `__isnull` filters no longer fail on Elasticsearch 5 (Karl Hobley) * Fix: Prevented intermittent failures on Postgres search backend when a field is defined as both a `SearchField` and a `FilterField` (Matt Westcott) 1.12.2 (18.09.2017) ~~~~~~~~~~~~~~~~~~~ * Fix: Migration for addition of `Page.draft_title` field is now reversible (Venelin Stoykov) * Fix: Fixed failure on application startup when `ManifestStaticFilesStorage` is in use and `collectstatic` has not yet been run (Matt Westcott) * Fix: Fixed handling of Vimeo and other oEmbed providers with a format parameter in the endpoint URL (Mitchel Cabuloy) * Fix: Fixed regression in rendering save button in wagtail.contrib.settings edit view (Matt Westcott) 1.12.1 (30.08.2017) ~~~~~~~~~~~~~~~~~~~ * Fix: Prevent home page draft title from displaying as blank (Mikalai Radchuk, Matt Westcott) * Fix: Fix regression on styling of preview button with more than one preview mode (Jack Paine) * Fix: Enabled translations within date-time chooser widget (Lucas Moeskops) 1.12 LTS (21.08.2017) ~~~~~~~~~~~~~~~~~~~~~ * Ability to configure the feature set of rich text fields on a per-field basis (Matt Westcott) * New class-based configuration for media embeds (Karl Hobley) * The admin interface now displays a title of the latest draft (Mikalai Radchuk) * `RoutablePageMixin` now has a default "index" route (Andreas Nüßlein, Matt Westcott) * Added multi-select form field to the form builder (dwasyl) * Improved performance of sitemap generation (Levi Adler) * StreamField now respects the `blank` setting; StreamBlock accepts a `required` setting (Loic Teixeira) * StreamBlock now accepts `min_num`, `max_num` and `block_counts` settings to control the minimum and maximum numbers of blocks (Edwar Baron, Matt Westcott) * Users can no longer remove their own active / superuser flags through Settings -> Users (Stein Strindhaug, Huub Bouma) * The `process_form_submission` method of form pages now return the created form submission object (cho-leukeleu) * Added `WAGTAILUSERS_PASSWORD_ENABLED` and `WAGTAILUSERS_PASSWORD_REQUIRED` settings to permit creating users with no Django-side passwords, to support external authentication setups (Matt Westcott) * Added help text parameter to `DecimalBlock` and `RegexBlock` (Tomasz Knapik) * Optimised caudal oscillation parameters on logo (Jack Paine) * Fix: FieldBlocks in StreamField now call the field's `prepare_value` method (Tim Heap) * Fix: Initial disabled state of InlinePanel add button is now set correctly on non-default tabs (Matthew Downey) * Fix: Redirects with unicode characters now work (Rich Brennan) * Fix: Prevent explorer view from crashing when page model definitions are missing, allowing the offending pages to be deleted (Matt Westcott) * Fix: Hide the userbar from printed page representation (Eugene Morozov) * Fix: Prevent the page editor footer content from collapsing into two lines unnecessarily (Jack Paine) * Fix: StructBlock values no longer render HTML templates as their `str` representation, to prevent infinite loops in debugging / logging tools (Matt Westcott) * Fix: Removed deprecated jQuery ``load`` call from TableBlock initialisation (Jack Paine) * Fix: Position of options in mobile nav-menu (Jack Paine) * Fix: Center page editor footer regardless of screen width (Jack Paine) * Fix: Change the design of the navbar toggle icon so that it no longer obstructs page headers (Jack Paine) * Fix: Document add/edit forms no longer render container elements for hidden fields (Jeffrey Chau) 1.11.1 (07.07.2017) ~~~~~~~~~~~~~~~~~~~ * Fix: Custom display page titles defined with `get_admin_display_title` are now shown within the page explorer menu (Matt Westcott, Janneke Janssen) 1.11 (30.06.2017) ~~~~~~~~~~~~~~~~~ * Added a new page explorer menu built with the admin API and React (Karl Hobley, Josh Barr, Thibaud Colas, Janneke Janssen, Rob Moorman, Maurice Bartnig, Jonny Scholes, Matt Westcott, Sævar Öfjörð Magnússon, Eirikur Ingi Magnusson, Harris Lapiroff, Hugo van den Berg, Olly Willans, Andy Babic, Ben Enright, Bertrand Bordage) * Added privacy settings for documents (Ulrich Wagner, Matt Westcott) * Optimised page URL generation by caching site paths in the request scope (Tobias McNulty, Matt Westcott) * The current live version of a page is now tracked on the revision listing view (Matheus Bratfisch) * Each block created in a `StreamField` is now assigned a globally unique identifier (Matt Westcott) * Mixcloud oEmbed pattern has been updated (Alice Rose) * Added `last_published_at` field to the Page model (Matt Westcott) * Added `show_in_menus_default` flag on page models, to allow "show in menus" to be checked by default (LB (Ben Johnston)) * "Copy page" form now validates against copying to a destination where the user does not have permission (Henk-Jan van Hasselaar) * Allows reverse relations in `RelatedFields` for elasticsearch & PostgreSQL search backends (Lucas Moeskops, Bertrand Bordage) * Added oEmbed support for Facebook (Mikalai Radchuk) * Added oEmbed support for Tumblr (Mikalai Radchuk) * Fix: Unauthenticated AJAX requests to admin views now return 403 rather than redirecting to the login page (Karl Hobley) * Fix: `TableBlock` options `afterChange`, `afterCreateCol`, `afterCreateRow`, `afterRemoveCol`, `afterRemoveRow` and `contextMenu` can now be overridden (Loic Teixeira) * Fix: The lastmod field returned by wagtailsitemaps now shows the last published date rather than the date of the last draft edit (Matt Westcott) * Fix: Document chooser upload form no longer renders container elements for hidden fields (Jeffrey Chau) * Fix: Prevented exception when visiting a preview URL without initiating the preview (Paul Kamp) 1.10.1 (19.05.2017) ~~~~~~~~~~~~~~~~~~~ * Fix: Fix admin page preview that was broken 24 hours after previewing a page (Martin Hill) * Fix: Removed territory-specific translations for Spanish, Polish, Swedish, Russian and Chinese (Taiwan) that block more complete translations from being used (Matt Westcott) 1.10 (03.05.2017) ~~~~~~~~~~~~~~~~~ * Added PostgreSQL search engine (Bertrand Bordage, Jaap Roes, Arne de Laat, Ramon de Jezus) * Django 1.11 support (Tim Graham, Matt Westcott, Mikalai Radchuk, Bertrand Bordage) * Dropped Django 1.9 and Python 3.3 support; note that Django 1.8.x is still supported * Added user-preferred admin language along with `WAGTAILADMIN_PERMITTED_LANGUAGES` (Daniel Chimeno) * Added `WAGTAIL_AUTO_UPDATE_PREVIEW` setting that when set to `True`, allows the preview window to be refreshed when changes have been made in the editor (Bertrand Bordage) * Dropped support for generating static sites using django-medusa * Use minified versions of jQuery and jQuery UI in the admin. Total savings without compression 371 KB (Tom Dyson) * Hooks can now specify the order in which they are run (Gagaro) * Added a `submit_buttons` block to login template (Gagaro) * Added `construct_image_chooser_queryset`, `construct_document_chooser_queryset` and `construct_page_chooser_queryset` hooks (Gagaro) * The homepage created in the project template is now titled "Home" rather than "Homepage" (Karl Hobley) * Signal receivers for custom `Image` and `Rendition` models are connected automatically (Mike Dingjan) * `PageChooserBlock` can now accept a list/tuple of page models as `target_model` (Mikalai Radchuk) * Styling tweaks for the ModelAdmin's `IndexView` to be more inline with the Wagtail styleguide (Andy Babic) * Added `.nvmrc` to the project root for Node versioning support (Janneke Janssen) * Added `form_fields_exclude` property to ModelAdmin views (Matheus Bratfisch) * User creation / edit form now enforces password validators set in `AUTH_PASSWORD_VALIDATORS` (Bertrand Bordage) * Added support for showing `non_field_errors` when validation fails in the page editor (Matt Westcott) * Added `WAGTAILADMIN_RECENT_EDITS_LIMIT` setting to define the number of your most recent edits on the dashboard (Maarten Kling) * Creating / editing users through the Wagtail admin no longer modifies the `is_staff` flag (Matt Westcott) * Added link to the full Elasticsearch setup documentation from the Performance page (Matt Westcott) * Tag input fields now accept spaces in tags by default, and can be overridden with the `TAG_SPACES_ALLOWED` setting (Kees Hink, Alex Gleason) * Page chooser widgets now display the required page type where relevant (Christine Ho) * Site root pages are now indicated with a globe icon in the explorer listing (Nick Smith, Huub Bouma) * Draft page view is now restricted to users with edit / publish permission over the page (Kees Hink) * Added the option to delete a previously saved focal point on a image (Maarten Kling) * Page explorer menu item, search and summary panel are now hidden for users with no page permissions (Tim Heap) * Added support for custom date and datetime formats in input fields (Bojan Mihelac) * Added support for custom Django REST framework serialiser fields in `Page.api_fields` using a new `APIField` class (Karl Hobley) * Added `classname` argument to `StreamFieldPanel` (Christine Ho) * Added `group` keyword argument to StreamField blocks for grouping related blocks together in the block menu (Andreas Nüßlein) * Update the sitemap generator to use the Django sitemap module (Michael van Tellingen, Mike Dingjan) * Fix: Marked 'Date from' / 'Date to' strings in wagtailforms for translation (Vorlif) * Fix: "File" field label on image edit form is now translated (Stein Strindhaug) * Fix: Unreliable preview is now reliable by always opening in a new window (Kjartan Sverrisson) * Fix: Fixed placement of `{{ block.super }}` in `snippets/type_index.html` (LB (Ben Johnston)) * Fix: Optimised database queries on group edit page (Ashia Zawaduk) * Fix: Choosing a popular search term for promoted search results now works correctly after pagination (Janneke Janssen) * Fix: IDs used in tabbed interfaces are now namespaced to avoid collisions with other page elements (Janneke Janssen) * Fix: Page title not displaying page name when moving a page (Trent Holliday) * Fix: The ModelAdmin module can now work without the wagtailimages and wagtaildocs apps installed (Andy Babic) * Fix: Cloudflare error handling now handles non-string error responses correctly (hdnpl) * Fix: Search indexing now uses a defined query ordering to prevent objects from being skipped (Christian Peters) * Fix: Ensure that number localisation is not applied to object IDs within admin templates (Tom Hendrikx) * Fix: Paginating with a search present was always returning the 1st page in Internet Explorer 10 & 11 (Ralph Jacobs) * Fix: RoutablePageMixin and wagtailforms previews now set the `request.is_preview` flag (Wietze Helmantel) * Fix: The save and preview buttons in the page editor are now mobile-friendly (Maarten Kling) * Fix: Page links within rich text now respect custom URLs defined on specific page models (Gary Krige, Huub Bouma) * Fix: Default avatar no longer visible when using a transparent gravatar image (Thijs Kramer) * Fix: Scrolling within the datetime picker is now usable again for touchpads (Ralph Jacobs) * Fix: List-based fields within form builder form submissions are now displayed as comma-separated strings rather than as Python lists (Christine Ho, Matt Westcott) * Fix: The page type usage listing now have a translatable page title (Ramon de Jezus) * Fix: Styles for submission filtering form now have a consistent height. (Thijs Kramer) * Fix: Custom user models with a primary key type requiring `get_db_prep_value` conversion are now supported (thenewguy) * Fix: Slicing a search result set no longer loses the annotation added by `annotate_score` (Karl Hobley) * Fix: String-based primary keys are now escaped correctly in ModelAdmin URLs (Andreas Nüßlein) * Fix: Empty search in the API now works (Morgan Aubert) * Fix: `RichTextBlock` toolbar now correctly positioned within `StructBlock` (Janneke Janssen) * Fix: Fixed display of ManyToMany fields and False values on the ModelAdmin inspect view (Andy Babic) * Fix: Prevent pages from being recursively copied into themselves (Matheus Bratfisch) * Fix: Specifying the full file name in documents URL is mandatory (Morgan Aubert) * Fix: Reordering inline forms now works correctly when moving past a deleted form (Janneke Janssen) * Fix: Removed erroneous ``|safe`` filter from search results template in project template (Karl Hobley) 1.9.1 (21.04.2017) ~~~~~~~~~~~~~~~~~~ * Fix: Removed erroneous `|safe` filter from search results template in project template (Karl Hobley) * Fix: Prevent pages from being recursively copied into themselves (Matheus Bratfisch) 1.9 (16.02.2017) ~~~~~~~~~~~~~~~~ * Added support for comparing page revisions (Karl Hobley, Janneke Janssen, Matt Westcott) * Added support for many-to-many relations on page models (Thejaswi Puthraya, Matt Westcott) * Form builder form submissions can now be bulk-deleted (Karl Hobley) * `get_context` methods on StreamField blocks can now access variables from the parent context (Mikael Svensson, Peter Baumgartner) * Updated admin dashboard welcome message for multi-tenanted installations (Jeffrey Chau) * Changed text of "Draft" and "Live" buttons to "View draft" and "View live" (Dan Braghis) * Added `get_api_representation` method to streamfield blocks allowing the JSON representation in the API to be customised (Marco Fucci) * Added `before_copy_page` and `after_copy_page` hooks (Matheus Bratfisch) * View live / draft links in the admin now consistently open in a new window (Marco Fucci) * `ChoiceBlock` now omits the blank option if the block is required and has a default value (Andreas Nüßlein) * The `add_subpage` view now maintains a `next` URL parameter to specify where to redirect to after completing page creation (Robert Rollins) * The `wagtailforms` module now allows to define custom form submission model, add custom data to CSV export and some other customisations (Mikalai Radchuk) * The Webpack configuration is now in a subfolder, and uses env-specific configurations (Janneke Janssen, Thibaud Colas) * Added page titles to title text on action buttons in the explorer, for improved accessibility (Matt Westcott) * Fix: Help text for StreamField is now visible and does not cover block controls (Stein Strindhaug) * Fix: "X minutes ago" timestamps are now marked for translation (Janneke Janssen, Matt Westcott) * Fix: Avoid indexing unsaved field content on `save(update_fields=[...])` operations (Matt Westcott) * Fix: Corrected ordering of arguments passed to ModelAdmin `get_extra_class_names_for_field_col` / `get_extra_attrs_for_field_col` methods (Andy Babic) * `pageurl` / `slugurl` tags now function when request.site is not available (Tobias McNulty, Matt Westcott) 1.8.2 (21.04.2017) ~~~~~~~~~~~~~~~~~~ * Fix: Removed erroneous `|safe` filter from search results template in project template (Karl Hobley) * Fix: Avoid indexing unsaved field content on `save(update_fields=[...])` operations (Matt Westcott) * Fix: Prevent pages from being recursively copied into themselves (Matheus Bratfisch) 1.8.1 (26.01.2017) ~~~~~~~~~~~~~~~~~~ * Fix: Reduced `Rendition.focal_point_key` field length to prevent migration failure when upgrading to Wagtail 1.8 on MySQL with `utf8` character encoding (Andy Chosak, Matt Westcott) 1.8 LTS (15.12.2016) ~~~~~~~~~~~~~~~~~~~~ * New page privacy options (Shawn Makinson, Tom Miller, Luca Perico, Matt Westcott) * New 'bulk delete' permission type for deleting pages with children (Matt Westcott) * Elasticsearch 5 support (Karl Hobley) * Added support of a custom `edit_handler` in site settings (Axel Haustant) * Added `get_landing_page_template` getter method to `AbstractForm` (Gagaro) * Added `Page.get_admin_display_title` method to override how the title is displayed in the admin (Henk-Jan van Hasselaar) * Added support for specifying custom HTML attributes for table rows on ModelAdmin index pages (Andy Babic) * Added `first_common_ancestor` method to `PageQuerySet` (Tim Heap) * Page chooser now opens at the deepest ancestor page that covers all the pages of the required page type (Tim Heap) * `PageChooserBlock` now accepts a `target_model` option to specify the required page type (Tim Heap) * Modeladmin forms now respect `fields` / `exclude` options passed on custom model forms (Thejaswi Puthraya) * Added new StreamField block type `StaticBlock` (Benoît Vogel) * Added new StreamField block type `BlockQuoteBlock` (Scot Hacker) * Updated Cloudflare cache module to use the v4 API (Albert O'Connor) * Added `exclude_from_explorer` attribute to the `ModelAdmin` class to allow hiding instances of a page type from Wagtail's explorer views (Andy Babic) * Added `above_login`, `below_login`, `fields` and `login_form` customisation blocks to the login page template (Tim Heap) * `ChoiceBlock` now accepts a callable as the choices list (Mikalai Radchuk) * Redundant action buttons are now omitted from the root page in the explorer (Nick Smith) * Locked pages are now disabled from editing at the browser level (Edd Baldry) * Added `in_site` method for filtering page querysets to pages within the specified site (Chris Rogers) * Added the ability to override the default index settings for Elasticsearch (PyMan Claudio Marinozzi) * Extra options for the Elasticsearch constructor should be now defined with the new key `OPTIONS` of the `WAGTAILSEARCH_BACKENDS` setting (PyMan Claudio Marinozzi) * Breadcrumb in the page explorer is now restricted to the pages the user has permission over (Jeffrey Chau, Robert Rollins, Matt Westcott) * Fix: `AbstractForm` now respects custom `get_template` methods on the page model (Gagaro) * Fix: Use specific page model for the parent page in the explore index (Gagaro) * Fix: Remove responsive styles in embed when there is no ratio available (Gagaro) * Fix: Parent page link in page search modal no longer disappears on hover (Dan Braghis) * Fix: ModelAdmin views now consistently call `get_context_data` (Andy Babic) * Fix: Header for search results on the redirects index page now shows the correct count when the listing is paginated (Nick Smith) * Fix: `set_url_paths` management command is now compatible with Django 1.10 (Benjamin Bach) * Fix: Form builder email notifications now output multiple values correctly (Sævar Öfjörð Magnússon) * Fix: Closing 'more' dropdown on explorer no longer jumps to the top of the page (Ducky) * Fix: Users with only publish permission are no longer given implicit permission to delete pages (Matt Westcott) * Fix: `search_garbage_collect` management command now works when wagtailsearchpromotions is not installed (Morgan Aubert) * Fix: `wagtail.contrib.settings` context processor no longer fails when `request.site` is unavailable (Diederik van der Boor) * Fix: `TableBlock` content is now indexed for search (Morgan Aubert) * Fix: `Page.copy()` is now marked as `alters_data`, to prevent template code from triggering it (Diederik van der Boor) 1.7 (20.10.2016) ~~~~~~~~~~~~~~~~ * Elasticsearch 2 support (Karl Hobley) * Added parameters to image tag to specify file type and JPEG compression level (Karl Hobley) * Added support for AWS CloudFront in frontend cache invalidation module (Rob Moorman) * Unpublishing a page now gives the option to unpublish subpages too (Jordi Joan) * The ``|embed`` filter has been converted into a templatetag ``{% embed %}`` (Janneke Janssen) * The `wagtailforms` module now provides a `FormSubmissionPanel` for displaying details of form submissions (João Luiz Lorencetti) * The Wagtail version number can now be obtained as a tuple using `from wagtail import VERSION` (Tim Heap) * `send_mail` logic has been moved from `AbstractEmailForm.process_form_submission` into `AbstractEmailForm.send_mail`. Now it's easier to override this logic (Tim Leguijt) * Added `before_create_page`, `before_edit_page`, `before_delete_page` hooks (Karl Hobley) * Updated font sizes and colours to improve legibility of admin menu and buttons (Stein Strindhaug) * Added pagination to "choose destination" view when moving pages (Nick Smith, Žan Anderle) * Added ability to annotate search results with score (Karl Hobley) * Added ability to limit access to form submissions (Mikalai Radchuk) * Added the ability to configure the number of days search logs are kept for (Stephen Rice) * `SnippetChooserBlock` now supports passing the model name as a string (Nick Smith) * Redesigned account settings / logout area in the sidebar for better clarity (Janneke Janssen) * Pillow's image optimisation is now applied when saving JPEG images (Karl Hobley) * Fix: Migrations for wagtailcore and project template are now reversible (Benjamin Bach) * Fix: Migrations no longer depend on wagtailcore and taggit's `__latest__` migration, logically preventing those apps from receiving new migrations (Matt Westcott) * Fix: The default image format label text ('Full width', 'Left-aligned', 'Right-aligned') is now localised (Mikalai Radchuk) * Fix: Text on the front-end 'password required' form is now marked for translation (Janneke Janssen) * Fix: Text on the page view restriction form is now marked for translation (Luiz Boaretto) * Fix: Fixed toggle behaviour of userbar on mobile (Robert Rollins) * Fix: Image rendition / document file deletion now happens on a post_delete signal, so that files are not lost if the deletion does not proceed (Janneke Janssen) * Fix: "Your recent edits" list on dashboard no longer leaves out pages that another user has subsequently edited (Michael Cordover, Kees Hink, João Luiz Lorencetti) * Fix: `InlinePanel` now accepts a `classname` parameter as per the documentation (emg36, Matt Westcott) * Fix: Disabled use of escape key to revert content of rich text fields, which could cause accidental data loss (Matt Westcott) * Fix: Setting `USE_THOUSAND_SEPARATOR = True` no longer breaks the rendering of numbers in JS code for InlinePanel (Mattias Loverot, Matt Westcott) * Fix: Images / documents pagination now preserves GET parameters (Bojan Mihelac) * Fix: Wagtail's UserProfile model now sets a related_name of ``wagtail_userprofile`` to avoid naming collisions with other user profile models (Matt Westcott) * Fix: Non-text content is now preserved when adding or editing a link within rich text (Matt Westcott) * Fix: Fixed preview when `SECURE_SSL_REDIRECT = True` (Aymeric Augustin) * Fix: Prevent hang when truncating an image filename without an extension (Ricky Robinett) 1.6.3 (30.09.2016) ~~~~~~~~~~~~~~~~~~ * Fix: Restore compatibility with django-debug-toolbar 1.5 (Matt Westcott) * Fix: Edits to StreamFields are no longer ignored in page edits on Django >=1.10.1 when a default value exists (Matt Westcott) 1.6.2 (02.09.2016) ~~~~~~~~~~~~~~~~~~ * Fix: Initial values of checkboxes on group permission edit form now are visible on Django 1.10 (Matt Westcott) 1.6.1 (26.08.2016) ~~~~~~~~~~~~~~~~~~ * Added ``WAGTAIL_ALLOW_UNICODE_SLUGS`` setting to make Unicode support optional in page slugs (Matt Westcott) * Fix: Wagtail's middleware classes are now compatible with Django 1.10's new-style middleware (Karl Hobley) * Fix: The `Pages.can_create_at` method is now checked in the create page view (Mikalai Radchuk) * Fix: Fixed regression on Django 1.10.1 causing Page subclasses to fail to use PageManager (Matt Westcott) * Fix: ChoiceBlocks with lazy translations as option labels no longer break Elasticsearch indexing (Matt Westcott) * Fix: The page editor no longer fails to load JavaScript files with ``ManifestStaticFilesStorage`` (Matt Westcott) * Fix: Django 1.10 enables client-side validation for all forms by default, but it fails to handle all the nuances of how forms are used in Wagtail. The client-side validation has been disabled for the Wagtail UI (Matt Westcott) 1.6 (15.08.2016) ~~~~~~~~~~~~~~~~ * Django 1.10 support * Added the ``include_block`` template tag for improved StreamField template inclusion (Matt Westcott, Mikalai Radchuk) * Page slugs now allow unicode on Django >= 1.9 (Behzad Nategh) * Explorer sidebar menu now limits the displayed pages to the ones the user has permission for (Robert Rollins, Matt Westcott) * Image upload form in image chooser now performs client side validation so that the selected file is not lost in the submission (Jack Paine) * oEmbed URL for audioBoom was updated (Janneke Janssen) * Remember tree location in page chooser when switching between Internal / External / Email link (Matt Westcott) * `FieldRowPanel` now creates equal-width columns automatically if `col*` classnames are not specified (Chris Rogers) * Form builder now validates against multiple fields with the same name (Richard McMillan) * The 'choices' field on the form builder no longer has a maximum length (Johannes Spielmann) * Multiple ChooserBlocks inside a StreamField are now prefetched in bulk, for improved performance (Michael van Tellingen, Roel Bruggink, Matt Westcott) * Add new EmailBlock and IntegerBlock (Oktay Altay) * Added a new FloatBlock, DecimalBlock and a RegexBlock (Oktay Altay, Andy Babic) * Wagtail version number is now shown on the settings menu (Chris Rogers) * Added a system check to validate that fields listed in `search_fields` are defined on the model (Josh Schneier) * Added formal APIs for customising the display of StructBlock forms within the page editor (Matt Westcott) * `wagtailforms.models.AbstractEmailForm` now supports multiple email recipients (Serafeim Papastefanos) * Added ability to delete users through Settings -> Users (Vincent Audebert; thanks also to Ludolf Takens and Tobias Schmidt for alternative implementations) * Page previews now pass additional HTTP headers, to simulate the page being viewed by the logged-in user and avoid clashes with middleware (Robert Rollins) * Added back buttons to page delete and unpublish confirmation screens (Matt Westcott) * Recognise Flickr embed URLs using HTTPS (Danielle Madeley) * Success message when publishing a page now correctly respects custom URLs defined on the specific page class (Chris Darko) * Required blocks inside StreamField are now indicated with asterisks (Stephen Rice) * Fix: Email templates and document uploader now support custom `STATICFILES_STORAGE` (Jonny Scholes) * Fix: Removed alignment options (deprecated in HTML and not rendered by Wagtail) from `TableBlock` context menu (Moritz Pfeiffer) * Fix: Fixed incorrect CSS path on ModelAdmin's "choose a parent page" view * Fix: Prevent empty redirect by overnormalisation (Franklin Kingma, Ludolf Takens) * Fix: "Remove link" button in rich text editor didn't trigger "edit" event, leading to the change to sometimes not be persisted (Matt Westcott) * Fix: `RichText` values can now be correctly evaluated as booleans (Mike Dingjan, Bertrand Bordage) * Fix: wagtailforms no longer assumes an .html extension when determining the landing page template filename (kakulukia) * Fix: Fixed styling glitch on bi-colour icon + text buttons in Chrome (Janneke Janssen) * Fix: StreamField can now be used in an InlinePanel (Gagaro) * Fix: StreamField block renderings using templates no longer undergo double escaping when using Jinja2 (Aymeric Augustin) * Fix: RichText objects no longer undergo double escaping when using Jinja2 (Aymeric Augustin, Matt Westcott) * Fix: Saving a page by pressing enter key no longer triggers a "Changes may not be saved message" (Sean Muck, Matt Westcott) * Fix: RoutablePageMixin no longer breaks in the presence of instance-only attributes such as those generated by FileFields (Fábio Macêdo Mendes) * Fix: The `--schema-only` flag on update_index no longer expects an argument (Karl Hobley) * Fix: Added file handling to support custom user add/edit forms with images/files (Eraldo Energy) * Fix: Placeholder text in modeladmin search now uses the correct template variable (Adriaan Tijsseling) * Fix: Fixed bad SQL syntax for updating URL paths on Microsoft SQL Server (Jesse Legg) * Fix: Added workaround for Django 1.10 bug https://code.djangoproject.com/ticket/27037 causing forms with file upload fields to fail validation (Matt Westcott) 1.5.3 (18.07.2016) ~~~~~~~~~~~~~~~~~~ * Fix: Pin html5lib to version 0.999999 to prevent breakage caused by internal API changes (Liam Brenner) 1.5.2 (08.06.2016) ~~~~~~~~~~~~~~~~~~ * Fixed regression in 1.5.1 on editing external links (Stephen Rice) 1.5.1 (07.06.2016) ~~~~~~~~~~~~~~~~~~ * Fix: When editing a document link in rich text, the document ID is no longer erroneously interpreted as a page ID (Stephen Rice) * Fix: Removing embedded media from rich text by mouse click action now gets correctly registered as a change to the field (Loic Teixeira) * Fix: Rich text editor is no longer broken in InlinePanels (Matt Westcott, Gagaro) * Fix: Rich text editor is no longer broken in settings (Matt Westcott) * Fix: Link tooltip now shows correct urls for newly inserted document links (Matt Westcott) * Fix: Now page chooser (in a rich text editor) opens up at the link's parent page, rather than at the page itself (Matt Westcott) * Fix: Reverted fix for explorer menu scrolling with page content, as it blocked access to menus that exceed screen height * Fix: Image listing in the image chooser no longer becomes unpaginated after an invalid upload form submission (Stephen Rice) * Fix: Applied correct translation tags for 'permanent' / 'temporary' labels on redirects (Matt Westcott) 1.5 (31.05.2016) ~~~~~~~~~~~~~~~~ * Added wagtail.contrib.modeladmin, an app for configuring arbitrary Django models to be edited through the Wagtail admin (Andy Babic) * Added TableBlock, a StreamField block for table-based content (Moritz Pfeiffer, David Seddon, Brad Busenius) * The "dynamic serve view" for images has been greatly improved. See release notes for details * Moved lesser-user actions in the page explorer into a 'More' dropdown * Added a hook `register_page_listing_buttons` for adding action buttons to the page explorer * Added the ability to edit existing links in the rich text editor (Loic Teixeira) * Rich text fields now show link destinations as tooltips (Loic Teixeira) * Password reset email now reminds the user of their username (Matt Westcott) * Added 'revisions' action to pages list (Roel Bruggink) * Added jinja2 support for the ``settings`` template tag (Tim Heap) * Added a hook `insert_global_admin_js` for inserting custom JavaScript throughout the admin backend (Tom Dyson) * Recognise instagram embed URLs with `www` prefix (Matt Westcott) * The type of the ``search_fields`` attribute on ``Page`` models (and other searchable models) has changed from a tuple to a list (Tim Heap) * Use `PasswordChangeForm` when user changes their password, requiring the user to enter their current password (Matthijs Melissen) * Highlight current day in date picker (Jonas Lergell) * Eliminated the deprecated `register.assignment_tag` on Django 1.9 (Josh Schneier) * Increased size of Save button on site settings (Liam Brenner) * Optimised Site.find_for_request to only perform one database query (Matthew Downey) * Notification messages on creating / editing sites now include the site name if specified (Chris Rogers) * Added `--schema-only` option to `update_index` management command * Added meaningful default icons to `StreamField` blocks (Benjamin Bach) * Added title text to action buttons in the page explorer (Liam Brenner) * Changed project template to explicitly import development settings via `settings.dev` (Tomas Olander) * Improved L10N and I18N for revisions list (Roel Bruggink) * The multiple image uploader now displays details of server errors (Nigel Fletton) * Added `WAGTAIL_APPEND_SLASH` setting to determine whether page URLs end in a trailing slash (Andrew Tork Baker) * Added auto resizing text field, richtext field, and snippet chooser to styleguide (Liam Brenner) * Support field widget media inside `StreamBlock` blocks (Karl Hobley) * Spinner was added to Save button on site settings (Liam Brenner) * Added success message after logout from Admin (Liam Brenner) * Added `get_upload_to` method to `AbstractRendition` which, when overridden, allows control over where image renditions are stored (Rob Moggach and Matt Westcott) * Added a mechanism to customise the add / edit user forms for custom user models (Nigel Fletton) * Added internal provision for swapping in alternative rich text editors (Karl Hobley) * Fix: The currently selected day is now highlighted only in the correct month in date pickers (Jonas Lergell) * Fix: Fixed crash when an image without a source file was resized with the "dynamic serve view" * Fix: Registered settings admin menu items now show active correctly (Matthew Downey) * Fix: Direct usage of `Document` model replaced with `get_document_model` function in `wagtail.contrib.wagtailmedusa` and in `wagtail.contrib.wagtailapi` * Fix: Failures on sending moderation notification emails now produce a warning, rather than crashing the admin page outright (Matt Fozard) * Fix: All admin forms that could potentially include file upload fields now specify `multipart/form-data` where appropriate (Tim Heap) * Fix: REM units in Wagtailuserbar caused incorrect spacing (Vincent Audebert) * Fix: Explorer menu no longer scrolls with page content (Vincent Audebert) * Fix: `decorate_urlpatterns` now uses `functools.update_wrapper` to keep view names and docstrings (Mario César) * Fix: StreamField block controls are no longer hidden by the StreamField menu when prepending a new block (Vincent Audebert) * Fix: Removed invalid use of `__` alias that prevented strings getting picked up for translation (Juha Yrjölä) * Fix: Routable pages without a main view no longer raise a `TypeError` (Bojan Mihelac) * Fix: Fixed UnicodeEncodeError in wagtailforms when downloading a CSV for a form containing non-ASCII field labels on Python 2 (Mikalai Radchuk) * Fix: Server errors during search indexing on creating / updating / deleting a model are now logged, rather than causing the overall operation to fail (Karl Hobley) * Fix: Objects are now correctly removed from search indexes on deletion (Karl Hobley) * Fix: Confirmation message on the ModelAdmin delete view no longer errors if the model's string representation depends on the primary key (Yannick Chabbert) 1.4.6 (18.07.2016) ~~~~~~~~~~~~~~~~~~ * Fix: Pin html5lib to version 0.999999 to prevent breakage caused by internal API changes (Liam Brenner) 1.4.5 (19.05.2016) ~~~~~~~~~~~~~~~~~~ * Fix: Paste / drag operations done entirely with the mouse are now correctly picked up as edits within the rich text editor (Matt Fozard) * Fix: Logic for cancelling the "unsaved changes" check on form submission has been fixed to work cross-browser (Stephen Rice) * Fix: The "unsaved changes" confirmation was erroneously shown on IE / Firefox when previewing a page with validation errors (Matt Westcott) * Fix: The up / down / delete controls on the "Promoted search results" form no longer trigger a form submission (Matt Westcott) * Fix: Opening preview window no longer performs user-agent sniffing, and now works correctly on IE11 (Matt Westcott) * Fix: Tree paths are now correctly assigned when previewing a newly-created page underneath a parent with deleted children (Matt Westcott) * Fix: Added BASE_URL setting back to project template * Fix: Clearing the search box in the page chooser now returns the user to the browse view (Matt Westcott) * Fix: The above fix also fixed an issue where Internet Explorer got stuck in the search view upon opening the page chooser (Matt Westcott) 1.4.4 (10.05.2016) ~~~~~~~~~~~~~~~~~~ * New translation for Slovenian (Mitja Pagon) * Fix: The `wagtailuserbar` template tag now gracefully handles situations where the `request` object is not in the template context (Matt Westcott) * Fix: Meta classes on StreamField blocks now handle multiple inheritance correctly (Tim Heap) * Fix: Now user can upload images / documents only into permitted collection from choosers * Fix: Keyboard shortcuts for save / preview on the page editor no longer incorrectly trigger the "unsaved changes" message (Jack Paine, Matt Westcott) * Fix: Redirects no longer fail when both a site-specific and generic redirect exist for the same URL path (Nick Smith, João Luiz Lorencetti) * Fix: Wagtail now checks that Group is registered with the Django admin before unregistering it (Jason Morrison) * Fix: Previewing inaccessible pages no longer fails with `ALLOWED_HOSTS = ['*']` (Robert Rollins) * Fix: The submit button 'spinner' no longer activates if the form has client-side validation errors (Jack Paine, Matt Westcott) * Fix: Overriding `MESSAGE_TAGS` in project settings no longer causes messages in the Wagtail admin to lose their styling (Tim Heap) * Fix: Border added around explorer menu to stop it blending in with StreamField block listing; also fixes invisible explorer menu in Firefox 46 (Alex Gleason) 1.4.3 (04.04.2016) ~~~~~~~~~~~~~~~~~~ * Fixed regression introduced in 1.4.2 which caused Wagtail to query the database during a system check (Tim Heap) 1.4.2 (31.03.2016) ~~~~~~~~~~~~~~~~~~ * Fix: Streamfields no longer break on validation error * Fix: Number of validation errors in each tab in the editor is now correctly reported again * Fix: Userbar now opens on devices with both touch and mouse (Josh Barr) * Fix: `wagtail.wagtailadmin.wagtail_hooks` no longer calls `static` during app load, so you can use `ManifestStaticFilesStorage` without calling the `collectstatic` command * Fix: Fixed crash on page save when a custom `Page` edit handler has been specified using the `edit_handler` attribute (Tim Heap) 1.4.1 (17.03.2016) ~~~~~~~~~~~~~~~~~~ * Fix: Fixed erroneous rendering of up arrow icons (Rob Moorman) 1.4 LTS (16.03.2016) ~~~~~~~~~~~~~~~~~~~~ * Added support for viewing previous revisions of pages, and previewing or rolling back to earlier versions * Introduced collections, for image / document organisation * The Wagtail userbar on the frontend has been redesigned, and no longer depends on an iframe (Thomas Winter, Gareth Price). * The page editor now produces a warning if the user navigates away without saving changes * 'Add document' interface now supports uploading multiple documents at once * The `Document` model can now be overridden using the new `WAGTAILDOCS_DOCUMENT_MODEL` setting (Alex Gleason) * Wagtail no longer depends on django-compressor * The page search interface now searches all fields instead of just the title (Kait Crawford) * Snippets now support a custom `edit_handler` property (Mikalai Radchuk) * Date/time pickers now respect the locale's 'first day of week' setting (Peter Quade) * Refactored the way forms are constructed for the page editor, to allow custom forms to be used * Notification message on publish now indicates whether the page is being published now or scheduled for publication in future (Chris Rogers) * Server errors when uploading images / documents through the chooser modal are now reported back to the user (Nigel Fletton) * Added a hook `insert_global_admin_css` for inserting custom CSS throughout the admin backend (Tom Dyson) * Added a hook `construct_explorer_page_queryset` for customising the set of pages displayed in the page explorer * Page models now perform field validation, including testing slugs for uniqueness within a parent page, at the model level on saving * Page slugs are now auto-generated at the model level on page creation if one has not been specified explicitly * The `Page` model now has two new methods `get_site()` and `get_url_parts()` to aid with customising the page URL generation logic * Upgraded jQuery to 2.2.1 (Charlie Choiniere) * Multiple homepage summary items (`construct_homepage_summary_items` hook) now better vertically spaced (Nicolas Kuttler) * Email notifications can now be sent in HTML format (Mike Dingjan) * `StreamBlock` now has provision for throwing non-field-specific validation errors * Wagtail now works with Willow 0.3, which supports auto-correcting the orientation of images based on EXIF data * New translations for Hungarian, Swedish (Sweden) and Turkish * Fix: Custom page managers no longer raise an error when used on an abstract model * Fix: Wagtail's migrations are now all reversible (Benjamin Bach) * Fix: Deleting a page content type now preserves existing pages as basic Page instances, to prevent tree corruption * Fix: The `Page.path` field is now explicitly given the "C" collation on PostgreSQL to prevent tree ordering issues when using a database created with the Slovak locale * Fix: Wagtail's compiled static assets are now put into the correct directory on Windows (Aarni Koskela) * Fix: `ChooserBlock` now correctly handles models with primary keys other than `id` (alexpilot11) * Fix: Fixed typo in Wistia oEmbed pattern (Josh Hurd) * Fix: Added more accurate help text for the Administrator flag on user accounts (Matt Fozard) * Fix: Tags added on the multiple image uploader are now saved correctly * Fix: Documents created by a user are no longer deleted when the user is deleted * Fix: Fixed a crash in `RedirectMiddleware` when a middleware class before `SiteMiddleware` returns a response (Josh Schneier) * Fix: Fixed error retrieving the moderator list on pages that are covered by multiple moderator permission records (Matt Fozard) * Fix: Ordering pages in the explorer by reverse 'last updated' time now puts pages with no revisions at the top * Fix: WagtailTestUtils now works correctly on custom user models without a ``username`` field (Adam Bolfik) * Fix: Logging in to the admin as a user with valid credentials but no admin access permission now displays an error message, rather than rejecting the user silently * Fix: StreamBlock HTML rendering now handles non-ASCII characters correctly on Python 2 (Mikalai Radchuk) * Fix: Fixed a bug preventing pages with a OneToOneField from being copied (Liam Brenner) * Fix: SASS compilation errors during Wagtail development no longer cause exit of Gulp process, instead throws error to console and continues (Thomas Winter) * Fix: Explorer page listing now uses specific page models, so that custom URL schemes defined on Page subclasses are respected * Fix: Made settings menu clickable again in Firefox 46.0a2 (Juha Kujala) * Fix: User management index view no longer assumes the presence of `username`, `first_name`, `last_name` and `email` fields on the user model (Eirik Krogstad) 1.3.1 (05.01.2016) ~~~~~~~~~~~~~~~~~~ * Fix: Applied workaround for failing wagtailimages migration on Django 1.8.8 / 1.9.1 with Postgres (see ) 1.3 (23.12.2015) ~~~~~~~~~~~~~~~~ * Django 1.9 support * Support for indexing fields across relations in Elasticsearch * Added toolbar to cross-link between different search areas, and `register_admin_search_area` hook to register new areas (Ben Kerle) * Added `WagtailPageTests`, a helper module to simplify writing tests for Wagtail sites * Added system checks to check the `subpage_types` and `parent_page_types` attributes of page models * Added `WAGTAIL_PASSWORD_RESET_ENABLED` setting to allow password resets to be disabled independently of the password management interface (John Draper) * Submit for moderation notification emails now include the editor name (Denis Voskvitsov) * Updated fonts for more comprehensive Unicode support * Added `.alt` attribute to image renditions * The default `src`, `width`, `height` and `alt` attributes can now be overridden by attributes passed to the `{% image %}` tag * Added keyboard shortcuts for preview and save in the page editor * Added `Page` methods `can_exist_under`, `can_create_at`, `can_move_to` for customising page type business rules * `wagtailadmin.utils.send_mail` now passes extra keyword arguments to Django's `send_mail` function (Matthew Downey) * `page_unpublish` signal is now fired for each page that was unpublished by a call to `PageQuerySet.unpublish()` * Add `get_upload_to` method to `AbstractImage`, to allow overriding the default image upload path (Ben Emery) * Notification emails are now sent per user (Matthew Downey) * Added the ability to override the default manager on Page models * Added an optional human-friendly `site_name` field to sites (Timo Rieber) * Added a system check to warn developers who use a custom Wagtail build but forgot to build the admin css * Added success message after updating image from the image upload view (Christian Peters) * Added a `request.is_preview` variable for templates to distinguish between previewing and live (Denis Voskvitsov) * Added support for chaining multiple image operations on the `{% image %}` tag (Christian Peters) * New translations for Arabic, Latvian and Slovak * 'Pages' link on site stats dashboard now links to the site homepage when only one site exists, rather than the root level * Fix: Images and page revisions created by a user are no longer deleted when the user is deleted (Rich Atkinson) * Fix: HTTP cache purge now works again on Python 2 (Mitchel Cabuloy) * Fix: Locked pages can no longer be unpublished (Alex Bridge) * Fix: Site records now implement `get_by_natural_key` * Fix: Creating pages at the root level (and any other instances of the base `Page` model) now properly respects the `parent_page_types` setting * Fix: Settings menu now opens correctly from the page editor and styleguide views * Fix: `subpage_types` / `parent_page_types` business rules are now enforced when moving pages * Fix: Multi-word tags on images and documents are now correctly preserved as a single tag (LKozlowski) * Fix: Changed verbose names to start with lower case where necessary (Maris Serzans) * Fix: Invalid images no longer crash the image listing (Maris Serzans) * Fix: `MenuItem` `url` parameter can now take a lazy URL (Adon Metcalfe, rayrayndwiga) * Fix: Added missing translation tag to InlinePanel 'Add' button (jnns) * Fix: Added missing translation tag to 'Signing in...' button text (Eugene MechanisM) * Fix: Restored correct highlighting behaviour of rich text toolbar buttons * Fix: Rendering a missing image through ImageChooserBlock no longer breaks the whole page (Christian Peters) * Fix: Filtering by popular tag in the image chooser now works when using the database search backend 1.2 (12.11.2015) ~~~~~~~~~~~~~~~~ * Added `wagtail.contrib.settings`, a module to allow administrators to edit site-specific settings * Core templatetags (pageurl, image, wagtailuserbar, etc) are now compatible with Jinja2 * Redirects can now be created for specific sites * The Page.get_latest_revision_as_page method now returns the live page object if there are no draft changes to the page * Image and document models now provide a `search` method on their QuerySets * Search methods now accept an `operator` argument to determine whether multiple terms are ORed or ANDed together * Search methods now accept an `order_by_relevance` argument, which can be set to False to preserve the original QuerySet ordering * InlinePanel now accepts `max_num` and `min_num` arguments to limit the number of inline items * 'Add' button on inline panels is disabled when `max_num` is reached (Salvador Faria) * StreamField blocks now provide a `get_context` method for passing additional variables to the block template * Wagtail API now incorporates the browsable front-end provided by Django REST Framework * Python 3.5 support * WagtailRedirectMiddleware can now ignore the query string if there is no redirect that exactly matches it (Michael Cordover) * Order of URL parameters now ignored by redirect middleware (Michael Cordover) * Added SQL Server compatibility to image migration (Timothy Allen) * Added classnames to Wagtail rich text editor buttons to aid custom styling (Rob Shelton) * Simplified body_class in default homepage template (Josh Barr) * page_published signal now called with the revision object that was published (Josh Barr) * Added an overridable favicon to the admin interface * Added spinner animations to long-running form submissions * The EMBEDLY_KEY setting has been renamed to WAGTAILEMBEDS_EMBEDLY_KEY (Anurag Sharma) * StreamField blocks are now added automatically, without showing the block types menu, if only one block type exists (Alex Gleason) * Wagtail admin now standardises on a single thumbnail image size, to reduce the overhead of creating multiple renditions * The `first_published_at` and `latest_revision_created_at` fields on page models are now available as filter fields on search queries * Rich text fields now strip out HTML comments * Page editor form now sets enctype="multipart/form-data" as appropriate, allowing FileField to be used on page models (Petr Vacha) * Explorer navigation menu on a completely empty page tree now takes you to the root level, rather than doing nothing * Added animation and fixed display issues when focusing a rich text field (Alex Gleason) * Added a system check to warn if Pillow is compiled without JPEG / PNG support * Page chooser now prevents users from selecting the root node where this would be invalid * New translations for Dutch (Netherlands), Georgian, Swedish and Turkish (Turkey) * Fix: Page slugs are no longer auto-updated from the page title if the page is already published * Fix: Deleting a page permission from the groups admin UI does not immediately submit the form * Fix: Wagtail userbar is shown on pages that do not pass a `page` variable to the template (e.g. because they override the `serve` method) * Fix: request.site now set correctly on page preview when the page is not in the default site * Fix: Project template no longer raises a deprecation warning (Maximilian Stauss) * Fix: `PageManager.sibling_of(page)` and `PageManager.not_sibling_of(page)` now default to inclusive (i.e. `page` is considered a sibling of itself), for consistency with other sibling methods * Fix: The "view live" button displayed after publishing a page now correctly reflects any changes made to the page slug (Ryan Pineo) * Fix: API endpoints now accept and ignore the `_` query parameter used by jQuery for cache-busting * Fix: Page slugs are no longer cut off when Unicode characters are expanded into multiple characters (Sævar Öfjörð Magnússon) * Fix: Searching a specific page model while filtering it by either ID or tree position no longer raises an error (Ashia Zawaduk) * Fix: Scrolling an over-long explorer menu no longer causes white background to show through (Alex Gleason) * Fix: Removed jitter when hovering over StreamField blocks (Alex Gleason) * Fix: Non-ASCII email addresses no longer throw errors when generating Gravatar URLs (Denis Voskvitsov, Kyle Stratis) * Fix: Dropdowns for ForeignKeys are now styled consistently (Ashia Zawaduk) * Fix: Date choosers now appear on top of StreamField menus (Sergey Nikitin) * Fix: Fixed a migration error that was raised when block-updating from 0.8 to 1.1+ * Fix: Page copy no longer breaks on models with a ClusterTaggableManager or ManyToManyField * Fix: Validation errors when inserting an embed into a rich text area are now reported back to the editor 1.1 (15.09.2015) ~~~~~~~~~~~~~~~~ * Implemented the `specific()` method on PageQuerySet, to return pages as their most specific type * "Promoted search results" has moved into its own module * Elasticsearch backend now supports an experimental `ATOMIC_REBUILD` flag to keep the existing index available while the `update_index` task is running * The wagtailapi module has been refactored to use Django REST Framework (Tom Christie) * A number of permissions fixes have been made to the Wagtail admin interface. See release notes for a list of specific changes made. * Snippets that inherit from `wagtail.wagtailsearch.index.Indexed` now appear as searchable within the Wagtail admin * Implemented deletion of form submissions (Kyungil Choi) * Implemented pagination in the page chooser modal * Changed INSTALLED_APPS in project template to list apps in precedence order (Piet Delport) * The `{% image %}` tag now supports filters on the image variable, e.g. `{% image primary_img|default:secondary_img width-500 %}` * Moved the style guide menu item into the Settings sub-menu * Search backends can now be specified by module (e.g. `wagtail.wagtailsearch.backends.elasticsearch`), rather than a specific class (`wagtail.wagtailsearch.backends.elasticsearch.ElasticSearch`) * Added ``descendant_of`` filter to the API (Michael Fillier) * Added optional directory argument to "wagtail start" command (Mitchel Cabuloy) * Non-superusers can now view/edit/delete sites if they have the correct permissions * Image file size is now stored in the database, to avoid unnecessary filesystem lookups * Page URL lookups hit the cache/database less often (Michael van Tellingen) * Updated URLs within the admin backend to use namespaces * The `update_index` task now indexes objects in batches of 1000, to indicate progress and avoid excessive memory use * Added database indexes on PageRevision and Image to improve performance on large sites * Search in page chooser now uses Wagtail's search framework, to order results by relevance * `PageChooserPanel` now supports passing a list (or tuple) of accepted page types * The snippet type parameter of `SnippetChooserPanel` can now be omitted, or passed as a model name string rather than a model class (Joss Ingram) * Added aliases for the `self` template variable to accommodate Jinja as a templating engine: `page` for pages, `field_panel` for field panels / edit handlers, and `value` for blocks * Added signposting text to the explorer to steer editors away from creating pages at the root level unless they are setting up new sites * "Clear choice" and "Edit this page" buttons are no longer shown on the page field of the group page permissions form * Altered styling of stream controls to be more like all other buttons * Added ability to mark page models as not available for creation using the flag `is_creatable`; pages that are abstract Django models are automatically made non-creatable * New translations for Norwegian Bokmål and Icelandic * Fix: Text areas in the non-default tab of the page editor now resize to the correct height * Fix: Tabs in "insert link" modal in the rich text editor no longer disappear (Tim Heap) * Fix: H2 elements in rich text fields were accidentally given a click() binding when put insite a collapsible multi field panel * Fix: The wagtailimages module is now compatible with remote storage backends that do not allow reopening closed files * Fix: Search no longer crashes when auto-indexing a model that doesn't have an id field (Scot Hacker) * Fix: The `wagtailfrontendcache` module's HTTP backend has been rewritten to reliably direct requests to the configured cache hostname * Fix: Resizing single pixel images with the "fill" filter no longer raises `ZeroDivisionError` or "tile cannot extend outside image" * Fix: The queryset returned from `search` operations when using the database search backend now correctly preserves additional properties of the original query, such as `prefetch_related` / `select_related` * Fix: Responses from the external image URL generator are correctly marked as streaming and will no longer fail when used with Django's cache middleware * Fix: Page copy now works with pages that use multiple inheritance (Jordi Joan) * Fix: Form builder pages now pick up template variables defined in the `get_context` method (Christoph Lipp) * Fix: When copying a page, IDs of child objects within page revision records were not remapped to the new objects; this would cause those objects to be lost from the original page when editing the new one * Fix: Newly added redirects now take effect on all sites, rather than just the site that the Wagtail admin backend was accessed through * Fix: Add user form no longer throws a hard error on validation failure 1.0 (16.07.2015) ~~~~~~~~~~~~~~~~ * Added StreamField, a model field for freeform page content * Added Wagtail API, a module for creating a RESTful API for your content * MySQL support * Django 1.8 support * Removed dependency on libsass (Tim Heap) * Users without usernames can now be created and edited in the admin interface (Tim Heap) * Added update notifications * JavaScript includes in the admin backend have been moved to the HTML header, to accommodate form widgets that render inline scripts that depend on libraries such as jQuery * Improvements to the layout of the admin menu footer. * Menu items of custom apps are now highlighted when being used (Josh Barr) * Added thousands separator for counters on dashboard * Added contextual links to admin notification messages * When copying pages, it is now possible to specify a place to copy to (Timo Rieber) * FieldPanel now accepts an optional 'widget' parameter to override the field's default form widget (Alejandro Giacometti) * Page URL paths can now be longer than 255 characters * Dropped Django 1.6 support * Dropped Python 2.6 and 3.2 support * Dropped Elasticsearch 0.90.x support * Serving documents will now use django-sendfile if it's configured (Jordi Joan) * Documents are now served with correct mime-type (Jordi Joan, Damian Moore) * Support for If-Modified-Since HTTP header (Jordi Joan) * Search view accepts "page" GET parameter in line with pagination * Reversing `django.contrib.auth.admin.login` will no longer lead to Wagtails login view (making it easier to have front end views) * Removed dependency on `LOGIN_URL` and `LOGIN_REDIRECT_URL` settings * Password reset view names namespaced to wagtailadmin * Removed the need to add permission check on admin views (now automated) * Added cache-control headers to all admin views * Page model fields without a FieldPanel are no longer displayed in the form * No longer need to specify the base model on InlinePanel definitions * The project template Vagrantfile now listens on port 8000 * The external link chooser in rich text areas now accepts URLs of the form '/some/local/path', to allow linking to non-Wagtail-controlled URLs within the local site (Eric Drechsel) * SCSS files in wagtailadmin now use absolute imports, to permit overriding by user stylesheets (Martin Sanders) * Bare text entered in rich text areas is now automatically wrapped in a paragraph element * Added pagination to the snippets listing and chooser (Martin Sanders) * Page / document / image / snippet choosers now include a link to edit the chosen item * The `document_served` signal now correctly passes the Document class as `sender` and the document as `instance` * Image/Document edit page no longer throws OSError when the original image is missing * Page classes can specify an edit_handler property to override the default Content / Promote / Settings tabbed interface * The Page model now records the date/time that a page was first published, as the field `first_published_at` * Increased the maximum length of a page slug from 50 to 255 characters * Plain text fields in the page editor now use auto-expanding text areas * Date / time pickers now consistently use times without seconds, to prevent JavaScript behaviour glitches when focusing / unfocusing fields * Added hooks `register_rich_text_embed_handler` and `register_rich_text_link_handler` for customising link / embed handling within rich text fields * Added hook `construct_homepage_summary_items` for customising the site summary panel on the admin homepage * No longer automatically tries to use Celery for sending notification emails * Added "Add child page" button to admin userbar (Eric Drechsel) * Renamed the `construct_wagtail_edit_bird` hook to `construct_wagtail_userbar` * 'static' template tags are now used throughout the admin templates, in place of STATIC_URL * Added a new decorator-based syntax for RoutablePage, compatible with Django 1.8 * Collapsible blocks stay open on any form error (Salvador Faria) * Document upload modal no longer switches tabs on form errors (Salvador Faria) * Added `AUTO_UPDATE` flag to search backend settings to enable/disable automatically updating the search index on model changes * Made the built-in project template follow the Django one, with several Wagtail-specific additions. The template comes with two apps (home and search) * `with_metaclass` is now imported from Django's bundled copy of the `six` library, to avoid errors on Mac OS X from an outdated system copy of the library being imported * Added new translations for Croatian and Finnish 0.8.10 (16.09.2015) ~~~~~~~~~~~~~~~~~~~ * Fix: When copying a page, IDs of child objects within page revision records were not remapped to the new objects; this would cause those objects to be lost from the original page when editing the new one * Fix: Search no longer crashes when auto-indexing a model that doesn't have an id field (Scot Hacker) * Fix: Resizing single pixel images with the "fill" filter no longer raises `ZeroDivisionError` or "tile cannot extend outside image" 0.8.9 (16.09.2015) ~~~~~~~~~~~~~~~~~~ [release withdrawn due to packaging issues] 0.8.8 (18.06.2015) ~~~~~~~~~~~~~~~~~~ * Fix: Formbuilder no longer raises TypeError when submitting unchecked boolean field (Arne Schauf) * Fix: Image upload form no longer breaks when using i10n thousand separators (@signalkraft) * Fix: Multiple image uploader now escapes HTML in filenames (Mac Chapman) * Fix: Retrieving an individual item from a sliced BaseSearchResults object now properly takes the slice offset into account * Fix: Removed dependency on unicodecsv which fixes a crash on Python 3 * Fix: Submitting unicode text in form builder form no longer crashes with UnicodeEncodeError on Python 2 * Fix: Creating a proxy model from a Page class no longer crashes in the system check (Nar Chhantyal) * Fix: Unrecognised embed URLs passed to the |embed filter no longer cause the whole page to crash with an EmbedNotFoundException * Fix: Underscores no longer get stripped from page slugs 0.8.7 (29.04.2015) ~~~~~~~~~~~~~~~~~~ * Fix: wagtailfrontendcache no longer tries to purge pages that are not in a site * Fix: The contents of

elements in the rich text editor were not being whitelisted * Fix: Due to the above issue, embeds/images in a rich text field would sometimes be saved into the database in their editor representation * Fix: RoutablePage now prevents subpage_urls from being defined as a property, which would cause a memory leak * Fix: Added validation to prevent pages being created with only whitespace characters in their title fields (Frank Wiles) * Fix: Prevent logout on changing password when SessionAuthenticationMiddleware is in use * Fix: Work around a Python / Django issue that prevented documents with certain non-ASCII filenames from being served 0.8.6 (10.03.2015) ~~~~~~~~~~~~~~~~~~ * Translations updated, including new translations for Czech, Italian and Japanese * The "fixtree" command can now delete orphaned pages * Fix: django-taggit library updated to 0.12.3, to fix a bug with migrations on SQLite on Django 1.7.2 and above (https://github.com/alex/django-taggit/issues/285) * Fix: Fixed a bug that caused children of a deleted page to not be deleted if they had a different type 0.8.5 (17.02.2015) ~~~~~~~~~~~~~~~~~~ * Fix: On adding a new page, the available page types are ordered by the displayed verbose name * Fix: Active admin submenus were not properly closed when activating another * Fix: get_sitemap_urls is now called on the specific page class so it can now be overridden (Jerel Unruh) * Fix: (Firefox and IE) Fixed preview window hanging and not refocusing when "Preview" button is clicked again * Fix: Storage backends that return raw ContentFile objects are now handled correctly when resizing images (@georgewhewell) * Fix: Punctuation characters are no longer stripped when performing search queries * Fix: When adding tags where there were none before, it is now possible to save a single tag with multiple words in it * Fix: richtext template tag no longer raises TypeError if None is passed into it (Alejandro Varas) * Fix: Serving documents now uses a streaming HTTP response and will no longer break Django's cache middleware * Fix: User admin area no longer fails in the presence of negative user IDs (as used by django-guardian's default settings) * Fix: Password reset emails now use the ``BASE_URL`` setting for the reset URL * Fix: BASE_URL is now included in the project template's default settings file 0.8.4 (04.12.2014) ~~~~~~~~~~~~~~~~~~ * Fix: It is no longer possible to have the explorer and settings menu open at the same time * Fix: Page IDs in page revisions were not updated on page copy, causing subsequent edits to be committed to the original page instead * Fix: Copying a page now creates a new page revision, ensuring that changes to the title/slug are correctly reflected in the editor (and also ensuring that the user performing the copy is logged) * Fix: Prevent a race condition when creating Filter objects 0.8.3 (18.11.2014) ~~~~~~~~~~~~~~~~~~ * Fix: Added missing jQuery UI sprite files, causing collectstatic to throw errors (most reported on Heroku) * Fix: Page system check for on_delete actions of ForeignKeys was throwing false positives when page class decends from an abstract class (Alejandro Giacometti) * Fix: Page system check for on_delete actions of ForeignKeys now only raises warnings, not errors * Fixed a regression where form builder submissions containing a number field would fail with a JSON serialisation error * Fix: Resizing an image with a focal point equal to the image size would result in a divide-by-zero error * Fix: Focal point indicator would sometimes be positioned incorrectly for small or thin images * Fix: Focal point chooser background colour changed to grey to make working with transparent images easier * Fix: Elasticsearch configuration now supports specifying HTTP authentication parameters as part of the URL, and defaults to ports 80 (HTTP) and 443 (HTTPS) if port number not specified * Fixed a TypeError when previewing pages that use RoutablePageMixin * Fix: Rendering image with missing file in rich text no longer crashes the entire page * Fix: IOErrors thrown by underlying image libraries that are not reporting a missing image file are no longer caught * Fix: Minimum Pillow version bumped to 2.6.1 to work around a crash when using images with transparency * Fix: Images with transparency are now handled better when being used in feature detection 0.8.2 (18.11.2014) ~~~~~~~~~~~~~~~~~~ [release withdrawn due to packaging issues] 0.8.1 (05.11.2014) ~~~~~~~~~~~~~~~~~~ * Fixed a regression where images would fail to save when feature detection is active 0.8 LTS (05.11.2014) ~~~~~~~~~~~~~~~~~~~~ * Added logging for page operations * The save button on the page edit page now redirects the user back to the edit page instead of the explorer * Signal handlers for ``wagtail.wagtailsearch`` and ``wagtail.contrib.wagtailfrontendcache`` are now automatically registered when using Django 1.7 or above. (Tim Heap) * Added a Django 1.7 system check to ensure that foreign keys from Page models are set to on_delete=SET_NULL, to prevent inadvertent (and tree-breaking) page deletions * Improved error reporting on image upload, including ability to set a maximum file size via a new setting WAGTAILIMAGES_MAX_UPLOAD_SIZE * The external image URL generator now keeps persistent image renditions, rather than regenerating them on each request, so it no longer requires a front-end cache * Added Dutch translation * Fix: Replaced references of .username with .get_username() on users for better custom user model support (John-Scott Atlakson) * Fix: Unpinned dependency versions for six and requests to help prevent dependency conflicts * Fix: Fixed TypeError when getting embed HTML with oembed on Python 3 (John-Scott Atlakson) * Fix: Made HTML whitelisting in rich text fields more robust at catching disallowed URL schemes such as "jav\tascript:" (Tim Heap) * Fix: created_at timestamps on page revisions were not being preserved on page copy, causing revisions to get out of sequence * Fix: When copying pages recursively, revisions of sub-pages were being copied regardless of the copy_revisions flag * Fix: Updated the migration dependencies within the project template to ensure that Wagtail's own migrations consistently apply first. * Fix: The cache of site root paths is now cleared when a site is deleted. * Fix: Search indexing now prevents pages from being indexed multiple times, as both the base Page model and the specific subclass * Fix: Search indexing now avoids trying to index abstract models * Fix: Fixed references to "username" in login form help text for better custom user model support (John-Scott Atlakson) * Fix: Later items in a model's search_field list now consistently override earlier items, allowing subclasses to redefine rules from the parent * Fix: Image uploader now accepts JPEG images that PIL reports as being in MPO format * Fix: Multiple checkbox fields on form-builder forms did not correctly save multiple values * Fix: Editing a page's slug and saving it without publishing could sometimes cause the URL paths of child pages to be corrupted * Fix: 'latest_revision_created_at' was being cleared on page publish, causing the page to drop to the bottom of explorer listings * Fix: Searches on partial_match fields were wrongly applying prefix analysis to the search query as well as the document (causing e.g. a query for "water" to match against "wagtail") 0.7 (09.10.2014) ~~~~~~~~~~~~~~~~ * Added interface for choosing focal point on images * Redesigned and reorganised navigation menu to include a 'Settings' submenu * Added Groups administration area * Added Sites administration area * Added the ability to lock a page to (temporarily) prevent edits to that page * Removed 'content_type' template filter from the project template, as the same thing can be accomplished with self.get_verbose_name|slugify * Page copy operations now also copy the page revision history * Page models now support a 'parent_page_types' property in addition to 'subpage types', to restrict the types of page they can be created under * 'register_snippet' can now be invoked as a decorator * Project template updated to Django 1.7 * 'boost' applied to the title field on searches reduced from 100 to 2 * The 'type' method of PageQuerySet (used to filter the queryset to a specific page type) now includes subclasses of the given page type. * The 'update_index' management command now updates all backends listed in WAGTAILSEARCH_BACKENDS, or a specific one passed on the command line, rather than just the default backend * The 'fill' image resize method now supports an additional parameter defining the closeness of the crop * Added support for invalidating Cloudflare caches * Pages in the explorer can now be ordered by last updated time * Fix: 'wagtail start' command now works on Windows * Fix: The external image URL generator no longer stores generated images in Django's cache * Fix: Elasticsearch backend can now search querysets that have been filtered with an 'in' clause of a non-list type (such as a ValuesListQuerySet) * Fix: Logic around the has_unpublished_changes flag has been fixed, to prevent issues with the 'View draft' button failing to show in some cases * Fix: It is now easier to move pages to the beginning and end of their section * Fix: Image rendering no longer creates erroneous duplicate Rendition records when the focal point is blank. 0.6 (11.09.2014) ~~~~~~~~~~~~~~~~ * Added 'wagtail start' command and project template * Added Django 1.7 support * Added {% routablepageurl %} template tag (Tim Heap) * Added RoutablePageMixin (Tim Heap) * MenuItems can now have bundled JavaScript * Added the register_admin_menu_item hook for registering menu items at startup * Added version indicator to the admin interface * Renamed wagtailsearch.indexed to wagtailsearch.index * Added Russian translation * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' (Nathan Brizendine) * Fix: Search results in the page chooser now respect the page_type parameter on PageChooserPanel * Fix: Rendition filenames are now prevented from going over 60 chars, even with a large focal_point_key * Fix: Child relations that are defined on a model's superclass (such as the base Page model) are now picked up correctly by the page editing form, page copy operations and the replace_text management command * Fix: (For Django 1.7 support) Do not import South when using Django 1.7 (thenewguy) * Fix: Tags on images and documents are now committed to the search index immediately on saving 0.5 (01.08.2014) ~~~~~~~~~~~~~~~~ * Added multiple image uploader * Added support for face and feature detection on images using the OpenCV library * Added RoutablePage model to allow embedding Django-style URL routing within a page * Added image/document/snippet usage stats * Explorer nav now rendered separately and fetched with AJAX when needed * Added decorator syntax for hooks * Replaced lxml dependency with html5lib, to simplify installation * Added page_unpublished signal * Added mechanism to obtain external URLs to images, at any size * Added Copy Page action to the explorer * Fix: Updates to tag fields are now properly committed to the database when publishing directly from the page edit interface 0.4.1 (14.07.2014) ~~~~~~~~~~~~~~~~~~ * ElasticSearch backend now respects the backward-compatible URLS configuration setting, in addition to HOSTS * Documentation fixes 0.4 (10.07.2014) ~~~~~~~~~~~~~~~~ * ElasticUtils/pyelasticsearch swapped for elasticsearch-py * Python 3.2, 3.3 and 3.4 support * Added scheduled publishing * Added support for private (password-protected) pages * Added frontend cache invalidator * Added sitemap generator * Added notification preferences * Added a new way to configure searchable/filterable fields on models * Added 'original' as a resizing rule supported by the 'image' tag * Hallo.js updated to version 1.0.4 * Snippets are now ordered alphabetically * Removed the "More" section from the admin menu * Added pagination to page listings in admin * Support for setting a subpage_types property on page models, to define which page types are allowed as subpages * Added a new datetime picker widget * Added styleguide (mainly for wagtail developers) * Aesthetic improvements to preview experience * 'image' tag now accepts extra keyword arguments to be output as attributes on the `` tag * Login screen redirects to dashboard if user is already logged in * Renamed some template tag libraries * Any extra arguments given to serve are now passed through to get_context and get_template * Added an 'attrs' property to image rendition objects to output src, width, height and alt attributes all in one go * Added 'construct_whitelister_element_rules' hook for customising the HTML whitelist used when saving rich text fields * Added 'in_menu' and 'not_in_menu' methods to PageQuerySet * Added 'get_next_siblings' and 'get_prev_siblings' to Page * Added init_new_page signal * Added page_published signal * Added copy method to Page to allow copying of pages * Added ``search`` method to ``PageQuerySet`` * Added ``get_indexed_objects`` allowing developers to customise which objects get added to the search index * Major refactor of Elasticsearch backend * Use ``match`` instead of ``query_string`` queries * Fields are now indexed in Elasticsearch with their correct type * Filter fields are no longer included in '_all' (in Elasticsearch) * Fields with partial matching are now indexed together into '_partials' * Fix: Animated GIFs are now coalesced before resizing * Fix: Wand backend clones images before modifying them * Fix: Admin breadcrumb now positioned correctly on mobile * Fix: Page chooser breadcrumb now updates the chooser modal instead of linking to Explorer * Fix: Embeds - Fixed crash when no HTML field is sent back from the embed provider * Fix: Multiple sites with same hostname but different ports are now allowed * Fix: No longer possible to create multiple sites with is_default_site = True 0.3.1 (03.06.2014) ~~~~~~~~~~~~~~~~~~ * Fix: When constructing dummy requests for pages with no routable URL, fall back on a hostname from ALLOWED_HOSTS and finally 'localhost', to avoid 'Invalid HTTP_HOST header' errors on preview when DEBUG=False. * Fix: Ensure that url_path is populated when previewing a newly created page, to avoid unnecessarily taking the above fallback. * Fix: Deleting an item from an InlinePanel, then generating a validation error on saving, no longer causes the deleted item to confusingly reappear with an error of its own. 0.3 (28.05.2014) ~~~~~~~~~~~~~~~~ * Added toolbar to allow logged-in users to add and edit pages from the site front-end * Support for alternative image processing backends such as Wand, via the WAGTAILIMAGES_BACKENDS setting * Added support for generating static sites using django-medusa * Added custom Query set for Pages with some handy methods for querying pages * Added 'wagtailforms' module for creating form pages on a site, and handling form submissions * Editor's guide documentation * Expanded developer documentation * Editor interface now outputs form media CSS / JS, to support custom widgets with assets * Migrations and user management now correctly handle custom AUTH_USER_MODEL settings * Added 'slugurl' template tag to output the URL of a page with a given slug * MultiFieldPanel definitions now accept a 'classname' attribute, including a special classname of 'collapsible' to allow showing / hiding them on click * Added 'insert_editor_css' and 'insert_editor_js' hooks for passing in custom CSS / JS to the editor interface * Made JPEG compression level configurable through the IMAGE_COMPRESSION_QUALITY setting, and increased default to 85 * Added document_served signal which gets fired when a document is downloaded * Added translations for Portuguese Brazil and Traditional Chinese (Taiwan). * Made compatible with Python 2.6 * 'richtext' template filter now wraps output in
, to assist in styling * Embeds now save author_name and provider_name if set by oEmbed provider * Fix: non-ASCII characters in image filenames are now converted into ASCII equivalents rather than becoming all underscores * Fix: paths to fonts and images within CSS are no longer hard-coded to /static/ * Fix: Localization files for the JQuery UI datepicker are stored locally and only imported when a localization is known to be available * Fix: Page slugs are now validated on page edit * Fix: Filter objects are cached to avoid a database hit every time an {% image %} tag is compiled * Fix: Moving or changing a site root page no longer causes URLs for subpages to change to 'None' * Fix: Eliminated raw SQL queries from wagtailcore / wagtailadmin, to ensure cross-database compatibility * Fix: Snippets menu item is hidden for administrators if no snippet types are defined * Fix: 'Upload' tab in image chooser now retains focus if submit action returns a form error. * Fix: Search input now appears on image chooser after form validation error. 0.2 (11.03.2014) ~~~~~~~~~~~~~~~~ * SQLite support added * Internationalisation of the admin backend * Translations for Bulgarian, Catalan, Chinese, Galician, German, Greek, Polish, Romanian and Spanish. Partial translations for Basque and Mongolian. * Stylesheets ported from Less to Sass, to eliminate dependency on an external CSS compiler * Coffeescript replaced by vanilla JavaScript * OEmbed supported as an alternative backend for wagtailembeds, eliminating dependency on Embedly * Database supported as an alternative search backend, eliminating dependency on ElasticSearch * Background tasks now fall back on in-process handling if Celery is not available (also eliminating Redis as a dependency) * Users decoupled from Django default user model, to allow custom user models * Added explicit 'Can access Wagtail admin' permission, rather than treating all logged-in users as Wagtail users * Date fields now work with USE_L10N=True * "Your most recent edits" only shows the latest edit per page * Unified search view configurable in urls.py * Support for searching within a subtree * Added initial documentation * Added Ubuntu / Debian installation scripts * Extensive tests and test runner infrastructure * Numerous bugfixes 0.1 (07.02.2014) ~~~~~~~~~~~~~~~~ * Initial release.