|
|
@@ -17,6 +17,8 @@ import CKEditorError from '/ckeditor5/utils/ckeditorerror.js';
|
|
|
import { parse } from '/tests/engine/_utils/view.js';
|
|
|
import { INLINE_FILLER, INLINE_FILLER_LENGTH, isBlockFiller, BR_FILLER } from '/ckeditor5/engine/view/filler.js';
|
|
|
|
|
|
+import createElement from '/ckeditor5/utils/dom/createelement.js';
|
|
|
+
|
|
|
describe( 'Renderer', () => {
|
|
|
let selection, domConverter, renderer;
|
|
|
|
|
|
@@ -760,6 +762,53 @@ describe( 'Renderer', () => {
|
|
|
renderAndExpectNoChanges( renderer, domRoot );
|
|
|
} );
|
|
|
|
|
|
+ it( 'should not change selection if there is no focusedEditable', () => {
|
|
|
+ const domDiv = createElement( document, 'div', null, 'not editable' );
|
|
|
+ document.body.appendChild( domDiv );
|
|
|
+
|
|
|
+ const domSelection = document.getSelection();
|
|
|
+
|
|
|
+ domSelection.removeAllRanges();
|
|
|
+ const domRange = new Range();
|
|
|
+ domRange.setStart( domDiv, 0 );
|
|
|
+ domRange.collapse( true );
|
|
|
+ domSelection.addRange( domRange );
|
|
|
+
|
|
|
+ renderer.focusedEditable = null;
|
|
|
+
|
|
|
+ const { view: viewP, selection: newSelection } = parse( '<container:p>fo{o}</container:p>' );
|
|
|
+
|
|
|
+ viewRoot.appendChildren( viewP );
|
|
|
+ selection.setTo( newSelection );
|
|
|
+
|
|
|
+ renderer.render();
|
|
|
+
|
|
|
+ expect( domSelection.rangeCount ).to.equal( 1 );
|
|
|
+ expect( domSelection.getRangeAt( 0 ).startContainer ).to.equal( domDiv );
|
|
|
+ expect( domSelection.getRangeAt( 0 ).startOffset ).to.equal( 0 );
|
|
|
+ expect( domSelection.getRangeAt( 0 ).collapsed ).to.equal( true );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should not add ranges if different editable is focused', () => {
|
|
|
+ const domHeader = document.createElement( 'h1' );
|
|
|
+ const viewHeader = new ViewElement( 'h1' );
|
|
|
+ document.body.appendChild( domHeader );
|
|
|
+
|
|
|
+ domConverter.bindElements( domHeader, viewHeader );
|
|
|
+
|
|
|
+ renderer.focusedEditable = viewHeader;
|
|
|
+
|
|
|
+ const { view: viewP, selection: newSelection } = parse( '<container:p>fo{o}</container:p>' );
|
|
|
+
|
|
|
+ viewRoot.appendChildren( viewP );
|
|
|
+ selection.setTo( newSelection );
|
|
|
+
|
|
|
+ renderer.render();
|
|
|
+
|
|
|
+ const domSelection = document.getSelection();
|
|
|
+ expect( domSelection.rangeCount ).to.equal( 0 );
|
|
|
+ } );
|
|
|
+
|
|
|
it( 'should not add inline filler after text node', () => {
|
|
|
const domSelection = document.getSelection();
|
|
|
|