浏览代码

DomConverter: removed getCorrespondingDom function and renamed getCorrespondingDomText to findCorrespondingDomText.

Szymon Kupś 8 年之前
父节点
当前提交
5de5e484ad

+ 19 - 56
packages/ckeditor5-engine/src/view/domconverter.js

@@ -186,8 +186,8 @@ export default class DomConverter {
 
 			return domDocument.createTextNode( textData );
 		} else {
-			if ( this.getCorrespondingDom( viewNode ) ) {
-				return this.getCorrespondingDom( viewNode );
+			if ( this.mapViewToDom( viewNode ) ) {
+				return this.mapViewToDom( viewNode );
 			}
 
 			let domElement;
@@ -294,7 +294,7 @@ export default class DomConverter {
 		const viewParent = viewPosition.parent;
 
 		if ( viewParent.is( 'text' ) ) {
-			const domParent = this.getCorrespondingDomText( viewParent );
+			const domParent = this.findCorrespondingDomText( viewParent );
 
 			if ( !domParent ) {
 				// Position is in a view text node that has not been rendered to DOM yet.
@@ -313,7 +313,7 @@ export default class DomConverter {
 			let domParent, domBefore, domAfter;
 
 			if ( viewPosition.offset === 0 ) {
-				domParent = this.getCorrespondingDom( viewPosition.parent );
+				domParent = this.mapViewToDom( viewParent );
 
 				if ( !domParent ) {
 					// Position is in a view element that has not been rendered to DOM yet.
@@ -322,7 +322,10 @@ export default class DomConverter {
 
 				domAfter = domParent.childNodes[ 0 ];
 			} else {
-				domBefore = this.getCorrespondingDom( viewPosition.nodeBefore );
+				const nodeBefore = viewPosition.nodeBefore;
+				domBefore = nodeBefore.is( 'text' ) ?
+					this.findCorrespondingDomText( nodeBefore ) :
+					this.mapViewToDom( viewPosition.nodeBefore );
 
 				if ( !domBefore ) {
 					// Position is after a view element that has not been rendered to DOM yet.
@@ -688,51 +691,6 @@ export default class DomConverter {
 		return null;
 	}
 
-	// /**
-	//  * Gets corresponding DOM item. This function uses
-	//  * {@link module:engine/view/domconverter~DomConverter#getCorrespondingDomElement getCorrespondingDomElement} for
-	//  * elements, {@link module:engine/view/domconverter~DomConverter#getCorrespondingDomText getCorrespondingDomText} for text nodes
-	//  * and {@link module:engine/view/domconverter~DomConverter#getCorrespondingDomDocumentFragment getCorrespondingDomDocumentFragment}
-	//  * for document fragments.
-	//  *
-	//  * @param {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment} viewNode View node or document fragment.
-	//  * @returns {Node|DocumentFragment|null} Corresponding DOM node or document fragment.
-	//  */
-	// getCorrespondingDom( viewNode ) {
-	// 	if ( viewNode instanceof ViewElement ) {
-	// 		return this.getCorrespondingDomElement( viewNode );
-	// 	} else if ( viewNode instanceof ViewDocumentFragment ) {
-	// 		return this.getCorrespondingDomDocumentFragment( viewNode );
-	// 	} else if ( viewNode instanceof ViewText ) {
-	// 		return this.getCorrespondingDomText( viewNode );
-	// 	}
-    //
-	// 	return null;
-	// }
-
-	// /**
-	//  * Gets corresponding DOM element. Returns element if an DOM element was
-	//  * {@link module:engine/view/domconverter~DomConverter#bindElements bound} to the given view element or `null` otherwise.
-	//  *
-	//  * @param {module:engine/view/element~Element} viewElement View element.
-	//  * @returns {HTMLElement|null} Corresponding element or `null` if none element was bound.
-	//  */
-	// getCorrespondingDomElement( viewElement ) {
-	// 	return this._viewToDomMapping.get( viewElement );
-	// }
-    //
-	// /**
-	//  * Gets corresponding DOM document fragment. Returns document fragment if an DOM element was
-	//  * {@link module:engine/view/domconverter~DomConverter#bindDocumentFragments bound} to the given view document fragment or `null`
-	//  * otherwise.
-	//  *
-	//  * @param {module:engine/view/documentfragment~DocumentFragment} viewDocumentFragment View document fragment.
-	//  * @returns {DocumentFragment|null} Corresponding document fragment or `null` if no fragment was bound.
-	//  */
-	// getCorrespondingDomDocumentFragment( viewDocumentFragment ) {
-	// 	return this._viewToDomMapping.get( viewDocumentFragment );
-	// }
-
 	mapViewToDom( documentFragmentOrElement ) {
 		return this._viewToDomMapping.get( documentFragmentOrElement );
 	}
@@ -752,17 +710,22 @@ export default class DomConverter {
 	 * @param {module:engine/view/text~Text} viewText View text node.
 	 * @returns {Text|null} Corresponding DOM text node or `null`, if it was not possible to find a corresponding node.
 	 */
-	getCorrespondingDomText( viewText ) {
+	findCorrespondingDomText( viewText ) {
 		const previousSibling = viewText.previousSibling;
 
 		// Try to use previous sibling to find the corresponding text node.
-		if ( previousSibling && this.getCorrespondingDom( previousSibling ) ) {
-			return this.getCorrespondingDom( previousSibling ).nextSibling;
+		if ( previousSibling ) {
+			const previousDomSibling = previousSibling.is( 'text' ) ?
+				this.findCorrespondingDomText( previousSibling ) : this.mapViewToDom( previousSibling );
+
+			if ( previousDomSibling ) {
+				return previousDomSibling.nextSibling;
+			}
 		}
 
 		// If this is a first node, try to use parent to find the corresponding text node.
-		if ( !previousSibling && viewText.parent && this.getCorrespondingDom( viewText.parent ) ) {
-			return this.getCorrespondingDom( viewText.parent ).childNodes[ 0 ];
+		if ( !previousSibling && viewText.parent && this.mapViewToDom( viewText.parent ) ) {
+			return this.mapViewToDom( viewText.parent ).childNodes[ 0 ];
 		}
 
 		return null;
@@ -774,7 +737,7 @@ export default class DomConverter {
 	 * @param {module:engine/view/editableelement~EditableElement} viewEditable
 	 */
 	focus( viewEditable ) {
-		const domEditable = this.getCorrespondingDomElement( viewEditable );
+		const domEditable = this.mapViewToDom( viewEditable );
 
 		if ( domEditable && domEditable.ownerDocument.activeElement !== domEditable ) {
 			// Save the scrollX and scrollY positions before the focus.

+ 19 - 55
packages/ckeditor5-engine/tests/view/domconverter/binding.js

@@ -31,7 +31,7 @@ describe( 'DomConverter', () => {
 			converter.bindElements( domElement, viewElement );
 
 			expect( converter.getCorrespondingView( domElement ) ).to.equal( viewElement );
-			expect( converter.getCorrespondingDom( viewElement ) ).to.equal( domElement );
+			expect( converter.mapViewToDom( viewElement ) ).to.equal( domElement );
 		} );
 	} );
 
@@ -43,7 +43,7 @@ describe( 'DomConverter', () => {
 			converter.bindDocumentFragments( domFragment, viewFragment );
 
 			expect( converter.getCorrespondingView( domFragment ) ).to.equal( viewFragment );
-			expect( converter.getCorrespondingDom( viewFragment ) ).to.equal( domFragment );
+			expect( converter.mapViewToDom( viewFragment ) ).to.equal( domFragment );
 		} );
 	} );
 
@@ -207,28 +207,14 @@ describe( 'DomConverter', () => {
 		} );
 	} );
 
-	describe( 'getCorrespondingDom()', () => {
+	describe( 'mapViewToDom()', () => {
 		it( 'should return corresponding DOM element if element was passed', () => {
 			const domElement = document.createElement( 'p' );
 			const viewElement = new ViewElement( 'p' );
 
 			converter.bindElements( domElement, viewElement );
 
-			expect( converter.getCorrespondingDom( viewElement ) ).to.equal( domElement );
-		} );
-
-		it( 'should return corresponding DOM text if text was passed', () => {
-			const domText = document.createTextNode( 'foo' );
-			const domP = document.createElement( 'p' );
-
-			domP.appendChild( domText );
-
-			const viewP = converter.domToView( domP );
-			const viewText = viewP.getChild( 0 );
-
-			converter.bindElements( domP, viewP );
-
-			expect( converter.getCorrespondingDom( viewText ) ).to.equal( domText );
+			expect( converter.mapViewToDom( viewElement ) ).to.equal( domElement );
 		} );
 
 		it( 'should return corresponding DOM document fragment', () => {
@@ -237,37 +223,15 @@ describe( 'DomConverter', () => {
 
 			converter.bindElements( domFragment, viewFragment );
 
-			expect( converter.getCorrespondingDom( viewFragment ) ).to.equal( domFragment );
+			expect( converter.mapViewToDom( viewFragment ) ).to.equal( domFragment );
 		} );
 
-		it( 'should return null if wrong parameter is passed', () => {
-			expect( converter.getCorrespondingDom( null ) ).to.be.null;
-		} );
-	} );
-
-	describe( 'getCorrespondingDomElement()', () => {
-		it( 'should return corresponding DOM element', () => {
-			const domElement = document.createElement( 'p' );
-			const viewElement = new ViewElement( 'p' );
-
-			converter.bindElements( domElement, viewElement );
-
-			expect( converter.getCorrespondingDomElement( viewElement ) ).to.equal( domElement );
-		} );
-	} );
-
-	describe( 'getCorrespondingDomDocumentFragment()', () => {
-		it( 'should return corresponding DOM document fragment', () => {
-			const domFragment = document.createDocumentFragment();
-			const viewFragment = new ViewDocumentFragment();
-
-			converter.bindElements( domFragment, viewFragment );
-
-			expect( converter.getCorrespondingDomDocumentFragment( viewFragment ) ).to.equal( domFragment );
+		it( 'should return undefined if wrong parameter is passed', () => {
+			expect( converter.mapViewToDom( null ) ).to.be.undefined;
 		} );
 	} );
 
-	describe( 'getCorrespondingDomText', () => {
+	describe( 'findCorrespondingDomText()', () => {
 		it( 'should return corresponding DOM text based on sibling', () => {
 			const domImg = document.createElement( 'img' );
 			const domText = document.createTextNode( 'foo' );
@@ -283,7 +247,7 @@ describe( 'DomConverter', () => {
 			const viewP = converter.domToView( domP );
 			const viewText = viewP.getChild( 1 );
 
-			expect( converter.getCorrespondingDomText( viewText ) ).to.equal( domText );
+			expect( converter.findCorrespondingDomText( viewText ) ).to.equal( domText );
 		} );
 
 		it( 'should return corresponding DOM text based on parent', () => {
@@ -297,7 +261,7 @@ describe( 'DomConverter', () => {
 
 			converter.bindElements( domP, viewP );
 
-			expect( converter.getCorrespondingDomText( viewText ) ).to.equal( domText );
+			expect( converter.findCorrespondingDomText( viewText ) ).to.equal( domText );
 		} );
 
 		it( 'should return null if sibling is not bound', () => {
@@ -313,7 +277,7 @@ describe( 'DomConverter', () => {
 
 			converter.bindElements( domP, viewP );
 
-			expect( converter.getCorrespondingDomText( viewText ) ).to.be.null;
+			expect( converter.findCorrespondingDomText( viewText ) ).to.be.null;
 		} );
 
 		it( 'should return null if parent is not bound', () => {
@@ -325,14 +289,14 @@ describe( 'DomConverter', () => {
 			const viewP = converter.domToView( domP );
 			const viewText = viewP.getChild( 0 );
 
-			expect( converter.getCorrespondingDomText( viewText ) ).to.be.null;
+			expect( converter.findCorrespondingDomText( viewText ) ).to.be.null;
 		} );
 
 		it( 'should return null if there is no previous sibling and parent', () => {
 			const domText = document.createTextNode( 'foo' );
 			const viewText = converter.domToView( domText );
 
-			expect( converter.getCorrespondingDomText( viewText ) ).to.be.null;
+			expect( converter.findCorrespondingDomText( viewText ) ).to.be.null;
 		} );
 	} );
 
@@ -374,12 +338,12 @@ describe( 'DomConverter', () => {
 			converter.bindElements( domElement, viewElement );
 
 			expect( converter.getCorrespondingView( domElement ) ).to.equal( viewElement );
-			expect( converter.getCorrespondingDom( viewElement ) ).to.equal( domElement );
+			expect( converter.mapViewToDom( viewElement ) ).to.equal( domElement );
 
 			converter.unbindDomElement( domElement );
 
 			expect( converter.getCorrespondingView( domElement ) ).to.be.undefined;
-			expect( converter.getCorrespondingDom( viewElement ) ).to.be.undefined;
+			expect( converter.mapViewToDom( viewElement ) ).to.be.undefined;
 		} );
 
 		it( 'should unbind element\'s child nodes', () => {
@@ -394,12 +358,12 @@ describe( 'DomConverter', () => {
 			converter.bindElements( domChild, viewChild );
 
 			expect( converter.getCorrespondingView( domChild ) ).to.equal( viewChild );
-			expect( converter.getCorrespondingDom( viewChild ) ).to.equal( domChild );
+			expect( converter.mapViewToDom( viewChild ) ).to.equal( domChild );
 
 			converter.unbindDomElement( domElement );
 
 			expect( converter.getCorrespondingView( domChild ) ).to.be.undefined;
-			expect( converter.getCorrespondingDom( viewChild ) ).to.be.undefined;
+			expect( converter.mapViewToDom( viewChild ) ).to.be.undefined;
 		} );
 
 		it( 'should do nothing if there are no elements bind', () => {
@@ -407,12 +371,12 @@ describe( 'DomConverter', () => {
 			const viewElement = new ViewElement( 'p' );
 
 			expect( converter.getCorrespondingView( domElement ) ).to.be.undefined;
-			expect( converter.getCorrespondingDom( viewElement ) ).to.be.undefined;
+			expect( converter.mapViewToDom( viewElement ) ).to.be.undefined;
 
 			converter.unbindDomElement( domElement );
 
 			expect( converter.getCorrespondingView( domElement ) ).to.be.undefined;
-			expect( converter.getCorrespondingDom( viewElement ) ).to.be.undefined;
+			expect( converter.mapViewToDom( viewElement ) ).to.be.undefined;
 		} );
 	} );
 } );

+ 10 - 10
packages/ckeditor5-engine/tests/view/domconverter/dom-to-view.js

@@ -46,8 +46,8 @@ describe( 'DomConverter', () => {
 			expect( viewP.getChild( 0 ).name ).to.equal( 'img' );
 			expect( viewP.getChild( 1 ).data ).to.equal( 'foo' );
 
-			expect( converter.getCorrespondingDom( viewP ) ).to.not.equal( domP );
-			expect( converter.getCorrespondingDom( viewP.getChild( 0 ) ) ).to.equal( domImg );
+			expect( converter.mapViewToDom( viewP ) ).to.not.equal( domP );
+			expect( converter.mapViewToDom( viewP.getChild( 0 ) ) ).to.equal( domImg );
 		} );
 
 		it( 'should create tree of view elements from DOM elements and bind elements', () => {
@@ -67,8 +67,8 @@ describe( 'DomConverter', () => {
 			expect( viewP.getChild( 0 ).name ).to.equal( 'img' );
 			expect( viewP.getChild( 1 ).data ).to.equal( 'foo' );
 
-			expect( converter.getCorrespondingDom( viewP ) ).to.equal( domP );
-			expect( converter.getCorrespondingDom( viewP.getChild( 0 ) ) ).to.equal( domP.childNodes[ 0 ] );
+			expect( converter.mapViewToDom( viewP ) ).to.equal( domP );
+			expect( converter.mapViewToDom( viewP.getChild( 0 ) ) ).to.equal( domP.childNodes[ 0 ] );
 		} );
 
 		it( 'should support unicode', () => {
@@ -82,8 +82,8 @@ describe( 'DomConverter', () => {
 			const viewText = viewP.getChild( 0 );
 			expect( viewText.data ).to.equal( 'நிலைக்கு' );
 
-			expect( converter.getCorrespondingDom( viewP ) ).to.equal( domP );
-			expect( converter.getCorrespondingDom( viewP.getChild( 0 ) ) ).to.equal( domP.childNodes[ 0 ] );
+			expect( converter.mapViewToDom( viewP ) ).to.equal( domP );
+			expect( converter.findCorrespondingDomText( viewP.getChild( 0 ) ) ).to.equal( domP.childNodes[ 0 ] );
 		} );
 
 		it( 'should create tree of view elements from DOM element without children', () => {
@@ -104,7 +104,7 @@ describe( 'DomConverter', () => {
 			expect( count( viewP.getAttributeKeys() ) ).to.equal( 1 );
 
 			expect( viewP.childCount ).to.equal( 0 );
-			expect( converter.getCorrespondingDom( viewP ) ).to.not.equal( domP );
+			expect( converter.mapViewToDom( viewP ) ).to.not.equal( domP );
 		} );
 
 		it( 'should create view document fragment from DOM document fragment', () => {
@@ -122,8 +122,8 @@ describe( 'DomConverter', () => {
 			expect( viewFragment.getChild( 0 ).name ).to.equal( 'img' );
 			expect( viewFragment.getChild( 1 ).data ).to.equal( 'foo' );
 
-			expect( converter.getCorrespondingDom( viewFragment ) ).to.equal( domFragment );
-			expect( converter.getCorrespondingDom( viewFragment.getChild( 0 ) ) ).to.equal( domFragment.childNodes[ 0 ] );
+			expect( converter.mapViewToDom( viewFragment ) ).to.equal( domFragment );
+			expect( converter.mapViewToDom( viewFragment.getChild( 0 ) ) ).to.equal( domFragment.childNodes[ 0 ] );
 		} );
 
 		it( 'should create view document fragment from DOM document fragment without children', () => {
@@ -143,7 +143,7 @@ describe( 'DomConverter', () => {
 			expect( viewFragment ).to.be.an.instanceof( ViewDocumentFragment );
 
 			expect( viewFragment.childCount ).to.equal( 0 );
-			expect( converter.getCorrespondingDom( viewFragment ) ).to.not.equal( domFragment );
+			expect( converter.mapViewToDom( viewFragment ) ).to.not.equal( domFragment );
 		} );
 
 		it( 'should return already bind document fragment', () => {