From b955444908ee961e0857131e0e718c2c4588122f Mon Sep 17 00:00:00 2001 From: Piotr Jasiun Date: Tue, 7 Jan 2014 14:31:08 +0100 Subject: [PATCH 1/5] Reenable drag and drop inline widgets in IE8. --- plugins/widget/plugin.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/plugins/widget/plugin.js b/plugins/widget/plugin.js index 07c465f059e..925c839bcad 100644 --- a/plugins/widget/plugin.js +++ b/plugins/widget/plugin.js @@ -838,10 +838,6 @@ * @property {CKEDITOR.dom.element} wrapper */ - // #11074 - IE8 throws exceptions when dragging widget using the native method. - if ( this.inline && CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) - this.draggable = false; - widgetsRepo.fire( 'instanceCreated', this ); setupWidget( this, widgetDef ); @@ -1937,7 +1933,7 @@ var editable = editor.editable(); // #11123 Firefox needs to listen on document, because otherwise event won't be fired. - editable.attachListener( editable.isInline() ? editable : editor.document, 'drop', function( evt ) { + editable.attachListener( ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) || editable.isInline() ? editable : editor.document, 'drop', function( evt ) { var dataStr = evt.data.$.dataTransfer.getData( 'text' ), dataObj, sourceWidget, @@ -2747,8 +2743,11 @@ // #11145: [IE8] Non-editable content of widget is draggable. if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { widget.wrapper.on( 'dragstart', function( evt ) { - // Allow text dragging inside nested editables. - if ( !getNestedEditable( widget, evt.data.getTarget() ) ) + var target = evt.data.getTarget(); + + // Allow text dragging inside nested editables or using drag handler. + if ( !getNestedEditable( widget, target ) && + !( target.type == CKEDITOR.NODE_ELEMENT && target.hasAttribute( 'data-cke-widget-drag-handler' ) ) ) evt.data.preventDefault(); } ); } From 5cc5f02941be5205bc9e9d218396be4a861ac192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotrek=20Reinmar=20Koszuli=C5=84ski?= Date: Thu, 9 Jan 2014 10:47:22 +0100 Subject: [PATCH 2/5] Extracted too long condition to a function. --- plugins/widget/plugin.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/widget/plugin.js b/plugins/widget/plugin.js index 925c839bcad..dea14b7bf58 100644 --- a/plugins/widget/plugin.js +++ b/plugins/widget/plugin.js @@ -1777,6 +1777,11 @@ return element.hasAttribute( 'data-cke-temp' ); } + // @param {CKEDITOR.dom.element} + function isDragHandler2( element ) { + return element.type == CKEDITOR.NODE_ELEMENT && element.hasAttribute( 'data-cke-widget-drag-handler' ); + } + function finalizeNativeDrop( editor, sourceWidget, range ) { // Save the snapshot with the state before moving widget. // Focus widget, so when we'll undo the DnD, widget will be focused. @@ -2746,8 +2751,7 @@ var target = evt.data.getTarget(); // Allow text dragging inside nested editables or using drag handler. - if ( !getNestedEditable( widget, target ) && - !( target.type == CKEDITOR.NODE_ELEMENT && target.hasAttribute( 'data-cke-widget-drag-handler' ) ) ) + if ( !getNestedEditable( widget, target ) && !isDragHandler2( target ) ) evt.data.preventDefault(); } ); } From 181a14a409686a21a9266e7205edf9ed2a1a19f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotrek=20Reinmar=20Koszuli=C5=84ski?= Date: Thu, 9 Jan 2014 10:52:10 +0100 Subject: [PATCH 3/5] Don't use too long expressions as arguments. --- plugins/widget/plugin.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/widget/plugin.js b/plugins/widget/plugin.js index dea14b7bf58..d8a61104257 100644 --- a/plugins/widget/plugin.js +++ b/plugins/widget/plugin.js @@ -1935,10 +1935,12 @@ lineutils = CKEDITOR.plugins.lineutils; editor.on( 'contentDom', function() { - var editable = editor.editable(); + var editable = editor.editable(), + // #11123 Firefox needs to listen on document, because otherwise event won't be fired. + // #11086 IE8 cannot listen on document. + dropTarget = ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) || editable.isInline() ? editable : editor.document; - // #11123 Firefox needs to listen on document, because otherwise event won't be fired. - editable.attachListener( ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) || editable.isInline() ? editable : editor.document, 'drop', function( evt ) { + editable.attachListener( dropTarget, 'drop', function( evt ) { var dataStr = evt.data.$.dataTransfer.getData( 'text' ), dataObj, sourceWidget, From 86e450060d66be0439675f46005ee8254cd1a5b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotrek=20Reinmar=20Koszuli=C5=84ski?= Date: Fri, 10 Jan 2014 17:27:53 +0100 Subject: [PATCH 4/5] Block dragstart of block widget's drag handler. --- plugins/widget/plugin.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/widget/plugin.js b/plugins/widget/plugin.js index d8a61104257..c962f29b65c 100644 --- a/plugins/widget/plugin.js +++ b/plugins/widget/plugin.js @@ -2752,8 +2752,8 @@ widget.wrapper.on( 'dragstart', function( evt ) { var target = evt.data.getTarget(); - // Allow text dragging inside nested editables or using drag handler. - if ( !getNestedEditable( widget, target ) && !isDragHandler2( target ) ) + // Allow text dragging inside nested editables or dragging inline widget's drag handler. + if ( !getNestedEditable( widget, target ) && !( widget.inline && isDragHandler2( target ) ) ) evt.data.preventDefault(); } ); } From f65eda538aeade806f34f2abf8e952c65e153ae6 Mon Sep 17 00:00:00 2001 From: Piotr Jasiun Date: Mon, 13 Jan 2014 14:41:24 +0100 Subject: [PATCH 5/5] Changelog entry. --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 8f80305654d..687f677f3ac 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -26,6 +26,7 @@ CKEditor 4 Changelog * [#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 [Showblocks](http://ckeditor.com/addon/showblocks) plugin. * [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable's contents while fake selection is on. +* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8]Re enable inline widgets drag & drop on IE8. ## CKEditor 4.3.1