UNPKG

sweetalert2

Version:

A beautiful, responsive, customizable and accessible (WAI-ARIA) replacement for JavaScript's popup boxes, supported fork of sweetalert

93 lines (84 loc) 2.2 kB
// Source: https://gist.github.com/mudge/5830382?permalink_comment_id=2691957#gistcomment-2691957 export default class EventEmitter { constructor() { /** @type {Events} */ this.events = {} } /** * @param {string} eventName * @returns {EventHandlers} */ _getHandlersByEventName(eventName) { if (typeof this.events[eventName] === 'undefined') { // not Set because we need to keep the FIFO order // https://github.com/sweetalert2/sweetalert2/pull/2763#discussion_r1748990334 this.events[eventName] = [] } return this.events[eventName] } /** * @param {string} eventName * @param {EventHandler} eventHandler */ on(eventName, eventHandler) { const currentHandlers = this._getHandlersByEventName(eventName) if (!currentHandlers.includes(eventHandler)) { currentHandlers.push(eventHandler) } } /** * @param {string} eventName * @param {EventHandler} eventHandler */ once(eventName, eventHandler) { /** * @param {Array} args */ const onceFn = (...args) => { this.removeListener(eventName, onceFn) eventHandler.apply(this, args) } this.on(eventName, onceFn) } /** * @param {string} eventName * @param {Array} args */ emit(eventName, ...args) { this._getHandlersByEventName(eventName).forEach( /** * @param {EventHandler} eventHandler */ (eventHandler) => { try { eventHandler.apply(this, args) } catch (error) { console.error(error) } } ) } /** * @param {string} eventName * @param {EventHandler} eventHandler */ removeListener(eventName, eventHandler) { const currentHandlers = this._getHandlersByEventName(eventName) const index = currentHandlers.indexOf(eventHandler) if (index > -1) { currentHandlers.splice(index, 1) } } /** * @param {string} eventName */ removeAllListeners(eventName) { if (this.events[eventName] !== undefined) { // https://github.com/sweetalert2/sweetalert2/pull/2763#discussion_r1749239222 this.events[eventName].length = 0 } } reset() { this.events = {} } }