/** * @author Mat Groves http://matgroves.com/ @Doormat23 */ /** * https://github.com/mrdoob/eventtarget.js/ * THankS mr DOob! */ /** * Adds event emitter functionality to a class * * @class EventTarget * @example * function MyEmitter() { * PIXI.EventTarget.call(this); //mixes in event target stuff * } * * var em = new MyEmitter(); * em.emit({ type: 'eventName', data: 'some data' }); */ PIXI.EventTarget = function () { /** * Holds all the listeners * * @property listeners * @type Object */ var listeners = {}; /** * Adds a listener for a specific event * * @method addEventListener * @param type {string} A string representing the event type to listen for. * @param listener {function} The callback function that will be fired when the event occurs */ this.addEventListener = this.on = function ( type, listener ) { if ( listeners[ type ] === undefined ) { listeners[ type ] = []; } if ( listeners[ type ].indexOf( listener ) === - 1 ) { listeners[ type ].push( listener ); } }; /** * Fires the event, ie pretends that the event has happened * * @method dispatchEvent * @param event {Event} the event object */ this.dispatchEvent = this.emit = function ( event ) { if ( !listeners[ event.type ] || !listeners[ event.type ].length ) { return; } for(var i = 0, l = listeners[ event.type ].length; i < l; i++) { listeners[ event.type ][ i ]( event ); } }; /** * Removes the specified listener that was assigned to the specified event type * * @method removeEventListener * @param type {string} A string representing the event type which will have its listener removed * @param listener {function} The callback function that was be fired when the event occured */ this.removeEventListener = this.off = function ( type, listener ) { var index = listeners[ type ].indexOf( listener ); if ( index !== - 1 ) { listeners[ type ].splice( index, 1 ); } }; /** * Removes all the listeners that were active for the specified event type * * @method removeAllEventListeners * @param type {string} A string representing the event type which will have all its listeners removed */ this.removeAllEventListeners = function( type ) { var a = listeners[type]; if (a) a.length = 0; }; };