Explorar el Código

Changed: Simplified MarkerDelta transformation special cases and added transformations by MergeDelta, WrapDelta and UnwrapDelta.

Szymon Cofalik hace 9 años
padre
commit
b08745d2bd
Se han modificado 1 ficheros con 10 adiciones y 23 borrados
  1. 10 23
      packages/ckeditor5-engine/src/model/delta/basic-transformations.js

+ 10 - 23
packages/ckeditor5-engine/src/model/delta/basic-transformations.js

@@ -97,33 +97,20 @@ addTransformationCase( InsertDelta, MergeDelta, ( a, b, isStrong ) => {
 	return defaultTransform( a, b, isStrong );
 	return defaultTransform( a, b, isStrong );
 } );
 } );
 
 
-// Add special case for MarkerDelta x SplitDelta
-addTransformationCase( MarkerDelta, SplitDelta, ( a, b, isStrong ) => {
-	// If marked range is split, we need to fix it:
-	// ab[cdef]gh   ==>  ab[cd
-	//                   ef]gh
-	// To mimic what normally happens with LiveRange if you split it.
-
-	// Mote: MarkerDelta can't get split to two deltas, neither can MarkerOperation.
-	const transformedDelta = defaultTransform( a, b, isStrong )[ 0 ];
+function transformMarkerDelta( a, b ) {
+	const transformedDelta = a.clone();
 	const transformedOp = transformedDelta.operations[ 0 ];
 	const transformedOp = transformedDelta.operations[ 0 ];
 
 
-	// Fix positions, if needed.
-	const markerOp = a.operations[ 0 ];
-
-	const source = b.position;
-	const target = b._moveOperation.targetPosition;
-
-	if ( markerOp.oldRange.containsPosition( b.position ) ) {
-		transformedOp.oldRange.end = markerOp.oldRange.end._getCombined( source, target );
-	}
-
-	if ( markerOp.newRange.containsPosition( b.position ) ) {
-		transformedOp.newRange.end = markerOp.newRange.end._getCombined( source, target );
-	}
+	transformedOp.oldRange = transformedOp.oldRange.getTransformedByDelta( b )[ 0 ];
+	transformedOp.newRange = transformedOp.newRange.getTransformedByDelta( b )[ 0 ];
 
 
 	return [ transformedDelta ];
 	return [ transformedDelta ];
-} );
+}
+
+addTransformationCase( MarkerDelta, SplitDelta, transformMarkerDelta );
+addTransformationCase( MarkerDelta, MergeDelta, transformMarkerDelta );
+addTransformationCase( MarkerDelta, WrapDelta, transformMarkerDelta );
+addTransformationCase( MarkerDelta, UnwrapDelta, transformMarkerDelta );
 
 
 // Add special case for MoveDelta x MergeDelta transformation.
 // Add special case for MoveDelta x MergeDelta transformation.
 addTransformationCase( MoveDelta, MergeDelta, ( a, b, isStrong ) => {
 addTransformationCase( MoveDelta, MergeDelta, ( a, b, isStrong ) => {