API Docs for: 0.1.8
Show:

File: src\eventdispatcher.js

/**
 * A base class for adding and removing event listeners and dispatching events.
 *
 * @class EventDispatcher
 * @constructor
 */

export default function EventDispatcher() {

	/**
	 * A map of listeners.
	 *
	 * @property _listeners
	 * @type Object
	 * @private
	 */

	this._listeners = {};

}

/**
 * Extends an object with the event dispatcher functionality.
 *
 * @method apply
 * @param {Object} object - The object.
 * @example
 *  EventDispatcher.prototype.apply(X.prototype);
 */

EventDispatcher.prototype.apply = function(object) {

	object._listeners = {};
	object.addEventListener = EventDispatcher.prototype.addEventListener;
	object.hasEventListener = EventDispatcher.prototype.hasEventListener;
	object.removeEventListener = EventDispatcher.prototype.removeEventListener;
	object.dispatchEvent = EventDispatcher.prototype.dispatchEvent;

};

/**
 * Adds an event listener.
 *
 * @method addEventListener
 * @param {String} type - The event type.
 * @param {Function} listener - The event listener.
 */

EventDispatcher.prototype.addEventListener = function(type, listener) {

	if(this._listeners[type] === undefined) {

		this._listeners[type] = [];

	}

	if(this._listeners[type].indexOf(listener) === -1) {

		this._listeners[type].push(listener);

	}

};

/**
 * Checks if the event listener exists.
 *
 * @method hasEventListener
 * @param {String} type - The event type.
 * @param {Function} listener - The event listener.
 */

EventDispatcher.prototype.hasEventListener = function(type, listener) {

	return (this._listeners[type] !== undefined && this._listeners[type].indexOf(listener) !== -1);

};

/**
 * Removes an event listener.
 *
 * @method removeEventListener
 * @param {String} type - The event type.
 * @param {Function} listener - The event listener.
 */

EventDispatcher.prototype.removeEventListener = function(type, listener) {

	var i, listenerArray;

	listenerArray = this._listeners[type];

	if(listenerArray !== undefined) {

		i = listenerArray.indexOf(listener);

		if(i !== -1) {

			listenerArray.splice(i, 1);

		}

	}

};

/**
 * Dispatches an event to all respective listeners.
 *
 * @method dispatchEvent
 * @param {Object} event - The event.
 */

EventDispatcher.prototype.dispatchEvent = function(event) {

	var i, l, listenerArray;

	listenerArray = this._listeners[event.type];

	if(listenerArray !== undefined) {

		event.target = this;

		for(i = 0, l = listenerArray.length; i < l; ++i) {

			listenerArray[i].call(this, event);

		}

	}

};