浏览代码

Changed: Mapper position mapping callbacks parameter moved to data object.

Szymon Cofalik 9 年之前
父节点
当前提交
f9d85fe799
共有 2 个文件被更改,包括 52 次插入41 次删除
  1. 20 9
      packages/ckeditor5-engine/src/conversion/mapper.js
  2. 32 32
      packages/ckeditor5-engine/tests/conversion/mapper.js

+ 20 - 9
packages/ckeditor5-engine/src/conversion/mapper.js

@@ -50,16 +50,25 @@ export default class Mapper {
 		 */
 		this._viewToModelMapping = new WeakMap();
 
+		/**
+		 * A map containing callbacks between view element classes and functions evaluating length of view elements
+		 * in model.
+		 *
+		 * @private
+		 * @member {Map} engine.conversion.Mapper#_viewToModelLengthCallbacks
+		 */
+		this._viewToModelLengthCallbacks = new Map();
+
 		// Add default callback for model to view position mapping.
-		this.on( 'modelToViewPosition', ( evt, modelPosition, data ) => {
-			let viewContainer = this._modelToViewMapping.get( modelPosition.parent );
+		this.on( 'modelToViewPosition', ( evt, data ) => {
+			let viewContainer = this._modelToViewMapping.get( data.modelPosition.parent );
 
-			data.viewPosition = this._findPositionIn( viewContainer, modelPosition.offset );
+			data.viewPosition = this._findPositionIn( viewContainer, data.modelPosition.offset );
 		}, 'lowest' );
 
 		// Add default callback for view to model position mapping.
-		this.on( 'viewToModelPosition', ( evt, viewPosition, data ) => {
-			let viewBlock = viewPosition.parent;
+		this.on( 'viewToModelPosition', ( evt, data ) => {
+			let viewBlock = data.viewPosition.parent;
 			let modelParent = this._viewToModelMapping.get( viewBlock );
 
 			while ( !modelParent ) {
@@ -67,7 +76,7 @@ export default class Mapper {
 				modelParent = this._viewToModelMapping.get( viewBlock );
 			}
 
-			let modelOffset = this._toModelOffset( viewPosition.parent, viewPosition.offset, viewBlock );
+			let modelOffset = this._toModelOffset( data.viewPosition.parent, data.viewPosition.offset, viewBlock );
 
 			data.modelPosition = ModelPosition.createFromParentAndOffset( modelParent, modelOffset );
 		}, 'lowest' );
@@ -178,10 +187,11 @@ export default class Mapper {
 	 */
 	toModelPosition( viewPosition ) {
 		const data = {
+			viewPosition: viewPosition,
 			modelPosition: null
 		};
 
-		this.fire( 'viewToModelPosition', viewPosition, data );
+		this.fire( 'viewToModelPosition', data );
 
 		return data.modelPosition;
 	}
@@ -195,10 +205,11 @@ export default class Mapper {
 	 */
 	toViewPosition( modelPosition ) {
 		const data = {
-			viewPosition: null
+			viewPosition: null,
+			modelPosition: modelPosition
 		};
 
-		this.fire( 'modelToViewPosition', modelPosition, data );
+		this.fire( 'modelToViewPosition', data );
 
 		return data.viewPosition;
 	}

+ 32 - 32
packages/ckeditor5-engine/tests/conversion/mapper.js

@@ -91,6 +91,20 @@ describe( 'Mapper', () => {
 	} );
 
 	describe( 'Standard mapping', () => {
+		function createToViewTest( modelElement, modelOffset, viewElement, viewOffset ) {
+			const modelPosition = ModelPosition.createFromParentAndOffset( modelElement, modelOffset );
+			const viewPosition = mapper.toViewPosition( modelPosition );
+			expect( viewPosition.parent ).to.equal( viewElement );
+			expect( viewPosition.offset ).to.equal( viewOffset );
+		}
+
+		function createToModelTest( viewElement, viewOffset, modelElement, modelOffset ) {
+			const viewPosition = new ViewPosition( viewElement, viewOffset );
+			const modelPosition = mapper.toModelPosition( viewPosition );
+			expect( modelPosition.parent ).to.equal( modelElement );
+			expect( modelPosition.offset ).to.equal( modelOffset );
+		}
+
 		let modelDiv, modelP, modelImg;
 
 		let viewDiv, viewP, viewB, viewI, viewU, viewSup, viewImg;
@@ -193,19 +207,12 @@ describe( 'Mapper', () => {
 		} );
 
 		describe( 'toModelPosition', () => {
-			function createToModelTest( viewElement, viewOffset, modelElement, modelOffset ) {
-				const viewPosition = new ViewPosition( viewElement, viewOffset );
-				const modelPosition = mapper.toModelPosition( viewPosition );
-				expect( modelPosition.parent ).to.equal( modelElement );
-				expect( modelPosition.offset ).to.equal( modelOffset );
-			}
-
 			it( 'should fire viewToModelPosition event and return value calculated in callback to that event', () => {
 				const viewPosition = new ViewPosition( viewDiv, 0 );
 				const stub = {};
 
-				mapper.on( 'viewToModelPosition', ( evt, position, data ) => {
-					expect( position ).to.equal( viewPosition );
+				mapper.on( 'viewToModelPosition', ( evt, data ) => {
+					expect( data.viewPosition ).to.equal( viewPosition );
 
 					data.modelPosition = stub;
 					evt.stop();
@@ -273,19 +280,12 @@ describe( 'Mapper', () => {
 		} );
 
 		describe( 'toViewPosition', () => {
-			function createToViewTest( modelElement, modelOffset, viewElement, viewOffset ) {
-				const modelPosition = ModelPosition.createFromParentAndOffset( modelElement, modelOffset );
-				const viewPosition = mapper.toViewPosition( modelPosition );
-				expect( viewPosition.parent ).to.equal( viewElement );
-				expect( viewPosition.offset ).to.equal( viewOffset );
-			}
-
 			it( 'should fire modelToViewPosition event and return value calculated in callback to that event', () => {
 				const modelPosition = new ModelPosition( modelDiv, [ 0 ] );
 				const stub = {};
 
-				mapper.on( 'modelToViewPosition', ( evt, position, data ) => {
-					expect( position ).to.equal( modelPosition );
+				mapper.on( 'modelToViewPosition', ( evt, data ) => {
+					expect( data.modelPosition ).to.equal( modelPosition );
 
 					data.viewPosition = stub;
 					evt.stop();
@@ -340,6 +340,20 @@ describe( 'Mapper', () => {
 	} );
 
 	describe( 'Widget mapping', () => {
+		function createToViewTest( modelElement, modelOffset, viewElement, viewOffset ) {
+			const modelPosition = ModelPosition.createFromParentAndOffset( modelElement, modelOffset );
+			const viewPosition = mapper.toViewPosition( modelPosition );
+			expect( viewPosition.parent ).to.equal( viewElement );
+			expect( viewPosition.offset ).to.equal( viewOffset );
+		}
+
+		function createToModelTest( viewElement, viewOffset, modelElement, modelOffset ) {
+			const viewPosition = new ViewPosition( viewElement, viewOffset );
+			const modelPosition = mapper.toModelPosition( viewPosition );
+			expect( modelPosition.parent ).to.equal( modelElement );
+			expect( modelPosition.offset ).to.equal( modelOffset );
+		}
+
 		let modelDiv, modelWidget, modelImg, modelCaption;
 
 		let viewDiv, viewWidget, viewMask, viewWrapper, viewImg, viewCaption;
@@ -418,13 +432,6 @@ describe( 'Mapper', () => {
 		} );
 
 		describe( 'toModelPosition', () => {
-			function createToModelTest( viewElement, viewOffset, modelElement, modelOffset ) {
-				const viewPosition = new ViewPosition( viewElement, viewOffset );
-				const modelPosition = mapper.toModelPosition( viewPosition );
-				expect( modelPosition.parent ).to.equal( modelElement );
-				expect( modelPosition.offset ).to.equal( modelOffset );
-			}
-
 			it( 'should transform viewDiv 0', () => createToModelTest( viewDiv, 0, modelDiv, 0 ) );
 			it( 'should transform viewDiv 1', () => createToModelTest( viewDiv, 1, modelDiv, 1 ) );
 			it( 'should transform viewDiv 2', () => createToModelTest( viewDiv, 2, modelDiv, 2 ) );
@@ -449,13 +456,6 @@ describe( 'Mapper', () => {
 		} );
 
 		describe( 'toViewPosition', () => {
-			function createToViewTest( modelElement, modelOffset, viewElement, viewOffset ) {
-				const modelPosition = ModelPosition.createFromParentAndOffset( modelElement, modelOffset );
-				const viewPosition = mapper.toViewPosition( modelPosition );
-				expect( viewPosition.parent ).to.equal( viewElement );
-				expect( viewPosition.offset ).to.equal( viewOffset );
-			}
-
 			it( 'should transform modelDiv 0', () => createToViewTest( modelDiv, 0, viewTextX, 0 ) );
 			it( 'should transform modelDiv 1', () => createToViewTest( modelDiv, 1, viewTextX, 1 ) );
 			it( 'should transform modelDiv 2', () => createToViewTest( modelDiv, 2, viewTextZZ, 0 ) );