58 lines · 1.3 KB · JavaScript
RawDownload
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;  }}