73 lines
1.7 KiB
JavaScript
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;
|
|
})(); |