v28.0.0
Release highlights
We are happy to announce the release of CKEditor 5 v28.0.0.
This release introduces several new features:
- The Revision History feature, that allows the users to create, view and restore named content versions.
- The possibility to add captions to tables.
- The ability to specify the default properties for tables and table cells.
- The new
allowChildren
property for the data schema item definition. - The Export to PDF and Export to Word features are now enabled in the read-only mode.
- Introducing the plugin metadata and documenting the HTML output of all editor features.
There were also a few bug fixes:
- Word can now properly open a file with nested tables exported from CKEditor 5.
- Pasting in the horizontal caret no longer replaces the widget.
- Correcting spelling in a list does not throw an error anymore.
- Toolbar navigation with the keyboard works in the right direction in an RTL text.
- The media embed supports whichever URL scheme for Google Maps.
MAJOR BREAKING CHANGES
Note: Check out the Migration to CKEditor 5 v28.0.0 guide for more detailed information on how to upgrade to the current version.
- All the packages use multiple exports instead of the one object in the
src/index.js
file. The list of affected packages.
MINOR BREAKING CHANGES ℹ️
- engine: Styles definitions for the
border:*
property produced by theStylesProcessor
will now be merged as a singleborder:*
property if all its properties (width, style, and color) for all edges (top, right, bottom, left) are the same. - table: The
TablePropertiesView
andTableCellPropertiesView
classes require additional property in the object as the second constructor argument (options.defaultTableProperties
for the table andoptions.defaultTableCellProperties
for table cells). - table: The
upcastBorderStyles()
conversion helper requires a third argument calleddefaultBorder
. The object defines the default border (width
,color
,style
) properties. - table: The following conversion helpers:
upcastStyleToAttribute()
,downcastAttributeToStyle()
,downcastTableAttribute()
accept two arguments now (the conversion and the options objects). Previous usage:conversionHelper( conversion, /* ... */ )
should be replaced withconversionHelper( conversion, { /* ... */ } )
. - table: Values for the
borderColor
,borderStyle
,borderWidth
, andpadding
model attributes are unified (to values produced by the editor itself) while upcasting the table or table cells if all sides (top, right, bottom, and left) have the same values. Previously, the<table style="border: 1px solid #ff0">
element was upcasted to<table borderStyle="{"top":"solid","right":"solid","bottom":"solid","left":"solid"}" borderColor="{...}" borderWidth="{...}">
. Now the object will be replaced with the string value:<table borderStyle="solid" borderColor="#ff0" borderWidth="1px">
. The same structure is created when using the editor's toolbar. If border values are not identical, the object notation will be inserted into the model (as it is now). - table: The following classes require the second argument called
defaultValue
which is the default value for the command:TableCellHorizontalAlignmentCommand
,TableCellVerticalAlignmentCommand
,TableCellBackgroundColorCommand
,TableCellBorderColorCommand
,TableCellBorderStyleCommand
,TableCellBorderWidthCommand
,TableCellHeightCommand
,TableCellPropertyCommand
,TableCellWidthCommand
,TableCellPaddingCommand
,TableAlignmentCommand
,TableBackgroundColorCommand
,TableBorderColorCommand
,TableBorderStyleCommand
,TableBorderWidthCommand
,TableHeightCommand
,TablePropertyCommand
,TableWidthCommand
.
Features
- engine: Introduced the
SchemaItemDefinition#allowChildren
property simplifying the defining of which other items are allowed inside this schema item definition. Closes #9261. (commit) - engine: Introduced the
'mouseover'
and'mouseout'
events in theMouseObserver
class. Closes #9338. (commit) - engine: The
StylesProcessor
reducer for theborder:*
CSS property was extended to be able to merge to theborder:*
property if all its properties (width, style, and color) are specified. Otherwise, theborder-(width|style|color)
definition should be returned. Closes #9490. (commit) - table: Added support for table captions. Closes #3204. (commit)
- table: Added support for the default table cell properties. Read more about the feature in the documentation. (commit)
- table: Added support for the default table properties. Read more about the feature in the documentation. Closes #8502, #9219. (commit)
- Introduced the Revision History feature, that allows the users to create, view and restore content versions.
Bug fixes
- comments: Fixed comments marker conversion that would fail if the comment marker is in a model document fragment.
- engine: Added checks for the upcast attribute-to-marker converter before changing the data and consuming view elements. Part of #9779. (commit)
- engine: Updated
downcastwriter
to allow setting up attribute element's priority to0
. Closes #5797. (commit) - engine: The
model.deleteContent()
should not exclude a block widget at the end of the deletion range. (commit) - engine: The conversion upcast
elementToAttribute()
andattributeToAttribute()
functions should not call themodel.value()
callback if the element will not be converted. Closes #9536. (commit) - engine: The renderer should not crash while removing multiple DOM nodes in the same render cycle. Closes #9534. (commit). Thanks to bendemboski!
- html-embed: Allow rendering the
<script>
element inside the HTML preview. Closes #8326. (commit) - link: All text attributes starting their names with
link
will be removed when typing over a link or clicking at the end of the link. Closes #8462. (commit) - list: Fixed a crash when applying a spell checker suggestion to a word inside a list item. Closes #9325. (commit)
- media-embed: Added support for more google maps URL formats (goo.gl/maps, maps.google.com, maps.app.goo.gl). Closes #2762. (commit)
- track-changes: Fixed a crash happening in some scenarios when a block quote deletion suggestion was accepted.
- track-changes: Fixed a crash with inline formatting suggestion in the content with a
<br>
tag. - ui Fixed arrow handling with the toolbar focused in case of RTL language UI. Closes #5585. (commit)
- widget: Pasting plain text while the widget fake caret is active should not remove the widget. Closes #9477. (commit)
- All non-DLL packages will re-export their modules instead of exporting the default object with these modules as the object entries. Closes #9134. (commit)
Other changes
- comments: Improved performance for handling huge amounts of annotations.
- engine: In the marker-to-data conversion, attributes for marker boundaries will be used every time the marker starts or ends before or after the model element, instead of only where a text is not allowed by the model schema. Closes #9622. (commit)
- export-pdf: The
exportPdf
command will not be disabled if the editor goes into read-only mode as it does not impact the data. - export-word: The
exportWord
command will not be disabled if the editor goes into read-only mode as it does not impact the data. - table: Border definitions produced by the
TableProperties
andTableCellProperties
features will be merged into a group if possible. Instead of producingborder-(top|right|bottom|left):*
property, theborder:*
definition will be returned. The same applies to the table cell padding. See #9490. (commit) - Updated translations. (commit, commit)
- Added plugins metadata to packages. Introducing new guides for the metadata and the present HTML output of the features. Closes #6642. (commit)
Released packages
Check out the Versioning policy guide for more information.
Released packages (summary)
Minor releases (contain minor breaking changes):
- @ckeditor/ckeditor5-table: v27.1.0 => v28.0.0
Releases containing new features:
- @ckeditor/ckeditor5-core: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-engine: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-image: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-paste-from-office: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-theme-lark: v27.1.0 => v28.0.0
Other releases:
- @ckeditor/ckeditor5-adapter-ckfinder: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-alignment: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-autoformat: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-autosave: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-basic-styles: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-block-quote: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-build-balloon: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-build-balloon-block: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-build-classic: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-build-decoupled-document: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-build-inline: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-ckfinder: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-clipboard: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-cloud-services: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-code-block: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-collaboration-core: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-comments: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-easy-image: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-editor-balloon: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-editor-classic: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-editor-decoupled: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-editor-inline: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-enter: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-essentials: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-export-pdf: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-export-word: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-font: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-heading: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-highlight: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-horizontal-line: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-html-embed: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-indent: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-language: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-link: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-list: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-markdown-gfm: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-media-embed: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-mention: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-operations-compressor: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-page-break: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-pagination: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-paragraph: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-real-time-collaboration: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-remove-format: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-restricted-editing: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-revision-history: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-select-all: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-special-characters: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-track-changes: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-typing: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-ui: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-undo: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-upload: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-utils: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-watchdog: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-widget: v27.1.0 => v28.0.0
- @ckeditor/ckeditor5-word-count: v27.1.0 => v28.0.0
- @ckeditor/letters: v27.1.0 => v28.0.0