88 lines
2.1 KiB
JavaScript
88 lines
2.1 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.<Array.<anp_events_manager_callback|null, number>>} */
|
|
const events = [],
|
|
/** @type {EventsManager} */
|
|
self = this;
|
|
|
|
/** @type {boolean} */
|
|
this.autoexecute = Utils.get_value("autoexecute", inputs, false);
|
|
this.times = Utils.get_value("times", inputs, 0);
|
|
|
|
/**
|
|
* @param {...any} [parameters]
|
|
* @returns {Array.<any|null>}
|
|
* @access public
|
|
*/
|
|
this.execute = (...parameters) => events.map((event, i) => {
|
|
|
|
let value = null;
|
|
|
|
if(event){
|
|
value = Utils.execute(event[0], ...parameters);
|
|
self.times && ++ event[1] >= self.times && (events[i] = null);
|
|
};
|
|
|
|
return value;
|
|
});
|
|
|
|
/**
|
|
* @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, 0];
|
|
|
|
self.autoexecute && self.execute();
|
|
|
|
return i;
|
|
};
|
|
|
|
/**
|
|
* @param {!number} i
|
|
* @returns {void}
|
|
* @access public
|
|
*/
|
|
this.remove = i => {
|
|
events[i] && (events[i] = null);
|
|
};
|
|
|
|
};
|
|
|
|
return EventsManager;
|
|
})(); |