v34.0.0
Release highlights
We are happy to announce the release of CKEditor 5 v34.0.0.
This release introduces the following new features:
- Support for document lists
- Support for the lock mechanism for the
Editor#isReadOnly
property - Replacement for the CKEditor 4's styles dropdown feature
- Revision history: efficiency improvements and added the DLL build
- Upgrade to PostCSS 8
There were also a few bug fixes:
- Certain markup no longer breaks the editor when using the GHS feature
- Block insertion annotations are now properly displayed even if there is any annotation afterwards
Read more in: https://ckeditor.com/blog/ckeditor-5-v34.0.0-with-redesigned-lists-new-styles-implementation-and-extended-dll-builds/
Please refer to the Migration to v34.x guide to learn more about these changes.
MAJOR BREAKING CHANGES ℹ️
- The
Editor#isReadOnly
property is now not editable directly. Starting this release, the property is controlled byEditor#enableReadOnlyMode( lockId )
andEditor#disableReadOnlyMode( lockId )
, which allow changing theEditor#isReadOnly
state by more than one feature without collisions. See the migration guide to learn more.
MINOR BREAKING CHANGES ℹ️
- engine: The
isAllowedInsideAttributeElement
option has been removed, so theAttributeElement
elements can wrap any view element (according to positions). Make sure that you are not wrapping any of theContainerElement
elements by accident by not checking the target in the converter. These would previously get wrapped by theAttributeElement
element which would immediately be removed by theContainerElement
element within it so there would be no visible effect. - engine: The handling of
Tab
andShift+Tab
keystrokes have been switched to the'tab'
view document event across the project. If your integration usesKeystrokeHandler
forTab
key handling, we recommend you migrate to the'tab'
event to avoid unpredicted errors. - engine: If your integration uses the
Model#insertContent()
andfindOptimalInsertionRange()
methods to insert widgets into the content, we recommend you migrate your code to theModel#insertObject()
method for best results. This is particularly relevant for compatibility with the document lists feature (see #11198). - html-support: The
$htmlSection
,$htmlObjectBlock
, and$htmlObjectInline
element types are no longer available for custom elements registered via theregisterBlockElement()
method to inherit from. Please use$container
,$blockObject
, and$inlineObject
instead (see #11197).
Features
- core: Introduced the lock mechanism for the
Editor#isReadOnly
property. The read-only mode can now be separately enabled and disabled by multiple features, which allow for proper control without conflicts between features. Closes #10496. (commit) - core:
MultiCommand
now allows setting the priority (the order) of registered subcommands. Closes #11083. (commit) - engine: Added the new
Model#insertObject()
method for inserting elements defined as objects by model schema (see #11198). (commit) - engine: Introduced the inheritable
$container
,$blockObject
, and$inlineObject
element types in the modelSchema
(see #11197). (commit) - engine: Introduced the
TabObserver
observer that allows listening to pressing down theTab
key in the specified context. (commit) - engine: Added the new
Schema#getAttributesWithProperty()
method that retrieves attributes from a node which has a given property (see #11198). (commit) - engine: Added the new
Schema#setAllowedAttributes()
method that validates whether attributes are allowed on a given element before setting them (see #11198). (commit) - html-support: Changes to GHS model attributes will be reflected in the editing view (see #5700). (commit)
- html-support: Added support for document list in the
GeneralHtmlSupport
feature. Closes #11454, #11359, #11358. (commit) - list: Introducing the document list feature (multiple blocks per list item). Closes #2973, #10812. (commit)
- list: Introducing the document list properties feature (list styles, start index, reversed list). Closes #11065. (commit)
- paragraph: Added an optional
options.attributes
parameter to theInsertParagraph
command that allows setting attributes on a created paragraph (see #11198). (commit) - style: Implemented the configurable style feature with the style UI dropdown. Closes #5700. (commit)
- theme-lark: Implemented a
.ck-reset_all-excluded
CSS class that excludes certain elements from CSS reset. Closes #11451. (commit)
Bug fixes
- engine: Marker changes sometimes did not trigger
change:data
event which resulted in errors in features using markers (for example, annotations not showing up in the sidebar). (commit) - html-support: GHS should not convert already consumed inline elements (e.g. handled by other editor features). Closes #11447. (commit)
- html-support: Prevent the
TypeError
error in themergeViewElementAttributes()
function. Closes #10657, #11450, #11477. (commit) - html-support: Skip inline image upcast conversion inside not supported element. Closes #10703. (commit)
- image: The image upcast converter should consume the
[src]
attribute. Closes #11530. (commit) - link: The link decorators should be converted on block images only once (should not wrap block image with an additional link). (commit)
- list: Soft enter (
Shift+Enter
) is no longer captured by the document list enter key listener, allowing to insert soft breaks in empty list items. Closes #11539. (commit) - list: The view list split converter should not fire if the change was already consumed. Closes #11490. (commit)
- list: List properties should remain the same after a paragraph following a list is toggled into a list item. Closes #11408. (commit)
- pagination: Fixed updating pagination lines after resizing the editing root ancestor.
- revision-history: Editor will not get stuck if the revision diff data could not be loaded due to an error when opening or using the revision viewer.
Other changes
- code-block: The handling of
Tab
andShift+Tab
keystrokes switched to the'tab'
view document event and now respects the event context. (commit) - core: The
Editor#isReadOnly
property is now marked as read-only. (commit) - engine: The
Differ
change entries forinsert
andremove
types are extended with a map of attributes that were set while inserting an element or that belonged to an element that got removed. (commit) - engine: The
DowncastHelpers
are passing an additional parameter to the creator functions (thedata
that provides more context to the element creator callback). (commit) - engine: The
isAllowedInsideAttributeElement
option was removed, from now onAttributeElements
are allowed to wrap any view element. (commit) - engine: The
ConversionApi
provided by theUpcastDispatcher
was extended by an additionalkeepEmptyElement()
method that marks an element that was created during splitting a model element that should not get removed on conversion even if it is empty. (commit) - engine: Improved
model.TreeWalker#next()
efficiency. See ckeditor/ckeditor5#11463. (commit) - html-support: Updated default schema definitions for various elements taking advantage of the
$container
,$blockObject
, and$inlineObject
elements in model schema (see #11197). (commit) - media-embed: Added the optional
findOptimalPosition
parameter to theinsertMedia()
helper that allows for insertingmedia
model element without breaking the content (see #11198). (commit) - revision-history: Improved revision history performance for large documents in the following areas: editor initialization time, revision saving time and revision comparison time.
- revision-history: The
@ckeditor/ckeditor5-revision-history
package exposes the DLL build. - table: Exports
PlainTableOutput
plugin from the table package. Closes #11516. (commit) - watchdog: Improved performance of the
getSubNodes()
utility ofWatchdog
. (commit) - Updated translations. (commit, commit)
- CKEditor 5 uses
PostCSS@8
now. Closes #11460. (commit)
Released packages
Check out the Versioning policy guide for more information.
Released packages (summary)
New packages:
- @ckeditor/ckeditor5-style: v34.0.0
Minor releases (contain minor breaking changes):
- @ckeditor/ckeditor5-engine: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-html-support: v33.0.0 => v34.0.0
Releases containing new features:
- @ckeditor/ckeditor5-block-quote: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-clipboard: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-code-block: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-core: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-enter: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-find-and-replace: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-horizontal-line: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-html-embed: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-image: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-language: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-link: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-list: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-media-embed: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-mention: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-page-break: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-paragraph: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-restricted-editing: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-select-all: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-source-editing: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-table: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-theme-lark: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-ui: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-utils: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-watchdog: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-widget: v33.0.0 => v34.0.0
Other releases:
- @ckeditor/ckeditor5-adapter-ckfinder: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-alignment: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-autoformat: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-autosave: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-basic-styles: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-build-balloon: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-build-balloon-block: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-build-classic: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-build-decoupled-document: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-build-inline: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-ckfinder: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-cloud-services: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-collaboration-core: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-comments: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-easy-image: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-editor-balloon: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-editor-classic: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-editor-decoupled: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-editor-inline: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-essentials: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-export-pdf: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-export-word: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-font: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-heading: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-highlight: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-indent: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-markdown-gfm: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-minimap: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-operations-compressor: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-pagination: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-paste-from-office: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-real-time-collaboration: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-remove-format: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-revision-history: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-special-characters: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-track-changes: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-typing: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-undo: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-upload: v33.0.0 => v34.0.0
- @ckeditor/ckeditor5-word-count: v33.0.0 => v34.0.0
- @ckeditor/letters: v33.0.0 => v34.0.0
- ckeditor5-collaboration: v33.0.0 => v34.0.0