Release highlights
We are happy to announce the release of CKEditor 5 v20.0.0.
This release brings some highly anticipated features:
- Support for linking images.
- Typing around widgets.
- An option to automatically set link protocol.
- Improved selection handling when working with links.
New features were also accompanied by a set of bug fixes, to name a few:
- Autoformatting will no longer change formatting when typing in an inline code.
- Editor will no longer crash if there's a HTML comment in the source data.
TODO: Add a link to the blog post.
Collaboration features
The CKEditor 5 Collaboration features changelog can be found here: https://ckeditor.com/collaboration/changelog.
MAJOR BREAKING CHANGES ℹ️
- ckeditor5: Node
>=12.0.0
is required now.
MINOR BREAKING CHANGES ℹ️
- table: The
TableNavigation
plugin was renamed toTableKeyboard
. - table: The values returned by the
TableWalker
iterator have changed. See #6785. - widget: Removed the
getWidgetTypeAroundPositions()
helper since the "Insert new paragraph" buttons are now visible regardless of the widget location in the document - The
isTableWidget()
andtoTableWidget()
utility functions were removed. - The functions
getSelectedTableWidget()
andgetTableWidgetAncestor()
fromtable/utils
module were moved to thetable/utils/widget
module. - The functions
getSelectedTableCells()
,getTableCellsContainingSelection()
,getSelectionAffectedTableCells()
,getRowIndexes()
,getColumnIndexes()
, andisSelectionRectangular()
fromtable/utils
module were moved totable/utils/selection
module. - The functions
getVerticallyOverlappingCells()
,splitHorizontally()
,getHorizontallyOverlappingCells()
, andsplitVertically()
fromtable/utils
module were moved totable/utils/structure
module. - The functions
findAncestor()
,updateNumericAttribute()
,createEmptyTableCell()
, andisHeadingColumnCell()
fromtable/commands/utils
module were moved totable/utils/common
module. - The functions
getSingleValue()
andaddDefaultUnitToNumericValue()
fromtable/commands/utils
module were moved totable/utils/table-properties
module. - The functions
cropTableToDimensions()
andtrimTableCellIfNeeded()
fromtable/tableselection/croptable
module were moved totable/utils/structure
module. - The functions
repositionContextualBalloon()
,getBalloonTablePositionData()
, andgetBalloonCellPositionData()
fromtable/ui/utils
module were moved totable/utils/ui/contextualballoon
module. - The functions
getBorderStyleLabels()
,getLocalizedColorErrorText()
,getLocalizedLengthErrorText()
,colorFieldValidator()
,lengthFieldValidator()
,lineWidthFieldValidator()
,getBorderStyleDefinitions()
,fillToolbar()
, andgetLabeledColorInputCreator()
fromtable/ui/utils
module were moved totable/utils/ui/table-properties
module. - The
defaultColors
constant fromtable/ui/utils
module was moved totable/utils/ui/table-properties
module.
Features
- link: Introduced the linking images feature. Closes #7330. (commit)
- link: Introduced the
LinkImageUI
plugin that brings a UI to wrap images in links. Closes #7331. (commit) - link: A fake caret (selection) should be displayed in the content when the link input has focus and the browser does not render the native caret (selection). Closes #4721. (commit)
- link: Introduced the
config.link.defaultProtocol
option for adding it automatically to the links when it's not provided by the user in the link form. Closes #4858. (commit) - theme-lark: Added styles for the fake link caret (selection) (see #4721). (commit)
- theme-lark: Added styles for a "fake caret" brought by the
WidgetTypeAround
plugin (see #6693). (commit) - typing: Created a public
isNonTypingKeystroke()
helper (see #6693). (commit) - upload: Introduced the
config.simpleUpload.withCredentials
request configuration. Closes #7282. (commit) - utils: Created
isArrowKeyCode()
,getLocalizedArrowKeyCodeDirection()
, andisForwardArrowKeyCode()
helpers (see #6693). (commit) - widget: Implemented keyboard support for inserting paragraphs around block widgets using a "fake horizontal caret" (
WidgetTypeAround
). Both "Insert new paragraph" buttons are now always displayed for all block widgets regardless of their location in the document. Closes #6693, #6825, #6694. (commit)
Bug fixes
- autoformat: Autoformatting should not occur inside an existing text with a model
code
attribute. Closes #1239. (commit) - engine: The editor should not crash when the initial data includes HTML comments. Closes #5734. (commit)
- engine: The model selection post-fixer should not set a new selection if the ranges before and after post-fixing are the same (see #6693). (commit)
- engine: Backspace will no longer change the type of the trailing block. Closes #6680. (commit)
- font: The Font Family feature should apply the complete family value from the configuration when
config.fontFamily.supportAllValues
istrue
. Closes #7285. (commit) - image: The widget toolbar won't be shown if an empty collection of items was provided in the editor's configuration. Closes #5857. (commit)
- image: The
src
andalt
attributes for the image element will be always added to the editor's data. Even if they are empty. Closes #5033. (commit) - table: Table multi-cell selection should not be possible with the keystrokes when the
TableSelection
plugin is disabled. Closes #7483. (commit) - table: Copied and pasted table fragment should maintain the proper structure when the fragment contains merged table cells. Closes #7245. (commit)
- table: Removing empty rows will no longer produce an invalid table model in certain scenarios. Closes #6609. (commit)
- ui: The
BalloonToolbar
should not show up when multiple objects (for instance, table cells) are selected at a time. Closes #6443. (commit)
Other changes
- engine: Added the
ignoreMarkers
option to theModel#hasContent()
method. (commit) - engine: Added Writer#cloneElement(). Closes #6819. (commit)
- horizontal-line: Improved the look of horizontal lines in the editor content. Closes #7418. (commit)
- link: The selection after inserting a link will land after the inserted element. Thanks to that a user will be able to type directly after the link without extending the link element. Closes #1016. (commit)
- link: After clicking at the beginning or end of the link element, the selection will land before/after the clicked element. Thanks to that a user will be able to typing before or after the link element as normal text without extending the link. See #1016. (commit)
- paragraph: The
InsertParagraphCommand
should split ancestors of thePosition
to find a parent that allows'paragraph'
(see #6693). (commit) - select-all: Improved the select-all feature so that it includes more and more content if the selection was anchored in a nested editable. Closes #6621. (commit)
- table: Removed
options.asWidget
from most of the table converters which are never run in data pipeline. (commit) - table: Marker on table cells should be downcasted to CSS classes on cells (instead of wrapping the content). Closes #7360. (commit)
- table: Pasting a table into a table is more tolerant for whitespaces around a pasted table. Closes #7379. (commit)
- table: Extracted
TableMouse
plugin fromTableSelection
plugin. Closes #6757. (commit) - table: Refactor values returned by the
TableWalker
iterator. Closes #6785. (commit) - table: Add
row
,startColumn
, andendColumn
options toTableWalker
constructor. See #6785. (commit)
Released packages
Check out the Versioning policy guide for more information.
Minor releases (contain minor breaking changes):
Releases containing new features:
Other releases:
Released packages (summary)