Release highlights
We are happy to announce the release of CKEditor 5 v29.0.0.
This release introduces several new features:
- Inline images - support multiple images in a single block
- The Find and replace feature
- The Source editing feature for classic editor
- Remembering the language when creating a new code block
- The General HTML Support feature
There were also a few bug fixes:
- The remove format feature will not reset the image size anymore
- Nested marker highlight will not break the mouse text selection
MAJOR BREAKING CHANGES ℹ️
- build-decoupled-document: The official preconfigured decoupled document build now ships with the
ImageResize
plugin enabled by default. Learn more about it in the Migration to v.28.x guide. - image: The
Image
plugin works as a glue for both theImageBlock
andImageInline
features now (previously it only supported block images). If you do not want inline images to be allowed, consider replacing theImage
plugin withImageBlock
in your editor configuration. Otherwise, all images without the<figure>
wrapper will be loaded into the editor content as inline images, which in some cases may affect content semantics and styling. Check the udpated image installation guide for more details about this change. - image: The
ImageEditing
plugin is no longer standalone, as the majority of its logic was extracted to theImageBlockEditing
andImageInlineEditing
plugins. The logic remaining in theImageEditing
is common for bothImageBlockEditing
andImageInlineEditing
plugins. - image: The image caption is no longer displayed automatically when the user selects a block image. Instead, its presence is controlled using the
'toggleImageCaption'
toolbar button and aToggleImageCaptionCommand
for better integration with the revamped image styles system. - image: The API of the image features has changed, please make sure to update your integrations.
- image: The linked image indicator (icon) rendered as a
<span>
with the.ck-link-image_icon
CSS class has been removed. To alter the look of the indicator (including the icon), please use thefigure.image > a::after
(for linked block images) anda span.image-inline::after
(for linked inline images) CSS selectors instead. - image: The
srcsetAttributeConverter()
andmodelToViewAttributeConverter()
conversion helpers now require theimageType
parameter. - table: The in-cell pseudo-paragraph used for data tables is no longer styled using the inline
style
attribute but a.ck-table-bogus-paragraph
CSS class instead. - Several plugins are not loaded automatically as dependencies of other plugins anymore. From now on, they need to be provided by the editor creator manually (via the
config.plugins
configuration option). Learn more about it in the Migration to v.29.0.0 guide. This list includes: - Several functions are no longer a part of the public API. This list includes:
getSelectedImageWidget()
getViewImgFromWidget()
isImageAllowed()
isImage()
isImageWidget()
toImageWidget()
captionElementCreator()
isCaption()
checkSelectionOnObject()
- Several functions or constants have been renamed. The list of changes includes:
- The
getCaptionFromImage()
helper is now available asgetCaptionFromImageModelElement()
- The
matchImageCaption()
helper is now available asmatchImageCaptionViewElement()
- The
defaultIcons
are now available asDEFAULT_ICONS
- The
defaultStyles
are now available asDEFAULT_OPTIONS
- The
findOptimalInsertionPosition()
helper is nowfindOptimalInsertionRange()
and returns a model range. Also, instead of searching for a position next to the currently selected block, it will now attempt to replace that block (see #9102) - The
isImageAllowed()
helper is now available asisLinkableElement()
- Some helpers from the image utils module (
@ckeditor/ckeditor5-image/src/image/utils.js
) have been moved to theImageUtils
plugin. The helpers are still accessible via theeditor.plugins.get( 'ImageUtils' )
namespace, for instance,editor.plugins.get( 'ImageUtils' ).insertImage( ... )
- The
- The API of several functions or modules has been changed. Refer to the documentation to learn more. This list of changes includes:
- common image converters
- various image caption utils
- the
insertImage()
helper - the
insertMedia()
helper
- The default user permissions have been changed. Now, by default, it is possible to remove other users' comment threads. This applies to non-real-time editing integrations and to real-time editing integrations using the writer role. This behavior can be changed using the
Permissions
plugin API (for non-real-time editing integrations) or by setting permissions for a given user in the user token (for integrations using Cloud Services).
Features
- code-block: When inserting a new code block, instead of applying the default language (the first in the dropdown view), the feature now re-uses the language of the last inserted code block. Closes #8722. (commit)
- collaboration-core: Introduced the
Permissions
plugin. Now it is possible to manage the editor's level of access using permissions. See the user roles and permissions guide. - comments: Introduced the
CommentsRepository#isReadOnly()
method. - comments: Introduced the
CommentThread#isRemovable
property which is related to current permissions. By default, comment threads can now be removed by any user. - engine: Improved engine view matcher with new pattern syntax allowing to match attribute keys using regular expressions. Unified the pattern syntax between attributes, styles, and classes. Closes #9872. (commit)
- engine: Added the special
expand
option to theStylesMap.getStyleNames()
and viewElement.getStyleNames()
methods allowing to expand shorthand style properties. (commit) - engine: Introduced the
batchType
option ineditor.data.set()
which can be used to preserve the undo/redo steps and to add an additional item to the undo stack. Note that it will still replace the whole content and should not be used with real-time collaboration. (commit) - html-support: Introduced the General HTML Support feature. Closes #9970. (commit)
- image: Introduced support for inline images in editor content. Available out–of–the–box in all ready–to–use editor builds, inline images can be uploaded, styled, resized, and linked and complement the already supported block images. See the image feature overview guide to see inline images in action. For more information about breaking changes, migration path, and tips, check out the migration to v29.0.0 guide. (commit)
- image: It should now be possible to define the dropdown menu as an object in the
config.image.toolbar
configuration. Closes #9340. (commit) - link: The feature functonality now covers both block and inline images. Closes #8871, #9017, #9167. (commit)
- revision-history: Enabled the Revision History feature in multi-root editors.
- source-editing: Introduced the Source editing feature for the predefined classic editor build. Closes #9647. (commit)
Bug fixes
- clipboard: All toolbars shall be hidden when the widget is dragged and show back when the drag ends. Closes #9566. (commit)
- code-block: The code block feature should not allow for inserting inline widgets as its content. Closes #9567. (commit)
- engine: Fixed the downcast conversion of collapsed markers at the conversion range boundary. Closes #8485. (commit)
- engine: Added missing HTML block element names to the
DomConverter.blockElements
array. Closes #9801, #7863. (commit) - engine: Markers should not be split in view on the caret position. Closes #9513. (commit)
- engine:
FocusObserver
should not force the view to render in random moments. See #9513. (commit) - engine: Disallowed inline images in the
caption
elements. Closes #9794. (commit) - image: The image should not resize to 100% if the resize command was overridden (canceled). (commit)
- image: The side-aligned images should always have some
max-width
property to not take up the whole editor width. Closes #9342. (commit) - image: The floating block images, except for the
side
images, should be displayed side by side by default. Closes #9183. (commit) - image: An image should never overflow the widget boundaries while changing its size. Closes #9166. (commit)
- image: The size label should be displayed above the image if it does not fit inside. See #9166. (commit)
- image: An image caption placeholder text should not wrap or overflow. Closes #9162. (commit)
- link: The link UI should be shown when clicking a linked inline widget. Closes #9607. (commit)
- restricted-editing: The editor will not crash when a restricted area marker is removed. Closes #9650. (commit)
- revision-history: The highlights for suggestions created in earlier revisions are now properly shown.
- revision-history: A revision history will no longer crash if table plugin has not been added to the editor.
- widget: Selected inline widgets wrapped in an attribute in the view should create a fake selection. Closes #9524, #9521. (commit)
Other changes
- build-decoupled-document: The editor document build now includes the
ImageResize
plugin. Closes #9507. (commit) - comments: The
Comment#isRemovable
property is now bound toCommentThread#isRemovable
.Comment#isRemovable
is set totrue
if the local user is the author, or if the comment thread is removable and the comment is the first comment in the thread. - core: Added several new icons for new image styles (see #8909). (commit)
- easy-image: Removed the
Image
plugin dependency from theEasyImage
plugin. Closes #9399. (commit) - engine: Fixed parsing leading HTML comments by
HtmlDataProcessor.toView()
. Closes #9861. (commit) - horizontal-line: New widgets will replace the selected block instead of being added next to it on insertion (see #9102). (commit)
- image: The default image style is now called
block
, instead offull
. Its label reads now "Centered image" and it is represented by the appropriate icon in the image toolbar. See #9545. (commit) - image: Turned the image utils module into an editor plugin to allow sharing utils outside the package. See #8871. (commit)
- image: The image toolbar should be visible if the selection is placed inside an image caption. Closes #9136. (commit)
- image: The image caption should be controlled using the toolbar button and a command for a better integration with image styles. Closes #8907. (commit)
- real-time-collaboration: Made collaboration features compatible with inline images.
- table: Added the
.ck-table-bogus-paragraph
CSS class to the in-cell pseudo-paragraph used for data tables for easier and safer styling. (commit) - ui: Added the
class
property to theSplitButtonView
UI component. Closes #8909. (commit) - widget: Safeguarded the way the
Widget
plugin sets the fake selection. Closes #9580. (commit) - widget: Replaced the
findOptimalInsertionPosition()
helper withfindOptimalInsertionRange()
that will now attempt to replace selected blocks when inserting new widgets. Closes #9102. (commit) - Optimized icons. (commit)
- Updated translations. (commit, commit)
Released packages
Check out the Versioning policy guide for more information.
New packages:
Major releases (contain major breaking changes):
Releases containing new features:
Other releases:
Released packages (summary)