New Features:
-
#835: Extended support for pasting from external applications:
- Added support for pasting rich content from Google Docs with the Paste from Google Docs plugin.
- Added a new Paste Tools plugin for unified paste handling.
- #3315: Added support for strikethrough in the BBCode plugin. Thanks to Alexander Kahl!
-
#3175: Introduced selection optimization mechanism for handling incorrect selection behaviors in various browsers:
- #3256: Triple-clicking in the last table cell and deleting content no longer pulls the content below into the table.
- #3118: Selecting a paragraph with a triple-click and applying a heading applies the heading only to the selected paragraph.
-
#3161: Double-clicking a
<span>
element containing just one word creates a correct selection including the clicked<span>
only.
- #3359: Improved dialog positioning and behavior when the dialog is resized or moved, or the browser window is resized.
-
#2227: Added the
config.linkDefaultProtocol
configuration option that allows setting the default URL protocol for the Link plugin dialog. -
#3240: Extended the
CKEDITOR.plugins.widget#mask
property to allow masking only the specified part of a widget. -
#3138: Added the possibility to use the
widgetDefinition.getClipboardHtml()
method to customize the widget HTML during copy, cut and drag operations.
Fixed Issues:
- #808: Fixed: Widgets and other content disappear on drag and drop in read-only mode.
- #3260: Fixed: Widget drag handler is visible in read-only mode.
- #3261: Fixed: A widget initialized using the dialog has an incorrect owner document.
- #3198: Fixed: Blurring and focusing the editor when a widget is focused creates an additional undo step.
-
#2859: [IE, Edge] Fixed: Various editor UI elements react to right mouse button click:
- #2845: Rich Combo.
- #2857: List Block.
- #2858: Menu.
- #3158: [Chrome, Safari] Fixed: Undo plugin breaks with the filling character.
- #504: [Edge] Fixed: The editor's selection is collapsed to the beginning of the content when focusing the editor for the first time.
-
#3101: Fixed:
CKEDITOR.dom.range#_getTableElement()
returnsnull
instead of a table element for edge cases. -
#3287: Fixed:
CKEDITOR.tools.promise
initializes incorrectly if an AMD loader is present. -
#3379: Fixed: Incorrect
CKEDITOR.editor#getData()
call when inserting content into the editor. - #941: Fixed: An error is thrown after styling a table cell text selected using the native selection when the Table Selection plugin is enabled.
- #3136: [Firefox] Fixed: Clicking Balloon Toolbar items removes the native table selection.
-
#3381: [IE8] Fixed: The
CKEDITOR.tools.object.keys()
method does not accept non-objects. - #2395: [Android] Fixed: Focused input in a dialog is scrolled out of the viewport when the soft keyboard appears.
- #453: Fixed: Link dialog has an invalid width when the editor is maximized and the browser window is resized.
- #2138: Fixed: An email address containing a question mark is mishandled by the Link plugin.
- #14613: Fixed: Race condition when loading plugins for an already destroyed editor instance throws an error.
- #2257: Fixed: The editor throws an exception when destroyed shortly after it was created.
- #3115: Fixed: Destroying the editor during the initialization throws an error.
- #3354: [iOS] Fixed: Pasting no longer works on iOS version 13.
- #3423 Fixed: Bookmarks can be created inside temporary elements.
API Changes:
-
#3154: Added the
CKEDITOR.tools.array.some()
method. -
#3245: Added the
CKEDITOR.plugins.undo.UndoManager.addFilterRule()
method that allows filtering undo snapshot contents. -
#2845: Added the
CKEDITOR.tools.normalizeMouseButton()
method. -
#2975: Added the
CKEDITOR.dom.element#fireEventHandler()
method. -
#3247: Extended the
CKEDITOR.tools.bind()
method to accept arguments for bound functions. -
#3326: Added the
CKEDITOR.dom.text#isEmpty()
method. -
#2423: Added the
CKEDITOR.plugins.dialog.getModel()
andCKEDITOR.plugins.dialog.getMode()
methods with theirCKEDITOR.plugin.definition
counterparts, allowing to get the dialog subject of a change. -
#3124: Added the
CKEDITOR.dom.element#isDetached()
method.
Fixed Issues:
- #3220: Fixed: Prevent Paste from Word filter from deleting Page Break elements on paste.
New Features:
- #2598: Added the Page Break feature support for the Paste from Word plugin.
- #1490: Improved the Paste from Word plugin to retain table cell borders.
- #2870: Improved support for preserving the indentation of list items for nested lists pasted with the Paste from Wordplugin.
-
#2048: New
CKEDITOR.config.image2_maxSize
configuration option for the Enhanced Image plugin that allows setting a maximum size that an image can be resized to with the resizer. - #2639: The Color Dialog plugin now shows the current selection's color when opened.
- #2084: The Table Tools plugin now allows to change the cell height unit type to either pixels or percent.
- #3164: The Table Tools plugin now accepts floating point values as the table cell width and height.
Fixed Issues:
- #2672: Fixed: When resizing an Enhanced Image to a minimum size with the resizer, the image dialog does not show actual values.
-
#1478: Fixed: Custom colors added to Color Button with the
config.colorButton_colors
configuration option in the form of a label or code do not work correctly. - #1469: Fixed: Trying to get data from a nested editable inside a freshly pasted widget throws an error.
- #2235: Fixed: An Image in a table cell has an empty URL field when edited from the context menu opened by right-click when the Table Selection plugin is in use.
- #3098: Fixed: Unit pickers for table cell width and height in the Table Tools plugin have a different width.
-
#2923: Fixed: The CSS
windowtext
color is not correctly recognized by theCKEDITOR.tools.style.parse
methods. -
#3120: [IE8] Fixed: The
CKEDITOR.tools.extend()
method does not work with theDontEnum
object property attribute. -
#2813: Fixed: Editor HTML insertion methods (
editor.insertHtml()
,editor.insertHtmlIntoRange()
,editor.insertElement()
andeditor.insertElementIntoRange()
) pollute the editable with empty<span>
elements. -
#2751: Fixed: An editor with
config.enterMode
set toENTER_DIV
alters pasted content.
API Changes:
-
#1496: The Balloon Toolbar plugin exposes the
CKEDITOR.ui.balloonToolbar.reposition()
andCKEDITOR.ui.balloonToolbarView.reposition()
methods. -
#2021: Added new
CKEDITOR.dom.documentFragment.find()
andCKEDITOR.dom.documentFragment.findOne()
methods. -
#2700: Added the
CKEDITOR.tools.array.find()
method. -
#3123: Added the
CKEDITOR.tools.object.keys()
method. -
#3123: Added the
CKEDITOR.tools.object.entries()
method. -
#3123: Added the
CKEDITOR.tools.object.values()
method. -
#2821: The
CKEDITOR.template#source
property can now be a function, so it can return the changed template values during the runtime. Thanks to Jacek Pulit! -
#2598: Added the
CKEDITOR.plugins.pagebreak.createElement()
method allowing to create a Page Break pluginCKEDITOR.dom.element
instance. - #2748: Enhanced error messages thrown when creating an editor on a non-existent element or when trying to instantiate the second editor on the same element. Thanks to Byran Zaugg!
-
#2698: Added the
CKEDITOR.htmlParser.element.findOne()
method. -
#2935: Introduced the
CKEDITOR.config.pasteFromWord_keepZeroMargins
configuration option that allows for keeping anymargin-*: 0
style that would be otherwise removed when pasting content with the Paste from Wordplugin. -
#2962: Added the
CKEDITOR.tools.promise
class. -
#2924: Added the
CKEDITOR.tools.style.border
object wrapping CSS border style helpers under a single type. -
#2495: The Table Selection plugin can now be disabled for the given table with the
data-cke-tableselection-ignored
attribute. -
#2692: Plugins can now expose information about the supported environment by implementing the
pluginDefinition.isSupportedEnvironment()
method.
Other Changes:
-
#2741: Replaced deprecated
arguments.callee
calls with named function expressions to allow the editor to work in strict mode. -
#2924: Marked
CKEDITOR.tools.style.parse.border()
as deprecated in favor of theCKEDITOR.tools.style.border.fromCssRule()
method. -
#3132: Marked
CKEDITOR.tools.objectKeys()
as deprecated in favor of theCKEDITOR.tools.object.keys()
method.
Fixed Issues:
- #589: Fixed: The editor causes memory leaks in create and destroy cycles.
- #1397: Fixed: Using the dialog to remove headers from a table with one header row only throws an error.
- #1479: Fixed: Justification for styled content in BR mode is disabled.
- #2816: Fixed: Enhanced Image resize handler is visible in read-only mode.
- #2874: Fixed: Enhanced Image resize handler is not created when the editor is initialized in read-only mode.
- #2775: Fixed: Clipboard paste buttons have wrong state when read-only mode is set by the mouse event listener with the Div Editing Area plugin.
- #1901: Fixed: Cannot open the context menu over a Widget with the Shift+F10 keyboard shortcut.
Other Changes:
- Updated WebSpellChecker (WSC) and SpellCheckAsYouType (SCAYT) plugins:
- Language dictionary update: German language was extended with over 600k new words.
- Language dictionary update: Swedish language was extended with over 300k new words.
- Grammar support added for Australian and New Zealand English, Polish, Slovak, Slovenian and Austrian languages.
- Changed wavy red and green lines that underline spelling and grammar errors to straight ones.
-
#55: Fixed: WSC does not use
CKEDITOR.getUrl()
when referencing style sheets. -
#166: Fixed: SCAYT does not use
CKEDITOR.getUrl()
when referencing style sheets. - #56: [Chrome] Fixed: SCAYT/WSC throws errors when running inside a Chrome extension.
- Fixed: After removing a dictionary, the words are not underlined and considered as incorrect.
- Fixed: The Slovenian (
sl_SL
) language does not work. - Fixed: Quotes with code
U+2019
(Right single quotation mark) are considered separators. - Fixed: Wrong error message formatting when the service ID is invalid.
- Fixed: Absent languages in the Languages tab when using SCAYT with the Shared Spaces plugin.
Fixed Issues:
- #2721, #487: Fixed: The order of sublist items is reversed when a higher level list item is removed.
- #2527: Fixed: Emoji autocomplete order does not prioritize emojis with the name starting from the used string.
- #2572: Fixed: Icons in the Emoji dropdown navigation groups are not centered.
- #1191: Fixed: Items in the elements path are draggable.
- #2292: Fixed: Dropping a list with a link on the editor's margin causes a console error and removes the dragged text from editor.
- #2756: Fixed: The Auto Link plugin causes an error when typing in the source editing mode.
-
#1986: Fixed: The Cell Properties dialog from the Table Tools plugin shows styles that are not allowed through
config.allowedContent
. - #2565: [IE, Edge] Fixed: Buttons in the editor toolbar are activated by clicking them with the right mouse button.
- #2792: Fixed: A bug in the Copy Formatting plugin that caused the following issues: