12 KiB
Wagtail 2.17 release notes - IN DEVELOPMENT
---
local:
depth: 1
---
What's new
Page editor redesign
Here are other changes related to the redesign:
- Switch the Wagtail branding font to a system font stack (Steven Steinwand)
- 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)
Removal of special-purpose field panel types
The panel types StreamFieldPanel, RichTextFieldPanel, ImageChooserPanel, DocumentChooserPanel and SnippetChooserPanel have been phased out, and can now be replaced with FieldPanel. Additionally, PageChooserPanel is only required when passing a page_type or can_choose_root, and can otherwise be replaced with FieldPanel. In all cases, FieldPanel will now automatically select the most appropriate form element. This feature was developed by Matt Westcott.
Permission-dependent FieldPanels
FieldPanel now accepts a permission keyword argument to specify that the field should only be available to users with a given permission level. This feature was developed by Matt Westcott and sponsored by Google as part of Wagtail's page editor redevelopment.
Other features
- 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)
- 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)
- Replace
content_jsonTextFieldwithcontentJSONFieldinPageRevision(Sage Abdullah) - Remove
replace_textmanagement command (Sage Abdullah) - Replace
data_jsonTextFieldwithdataJSONFieldinBaseLogEntry(Sage Abdullah) - 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 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-visiblefor cross-browser consistency (Paarth Agarwal) - Migrate multiple documentation pages from RST to MD (Vibhakar Solanki, LB (Ben Johnston))
- Add documentation for defining custom form validation on models used in Wagtail's
modelAdmin(Serafeim Papastefanos) - Update
README.mdlogo 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-Sinceheader insendfile_streaming_backendwhich 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)
Bug fixes
- Update django-treebeard dependency to 4.5.1 or above (Serafeim Papastefanos)
- When using
simple_translationsensure that the user is redirected to the page edit view when submitting for a single locale (Mitchel Cabuloy) - When previewing unsaved changes to
Formpages, ensure that all added fields are correctly shown in the preview (Joshua Munn) - When Documents (e.g. PDFs) have been configured to be served inline via
WAGTAILDOCS_CONTENT_TYPES&WAGTAILDOCS_INLINE_CONTENT_TYPESensure that the filename is correctly set in theContent-Dispositionheader so that saving the files will use the correct filename (John-Scott Atlakson) - Improve the contrast of the “Remember me” checkbox against the login page’s background (Steven Steinwand)
- Group permission rows with custom permissions no longer have extra padding (Steven Steinwand)
- Make sure the focus outline of checkboxes is fully around the outer border (Steven Steinwand)
- Consistently set
aria-haspopup="menu"for all sidebar menu items that have sub-menus (LB (Ben Johnston)) - Make sure
aria-expandedis always explicitly set as a string in sidebar (LB (Ben Johnston)) - Use a button element instead of a link for page explorer menu item, for the correct semantics and behavior (LB (Ben Johnston))
- Make sure the “Title” column label can be translated in the page chooser and page move UI (Stephanie Cheng Smith)
- Remove redundant
role="main"attributes on<main>elements causing HTML validation issues (Luis Espinoza)
Upgrade considerations
Changes to module paths
Various modules of Wagtail have been reorganised, and imports should be updated as follows:
- All modules under
wagtail.corecan now be found underwagtail- for example,from wagtail.core.models import Pageshould be changed tofrom wagtail.models import Page - The
wagtail.testsmodule is renamed towagtail.test wagtail.admin.edit_handlersis renamed towagtail.admin.panelswagtail.contrib.forms.edit_handlersis renamed towagtail.contrib.forms.panels
These changes can be applied automatically to your project codebase by running the following commands from the project root:
wagtail updatemodulepaths --list # list the files to be changed without updating them
wagtail updatemodulepaths --diff # show the changes to be made, without updating files
wagtail updatemodulepaths # actually update the files
Removed warning in Internet Explorer (IE11)
- IE11 support was officially dropped in Wagtail 2.15, as of this release there will no longer be a warning shown to users of this browser.
- Wagtail is fully compatible with Microsoft Edge, Microsoft’s replacement for Internet Explorer. You may consider using its
IE mode <https://docs.microsoft.com/en-us/deployedge/edge-ie-mode>_ to keep access to IE11-only sites, while other sites and apps like Wagtail can leverage modern browser capabilities.
Replaced content_json TextField with content JSONField in PageRevision
- The
content_jsonfield in thePageRevisionmodel has been renamed tocontent. - The field now internally uses
JSONFieldinstead ofTextField. - If you have a large number of
PageRevisionobjects, running the migrations might take a while.
Replaced data_json TextField with data JSONField in BaseLogEntry
- The
data_jsonfield in theBaseLogEntrymodel has been renamed todata. - The field now internally uses
JSONFieldinstead ofTextField. - The default empty value for the field has been changed from
""to{}. - This change also affects
BaseLogEntrysubclasses, i.e.PageLogEntryandModelLogEntry. - If you have a large number of objects for these models, running the migrations might take a while.
Hallo legacy rich text editor has moved to an external package
- Hallo was deprecated in Wagtail v2.0 (February 2018) and has had only a minimal level of support since then.
- If you still require Hallo for your Wagtail installation, you will need to install the Wagtail Hallo editor legacy package.
- We encourage all users of the Hallo editor to take steps to migrate to the new Draftail editor as this external package is unlikely to have ongoing maintenance.
window.registerHalloPluginwill no longer be created on the page editor load, unless the legacy package is installed.
API changes to panels (EditHandlers)
Various changes have been made to the internal API for defining panel types, previously known as edit handlers. As noted above, the module wagtail.admin.edit_handlers has been renamed to wagtail.admin.panels, and wagtail.contrib.forms.edit_handlers is renamed to wagtail.contrib.forms.panels.
Additionally, the base wagtail.admin.edit_handlers.EditHandler class has been renamed to wagtail.admin.panels.Panel, and wagtail.admin.edit_handlers.BaseCompositeEditHandler has been renamed to wagtail.admin.panels.PanelGroup.
Template paths have also been renamed accordingly - templates previously within wagtailadmin/edit_handlers/ are now located under wagtailadmin/panels/, and wagtailforms/edit_handlers/form_responses_panel.html is now at wagtailforms/panels/form_responses_panel.html.
Where possible, third-party packages that implement their own field panel types should be updated to allow using a plain FieldPanel instead, in line with Wagtail dropping its own special-purpose field panel types such as StreamFieldPanel and ImageChooserPanel. The steps for doing this will depend on the package's functionality, but in general:
- If the panel sets a custom template, your code should instead define a
Widgetclass that produces your desired HTML rendering. - If the panel provides a
widget_overridesmethod, your code should instead callregister_form_field_overrideso that the desired widget is always selected for the relevant model field type. - If the panel provides a
get_comparison_classmethod, your code should instead callwagtail.admin.compare.register_comparison_classto register the comparison class against the relevant model field type.
Within the Panel class, the methods widget_overrides, required_fields and required_formsets have been deprecated in favour of a new get_form_options method that returns a dict of configuration options to be passed on to the generated form class:
- Panels that define
required_fieldsshould instead return this value as afieldsitem in the dict returned fromget_form_options - Panels that define
required_formsetsshould instead return this value as aformsetsitem in the dict returned fromget_form_options - Panels that define
widget_overridesshould instead return this value as awidgetsitem in the dict returned fromget_form_options
The template context for panels derived from BaseChooserPanel has changed. BaseChooserPanel is deprecated and now functionally identical to FieldPanel; as a result, the context variable is_chosen, and the variable name given by the panel's object_type_name property, are no longer available on the template. The only available variables are now field and show_add_comment_button. If your template depends on these additional variables, you will need to pass them explicitly by overriding the render_as_field method.
ModelAdmin forms must subclass WagtailAdminModelForm
When overriding the get_form_class method of a ModelAdmin CreateView or EditView to pass a custom form class, that form class must now inherit from wagtail.admin.forms.models.WagtailAdminModelForm. Passing a plain Django ModelForm subclass is no longer valid.
Removed the size argument of the undocumented wagtail.utils.sendfile_streaming_backend.was_modified_since function
- The
sizeargument was used to add alengthparameter to the HTTP header. - This was never part of the HTTP/1.0 and HTTP/1.1 specifications see RFC7232 and existed only as a an unofficial implementation in IE browsers.