Bladeren bron

Changed: engine.conversion.Mapper changed a way how default mapping algorithms are hooked.

Szymon Cofalik 9 jaren geleden
bovenliggende
commit
d8e73fbeb8
1 gewijzigde bestanden met toevoegingen van 36 en 24 verwijderingen
  1. 36 24
      packages/ckeditor5-engine/src/conversion/mapper.js

+ 36 - 24
packages/ckeditor5-engine/src/conversion/mapper.js

@@ -61,28 +61,6 @@ export default class Mapper {
 		 * @member {Map}
 		 */
 		this._viewToModelLengthCallbacks = new Map();
-
-		// Add default callback for model to view position mapping.
-		this.on( 'modelToViewPosition', ( evt, data ) => {
-			let viewContainer = this._modelToViewMapping.get( data.modelPosition.parent );
-
-			data.viewPosition = this._findPositionIn( viewContainer, data.modelPosition.offset );
-		}, { priority: 'lowest' } );
-
-		// Add default callback for view to model position mapping.
-		this.on( 'viewToModelPosition', ( evt, data ) => {
-			let viewBlock = data.viewPosition.parent;
-			let modelParent = this._viewToModelMapping.get( viewBlock );
-
-			while ( !modelParent ) {
-				viewBlock = viewBlock.parent;
-				modelParent = this._viewToModelMapping.get( viewBlock );
-			}
-
-			let modelOffset = this._toModelOffset( data.viewPosition.parent, data.viewPosition.offset, viewBlock );
-
-			data.modelPosition = ModelPosition.createFromParentAndOffset( modelParent, modelOffset );
-		}, { priority: 'lowest' } );
 	}
 
 	/**
@@ -179,7 +157,7 @@ export default class Mapper {
 	toModelPosition( viewPosition ) {
 		const data = {
 			viewPosition: viewPosition,
-			modelPosition: null,
+			modelPosition: this._defaultToModelPosition( viewPosition ),
 			mapper: this
 		};
 
@@ -188,6 +166,19 @@ export default class Mapper {
 		return data.modelPosition;
 	}
 
+	/**
+	 * Maps model position to view position using default mapper algorithm.
+	 *
+	 * @private
+	 * @param {engine.model.Position} modelPosition
+	 * @returns {engine.view.Position} View position mapped from model position.
+	 */
+	_defaultToViewPosition( modelPosition ) {
+		let viewContainer = this._modelToViewMapping.get( modelPosition.parent );
+
+		return this._findPositionIn( viewContainer, modelPosition.offset );
+	}
+
 	/**
 	 * Gets the corresponding view position.
 	 *
@@ -197,7 +188,7 @@ export default class Mapper {
 	 */
 	toViewPosition( modelPosition ) {
 		const data = {
-			viewPosition: null,
+			viewPosition: this._defaultToViewPosition( modelPosition ),
 			modelPosition: modelPosition,
 			mapper: this
 		};
@@ -207,6 +198,27 @@ export default class Mapper {
 		return data.viewPosition;
 	}
 
+	/**
+	 * Maps view position to model position using default mapper algorithm.
+	 *
+	 * @private
+	 * @param {engine.view.Position} viewPosition
+	 * @returns {engine.model.Position} Model position mapped from view position.
+	 */
+	_defaultToModelPosition( viewPosition ) {
+		let viewBlock = viewPosition.parent;
+		let modelParent = this._viewToModelMapping.get( viewBlock );
+
+		while ( !modelParent ) {
+			viewBlock = viewBlock.parent;
+			modelParent = this._viewToModelMapping.get( viewBlock );
+		}
+
+		let modelOffset = this._toModelOffset( viewPosition.parent, viewPosition.offset, viewBlock );
+
+		return ModelPosition.createFromParentAndOffset( modelParent, modelOffset );
+	}
+
 	/**
 	 * Registers a callback that evaluates the length in the model of a view element with given name.
 	 *