Procházet zdrojové kódy

Test: make current tests green.

Piotr Jasiun před 9 roky
rodič
revize
7710ae8350

+ 5 - 4
packages/ckeditor5-engine/src/treeview/domconverter.js

@@ -152,11 +152,11 @@ export default class DomConverter {
 		}
 	}
 
-	*viewChildrenToDom( viewNode, domDocument, options = {} ) {
-		let fillerPositionOffset = viewNode.needsFiller();
+	*viewChildrenToDom( viewElement, domDocument, options = {} ) {
+		let fillerPositionOffset = viewElement.needsFiller && viewElement.needsFiller();
 		let offset = 0;
 
-		for ( let childView of viewNode.getChildren() ) {
+		for ( let childView of viewElement.getChildren() ) {
 			if ( fillerPositionOffset === offset ) {
 				yield this.blockFillerCreator( domDocument );
 			}
@@ -229,7 +229,8 @@ export default class DomConverter {
 	}
 
 	*domChildrenToView( domNode, options = {} ) {
-		for ( let domChild of domNode.childNodes ) {
+		for ( let i = 0; i < domNode.childNodes.length; i++ ) {
+			const domChild = domNode.childNodes[ i ];
 			const viewChild = this.domToView( domChild, options );
 
 			if ( viewChild !== null ) {

+ 0 - 2
packages/ckeditor5-engine/src/treeview/observer/mutationobserver.js

@@ -164,7 +164,6 @@ export default class MutationObserver extends Observer {
 
 		for ( let mutatedText of mutatedTexts.values() ) {
 			this.renderer.markToSync( 'TEXT', mutatedText.node );
-
 			viewMutations.push( mutatedText );
 		}
 
@@ -174,7 +173,6 @@ export default class MutationObserver extends Observer {
 			const newViewChildren = this.domConverter.domChildrenToView( domElement );
 
 			this.renderer.markToSync( 'CHILDREN', viewElement );
-
 			viewMutations.push( {
 				type: 'children',
 				oldChildren: Array.from( viewChildren ),

+ 10 - 5
packages/ckeditor5-engine/src/treeview/renderer.js

@@ -196,7 +196,7 @@ export default class Renderer {
 	}
 
 	_isInlineFillerAtSelection() {
-		if ( this.selection.rangeCount() != 1 || !this.selection.isCollapsed() ) {
+		if ( this.selection.rangeCount != 1 || !this.selection.isCollapsed() ) {
 			return false;
 		}
 
@@ -221,6 +221,11 @@ export default class Renderer {
 	}
 
 	_removeInlineFiller() {
+		if ( !this._inlineFillerPosition ) {
+			// Nothing to remove;
+			return;
+		}
+
 		const domPosition = this.domConverter.viewPositionToDom( this._inlineFillerPosition );
 		const domText = domPosition.parent.childNodes[ domPosition.offset ];
 
@@ -241,7 +246,7 @@ export default class Renderer {
 	}
 
 	_needAddInlineFiller() {
-		if ( this.selection.rangeCount() != 1 || !this.selection.isCollapsed() ) {
+		if ( this.selection.rangeCount != 1 || !this.selection.isCollapsed() ) {
 			return false;
 		}
 
@@ -276,7 +281,7 @@ export default class Renderer {
 
 		const filler = this._inlineFillerPosition;
 
-		if ( filler.parent == viewText.parent && filler.offset == viewText.offset ) {
+		if ( filler && filler.parent == viewText.parent && filler.offset == viewText.offset ) {
 			expectedText = INLINE_FILLER + expectedText;
 		}
 
@@ -311,9 +316,9 @@ export default class Renderer {
 		const filler = this._inlineFillerPosition;
 
 		const actualDomChildren = domElement.childNodes;
-		const expectedDomChildren = Array.from( domConverter.viewChildrenToDom( viewElement, domDocument ) );
+		const expectedDomChildren = Array.from( domConverter.viewChildrenToDom( viewElement, domDocument, { bind: true } ) );
 
-		if ( filler.parent == viewElement ) {
+		if ( filler && filler.parent == viewElement ) {
 			expectedDomChildren.splice( filler.offset, 0, domDocument.createTextNode( INLINE_FILLER ) );
 		}
 

+ 4 - 1
packages/ckeditor5-engine/src/treeview/treeview.js

@@ -5,12 +5,13 @@
 
 'use strict';
 
-import EmitterMixin from '../../utils/emittermixin.js';
+import Selection from './selection.js';
 import Renderer from './renderer.js';
 import DomConverter from './domconverter.js';
 import Writer from './writer.js';
 
 import mix from '../../utils/mix.js';
+import EmitterMixin from '../../utils/emittermixin.js';
 
 /**
  * TreeView class creates an abstract layer over the content editable area.
@@ -37,6 +38,8 @@ export default class TreeView {
 		 */
 		this.domRoots = new Map();
 
+		this.selection = new Selection();
+
 		/**
 		 * Tree View writer.
 		 *

+ 0 - 25
packages/ckeditor5-engine/tests/treeview/domconverter.js

@@ -44,31 +44,6 @@ describe( 'DomConverter', () => {
 		} );
 	} );
 
-	describe( 'compareNodes', () => {
-		it( 'should return false for nodes not matching types', () => {
-			const domElement = document.createElement( 'p' );
-			const viewText = new ViewText( 'foo' );
-
-			expect( converter.compareNodes( domElement, viewText ) ).to.be.false;
-		} );
-
-		it( 'should return true for bound elements', () => {
-			const domElement = document.createElement( 'p' );
-			const viewElement = new ViewElement( 'p' );
-
-			converter.bindElements( domElement, viewElement );
-
-			expect( converter.compareNodes( domElement, viewElement ) ).to.be.true;
-		} );
-
-		it( 'should return true for the same texts', () => {
-			const domText = document.createTextNode( 'foo' );
-			const viewText = new ViewText( 'foo' );
-
-			expect( converter.compareNodes( domText, viewText ) ).to.be.true;
-		} );
-	} );
-
 	describe( 'domToView', () => {
 		it( 'should create tree of view elements from DOM elements', () => {
 			const domImg = document.createElement( 'img' );

+ 2 - 2
packages/ckeditor5-engine/tests/treeview/observer/domeventobserver.js

@@ -98,7 +98,7 @@ describe( 'DomEventObserver', () => {
 		treeView.addObserver( ClickObserver );
 		treeView.on( 'click', evtSpy );
 
-		const testObserver = Array.from( treeView._observers )[ 0 ];
+		const testObserver = treeView.getObserver( ClickObserver );
 		testObserver.disable();
 
 		domElement.dispatchEvent( domEvent );
@@ -116,7 +116,7 @@ describe( 'DomEventObserver', () => {
 		treeView.addObserver( ClickObserver );
 		treeView.on( 'click', evtSpy );
 
-		const testObserver = Array.from( treeView._observers )[ 0 ];
+		const testObserver = treeView.getObserver( ClickObserver );
 
 		testObserver.disable();
 

+ 1 - 1
packages/ckeditor5-engine/tests/treeview/observer/focusobserver.js

@@ -17,7 +17,7 @@ describe( 'FocusObserver', () => {
 		treeView = new TreeView();
 		treeView.addObserver( FocusObserver );
 
-		observer = Array.from( treeView._observers )[ 0 ];
+		observer = treeView.getObserver( FocusObserver );
 	} );
 
 	it( 'should define domEventType', () => {

+ 1 - 1
packages/ckeditor5-engine/tests/treeview/observer/keyobserver.js

@@ -18,7 +18,7 @@ describe( 'KeyObserver', () => {
 		treeView = new TreeView();
 		treeView.addObserver( KeyObserver );
 
-		observer = Array.from( treeView._observers )[ 0 ];
+		observer = treeView.getObserver( KeyObserver );
 	} );
 
 	it( 'should define domEventType', () => {

+ 1 - 1
packages/ckeditor5-engine/tests/treeview/observer/mutationobserver.js

@@ -23,7 +23,7 @@ describe( 'MutationObserver', () => {
 		treeView.createRoot( domEditor, 'editor' );
 
 		treeView.addObserver( MutationObserver );
-		mutationObserver = Array.from( treeView._observers )[ 0 ];
+		mutationObserver = treeView.getObserver( MutationObserver );
 
 		treeView.on( 'mutations', ( evt, mutations ) => lastMutations = mutations );
 

+ 5 - 5
packages/ckeditor5-engine/tests/treeview/renderer.js

@@ -7,18 +7,18 @@
 
 'use strict';
 
-import Renderer from '/ckeditor5/engine/treeview/renderer.js';
 import ViewElement from '/ckeditor5/engine/treeview/element.js';
 import ViewText from '/ckeditor5/engine/treeview/text.js';
-import DomConverter from '/ckeditor5/engine/treeview/domconverter.js';
+import TreeView from '/ckeditor5/engine/treeview/treeview.js';
 import CKEditorError from '/ckeditor5/utils/ckeditorerror.js';
 
 describe( 'Renderer', () => {
-	let domConverter, renderer;
+	let treeView, domConverter, renderer;
 
 	before( () => {
-		domConverter = new DomConverter();
-		renderer = new Renderer( domConverter );
+		treeView = new TreeView();
+		domConverter = treeView.domConverter;
+		renderer = treeView.renderer;
 	} );
 
 	describe( 'markToSync', () => {

+ 2 - 2
packages/ckeditor5-engine/tests/treeview/treeview.js

@@ -77,7 +77,7 @@ describe( 'TreeView', () => {
 
 			expect( treeView._observers.size ).to.equal( 1 );
 
-			const observerMock = Array.from( treeView._observers )[ 0 ];
+			const observerMock = treeView.getObserver( ObserverMock );
 
 			expect( observerMock ).to.have.property( 'treeView', treeView );
 			sinon.assert.calledOnce( observerMock.enable );
@@ -127,7 +127,7 @@ describe( 'TreeView', () => {
 			treeView.addObserver( ObserverMock );
 			treeView.render();
 
-			const observerMock = Array.from( treeView._observers )[ 0 ];
+			const observerMock = treeView.getObserver( ObserverMock );
 
 			sinon.assert.calledOnce( observerMock.disable );
 			sinon.assert.calledOnce( treeView.renderer.render );