69 lines
1.6 KiB
JavaScript
Executable File
69 lines
1.6 KiB
JavaScript
Executable File
"use strict";
|
|
|
|
// Import dependencies
|
|
import("/js/core.js").then(() => {
|
|
const dependencies = setInterval(() => {
|
|
if (typeof core === "function") {
|
|
clearInterval(dependencies);
|
|
clearTimeout(timeout);
|
|
initialization();
|
|
}
|
|
}, 10);
|
|
const timeout = setTimeout(() => clearInterval(dependencies), 5000);
|
|
|
|
function initialization() {
|
|
if (typeof core.damper === "undefined") {
|
|
// Not initialized
|
|
|
|
/**
|
|
* Damper
|
|
*
|
|
* @param {function} function Function to execute after damping
|
|
* @param {number} timeout Timer in milliseconds (ms)
|
|
* @param {number} force Argument number storing the status of enforcement execution (see @example)
|
|
*
|
|
* @example
|
|
* $a = damper(
|
|
* async (
|
|
* a, // 0
|
|
* b, // 1
|
|
* c, // 2
|
|
* force = false, // 3
|
|
* d // 4
|
|
* ) => {
|
|
* // Body of function
|
|
* },
|
|
* 500,
|
|
* 3, // 3 -> "force" argument
|
|
* );
|
|
*
|
|
* $a('for a', 'for b', 'for c', true, 'for d'); // Force execute is enabled
|
|
*
|
|
* @return {void}
|
|
*/
|
|
core.damper = (func, timeout = 300, force) => {
|
|
// Initializing of the timer
|
|
let timer;
|
|
|
|
return (...args) => {
|
|
// Deinitializing of the timer
|
|
clearTimeout(timer);
|
|
|
|
if (typeof force === "number" && args[force]) {
|
|
// Force execution (ignoring the timer)
|
|
|
|
func.apply(this, args);
|
|
} else {
|
|
// Normal execution
|
|
|
|
// Execute the handled function (entry into recursion)
|
|
timer = setTimeout(() => {
|
|
func.apply(this, args);
|
|
}, timeout);
|
|
}
|
|
};
|
|
};
|
|
}
|
|
}
|
|
});
|