8
0
Просмотр исходного кода

Fix: `MergeOperation#graveyardPosition` was not transformed due to typo.

Szymon Cofalik 7 лет назад
Родитель
Сommit
dd00b4d9c0

+ 2 - 2
packages/ckeditor5-engine/src/model/operation/transform.js

@@ -1241,7 +1241,7 @@ setTransformation( MergeOperation, MergeOperation, ( a, b, context ) => {
 	// Handle positions in graveyard.
 	// If graveyard positions are same and `a` operation is strong - do not transform.
 	if ( !a.graveyardPosition.isEqual( b.graveyardPosition ) || !context.aIsStrong ) {
-		a.graveyardPosition._getTransformedByInsertion( b.graveyardPosition, 1 );
+		a.graveyardPosition = a.graveyardPosition._getTransformedByMergeOperation( b );
 	}
 
 	return [ a ];
@@ -1475,7 +1475,7 @@ setTransformation( MergeOperation, UnwrapOperation, ( a, b, context ) => {
 	// Handle positions in graveyard.
 	// If graveyard positions are same and `a` operation is strong - do not transform.
 	if ( !a.graveyardPosition.isEqual( b.graveyardPosition ) || !context.aIsStrong ) {
-		a.graveyardPosition._getTransformedByInsertion( b.graveyardPosition, 1 );
+		a.graveyardPosition = a.graveyardPosition._getTransformedByUnwrapOperation( b );
 	}
 
 	return [ a ];

+ 16 - 0
packages/ckeditor5-engine/tests/model/operation/transform/merge.js

@@ -30,6 +30,22 @@ describe( 'transform', () => {
 				expectClients( '<paragraph>FooBarAbc</paragraph>' );
 			} );
 
+			it( 'elements into paragraph with undo', () => {
+				john.setData( '<paragraph>Foo</paragraph>[]<paragraph>Bar</paragraph><paragraph>Abc</paragraph>' );
+				kate.setData( '<paragraph>Foo</paragraph><paragraph>Bar</paragraph>[]<paragraph>Abc</paragraph>' );
+
+				john.merge();
+				kate.merge();
+
+				syncClients();
+
+				kate.undo();
+				john.undo();
+
+				syncClients();
+				expectClients( '<paragraph>Foo</paragraph><paragraph>Bar</paragraph><paragraph>Abc</paragraph>' );
+			} );
+
 			it.skip( 'same element with undo', () => {
 				// Unnecessary SplitOperation.
 				john.setData( '<paragraph>Foo</paragraph>[]<paragraph></paragraph>' );