bona
Version:
Super lightweight microframework focused on static websites and landing pages.
51 lines (46 loc) • 1.31 kB
JavaScript
/**
* @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);
});
}
}