event_event_handler_layer.js
/**
* @module EventHandlerLayer
* @fileoverview Contains EventHandlerLayer class.
*/
/**
* Generalized events manager for use in App, Actor, etc.
* @class
*/
class EventHandlerLayer {
/**
* Create a new EventHandler.
* @constructor
*/
constructor(parent, prefix = "") {
this._parent = parent;
this._parent.addChild(this);
this._prefix = prefix;
this._children = new Set();
}
getRoot() {
if (this._parent instanceof EventHandlerLayer)
return this._parent.getRoot();
return this._parent;
}
addChild(child) {
this._children.add(child);
}
// Adding
/**
* Register a new event listener.
* @param {string} event Key for the event to listen for
* @param {function} func Function to run upon firing
*/
on(event, func = () => {}) {
this._parent.on(this._prefix + event, func);
}
// Execution
/**
* Trigger an event.
* @param {string} event Key of event to trigger.
* @param args Arguments to pass into listener function
*/
do(event, ...args) {
this._parent.do(this._prefix + event, ...args);
}
// Removal
/**
* Clear all registered events.
*/
clear() {
this._parent.clearPrefix(this._prefix);
}
/**
* Remove a registered event.
* @param {string} event Event ID/type
* @param {number} i Index of script (ignore to delete all for event type)
*/
remove(event, i = -1) {
this._parent.remove(this._prefix + event, i);
}
// Iteration
/**
* Run a function for each listing.
* @param {function} func Function to run
*/
forEach(func = (array, id) => {}) {
this._parent.forEach(func);
}
}
export default EventHandlerLayer;