Skip to content

Commit eaa4592

Browse files
committed
Merge branch 't/11042'
2 parents 6aca6fe + bc7a60b commit eaa4592

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Fixed Issues:
1919
* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing *Delete* key in a list item.
2020
* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on selected image causes browser to go back.
2121
* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting line or table in multiple rows selection causes browser crash. Additionally, the [`editor.insertElement`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert element into every range of a selection any more.
22+
* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on element containing non-editable element was not auto faked.
2223

2324

2425
## CKEditor 4.3

core/selection.js

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,31 @@
378378
};
379379
}
380380

381+
// If fake selection should be applied this function will return instance of
382+
// CKEDITOR.dom.element which should gain fake selection.
383+
function getNonEditableFakeSelectionReceiver( ranges ) {
384+
var enclosedNode,
385+
shrinkedNode,
386+
clone,
387+
range;
388+
389+
if ( ranges.length == 1 && !( range = ranges[ 0 ] ).collapsed &&
390+
( enclosedNode = range.getEnclosedNode() ) && enclosedNode.type == CKEDITOR.NODE_ELEMENT ) {
391+
// So far we can't say that enclosed element is non-editable. Before checking,
392+
// we'll shrink range (clone). Shrinking will stop on non-editable range, or
393+
// innermost element (#11114).
394+
clone = range.clone();
395+
clone.shrink( CKEDITOR.SHRINK_ELEMENT, true );
396+
397+
// If shrinked range still encloses an element, check this one (shrink stops only on non-editable elements).
398+
if ( ( shrinkedNode = clone.getEnclosedNode() ) && shrinkedNode.type == CKEDITOR.NODE_ELEMENT )
399+
enclosedNode = shrinkedNode;
400+
401+
if ( enclosedNode.getAttribute( 'contenteditable' ) == 'false' )
402+
return enclosedNode;
403+
}
404+
}
405+
381406
// Setup all editor instances for the necessary selection hooks.
382407
CKEDITOR.on( 'instanceCreated', function( ev ) {
383408
var editor = ev.editor;
@@ -1713,13 +1738,10 @@
17131738
}
17141739

17151740
// Handle special case - automatic fake selection on non-editable elements.
1716-
var enclosedNode;
1717-
if (
1718-
ranges.length == 1 && !ranges[ 0 ].collapsed &&
1719-
( enclosedNode = ranges[ 0 ].getEnclosedNode() ) &&
1720-
enclosedNode.type == CKEDITOR.NODE_ELEMENT && enclosedNode.getAttribute( 'contenteditable' ) == 'false'
1721-
) {
1722-
this.fake( enclosedNode );
1741+
var receiver = getNonEditableFakeSelectionReceiver( ranges );
1742+
1743+
if ( receiver ) {
1744+
this.fake( receiver );
17231745
return;
17241746
}
17251747

0 commit comments

Comments
 (0)