Fix: CRLF

This commit is contained in:
Laurent Destailleur 2014-03-15 23:17:46 +01:00
parent cafa61ef7d
commit 6eac7e1bdc
31 changed files with 4898 additions and 4897 deletions

View File

@ -16,13 +16,14 @@ fi
# To detec # To detec
if [ "x$1" = "xlist" ] if [ "x$1" = "xlist" ]
then then
find . \( -iname "*.php" -o -iname "*.sh" -o -iname "*.cml" -o -iname "*.css" -o -iname "*.js" -o -iname "*.lang" -o -iname "*.pl" -o -iname "*.txt" \) -exec file "{}" + | grep -v 'htdocs\/includes' | grep CRLF find . \( -iname "*.md" -o -iname "*.html" -o -iname "*.htm" -o -iname "*.php" -o -iname "*.sh" -o -iname "*.cml" -o -iname "*.css" -o -iname "*.js" -o -iname "*.lang" -o -iname "*.pl" -o -iname "*.txt" \) -exec file "{}" + | grep CRLF
# find . \( -iname "*.md" -o -iname "*.html" -o -iname "*.htm" -o -iname "*.php" -o -iname "*.sh" -o -iname "*.cml" -o -iname "*.css" -o -iname "*.js" -o -iname "*.lang" -o -iname "*.pl" -o -iname "*.txt" \) -exec file "{}" + | grep -v 'htdocs\/includes' | grep CRLF
fi fi
# To convert # To convert
if [ "x$1" = "xfix" ] if [ "x$1" = "xfix" ]
then then
for fic in `find . \( -iname "*.php" -o -iname "*.sh" -o -iname "*.cml" -o -iname "*.css" -o -iname "*.js" -o -iname "*.lang" -o -iname "*.pl" -o -iname "*.txt" \) -exec file "{}" + | grep -v 'htdocs\/includes' | grep CRLF | awk -F':' '{ print $1 }' ` for fic in `find . \( -iname "*.md" -o -iname "*.html" -o -iname "*.htm" -o -iname "*.php" -o -iname "*.sh" -o -iname "*.cml" -o -iname "*.css" -o -iname "*.js" -o -iname "*.lang" -o -iname "*.pl" -o -iname "*.txt" \) -exec file "{}" + | grep CRLF | awk -F':' '{ print $1 }' `
do do
echo "Fix file $fic" echo "Fix file $fic"
dos2unix $fic dos2unix $fic

View File

@ -1,442 +1,442 @@
CKEditor 4 Changelog CKEditor 4 Changelog
==================== ====================
## CKEditor 4.3.3 ## CKEditor 4.3.3
Fixed Issues: Fixed Issues:
* [#11500](http://dev.ckeditor.com/ticket/11500): [Webkit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root). * [#11500](http://dev.ckeditor.com/ticket/11500): [Webkit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root).
* [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets. * [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets.
* [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method. * [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method.
* [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak). * [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak).
* [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior. * [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior.
* [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure. * [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure.
* [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab. * [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab.
* [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode. * [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode.
* [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered. * [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered.
* [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. * [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window.
* [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin. * [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin.
* [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row. * [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row.
* [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values. * [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values.
* [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast. * [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast.
* [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely. * [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely.
* [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument. * [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument.
* [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+. * [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+.
* [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set. * [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set.
* [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output. * [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output.
* [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). * [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter).
* [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected. * [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected.
## CKEditor 4.3.2 ## CKEditor 4.3.2
Fixed Issues: Fixed Issues:
* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute. * [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute.
* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements: * [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements:
* [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty. * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty.
* [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues. * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues.
* [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations. * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations.
* [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization. * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization.
* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor. * [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor.
* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements: * [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements:
* [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support. * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support.
* [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support. * [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support.
* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe. * [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe.
* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl). * [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl).
* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables. * [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables.
* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin. * [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin.
* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted. * [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted.
* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached. * [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached.
* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable. * [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable.
* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode. * [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode.
* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace. * [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace.
* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode. * [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode.
* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar. * [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar.
* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget. * [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget.
* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library. * [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library.
* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable. * [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable.
* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)). * [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)).
* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor. * [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor.
* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin. * [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin.
* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on. * [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on.
* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8. * [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8.
* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables. * [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables.
* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs. * [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs.
* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly. * [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly.
* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window. * [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window.
## CKEditor 4.3.1 ## CKEditor 4.3.1
**Important Notes:** **Important Notes:**
* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)). * To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)).
* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)). * [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)).
Fixed Issues: Fixed Issues:
* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event. * [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event.
* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method. * [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method.
* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder. * [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder.
* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu. * [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu.
* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option. * [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option.
* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor. * [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor.
* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions. * [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions.
* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes. * [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes.
* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image. * [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image.
* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image. * [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image.
* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading. * [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading.
* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget. * [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget.
* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details. * [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details.
* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer. * [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer.
* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode. * [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode.
* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item. * [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item.
* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back. * [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back.
* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more. * [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more.
* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked. * [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked.
* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle. * [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle.
* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements. * [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements.
* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors. * [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors.
* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word. * [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word.
* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded. * [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded.
* [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled. * [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled.
* [#11200](http://dev.ckeditor.com/ticket/11200): Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop. * [#11200](http://dev.ckeditor.com/ticket/11200): Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop.
## CKEditor 4.3 ## CKEditor 4.3
New Features: New Features:
* [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support. * [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support.
* [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin. * [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin.
* [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle. * [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle.
* [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin. * [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin.
* [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems. * [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems.
* [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration. * [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration.
* [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets. * [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets.
* [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements: * [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements:
* loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)), * loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)),
* applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)), * applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)),
* Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)), * Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)),
* fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)), * fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)),
* fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)), * fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)),
* fixing other minor bugs. * fixing other minor bugs.
* [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget. * [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget.
* [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter. * [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter.
* [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language. * [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language.
* [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields. * [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields.
* [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter). * [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter).
* [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG. * [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG.
Fixed Issues: Fixed Issues:
* [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget. * [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget.
* [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle. * [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle.
* [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image. * [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image.
* [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change. * [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change.
* [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. * [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window.
* [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. * [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window.
* [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables. * [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables.
* [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable. * [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable.
* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused. * [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused.
* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables. * [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables.
* [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample. * [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample.
* [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty. * [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty.
* [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor. * [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor.
* [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content. * [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content.
* [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System. * [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System.
* [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly. * [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly.
* [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset. * [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset.
* [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event. * [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event.
* [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin. * [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin.
* [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused. * [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused.
* [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu. * [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu.
* [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets. * [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets.
* [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System. * [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System.
* [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method. * [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method.
* [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop. * [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop.
* [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions. * [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions.
* [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data. * [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data.
* [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`. * [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`.
* [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea). * [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea).
## CKEditor 4.3 Beta ## CKEditor 4.3 Beta
New Features: New Features:
* [#9764](http://dev.ckeditor.com/ticket/9764): Widget System. * [#9764](http://dev.ckeditor.com/ticket/9764): Widget System.
* [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget). * [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget).
* New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties &ndash; normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). * New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties &ndash; normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode).
* Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content. * Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content.
* Dynamic *Enter* mode values &ndash; [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode). * Dynamic *Enter* mode values &ndash; [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode).
* Dynamic content filter instances &ndash; [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property. * Dynamic content filter instances &ndash; [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property.
* "Fake" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method. * "Fake" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method.
* Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method. * Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method.
* Dozens of new methods were introduced &ndash; most interesting ones: * Dozens of new methods were introduced &ndash; most interesting ones:
* [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find), * [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find),
* [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne), * [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne),
* [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange), * [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange),
* [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition), * [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition),
* New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element). * New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element).
* [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic "click and drag" resizing. * [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic "click and drag" resizing.
* [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget. * [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget.
* [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html). * [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html).
* [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley). * [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley).
## CKEditor 4.2.3 ## CKEditor 4.2.3
Fixed Issues: Fixed Issues:
* [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file. * [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file.
* [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette. * [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette.
* [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed. * [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed.
* [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline). * [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline).
* [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'. * [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'.
## CKEditor 4.2.2 ## CKEditor 4.2.2
Fixed Issues: Fixed Issues:
* [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs. * [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs.
* [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row. * [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row.
* [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret. * [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret.
* [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked. * [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked.
* [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified. * [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified.
* [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame. * [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame.
* [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area. * [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area.
* [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style. * [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style.
* [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin. * [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin.
* [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration. * [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration.
* [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842). * [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842).
* [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707). * [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707).
* [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced. * [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced.
* [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label. * [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label.
## CKEditor 4.2.1 ## CKEditor 4.2.1
Fixed Issues: Fixed Issues:
* [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error. * [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error.
* [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance. * [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance.
* [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core. * [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core.
* [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word. * [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word.
* [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word. * [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word.
* [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the "OK" button will trigger the `onbeforeunload` event in the popup dialog. * [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the "OK" button will trigger the `onbeforeunload` event in the popup dialog.
* [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used. * [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used.
* [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode. * [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode.
* [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases. * [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases.
* [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element. * [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element.
* [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list. * [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list.
* [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced. * [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced.
* [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration. * [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration.
* It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally. * It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally.
## CKEditor 4.2 ## CKEditor 4.2
**Important Notes:** **Important Notes:**
* Dropped compatibility support for Internet Explorer 7 and Firefox 3.6. * Dropped compatibility support for Internet Explorer 7 and Firefox 3.6.
* Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder). * Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder).
New Features: New Features:
* [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock). * [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock).
* [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists. * [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists.
* [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906). * [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906).
* [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor. * [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor.
* [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.onChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. * [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.onChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event.
* [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added. * [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added.
* [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements &mdash; introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event. * [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements &mdash; introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event.
* [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor. * [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor.
Fixed Issues: Fixed Issues:
* [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin. * [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin.
* [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors. * [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors.
* [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData). * [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData).
## CKEditor 4.1.3 ## CKEditor 4.1.3
New Features: New Features:
* Added new translation: Indonesian. * Added new translation: Indonesian.
Fixed Issues: Fixed Issues:
* [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers. * [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers.
* [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename "Cancel" button to "Close". * [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename "Cancel" button to "Close".
* [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin. * [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin.
* [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). * [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode).
* [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows. * [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows.
## CKEditor 4.1.2 ## CKEditor 4.1.2
New Features: New Features:
* Added new translation: Sinhala. * Added new translation: Sinhala.
Fixed Issues: Fixed Issues:
* [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing. * [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing.
* [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts. * [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts.
* [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted. * [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted.
* [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered. * [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered.
* [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly). * [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly).
* [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files. * [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files.
* [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR). * [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR).
* [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role="application"` should not be used for dialog windows. * [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role="application"` should not be used for dialog windows.
* [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role="application"` should not be used for floating panels. * [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role="application"` should not be used for floating panels.
* [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances. * [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances.
* [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad. * [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad.
* [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the "Text and Table" template. * [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the "Text and Table" template.
* [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style. * [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style.
## CKEditor 4.1.1 ## CKEditor 4.1.1
New Features: New Features:
* Added new translation: Albanian. * Added new translation: Albanian.
Fixed Issues: Fixed Issues:
* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell. * [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell.
* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event. * [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event.
* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin. * [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin.
* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start. * [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start.
* [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view. * [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view.
* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor). * [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor).
* [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode). * [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode).
* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering. * [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering.
* [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed. * [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed.
* [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured. * [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured.
* [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases. * [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases.
* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop. * [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop.
* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state. * [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state.
* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat). * [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat).
## CKEditor 4.1 ## CKEditor 4.1
Fixed Issues: Fixed Issues:
* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases. * [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases.
* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format. * [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format.
* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore. * [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore.
* Minor issues in plugin integration with Advanced Content Filter: * Minor issues in plugin integration with Advanced Content Filter:
* [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter. * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter.
* [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter. * [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter.
* [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined. * [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined.
## CKEditor 4.1 RC ## CKEditor 4.1 RC
New Features: New Features:
* [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration. * [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration.
Brand new data filtering system that works in 2 modes: Brand new data filtering system that works in 2 modes:
* Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its * Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its
current configuration can handle. current configuration can handle.
* Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data * Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data
will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed. will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed.
See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter). See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter).
* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances. * [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances.
* [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation. * [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation.
* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances. * [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances.
* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing. * Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing.
* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string. * [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string.
* Included in [#10103](http://dev.ckeditor.com/ticket/10103): * Included in [#10103](http://dev.ckeditor.com/ticket/10103):
* Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor. * Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor.
* Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized. * Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized.
* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5. * [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5.
## CKEditor 4.0.3 ## CKEditor 4.0.3
Fixed Issues: Fixed Issues:
* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled. * [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled.
* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view. * [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view.
* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy). * [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy).
## CKEditor 4.0.2 ## CKEditor 4.0.2
Fixed Issues: Fixed Issues:
* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`. * [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`.
* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins). * [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins).
* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order. * [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order.
* [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set. * [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set.
* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window. * [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window.
* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin. * [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin.
* [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable. * [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable.
* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll. * [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll.
* [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag. * [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag.
* [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode. * [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode.
* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available. * [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available.
* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors. * [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors.
* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable. * [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable.
* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes. * [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes.
* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time. * [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time.
* [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases. * [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases.
* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set. * [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set.
* [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release. * [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release.
* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items. * [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items.
## CKEditor 4.0.1.1 ## CKEditor 4.0.1.1
Fixed Issues: Fixed Issues:
* Security update: Added protection against XSS attack and possible path disclosure in the PHP sample. * Security update: Added protection against XSS attack and possible path disclosure in the PHP sample.
## CKEditor 4.0.1 ## CKEditor 4.0.1
Fixed Issues: Fixed Issues:
* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono). * [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono).
* Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844). * Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844).
* [Magic Line](http://ckeditor.com/addon/magicline) plugin: * [Magic Line](http://ckeditor.com/addon/magicline) plugin:
* [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line. * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line.
* [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms. * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms.
* [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case. * [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case.
* [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers. * [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers.
* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word. * [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word.
* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging. * [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging.
* Context menu: * Context menu:
* [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus. * [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus.
* [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar. * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar.
* [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element. * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element.
* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window. * [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window.
* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space. * [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space.
* [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements. * [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements.
* [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types. * [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types.
* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window. * [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window.
* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly. * [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly.
* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell. * [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell.
* [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog. * [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog.
* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window. * [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window.
* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`. * [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`.
* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button. * [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button.
* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified. * [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified.
* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode. * [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode.
* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images. * [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images.
* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements. * [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements.
* [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles. * [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles.
* [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools). * [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools).
* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window. * [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window.
* [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting. * [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting.
* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs. * [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs.
* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options. * [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options.
* [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor. * [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor.
* [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works. * [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works.
* [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration. * [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration.
* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "Live Preview" checkbox from UI color picker. * [#9693](http://dev.ckeditor.com/ticket/9693): Removed "Live Preview" checkbox from UI color picker.
## CKEditor 4.0 ## CKEditor 4.0
The first stable release of the new CKEditor 4 code line. The first stable release of the new CKEditor 4 code line.
The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever
possible. The list of relevant changes can be found in the [API Changes page of possible. The list of relevant changes can be found in the [API Changes page of
the CKEditor 4 documentation][1]. the CKEditor 4 documentation][1].
[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes" [1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes"

File diff suppressed because it is too large Load Diff

View File

@ -1,194 +1,194 @@
<!DOCTYPE html> <!DOCTYPE html>
<!-- <!--
Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
--> -->
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Clipboard playground &ndash; CKEditor Sample</title> <title>Clipboard playground &ndash; CKEditor Sample</title>
<script src="../../../ckeditor.js"></script> <script src="../../../ckeditor.js"></script>
<link href="../../../samples/sample.css" rel="stylesheet"> <link href="../../../samples/sample.css" rel="stylesheet">
<style> <style>
body { body {
margin: 0; margin: 0;
} }
#editables, #console #editables, #console
{ {
width: 48%; width: 48%;
} }
#editable { #editable {
padding: 5px 10px; padding: 5px 10px;
} }
#console { #console {
position: fixed; position: fixed;
top: 10px; top: 10px;
right: 30px; right: 30px;
height: 500px; height: 500px;
border: solid 3px #555; border: solid 3px #555;
overflow: auto; overflow: auto;
} }
#console > p { #console > p {
border-bottom: solid 1px #555; border-bottom: solid 1px #555;
margin: 0; margin: 0;
padding: 0 5px; padding: 0 5px;
background: rgba(0, 0, 0, 0.25); background: rgba(0, 0, 0, 0.25);
-webkit-transition: background-color 1s; -webkit-transition: background-color 1s;
-moz-transition: background-color 1s; -moz-transition: background-color 1s;
-o-transition: background-color 1s; -o-transition: background-color 1s;
-ms-transition: background-color 1s; -ms-transition: background-color 1s;
transition: background-color 1s; transition: background-color 1s;
} }
#console > p.old { #console > p.old {
background: rgba(0, 0, 0, 0); background: rgba(0, 0, 0, 0);
} }
#console time, #console .prompt { #console time, #console .prompt {
padding: 0 5px; padding: 0 5px;
display: inline-block; display: inline-block;
} }
#console time { #console time {
background: #999; background: #999;
background: rgba(0, 0, 0, 0.5 ); background: rgba(0, 0, 0, 0.5 );
color: #FFF; color: #FFF;
margin-left: -5px; margin-left: -5px;
} }
#console .prompt { #console .prompt {
background: #DDD; background: #DDD;
background: rgba(0, 0, 0, 0.1 ); background: rgba(0, 0, 0, 0.1 );
min-width: 200px; min-width: 200px;
} }
.someClass { .someClass {
color: blue; color: blue;
} }
.specChar { .specChar {
color: #777; color: #777;
background-color: #EEE; background-color: #EEE;
background-color: rgba(0, 0, 0, 0.1); background-color: rgba(0, 0, 0, 0.1);
font-size: 0.8em; font-size: 0.8em;
border-radius: 2px; border-radius: 2px;
padding: 1px; padding: 1px;
} }
</style> </style>
</head> </head>
<body> <body>
<h1 class="samples"> <h1 class="samples">
CKEditor Sample &mdash; clipboard plugin playground CKEditor Sample &mdash; clipboard plugin playground
</h1> </h1>
<div id="editables"> <div id="editables">
<p> <p>
<label for="editor1"> <label for="editor1">
Editor 1:</label> Editor 1:</label>
<textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
</p> </p>
<p> <p>
<label for="editor2"> <label for="editor2">
Editor 2:</label> Editor 2:</label>
<textarea cols="80" id="editor2" name="editor2" rows="10">&lt;p&gt;This is more &lt;strong class="MsoNormal"&gt;sample text&lt;/strong&gt;.&lt;/p&gt;</textarea> <textarea cols="80" id="editor2" name="editor2" rows="10">&lt;p&gt;This is more &lt;strong class="MsoNormal"&gt;sample text&lt;/strong&gt;.&lt;/p&gt;</textarea>
</p> </p>
<p> <p>
<label for="editor3"> <label for="editor3">
Editor 3:</label> Editor 3:</label>
<textarea cols="80" id="editor3" name="editor3" rows="10">&lt;p&gt;This editor &lt;strong&gt;forces pasting in text mode&lt;/strong&gt; by listening for "beforePaste" event.&lt;/p&gt;</textarea> <textarea cols="80" id="editor3" name="editor3" rows="10">&lt;p&gt;This editor &lt;strong&gt;forces pasting in text mode&lt;/strong&gt; by listening for "beforePaste" event.&lt;/p&gt;</textarea>
</p> </p>
<p> <p>
<label for="editor4"> <label for="editor4">
Editor 4:</label> Editor 4:</label>
<textarea cols="80" id="editor4" name="editor4" rows="10">&lt;p&gt;This editor &lt;strong&gt;forces pasting in text mode&lt;/strong&gt; by "forcePasteAsPlainText" config option.&lt;/p&gt;</textarea> <textarea cols="80" id="editor4" name="editor4" rows="10">&lt;p&gt;This editor &lt;strong&gt;forces pasting in text mode&lt;/strong&gt; by "forcePasteAsPlainText" config option.&lt;/p&gt;</textarea>
</p> </p>
<p> <p>
<label for="editor5"> <label for="editor5">
Editor 5:</label> Editor 5:</label>
<textarea cols="80" id="editor5" name="editor5" rows="10">Editor with autoParagraphing set to off.</textarea> <textarea cols="80" id="editor5" name="editor5" rows="10">Editor with autoParagraphing set to off.</textarea>
</p> </p>
<div id="editor6" contenteditable="true" style="font-family: Georgia; font-size: 14px"> <div id="editor6" contenteditable="true" style="font-family: Georgia; font-size: 14px">
<h1>Editor 6</h1> <h1>Editor 6</h1>
<p>Content content content.</p> <p>Content content content.</p>
<p class="someClass">Styled by <code>.someClass</code>.</p> <p class="someClass">Styled by <code>.someClass</code>.</p>
</div> </div>
</div> </div>
<div id="console"> <div id="console">
</div> </div>
<script> <script>
( function() ( function()
{ {
'use strict'; 'use strict';
var log = window.__log = function( title, msg ) { var log = window.__log = function( title, msg ) {
var msgEl = new CKEDITOR.dom.element( 'p' ), var msgEl = new CKEDITOR.dom.element( 'p' ),
consoleEl = CKEDITOR.document.getById( 'console' ), consoleEl = CKEDITOR.document.getById( 'console' ),
time = new Date().toString().match( /\d\d:\d\d:\d\d/ )[ 0 ], time = new Date().toString().match( /\d\d:\d\d:\d\d/ )[ 0 ],
format = function( tpl ) { format = function( tpl ) {
return tpl.replace( /{time}/g, time ).replace( '{title}', title ).replace( '{msg}', msg || '' ); return tpl.replace( /{time}/g, time ).replace( '{title}', title ).replace( '{msg}', msg || '' );
}; };
window.console && console.log && console.log( format( '[{time}] {title}: {msg}' ) ); window.console && console.log && console.log( format( '[{time}] {title}: {msg}' ) );
msg = ( msg || '' ).replace( /\r/g, '{\\r}' ).replace( /\n/g, '{\\n}' ).replace( /\t/g, '{\\t}' ); msg = ( msg || '' ).replace( /\r/g, '{\\r}' ).replace( /\n/g, '{\\n}' ).replace( /\t/g, '{\\t}' );
msg = CKEDITOR.tools.htmlEncode( msg ); msg = CKEDITOR.tools.htmlEncode( msg );
msg = msg.replace( /\{(\\\w)\}/g, '<code class="specChar">$1</code>' ); msg = msg.replace( /\{(\\\w)\}/g, '<code class="specChar">$1</code>' );
msgEl.setHtml( format( '<time datetime="{time}">{time}</time><span class="prompt">{title}</span> {msg}' ) ); msgEl.setHtml( format( '<time datetime="{time}">{time}</time><span class="prompt">{title}</span> {msg}' ) );
consoleEl.append( msgEl ); consoleEl.append( msgEl );
consoleEl.$.scrollTop = consoleEl.$.scrollHeight; consoleEl.$.scrollTop = consoleEl.$.scrollHeight;
setTimeout( function() { msgEl.addClass( 'old' ); }, 250 ); setTimeout( function() { msgEl.addClass( 'old' ); }, 250 );
}; };
var observe = function( editor, num ) { var observe = function( editor, num ) {
var p = 'EDITOR ' + num + ' > '; var p = 'EDITOR ' + num + ' > ';
editor.on( 'paste', function( event ) { editor.on( 'paste', function( event ) {
log( p + 'paste(prior:-1)', event.data.type + ' - "' + event.data.dataValue + '"' ); log( p + 'paste(prior:-1)', event.data.type + ' - "' + event.data.dataValue + '"' );
}, null, null, -1 ); }, null, null, -1 );
editor.on( 'paste', function( event ) { editor.on( 'paste', function( event ) {
log( p + 'paste(prior:10)', event.data.type + ' - "' + event.data.dataValue + '"' ); log( p + 'paste(prior:10)', event.data.type + ' - "' + event.data.dataValue + '"' );
} ); } );
editor.on( 'paste', function( event ) { editor.on( 'paste', function( event ) {
log( p + 'paste(prior:999)', event.data.type + ' - "' + event.data.dataValue + '"' ); log( p + 'paste(prior:999)', event.data.type + ' - "' + event.data.dataValue + '"' );
}, null, null, 999 ); }, null, null, 999 );
editor.on( 'beforePaste', function( event ) { editor.on( 'beforePaste', function( event ) {
log( p + 'beforePaste', event.data.type ); log( p + 'beforePaste', event.data.type );
} ); } );
editor.on( 'beforePaste', function( event ) { editor.on( 'beforePaste', function( event ) {
log( p + 'beforePaste(prior:999)', event.data.type ); log( p + 'beforePaste(prior:999)', event.data.type );
}, null, null, 999 ); }, null, null, 999 );
editor.on( 'afterPaste', function( event ) { editor.on( 'afterPaste', function( event ) {
log( p + 'afterPaste' ); log( p + 'afterPaste' );
} ); } );
editor.on( 'copy', function( event ) { editor.on( 'copy', function( event ) {
log( p + 'copy' ); log( p + 'copy' );
} ); } );
editor.on( 'cut', function( event ) { editor.on( 'cut', function( event ) {
log( p + 'cut' ); log( p + 'cut' );
} ); } );
}; };
CKEDITOR.disableAutoInline = true; CKEDITOR.disableAutoInline = true;
var config = { var config = {
height: 120, height: 120,
toolbar: [ [ 'Source' ] ], toolbar: [ [ 'Source' ] ],
allowedContent: true allowedContent: true
}, },
editor1 = CKEDITOR.replace( 'editor1', config ), editor1 = CKEDITOR.replace( 'editor1', config ),
editor2 = CKEDITOR.replace( 'editor2', config ), editor2 = CKEDITOR.replace( 'editor2', config ),
editor3 = CKEDITOR.replace( 'editor3', config ), editor3 = CKEDITOR.replace( 'editor3', config ),
editor4 = CKEDITOR.replace( 'editor4', CKEDITOR.tools.extend( { forcePasteAsPlainText: true }, config ) ), editor4 = CKEDITOR.replace( 'editor4', CKEDITOR.tools.extend( { forcePasteAsPlainText: true }, config ) ),
editor5 = CKEDITOR.replace( 'editor5', CKEDITOR.tools.extend( { autoParagraph: false }, config ) ), editor5 = CKEDITOR.replace( 'editor5', CKEDITOR.tools.extend( { autoParagraph: false }, config ) ),
editor6 = CKEDITOR.inline( document.getElementById( 'editor6' ), config ); editor6 = CKEDITOR.inline( document.getElementById( 'editor6' ), config );
editor3.on( 'beforePaste', function( evt ) { editor3.on( 'beforePaste', function( evt ) {
evt.data.type = 'text'; evt.data.type = 'text';
} ); } );
observe( editor1, 1 ); observe( editor1, 1 );
observe( editor2, 2 ); observe( editor2, 2 );
observe( editor3, 3 ); observe( editor3, 3 );
observe( editor4, 4 ); observe( editor4, 4 );
observe( editor5, 5 ); observe( editor5, 5 );
observe( editor6, 6 ); observe( editor6, 6 );
})(); })();
</script> </script>
</body> </body>
</html> </html>

View File

@ -1,187 +1,187 @@
<!DOCTYPE html> <!DOCTYPE html>
<!-- <!--
Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
--> -->
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Using API to Customize Dialog Windows &mdash; CKEditor Sample</title> <title>Using API to Customize Dialog Windows &mdash; CKEditor Sample</title>
<script src="../../../ckeditor.js"></script> <script src="../../../ckeditor.js"></script>
<link rel="stylesheet" href="../../../samples/sample.css"> <link rel="stylesheet" href="../../../samples/sample.css">
<meta name="ckeditor-sample-name" content="Using the JavaScript API to customize dialog windows"> <meta name="ckeditor-sample-name" content="Using the JavaScript API to customize dialog windows">
<meta name="ckeditor-sample-group" content="Advanced Samples"> <meta name="ckeditor-sample-group" content="Advanced Samples">
<meta name="ckeditor-sample-description" content="Using the dialog windows API to customize dialog windows without changing the original editor code."> <meta name="ckeditor-sample-description" content="Using the dialog windows API to customize dialog windows without changing the original editor code.">
<style> <style>
.cke_button__mybutton_icon .cke_button__mybutton_icon
{ {
display: none !important; display: none !important;
} }
.cke_button__mybutton_label .cke_button__mybutton_label
{ {
display: inline !important; display: inline !important;
} }
</style> </style>
<script> <script>
CKEDITOR.on( 'instanceCreated', function( ev ){ CKEDITOR.on( 'instanceCreated', function( ev ){
var editor = ev.editor; var editor = ev.editor;
// Listen for the "pluginsLoaded" event, so we are sure that the // Listen for the "pluginsLoaded" event, so we are sure that the
// "dialog" plugin has been loaded and we are able to do our // "dialog" plugin has been loaded and we are able to do our
// customizations. // customizations.
editor.on( 'pluginsLoaded', function() { editor.on( 'pluginsLoaded', function() {
// If our custom dialog has not been registered, do that now. // If our custom dialog has not been registered, do that now.
if ( !CKEDITOR.dialog.exists( 'myDialog' ) ) { if ( !CKEDITOR.dialog.exists( 'myDialog' ) ) {
// We need to do the following trick to find out the dialog // We need to do the following trick to find out the dialog
// definition file URL path. In the real world, you would simply // definition file URL path. In the real world, you would simply
// point to an absolute path directly, like "/mydir/mydialog.js". // point to an absolute path directly, like "/mydir/mydialog.js".
var href = document.location.href.split( '/' ); var href = document.location.href.split( '/' );
href.pop(); href.pop();
href.push( 'assets/my_dialog.js' ); href.push( 'assets/my_dialog.js' );
href = href.join( '/' ); href = href.join( '/' );
// Finally, register the dialog. // Finally, register the dialog.
CKEDITOR.dialog.add( 'myDialog', href ); CKEDITOR.dialog.add( 'myDialog', href );
} }
// Register the command used to open the dialog. // Register the command used to open the dialog.
editor.addCommand( 'myDialogCmd', new CKEDITOR.dialogCommand( 'myDialog' ) ); editor.addCommand( 'myDialogCmd', new CKEDITOR.dialogCommand( 'myDialog' ) );
// Add the a custom toolbar buttons, which fires the above // Add the a custom toolbar buttons, which fires the above
// command.. // command..
editor.ui.add( 'MyButton', CKEDITOR.UI_BUTTON, { editor.ui.add( 'MyButton', CKEDITOR.UI_BUTTON, {
label: 'My Dialog', label: 'My Dialog',
command: 'myDialogCmd' command: 'myDialogCmd'
}); });
}); });
}); });
// When opening a dialog, its "definition" is created for it, for // When opening a dialog, its "definition" is created for it, for
// each editor instance. The "dialogDefinition" event is then // each editor instance. The "dialogDefinition" event is then
// fired. We should use this event to make customizations to the // fired. We should use this event to make customizations to the
// definition of existing dialogs. // definition of existing dialogs.
CKEDITOR.on( 'dialogDefinition', function( ev ) { CKEDITOR.on( 'dialogDefinition', function( ev ) {
// Take the dialog name and its definition from the event data. // Take the dialog name and its definition from the event data.
var dialogName = ev.data.name; var dialogName = ev.data.name;
var dialogDefinition = ev.data.definition; var dialogDefinition = ev.data.definition;
// Check if the definition is from the dialog we're // Check if the definition is from the dialog we're
// interested on (the "Link" dialog). // interested on (the "Link" dialog).
if ( dialogName == 'myDialog' && ev.editor.name == 'editor2' ) { if ( dialogName == 'myDialog' && ev.editor.name == 'editor2' ) {
// Get a reference to the "Link Info" tab. // Get a reference to the "Link Info" tab.
var infoTab = dialogDefinition.getContents( 'tab1' ); var infoTab = dialogDefinition.getContents( 'tab1' );
// Add a new text field to the "tab1" tab page. // Add a new text field to the "tab1" tab page.
infoTab.add( { infoTab.add( {
type: 'text', type: 'text',
label: 'My Custom Field', label: 'My Custom Field',
id: 'customField', id: 'customField',
'default': 'Sample!', 'default': 'Sample!',
validate: function() { validate: function() {
if ( ( /\d/ ).test( this.getValue() ) ) if ( ( /\d/ ).test( this.getValue() ) )
return 'My Custom Field must not contain digits'; return 'My Custom Field must not contain digits';
} }
}); });
// Remove the "select1" field from the "tab1" tab. // Remove the "select1" field from the "tab1" tab.
infoTab.remove( 'select1' ); infoTab.remove( 'select1' );
// Set the default value for "input1" field. // Set the default value for "input1" field.
var input1 = infoTab.get( 'input1' ); var input1 = infoTab.get( 'input1' );
input1[ 'default' ] = 'www.example.com'; input1[ 'default' ] = 'www.example.com';
// Remove the "tab2" tab page. // Remove the "tab2" tab page.
dialogDefinition.removeContents( 'tab2' ); dialogDefinition.removeContents( 'tab2' );
// Add a new tab to the "Link" dialog. // Add a new tab to the "Link" dialog.
dialogDefinition.addContents( { dialogDefinition.addContents( {
id: 'customTab', id: 'customTab',
label: 'My Tab', label: 'My Tab',
accessKey: 'M', accessKey: 'M',
elements: [ elements: [
{ {
id: 'myField1', id: 'myField1',
type: 'text', type: 'text',
label: 'My Text Field' label: 'My Text Field'
}, },
{ {
id: 'myField2', id: 'myField2',
type: 'text', type: 'text',
label: 'Another Text Field' label: 'Another Text Field'
} }
] ]
}); });
// Provide the focus handler to start initial focus in "customField" field. // Provide the focus handler to start initial focus in "customField" field.
dialogDefinition.onFocus = function() { dialogDefinition.onFocus = function() {
var urlField = this.getContentElement( 'tab1', 'customField' ); var urlField = this.getContentElement( 'tab1', 'customField' );
urlField.select(); urlField.select();
}; };
} }
}); });
var config = { var config = {
extraPlugins: 'dialog', extraPlugins: 'dialog',
toolbar: [ [ 'MyButton' ] ] toolbar: [ [ 'MyButton' ] ]
}; };
</script> </script>
</head> </head>
<body> <body>
<h1 class="samples"> <h1 class="samples">
<a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using CKEditor Dialog API <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using CKEditor Dialog API
</h1> </h1>
<div class="description"> <div class="description">
<p> <p>
This sample shows how to use the This sample shows how to use the
<a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.dialog">CKEditor Dialog API</a> <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.dialog">CKEditor Dialog API</a>
to customize CKEditor dialog windows without changing the original editor code. to customize CKEditor dialog windows without changing the original editor code.
The following customizations are being done in the example below: The following customizations are being done in the example below:
</p> </p>
<p> <p>
For details on how to create this setup check the source code of this sample page. For details on how to create this setup check the source code of this sample page.
</p> </p>
</div> </div>
<p>A custom dialog is added to the editors using the <code>pluginsLoaded</code> event, from an external <a target="_blank" href="assets/my_dialog.js">dialog definition file</a>:</p> <p>A custom dialog is added to the editors using the <code>pluginsLoaded</code> event, from an external <a target="_blank" href="assets/my_dialog.js">dialog definition file</a>:</p>
<ol> <ol>
<li><strong>Creating a custom dialog window</strong> &ndash; "My Dialog" dialog window opened with the "My Dialog" toolbar button.</li> <li><strong>Creating a custom dialog window</strong> &ndash; "My Dialog" dialog window opened with the "My Dialog" toolbar button.</li>
<li><strong>Creating a custom button</strong> &ndash; Add button to open the dialog with "My Dialog" toolbar button.</li> <li><strong>Creating a custom button</strong> &ndash; Add button to open the dialog with "My Dialog" toolbar button.</li>
</ol> </ol>
<textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
<script> <script>
// Replace the <textarea id="editor1"> with an CKEditor instance. // Replace the <textarea id="editor1"> with an CKEditor instance.
CKEDITOR.replace( 'editor1', config ); CKEDITOR.replace( 'editor1', config );
</script> </script>
<p>The below editor modify the dialog definition of the above added dialog using the <code>dialogDefinition</code> event:</p> <p>The below editor modify the dialog definition of the above added dialog using the <code>dialogDefinition</code> event:</p>
<ol> <ol>
<li><strong>Adding dialog tab</strong> &ndash; Add new tab "My Tab" to dialog window.</li> <li><strong>Adding dialog tab</strong> &ndash; Add new tab "My Tab" to dialog window.</li>
<li><strong>Removing a dialog window tab</strong> &ndash; Remove "Second Tab" page from the dialog window.</li> <li><strong>Removing a dialog window tab</strong> &ndash; Remove "Second Tab" page from the dialog window.</li>
<li><strong>Adding dialog window fields</strong> &ndash; Add "My Custom Field" to the dialog window.</li> <li><strong>Adding dialog window fields</strong> &ndash; Add "My Custom Field" to the dialog window.</li>
<li><strong>Removing dialog window field</strong> &ndash; Remove "Select Field" selection field from the dialog window.</li> <li><strong>Removing dialog window field</strong> &ndash; Remove "Select Field" selection field from the dialog window.</li>
<li><strong>Setting default values for dialog window fields</strong> &ndash; Set default value of "Text Field" text field. </li> <li><strong>Setting default values for dialog window fields</strong> &ndash; Set default value of "Text Field" text field. </li>
<li><strong>Setup initial focus for dialog window</strong> &ndash; Put initial focus on "My Custom Field" text field. </li> <li><strong>Setup initial focus for dialog window</strong> &ndash; Put initial focus on "My Custom Field" text field. </li>
</ol> </ol>
<textarea cols="80" id="editor2" name="editor2" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> <textarea cols="80" id="editor2" name="editor2" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
<script> <script>
// Replace the <textarea id="editor1"> with an CKEditor instance. // Replace the <textarea id="editor1"> with an CKEditor instance.
CKEDITOR.replace( 'editor2', config ); CKEDITOR.replace( 'editor2', config );
</script> </script>
<div id="footer"> <div id="footer">
<hr> <hr>
<p> <p>
CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
</p> </p>
<p id="copy"> <p id="copy">
Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
Knabben. All rights reserved. Knabben. All rights reserved.
</p> </p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,103 +1,103 @@
<!DOCTYPE html> <!DOCTYPE html>
<!-- <!--
Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
--> -->
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>ENTER Key Configuration &mdash; CKEditor Sample</title> <title>ENTER Key Configuration &mdash; CKEditor Sample</title>
<script src="../../../ckeditor.js"></script> <script src="../../../ckeditor.js"></script>
<link href="../../../samples/sample.css" rel="stylesheet"> <link href="../../../samples/sample.css" rel="stylesheet">
<meta name="ckeditor-sample-name" content="Using the &quot;Enter&quot; key in CKEditor"> <meta name="ckeditor-sample-name" content="Using the &quot;Enter&quot; key in CKEditor">
<meta name="ckeditor-sample-group" content="Advanced Samples"> <meta name="ckeditor-sample-group" content="Advanced Samples">
<meta name="ckeditor-sample-description" content="Configuring the behavior of &lt;em&gt;Enter&lt;/em&gt; and &lt;em&gt;Shift+Enter&lt;/em&gt; keys."> <meta name="ckeditor-sample-description" content="Configuring the behavior of &lt;em&gt;Enter&lt;/em&gt; and &lt;em&gt;Shift+Enter&lt;/em&gt; keys.">
<script> <script>
var editor; var editor;
function changeEnter() { function changeEnter() {
// If we already have an editor, let's destroy it first. // If we already have an editor, let's destroy it first.
if ( editor ) if ( editor )
editor.destroy( true ); editor.destroy( true );
// Create the editor again, with the appropriate settings. // Create the editor again, with the appropriate settings.
editor = CKEDITOR.replace( 'editor1', { editor = CKEDITOR.replace( 'editor1', {
extraPlugins: 'enterkey', extraPlugins: 'enterkey',
enterMode: Number( document.getElementById( 'xEnter' ).value ), enterMode: Number( document.getElementById( 'xEnter' ).value ),
shiftEnterMode: Number( document.getElementById( 'xShiftEnter' ).value ) shiftEnterMode: Number( document.getElementById( 'xShiftEnter' ).value )
}); });
} }
window.onload = changeEnter; window.onload = changeEnter;
</script> </script>
</head> </head>
<body> <body>
<h1 class="samples"> <h1 class="samples">
<a href="../../../samples/index.html">CKEditor Samples</a> &raquo; ENTER Key Configuration <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; ENTER Key Configuration
</h1> </h1>
<div class="description"> <div class="description">
<p> <p>
This sample shows how to configure the <em>Enter</em> and <em>Shift+Enter</em> keys This sample shows how to configure the <em>Enter</em> and <em>Shift+Enter</em> keys
to perform actions specified in the to perform actions specified in the
<a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode"><code>enterMode</code></a> <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode"><code>enterMode</code></a>
and <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode"><code>shiftEnterMode</code></a> and <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode"><code>shiftEnterMode</code></a>
parameters, respectively. parameters, respectively.
You can choose from the following options: You can choose from the following options:
</p> </p>
<ul class="samples"> <ul class="samples">
<li><strong><code>ENTER_P</code></strong> &ndash; new <code>&lt;p&gt;</code> paragraphs are created;</li> <li><strong><code>ENTER_P</code></strong> &ndash; new <code>&lt;p&gt;</code> paragraphs are created;</li>
<li><strong><code>ENTER_BR</code></strong> &ndash; lines are broken with <code>&lt;br&gt;</code> elements;</li> <li><strong><code>ENTER_BR</code></strong> &ndash; lines are broken with <code>&lt;br&gt;</code> elements;</li>
<li><strong><code>ENTER_DIV</code></strong> &ndash; new <code>&lt;div&gt;</code> blocks are created.</li> <li><strong><code>ENTER_DIV</code></strong> &ndash; new <code>&lt;div&gt;</code> blocks are created.</li>
</ul> </ul>
<p> <p>
The sample code below shows how to configure CKEditor to create a <code>&lt;div&gt;</code> block when <em>Enter</em> key is pressed. The sample code below shows how to configure CKEditor to create a <code>&lt;div&gt;</code> block when <em>Enter</em> key is pressed.
</p> </p>
<pre class="samples"> <pre class="samples">
CKEDITOR.replace( '<em>textarea_id</em>', { CKEDITOR.replace( '<em>textarea_id</em>', {
<strong>enterMode: CKEDITOR.ENTER_DIV</strong> <strong>enterMode: CKEDITOR.ENTER_DIV</strong>
});</pre> });</pre>
<p> <p>
Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of
the <code>&lt;textarea&gt;</code> element to be replaced. the <code>&lt;textarea&gt;</code> element to be replaced.
</p> </p>
</div> </div>
<div style="float: left; margin-right: 20px"> <div style="float: left; margin-right: 20px">
When <em>Enter</em> is pressed:<br> When <em>Enter</em> is pressed:<br>
<select id="xEnter" onchange="changeEnter();"> <select id="xEnter" onchange="changeEnter();">
<option selected="selected" value="1">Create a new &lt;P&gt; (recommended)</option> <option selected="selected" value="1">Create a new &lt;P&gt; (recommended)</option>
<option value="3">Create a new &lt;DIV&gt;</option> <option value="3">Create a new &lt;DIV&gt;</option>
<option value="2">Break the line with a &lt;BR&gt;</option> <option value="2">Break the line with a &lt;BR&gt;</option>
</select> </select>
</div> </div>
<div style="float: left"> <div style="float: left">
When <em>Shift+Enter</em> is pressed:<br> When <em>Shift+Enter</em> is pressed:<br>
<select id="xShiftEnter" onchange="changeEnter();"> <select id="xShiftEnter" onchange="changeEnter();">
<option value="1">Create a new &lt;P&gt;</option> <option value="1">Create a new &lt;P&gt;</option>
<option value="3">Create a new &lt;DIV&gt;</option> <option value="3">Create a new &lt;DIV&gt;</option>
<option selected="selected" value="2">Break the line with a &lt;BR&gt; (recommended)</option> <option selected="selected" value="2">Break the line with a &lt;BR&gt; (recommended)</option>
</select> </select>
</div> </div>
<br style="clear: both"> <br style="clear: both">
<form action="../../../samples/sample_posteddata.php" method="post"> <form action="../../../samples/sample_posteddata.php" method="post">
<p> <p>
<br> <br>
<textarea cols="80" id="editor1" name="editor1" rows="10">This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.</textarea> <textarea cols="80" id="editor1" name="editor1" rows="10">This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.</textarea>
</p> </p>
<p> <p>
<input type="submit" value="Submit"> <input type="submit" value="Submit">
</p> </p>
</form> </form>
<div id="footer"> <div id="footer">
<hr> <hr>
<p> <p>
CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
</p> </p>
<p id="copy"> <p id="copy">
Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
Knabben. All rights reserved. Knabben. All rights reserved.
</p> </p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,280 +1,280 @@
<!DOCTYPE html> <!DOCTYPE html>
<!-- <!--
Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
--> -->
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Output for Flash &mdash; CKEditor Sample</title> <title>Output for Flash &mdash; CKEditor Sample</title>
<script src="../../../ckeditor.js"></script> <script src="../../../ckeditor.js"></script>
<script src="../../../samples/sample.js"></script> <script src="../../../samples/sample.js"></script>
<script src="assets/outputforflash/swfobject.js"></script> <script src="assets/outputforflash/swfobject.js"></script>
<link href="../../../samples/sample.css" rel="stylesheet"> <link href="../../../samples/sample.css" rel="stylesheet">
<meta name="ckeditor-sample-required-plugins" content="sourcearea"> <meta name="ckeditor-sample-required-plugins" content="sourcearea">
<meta name="ckeditor-sample-name" content="Output for Flash"> <meta name="ckeditor-sample-name" content="Output for Flash">
<meta name="ckeditor-sample-group" content="Advanced Samples"> <meta name="ckeditor-sample-group" content="Advanced Samples">
<meta name="ckeditor-sample-description" content="Configuring CKEditor to produce HTML code that can be used with Adobe Flash."> <meta name="ckeditor-sample-description" content="Configuring CKEditor to produce HTML code that can be used with Adobe Flash.">
<style> <style>
.alert .alert
{ {
background: #ffa84c; background: #ffa84c;
padding: 10px 15px; padding: 10px 15px;
font-weight: bold; font-weight: bold;
display: block; display: block;
margin-bottom: 20px; margin-bottom: 20px;
} }
</style> </style>
</head> </head>
<body> <body>
<h1 class="samples"> <h1 class="samples">
<a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Producing Flash Compliant HTML Output <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Producing Flash Compliant HTML Output
</h1> </h1>
<div class="description"> <div class="description">
<p> <p>
This sample shows how to configure CKEditor to output This sample shows how to configure CKEditor to output
HTML code that can be used with HTML code that can be used with
<a class="samples" href="http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00000922.html"> <a class="samples" href="http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00000922.html">
Adobe Flash</a>. Adobe Flash</a>.
The code will contain a subset of standard HTML elements like <code>&lt;b&gt;</code>, The code will contain a subset of standard HTML elements like <code>&lt;b&gt;</code>,
<code>&lt;i&gt;</code>, and <code>&lt;p&gt;</code> as well as HTML attributes. <code>&lt;i&gt;</code>, and <code>&lt;p&gt;</code> as well as HTML attributes.
</p> </p>
<p> <p>
To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard
JavaScript call, and define CKEditor features to use HTML elements and attributes. JavaScript call, and define CKEditor features to use HTML elements and attributes.
</p> </p>
<p> <p>
For details on how to create this setup check the source code of this sample page. For details on how to create this setup check the source code of this sample page.
</p> </p>
</div> </div>
<p> <p>
To see how it works, create some content in the editing area of CKEditor on the left To see how it works, create some content in the editing area of CKEditor on the left
and send it to the Flash object on the right side of the page by using the and send it to the Flash object on the right side of the page by using the
<strong>Send to Flash</strong> button. <strong>Send to Flash</strong> button.
</p> </p>
<table style="width: 100%; border-spacing: 0; border-collapse:collapse;"> <table style="width: 100%; border-spacing: 0; border-collapse:collapse;">
<tr> <tr>
<td style="width: 100%"> <td style="width: 100%">
<textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;&lt;b&gt;&lt;font size=&quot;18&quot; style=&quot;font-size:18px;&quot;&gt;Flash and HTML&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;It is possible to have &lt;a href=&quot;http://ckeditor.com&quot;&gt;CKEditor&lt;/a&gt; creating content that will be later loaded inside &lt;b&gt;Flash&lt;/b&gt; objects and animations.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Flash has a few limitations when dealing with HTML:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It has limited support on tags.&lt;/li&gt;&lt;li&gt;There is no margin between block elements, like paragraphs.&lt;/li&gt;&lt;/ul&gt;</textarea> <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;&lt;b&gt;&lt;font size=&quot;18&quot; style=&quot;font-size:18px;&quot;&gt;Flash and HTML&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;It is possible to have &lt;a href=&quot;http://ckeditor.com&quot;&gt;CKEditor&lt;/a&gt; creating content that will be later loaded inside &lt;b&gt;Flash&lt;/b&gt; objects and animations.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Flash has a few limitations when dealing with HTML:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It has limited support on tags.&lt;/li&gt;&lt;li&gt;There is no margin between block elements, like paragraphs.&lt;/li&gt;&lt;/ul&gt;</textarea>
<script> <script>
if ( document.location.protocol == 'file:' ) if ( document.location.protocol == 'file:' )
alert( 'Warning: This samples does not work when loaded from local filesystem' + alert( 'Warning: This samples does not work when loaded from local filesystem' +
'due to security restrictions implemented in Flash.' + 'due to security restrictions implemented in Flash.' +
'\n\nPlease load the sample from a web server instead.' ); '\n\nPlease load the sample from a web server instead.' );
var editor = CKEDITOR.replace( 'editor1', { var editor = CKEDITOR.replace( 'editor1', {
/* /*
* Ensure that htmlwriter plugin, which is required for this sample, is loaded. * Ensure that htmlwriter plugin, which is required for this sample, is loaded.
*/ */
extraPlugins: 'htmlwriter', extraPlugins: 'htmlwriter',
height: 290, height: 290,
width: '100%', width: '100%',
toolbar: [ toolbar: [
[ 'Source', '-', 'Bold', 'Italic', 'Underline', '-', 'BulletedList', '-', 'Link', 'Unlink' ], [ 'Source', '-', 'Bold', 'Italic', 'Underline', '-', 'BulletedList', '-', 'Link', 'Unlink' ],
[ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock' ], [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock' ],
'/', '/',
[ 'Font', 'FontSize' ], [ 'Font', 'FontSize' ],
[ 'TextColor', '-', 'About' ] [ 'TextColor', '-', 'About' ]
], ],
/* /*
* Style sheet for the contents * Style sheet for the contents
*/ */
contentsCss: 'body {color:#000; background-color#FFF; font-family: Arial; font-size:80%;} p, ol, ul {margin-top: 0px; margin-bottom: 0px;}', contentsCss: 'body {color:#000; background-color#FFF; font-family: Arial; font-size:80%;} p, ol, ul {margin-top: 0px; margin-bottom: 0px;}',
/* /*
* Quirks doctype * Quirks doctype
*/ */
docType: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', docType: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',
/* /*
* Core styles. * Core styles.
*/ */
coreStyles_bold: { element: 'b' }, coreStyles_bold: { element: 'b' },
coreStyles_italic: { element: 'i' }, coreStyles_italic: { element: 'i' },
coreStyles_underline: { element: 'u' }, coreStyles_underline: { element: 'u' },
/* /*
* Font face. * Font face.
*/ */
// Define the way font elements will be applied to the document. The "font" // Define the way font elements will be applied to the document. The "font"
// element will be used. // element will be used.
font_style: { font_style: {
element: 'font', element: 'font',
attributes: { 'face': '#(family)' } attributes: { 'face': '#(family)' }
}, },
/* /*
* Font sizes. * Font sizes.
*/ */
// The CSS part of the font sizes isn't used by Flash, it is there to get the // The CSS part of the font sizes isn't used by Flash, it is there to get the
// font rendered correctly in CKEditor. // font rendered correctly in CKEditor.
fontSize_sizes: '8px/8;9px/9;10px/10;11px/11;12px/12;14px/14;16px/16;18px/18;20px/20;22px/22;24px/24;26px/26;28px/28;36px/36;48px/48;72px/72', fontSize_sizes: '8px/8;9px/9;10px/10;11px/11;12px/12;14px/14;16px/16;18px/18;20px/20;22px/22;24px/24;26px/26;28px/28;36px/36;48px/48;72px/72',
fontSize_style: { fontSize_style: {
element: 'font', element: 'font',
attributes: { 'size': '#(size)' }, attributes: { 'size': '#(size)' },
styles: { 'font-size': '#(size)px' } styles: { 'font-size': '#(size)px' }
} , } ,
/* /*
* Font colors. * Font colors.
*/ */
colorButton_enableMore: true, colorButton_enableMore: true,
colorButton_foreStyle: { colorButton_foreStyle: {
element: 'font', element: 'font',
attributes: { 'color': '#(color)' } attributes: { 'color': '#(color)' }
}, },
colorButton_backStyle: { colorButton_backStyle: {
element: 'font', element: 'font',
styles: { 'background-color': '#(color)' } styles: { 'background-color': '#(color)' }
}, },
on: { 'instanceReady': configureFlashOutput } on: { 'instanceReady': configureFlashOutput }
}); });
/* /*
* Adjust the behavior of the dataProcessor to match the * Adjust the behavior of the dataProcessor to match the
* requirements of Flash * requirements of Flash
*/ */
function configureFlashOutput( ev ) { function configureFlashOutput( ev ) {
var editor = ev.editor, var editor = ev.editor,
dataProcessor = editor.dataProcessor, dataProcessor = editor.dataProcessor,
htmlFilter = dataProcessor && dataProcessor.htmlFilter; htmlFilter = dataProcessor && dataProcessor.htmlFilter;
// Out self closing tags the HTML4 way, like <br>. // Out self closing tags the HTML4 way, like <br>.
dataProcessor.writer.selfClosingEnd = '>'; dataProcessor.writer.selfClosingEnd = '>';
// Make output formatting match Flash expectations // Make output formatting match Flash expectations
var dtd = CKEDITOR.dtd; var dtd = CKEDITOR.dtd;
for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) {
dataProcessor.writer.setRules( e, { dataProcessor.writer.setRules( e, {
indent: false, indent: false,
breakBeforeOpen: false, breakBeforeOpen: false,
breakAfterOpen: false, breakAfterOpen: false,
breakBeforeClose: false, breakBeforeClose: false,
breakAfterClose: false breakAfterClose: false
}); });
} }
dataProcessor.writer.setRules( 'br', { dataProcessor.writer.setRules( 'br', {
indent: false, indent: false,
breakBeforeOpen: false, breakBeforeOpen: false,
breakAfterOpen: false, breakAfterOpen: false,
breakBeforeClose: false, breakBeforeClose: false,
breakAfterClose: false breakAfterClose: false
}); });
// Output properties as attributes, not styles. // Output properties as attributes, not styles.
htmlFilter.addRules( { htmlFilter.addRules( {
elements: { elements: {
$: function( element ) { $: function( element ) {
var style, match, width, height, align; var style, match, width, height, align;
// Output dimensions of images as width and height // Output dimensions of images as width and height
if ( element.name == 'img' ) { if ( element.name == 'img' ) {
style = element.attributes.style; style = element.attributes.style;
if ( style ) { if ( style ) {
// Get the width from the style. // Get the width from the style.
match = ( /(?:^|\s)width\s*:\s*(\d+)px/i ).exec( style ); match = ( /(?:^|\s)width\s*:\s*(\d+)px/i ).exec( style );
width = match && match[1]; width = match && match[1];
// Get the height from the style. // Get the height from the style.
match = ( /(?:^|\s)height\s*:\s*(\d+)px/i ).exec( style ); match = ( /(?:^|\s)height\s*:\s*(\d+)px/i ).exec( style );
height = match && match[1]; height = match && match[1];
if ( width ) { if ( width ) {
element.attributes.style = element.attributes.style.replace( /(?:^|\s)width\s*:\s*(\d+)px;?/i , '' ); element.attributes.style = element.attributes.style.replace( /(?:^|\s)width\s*:\s*(\d+)px;?/i , '' );
element.attributes.width = width; element.attributes.width = width;
} }
if ( height ) { if ( height ) {
element.attributes.style = element.attributes.style.replace( /(?:^|\s)height\s*:\s*(\d+)px;?/i , '' ); element.attributes.style = element.attributes.style.replace( /(?:^|\s)height\s*:\s*(\d+)px;?/i , '' );
element.attributes.height = height; element.attributes.height = height;
} }
} }
} }
// Output alignment of paragraphs using align // Output alignment of paragraphs using align
if ( element.name == 'p' ) { if ( element.name == 'p' ) {
style = element.attributes.style; style = element.attributes.style;
if ( style ) { if ( style ) {
// Get the align from the style. // Get the align from the style.
match = ( /(?:^|\s)text-align\s*:\s*(\w*);?/i ).exec( style ); match = ( /(?:^|\s)text-align\s*:\s*(\w*);?/i ).exec( style );
align = match && match[1]; align = match && match[1];
if ( align ) { if ( align ) {
element.attributes.style = element.attributes.style.replace( /(?:^|\s)text-align\s*:\s*(\w*);?/i , '' ); element.attributes.style = element.attributes.style.replace( /(?:^|\s)text-align\s*:\s*(\w*);?/i , '' );
element.attributes.align = align; element.attributes.align = align;
} }
} }
} }
if ( element.attributes.style === '' ) if ( element.attributes.style === '' )
delete element.attributes.style; delete element.attributes.style;
return element; return element;
} }
} }
}); });
} }
function sendToFlash() { function sendToFlash() {
var html = CKEDITOR.instances.editor1.getData() ; var html = CKEDITOR.instances.editor1.getData() ;
// Quick fix for link color. // Quick fix for link color.
html = html.replace( /<a /g, '<font color="#0000FF"><u><a ' ) html = html.replace( /<a /g, '<font color="#0000FF"><u><a ' )
html = html.replace( /<\/a>/g, '</a></u></font>' ) html = html.replace( /<\/a>/g, '</a></u></font>' )
var flash = document.getElementById( 'ckFlashContainer' ) ; var flash = document.getElementById( 'ckFlashContainer' ) ;
flash.setData( html ) ; flash.setData( html ) ;
} }
CKEDITOR.domReady( function() { CKEDITOR.domReady( function() {
if ( !swfobject.hasFlashPlayerVersion( '8' ) ) { if ( !swfobject.hasFlashPlayerVersion( '8' ) ) {
CKEDITOR.dom.element.createFromHtml( '<span class="alert">' + CKEDITOR.dom.element.createFromHtml( '<span class="alert">' +
'At least Adobe Flash Player 8 is required to run this sample. ' + 'At least Adobe Flash Player 8 is required to run this sample. ' +
'You can download it from <a href="http://get.adobe.com/flashplayer">Adobe\'s website</a>.' + 'You can download it from <a href="http://get.adobe.com/flashplayer">Adobe\'s website</a>.' +
'</span>' ).insertBefore( editor.element ); '</span>' ).insertBefore( editor.element );
} }
swfobject.embedSWF( swfobject.embedSWF(
'assets/outputforflash/outputforflash.swf', 'assets/outputforflash/outputforflash.swf',
'ckFlashContainer', 'ckFlashContainer',
'550', '550',
'400', '400',
'8', '8',
{ wmode: 'transparent' } { wmode: 'transparent' }
); );
}); });
</script> </script>
<p> <p>
<input type="button" value="Send to Flash" onclick="sendToFlash();"> <input type="button" value="Send to Flash" onclick="sendToFlash();">
</p> </p>
</td> </td>
<td style="vertical-align: top; padding-left: 20px"> <td style="vertical-align: top; padding-left: 20px">
<div id="ckFlashContainer"></div> <div id="ckFlashContainer"></div>
</td> </td>
</tr> </tr>
</table> </table>
<div id="footer"> <div id="footer">
<hr> <hr>
<p> <p>
CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
</p> </p>
<p id="copy"> <p id="copy">
Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
Knabben. All rights reserved. Knabben. All rights reserved.
</p> </p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,221 +1,221 @@
<!DOCTYPE html> <!DOCTYPE html>
<!-- <!--
Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
--> -->
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>HTML Compliant Output &mdash; CKEditor Sample</title> <title>HTML Compliant Output &mdash; CKEditor Sample</title>
<script src="../../../ckeditor.js"></script> <script src="../../../ckeditor.js"></script>
<script src="../../../samples/sample.js"></script> <script src="../../../samples/sample.js"></script>
<link href="../../../samples/sample.css" rel="stylesheet"> <link href="../../../samples/sample.css" rel="stylesheet">
<meta name="ckeditor-sample-required-plugins" content="sourcearea"> <meta name="ckeditor-sample-required-plugins" content="sourcearea">
<meta name="ckeditor-sample-name" content="Output HTML"> <meta name="ckeditor-sample-name" content="Output HTML">
<meta name="ckeditor-sample-group" content="Advanced Samples"> <meta name="ckeditor-sample-group" content="Advanced Samples">
<meta name="ckeditor-sample-description" content="Configuring CKEditor to produce legacy HTML 4 code."> <meta name="ckeditor-sample-description" content="Configuring CKEditor to produce legacy HTML 4 code.">
</head> </head>
<body> <body>
<h1 class="samples"> <h1 class="samples">
<a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Producing HTML Compliant Output <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Producing HTML Compliant Output
</h1> </h1>
<div class="description"> <div class="description">
<p> <p>
This sample shows how to configure CKEditor to output valid This sample shows how to configure CKEditor to output valid
<a class="samples" href="http://www.w3.org/TR/html401/">HTML 4.01</a> code. <a class="samples" href="http://www.w3.org/TR/html401/">HTML 4.01</a> code.
Traditional HTML elements like <code>&lt;b&gt;</code>, Traditional HTML elements like <code>&lt;b&gt;</code>,
<code>&lt;i&gt;</code>, and <code>&lt;font&gt;</code> are used in place of <code>&lt;i&gt;</code>, and <code>&lt;font&gt;</code> are used in place of
<code>&lt;strong&gt;</code>, <code>&lt;em&gt;</code>, and CSS styles. <code>&lt;strong&gt;</code>, <code>&lt;em&gt;</code>, and CSS styles.
</p> </p>
<p> <p>
To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard
JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes. JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes.
</p> </p>
<p> <p>
A snippet of the configuration code can be seen below; check the source of this page for A snippet of the configuration code can be seen below; check the source of this page for
full definition: full definition:
</p> </p>
<pre class="samples"> <pre class="samples">
CKEDITOR.replace( '<em>textarea_id</em>', { CKEDITOR.replace( '<em>textarea_id</em>', {
coreStyles_bold: { element: 'b' }, coreStyles_bold: { element: 'b' },
coreStyles_italic: { element: 'i' }, coreStyles_italic: { element: 'i' },
fontSize_style: { fontSize_style: {
element: 'font', element: 'font',
attributes: { 'size': '#(size)' } attributes: { 'size': '#(size)' }
} }
... ...
});</pre> });</pre>
</div> </div>
<form action="../../../samples/sample_posteddata.php" method="post"> <form action="../../../samples/sample_posteddata.php" method="post">
<p> <p>
<label for="editor1"> <label for="editor1">
Editor 1: Editor 1:
</label> </label>
<textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;b&gt;sample text&lt;/b&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;b&gt;sample text&lt;/b&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
<script> <script>
CKEDITOR.replace( 'editor1', { CKEDITOR.replace( 'editor1', {
/* /*
* Ensure that htmlwriter plugin, which is required for this sample, is loaded. * Ensure that htmlwriter plugin, which is required for this sample, is loaded.
*/ */
extraPlugins: 'htmlwriter', extraPlugins: 'htmlwriter',
/* /*
* Style sheet for the contents * Style sheet for the contents
*/ */
contentsCss: 'body {color:#000; background-color#:FFF;}', contentsCss: 'body {color:#000; background-color#:FFF;}',
/* /*
* Simple HTML5 doctype * Simple HTML5 doctype
*/ */
docType: '<!DOCTYPE HTML>', docType: '<!DOCTYPE HTML>',
/* /*
* Allowed content rules which beside limiting allowed HTML * Allowed content rules which beside limiting allowed HTML
* will also take care of transforming styles to attributes * will also take care of transforming styles to attributes
* (currently only for img - see transformation rules defined below). * (currently only for img - see transformation rules defined below).
* *
* Read more: http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter * Read more: http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter
*/ */
allowedContent: allowedContent:
'h1 h2 h3 p pre[align]; ' + 'h1 h2 h3 p pre[align]; ' +
'blockquote code kbd samp var del ins cite q b i u strike ul ol li hr table tbody tr td th caption; ' + 'blockquote code kbd samp var del ins cite q b i u strike ul ol li hr table tbody tr td th caption; ' +
'img[!src,alt,align,width,height]; font[!face]; font[!family]; font[!color]; font[!size]; font{!background-color}; a[!href]; a[!name]', 'img[!src,alt,align,width,height]; font[!face]; font[!family]; font[!color]; font[!size]; font{!background-color}; a[!href]; a[!name]',
/* /*
* Core styles. * Core styles.
*/ */
coreStyles_bold: { element: 'b' }, coreStyles_bold: { element: 'b' },
coreStyles_italic: { element: 'i' }, coreStyles_italic: { element: 'i' },
coreStyles_underline: { element: 'u' }, coreStyles_underline: { element: 'u' },
coreStyles_strike: { element: 'strike' }, coreStyles_strike: { element: 'strike' },
/* /*
* Font face. * Font face.
*/ */
// Define the way font elements will be applied to the document. // Define the way font elements will be applied to the document.
// The "font" element will be used. // The "font" element will be used.
font_style: { font_style: {
element: 'font', element: 'font',
attributes: { 'face': '#(family)' } attributes: { 'face': '#(family)' }
}, },
/* /*
* Font sizes. * Font sizes.
*/ */
fontSize_sizes: 'xx-small/1;x-small/2;small/3;medium/4;large/5;x-large/6;xx-large/7', fontSize_sizes: 'xx-small/1;x-small/2;small/3;medium/4;large/5;x-large/6;xx-large/7',
fontSize_style: { fontSize_style: {
element: 'font', element: 'font',
attributes: { 'size': '#(size)' } attributes: { 'size': '#(size)' }
}, },
/* /*
* Font colors. * Font colors.
*/ */
colorButton_foreStyle: { colorButton_foreStyle: {
element: 'font', element: 'font',
attributes: { 'color': '#(color)' } attributes: { 'color': '#(color)' }
}, },
colorButton_backStyle: { colorButton_backStyle: {
element: 'font', element: 'font',
styles: { 'background-color': '#(color)' } styles: { 'background-color': '#(color)' }
}, },
/* /*
* Styles combo. * Styles combo.
*/ */
stylesSet: [ stylesSet: [
{ name: 'Computer Code', element: 'code' }, { name: 'Computer Code', element: 'code' },
{ name: 'Keyboard Phrase', element: 'kbd' }, { name: 'Keyboard Phrase', element: 'kbd' },
{ name: 'Sample Text', element: 'samp' }, { name: 'Sample Text', element: 'samp' },
{ name: 'Variable', element: 'var' }, { name: 'Variable', element: 'var' },
{ name: 'Deleted Text', element: 'del' }, { name: 'Deleted Text', element: 'del' },
{ name: 'Inserted Text', element: 'ins' }, { name: 'Inserted Text', element: 'ins' },
{ name: 'Cited Work', element: 'cite' }, { name: 'Cited Work', element: 'cite' },
{ name: 'Inline Quotation', element: 'q' } { name: 'Inline Quotation', element: 'q' }
], ],
on: { on: {
pluginsLoaded: configureTransformations, pluginsLoaded: configureTransformations,
loaded: configureHtmlWriter loaded: configureHtmlWriter
} }
}); });
/* /*
* Add missing content transformations. * Add missing content transformations.
*/ */
function configureTransformations( evt ) { function configureTransformations( evt ) {
var editor = evt.editor; var editor = evt.editor;
editor.dataProcessor.htmlFilter.addRules( { editor.dataProcessor.htmlFilter.addRules( {
attributes: { attributes: {
style: function( value, element ) { style: function( value, element ) {
// Return #RGB for background and border colors // Return #RGB for background and border colors
return CKEDITOR.tools.convertRgbToHex( value ); return CKEDITOR.tools.convertRgbToHex( value );
} }
} }
} ); } );
// Default automatic content transformations do not yet take care of // Default automatic content transformations do not yet take care of
// align attributes on blocks, so we need to add our own transformation rules. // align attributes on blocks, so we need to add our own transformation rules.
function alignToAttribute( element ) { function alignToAttribute( element ) {
if ( element.styles[ 'text-align' ] ) { if ( element.styles[ 'text-align' ] ) {
element.attributes.align = element.styles[ 'text-align' ]; element.attributes.align = element.styles[ 'text-align' ];
delete element.styles[ 'text-align' ]; delete element.styles[ 'text-align' ];
} }
} }
editor.filter.addTransformations( [ editor.filter.addTransformations( [
[ { element: 'p', right: alignToAttribute } ], [ { element: 'p', right: alignToAttribute } ],
[ { element: 'h1', right: alignToAttribute } ], [ { element: 'h1', right: alignToAttribute } ],
[ { element: 'h2', right: alignToAttribute } ], [ { element: 'h2', right: alignToAttribute } ],
[ { element: 'h3', right: alignToAttribute } ], [ { element: 'h3', right: alignToAttribute } ],
[ { element: 'pre', right: alignToAttribute } ] [ { element: 'pre', right: alignToAttribute } ]
] ); ] );
} }
/* /*
* Adjust the behavior of htmlWriter to make it output HTML like FCKeditor. * Adjust the behavior of htmlWriter to make it output HTML like FCKeditor.
*/ */
function configureHtmlWriter( evt ) { function configureHtmlWriter( evt ) {
var editor = evt.editor, var editor = evt.editor,
dataProcessor = editor.dataProcessor; dataProcessor = editor.dataProcessor;
// Out self closing tags the HTML4 way, like <br>. // Out self closing tags the HTML4 way, like <br>.
dataProcessor.writer.selfClosingEnd = '>'; dataProcessor.writer.selfClosingEnd = '>';
// Make output formatting behave similar to FCKeditor. // Make output formatting behave similar to FCKeditor.
var dtd = CKEDITOR.dtd; var dtd = CKEDITOR.dtd;
for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) {
dataProcessor.writer.setRules( e, { dataProcessor.writer.setRules( e, {
indent: true, indent: true,
breakBeforeOpen: true, breakBeforeOpen: true,
breakAfterOpen: false, breakAfterOpen: false,
breakBeforeClose: !dtd[ e ][ '#' ], breakBeforeClose: !dtd[ e ][ '#' ],
breakAfterClose: true breakAfterClose: true
}); });
} }
} }
</script> </script>
</p> </p>
<p> <p>
<input type="submit" value="Submit"> <input type="submit" value="Submit">
</p> </p>
</form> </form>
<div id="footer"> <div id="footer">
<hr> <hr>
<p> <p>
CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
</p> </p>
<p id="copy"> <p id="copy">
Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
Knabben. All rights reserved. Knabben. All rights reserved.
</p> </p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,289 +1,289 @@
<!DOCTYPE html> <!DOCTYPE html>
<!-- <!--
Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
--> -->
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Indent DEV sample</title> <title>Indent DEV sample</title>
<script src="../../../ckeditor.js"></script> <script src="../../../ckeditor.js"></script>
<style> <style>
body { body {
padding: 20px; padding: 20px;
margin: 0; margin: 0;
} }
.editors { .editors {
display: block; display: block;
overflow: hidden; overflow: hidden;
width: 100%; width: 100%;
margin: 0px auto; margin: 0px auto;
list-style-type: none; list-style-type: none;
margin: 0; margin: 0;
padding: 0; padding: 0;
box-sizing: content-box; box-sizing: content-box;
-moz-box-sizing: content-box; -moz-box-sizing: content-box;
-webkit-box-sizing: content-box; -webkit-box-sizing: content-box;
background: #eee; background: #eee;
} }
.editors li { .editors li {
width: 50%; width: 50%;
margin: 0; margin: 0;
padding: 10px; padding: 10px;
float: left; float: left;
box-sizing: border-box; box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
} }
.editors li:nth-child(2n) { .editors li:nth-child(2n) {
background: #D4E59A; background: #D4E59A;
} }
#menu { #menu {
position: fixed; position: fixed;
top: 0; top: 0;
right: 20px; right: 20px;
padding: 5px; padding: 5px;
border: 1px solid #aaa; border: 1px solid #aaa;
background: #eee; background: #eee;
} }
</style> </style>
</head> </head>
<body> <body>
<p id="menu"> <p id="menu">
<a href="#listnblock">List &amp; Block</a>, <a href="#listnblock">List &amp; Block</a>,
<a href="#classes">Classes</a>, <a href="#classes">Classes</a>,
<a href="#list">List</a>, <a href="#list">List</a>,
<a href="#block">Block</a>, <a href="#block">Block</a>,
<a href="#br">ENTER_BR</a> <a href="#br">ENTER_BR</a>
</p> </p>
<h1 class="samples">Indent DEV sample</h1> <h1 class="samples">Indent DEV sample</h1>
<h2 id="listnblock">List &amp; Block</h2> <h2 id="listnblock">List &amp; Block</h2>
<ul class="editors"> <ul class="editors">
<li> <li>
<textarea cols="80" id="editor1" rows="10"> <textarea cols="80" id="editor1" rows="10">
<p>xx</p> <p>xx</p>
<ul> <ul>
<li>x</li> <li>x</li>
<li>y</li> <li>y</li>
</ul> </ul>
<p>xx</p> <p>xx</p>
<br> <br>
<ul><li><ol><li>xx</li></ol></li><li>yy</li></ul> <ul><li><ol><li>xx</li></ol></li><li>yy</li></ul>
</textarea> </textarea>
</li> </li>
<li> <li>
<pre id="editor1_out"></pre> <pre id="editor1_out"></pre>
</li> </li>
</ul> </ul>
<h2 id="classes">Indent classes</h2> <h2 id="classes">Indent classes</h2>
<ul class="editors"> <ul class="editors">
<li> <li>
<textarea cols="80" id="editor2" rows="10"> <textarea cols="80" id="editor2" rows="10">
<ul> <ul>
<li>a</li> <li>a</li>
<li> <li>
b b
<ol> <ol>
<li>inner</li> <li>inner</li>
</ol> </ol>
</li> </li>
<li>c</li> <li>c</li>
</ul> </ul>
<p>moo</p> <p>moo</p>
</textarea> </textarea>
</li> </li>
<li> <li>
<pre id="editor2_out"></pre> <pre id="editor2_out"></pre>
</li> </li>
</ul> </ul>
<h2 id="list">List only</h2> <h2 id="list">List only</h2>
<ul class="editors"> <ul class="editors">
<li> <li>
<textarea cols="80" id="editor3" rows="10"> <textarea cols="80" id="editor3" rows="10">
<ul> <ul>
<li>a</li> <li>a</li>
<li> <li>
b b
<ol> <ol>
<li>inner</li> <li>inner</li>
</ol> </ol>
</li> </li>
<li>c</li> <li>c</li>
</ul> </ul>
<p>moo</p> <p>moo</p>
</textarea> </textarea>
</li> </li>
<li> <li>
<pre id="editor3_out"></pre> <pre id="editor3_out"></pre>
</li> </li>
</ul> </ul>
<h2 id="block">Block only</h2> <h2 id="block">Block only</h2>
<ul class="editors"> <ul class="editors">
<li> <li>
<textarea cols="80" id="editor4" rows="10"> <textarea cols="80" id="editor4" rows="10">
<ul> <ul>
<li>a</li> <li>a</li>
<li> <li>
b b
<ol> <ol>
<li>inner</li> <li>inner</li>
</ol> </ol>
</li> </li>
<li>c</li> <li>c</li>
</ul> </ul>
<p>moo</p> <p>moo</p>
</textarea> </textarea>
</li> </li>
<li> <li>
<pre id="editor4_out"></pre> <pre id="editor4_out"></pre>
</li> </li>
</ul> </ul>
<h2 id="br">CKEDITOR.ENTER_BR</h2> <h2 id="br">CKEDITOR.ENTER_BR</h2>
<ul class="editors"> <ul class="editors">
<li> <li>
<textarea cols="80" id="editor5" rows="10"> <textarea cols="80" id="editor5" rows="10">
Text Text
<br> <br>
<ul> <ul>
<li>a</li> <li>a</li>
<li>b</li> <li>b</li>
</ul> </ul>
</textarea> </textarea>
</li> </li>
<li> <li>
<pre id="editor5_out"></pre> <pre id="editor5_out"></pre>
</li> </li>
</ul> </ul>
<script> <script>
var plugins = 'enterkey,toolbar,htmlwriter,wysiwygarea,undo,sourcearea,clipboard,list,justify,indent,indentlist,indentblock'; var plugins = 'enterkey,toolbar,htmlwriter,wysiwygarea,undo,sourcearea,clipboard,list,justify,indent,indentlist,indentblock';
CKEDITOR.config.indentOffset = 10; CKEDITOR.config.indentOffset = 10;
CKEDITOR.addCss( '\ CKEDITOR.addCss( '\
.i1{ margin-left: 10px}\ .i1{ margin-left: 10px}\
.i2{ margin-left: 20px}\ .i2{ margin-left: 20px}\
.i3{ margin-left: 30px}' ); .i3{ margin-left: 30px}' );
function showData( event ) { function showData( event ) {
CKEDITOR.document.getById( this.name + '_out' ).setText( getHtmlWithSelection( this ) ); CKEDITOR.document.getById( this.name + '_out' ).setText( getHtmlWithSelection( this ) );
} }
function browserHtmlFix( html ) { function browserHtmlFix( html ) {
if ( CKEDITOR.env.ie && ( document.documentMode || CKEDITOR.env.version ) < 9 ) { if ( CKEDITOR.env.ie && ( document.documentMode || CKEDITOR.env.version ) < 9 ) {
// Fix output base href on anchored link. // Fix output base href on anchored link.
html = html.replace( /href="(.*?)#(.*?)"/gi, html = html.replace( /href="(.*?)#(.*?)"/gi,
function( m, base, anchor ) { function( m, base, anchor ) {
if ( base == window.location.href.replace( window.location.hash, '' ) ) if ( base == window.location.href.replace( window.location.hash, '' ) )
return 'href="#' + anchor + '"'; return 'href="#' + anchor + '"';
return m; return m;
} ); } );
// Fix output line break after HR. // Fix output line break after HR.
html = html.replace( /(<HR>)\r\n/gi, function( m, hr ) { return hr; } ); html = html.replace( /(<HR>)\r\n/gi, function( m, hr ) { return hr; } );
} }
return html; return html;
} }
function getHtmlWithSelection( editorOrElement, root ) { function getHtmlWithSelection( editorOrElement, root ) {
var isEditor = editorOrElement instanceof CKEDITOR.editor, var isEditor = editorOrElement instanceof CKEDITOR.editor,
element = isEditor ? editorOrElement.editable() : editorOrElement; element = isEditor ? editorOrElement.editable() : editorOrElement;
root = isEditor ? element : root = isEditor ? element :
root instanceof CKEDITOR.dom.document ? root instanceof CKEDITOR.dom.document ?
root.getBody() : root || CKEDITOR.document.getBody(); root.getBody() : root || CKEDITOR.document.getBody();
function replaceWithBookmark( match, startOrEnd ) { function replaceWithBookmark( match, startOrEnd ) {
var bookmark; var bookmark;
switch( startOrEnd ) { switch( startOrEnd ) {
case 'S' : case 'S' :
bookmark = '['; bookmark = '[';
break; break;
case 'E' : case 'E' :
bookmark = ']'; bookmark = ']';
break; break;
case 'C' : case 'C' :
bookmark = '^'; bookmark = '^';
break; break;
} }
return bookmark; return bookmark;
} }
// Hack: force remove the filling char hack in Webkit. // Hack: force remove the filling char hack in Webkit.
isEditor && CKEDITOR.env.webkit && editorOrElement.fire( 'beforeSetMode' ); isEditor && CKEDITOR.env.webkit && editorOrElement.fire( 'beforeSetMode' );
var sel = isEditor ? editorOrElement.getSelection() var sel = isEditor ? editorOrElement.getSelection()
: new CKEDITOR.dom.selection( root ); : new CKEDITOR.dom.selection( root );
var doc = sel.document; var doc = sel.document;
var ranges = sel.getRanges(), var ranges = sel.getRanges(),
range; range;
var bms = []; var bms = [];
var iter = ranges.createIterator(); var iter = ranges.createIterator();
while( range = iter.getNextRange() ) while( range = iter.getNextRange() )
bms.push( range.createBookmark( 1 ) ); bms.push( range.createBookmark( 1 ) );
var html = browserHtmlFix( isEditor ? editorOrElement.getData() : element.getHtml() ); var html = browserHtmlFix( isEditor ? editorOrElement.getData() : element.getHtml() );
html = html.replace( /<span\b[^>]*?id="?cke_bm_\d+(\w)"?\b[^>]*?>.*?<\/span>/gi, html = html.replace( /<span\b[^>]*?id="?cke_bm_\d+(\w)"?\b[^>]*?>.*?<\/span>/gi,
replaceWithBookmark ); replaceWithBookmark );
for ( var i = 0, bm; i < bms.length; i++ ) { for ( var i = 0, bm; i < bms.length; i++ ) {
bm = bms[ i ]; bm = bms[ i ];
var start = doc.getById( bm.startNode ), var start = doc.getById( bm.startNode ),
end = doc.getById( bm.endNode ); end = doc.getById( bm.endNode );
start && start.remove(); start && start.remove();
end && end.remove(); end && end.remove();
} }
return html; return html;
} }
CKEDITOR.on( 'instanceReady', function ( event ) { CKEDITOR.on( 'instanceReady', function ( event ) {
var editor = event.editor; var editor = event.editor;
showData.call( editor ); showData.call( editor );
editor.on( 'afterCommandExec', showData, editor ); editor.on( 'afterCommandExec', showData, editor );
}); });
CKEDITOR.replace( 'editor1', { CKEDITOR.replace( 'editor1', {
plugins: plugins plugins: plugins
} ); } );
CKEDITOR.replace( 'editor2', { CKEDITOR.replace( 'editor2', {
plugins: plugins, plugins: plugins,
indentClasses: [ 'i1', 'i2', 'i3' ] indentClasses: [ 'i1', 'i2', 'i3' ]
} ); } );
CKEDITOR.replace( 'editor3', { CKEDITOR.replace( 'editor3', {
plugins: plugins, plugins: plugins,
removePlugins: 'indentblock' removePlugins: 'indentblock'
} ); } );
CKEDITOR.replace( 'editor4', { CKEDITOR.replace( 'editor4', {
plugins: plugins, plugins: plugins,
removePlugins: 'indentlist' removePlugins: 'indentlist'
} ); } );
CKEDITOR.replace( 'editor5', { CKEDITOR.replace( 'editor5', {
plugins: plugins, plugins: plugins,
enterMode: CKEDITOR.ENTER_BR enterMode: CKEDITOR.ENTER_BR
} ); } );
</script> </script>
</body> </body>
</html> </html>

File diff suppressed because one or more lines are too long

View File

@ -1,206 +1,206 @@
<!DOCTYPE html> <!DOCTYPE html>
<!-- <!--
Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
--> -->
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Using Magicline plugin &mdash; CKEditor Sample</title> <title>Using Magicline plugin &mdash; CKEditor Sample</title>
<script src="../../../ckeditor.js"></script> <script src="../../../ckeditor.js"></script>
<link rel="stylesheet" href="../../../samples/sample.css"> <link rel="stylesheet" href="../../../samples/sample.css">
<meta name="ckeditor-sample-name" content="Magicline plugin"> <meta name="ckeditor-sample-name" content="Magicline plugin">
<meta name="ckeditor-sample-group" content="Plugins"> <meta name="ckeditor-sample-group" content="Plugins">
<meta name="ckeditor-sample-description" content="Using the Magicline plugin to access difficult focus spaces."> <meta name="ckeditor-sample-description" content="Using the Magicline plugin to access difficult focus spaces.">
</head> </head>
<body> <body>
<h1 class="samples"> <h1 class="samples">
<a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using Magicline plugin <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using Magicline plugin
</h1> </h1>
<div class="description"> <div class="description">
<p> <p>
This sample shows the advantages of <strong>Magicline</strong> plugin This sample shows the advantages of <strong>Magicline</strong> plugin
which is to enhance the editing process. Thanks to this plugin, which is to enhance the editing process. Thanks to this plugin,
a number of difficult focus spaces which are inaccessible due to a number of difficult focus spaces which are inaccessible due to
browser issues can now be focused. browser issues can now be focused.
</p> </p>
<p> <p>
<strong>Magicline</strong> plugin shows a red line with a handler <strong>Magicline</strong> plugin shows a red line with a handler
which, when clicked, inserts a paragraph and allows typing. To see this, which, when clicked, inserts a paragraph and allows typing. To see this,
focus an editor and move your mouse above the focus space you want focus an editor and move your mouse above the focus space you want
to access. The plugin is enabled by default so no additional to access. The plugin is enabled by default so no additional
configuration is necessary. configuration is necessary.
</p> </p>
</div> </div>
<div> <div>
<label for="editor1"> <label for="editor1">
Editor 1: Editor 1:
</label> </label>
<div class="description"> <div class="description">
<p> <p>
This editor uses a default <strong>Magicline</strong> setup. This editor uses a default <strong>Magicline</strong> setup.
</p> </p>
</div> </div>
<textarea cols="80" id="editor1" name="editor1" rows="10"> <textarea cols="80" id="editor1" name="editor1" rows="10">
&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt; &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;
&lt;tbody&gt; &lt;tbody&gt;
&lt;tr&gt; &lt;tr&gt;
&lt;td&gt;This table&lt;/td&gt; &lt;td&gt;This table&lt;/td&gt;
&lt;td&gt;is the&lt;/td&gt; &lt;td&gt;is the&lt;/td&gt;
&lt;td&gt;very first&lt;/td&gt; &lt;td&gt;very first&lt;/td&gt;
&lt;td&gt;element of the document.&lt;/td&gt; &lt;td&gt;element of the document.&lt;/td&gt;
&lt;/tr&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;tr&gt;
&lt;td&gt;We are still&lt;/td&gt; &lt;td&gt;We are still&lt;/td&gt;
&lt;td&gt;able to acces&lt;/td&gt; &lt;td&gt;able to acces&lt;/td&gt;
&lt;td&gt;the space before it.&lt;/td&gt; &lt;td&gt;the space before it.&lt;/td&gt;
&lt;td&gt; &lt;td&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt; &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;
&lt;tbody&gt; &lt;tbody&gt;
&lt;tr&gt; &lt;tr&gt;
&lt;td&gt;This table is inside of a cell of another table.&lt;/td&gt; &lt;td&gt;This table is inside of a cell of another table.&lt;/td&gt;
&lt;/tr&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;tr&gt;
&lt;td&gt;We can type&amp;nbsp;either before or after it though.&lt;/td&gt; &lt;td&gt;We can type&amp;nbsp;either before or after it though.&lt;/td&gt;
&lt;/tr&gt; &lt;/tr&gt;
&lt;/tbody&gt; &lt;/tbody&gt;
&lt;/table&gt; &lt;/table&gt;
&lt;/td&gt; &lt;/td&gt;
&lt;/tr&gt; &lt;/tr&gt;
&lt;/tbody&gt; &lt;/tbody&gt;
&lt;/table&gt; &lt;/table&gt;
&lt;p&gt;Two succesive horizontal lines (&lt;tt&gt;HR&lt;/tt&gt; tags). We can access the space in between:&lt;/p&gt; &lt;p&gt;Two succesive horizontal lines (&lt;tt&gt;HR&lt;/tt&gt; tags). We can access the space in between:&lt;/p&gt;
&lt;hr /&gt; &lt;hr /&gt;
&lt;hr /&gt; &lt;hr /&gt;
&lt;ol&gt; &lt;ol&gt;
&lt;li&gt;This numbered list...&lt;/li&gt; &lt;li&gt;This numbered list...&lt;/li&gt;
&lt;li&gt;...is a neighbour of a horizontal line...&lt;/li&gt; &lt;li&gt;...is a neighbour of a horizontal line...&lt;/li&gt;
&lt;li&gt;...and another list.&lt;/li&gt; &lt;li&gt;...and another list.&lt;/li&gt;
&lt;/ol&gt; &lt;/ol&gt;
&lt;ul&gt; &lt;ul&gt;
&lt;li&gt;We can type between the lists...&lt;/li&gt; &lt;li&gt;We can type between the lists...&lt;/li&gt;
&lt;li&gt;...thanks to &lt;strong&gt;Magicline&lt;/strong&gt;.&lt;/li&gt; &lt;li&gt;...thanks to &lt;strong&gt;Magicline&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt; &lt;/ul&gt;
&lt;p&gt;Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.&lt;/p&gt; &lt;p&gt;Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.&lt;/p&gt;
&lt;p&gt;Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.&lt;/p&gt; &lt;p&gt;Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.&lt;/p&gt;
&lt;p&gt;Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.&lt;/p&gt; &lt;p&gt;Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.&lt;/p&gt;
&lt;div style=&quot;border: 2px dashed green; background: #ddd; text-align: center;&quot;&gt; &lt;div style=&quot;border: 2px dashed green; background: #ddd; text-align: center;&quot;&gt;
&lt;p&gt;This text is wrapped in a&amp;nbsp;&lt;tt&gt;DIV&lt;/tt&gt;&amp;nbsp;element. We can type after this element though.&lt;/p&gt; &lt;p&gt;This text is wrapped in a&amp;nbsp;&lt;tt&gt;DIV&lt;/tt&gt;&amp;nbsp;element. We can type after this element though.&lt;/p&gt;
&lt;/div&gt; &lt;/div&gt;
</textarea> </textarea>
<script> <script>
// This call can be placed at any point after the // This call can be placed at any point after the
// <textarea>, or inside a <head><script> in a // <textarea>, or inside a <head><script> in a
// window.onload event handler. // window.onload event handler.
CKEDITOR.replace( 'editor1', { CKEDITOR.replace( 'editor1', {
extraPlugins: 'magicline', // Ensure that magicline plugin, which is required for this sample, is loaded. extraPlugins: 'magicline', // Ensure that magicline plugin, which is required for this sample, is loaded.
allowedContent: true // Switch off the ACF, so very complex content created to allowedContent: true // Switch off the ACF, so very complex content created to
// show magicline's power isn't filtered. // show magicline's power isn't filtered.
} ); } );
</script> </script>
</div> </div>
<br> <br>
<div> <div>
<label for="editor2"> <label for="editor2">
Editor 2: Editor 2:
</label> </label>
<div class="description"> <div class="description">
<p> <p>
This editor is using a blue line. This editor is using a blue line.
</p> </p>
<pre class="samples"> <pre class="samples">
CKEDITOR.replace( 'editor2', { CKEDITOR.replace( 'editor2', {
magicline_color: 'blue' magicline_color: 'blue'
});</pre> });</pre>
</div> </div>
<textarea cols="80" id="editor2" name="editor2" rows="10"> <textarea cols="80" id="editor2" name="editor2" rows="10">
&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt; &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;
&lt;tbody&gt; &lt;tbody&gt;
&lt;tr&gt; &lt;tr&gt;
&lt;td&gt;This table&lt;/td&gt; &lt;td&gt;This table&lt;/td&gt;
&lt;td&gt;is the&lt;/td&gt; &lt;td&gt;is the&lt;/td&gt;
&lt;td&gt;very first&lt;/td&gt; &lt;td&gt;very first&lt;/td&gt;
&lt;td&gt;element of the document.&lt;/td&gt; &lt;td&gt;element of the document.&lt;/td&gt;
&lt;/tr&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;tr&gt;
&lt;td&gt;We are still&lt;/td&gt; &lt;td&gt;We are still&lt;/td&gt;
&lt;td&gt;able to acces&lt;/td&gt; &lt;td&gt;able to acces&lt;/td&gt;
&lt;td&gt;the space before it.&lt;/td&gt; &lt;td&gt;the space before it.&lt;/td&gt;
&lt;td&gt; &lt;td&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt; &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;
&lt;tbody&gt; &lt;tbody&gt;
&lt;tr&gt; &lt;tr&gt;
&lt;td&gt;This table is inside of a cell of another table.&lt;/td&gt; &lt;td&gt;This table is inside of a cell of another table.&lt;/td&gt;
&lt;/tr&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;tr&gt;
&lt;td&gt;We can type&amp;nbsp;either before or after it though.&lt;/td&gt; &lt;td&gt;We can type&amp;nbsp;either before or after it though.&lt;/td&gt;
&lt;/tr&gt; &lt;/tr&gt;
&lt;/tbody&gt; &lt;/tbody&gt;
&lt;/table&gt; &lt;/table&gt;
&lt;/td&gt; &lt;/td&gt;
&lt;/tr&gt; &lt;/tr&gt;
&lt;/tbody&gt; &lt;/tbody&gt;
&lt;/table&gt; &lt;/table&gt;
&lt;p&gt;Two succesive horizontal lines (&lt;tt&gt;HR&lt;/tt&gt; tags). We can access the space in between:&lt;/p&gt; &lt;p&gt;Two succesive horizontal lines (&lt;tt&gt;HR&lt;/tt&gt; tags). We can access the space in between:&lt;/p&gt;
&lt;hr /&gt; &lt;hr /&gt;
&lt;hr /&gt; &lt;hr /&gt;
&lt;ol&gt; &lt;ol&gt;
&lt;li&gt;This numbered list...&lt;/li&gt; &lt;li&gt;This numbered list...&lt;/li&gt;
&lt;li&gt;...is a neighbour of a horizontal line...&lt;/li&gt; &lt;li&gt;...is a neighbour of a horizontal line...&lt;/li&gt;
&lt;li&gt;...and another list.&lt;/li&gt; &lt;li&gt;...and another list.&lt;/li&gt;
&lt;/ol&gt; &lt;/ol&gt;
&lt;ul&gt; &lt;ul&gt;
&lt;li&gt;We can type between the lists...&lt;/li&gt; &lt;li&gt;We can type between the lists...&lt;/li&gt;
&lt;li&gt;...thanks to &lt;strong&gt;Magicline&lt;/strong&gt;.&lt;/li&gt; &lt;li&gt;...thanks to &lt;strong&gt;Magicline&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt; &lt;/ul&gt;
&lt;p&gt;Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.&lt;/p&gt; &lt;p&gt;Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.&lt;/p&gt;
&lt;p&gt;Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.&lt;/p&gt; &lt;p&gt;Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.&lt;/p&gt;
&lt;p&gt;Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.&lt;/p&gt; &lt;p&gt;Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.&lt;/p&gt;
&lt;div style=&quot;border: 2px dashed green; background: #ddd; text-align: center;&quot;&gt; &lt;div style=&quot;border: 2px dashed green; background: #ddd; text-align: center;&quot;&gt;
&lt;p&gt;This text is wrapped in a&amp;nbsp;&lt;tt&gt;DIV&lt;/tt&gt;&amp;nbsp;element. We can type after this element though.&lt;/p&gt; &lt;p&gt;This text is wrapped in a&amp;nbsp;&lt;tt&gt;DIV&lt;/tt&gt;&amp;nbsp;element. We can type after this element though.&lt;/p&gt;
&lt;/div&gt; &lt;/div&gt;
</textarea> </textarea>
<script> <script>
// This call can be placed at any point after the // This call can be placed at any point after the
// <textarea>, or inside a <head><script> in a // <textarea>, or inside a <head><script> in a
// window.onload event handler. // window.onload event handler.
CKEDITOR.replace( 'editor2', { CKEDITOR.replace( 'editor2', {
extraPlugins: 'magicline', // Ensure that magicline plugin, which is required for this sample, is loaded. extraPlugins: 'magicline', // Ensure that magicline plugin, which is required for this sample, is loaded.
magicline_color: 'blue', // Blue line magicline_color: 'blue', // Blue line
allowedContent: true // Switch off the ACF, so very complex content created to allowedContent: true // Switch off the ACF, so very complex content created to
// show magicline's power isn't filtered. // show magicline's power isn't filtered.
}); });
</script> </script>
</div> </div>
<div id="footer"> <div id="footer">
<hr> <hr>
<p> <p>
CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
</p> </p>
<p id="copy"> <p id="copy">
Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
Knabben. All rights reserved. Knabben. All rights reserved.
</p> </p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,10 +1,10 @@
<script> <script>
var doc = document; var doc = document;
doc.open(); doc.open();
doc.write( window.opener._cke_htmlToLoad ); doc.write( window.opener._cke_htmlToLoad );
doc.close(); doc.close();
delete window.opener._cke_htmlToLoad; delete window.opener._cke_htmlToLoad;
</script> </script>

View File

@ -1,28 +1,28 @@
Software License Agreement Software License Agreement
========================== ==========================
**CKEditor SCAYT Plugin** **CKEditor SCAYT Plugin**
Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved.
Licensed under the terms of any of the following licenses at your choice: Licensed under the terms of any of the following licenses at your choice:
* GNU General Public License Version 2 or later (the "GPL"): * GNU General Public License Version 2 or later (the "GPL"):
http://www.gnu.org/licenses/gpl.html http://www.gnu.org/licenses/gpl.html
* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): * GNU Lesser General Public License Version 2.1 or later (the "LGPL"):
http://www.gnu.org/licenses/lgpl.html http://www.gnu.org/licenses/lgpl.html
* Mozilla Public License Version 1.1 or later (the "MPL"): * Mozilla Public License Version 1.1 or later (the "MPL"):
http://www.mozilla.org/MPL/MPL-1.1.html http://www.mozilla.org/MPL/MPL-1.1.html
You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice.
Sources of Intellectual Property Included in this plugin Sources of Intellectual Property Included in this plugin
-------------------------------------------------------- --------------------------------------------------------
Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission.
Trademarks Trademarks
---------- ----------
CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.

View File

@ -1,25 +1,25 @@
CKEditor SCAYT Plugin CKEditor SCAYT Plugin
===================== =====================
This plugin brings Spell Check As You Type (SCAYT) into CKEditor. This plugin brings Spell Check As You Type (SCAYT) into CKEditor.
SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution.
Installation Installation
------------ ------------
1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation. 1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation.
2. Enable the "scayt" plugin in the CKEditor configuration file (config.js): 2. Enable the "scayt" plugin in the CKEditor configuration file (config.js):
config.extraPlugins = 'scayt'; config.extraPlugins = 'scayt';
That's all. SCAYT will appear on the editor toolbar and will be ready to use. That's all. SCAYT will appear on the editor toolbar and will be ready to use.
License License
------- -------
Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
See LICENSE.md for more information. See LICENSE.md for more information.
Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/).

View File

@ -1,232 +1,232 @@
<!DOCTYPE html> <!DOCTYPE html>
<!-- <!--
Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
--> -->
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Toolbar Configuration &mdash; CKEditor Sample</title> <title>Toolbar Configuration &mdash; CKEditor Sample</title>
<meta name="ckeditor-sample-name" content="Toolbar Configurations"> <meta name="ckeditor-sample-name" content="Toolbar Configurations">
<meta name="ckeditor-sample-group" content="Advanced Samples"> <meta name="ckeditor-sample-group" content="Advanced Samples">
<meta name="ckeditor-sample-description" content="Configuring CKEditor to display full or custom toolbar layout."> <meta name="ckeditor-sample-description" content="Configuring CKEditor to display full or custom toolbar layout.">
<script src="../../../ckeditor.js"></script> <script src="../../../ckeditor.js"></script>
<link href="../../../samples/sample.css" rel="stylesheet"> <link href="../../../samples/sample.css" rel="stylesheet">
</head> </head>
<body> <body>
<h1 class="samples"> <h1 class="samples">
<a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Toolbar Configuration <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Toolbar Configuration
</h1> </h1>
<div class="description"> <div class="description">
<p> <p>
This sample page demonstrates editor with loaded <a href="#fullToolbar">full toolbar</a> (all registered buttons) and, if This sample page demonstrates editor with loaded <a href="#fullToolbar">full toolbar</a> (all registered buttons) and, if
current editor's configuration modifies default settings, also editor with <a href="#currentToolbar">modified toolbar</a>. current editor's configuration modifies default settings, also editor with <a href="#currentToolbar">modified toolbar</a>.
</p> </p>
<p>Since CKEditor 4 there are two ways to configure toolbar buttons.</p> <p>Since CKEditor 4 there are two ways to configure toolbar buttons.</p>
<h2 class="samples">By <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbar">config.toolbar</a></h2> <h2 class="samples">By <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbar">config.toolbar</a></h2>
<p> <p>
You can explicitly define which buttons are displayed in which groups and in which order. You can explicitly define which buttons are displayed in which groups and in which order.
This is the more precise setting, but less flexible. If newly added plugin adds its This is the more precise setting, but less flexible. If newly added plugin adds its
own button you'll have to add it manually to your <code>config.toolbar</code> setting as well. own button you'll have to add it manually to your <code>config.toolbar</code> setting as well.
</p> </p>
<p>To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:</p> <p>To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:</p>
<pre class="samples"> <pre class="samples">
CKEDITOR.replace( <em>'textarea_id'</em>, { CKEDITOR.replace( <em>'textarea_id'</em>, {
<strong>toolbar:</strong> [ <strong>toolbar:</strong> [
{ name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] }, // Defines toolbar group with name (used to create voice label) and items in 3 subgroups. { name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] }, // Defines toolbar group with name (used to create voice label) and items in 3 subgroups.
[ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ], // Defines toolbar group without name. [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ], // Defines toolbar group without name.
'/', // Line break - next group will be placed in new line. '/', // Line break - next group will be placed in new line.
{ name: 'basicstyles', items: [ 'Bold', 'Italic' ] } { name: 'basicstyles', items: [ 'Bold', 'Italic' ] }
] ]
});</pre> });</pre>
<h2 class="samples">By <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbarGroups">config.toolbarGroups</a></h2> <h2 class="samples">By <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbarGroups">config.toolbarGroups</a></h2>
<p> <p>
You can define which groups of buttons (like e.g. <code>basicstyles</code>, <code>clipboard</code> You can define which groups of buttons (like e.g. <code>basicstyles</code>, <code>clipboard</code>
and <code>forms</code>) are displayed and in which order. Registered buttons are associated and <code>forms</code>) are displayed and in which order. Registered buttons are associated
with toolbar groups by <code>toolbar</code> property in their definition. with toolbar groups by <code>toolbar</code> property in their definition.
This setting's advantage is that you don't have to modify toolbar configuration This setting's advantage is that you don't have to modify toolbar configuration
when adding/removing plugins which register their own buttons. when adding/removing plugins which register their own buttons.
</p> </p>
<p>To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:</p> <p>To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:</p>
<pre class="samples"> <pre class="samples">
CKEDITOR.replace( <em>'textarea_id'</em>, { CKEDITOR.replace( <em>'textarea_id'</em>, {
<strong>toolbarGroups:</strong> [ <strong>toolbarGroups:</strong> [
{ name: 'document', groups: [ 'mode', 'document' ] }, // Displays document group with its two subgroups. { name: 'document', groups: [ 'mode', 'document' ] }, // Displays document group with its two subgroups.
{ name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, // Group's name will be used to create voice label. { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, // Group's name will be used to create voice label.
'/', // Line break - next group will be placed in new line. '/', // Line break - next group will be placed in new line.
{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
{ name: 'links' } { name: 'links' }
] ]
// NOTE: Remember to leave 'toolbar' property with the default value (null). // NOTE: Remember to leave 'toolbar' property with the default value (null).
});</pre> });</pre>
</div> </div>
<div id="currentToolbar" style="display: none"> <div id="currentToolbar" style="display: none">
<h2 class="samples">Current toolbar configuration</h2> <h2 class="samples">Current toolbar configuration</h2>
<p>Below you can see editor with current toolbar definition.</p> <p>Below you can see editor with current toolbar definition.</p>
<textarea cols="80" id="editorCurrent" name="editorCurrent" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> <textarea cols="80" id="editorCurrent" name="editorCurrent" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
<pre id="editorCurrentCfg" class="samples"></pre> <pre id="editorCurrentCfg" class="samples"></pre>
</div> </div>
<div id="fullToolbar"> <div id="fullToolbar">
<h2 class="samples">Full toolbar configuration</h2> <h2 class="samples">Full toolbar configuration</h2>
<p>Below you can see editor with full toolbar, generated automatically by the editor.</p> <p>Below you can see editor with full toolbar, generated automatically by the editor.</p>
<p> <p>
<strong>Note</strong>: To create editor instance with full toolbar you don't have to set anything. <strong>Note</strong>: To create editor instance with full toolbar you don't have to set anything.
Just leave <code>toolbar</code> and <code>toolbarGroups</code> with the default, <code>null</code> values. Just leave <code>toolbar</code> and <code>toolbarGroups</code> with the default, <code>null</code> values.
</p> </p>
<textarea cols="80" id="editorFull" name="editorFull" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> <textarea cols="80" id="editorFull" name="editorFull" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
<pre id="editorFullCfg" class="samples"></pre> <pre id="editorFullCfg" class="samples"></pre>
</div> </div>
<script> <script>
(function() { (function() {
'use strict'; 'use strict';
var buttonsNames; var buttonsNames;
CKEDITOR.config.extraPlugins = 'toolbar'; CKEDITOR.config.extraPlugins = 'toolbar';
CKEDITOR.on( 'instanceReady', function( evt ) { CKEDITOR.on( 'instanceReady', function( evt ) {
var editor = evt.editor, var editor = evt.editor,
editorCurrent = editor.name == 'editorCurrent', editorCurrent = editor.name == 'editorCurrent',
defaultToolbar = !( editor.config.toolbar || editor.config.toolbarGroups || editor.config.removeButtons ), defaultToolbar = !( editor.config.toolbar || editor.config.toolbarGroups || editor.config.removeButtons ),
pre = CKEDITOR.document.getById( editor.name + 'Cfg' ), pre = CKEDITOR.document.getById( editor.name + 'Cfg' ),
output = ''; output = '';
if ( editorCurrent ) { if ( editorCurrent ) {
// If default toolbar configuration has been modified, show "current toolbar" section. // If default toolbar configuration has been modified, show "current toolbar" section.
if ( !defaultToolbar ) if ( !defaultToolbar )
CKEDITOR.document.getById( 'currentToolbar' ).show(); CKEDITOR.document.getById( 'currentToolbar' ).show();
else else
return; return;
} }
if ( !buttonsNames ) if ( !buttonsNames )
buttonsNames = createButtonsNamesHash( editor.ui.items ); buttonsNames = createButtonsNamesHash( editor.ui.items );
// Toolbar isn't set explicitly, so it was created automatically from toolbarGroups. // Toolbar isn't set explicitly, so it was created automatically from toolbarGroups.
if ( !editor.config.toolbar ) { if ( !editor.config.toolbar ) {
output += output +=
'// Toolbar configuration generated automatically by the editor based on config.toolbarGroups.\n' + '// Toolbar configuration generated automatically by the editor based on config.toolbarGroups.\n' +
dumpToolbarConfiguration( editor ) + dumpToolbarConfiguration( editor ) +
'\n\n' + '\n\n' +
'// Toolbar groups configuration.\n' + '// Toolbar groups configuration.\n' +
dumpToolbarConfiguration( editor, true ) dumpToolbarConfiguration( editor, true )
} }
// Toolbar groups doesn't count in this case - print only toolbar. // Toolbar groups doesn't count in this case - print only toolbar.
else { else {
output += '// Toolbar configuration.\n' + output += '// Toolbar configuration.\n' +
dumpToolbarConfiguration( editor ); dumpToolbarConfiguration( editor );
} }
// Recreate to avoid old IE from loosing whitespaces on filling <pre> content. // Recreate to avoid old IE from loosing whitespaces on filling <pre> content.
var preOutput = pre.getOuterHtml().replace( /(?=<\/)/, output ); var preOutput = pre.getOuterHtml().replace( /(?=<\/)/, output );
CKEDITOR.dom.element.createFromHtml( preOutput ).replace( pre ); CKEDITOR.dom.element.createFromHtml( preOutput ).replace( pre );
} ); } );
CKEDITOR.replace( 'editorCurrent', { height: 100 } ); CKEDITOR.replace( 'editorCurrent', { height: 100 } );
CKEDITOR.replace( 'editorFull', { CKEDITOR.replace( 'editorFull', {
// Reset toolbar settings, so full toolbar will be generated automatically. // Reset toolbar settings, so full toolbar will be generated automatically.
toolbar: null, toolbar: null,
toolbarGroups: null, toolbarGroups: null,
removeButtons: null, removeButtons: null,
height: 100 height: 100
} ); } );
function dumpToolbarConfiguration( editor, printGroups ) { function dumpToolbarConfiguration( editor, printGroups ) {
var output = [], var output = [],
toolbar = editor.toolbar; toolbar = editor.toolbar;
for ( var i = 0; i < toolbar.length; ++i ) { for ( var i = 0; i < toolbar.length; ++i ) {
var group = dumpToolbarGroup( toolbar[ i ], printGroups ); var group = dumpToolbarGroup( toolbar[ i ], printGroups );
if ( group ) if ( group )
output.push( group ); output.push( group );
} }
return 'config.toolbar' + ( printGroups ? 'Groups' : '' ) + ' = [\n\t' + output.join( ',\n\t' ) + '\n];'; return 'config.toolbar' + ( printGroups ? 'Groups' : '' ) + ' = [\n\t' + output.join( ',\n\t' ) + '\n];';
} }
function dumpToolbarGroup( group, printGroups ) { function dumpToolbarGroup( group, printGroups ) {
var output = []; var output = [];
if ( typeof group == 'string' ) if ( typeof group == 'string' )
return '\'' + group + '\''; return '\'' + group + '\'';
if ( CKEDITOR.tools.isArray( group ) ) if ( CKEDITOR.tools.isArray( group ) )
return dumpToolbarItems( group ); return dumpToolbarItems( group );
// Skip group when printing entire toolbar configuration and there are no items in this group. // Skip group when printing entire toolbar configuration and there are no items in this group.
if ( !printGroups && !group.items ) if ( !printGroups && !group.items )
return; return;
if ( group.name ) if ( group.name )
output.push( 'name: \'' + group.name + '\'' ); output.push( 'name: \'' + group.name + '\'' );
if ( group.groups ) if ( group.groups )
output.push( 'groups: ' + dumpToolbarItems( group.groups ) ); output.push( 'groups: ' + dumpToolbarItems( group.groups ) );
if ( !printGroups ) if ( !printGroups )
output.push( 'items: ' + dumpToolbarItems( group.items ) ); output.push( 'items: ' + dumpToolbarItems( group.items ) );
return '{ ' + output.join( ', ' ) + ' }'; return '{ ' + output.join( ', ' ) + ' }';
} }
function dumpToolbarItems( items ) { function dumpToolbarItems( items ) {
if ( typeof items == 'string' ) if ( typeof items == 'string' )
return '\'' + items + '\''; return '\'' + items + '\'';
var names = [], var names = [],
i, item; i, item;
for ( var i = 0; i < items.length; ++i ) { for ( var i = 0; i < items.length; ++i ) {
item = items[ i ]; item = items[ i ];
if ( typeof item == 'string' ) if ( typeof item == 'string' )
names.push( item ); names.push( item );
else { else {
if ( item.type == CKEDITOR.UI_SEPARATOR ) if ( item.type == CKEDITOR.UI_SEPARATOR )
names.push( '-' ); names.push( '-' );
else else
names.push( buttonsNames[ item.name ] ); names.push( buttonsNames[ item.name ] );
} }
} }
return '[ \'' + names.join( '\', \'' ) + '\' ]'; return '[ \'' + names.join( '\', \'' ) + '\' ]';
} }
// Creates { 'lowercased': 'LowerCased' } buttons names hash. // Creates { 'lowercased': 'LowerCased' } buttons names hash.
function createButtonsNamesHash( items ) { function createButtonsNamesHash( items ) {
var hash = {}, var hash = {},
name; name;
for ( name in items ) { for ( name in items ) {
hash[ items[ name ].name ] = name; hash[ items[ name ].name ] = name;
} }
return hash; return hash;
} }
})(); })();
</script> </script>
<div id="footer"> <div id="footer">
<hr> <hr>
<p> <p>
CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
</p> </p>
<p id="copy"> <p id="copy">
Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
Knabben. All rights reserved. Knabben. All rights reserved.
</p> </p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,28 +1,28 @@
Software License Agreement Software License Agreement
========================== ==========================
**CKEditor WSC Plugin** **CKEditor WSC Plugin**
Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved.
Licensed under the terms of any of the following licenses at your choice: Licensed under the terms of any of the following licenses at your choice:
* GNU General Public License Version 2 or later (the "GPL"): * GNU General Public License Version 2 or later (the "GPL"):
http://www.gnu.org/licenses/gpl.html http://www.gnu.org/licenses/gpl.html
* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): * GNU Lesser General Public License Version 2.1 or later (the "LGPL"):
http://www.gnu.org/licenses/lgpl.html http://www.gnu.org/licenses/lgpl.html
* Mozilla Public License Version 1.1 or later (the "MPL"): * Mozilla Public License Version 1.1 or later (the "MPL"):
http://www.mozilla.org/MPL/MPL-1.1.html http://www.mozilla.org/MPL/MPL-1.1.html
You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice.
Sources of Intellectual Property Included in this plugin Sources of Intellectual Property Included in this plugin
-------------------------------------------------------- --------------------------------------------------------
Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission.
Trademarks Trademarks
---------- ----------
CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.

View File

@ -1,25 +1,25 @@
CKEditor WebSpellChecker Plugin CKEditor WebSpellChecker Plugin
=============================== ===============================
This plugin brings Web Spell Checker (WSC) into CKEditor. This plugin brings Web Spell Checker (WSC) into CKEditor.
WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution.
Installation Installation
------------ ------------
1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation. 1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation.
2. Enable the "wsc" plugin in the CKEditor configuration file (config.js): 2. Enable the "wsc" plugin in the CKEditor configuration file (config.js):
config.extraPlugins = 'wsc'; config.extraPlugins = 'wsc';
That's all. WSC will appear on the editor toolbar and will be ready to use. That's all. WSC will appear on the editor toolbar and will be ready to use.
License License
------- -------
Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
See LICENSE.md for more information. See LICENSE.md for more information.
Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/).

View File

@ -1,66 +1,66 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- <!--
Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license For licensing, see LICENSE.html or http://ckeditor.com/license
--> -->
<html> <html>
<head> <head>
<title></title> <title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript"> <script type="text/javascript">
function gup( name ) function gup( name )
{ {
name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ; name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ;
var regexS = '[\\?&]' + name + '=([^&#]*)' ; var regexS = '[\\?&]' + name + '=([^&#]*)' ;
var regex = new RegExp( regexS ) ; var regex = new RegExp( regexS ) ;
var results = regex.exec( window.location.href ) ; var results = regex.exec( window.location.href ) ;
if ( results ) if ( results )
return results[ 1 ] ; return results[ 1 ] ;
else else
return '' ; return '' ;
} }
var interval; var interval;
function sendData2Master() function sendData2Master()
{ {
var destination = window.parent.parent ; var destination = window.parent.parent ;
try try
{ {
if ( destination.XDTMaster ) if ( destination.XDTMaster )
{ {
var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ; var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ;
window.clearInterval( interval ) ; window.clearInterval( interval ) ;
} }
} }
catch (e) {} catch (e) {}
} }
function OnMessage (event) { function OnMessage (event) {
var message = event.data; var message = event.data;
var destination = window.parent.parent; var destination = window.parent.parent;
destination.XDTMaster.read( [ 'end', message, 'fpm' ] ) ; destination.XDTMaster.read( [ 'end', message, 'fpm' ] ) ;
} }
function listenPostMessage() { function listenPostMessage() {
if (window.addEventListener) { // all browsers except IE before version 9 if (window.addEventListener) { // all browsers except IE before version 9
window.addEventListener ("message", OnMessage, false); window.addEventListener ("message", OnMessage, false);
}else { }else {
if (window.attachEvent) { // IE before version 9 if (window.attachEvent) { // IE before version 9
window.attachEvent("onmessage", OnMessage); window.attachEvent("onmessage", OnMessage);
} }
} }
} }
function onLoad() function onLoad()
{ {
interval = window.setInterval( sendData2Master, 100 ); interval = window.setInterval( sendData2Master, 100 );
listenPostMessage(); listenPostMessage();
} }
</script> </script>
</head> </head>
<body onload="onLoad()"><p></p></body> <body onload="onLoad()"><p></p></body>
</html> </html>

View File

@ -1,118 +1,118 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>iframe</title> <title>iframe</title>
<style> <style>
html,body{ html,body{
margin: 0; margin: 0;
height: 100%; height: 100%;
font: 13px/1.555 "Trebuchet MS", sans-serif; font: 13px/1.555 "Trebuchet MS", sans-serif;
} }
a{ a{
color: #888; color: #888;
font-weight: bold; font-weight: bold;
text-decoration: none; text-decoration: none;
border-bottom: 1px solid #888; border-bottom: 1px solid #888;
} }
.main-box { .main-box {
color:#252525; color:#252525;
padding: 3px 5px; padding: 3px 5px;
text-align: justify; text-align: justify;
} }
.main-box p{margin: 0 0 14px;} .main-box p{margin: 0 0 14px;}
.main-box .cerr{ .main-box .cerr{
color: #f00000; color: #f00000;
border-bottom-color: #f00000; border-bottom-color: #f00000;
} }
</style> </style>
</head> </head>
<body> <body>
<div id="content" class="main-box"></div> <div id="content" class="main-box"></div>
<iframe src="" frameborder="0" id="spelltext" name="spelltext" style="display:none; width: 100%" ></iframe> <iframe src="" frameborder="0" id="spelltext" name="spelltext" style="display:none; width: 100%" ></iframe>
<iframe src="" frameborder="0" id="loadsuggestfirst" name="loadsuggestfirst" style="display:none; width: 100%" ></iframe> <iframe src="" frameborder="0" id="loadsuggestfirst" name="loadsuggestfirst" style="display:none; width: 100%" ></iframe>
<iframe src="" frameborder="0" id="loadspellsuggestall" name="loadspellsuggestall" style="display:none; width: 100%" ></iframe> <iframe src="" frameborder="0" id="loadspellsuggestall" name="loadspellsuggestall" style="display:none; width: 100%" ></iframe>
<iframe src="" frameborder="0" id="loadOptionsForm" name="loadOptionsForm" style="display:none; width: 100%" ></iframe> <iframe src="" frameborder="0" id="loadOptionsForm" name="loadOptionsForm" style="display:none; width: 100%" ></iframe>
<script> <script>
(function(window) { (function(window) {
// Constructor Manager PostMessage // Constructor Manager PostMessage
var ManagerPostMessage = function() { var ManagerPostMessage = function() {
var _init = function(handler) { var _init = function(handler) {
if (document.addEventListener) { if (document.addEventListener) {
window.addEventListener('message', handler, false); window.addEventListener('message', handler, false);
} else { } else {
window.attachEvent("onmessage", handler); window.attachEvent("onmessage", handler);
}; };
}; };
var _sendCmd = function(o) { var _sendCmd = function(o) {
var str, var str,
type = Object.prototype.toString, type = Object.prototype.toString,
fn = o.fn || null, fn = o.fn || null,
id = o.id || '', id = o.id || '',
target = o.target || window, target = o.target || window,
message = o.message || { 'id': id }; message = o.message || { 'id': id };
if (type.call(o.message) == "[object Object]") { if (type.call(o.message) == "[object Object]") {
(o.message['id']) ? o.message['id'] : o.message['id'] = id; (o.message['id']) ? o.message['id'] : o.message['id'] = id;
message = o.message; message = o.message;
}; };
str = JSON.stringify(message, fn); str = JSON.stringify(message, fn);
target.postMessage(str, '*'); target.postMessage(str, '*');
}; };
return { return {
init: _init, init: _init,
send: _sendCmd send: _sendCmd
}; };
}; };
var manageMessageTmp = new ManagerPostMessage; var manageMessageTmp = new ManagerPostMessage;
var appString = (function(){ var appString = (function(){
var spell = parent.CKEDITOR.config.wsc.DefaultParams.scriptPath; var spell = parent.CKEDITOR.config.wsc.DefaultParams.scriptPath;
var serverUrl = parent.CKEDITOR.config.wsc.DefaultParams.serviceHost; var serverUrl = parent.CKEDITOR.config.wsc.DefaultParams.serviceHost;
return serverUrl + spell; return serverUrl + spell;
})(); })();
function loadScript(src, callback) { function loadScript(src, callback) {
var scriptTag = document.createElement("script"); var scriptTag = document.createElement("script");
scriptTag.type = "text/javascript"; scriptTag.type = "text/javascript";
callback ? callback : callback = function() {}; callback ? callback : callback = function() {};
if(scriptTag.readyState) { if(scriptTag.readyState) {
//IE //IE
scriptTag.onreadystatechange = function() { scriptTag.onreadystatechange = function() {
if (scriptTag.readyState == "loaded" || if (scriptTag.readyState == "loaded" ||
scriptTag.readyState == "complete") { scriptTag.readyState == "complete") {
scriptTag.onreadystatechange = null; scriptTag.onreadystatechange = null;
setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1) setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1)
callback(); callback();
} }
}; };
}else{ }else{
//Others //Others
scriptTag.onload = function() { scriptTag.onload = function() {
setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1); setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);
callback(); callback();
}; };
}; };
scriptTag.src = src; scriptTag.src = src;
document.getElementsByTagName("head")[0].appendChild(scriptTag); document.getElementsByTagName("head")[0].appendChild(scriptTag);
}; };
window.onload = function(){ window.onload = function(){
loadScript(appString, function(){ loadScript(appString, function(){
manageMessageTmp.send({ manageMessageTmp.send({
'id': 'iframeOnload', 'id': 'iframeOnload',
'target': window.parent 'target': window.parent
}); });
}); });
} }
})(this); })(this);
</script> </script>
</body> </body>
</html> </html>

View File

@ -1,52 +1,52 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<!-- <!--
Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license For licensing, see LICENSE.html or http://ckeditor.com/license
--> -->
<html> <html>
<head> <head>
<title></title> <title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript"> <script type="text/javascript">
function doLoadScript( url ) function doLoadScript( url )
{ {
if ( !url ) if ( !url )
return false ; return false ;
var s = document.createElement( "script" ) ; var s = document.createElement( "script" ) ;
s.type = "text/javascript" ; s.type = "text/javascript" ;
s.src = url ; s.src = url ;
document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ; document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ;
return true ; return true ;
} }
var opener; var opener;
function tryLoad() function tryLoad()
{ {
opener = window.parent; opener = window.parent;
// get access to global parameters // get access to global parameters
var oParams = window.opener.oldFramesetPageParams; var oParams = window.opener.oldFramesetPageParams;
// make frameset rows string prepare // make frameset rows string prepare
var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ; var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ;
document.getElementById( 'itFrameset' ).rows = sFramesetRows ; document.getElementById( 'itFrameset' ).rows = sFramesetRows ;
// dynamic including init frames and crossdomain transport code // dynamic including init frames and crossdomain transport code
// from config sproxy_js_frameset url // from config sproxy_js_frameset url
var addScriptUrl = oParams.sproxy_js_frameset ; var addScriptUrl = oParams.sproxy_js_frameset ;
doLoadScript( addScriptUrl ) ; doLoadScript( addScriptUrl ) ;
} }
</script> </script>
</head> </head>
<frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0"> <frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0">
<frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame> <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame>
<frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame> <frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame>
<frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame> <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame>
<frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame> <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame>
</frameset> </frameset>
</html> </html>

File diff suppressed because one or more lines are too long

View File

@ -1,51 +1,51 @@
"Moono" Skin "Moono" Skin
==================== ====================
This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor
[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by [skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by
the CKEditor team. "Moono" is maintained by the core developers. the CKEditor team. "Moono" is maintained by the core developers.
For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK)
documentation. documentation.
Features Features
------------------- -------------------
"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency. "Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency.
It comes with the following features: It comes with the following features:
- Chameleon feature with brightness, - Chameleon feature with brightness,
- high-contrast compatibility, - high-contrast compatibility,
- graphics source provided in SVG. - graphics source provided in SVG.
Directory Structure Directory Structure
------------------- -------------------
CSS parts: CSS parts:
- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, - **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance,
- **mainui.css**: the file contains styles of entire editor outline structures, - **mainui.css**: the file contains styles of entire editor outline structures,
- **toolbar.css**: the file contains styles of the editor toolbar space (top), - **toolbar.css**: the file contains styles of the editor toolbar space (top),
- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, - **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar,
- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded - **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded
until the first panel open up, until the first panel open up,
- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), - **elementspath.css**: the file contains styles of the editor elements path bar (bottom),
- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, - **menu.css**: the file contains styles of all editor menus including context menu and button drop-down,
it's not loaded until the first menu open up, it's not loaded until the first menu open up,
- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, - **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open,
- **reset.css**: the file defines the basis of style resets among all editor UI spaces, - **reset.css**: the file defines the basis of style resets among all editor UI spaces,
- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, - **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference,
- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. - **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks.
Other parts: Other parts:
- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, - **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature,
- **icons/**: contains all skin defined icons, - **icons/**: contains all skin defined icons,
- **images/**: contains a fill general used images, - **images/**: contains a fill general used images,
- **dev/**: contains SVG source of the skin icons. - **dev/**: contains SVG source of the skin icons.
License License
------- -------
Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
See LICENSE.md for more information. See LICENSE.md for more information.

View File

@ -1,10 +1,10 @@
<script> <script>
var doc = document; var doc = document;
doc.open(); doc.open();
doc.write( window.opener._cke_htmlToLoad ); doc.write( window.opener._cke_htmlToLoad );
doc.close(); doc.close();
delete window.opener._cke_htmlToLoad; delete window.opener._cke_htmlToLoad;
</script> </script>

View File

@ -1,28 +1,28 @@
Software License Agreement Software License Agreement
========================== ==========================
**CKEditor SCAYT Plugin** **CKEditor SCAYT Plugin**
Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved.
Licensed under the terms of any of the following licenses at your choice: Licensed under the terms of any of the following licenses at your choice:
* GNU General Public License Version 2 or later (the "GPL"): * GNU General Public License Version 2 or later (the "GPL"):
http://www.gnu.org/licenses/gpl.html http://www.gnu.org/licenses/gpl.html
* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): * GNU Lesser General Public License Version 2.1 or later (the "LGPL"):
http://www.gnu.org/licenses/lgpl.html http://www.gnu.org/licenses/lgpl.html
* Mozilla Public License Version 1.1 or later (the "MPL"): * Mozilla Public License Version 1.1 or later (the "MPL"):
http://www.mozilla.org/MPL/MPL-1.1.html http://www.mozilla.org/MPL/MPL-1.1.html
You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice.
Sources of Intellectual Property Included in this plugin Sources of Intellectual Property Included in this plugin
-------------------------------------------------------- --------------------------------------------------------
Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission.
Trademarks Trademarks
---------- ----------
CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.

View File

@ -1,25 +1,25 @@
CKEditor SCAYT Plugin CKEditor SCAYT Plugin
===================== =====================
This plugin brings Spell Check As You Type (SCAYT) into CKEditor. This plugin brings Spell Check As You Type (SCAYT) into CKEditor.
SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution.
Installation Installation
------------ ------------
1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation. 1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation.
2. Enable the "scayt" plugin in the CKEditor configuration file (config.js): 2. Enable the "scayt" plugin in the CKEditor configuration file (config.js):
config.extraPlugins = 'scayt'; config.extraPlugins = 'scayt';
That's all. SCAYT will appear on the editor toolbar and will be ready to use. That's all. SCAYT will appear on the editor toolbar and will be ready to use.
License License
------- -------
Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
See LICENSE.md for more information. See LICENSE.md for more information.
Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/).

View File

@ -1,28 +1,28 @@
Software License Agreement Software License Agreement
========================== ==========================
**CKEditor WSC Plugin** **CKEditor WSC Plugin**
Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved.
Licensed under the terms of any of the following licenses at your choice: Licensed under the terms of any of the following licenses at your choice:
* GNU General Public License Version 2 or later (the "GPL"): * GNU General Public License Version 2 or later (the "GPL"):
http://www.gnu.org/licenses/gpl.html http://www.gnu.org/licenses/gpl.html
* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): * GNU Lesser General Public License Version 2.1 or later (the "LGPL"):
http://www.gnu.org/licenses/lgpl.html http://www.gnu.org/licenses/lgpl.html
* Mozilla Public License Version 1.1 or later (the "MPL"): * Mozilla Public License Version 1.1 or later (the "MPL"):
http://www.mozilla.org/MPL/MPL-1.1.html http://www.mozilla.org/MPL/MPL-1.1.html
You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice.
Sources of Intellectual Property Included in this plugin Sources of Intellectual Property Included in this plugin
-------------------------------------------------------- --------------------------------------------------------
Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission.
Trademarks Trademarks
---------- ----------
CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.

View File

@ -1,25 +1,25 @@
CKEditor WebSpellChecker Plugin CKEditor WebSpellChecker Plugin
=============================== ===============================
This plugin brings Web Spell Checker (WSC) into CKEditor. This plugin brings Web Spell Checker (WSC) into CKEditor.
WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution.
Installation Installation
------------ ------------
1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation. 1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation.
2. Enable the "wsc" plugin in the CKEditor configuration file (config.js): 2. Enable the "wsc" plugin in the CKEditor configuration file (config.js):
config.extraPlugins = 'wsc'; config.extraPlugins = 'wsc';
That's all. WSC will appear on the editor toolbar and will be ready to use. That's all. WSC will appear on the editor toolbar and will be ready to use.
License License
------- -------
Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
See LICENSE.md for more information. See LICENSE.md for more information.
Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/).

View File

@ -1,66 +1,66 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- <!--
Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license For licensing, see LICENSE.html or http://ckeditor.com/license
--> -->
<html> <html>
<head> <head>
<title></title> <title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript"> <script type="text/javascript">
function gup( name ) function gup( name )
{ {
name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ; name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ;
var regexS = '[\\?&]' + name + '=([^&#]*)' ; var regexS = '[\\?&]' + name + '=([^&#]*)' ;
var regex = new RegExp( regexS ) ; var regex = new RegExp( regexS ) ;
var results = regex.exec( window.location.href ) ; var results = regex.exec( window.location.href ) ;
if ( results ) if ( results )
return results[ 1 ] ; return results[ 1 ] ;
else else
return '' ; return '' ;
} }
var interval; var interval;
function sendData2Master() function sendData2Master()
{ {
var destination = window.parent.parent ; var destination = window.parent.parent ;
try try
{ {
if ( destination.XDTMaster ) if ( destination.XDTMaster )
{ {
var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ; var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ;
window.clearInterval( interval ) ; window.clearInterval( interval ) ;
} }
} }
catch (e) {} catch (e) {}
} }
function OnMessage (event) { function OnMessage (event) {
var message = event.data; var message = event.data;
var destination = window.parent.parent; var destination = window.parent.parent;
destination.XDTMaster.read( [ 'end', message, 'fpm' ] ) ; destination.XDTMaster.read( [ 'end', message, 'fpm' ] ) ;
} }
function listenPostMessage() { function listenPostMessage() {
if (window.addEventListener) { // all browsers except IE before version 9 if (window.addEventListener) { // all browsers except IE before version 9
window.addEventListener ("message", OnMessage, false); window.addEventListener ("message", OnMessage, false);
}else { }else {
if (window.attachEvent) { // IE before version 9 if (window.attachEvent) { // IE before version 9
window.attachEvent("onmessage", OnMessage); window.attachEvent("onmessage", OnMessage);
} }
} }
} }
function onLoad() function onLoad()
{ {
interval = window.setInterval( sendData2Master, 100 ); interval = window.setInterval( sendData2Master, 100 );
listenPostMessage(); listenPostMessage();
} }
</script> </script>
</head> </head>
<body onload="onLoad()"><p></p></body> <body onload="onLoad()"><p></p></body>
</html> </html>

View File

@ -1,118 +1,118 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>iframe</title> <title>iframe</title>
<style> <style>
html,body{ html,body{
margin: 0; margin: 0;
height: 100%; height: 100%;
font: 13px/1.555 "Trebuchet MS", sans-serif; font: 13px/1.555 "Trebuchet MS", sans-serif;
} }
a{ a{
color: #888; color: #888;
font-weight: bold; font-weight: bold;
text-decoration: none; text-decoration: none;
border-bottom: 1px solid #888; border-bottom: 1px solid #888;
} }
.main-box { .main-box {
color:#252525; color:#252525;
padding: 3px 5px; padding: 3px 5px;
text-align: justify; text-align: justify;
} }
.main-box p{margin: 0 0 14px;} .main-box p{margin: 0 0 14px;}
.main-box .cerr{ .main-box .cerr{
color: #f00000; color: #f00000;
border-bottom-color: #f00000; border-bottom-color: #f00000;
} }
</style> </style>
</head> </head>
<body> <body>
<div id="content" class="main-box"></div> <div id="content" class="main-box"></div>
<iframe src="" frameborder="0" id="spelltext" name="spelltext" style="display:none; width: 100%" ></iframe> <iframe src="" frameborder="0" id="spelltext" name="spelltext" style="display:none; width: 100%" ></iframe>
<iframe src="" frameborder="0" id="loadsuggestfirst" name="loadsuggestfirst" style="display:none; width: 100%" ></iframe> <iframe src="" frameborder="0" id="loadsuggestfirst" name="loadsuggestfirst" style="display:none; width: 100%" ></iframe>
<iframe src="" frameborder="0" id="loadspellsuggestall" name="loadspellsuggestall" style="display:none; width: 100%" ></iframe> <iframe src="" frameborder="0" id="loadspellsuggestall" name="loadspellsuggestall" style="display:none; width: 100%" ></iframe>
<iframe src="" frameborder="0" id="loadOptionsForm" name="loadOptionsForm" style="display:none; width: 100%" ></iframe> <iframe src="" frameborder="0" id="loadOptionsForm" name="loadOptionsForm" style="display:none; width: 100%" ></iframe>
<script> <script>
(function(window) { (function(window) {
// Constructor Manager PostMessage // Constructor Manager PostMessage
var ManagerPostMessage = function() { var ManagerPostMessage = function() {
var _init = function(handler) { var _init = function(handler) {
if (document.addEventListener) { if (document.addEventListener) {
window.addEventListener('message', handler, false); window.addEventListener('message', handler, false);
} else { } else {
window.attachEvent("onmessage", handler); window.attachEvent("onmessage", handler);
}; };
}; };
var _sendCmd = function(o) { var _sendCmd = function(o) {
var str, var str,
type = Object.prototype.toString, type = Object.prototype.toString,
fn = o.fn || null, fn = o.fn || null,
id = o.id || '', id = o.id || '',
target = o.target || window, target = o.target || window,
message = o.message || { 'id': id }; message = o.message || { 'id': id };
if (type.call(o.message) == "[object Object]") { if (type.call(o.message) == "[object Object]") {
(o.message['id']) ? o.message['id'] : o.message['id'] = id; (o.message['id']) ? o.message['id'] : o.message['id'] = id;
message = o.message; message = o.message;
}; };
str = JSON.stringify(message, fn); str = JSON.stringify(message, fn);
target.postMessage(str, '*'); target.postMessage(str, '*');
}; };
return { return {
init: _init, init: _init,
send: _sendCmd send: _sendCmd
}; };
}; };
var manageMessageTmp = new ManagerPostMessage; var manageMessageTmp = new ManagerPostMessage;
var appString = (function(){ var appString = (function(){
var spell = parent.CKEDITOR.config.wsc.DefaultParams.scriptPath; var spell = parent.CKEDITOR.config.wsc.DefaultParams.scriptPath;
var serverUrl = parent.CKEDITOR.config.wsc.DefaultParams.serviceHost; var serverUrl = parent.CKEDITOR.config.wsc.DefaultParams.serviceHost;
return serverUrl + spell; return serverUrl + spell;
})(); })();
function loadScript(src, callback) { function loadScript(src, callback) {
var scriptTag = document.createElement("script"); var scriptTag = document.createElement("script");
scriptTag.type = "text/javascript"; scriptTag.type = "text/javascript";
callback ? callback : callback = function() {}; callback ? callback : callback = function() {};
if(scriptTag.readyState) { if(scriptTag.readyState) {
//IE //IE
scriptTag.onreadystatechange = function() { scriptTag.onreadystatechange = function() {
if (scriptTag.readyState == "loaded" || if (scriptTag.readyState == "loaded" ||
scriptTag.readyState == "complete") { scriptTag.readyState == "complete") {
scriptTag.onreadystatechange = null; scriptTag.onreadystatechange = null;
setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1) setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1)
callback(); callback();
} }
}; };
}else{ }else{
//Others //Others
scriptTag.onload = function() { scriptTag.onload = function() {
setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1); setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);
callback(); callback();
}; };
}; };
scriptTag.src = src; scriptTag.src = src;
document.getElementsByTagName("head")[0].appendChild(scriptTag); document.getElementsByTagName("head")[0].appendChild(scriptTag);
}; };
window.onload = function(){ window.onload = function(){
loadScript(appString, function(){ loadScript(appString, function(){
manageMessageTmp.send({ manageMessageTmp.send({
'id': 'iframeOnload', 'id': 'iframeOnload',
'target': window.parent 'target': window.parent
}); });
}); });
} }
})(this); })(this);
</script> </script>
</body> </body>
</html> </html>

View File

@ -1,52 +1,52 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<!-- <!--
Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license For licensing, see LICENSE.html or http://ckeditor.com/license
--> -->
<html> <html>
<head> <head>
<title></title> <title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript"> <script type="text/javascript">
function doLoadScript( url ) function doLoadScript( url )
{ {
if ( !url ) if ( !url )
return false ; return false ;
var s = document.createElement( "script" ) ; var s = document.createElement( "script" ) ;
s.type = "text/javascript" ; s.type = "text/javascript" ;
s.src = url ; s.src = url ;
document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ; document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ;
return true ; return true ;
} }
var opener; var opener;
function tryLoad() function tryLoad()
{ {
opener = window.parent; opener = window.parent;
// get access to global parameters // get access to global parameters
var oParams = window.opener.oldFramesetPageParams; var oParams = window.opener.oldFramesetPageParams;
// make frameset rows string prepare // make frameset rows string prepare
var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ; var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ;
document.getElementById( 'itFrameset' ).rows = sFramesetRows ; document.getElementById( 'itFrameset' ).rows = sFramesetRows ;
// dynamic including init frames and crossdomain transport code // dynamic including init frames and crossdomain transport code
// from config sproxy_js_frameset url // from config sproxy_js_frameset url
var addScriptUrl = oParams.sproxy_js_frameset ; var addScriptUrl = oParams.sproxy_js_frameset ;
doLoadScript( addScriptUrl ) ; doLoadScript( addScriptUrl ) ;
} }
</script> </script>
</head> </head>
<frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0"> <frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0">
<frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame> <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame>
<frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame> <frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame>
<frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame> <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame>
<frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame> <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame>
</frameset> </frameset>
</html> </html>

View File

@ -1,51 +1,51 @@
"Moono" Skin "Moono" Skin
==================== ====================
This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor
[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by [skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by
the CKEditor team. "Moono" is maintained by the core developers. the CKEditor team. "Moono" is maintained by the core developers.
For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK)
documentation. documentation.
Features Features
------------------- -------------------
"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency. "Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency.
It comes with the following features: It comes with the following features:
- Chameleon feature with brightness, - Chameleon feature with brightness,
- high-contrast compatibility, - high-contrast compatibility,
- graphics source provided in SVG. - graphics source provided in SVG.
Directory Structure Directory Structure
------------------- -------------------
CSS parts: CSS parts:
- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, - **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance,
- **mainui.css**: the file contains styles of entire editor outline structures, - **mainui.css**: the file contains styles of entire editor outline structures,
- **toolbar.css**: the file contains styles of the editor toolbar space (top), - **toolbar.css**: the file contains styles of the editor toolbar space (top),
- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, - **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar,
- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded - **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded
until the first panel open up, until the first panel open up,
- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), - **elementspath.css**: the file contains styles of the editor elements path bar (bottom),
- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, - **menu.css**: the file contains styles of all editor menus including context menu and button drop-down,
it's not loaded until the first menu open up, it's not loaded until the first menu open up,
- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, - **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open,
- **reset.css**: the file defines the basis of style resets among all editor UI spaces, - **reset.css**: the file defines the basis of style resets among all editor UI spaces,
- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, - **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference,
- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. - **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks.
Other parts: Other parts:
- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, - **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature,
- **icons/**: contains all skin defined icons, - **icons/**: contains all skin defined icons,
- **images/**: contains a fill general used images, - **images/**: contains a fill general used images,
- **dev/**: contains SVG source of the skin icons. - **dev/**: contains SVG source of the skin icons.
License License
------- -------
Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
See LICENSE.md for more information. See LICENSE.md for more information.