# Wagtail 2.17 release notes - IN DEVELOPMENT ```{contents} --- 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) ### 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. ### Other features * Upgrade ESLint and Stylelint configurations to latest shared Wagtail configs (Thibaud Colas) * 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_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) * 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) ### Bug fixes * Update django-treebeard dependency to 4.5.1 or above (Serafeim Papastefanos) * When using `simple_translations` ensure that the user is redirected to the page edit view when submitting for a single locale (Mitchel Cabuloy) * When previewing unsaved changes to `Form` pages, 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_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) * 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) ## Upgrade considerations ### 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 `_ 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_json` field in the `PageRevision` model has been renamed to `content`. * The field now internally uses `JSONField` instead of `TextField`. * If you have a large number of `PageRevision` objects, running the migrations might take a while. ### Replaced `data_json` `TextField` with `data` `JSONField` in `BaseLogEntry` * The `data_json` field in the `BaseLogEntry` model has been renamed to `data`. * The field now internally uses `JSONField` instead of `TextField`. * The default empty value for the field has been changed from `""` to `{}`. * This change also affects `BaseLogEntry` subclasses, i.e. `PageLogEntry` and `ModelLogEntry`. * 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)](https://docs.wagtail.org/en/stable/releases/2.0.html#new-rich-text-editor) 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](https://github.com/wagtail/wagtail-hallo) 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.registerHalloPlugin` will no longer be created on the page editor load, unless the legacy package is installed. ### Phasing-out of special-purpose field panel types As of this release, the use of special-purpose field panel types such as `StreamFieldPanel` and `ImageChooserPanel` is being phased out, and developers will generally expect to be able to use a plain `FieldPanel` instead. For this reason, developers of third-party packages implementing their own field panel types are recommended to follow suit and ensure that their code also works with `FieldPanel`. 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 `Widget` class](https://docs.djangoproject.com/en/stable/ref/forms/widgets/) that produces your desired HTML rendering. * If the panel provides a `widget_overrides` method, your code should instead call [`register_form_field_override`](/extending/forms) so that the desired widget is always selected for the relevant model field type. * If the panel provides a `get_comparison_class` method, your code should instead call `wagtail.admin.compare.register_comparison_class` to register the comparison class against the relevant model field type. If you do continue to use a custom panel class, note that the template context for panels derived from `BaseChooserPanel` has changed - 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.