8
0
Pārlūkot izejas kodu

Fix: Fix for LiveRange transformation when element is split at the place where the live range starts.

Szymon Cofalik 8 gadi atpakaļ
vecāks
revīzija
ed65290fb1

+ 1 - 1
packages/ckeditor5-engine/src/model/range.js

@@ -505,7 +505,7 @@ export default class Range {
 			// ^<p>xx</p><w>{<p>a[b</p>}</w><p>c]d</p>   -->   <p>a[b</p><p>xx</p><w></w><p>c]d</p>  // Note <p>xx</p> inclusion.
 			// <w>{<p>a[b</p>}</w>^<p>c]d</p>            -->   <w></w><p>a[b</p><p>c]d</p>
 			if (
-				sourceRange.containsPosition( this.start ) &&
+				( sourceRange.containsPosition( this.start ) || sourceRange.start.isEqual( this.start ) ) &&
 				this.containsPosition( sourceRange.end ) &&
 				this.end.isAfter( targetPosition )
 			) {

+ 13 - 0
packages/ckeditor5-engine/tests/model/range.js

@@ -986,6 +986,19 @@ describe( 'Range', () => {
 				expect( transformed[ 0 ].end.path ).to.deep.equal( [ 1, 1 ] );
 			} );
 
+			it( 'split at the beginning of multi-element range', () => {
+				range.start = new Position( root, [ 0, 4 ] );
+				range.end = new Position( root, [ 1, 2 ] );
+
+				const delta = getSplitDelta( new Position( root, [ 0, 4 ] ), new Element( 'p' ), 3, 1 );
+
+				const transformed = range.getTransformedByDelta( delta );
+
+				expect( transformed.length ).to.equal( 1 );
+				expect( transformed[ 0 ].start.path ).to.deep.equal( [ 1, 0 ] );
+				expect( transformed[ 0 ].end.path ).to.deep.equal( [ 2, 2 ] );
+			} );
+
 			it( 'split inside range which starts at the beginning of split element', () => {
 				range.start = new Position( root, [ 0, 0 ] );
 				range.end = new Position( root, [ 0, 4 ] );