@awayjs/core
Version:
AwayJS core classes
116 lines (115 loc) • 4.01 kB
JavaScript
/**
* Base export class for dispatching events
*
* @export class away.events.EventDispatcher
*
*/
var EventDispatcher = /** @class */ (function () {
function EventDispatcher(target) {
if (target === void 0) { target = null; }
this._listenerObjects = {};
this._t = target || this;
}
/**
* Add an event listener
* @method addEventListener
* @param {String} type of event to add a listener for
* @param {Function} listener function
*/
EventDispatcher.prototype.addEventListener = function (type, listener) {
var l = this._listenerObjects[type];
if (l === undefined)
l = this._listenerObjects[type] = new ListenerObject();
l.addEventListener(listener);
};
/**
* Remove an event listener
* @method removeEventListener
* @param {String} type of event to remove a listener for
* @param {Function} listener function
*/
EventDispatcher.prototype.removeEventListener = function (type, listener) {
var l = this._listenerObjects[type];
if (l) {
l.removeEventListener(listener);
if (l.numListeners == 0)
delete this._listenerObjects[type];
}
};
/**
* Dispatch an event
* @method dispatchEvent
* @param {Event} event to dispatch
*/
EventDispatcher.prototype.dispatchEvent = function (event, target) {
if (target === void 0) { target = null; }
var l = this._listenerObjects[event.type];
if (l) {
event.target = target || this._t;
event.currentTarget = this._t;
l.dispatchEvent(event);
}
};
/**
* check if an object has an event listener assigned to it
* @method hasListener
* @param {String} type of event to remove a listener for
* @param {Function} listener function
*/
EventDispatcher.prototype.hasEventListener = function (type, listener) {
if (this._listenerObjects[type] === undefined)
return false;
if (listener != null)
return this._listenerObjects[type].getEventListenerIndex(listener) !== -1;
return this._listenerObjects[type].numListeners > 0;
};
EventDispatcher.prototype.removeAllEventListeners = function () {
this._listenerObjects = {};
};
return EventDispatcher;
}());
export { EventDispatcher };
var ListenerObject = /** @class */ (function () {
function ListenerObject() {
this._index = 0;
this._listeners = new Array();
this.numListeners = 0;
}
ListenerObject.prototype.addEventListener = function (listener) {
//check if listener already added
if (this._listeners.indexOf(listener) !== -1)
return;
this._listeners.push(listener);
this.numListeners++;
};
ListenerObject.prototype.removeEventListener = function (listener) {
//check if listener exists
var index = this._listeners.indexOf(listener);
if (index === -1)
return;
this._listeners.splice(index, 1);
//deals with removing a listener mid-way through dispatching listeners
if (index <= this._index)
this._index--;
this.numListeners--;
};
ListenerObject.prototype.dispatchEvent = function (event) {
var len = this.numListeners;
for (this._index = 0; this._index < len && this._index < this.numListeners; this._index++) {
this._listeners[this._index](event);
if (!event._iAllowedToImmediatlyPropagate) {
break;
}
}
};
/**
* get Event Listener Index in array. Returns -1 if no listener is added
* @method getEventListenerIndex
* @param {Function} listener function
*/
ListenerObject.prototype.getEventListenerIndex = function (listener) {
return this._listeners.indexOf(listener);
};
return ListenerObject;
}());
export { ListenerObject };