Procházet zdrojové kódy

Merge pull request #56 from ckeditor/ckeditor5-engine/t/726

Changed: use engine.model.delta.transformDeltaSets instead of providing own algorithm.
Piotrek Koszuliński před 9 roky
rodič
revize
9efd6af8de

+ 0 - 23
packages/ckeditor5-undo/src/basecommand.js

@@ -8,7 +8,6 @@
  */
 
 import Command from '../core/command/command.js';
-import transform from '../engine/model/delta/transform.js';
 
 /**
  * Base class for undo feature commands: {@link module:undo/undocommand~UndoCommand} and {@link module:undo/redocommand~RedoCommand}.
@@ -112,28 +111,6 @@ export default class BaseCommand extends Command {
 	}
 }
 
-// Performs a transformation of delta set `setToTransform` by given delta set `setToTransformBy`.
-// If `setToTransform` deltas are more important than `setToTransformBy` deltas, `isStrong` should be true.
-export function transformDelta( setToTransform, setToTransformBy, isStrong ) {
-	let results = [];
-
-	for ( let toTransform of setToTransform ) {
-		let to = [ toTransform ];
-
-		for ( let t = 0; t < to.length; t++ ) {
-			for ( let transformBy of setToTransformBy ) {
-				let transformed = transform( to[ t ], transformBy, isStrong );
-				to.splice( t, 1, ...transformed );
-				t = t - 1 + transformed.length;
-			}
-		}
-
-		results = results.concat( to );
-	}
-
-	return results;
-}
-
 // Transforms given range `range` by deltas from `document` history, starting from a delta with given `baseVersion`.
 // Returns an array containing one or more ranges, which are result of the transformation.
 function transformSelectionRange( range, deltas ) {

+ 2 - 2
packages/ckeditor5-undo/src/redocommand.js

@@ -8,7 +8,7 @@
  */
 
 import BaseCommand from './basecommand.js';
-import { transformDelta as transformDelta } from './basecommand.js';
+import { transformDeltaSets } from '../engine/model/delta/transform.js';
 
 /**
  * The redo command stores {@link module:engine/model/batch~Batch batches} that were used to undo a batch by
@@ -88,7 +88,7 @@ export default class RedoCommand extends BaseCommand {
 			// again will result in incorrect deltas.
 			for ( let historyDelta of document.history.getDeltas( nextBaseVersion ) ) {
 				if ( !this._createdBatches.has( historyDelta.batch ) ) {
-					reversedDelta = transformDelta( reversedDelta, [ historyDelta ], true );
+					reversedDelta = transformDeltaSets( reversedDelta, [ historyDelta ], true ).deltasA;
 				}
 			}
 

+ 7 - 6
packages/ckeditor5-undo/src/undocommand.js

@@ -8,7 +8,8 @@
  */
 
 import BaseCommand from './basecommand.js';
-import { transformDelta, transformRangesByDeltas } from './basecommand.js';
+import { transformRangesByDeltas } from './basecommand.js';
+import { transformDeltaSets } from '../engine/model/delta/transform.js';
 
 /**
  * The undo command stores {@link module:engine/model/batch~Batch batches} applied to the
@@ -133,13 +134,13 @@ export default class UndoCommand extends BaseCommand {
 					this._stack[ itemIndex ].selection.ranges = transformRangesByDeltas( this._stack[ itemIndex ].selection.ranges, reversedDelta );
 				}
 
-				// 3.2. Transform history delta by reversed delta. We need this to update document history.
-				const updatedHistoryDelta = transformDelta( [ historyDelta ], reversedDelta, false );
+				// 3.2. Transform reversed delta by history delta and vice-versa.
+				const results = transformDeltaSets( reversedDelta, [ historyDelta ], true );
 
-				// 3.3. Transform reversed delta by history delta (in state before transformation above).
-				reversedDelta = transformDelta( reversedDelta, [ historyDelta ], true );
+				reversedDelta = results.deltasA;
+				const updatedHistoryDelta = results.deltasB;
 
-				// 3.4. Store updated history delta. Later, it will be updated in `history`.
+				// 3.3. Store updated history delta. Later, it will be updated in `history`.
 				if ( !updatedHistoryDeltas[ historyDelta.baseVersion ] ) {
 					updatedHistoryDeltas[ historyDelta.baseVersion ] = [];
 				}