ソースを参照

Changed the order in which changes are converted for the move operation.

Piotrek Koszuliński 8 年 前
コミット
532ad7cb2d

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

@@ -241,8 +241,18 @@ export default class ModelConversionDispatcher {
 	 * @param {module:engine/model/range~Range} range The range containing the moved content.
 	 */
 	convertMove( sourcePosition, range ) {
-		this.convertRemove( sourcePosition, range );
-		this.convertInsertion( range );
+		// Move left – convert insertion first (#847).
+		if ( range.start.isBefore( sourcePosition ) ) {
+			this.convertInsertion( range );
+
+			const sourcePositionAfterInsertion
+				= sourcePosition._getTransformedByInsertion( range.start, range.end.offset - range.start.offset );
+
+			this.convertRemove( sourcePositionAfterInsertion, range );
+		} else {
+			this.convertRemove( sourcePosition, range );
+			this.convertInsertion( range );
+		}
 	}
 
 	/**

+ 1 - 1
packages/ckeditor5-engine/tests/conversion/modelconversiondispatcher.js

@@ -288,7 +288,7 @@ describe( 'ModelConversionDispatcher', () => {
 		} );
 	} );
 
-	describe.only( 'convertMove', () => {
+	describe( 'convertMove', () => {
 		let loggedEvents;
 
 		beforeEach( () => {