UNPKG

bona

Version:

Super lightweight microframework focused on static websites and landing pages.

51 lines (46 loc) 1.31 kB
/** * @typedef {Object} BonaEventOptions * @property {boolean} [once] Trigger callback once. */ export default class Base { constructor() { this._events = {}; } /** * Attach an event handler function. * * @param {string} event Event name. * @param {function} callback Callback. * @param {BonaEventOptions} [options] Options. */ on(event, callback, options = {}) { if (!this._events[event]) this._events[event] = []; this._events[event].push({callback, options}); } /** * Remove an event handler. * * @param {string} event Event name. * @param {function} [callback] Callback. */ off(event, callback) { if (callback) { this._events[event] = this._events[event].filter((e) => e.callback !== callback); } else { this._events[event] = []; } } /** * Execute all handlers for the given event type. * * @param {string} event Event name. * @param params Extra parameters. */ trigger(event, ...params) { if (!this._events[event]) return; this._events[event].forEach((e) => { e.callback.call(this, ...params); if (e.options.once) this.off(event, e.callback); }); } }