cables_dev/cables/src/core/eventtarget.js
- import { Logger } from "cables-shared-client";
-
- const EventTarget = function ()
- {
- this._log = new Logger("eventtarget");
- this._eventCallbacks = {};
- this._logName = "";
- this._logEvents = false;
- this._listeners = {};
-
- this.addEventListener = this.on = function (which, cb, idPrefix)
- {
- const event =
- {
- "id": (idPrefix || "") + CABLES.simpleId(),
- "name": which,
- "cb": cb,
- };
- if (!this._eventCallbacks[which]) this._eventCallbacks[which] = [event];
- else this._eventCallbacks[which].push(event);
-
- this._listeners[event.id] = event;
-
- return event.id;
- };
-
- this.hasEventListener = function (which, cb)
- {
- if (which && !cb)
- {
- // check by id
- if (this._listeners[which]) return true;
- else return false;
- }
- else
- {
- this._log.warn("old eventtarget function haseventlistener!");
- if (which && cb)
- {
- if (this._eventCallbacks[which])
- {
- const idx = this._eventCallbacks[which].indexOf(cb);
- if (idx == -1) return false;
- return true;
- }
- }
- }
- };
-
- this.hasListenerForEventName = function (eventName)
- {
- return this._eventCallbacks[eventName] && this._eventCallbacks[eventName].length > 0;
- };
-
- this.removeEventListener = this.off = function (which, cb)
- {
- if (which === null || which === undefined) return;
-
- if (!cb) // new style, remove by id, not by name/callback
- {
- const event = this._listeners[which];
- if (!event)
- {
- this._log.log("removeEvent: could not find event...", which, this);
- return;
- }
-
- let found = true;
- while (found)
- {
- found = false;
- let index = -1;
- for (let i = 0; i < this._eventCallbacks[event.name].length; i++)
- {
- if (this._eventCallbacks[event.name][i].id.startsWith(which)) // this._eventCallbacks[event.name][i].id == which ||
- {
- found = true;
- index = i;
- }
- }
-
- if (index !== -1)
- {
- this._eventCallbacks[event.name].splice(index, 1);
- delete this._listeners[which];
- }
- }
-
- return;
- }
-
- this._log.info("[eventtaget] ", "old function signature: removeEventListener! use listener id");
- this._log.log((new Error()).stack);
-
- let index = null;
- for (let i = 0; i < this._eventCallbacks[which].length; i++)
- if (this._eventCallbacks[which][i].cb == cb)
- index = i;
-
- if (index !== null)
- {
- delete this._eventCallbacks[index];
- }
- else this._log.warn("removeEventListener not found " + which);
- };
-
- this.logEvents = function (enabled, name)
- {
- this._logEvents = enabled;
- this._logName = name;
- };
-
- this.emitEvent = function (which, param1, param2, param3, param4, param5, param6)
- {
- if (this._logEvents) this._log.log("[event] ", this._logName, which, this._eventCallbacks);
-
- if (this._eventCallbacks[which])
- {
- for (let i = 0; i < this._eventCallbacks[which].length; i++)
- {
- if (this._eventCallbacks[which][i])
- {
- this._eventCallbacks[which][i].cb(param1, param2, param3, param4, param5, param6);
- }
- }
- }
- else
- {
- if (this._logEvents) this._log.log("[event] has no event callback", which, this._eventCallbacks);
- }
- };
- };
-
- export { EventTarget };