- Fixed XSS vulnerability in the Preview plugin reported by Mario Heiderich of Cure53.
An upgrade is highly recommended!
- #12164: Added the "Justify" option to the "Horizontal Alignment" drop-down in the Table Cell Properties dialog window.
- #12110: Fixed: Editor crash after deleting a table. Thanks to Alin Purcaru!
- #11897: Fixed: Enter key used in an empty list item creates a new line instead of breaking the list. Thanks to noam-si!
- #12140: Fixed: Double-clicking linked widgets opens two dialog windows.
- #12132: Fixed: Image is inserted with
heightstyles even when they are not allowed.
- #9317: [IE] Fixed:
config.disableObjectResizingdoes not work on IE. Note: We were not able to fix this issue on IE11+ because necessary events stopped working. See a last resort workaround and make sure to support our complaint to Microsoft.
- #9638: Fixed: There should be no information about accessibility help available under the Alt+0 keyboard shortcut if theAccessibility Help plugin is not available.
- #8117 and #9186: Fixed: In HTML5
<meta>tags should be allowed everywhere, including inside the
- #10422: Fixed:
config.fillEmptyBlocksnot working properly if a function is specified.
The CKEditor testing environment is now publicly available. CKEditor tests can be found in the
tests/ directory. Read more about how to set up the environment and execute tests in the CKEditor Testing Environment guide.
Please note that the "
tests" folder is not available in release packages, it is available only in the development version of CKEditor available on GitHub.
- #11909: Introduced a parameter to prevent the
editor.setData()method from recording undo snapshots.
- #11757: Fixed: Imperfections in the Moono skin. Thanks to danyaPostfactum!
- #10091: Blockquote should be treated like an object by the styles system. Thanks to dan-james-deeson!
- #11478: Fixed: Issue with passing jQuery objects to adapter configuration.
- #10867: Fixed: Issue with setting encoded URI as image link.
- #11983: Fixed: Clicking a nested widget does not focus it. Additionally, performance of the
widget.repository.getByElement()method was improved.
- #12000: Fixed: Nested widgets should be initialized on
- #12022: Fixed: Outer widget's drag handler is not created at all if it has any nested widgets inside.
- #11960: [Blink/WebKit] Fixed: The caret should be scrolled into view on Backspace and Delete (covers only the merging blocks case).
- #11306: [OSX][Blink/WebKit] Fixed: No widget entries in the context menu on widget right-click.
- #11957: Fixed: Alignment labels in the Enhanced Image dialog window are not translated.
- #11980: [Blink/WebKit] Fixed:
<span>elements created when joining adjacent elements (non-collapsed selection).
- #12009: [Nested widgets] Integration with the Magic Line plugin.
- #11387: Fixed:
role="radiogroup"should be applied only to radio inputs' container.
- #7975: [IE8] Fixed: Errors when trying to select an empty table cell.
- #11947: [Firefox+IE11] Fixed: Shift+Enter in lists produces two line breaks.
- #11972: Fixed: Feature detection in the
element.setText()method should not trigger the layout engine.
- #7634: Fixed: The Flash Dialog plugin omits the
allowFullScreenparameter in the editor data if set to
- #11910: Fixed: Enhanced Image does not take
config.baseHrefinto account when updating image dimensions.
- #11753: Fixed: Wrong
checkDirty()method value after focusing or blurring a widget.
- #11830: Fixed: Impossible to pass some arguments to CKBuilder when using the
- #11945: Fixed: Form Elements plugin should not change a core method.
- #11384: [IE9+] Fixed:
IndexSizeErrorthrown when pasting into a non-empty selection anchored in one text node.
- #11861: Fixed: [Webkit/Blink] Span elements created while joining adjacent elements. Note: This patch only covers cases when Backspace or Delete is pressed on a collapsed (empty) selection. The remaining case, with a non-empty selection, will be fixed in next release.
- #10714: Fixed: [iOS] Selection and drop-downs are broken if touch listener is used due to Webkit bug. Thanks to Arty Gus!
- #11911: Fixed setting the
dirattribute for preloaded language in CKEDITOR.lang. Thanks to Akash Mohapatra!
- #11926: Fixed: Code snippet does not decode HTML entities when loading code from the
- #11223: Fixed: Issue when Protected Source was not working in the title element.
- #11859: Fixed: Removed Source Dialog plugin from being required in Code Snippet sample.
- #11754: Fixed: Infinite loop in Google Chrome when content contains not closed attributes.
- #11848: Fixed:
editor.insertElement()throwing an exception in IE when there was no selection in editor.
- #11801: Fixed: Editor anchors unavailable when linking Enhanced Image widget.
- #11626: Fixed: Table Resize sets invalid width.
- #11872: Made
element.addClass()chainable symmetrically to
- #11813: Fixed: Link lost while pasting captioned image and restoring undo snapshot (Enhanced Image).
- #11814: Fixed: Link and Unlink entries persistently displayed in Enhanced Image context menu.
- #11839: Fixed: [IE9] Caret jumps out of editable area when resizing editor in source mode.
- #11822: Fixed: [Webkit] Editing Anchors by double-click broken in some cases.
- #11823: Fixed: [IE8] Table Resize throws error over scrollbar.
- #11788: Fixed: It is not possible to change language back to Not set in Code Snippet dialog.
- #11788: Fixed: Filter rules are not applied inside elements with
contenteditableattribute set to
- #11798: Fixed: Inserting non-editable element inside a table cell breaks the table badly.
- #11793: Fixed: Drop-down is not "on" when clicking it while editor is blurred.
- #11850: Fixed: Fake objects with contenteditable set to
falseare not downcasted properly.
- #11811: Fixed: Widget's data are not encoded correctly when passed to attribute.
- #11777: Fixed encoding ampersand in the Mathematical Formulas plugin.
- #11880: Fixed: [IE8-9] Linked image has a default thick border.
- Marked the
editor.beforePasteevent as deprecated.
- The default class of captioned images has changed to
caption). Please note that once edited in CKEditor 4.4+, all existing images of the
<figure class="caption">) will be filtered out unless the
config.image2_captionedClassoption is set to
caption. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations.
- Widgets without defined buttons are no longer registered automatically to the Advanced Content Filter. Before CKEditor 4.4 widgets were registered to the ACF which was an incorrect behavior (#11567). This change should not have any impact on standard scenarios, but if your button does not execute the widget command, you need to set
requiredContentproperties for it manually, because the editor will not be able to find them.
- The Show Borders plugin was added to the Standard installation package in order to ensure that unstyled tables are still visible for the user (#11665).
- Since CKEditor 4.4 the editor instance should be passed to
CKEDITOR.stylemethods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the
CKEDITOR.stylewill work even when the editor instance is not provided.
- #11297: Styles can now be applied to widgets. The definition of a style which can be applied to a specific widget must contain two additional properties —
widget. Read more in the Widget Styles section of the "Syles Drop-down" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features:
- Introduced the
CKEDITOR.style.addCustomHandler()method for registering custom style handlers.
CKEDITOR.style.remove()methods are now called with an editor instance instead of the document so they can be reused by the
CKEDITOR.editor.removeStyle()methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods.
- Many new methods and properties were introduced in the Widget API to make the handling of styles by widgets fully customizable. See:
- Integration with the Allowed Content Filter required an introduction of the
CKEDITOR.style.toAllowedContent()method which can be implemented by the custom style handler and if exists, it is used by the
CKEDITOR.filterto translate a style to allowed content rules.
- Introduced the
- #11300: Various changes in the Enhanced Image plugin:
- Introduced the
config.image2_captionedClassoption to configure the class of captioned images.
- Introduced the
config.image2_alignClassesoption to configure the way images are aligned with CSS classes. If this setting is defined, the editor produces classes instead of inline styles for aligned images.
- Default image caption can be translated (customized) with the
- Introduced the
- #11341: Enhanced Image plugin: It is now possible to add a link to any image type.
- #10202: Introduced wildcard support in the Allowed Content Rules format.
- #10276: Introduced blacklisting in the Allowed Content Filter.
- #10480: Introduced code snippets with code highlighting. There are two versions available so far — the default Code Snippetwhich uses the highlight.js library and the Code Snippet GeSHi which uses the GeSHi library.
- #11737: Introduced an option to prevent filtering of an element that matches custom criteria (see
- #11532: Introduced the
editor.addContentsCss()method that can be used for adding custom CSS files.
- #11536: Added the
CKEDITOR.tools.htmlDecode()method for decoding HTML entities.
- #11225: Introduced the
CKEDITOR.tools.transparentImageDataproperty which contains transparent image data to be used in CSS or as image source.
- #11377: Unified internal representation of empty anchors using the fake objects.
- #11422: Removed Firefox 3.x, Internet Explorer 6 and Opera 12.x leftovers in code.
- #5217: Setting data (including switching between modes) creates a new undo snapshot. Besides that:
- The WebSpellChecker plugin was updated to the latest version.