X-Git-Url: https://git.josue.xyz/?a=blobdiff_plain;f=node_modules%2Fwebsocket%2Fnode_modules%2Fyaeti%2Flib%2FEventTarget.js;fp=node_modules%2Fwebsocket%2Fnode_modules%2Fyaeti%2Flib%2FEventTarget.js;h=403c75bd4e3a6b6dff6ba8a865d3b6292793f985;hb=0f4e331e6d75c244e978860b62a6e1aed8d446e0;hp=0000000000000000000000000000000000000000;hpb=0cb383f1c0646575a831f4f812cd85c9e24d9a18;p=VSoRC%2F.git diff --git a/node_modules/websocket/node_modules/yaeti/lib/EventTarget.js b/node_modules/websocket/node_modules/yaeti/lib/EventTarget.js new file mode 100644 index 0000000..403c75b --- /dev/null +++ b/node_modules/websocket/node_modules/yaeti/lib/EventTarget.js @@ -0,0 +1,119 @@ +/** + * 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'); + } + + // Do some stuff to emulate DOM Event behavior (just if this is not a + // DOM Event object) + if (event._yaeti) { + event.target = this; + event.cancelable = true; + } + + // Attempt to override the stopImmediatePropagation() method + try { + event.stopImmediatePropagation = function () { + stopImmediatePropagation = true; + }; + } catch (error) {} + + type = event.type; + listenersType = (this._listeners[type] || []); + + dummyListener = this['on' + type]; + if (typeof dummyListener === 'function') { + dummyListener.call(this, event); + } + + for (i = 0; !!(listener = listenersType[i]); i++) { + if (stopImmediatePropagation) { + break; + } + + listener.call(this, event); + } + + return !event.defaultPrevented; +}