"use string"; import {Utils} from "../Utils/Utils.ecma.js"; /** * @callback anp_events_manager_callback * @param {...any} [parameters] * @returns {any|null} */ /** * @class * @constructor * @param {?(Object.|Array.)} [inputs = null] * @returns {void} * @access public */ export const EventsManager = (function(){ /** * @constructs EventsManager * @param {?(Object.|Array.)} [inputs = null] * @returns {void} * @access private */ const EventsManager = function(inputs = null){ /** @type {Array.} */ const events = []; /** @type {boolean} */ this.autoexecute = Utils.get_value("autoexecute", inputs, false); /** * @param {...any} [parameters] * @returns {Array.} * @access public */ this.execute = (...parameters) => events.map(callback => callback ? callback(...parameters) : null); /** * @param {!anp_events_manager_callback} callback * @returns {number} * @access public */ this.add = callback => { /** @type {number} */ let i = -1; /** @type {number} */ const l = events.length; while(++ i < l) if(!events[i]) break; events[i] = callback; return i; }; /** * @param {!number} i * @returns {void} * @access public */ this.remove = i => { events[i] && (events[i] = null); }; }; return EventsManager; })();