UNPKG

strudel

Version:

A front-end framework for back-end powered web.

84 lines (73 loc) 1.66 kB
import { isFunction } from './helpers'; import handleError from './error'; /** * Event listeners * @type {{}} */ const events = {}; /** * @classdesc Simple Event Emitter implementation - global * @class */ class EventEmitter { static getEvents() { return events; } static removeAllListeners() { Object.keys(events).forEach((prop) => { delete events[prop]; }); } /** * Add event listener to the map * @param {string} label * @param {Function} callback */ $on(label, callback) { if (!events[label]) { events[label] = []; } events[label].push(callback); } /** * Remove event listener from registry * @param {string} label * @param {Function} callback * @returns {boolean} */ $off(label, callback) { const listeners = events[label]; if (listeners && listeners.length) { const index = listeners.reduce((i, listener, ind) => { return (isFunction(listener) && listener === callback) ? i = ind : i; }, -1); if (index > -1) { listeners.splice(index, 1); events[label] = listeners; return true; } } return false; } /** * Notifies listeners attached to event * @param {string} label * @param args * @returns {boolean} */ $emit(label, ...args) { const listeners = events[label]; if (listeners && listeners.length) { try { listeners.forEach((listener) => { listener(...args); }); } catch (e) { handleError(e, this.constructor, 'event handler'); } return true; } return false; } } export default EventEmitter;