Rev 915 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*** Expose the _EventTarget class.*/module.exports = _EventTarget;function _EventTarget() {// Do nothing if called for a native EventTarget object..if (typeof this.addEventListener === 'function') {return;}this._listeners = {};this.addEventListener = _addEventListener;this.removeEventListener = _removeEventListener;this.dispatchEvent = _dispatchEvent;}Object.defineProperties(_EventTarget.prototype, {listeners: {get: function () {return this._listeners;}}});function _addEventListener(type, newListener) {var listenersType,i, listener;if (!type || !newListener) {return;}listenersType = this._listeners[type];if (listenersType === undefined) {this._listeners[type] = listenersType = [];}for (i = 0; !!(listener = listenersType[i]); i++) {if (listener === newListener) {return;}}listenersType.push(newListener);}function _removeEventListener(type, oldListener) {var listenersType,i, listener;if (!type || !oldListener) {return;}listenersType = this._listeners[type];if (listenersType === undefined) {return;}for (i = 0; !!(listener = listenersType[i]); i++) {if (listener === oldListener) {listenersType.splice(i, 1);break;}}if (listenersType.length === 0) {delete this._listeners[type];}}function _dispatchEvent(event) {var type,listenersType,dummyListener,stopImmediatePropagation = false,i, listener;if (!event || typeof event.type !== 'string') {throw new Error('`event` must have a valid `type` property');}if (event._dispatched) {throw new Error('event already dispatched');}event._dispatched = true;// Force the event to be cancelable.event.cancelable = true;event.target = this;// Override stopImmediatePropagation() function.event.stopImmediatePropagation = function () {stopImmediatePropagation = true;};type = event.type;listenersType = (this._listeners[type] || []);dummyListener = this['on' + type];if (typeof dummyListener === 'function') {listenersType.push(dummyListener);}for (i = 0; !!(listener = listenersType[i]); i++) {if (stopImmediatePropagation) {break;}listener.call(this, event);}return !event.defaultPrevented;}