Procházet zdrojové kódy

Moved delta priorities to delta classes.

Szymon Cofalik před 9 roky
rodič
revize
d7a3d42dc2

+ 4 - 0
packages/ckeditor5-engine/src/treemodel/delta/attributedelta.js

@@ -70,6 +70,10 @@ export default class AttributeDelta extends Delta {
 	get _reverseDeltaClass() {
 		return AttributeDelta;
 	}
+
+	static get _priority() {
+		return 20;
+	}
 }
 
 /**

+ 12 - 0
packages/ckeditor5-engine/src/treemodel/delta/delta.js

@@ -101,4 +101,16 @@ export default class Delta {
 
 		return delta;
 	}
+
+	/**
+	 * Delta priority. Used in {@link core.treeModel.delta.transform delta transformations}. Delta with the higher
+	 * priority will be treated as more important when resolving transformation conflicts. If deltas have same
+	 * priority, other factors will be used to determine which delta is more important.
+	 *
+	 * @private
+	 * @type {Number}
+	 */
+	static get _priority() {
+		return 0;
+	}
 }

+ 4 - 0
packages/ckeditor5-engine/src/treemodel/delta/insertdelta.js

@@ -54,6 +54,10 @@ export default class InsertDelta extends Delta {
 	get _reverseDeltaClass() {
 		return RemoveDelta;
 	}
+
+	static get _priority() {
+		return 20;
+	}
 }
 
 /**

+ 4 - 0
packages/ckeditor5-engine/src/treemodel/delta/movedelta.js

@@ -69,6 +69,10 @@ export default class MoveDelta extends Delta {
 	get _reverseDeltaClass() {
 		return MoveDelta;
 	}
+
+	static get _priority() {
+		return 20;
+	}
 }
 
 function addMoveOperation( batch, delta, sourcePosition, howMany, targetPosition ) {

+ 4 - 0
packages/ckeditor5-engine/src/treemodel/delta/splitdelta.js

@@ -65,6 +65,10 @@ export default class SplitDelta extends Delta {
 	get _reverseDeltaClass() {
 		return MergeDelta;
 	}
+
+	static get _priority() {
+		return 10;
+	}
 }
 
 /**

+ 2 - 29
packages/ckeditor5-engine/src/treemodel/delta/transform.js

@@ -16,7 +16,6 @@ import AttributeDelta from './attributedelta.js';
 import InsertDelta from './insertdelta.js';
 import MergeDelta from './mergedelta.js';
 import MoveDelta from './movedelta.js';
-import RemoveDelta from './removedelta.js';
 import SplitDelta from './splitdelta.js';
 import WeakInsertDelta from './weakinsertdelta.js';
 import WrapDelta from './wrapdelta.js';
@@ -29,29 +28,6 @@ import utils from '../../utils.js';
  * @namespace core.treeModel.delta.transform
  */
 
-/**
- * When it comes to delta transformations, delta has their priorities. Priorities mean which delta should be a
- * stronger one when conflicting situation arises. These depend only on delta type. The higher the priority, the stronger
- * the delta is. For example, then MoveDelta tries to move some nodes and SplitDelta tries to move the some of those
- * nodes to a new parent, MoveDelta should be treated as stronger and the result of MoveDelta should overwrite SplitDelta.
- * When deltas have same priorities, `isStrong` parameter is used to decide which one is stronger. This parameter should
- * be arbitrary set, i.e. depending on the source of the delta (i.e. during collaborative editing deltas coming from
- * server might be more important than deltas produced on client).
- *
- * @external core.treeModel.delta.transform
- * @member core.treeModel.delta.transform.priorities
- * @type {Map}
- */
-export const priorities = new Map();
-priorities.set( MergeDelta, 0 );
-priorities.set( UnwrapDelta, 1 );
-priorities.set( WrapDelta, 1 );
-priorities.set( SplitDelta, 1 );
-priorities.set( AttributeDelta, 2 );
-priorities.set( InsertDelta, 2 );
-priorities.set( MoveDelta, 2 );
-priorities.set( RemoveDelta, 3 );
-
 const specialCases = new Map();
 
 /**
@@ -465,12 +441,9 @@ function _getComplementaryAttrDelta( weakInsertDelta, attributeDelta ) {
 // Checks priorities of passed constructors and decides which one is more important.
 // If both priorities are same, value passed in `isAMoreImportantThanB` parameter is used.
 function getPriority( A, B, isAMoreImportantThanB ) {
-	const aPriority = priorities.get( A );
-	const bPriority = priorities.get( B );
-
-	if ( aPriority > bPriority ) {
+	if ( A._priority > B._priority ) {
 		return true;
-	} else if ( aPriority < bPriority ) {
+	} else if ( A._priority < B._priority ) {
 		return false;
 	} else {
 		return isAMoreImportantThanB;

+ 4 - 0
packages/ckeditor5-engine/src/treemodel/delta/unwrapdelta.js

@@ -48,6 +48,10 @@ export default class UnwrapDelta extends Delta {
 	get _reverseDeltaClass() {
 		return WrapDelta;
 	}
+
+	static get _priority() {
+		return 10;
+	}
 }
 
 /**

+ 4 - 0
packages/ckeditor5-engine/src/treemodel/delta/wrapdelta.js

@@ -52,6 +52,10 @@ export default class WrapDelta extends Delta {
 	get _reverseDeltaClass() {
 		return UnwrapDelta;
 	}
+
+	static get _priority() {
+		return 10;
+	}
 }
 
 /**