Skip to content

Releases: ckeditor/ckeditor5

v34.0.0

12 Apr 08:45
Compare
Choose a tag to compare

Release highlights

We are happy to announce the release of CKEditor 5 v34.0.0.

This release introduces the following new features:

There were also a few bug fixes:

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 by Editor#enableReadOnlyMode( lockId ) and Editor#disableReadOnlyMode( lockId ), which allow changing the Editor#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 the AttributeElement elements can wrap any view element (according to positions). Make sure that you are not wrapping any of the ContainerElement elements by accident by not checking the target in the converter. These would previously get wrapped by the AttributeElement element which would immediately be removed by the ContainerElement element within it so there would be no visible effect.
  • engine: The handling of Tab and Shift+Tab keystrokes have been switched to the 'tab' view document event across the project. If your integration uses KeystrokeHandler for Tab key handling, we recommend you migrate to the 'tab' event to avoid unpredicted errors.
  • engine: If your integration uses the Model#insertContent() and findOptimalInsertionRange() methods to insert widgets into the content, we recommend you migrate your code to the Model#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 model Schema (see #11197). (commit)
  • engine: Introduced the TabObserver observer that allows listening to pressing down the Tab 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 the InsertParagraph 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 the mergeViewElementAttributes() function. Closes #10657, #11450, #11477. (commit)
  • html-support: Skip inl...
Read more

v33.0.0

09 Mar 08:14
Compare
Choose a tag to compare

Release highlights

We are happy to announce the release of CKEditor 5 v33.0.0.

This release introduces the following new features:

There were also a few bug fixes:

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 by EditingController#reconvertItem() (see #10659).
  • engine: The DowncastDispatcher will throw an error if any of the model items were not consumed while converting. Read the conversion-model-consumable-not-consumed error documentation for more information.
  • engine: The DowncastDispatcher#conversionApi property is no longer available. The instances of DowncastConversionApi are created at the start of conversion.
  • engine: Support for the triggerBy option for downcast helpers was removed and replaced with the new elementToStructure() 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() and convertAttributes() 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 default figure>caption markup in the data pipeline (it outputs the table as table>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 of Writer#updateMarker() for marker reconversion purposes. Implemented the EditingController#reconvertItem() method to replace Differ#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...
Read more

v32.0.0

31 Jan 10:19
Compare
Choose a tag to compare

Release highlights

We are happy to announce the release of CKEditor 5 v32.0.0.

This release introduces the following new features:

Read more in https://ckeditor.com/blog/ckeditor-5-v32.0.0-with-new-list-properties-support-for-the-script-tag-and-enhanced-mentions/

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. Use Batch#isUndoable, Batch#isLocal, Batch#isUndo and Batch#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 uses RevisionHistoryAdapter#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. Use Batch#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 and Model#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 in CommentThreadView, CommentView, and SuggestionThreadView 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() and Annotations#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 and start HTML attributes). Closes #10673. (commit)
  • paste-from-office: Added support for start index in ordered lists. Closes #11043. (commit)
  • revision-history: Introduced Revision#fromVersion and Revision#toVersion.
  • revision-history: Introduced new methods in RevisionHistory plugin: #addRevisionData(), #getRevision(), #getRevisions().
  • ui: Introduced the InputNumberView class and the createLabeledInputNumber() helper for creating number inputs (see #10877). (commit)
  • ui: Introduced the InputView class for other inputs such as InputTextView 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. The Batch constructor and Model#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 in PageNavigatorView.
  • 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...
Read more

v31.1.0

07 Dec 08:11
Compare
Choose a tag to compare

Release highlights

We are happy to announce the release of CKEditor 5 v31.1.0.

This release introduces the following new features:

There were also a few bug fixes:

MINOR BREAKING CHANGES ℹ️

  • table: Changed table elements' attributes' names introduced by the TablePropertiesEditing plugin by prefixing them with table 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 the TableCellPropertiesEditing plugin by prefixing them with tableCell 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 the modelAttributes 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):

Releases containing new features:

Other releases:

Read more

v31.0.0

26 Oct 07:10
Compare
Choose a tag to compare

Release highlights

We are happy to announce the release of CKEditor 5 v31.0.0.

This release introduces the following new features:

There were also a few bug fixes:

MAJOR BREAKING CHANGES ℹ️

  • html-embed: The InsertHtmlEmbedCommand and UpdateHtmlEmbedCommand have been replaced by HtmlEmbedCommand which is now responsible for both tasks. The command can be executed via editor.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 a get 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 and FindNextCommand 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 and SelectRowCommand 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...
Read more

v30.0.0

29 Sep 07:10
Compare
Choose a tag to compare

Release highlights

We are happy to announce the release of CKEditor 5 v30.0.0.

This release introduces the following new features:

There were also a few bug fixes:

MAJOR BREAKING CHANGES ℹ️

  • The config.toolbar.viewportTopOffset property was moved to config.ui.viewportOffset and it now accepts an object.

MINOR BREAKING CHANGES ℹ️

  • engine: The Matcher class is more strict in handling Elements provided to the match() and matchAll() methods. It will not accept other Nodes 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. Use BalloonPanelView.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) in BalloonPanelView.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, the config.toolbar.viewportTopOffset property was moved to config.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 the RegExps 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 to true but no keystroke 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...
Read more

v29.2.0

31 Aug 07:10
Compare
Choose a tag to compare

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:

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 the creatorId 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() and updateRevision() documentation to make sure that you correctly handle all the data passed to those methods.

Features

Bug fixes

  • comments: Comment#setAttribute() and Comment#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, and widget, 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 and ckeditor5-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...
Read more

v29.1.0

04 Aug 07:00
Compare
Choose a tag to compare

Release highlights

We are happy to announce the release of CKEditor 5 v29.1.0.

This release introduces several new features:

There were also a few bug fixes:

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 to RevisionTracker#updateRevision(). This is to better reflect what the method actually does. Since revision locking was introduced, saveRevision( { name: ... } ) calls should be replaced with updateRevision( { name: ..., isLocked: true } ) calls.
  • revision-history: The Revision#name property is now read-only. You need to use Revision#setName() instead.

Features

  • autosave: Introduced the Autosave#save() function. Closes #10215. (commit)
  • engine: Introduced the new (skipComments) option in DomConverter#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() and RevisionTracker#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 by RevisionHistory 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 or rowspan attribute values. Closes #10042. (commit)
  • track-changes: The Autosave plugin will no longer caus...
Read more

v29.0.0

07 Jul 07:10
Compare
Choose a tag to compare

Release highlights

We are happy to announce the release of CKEditor 5 v29.0.0.

This release introduces several new features:

There were also a few bug fixes:

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 the ImageBlock and ImageInline features now (previously it only supported block images). If you do not want inline images to be allowed, consider replacing the Image plugin with ImageBlock 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 the ImageBlockEditing and ImageInlineEditing plugins. The logic remaining in the ImageEditing is common for both ImageBlockEditing and ImageInlineEditing 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 a ToggleImageCaptionCommand 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 the figure.image > a::after (for linked block images) and a span.image-inline::after (for linked inline images) CSS selectors instead.
  • image: The srcsetAttributeConverter() and modelToViewAttributeConverter() conversion helpers now require the imageType 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:
    • The CKFinder plugin is no longer automatically importing the Image plugin as a dependency.
    • The EasyImage plugin is no longer automatically importing the Image plugin as a dependency.
  • 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 as getCaptionFromImageModelElement()
    • The matchImageCaption() helper is now available as matchImageCaptionViewElement()
    • The defaultIcons are now available as DEFAULT_ICONS
    • The defaultStyles are now available as DEFAULT_OPTIONS
    • The findOptimalInsertionPosition() helper is now findOptimalInsertionRange() 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 as isLinkableElement()
    • Some helpers from the image utils module (@ckeditor/ckeditor5-image/src/image/utils.js) have been moved to the ImageUtils plugin. The helpers are still accessible via the editor.plugins.get( 'ImageUtils' ) namespace, for instance, editor.plugins.get( 'ImageUtils' ).insertImage( ... )
  • The API of several functions or modules has been changed. Refer to the documentation to learn more. This list of changes includes:
  • 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...
Read more

v28.0.0

07 Jun 06:42
Compare
Choose a tag to compare

Release highlights

We are happy to announce the release of CKEditor 5 v28.0.0.

This release introduces several new features:

There were also a few bug fixes:

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.

MINOR BREAKING CHANGES ℹ️

  • engine: Styles definitions for the border:* property produced by the StylesProcessor will now be merged as a single border:* property if all its properties (width, style, and color) for all edges (top, right, bottom, left) are the same.
  • table: The TablePropertiesView and TableCellPropertiesView classes require additional property in the object as the second constructor argument (options.defaultTableProperties for the table and options.defaultTableCellProperties for table cells).
  • table: The upcastBorderStyles() conversion helper requires a third argument called defaultBorder. 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 with conversionHelper( conversion, { /* ... */ } ).
  • table: Values for the borderColor, borderStyle, borderWidth, and padding 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 the MouseObserver class. Closes #9338. (commit)
  • engine: The StylesProcessor reducer for the border:* CSS property was extended to be able to merge to the border:* property if all its properties (width, style, and color) are specified. Otherwise, the border-(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 to 0. 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() and attributeToAttribute() functions should not call the model.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...
Read more