ソースを参照

Changed: Change EmitterMixin#_emitterId getter and setter to separate functions exported by module.

Szymon Cofalik 9 年 前
コミット
874344d587

+ 2 - 2
packages/ckeditor5-utils/src/dom/emittermixin.js

@@ -8,7 +8,7 @@
  */
 
 import EmitterMixin from '../emittermixin';
-import { _getEmitterListenedTo } from '../emittermixin';
+import { _getEmitterListenedTo, _setEmitterId } from '../emittermixin';
 import uid from '../uid';
 import extend from '../lib/lodash/extend';
 import isNative from '../lib/lodash/isNative';
@@ -153,7 +153,7 @@ class ProxyEmitter {
 	 */
 	constructor( node ) {
 		// Set emitter ID to match DOM Node "expando" property.
-		this._emitterId = getNodeUID( node );
+		_setEmitterId( this, getNodeUID( node ) );
 
 		// Remember the DOM Node this ProxyEmitter is bound to.
 		this._domNode = node;

+ 29 - 30
packages/ckeditor5-utils/src/emittermixin.js

@@ -159,11 +159,11 @@ const EmitterMixin = {
 
 		emitters = this[ _listeningTo ];
 
-		if ( !emitter._emitterId ) {
-			emitter._emitterId = uid();
+		if ( !_getEmitterId( emitter ) ) {
+			_setEmitterId( emitter );
 		}
 
-		emitterId = emitter._emitterId;
+		emitterId = _getEmitterId( emitter );
 
 		if ( !( emitterInfo = emitters[ emitterId ] ) ) {
 			emitterInfo = emitters[ emitterId ] = {
@@ -199,7 +199,7 @@ const EmitterMixin = {
 	 */
 	stopListening( emitter, event, callback ) {
 		let emitters = this[ _listeningTo ];
-		let emitterId = emitter && emitter._emitterId;
+		let emitterId = emitter && _getEmitterId( emitter );
 		let emitterInfo = emitters && emitterId && emitters[ emitterId ];
 		let eventCallbacks = emitterInfo && event && emitterInfo.callbacks[ event ];
 
@@ -364,32 +364,6 @@ const EmitterMixin = {
 				destinations.delete( emitter );
 			}
 		}
-	},
-
-	/**
-	 * Emitter's unique id.
-	 *
-	 * **Note:** `_emitterId` can be set only once.
-	 *
-	 * @protected
-	 * @type {String}
-	 */
-	get _emitterId() {
-		return this[ _emitterId ];
-	},
-
-	/**
-	 * Emitter's unique id.
-	 *
-	 * **Note:** `_emitterId` can be set only once.
-	 *
-	 * @protected
-	 * @type {String}
-	 */
-	set _emitterId( id ) {
-		if ( !this[ _emitterId ] ) {
-			this[ _emitterId ] = id;
-		}
 	}
 };
 
@@ -412,6 +386,31 @@ export function _getEmitterListenedTo( listeningEmitter, listenedToEmitterId ) {
 	return null;
 }
 
+/**
+ * Sets emitter's unique id.
+ *
+ * **Note:** `_emitterId` can be set only once.
+ *
+ * @protected
+ * @param {module:utils/emittermixin~EmitterMixin} emitter Emitter for which id will be set.
+ * @param {String} [id] Unique id to set. If not passed, random unique id will be set.
+ */
+export function _setEmitterId( emitter, id ) {
+	if ( !emitter[ _emitterId ] ) {
+		emitter[ _emitterId ] = id || uid();
+	}
+}
+
+/**
+ * Returns emitter's unique id.
+ *
+ * @protected
+ * @param {module:utils/emittermixin~EmitterMixin} emitter Emitter which id will be returned.
+ */
+export function _getEmitterId( emitter ) {
+	return emitter[ _emitterId ];
+}
+
 // Gets the internal `_events` property of the given object.
 // `_events` property store all lists with callbacks for registered event names.
 // If there were no events registered on the object, empty `_events` object is created.

+ 24 - 18
packages/ckeditor5-utils/tests/emittermixin.js

@@ -4,7 +4,7 @@
  */
 
 import EmitterMixin from 'ckeditor5-utils/src/emittermixin';
-import { _getEmitterListenedTo } from 'ckeditor5-utils/src/emittermixin';
+import { _getEmitterListenedTo, _getEmitterId, _setEmitterId } from 'ckeditor5-utils/src/emittermixin';
 import EventInfo from 'ckeditor5-utils/src/eventinfo';
 
 describe( 'EmitterMixin', () => {
@@ -15,22 +15,6 @@ describe( 'EmitterMixin', () => {
 		listener = getEmitterInstance();
 	} );
 
-	describe( '_emitterId', () => {
-		it( 'should not be set by default', () => {
-			expect( emitter._emitterId ).to.be.undefined;
-		} );
-
-		it( 'should be settable but only once', () => {
-			emitter._emitterId = 'abc';
-
-			expect( emitter._emitterId ).to.equal( 'abc' );
-
-			emitter._emitterId = 'xyz';
-
-			expect( emitter._emitterId ).to.equal( 'abc' );
-		} );
-	} );
-
 	describe( 'fire', () => {
 		it( 'should execute callbacks in the right order without priority', () => {
 			let spy1 = sinon.spy().named( 1 );
@@ -1116,6 +1100,28 @@ describe( 'EmitterMixin', () => {
 	}
 } );
 
+describe( 'emitter id', () => {
+	let emitter;
+
+	beforeEach( () => {
+		emitter = getEmitterInstance();
+	} );
+
+	it( 'should be undefined before it is set', () => {
+		expect( _getEmitterId( emitter ) ).to.be.undefined;
+	} );
+
+	it( 'should be settable but only once', () => {
+		_setEmitterId( emitter, 'abc' );
+
+		expect( _getEmitterId( emitter ) ).to.equal( 'abc' );
+
+		_setEmitterId( emitter, 'xyz' );
+
+		expect( _getEmitterId( emitter ) ).to.equal( 'abc' );
+	} );
+} );
+
 describe( '_getEmitterListenedTo', () => {
 	let emitter, listener;
 
@@ -1130,7 +1136,7 @@ describe( '_getEmitterListenedTo', () => {
 
 	it( 'should return emitter with given id', () => {
 		listener.listenTo( emitter, 'eventName', () => {} );
-		const emitterId = emitter._emitterId;
+		const emitterId = _getEmitterId( emitter );
 
 		expect( _getEmitterListenedTo( listener, emitterId ) ).to.equal( emitter );
 	} );