8
0
Просмотр исходного кода

Added change event to treeView.DocumentFragment.

Szymon Kupś 9 лет назад
Родитель
Сommit
4d96b5bb17

+ 15 - 0
packages/ckeditor5-engine/src/treeview/documentfragment.js

@@ -6,6 +6,7 @@
 'use strict';
 
 import utils from '../../utils/utils.js';
+import EmitterMixin from '../../utils/emittermixin.js';
 
 /**
  * DocumentFragment class.
@@ -98,6 +99,7 @@ export default class DocumentFragment {
 	 * @returns {Number} Number of inserted nodes.
 	 */
 	insertChildren( index, nodes ) {
+		this._fireChange( 'CHILDREN', this );
 		let count = 0;
 
 		if ( !utils.isIterable( nodes ) ) {
@@ -123,10 +125,23 @@ export default class DocumentFragment {
 	 * @returns {Array.<engine.treeView.Node>} The array of removed nodes.
 	 */
 	removeChildren( index, howMany = 1 ) {
+		this._fireChange( 'CHILDREN', this );
+
 		for ( let i = index; i < index + howMany; i++ ) {
 			this._children[ i ].parent = null;
 		}
 
 		return this._children.splice( index, howMany );
 	}
+
+	/**
+	 * @param {engine.treeView.ChangeType} type Type of the change.
+	 * @param {engine.treeView.Node} node Changed node.
+	 * @fires engine.treeView.Node#change
+	 */
+	_fireChange( type, node ) {
+		this.fire( 'change', type, node );
+	}
 }
+
+utils.mix( DocumentFragment, EmitterMixin );

+ 29 - 0
packages/ckeditor5-engine/tests/treeview/documentfragment.js

@@ -88,6 +88,24 @@ describe( 'DocumentFragment', () => {
 				expect( count2 ).to.equal( 1 );
 				expect( count3 ).to.equal( 1 );
 			} );
+
+			it( 'should fire change event when inserting', ( done ) => {
+				fragment.once( 'change', ( event, type ) => {
+					expect( type ).to.equal( 'CHILDREN' );
+					done();
+				} );
+
+				fragment.insertChildren( 0, el1 );
+			} );
+
+			it( 'should fire change event when appending', ( done ) => {
+				fragment.once( 'change', ( event, type ) => {
+					expect( type ).to.equal( 'CHILDREN' );
+					done();
+				} );
+
+				fragment.appendChildren( el1 );
+			} );
 		} );
 
 		describe( 'getChildIndex', () => {
@@ -154,6 +172,17 @@ describe( 'DocumentFragment', () => {
 				expect( removed.length ).to.equal( 1 );
 				expect( removed[ 0 ] ).to.have.property( 'name' ).that.equals( 'el2' );
 			} );
+
+			it( 'should fire change event', ( done ) => {
+				fragment.appendChildren( el1 );
+
+				fragment.once( 'change', ( event, type ) => {
+					expect( type ).to.equal( 'CHILDREN' );
+					done();
+				} );
+
+				fragment.removeChildren( 0 );
+			} );
 		} );
 	} );