AnP/Public/ecma/Managers/EventsManager.ecma.js

73 lines
1.7 KiB
JavaScript

"use string";
import {Utils} from "../Utils/Utils.ecma.js";
/**
* @callback anp_events_manager_callback
* @param {...any} [parameters]
* @returns {any|null}
*/
/**
* @class
* @constructor
* @param {?(Object.<string, any|null>|Array.<any|null>)} [inputs = null]
* @returns {void}
* @access public
*/
export const EventsManager = (function(){
/**
* @constructs EventsManager
* @param {?(Object.<string, any|null>|Array.<any|null>)} [inputs = null]
* @returns {void}
* @access private
*/
const EventsManager = function(inputs = null){
/** @type {Array.<anp_events_manager_callback|null>} */
const events = [];
/** @type {boolean} */
this.autoexecute = Utils.get_value("autoexecute", inputs, false);
/**
* @param {...any} [parameters]
* @returns {Array.<any|null>}
* @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;
})();