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("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 };