Bladeren bron

Added: special case scenario for Range#_getTransformedByDocumentChange.

Szymon Cofalik 9 jaren geleden
bovenliggende
commit
5d888f6a9e
2 gewijzigde bestanden met toevoegingen van 13 en 8 verwijderingen
  1. 11 4
      packages/ckeditor5-engine/src/model/range.js
  2. 2 4
      packages/ckeditor5-engine/tests/model/range.js

+ 11 - 4
packages/ckeditor5-engine/src/model/range.js

@@ -378,6 +378,7 @@ export default class Range {
 				for ( let i = 0; i < ranges.length; i++ ) {
 				for ( let i = 0; i < ranges.length; i++ ) {
 					const result = ranges[ i ]._getTransformedByDocumentChange(
 					const result = ranges[ i ]._getTransformedByDocumentChange(
 						operation.type,
 						operation.type,
+						delta.type,
 						operation.targetPosition || operation.position,
 						operation.targetPosition || operation.position,
 						operation.howMany || operation.nodes.maxOffset,
 						operation.howMany || operation.nodes.maxOffset,
 						operation.sourcePosition
 						operation.sourcePosition
@@ -442,13 +443,21 @@ export default class Range {
 	 * @param {module:engine/model/position~Position} targetPosition Position before the first changed node.
 	 * @param {module:engine/model/position~Position} targetPosition Position before the first changed node.
 	 * @param {Number} howMany How many nodes has been changed.
 	 * @param {Number} howMany How many nodes has been changed.
 	 * @param {module:engine/model/position~Position} sourcePosition Source position of changes.
 	 * @param {module:engine/model/position~Position} sourcePosition Source position of changes.
+	 * @param {module:engine/model/delta/delta~Delta} delta Delta that introduced the change.
 	 * @returns {Array.<module:engine/model/range~Range>}
 	 * @returns {Array.<module:engine/model/range~Range>}
 	 */
 	 */
-	_getTransformedByDocumentChange( type, targetPosition, howMany, sourcePosition ) {
+	_getTransformedByDocumentChange( type, deltaType, targetPosition, howMany, sourcePosition ) {
 		if ( type == 'insert' ) {
 		if ( type == 'insert' ) {
 			return this._getTransformedByInsertion( targetPosition, howMany, false, false );
 			return this._getTransformedByInsertion( targetPosition, howMany, false, false );
 		} else {
 		} else {
-			return this._getTransformedByMove( sourcePosition, targetPosition, howMany );
+			const ranges = this._getTransformedByMove( sourcePosition, targetPosition, howMany );
+
+			if ( deltaType == 'split' && this.containsPosition( sourcePosition ) ) {
+				ranges[ 0 ].end = ranges[ 1 ].end;
+				ranges.pop();
+			}
+
+			return ranges;
 		}
 		}
 	}
 	}
 
 
@@ -521,8 +530,6 @@ export default class Range {
 	 * @param {module:engine/model/position~Position} sourcePosition Position from which nodes are moved.
 	 * @param {module:engine/model/position~Position} sourcePosition Position from which nodes are moved.
 	 * @param {module:engine/model/position~Position} targetPosition Position to where nodes are moved.
 	 * @param {module:engine/model/position~Position} targetPosition Position to where nodes are moved.
 	 * @param {Number} howMany How many nodes are moved.
 	 * @param {Number} howMany How many nodes are moved.
-	 * @param {Boolean} [spread] Flag indicating whether this {~Range range} should be spread if insertion
-	 * was inside the range. Defaults to `false`.
 	 * @returns {Array.<module:engine/model/range~Range>} Result of the transformation.
 	 * @returns {Array.<module:engine/model/range~Range>} Result of the transformation.
 	 */
 	 */
 	_getTransformedByMove( sourcePosition, targetPosition, howMany ) {
 	_getTransformedByMove( sourcePosition, targetPosition, howMany ) {

+ 2 - 4
packages/ckeditor5-engine/tests/model/range.js

@@ -832,11 +832,9 @@ describe( 'Range', () => {
 
 
 				const transformed = range.getTransformedByDelta( delta );
 				const transformed = range.getTransformedByDelta( delta );
 
 
-				expect( transformed.length ).to.equal( 2 );
+				expect( transformed.length ).to.equal( 1 );
 				expect( transformed[ 0 ].start.path ).to.deep.equal( [ 0, 2 ] );
 				expect( transformed[ 0 ].start.path ).to.deep.equal( [ 0, 2 ] );
-				expect( transformed[ 0 ].end.path ).to.deep.equal( [ 0, 3 ] );
-				expect( transformed[ 1 ].start.path ).to.deep.equal( [ 1, 0 ] );
-				expect( transformed[ 1 ].end.path ).to.deep.equal( [ 1, 1 ] );
+				expect( transformed[ 0 ].end.path ).to.deep.equal( [ 1, 1 ] );
 			} );
 			} );
 		} );
 		} );
 	} );
 	} );