Sfoglia il codice sorgente

Added: core.treeModel.delta.Delta#baseVersion and fixed #clone, #getReversed.

Szymon Cofalik 9 anni fa
parent
commit
7cc68444a0

+ 20 - 5
packages/ckeditor5-engine/src/treemodel/delta/delta.js

@@ -38,6 +38,21 @@ export default class Delta {
 		this.operations = [];
 	}
 
+	/**
+	 * Returns delta base version which is equal to the base version of the first operation in delta. If there
+	 * are no operations in delta, returns `null`.
+	 *
+	 * @see core.treeModel.Document
+	 * @type {Number|null} Delta base version.
+	 */
+	get baseVersion() {
+		if ( this.operations.length > 0 ) {
+			return this.operations[ 0 ].baseVersion;
+		}
+
+		return null;
+	}
+
 	/**
 	 * A class that will be used when creating reversed delta.
 	 *
@@ -67,7 +82,6 @@ export default class Delta {
 	 */
 	clone() {
 		let delta = new this.constructor();
-		delta.batch = this.batch;
 
 		for ( let op of this.operations ) {
 			delta.addOperation( op.clone() );
@@ -91,14 +105,15 @@ export default class Delta {
 		let delta = new this._reverseDeltaClass();
 
 		for ( let op of this.operations ) {
-			let reversedOp = op.getReversed();
-			reversedOp.baseVersion += this.operations.length - 1;
-
-			delta.addOperation( reversedOp );
+			delta.addOperation( op.getReversed() );
 		}
 
 		delta.operations.reverse();
 
+		for ( let i = 0; i < delta.operations.length; i++ ) {
+			delta.operations[ i ].baseVersion = this.operations[ this.operations.length - 1 ].baseVersion + i + 1;
+		}
+
 		return delta;
 	}
 

+ 14 - 2
packages/ckeditor5-engine/tests/treemodel/delta/transform/delta.js

@@ -21,7 +21,7 @@ import {
 	getFilledDocument,
 } from '/tests/core/treemodel/delta/transform/_utils/utils.js';
 
-describe( 'transform', () => {
+describe( 'Delta', () => {
 	let doc, root, baseVersion;
 
 	beforeEach( () => {
@@ -30,7 +30,19 @@ describe( 'transform', () => {
 		baseVersion = doc.version;
 	} );
 
-	it( 'should transform delta by transforming it\'s operations', () => {
+	it( 'should have baseVersion property, equal to the baseVersion of first operation in Delta or null', () => {
+		let deltaA = new Delta();
+
+		expect( deltaA.baseVersion ).to.be.null;
+
+		let version = 5;
+
+		deltaA.addOperation( new MoveOperation( new Position( root, [ 1, 2, 3 ] ), 4, new Position( root, [ 4, 0 ] ), version ) );
+
+		expect( deltaA.baseVersion ).to.equal( 5 );
+	} );
+
+	it( 'should be transformable by another Delta', () => {
 		let deltaA = new Delta();
 		let deltaB = new Delta();