Skip to content

Commit 73ec76c

Browse files
committed
Merge branch 't/10853'
2 parents 918bcc4 + 0ea3c8c commit 73ec76c

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Fixed Issues:
1313
* [#11159](http://dev.ckeditor.com/ticket/11159): [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions in IE9 and IE10.
1414
* [#11101](http://dev.ckeditor.com/ticket/11101): Richcombo no longer breaks when given double quotes.
1515
* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image.
16+
* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image.
1617
* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when inline widget is in a heading.
1718
* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of inline widget.
1819
* [#11182](http://dev.ckeditor.com/ticket/11182): [Internet Explorer 10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details.

plugins/image2/plugin.js

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@
150150
data: function() {
151151
var widget = this,
152152
editor = widget.editor,
153+
doc = editor.document,
154+
editable = editor.editable(),
153155
oldState = widget.oldData,
154156
newState = widget.data;
155157

@@ -181,6 +183,15 @@
181183
if ( this.destroyed ) {
182184
widget = editor.widgets.initOn( element, 'image2', widget.data );
183185

186+
// Once widget was re-created, it may become an inline element without
187+
// block wrapper (i.e. when unaligned, end not captioned). Let's do some
188+
// sort of autoparagraphing here (#10853).
189+
if ( widget.inline && !( new CKEDITOR.dom.elementPath( widget.wrapper, editable ).block ) ) {
190+
var block = doc.createElement( editor.activeEnterMode == CKEDITOR.ENTER_P ? 'p' : 'div' );
191+
block.replace( widget.wrapper );
192+
widget.wrapper.move( block );
193+
}
194+
184195
// The focus must be transferred from the old one (destroyed)
185196
// to the new one (just created).
186197
if ( this.focused ) {
@@ -195,6 +206,7 @@
195206
// According to the new state.
196207
else
197208
setWrapperAlign( widget );
209+
198210
}
199211
} );
200212

@@ -266,9 +278,7 @@
266278
CKEDITOR.plugins.image2 = {
267279
stateShifter: function( editor ) {
268280
// Tag name used for centering non-captioned widgets.
269-
var centerElement = editor.config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div',
270-
271-
doc = editor.document,
281+
var doc = editor.document,
272282
editable = editor.editable(),
273283

274284
// The order that stateActions get executed. It matters!
@@ -287,7 +297,7 @@
287297
// Changed to "center" (non-captioned).
288298
if ( newValue == 'center' ) {
289299
data.destroy();
290-
data.element = wrapInCentering( element );
300+
data.element = wrapInCentering( editor, element );
291301
}
292302

293303
// Changed to "non-center" from "center" while caption removed.
@@ -301,7 +311,7 @@
301311
// Alignment remains and "center" removed caption.
302312
else if ( newValue == 'center' && changed( data, 'hasCaption' ) && !hasCaptionAfter ) {
303313
data.destroy();
304-
data.element = wrapInCentering( element );
314+
data.element = wrapInCentering( editor, element );
305315
}
306316

307317
// Finally set display for figure.
@@ -369,10 +379,10 @@
369379
return data.oldState[ name ] !== data.newState[ name ];
370380
}
371381

372-
function wrapInCentering( element ) {
382+
function wrapInCentering( editor, element ) {
373383
// When widget gets centered. Wrapper must be created.
374384
// Create new <p|div> with text-align:center.
375-
var center = doc.createElement( centerElement, {
385+
var center = doc.createElement( editor.activeEnterMode == CKEDITOR.ENTER_P ? 'p' : 'div', {
376386
styles: { 'text-align': 'center' }
377387
} );
378388

@@ -395,12 +405,14 @@
395405
if ( replaced.getParent() ) {
396406
var range = editor.createRange();
397407

398-
// Move the range before old element and insert element into it.
399408
range.moveToPosition( replaced, CKEDITOR.POSITION_BEFORE_START );
400-
editable.insertElementIntoRange( replacing, range );
401409

402-
// Remove old element.
410+
// Remove old element. Do it before insertion to avoid a case when
411+
// element is moved from 'replaced' element before it, what creates
412+
// a tricky case which insertElementIntorRange does not handle.
403413
replaced.remove();
414+
415+
editable.insertElementIntoRange( replacing, range );
404416
}
405417
else
406418
replacing.replace( replaced );

0 commit comments

Comments
 (0)