Releases: ckeditor/ckeditor5
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 inl...
v33.0.0
Release highlights
We are happy to announce the release of CKEditor 5 v33.0.0.
This release introduces the following new features:
- A new, completely redesigned reconversion system
- Support for handling the
<style>
element in the General HTML Support feature - DLL-compatible package builds for collaboration features
- A solution for how to downcast a table to
table>caption
- Real-time collaboration support in revision history
There were also a few bug fixes:
- Removing complex emojis now work as expected
- Preparing DLL package builds in the development mode (the
--dev
flag) no longer ends with an error - Clicking content that has a comment does not cause content data change (resulting with extra autosave)
- The
<CKEditorContext>
React component now destroys properly
Read more in: https://ckeditor.com/blog/ckeditor-5-v33.0.0-with-improved-conversion-system-and-dll-builds-for-collaboration-features/
MAJOR BREAKING CHANGES ℹ️
- engine: Removed the
Differ#refreshItem()
method from the public API. Replaced byEditingController#reconvertItem()
(see #10659). - engine: The
DowncastDispatcher
will throw an error if any of the model items were not consumed while converting. Read theconversion-model-consumable-not-consumed
error documentation for more information. - engine: The
DowncastDispatcher#conversionApi
property is no longer available. The instances ofDowncastConversionApi
are created at the start of conversion. - engine: Support for the
triggerBy
option for downcast helpers was removed and replaced with the newelementToStructure()
options. - list: The
ListEditing
,ListUI
,ListStyleEditing
,ListStyleUI
,TodoListEditing
,TodoListUI
plugins were moved to their dedicated subdirectories (list
,liststyle
,todolist
).
MINOR BREAKING CHANGES ℹ️
- image: Image caption utilities were converted to the
ImageCaptionUtils
plugin. - table: The downcast converters of the table feature were rewritten with the use of
elementToStructure()
and the re-conversion mechanism. See #10502. - table: The table selection utilities were to the
TableUtils
plugin. config.initialData
will now always be set, even if it is not passed in the editor config.
Features
- engine: The
DowncastWriter#createContainerElement()
should accept a list of children so that bigger view structures can be created in one call. Closes #10714. (commit) - engine: The
elementToElement()
downcast helper will log a console warning if multiple elements have been created. Closes #10610. (commit) - engine: The
DowncastDispatcher
will throw an error if any of the model items were not consumed while converting. Closes #10377. (commit) - engine: Introducing
convertItem()
,convertChildren()
andconvertAttributes()
in the downcast conversion API interface. (commit) - engine: Added support for reconversion in the
DowncastHelpers#elementToElement()
downcast helper. Closes #10359. (commit) - engine: Added the
DowncastHelpers#elementToStructure()
downcast helper with reconversion support. Closes #10358. (commit) - engine: It is now possible to trigger a nested conversion while downcasting an element. (commit)
- engine: The
DeleteCommand
changed to delete the whole multi-character emoji at once. Closes #6504. (commit) - engine: Introduced
Marker#getData()
. (commit) - html-support: Added the
<style>
element support in General HTML Support feature. Closes #11104. (commit) - table: Introduced the
PlainTableOutput
plugin to override the defaultfigure>caption
markup in the data pipeline (it outputs the table astable>caption
). Closes: #10892. (commit)
Bug fixes
- engine: Setting a marker to the same range it was will no longer trigger the
change:data
event. This will prevent unnecessary autosave callbacks. Closes #9901. (commit) - html-support: Prevent the removal of the
<script>
and<style>
elements when they are the only content in the editor. Closes #11247. (commit) - image: Always create new instances of the default options for the
ImageStyle
plugin. Closes #11328. (commit) - table: Prevent the plain table output converter from interfering with other features' caption converters. Closes #11394. (commit)
- Fixed the "Unknown option --dev" error when building DLL files in the development mode enabled. Closes #11170. (commit)
Other changes
- engine: Implemented the
EditingController#reconvertMarker()
method to be used instead ofWriter#updateMarker()
for marker reconversion purposes. Implemented theEditingController#reconvertItem()
method to replaceDiffer#refreshItem()
. Closes #10659. (commit) - engine: The attribute and child nodes conversion events are fired by the lowest priority handler for the insert event instead of the
DowncastDispatcher
itself. Closes #10376. (commit) - engine: Events are fired by the
DowncastDispatcher
...
v32.0.0
Release highlights
We are happy to announce the release of CKEditor 5 v32.0.0.
This release introduces the following new features:
- The environment was upgraded to use webpack 5 and Node 14.
- Introduced support for the list
start
andreversed
attributes, including when pasting from Word. - Addedd support for autocomplete with space in the mention plugin.
- Improved handling of
<script>
elements in General HTML support (GHS) feature.
MAJOR BREAKING CHANGES ℹ️
- engine:
Batch#type
has been deprecated. It will always return'default'
value and reading it will log a warning in the console. UseBatch#isUndoable
,Batch#isLocal
,Batch#isUndo
andBatch#isTyping
instead. - revision-history: Multiple changes to
Revision
properties has been introduced that impact revision history integrations. Introduced#fromRevision
and#toRevision
properties. Renamed#data
to#diffData
. The#isLocked
property has been removed. Those changes have an impact on what data should be saved in your database and how the revision history plugin should be integrated. Please refer to the migration guide and the documentation to learn more about these changes. - revision-history: The
RevisionHistoryAdapter
interface has changed. Also,RevisionTracker
no longer usesRevisionHistoryAdapter#getRevisions()
to fetch revisions during editor initialization. You should add revisions data in your integration plugin. Please refer to the migration guide and the documentation to learn how to update your revision history integration. - revision-history:
RevisionTracker#updateRevision()
has been removed while#update()
and#saveRevision()
have been introduced instead. This, among others, may have an impact on your autosave integration. Please refer to the migration guide and the documentation to learn how to update your revision history integration. - typing:
Input#isInput()
has been removed. UseBatch#isTyping
instead. - Upgraded the minimal versions of Node.js to
14.0.0
due to the end of LTS.
MINOR BREAKING CHANGES ℹ️
- engine: The string value for the
Batch
type andModel#enqueueChange()
is now deprecated. Using a string value will log a warning in the console. Use an object value instead. For more information, refer to the API documentation. - revision-history:
RevisionTracker#isLocked
has been removed. - revision-history: The flow for creating and updating a revision has changed. See documentation to learn what it looks like after the changes.
- The previously named
#_getTemplate()
methods inCommentThreadView
,CommentView
, andSuggestionThreadView
were renamed to#getTemplate()
. These methods are used in annotations customization, when changing the default templates.
Features
- autosave:
Autosave#save()
will now return a promise that is resolved when the autosave callback has finished. (commit) - comments: Introduced
Annotation#refreshVisibility()
andAnnotations#refreshVisibility()
that refresh the visibility of the annotations based on the visibility of their target elements. - comments: Introduced the
Annotation#isVisible
observable property, that allows controlling the visibility of the annotation. - html-support: Added support for the
<script>
elements. Closes #10891. (commit) - list: Implemented the numbered list properties UI. Closes #10877. (commit)
- list: Added support for reversed lists and list start index (
reversed
andstart
HTML attributes). Closes #10673. (commit) - paste-from-office: Added support for start index in ordered lists. Closes #11043. (commit)
- revision-history: Introduced
Revision#fromVersion
andRevision#toVersion
. - revision-history: Introduced new methods in
RevisionHistory
plugin:#addRevisionData()
,#getRevision()
,#getRevisions()
. - ui: Introduced the
InputNumberView
class and thecreateLabeledInputNumber()
helper for creating number inputs (see #10877). (commit) - ui: Introduced the
InputView
class for other inputs such asInputTextView
to inherit from (see #10877). (commit) - utils: Introduced the
isVisible()
helper to detect whether DOM elements are visible to the user in DOM (see #10877). (commit) - Replaced
Batch#type
with a set of flags:Batch#isUndoable
,Batch#isLocal
,Batch#isUndo
,Batch#isTyping
which better represent the batch type. TheBatch
constructor andModel#enqueueChange()
now expect an object. Closes #10967. (commit)
Bug fixes
- comments: DOM listeners will be detached when destroying annotation collections which prevents memory leaks.
- engine:
HTMLDataProcessor#toView()
should preserve leading non-layout elements while loading partial HTML. Closes #11110. (commit) - list: The list properties feature will no longer crash when removing content from the last list item which is next to a non-list element. Closes #8642. (commit)
- mention: The mention plugin now allows searching mentions that include space characters. Closes #9741. (commit)
- pagination: The page number input view should not stretch. Used
InputNumberView
to render the page number input inPageNavigatorView
. - revision-history: Fixed a crash when a revision contained overlapping suggestions.
- revision-history: Fixed a crash when content selected by triple-click was copy-pasted into the editor.
- track-changes: Fixed a crash that was happening during real-time editing when one of the users used enter inside a suggestion.
- typing: Fixed editor crash when an unrecognized transformation was given in configuration (as a string). ([commit](https://github.com/ckeditor/ckeditor5/com...
v31.1.0
Release highlights
We are happy to announce the release of CKEditor 5 v31.1.0.
This release introduces the following new features:
- Support for Shift+Delete on Windows to cut the selected content.
- Possibility to open a link with Ctrl/Cmd+click or Alt+Enter.
- Mark the default output for features in the HTML output guide.
There were also a few bug fixes:
- Selection was sometimes not merged correctly.
- It was almost impossible to click certain buttons in the balloon toolbar (Safari, iOS).
- The editor builder
defaultConfig.language
did not apply toeditor.locale
. - Find and replace did not find whole words that are next to each other.
- Figure tag got duplicated when the General HTML Support configuration allows all.
MINOR BREAKING CHANGES ℹ️
- table: Changed
table
elements' attributes' names introduced by theTablePropertiesEditing
plugin by prefixing them withtable
to be in line with other plugins' attributes naming. The affected attribute include:borderStyle
,borderColor
,borderWidth
,backgroundColor
,alignment
,width
,height
. See #9369. - table: Changed
tableCell
elements' attributes' names introduced by theTableCellPropertiesEditing
plugin by prefixing them withtableCell
to be in line with other plugins' attribute naming. The affected attributes include:backgroundColor
,padding
,width
,height
,borderStyle
,borderColor
,borderWidth
,verticalAlignment
,horizontalAlignment
. See #9369. - table: The
upcastBorderStyles()
helper parameters were modified (added themodelAttributes
param).
Features
- comments: Introduced the
AnnotationsUIs#refilterAnnotations()
method which runs annotation UI filtering callback against all annotations and moves them to proper annotation UIs (or removes them). - link: Added the possibility to open a link by Ctrl/Cmd+click or Alt+Enter. Closes #1381. (commit)
- track-changes: Introduced color boxes for color-related suggestions.
- utils: Introduced
env.isiOS
for detection of user agents running in iOS environments (see #7707). (commit)
Bug fixes
- core: Support language configuration passed in
defaultConfig
option through editor's constructor. Closes #8510. (commit) - engine: Merge intersecting ranges that are not adjacent to each other on ranges array. Closes #10628. (commit)
- find-and-replace: Replace functionality no longer replaces text when 'Replace with...' input is focused and user hits the Enter key but the search criteria changed. Closes #10712. (commit)
- find-and-replace: Fixed adjacent whole words being missed by find and replace. Closes #10719. (commit)
- image: Manual decorators on the linked inline images should be preserved while loading editor content. Closes #10828. (commit)
- image: The
<figure>
element should not get replicated while GHS is enabled. Closes #10279. (commit) - real-time-collaboration: The whole reconnection mechanism was improved. More reconnection scenarios are now handled without editor crashing or data loss. Note: these changes require Collaboration Server On-Premises in version higher than
4.2.0
. Otherwise, the fix will not be applied. - table: Disabled alignment button on main editor toolbar for tables in order to have a more unified behavior. Closes #9369. (commit)
- track-changes: Creating document color suggestions no longer causes the editor to crash.
- ui: Changed the look and position of the
BalloonToolbar
in Safari on iOS to avoid clash with native text selection handles. Closes #7707. (commit) - utils: Fixed
DomEmitterMixin
to correctly manage listeners for different options (useCapture
&usePassive
) set for the same DOM node. Closes #7830. (commit)
Other changes
- engine: Allowed unsafe view element attributes so they get rendered in the editing pipeline. Attribute names can be specified when creating elements using
DowncastWriter
(DowncastWriter#createAttributeElement()
,DowncastWriter#createContainerElement()
, etc.). (commit) - track-changes: Changed suggestion description for a highlighted text fragment.
- typing: Added support for the Shift+Delete keystroke on Windows to cut the selected content. Closes #9326. (commit)
- Updated translations. (commit)
Released packages
Check out the Versioning policy guide for more information.
Released packages (summary)
Minor releases (contain minor breaking changes):
- @ckeditor/ckeditor5-table: v31.0.0 => v31.1.0
Releases containing new features:
- @ckeditor/ckeditor5-link: v31.0.0 => v31.1.0
- @ckeditor/ckeditor5-mention: v31.0.0 => v31.1.0
- @ckeditor/ckeditor5-minimap: v31.0.0 => v31.1.0
- @ckeditor/ckeditor5-ui: v31.0.0 => v31.1.0
- @ckeditor/ckeditor5-utils: v31.0.0 => v31.1.0
Other releases:
- @ckeditor/ckeditor5-adapter-ckfinder: v31.0.0 => v31.1.0
- @ckeditor/ckeditor5-alignment: v31.0.0 => v31.1.0
- @ckeditor/ckeditor5-autoformat: v31.0.0 => v31.1.0
- @ckeditor/ckeditor5-autosave: v31.0.0 => v31.1.0
- @ckeditor/ckeditor5-basic-styles: v31.0.0 => v31.1.0
- [@ckeditor/...
v31.0.0
Release highlights
We are happy to announce the release of CKEditor 5 v31.0.0.
This release introduces the following new features:
- Introduce the
Command#affectsData
property to indicate whether a given command should stay enabled in editor modes with restricted write permissions. This solves the frequently reported problems of the availability of some editor features, such as export to PDF or Word, select all or find, in such editor modes as read-only, comments-only or restricted editing. - The mentions feature has gained the ability to customize the max number of items in the list after typing the trigger character.
- New collaboration features samples are available:
- For the React integration that will implement the context feature, as well as the watchdog.
- For comments outside the editor with offline comments.
- The comment and export to Word feature icons were improved.
- Three Enter clicks at the end of a code block are now necessary to escape it.
There were also a few bug fixes:
- The link, mention, inline image, and comment marker cannot be selected by mouse drag if the link is at the edge of a block.
- A table balloon is no longer rendered in the wrong place after unlinking text in table.
- A nested widget selection handle is no longer visible while the outer table cells are selected.
- The HTML embed UI does now correctly reflects the read-only state.
MAJOR BREAKING CHANGES ℹ️
- html-embed: The
InsertHtmlEmbedCommand
andUpdateHtmlEmbedCommand
have been replaced byHtmlEmbedCommand
which is now responsible for both tasks. The command can be executed viaeditor.execute( 'htmlEmbed' )
. See the API reference for more information.
Features
- core: Introduced the
Command#affectsData
flag to indicate whether a given command should stay enabled in editor modes with restricted write permissions (e.g. read-only mode). Closes #10670. (commit) - engine: The
DataController#get()
is now decorated and fires aget
event on the method call. See #10505. (commit) - mention: Added the configuration option for customizing the maximum number of items in the list after typing the trigger character. Closes #10479. (commit)
- real-time-collaboration: Introduced the
RealTimeCollaborationClient#serverHistory
property. See the API reference for more information.
Bug fixes
- comments: Features that do not change the content, should work properly in editor modes with restricted write permissions (e.g. read-only mode). See ckeditor/ckeditor5#10670.
- comments: The comment data was not updated on remote clients after the local client edited the comment.
- engine: DOM selection updates in
Renderer
when the selection is made using the mouse was blocked. Random glitching in Chrome when the user starts selection in a link (or a marker) at the beginning of the block was limited. Closes #10562. (commit) - engine: Makes order of markers in downcast data pipeline consistent. Thanks @bendemboski! Closes #10650. (commit)
- engine: Fixed a bug in the selection post-fixer (when the selection is stuck in a limit element that cannot contain text). Closes #10487. (commit)
- export-pdf: Features that do not change the content should work properly in editor modes with restricted write permissions (e.g. read-only mode). See ckeditor/ckeditor5#10670.
- find-and-replace: The
FindCommand
andFindNextCommand
commands should work properly in editor modes with restricted write permissions (e.g. read-only mode). Closes #10636. (commit) - find-and-replace: Do not replace find results removed by collaborators that landed in the
$graveyard
root. (commit) - html-embed: Embed buttons should reflect the read-only state of the editor and the HTML embed command. Closes #10182. (commit)
- html-support: Adds HTML support for all headings given in the configuration of the headings feature. Closes #10539. (commit)
- mention: Th mention panel will now hide when the editor becomes read-only. Closes #4645. (commit)
- restricted-editing: The feature should work properly in editor modes with restricted write permissions (e.g. read-only mode). Closes #10634. (commit)
- select-all: The
SelectAllCommand
command should work properly in editor modes with restricted write permissions (e.g. read-only mode). Closes #10635. (commit) - source-editing: Calling
editor.getData()
while in the source editing mode should return the data from the source editor passed through the model. Closes #10505. (commit) - source-editing: Improve source editing textarea field size and scrolling behaviour. Closes #10422. (commit)
- source-editing: Safari browser uses monospace font for text in source editing mode. Closes #10585. (commit)
- table: The
SelectColumnCommand
andSelectRowCommand
commands should work properly in editor modes with restricted write permissions (e.g. read-only mode). See #10635. (commit) - table: Color dropdown buttons in the table properties form should not be misaligned in Safari. Closes #10589. ([commit](82dbfba48493573ab32829b64a3...
v30.0.0
Release highlights
We are happy to announce the release of CKEditor 5 v30.0.0.
This release introduces the following new features:
- Allow reverting text transformations by pressing Backspace.
- Cut down the search time in the Find & replace feature.
There were also a few bug fixes:
- Fixed invalid cell property after pasting a table to the editor from Word.
- The table toolbar now respects the
viewportTopOffset
configuration. - Automatic text transformation: the dates get no longer turn into fractions.
- The toolbar no longer loses focus after escaping from the find and replace dropdown.
MAJOR BREAKING CHANGES ℹ️
- The
config.toolbar.viewportTopOffset
property was moved toconfig.ui.viewportOffset
and it now accepts an object.
MINOR BREAKING CHANGES ℹ️
- engine: The
Matcher
class is more strict in handlingElement
s provided to thematch()
andmatchAll()
methods. It will not accept otherNode
s now. - html-support: The public helper function
html-support/converters~disallowedAttributesConverter
has been removed due to a change in the approach to filtering disallowed elements and attributes. - widget: The
centeredBalloonPositionForLongWidgets()
helper was removed from widget utils. UseBalloonPanelView.defaultPositions.viewportStickyNorth
instead. See #9892. - widget:
toWidgetEditable()
will now set highlight handling for the editable element. If you used this method in conversion in your custom plugin it may affect your element styling when there is a marker on that element (e.g. a comment or a suggestion).
Features
- autoformat: Allowed reverting the automatic Markdown-like formatting by pressing Backspace. See #10413. (commit)
- html-support: Added the General HTML Support integration for the image feature. Closes #9916. (commit)
- image: Allowed using backspace to undo automatic the image insertion transformations. Closes #10413. (commit)
- ui: Introduced a new position type (
viewportStickyNorth
) inBalloonPanelView.defaultPositions
. See #9892. (commit) - Introduced the
editor.ui.viewportOffset
property, which allows modifying the viewport's offset in runtime. This value is used by the editor e.g. to position its sticky toolbar and contextual balloons. Additionally, theconfig.toolbar.viewportTopOffset
property was moved toconfig.ui.viewportOffset
and it now accepts an object. Closes #9672. (commit)
Bug fixes
- engine: Added system colors names from the CSS Color Module Level 3 so that pasting tables from MS Word works correctly. Closes #10383. (commit)
- engine: Fixed the
Matcher
class handling global flag in theRegExp
s patterns. Closes #10282. (commit) - find-and-replace: The toolbar should not lose focus after escaping from the find and replace dropdown. Closes #10420. (commit)
- find-and-replace: Improved the performance of the find feature by reducing the number of
model.change()
calls. Closes #10302. (commit) - image: Attributes from a marker conversion descriptor will now be correctly added on view elements during marker downcast. Closes #10425. (commit)
- revision-history: Fixed widget highlight in the revision comparison in some cases with nested edits added by different users.
- table: Made reordering table rows and columns possible without breaking the view in tables with heading rows or heading columns. Closes #10463. (commit)
- table: Cancelling the table cell properties UI no longer results with a warning in the console. Closes #6266. (commit)
- table: Fixed handling of a non-collapsed selection inside a table cell. Closes #10391. (commit)
- track-changes: Fixed crash happening in some scenarios in track changes mode after an image element split a non-paragraph element.
- track-changes: Fixed missing data-suggestion attributes on table cells and image captions.
- typing: Restricted mathematical text transformation, so that it requires no alphanumeric character before and after the fraction. Closes #9170. (commit)
- ui: The editor no longer crashes when a button has
withKeystroke
set totrue
but nokeystroke
property is provided. Closes #9412. (commit) - widget: Fixed arrow keys navigation when there is an inline widget at the edge of a table cell. Closes #9380. (commit)
Other changes
- engine: The
MarkerCollection#has()
method now also accepts an instance of a marker. Closes #9985. (commit) - image: Upcast images with or without the empty
src
attribute. Closes #9238. (commit) - image: Prevent leaving an unconsumed
figure
element after conversion. (commit) - link: Upcast linked images with or without the empty
src
attribute. See #9238. (commit) - media: The
figure
ele...
v29.2.0
Release highlights
We are happy to announce the release of CKEditor 5 v29.2.0.
This release introduces several new features:
- Redesigned the find and replace panel and introduced a few improvements to the feature itself.
- Added the possibility to create a localized editor when using DLL builds.
- Improved the performance when pasting large images.
There were also a few bug fixes:
- Switching to source editing no longer scrolls to the end of the content.
- The highlight feature can now be used while typing.
- Pasted HTML comments are no longer filtered out.
MINOR BREAKING CHANGES ℹ️
- find-and-replace: The layout, styling, and view structure of the find and replace form have changed radically, which may affect integrations that either customized or extended this form (see #10229).
- revision-history: The revision data now includes a new property:
authorsIds
. This property needs to be handled (saved and loaded) similarly to other revision properties. For revisions that are already saved in your database, set this value to an array with one string, equal to thecreatorId
value (e.g.["user1"]
). Check the updated revision history integration guide to see an example. - revision-history: The documentation for revision history adapter has been updated. Please check the
RevisionHistoryAdapter#addRevision()
andupdateRevision()
documentation to make sure that you correctly handle all the data passed to those methods.
Features
- core: Added the "cog" icon to the core icon set (see #10229). (commit)
- find-and-replace: Made it possible to cycle find results by using Enter and Shift+Enter keystrokes. Closes #10012. (commit)
- html-support: Added general HTML support integration for the media embed feature. Closes #9918. (commit)
- mention: Keyboard shortcuts to accept mentions can be customized using the
config.mention.commitKeys
configuration option. Closes #4665. (commit)
Bug fixes
- comments:
Comment#setAttribute()
andComment#removeAttribute()
will now correctly set the attribute value and fire the adapter call also for comments created by other users. - find-and-replace: Changing the search text should reset the results. Closes #10304. (commit)
- find-and-replace: Toggling search options should reset the results. Closes #10021. (commit)
- find-and-replace: The find and replace form should be responsive. Closes #10019. (commit)
- find-and-replace: Allows search term to contain a trailing/leading space when searching "whole words only". Closes #10131. (commit)
- html-support: Filters out all pasted HTML comments. Closes #10213. (commit)
- html-support: Extended the schema definition for
$root
to allow storing a comment's content as the$root
attribute. Closes #10274. (commit) - revision-history: Enabled multiple authors in one revision. Introduced the
authorsIds
property in the revision data. - revision-history: Visual improvements on how nested changes are displayed.
- source-editing: The selection is now set at the beginning of the source editing view. Closes #10180. (commit)
- source-editing: The source editing feature will send a warning to the console when the restricted editing feature is loaded. Closes #10228. (commit)
- theme-lark: The label of the labeled field should stay on the top when the field is disabled and not empty to not cover the field's text (see #10229). (commit)
Other changes
- ckeditor5: The
ckeditor5
package offers translation files for several core CKEditor 5 packages:utils
,core
,engine
,ui
,clipboard
,enter
,paragraph
,select-all
,typing
,undo
,upload
, andwidget
, used in the DLL builds. (commit) - clipboard: The
DataTransfer.files
property is not evaluated more than once. Closes #10287. (commit) - comments: Raised comments character limit to 65000.
- core: Merged a duplicated translation context from
ckeditor5-ui
andckeditor5-find-and-replace
packages. Closes #10400. (commit) - find-and-replace: Moved the search result translation context to ckeditor5-core. Closes #10400. (commit)
- find-and-replace: Visually revamped the find and replace form. Closes #10229. (commit)
- find-and-replace: Increased the contrast between selected and unselected find and replace results. Closes #10242. (commit)
- highlight: Toggling highlight does not remove it when the caret is at the end of the highli...
v29.1.0
Release highlights
We are happy to announce the release of CKEditor 5 v29.1.0.
This release introduces several new features:
- The Content minimap feature, which aids document navigation. Read more about minimap.
- Support for HTML comments.
- Integration with the
Autosave
plugin in Revision history. - Possibility to enforce tables to contain a header row by default.
- Several improvements in the Find and replace feature.
There were also a few bug fixes:
- The code block added with autoformatting will now remember the language of the previously inserted block.
- Problems with pasting lists from Word have been eliminated (#9055, #9954).
MINOR BREAKING CHANGES ℹ️
- html-embed: The preview content will not be centered anymore.
- image: Several conversion helpers have been renamed and removed from the public API:
viewFigureToModel() -> upcastImageFigure()
,srcsetAttributeConverter() -> downcastSrcsetAttribute()
,modelToViewAttributeConverter() -> downcastImageAttribute()
.
- revision-history:
RevisionTracker#saveRevision()
was renamed toRevisionTracker#updateRevision()
. This is to better reflect what the method actually does. Since revision locking was introduced,saveRevision( { name: ... } )
calls should be replaced withupdateRevision( { name: ..., isLocked: true } )
calls. - revision-history: The
Revision#name
property is now read-only. You need to useRevision#setName()
instead.
Features
- autosave: Introduced the
Autosave#save()
function. Closes #10215. (commit) - engine: Introduced the new (
skipComments
) option inDomConverter#domToView()
(false
by default) to make it possible to decide whether HTML comments should be removed from the data. (commit) - html-support: Introduced the HTML comment plugin. Closes #8822. (commit)
- html-support: Added support for elements that can act both as a paragraph and a sectioning element depending on the content context. Closes #10085. (commit)
- html-support: Added General HTML Support integration for Table feature. Closes #9914. (commit)
- image: Implemented the
<picture>
element support in the image feature. Closes #9833. (commit) - minimap: Basic implementation of the content minimap feature. Closes #10079. (commit)
- revision-history: Introduced the possibility to update a revision after it was created. Provided a way to integrate revision history with the
Autosave
plugin. See the revision history guide. - revision-history: Introduced the
Revision#setName()
function.Revision#name
is now read-only. - revision-history: Introduced several properties:
Revision#isLocked
,Revision#lock()
andRevisionTracker#isLocked
. - table: Introduced an editor configuration option allowing to set default headings for newly created tables. Closes #10039. (commit)
- track-changes: Enabled Export to Word in track changes mode.
Bug fixes
- autoformat: Autoformat will apply the previous language choice for the code block feature. Closes #10005. (commit)
- autosave: Autosave callback should not be called while the editor is initialized. Closes #10214. (commit)
- build-decoupled-document: The editing area in the sample should have a solid white background. Closes #10095. (commit)
- collaboration-core: User initials for user names longer than two words now will be composed of the first letters of the first and last word of the name. This is better for names with a middle name or with a last name having a prefix.
- engine: White spaces around inline object elements such as
<img>
or<button>
should not be lost in data. Closes #10147. (commit) - engine: Matcher should not match style and class attributes with the object
attributes
pattern. Closes #9813. (commit) - find-and-replace: Find and replace feature now works correctly with a multi-root editor. Closes #10146. (commit)
- link: Link decorators should use classes and styles properties instead of directly matching style and class HTML attributes. Closes #9813. (commit)
- paste-from-office: Fixed a crash when pasting lists from Word to the editor. Closes #9055, #9954. (commit)
- revision-history: The
Autosave
plugin now will be filtered byRevisionHistory
plugin, so it will not be included in the revision history view editor instance as this caused errors. - revision-history: Tables will be now correctly handled after a change in a table was undone.
- table: Fixed model mappings in a table cell if a paragraph is bound to its parent. (commit)
- table: Fixed editor freezing when providing invalid
colspan
orrowspan
attribute values. Closes #10042. (commit) - track-changes: The
Autosave
plugin will no longer caus...
v29.0.0
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](https://github.c...
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](https://github.com/ckeditor/cke...