class Events { on(event, callback) { if (event.includes(" ")) { for (var name of event.split(" ")) { this.on(name, callback); } } else { this._callbacks ||= {}; this._callbacks[event] ||= []; this._callbacks[event].push(callback); } return this; } off(event, callback) { let callbacks, index; if (event.includes(" ")) { for (var name of event.split(" ")) { this.off(name, callback); } } else if ( (callbacks = this._callbacks?.[event]) && (index = callbacks.indexOf(callback)) >= 0 ) { callbacks.splice(index, 1); if (!callbacks.length) { delete this._callbacks[event]; } } return this; } trigger(event, ...args) { this.eventInProgress = { name: event, args }; const callbacks = this._callbacks?.[event]; if (callbacks) { for (const callback of callbacks.slice(0)) { if (typeof callback === "function") { callback(...args); } } } this.eventInProgress = null; if (event !== "all") { this.trigger("all", event, ...args); } return this; } removeEvent(event) { if (this._callbacks != null) { for (var name of event.split(" ")) { delete this._callbacks[name]; } } return this; }}
class Events {
on(event, callback) {
if (event.includes(" ")) {
for (var name of event.split(" ")) {
this.on(name, callback);
}
} else {
this._callbacks ||= {};
this._callbacks[event] ||= [];
this._callbacks[event].push(callback);
}
return this;
}
off(event, callback) {
let callbacks, index;
if (event.includes(" ")) {
for (var name of event.split(" ")) {
this.off(name, callback);
}
} else if (
(callbacks = this._callbacks?.[event]) &&
(index = callbacks.indexOf(callback)) >= 0
) {
callbacks.splice(index, 1);
if (!callbacks.length) {
delete this._callbacks[event];
}
}
return this;
}
trigger(event, ...args) {
this.eventInProgress = { name: event, args };
const callbacks = this._callbacks?.[event];
if (callbacks) {
for (const callback of callbacks.slice(0)) {
if (typeof callback === "function") {
callback(...args);
}
}
}
this.eventInProgress = null;
if (event !== "all") {
this.trigger("all", event, ...args);
}
return this;
}
removeEvent(event) {
if (this._callbacks != null) {
for (var name of event.split(" ")) {
delete this._callbacks[name];
}
}
return this;
}
}