浏览代码

Fixed: bug in conversion.ModelConversionDispatcher#convertMove.

Szymon Cofalik 9 年之前
父节点
当前提交
1c877fd766

+ 2 - 2
packages/ckeditor5-engine/src/conversion/modelconversiondispatcher.js

@@ -216,15 +216,15 @@ export default class ModelConversionDispatcher {
 		const consumable = this._createConsumableForType( range, 'move' );
 
 		const items = Array.from( range.getItems( { shallow: true } ) );
-		const rangeSize = range.end.offset - range.start.offset;
 		const inSameParent = sourcePosition.parent == range.start.parent;
+		const targetsAfter = range.start.isAfter( sourcePosition );
 
 		let offset = 0;
 
 		for ( let item of items ) {
 			const data = {
 				sourcePosition: sourcePosition,
-				targetPosition: inSameParent ? range.start.getShiftedBy( rangeSize ) : range.start.getShiftedBy( offset ),
+				targetPosition: inSameParent && targetsAfter ? range.end : range.start.getShiftedBy( offset ),
 				item: item
 			};
 

+ 18 - 2
packages/ckeditor5-engine/tests/conversion/modelconversiondispatcher.js

@@ -311,7 +311,7 @@ describe( 'ModelConversionDispatcher', () => {
 	} );
 
 	describe( 'convertMove', () => {
-		it( 'should fire event for moved range', () => {
+		it( 'should fire event for moved range - move before source position', () => {
 			root.appendChildren( new ModelText( 'barfoo' ) );
 
 			const range = ModelRange.createFromParentsAndOffsets( root, 0, root, 3 );
@@ -322,9 +322,25 @@ describe( 'ModelConversionDispatcher', () => {
 				loggedEvents.push( log );
 			} );
 
+			dispatcher.convertMove( ModelPosition.createFromParentAndOffset( root , 3 ), range );
+
+			expect( loggedEvents ).to.deep.equal( [ 'move:3:0:3' ] );
+		} );
+
+		it( 'should fire event for moved range - move after source position', () => {
+			root.appendChildren( new ModelText( 'barfoo' ) );
+
+			const range = ModelRange.createFromParentsAndOffsets( root, 3, root, 6 );
+			const loggedEvents = [];
+
+			dispatcher.on( 'move', ( evt, data ) => {
+				const log = 'move:' + data.sourcePosition.path + ':' + data.targetPosition.path + ':' + data.item.offsetSize;
+				loggedEvents.push( log );
+			} );
+
 			dispatcher.convertMove( ModelPosition.createFromParentAndOffset( root , 0 ), range );
 
-			expect( loggedEvents ).to.deep.equal( [ 'move:0:3:3' ] );
+			expect( loggedEvents ).to.deep.equal( [ 'move:0:6:3' ] );
 		} );
 	} );