lisn.js
Version:
Simply handle user gestures and actions. Includes widgets.
87 lines (79 loc) • 2.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.waitForDelay = exports.scheduleHighPriorityTask = exports.getDebouncedHandler = void 0;
var MH = _interopRequireWildcard(require("../globals/minification-helpers.cjs"));
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
/**
* @module Utils
*/
/**
* @category Tasks
*/
/**
* @category Tasks
*/
/**
* @category Tasks
*/
/* eslint-disable-next-line no-var */
/**
* Schedules a task with high priority to be executed as soon as possible.
*
* It uses {@link https://developer.mozilla.org/en-US/docs/Web/API/Scheduler/postTask | Scheduler:postTask}
* if available, otherwise falls back to
* {@link https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel | MessageChannel}.
*
* @category Tasks
*/
const scheduleHighPriorityTask = task => {
if (typeof scheduler !== "undefined") {
scheduler.postTask(task, {
priority: "user-blocking"
});
} else {
// Fallback to MessageChannel
const channel = new MessageChannel();
channel.port1.onmessage = () => {
channel.port1.close();
task();
};
channel.port2.postMessage("");
}
};
/**
* Returns a wrapper around the given handler that is debounced by the given
* debounce window.
*
* @category Tasks
*/
exports.scheduleHighPriorityTask = scheduleHighPriorityTask;
const getDebouncedHandler = (debounceWindow, handler) => {
if (!debounceWindow) {
return handler;
}
let timer = null;
let lastArgs;
return (...args) => {
lastArgs = args;
if (timer === null) {
timer = MH.setTimer(async () => {
await handler(...lastArgs);
timer = null;
}, debounceWindow);
}
};
};
/**
* Returns a promise that resolves at least the given number of delay (in
* milliseconds) later. Uses `setTimeout`.
*
* @category Tasks
*/
exports.getDebouncedHandler = getDebouncedHandler;
const waitForDelay = delay => MH.newPromise(resolve => {
MH.setTimer(resolve, delay);
});
exports.waitForDelay = waitForDelay;
//# sourceMappingURL=tasks.cjs.map