Files
JiboViteDocs/node_modules/timeago.js/esm/realtime.js
Your Name 38652eb9b5 Initalize
2026-05-03 12:12:57 -04:00

58 lines
1.6 KiB
JavaScript

import { setTimerId, getTimerId, getDateAttribute } from './utils/dom';
import { formatDiff, diffSec, nextInterval } from './utils/date';
import { getLocale } from './register';
// all realtime timer
var TIMER_POOL = {};
/**
* clear a timer from pool
* @param tid
*/
var clear = function (tid) {
clearTimeout(tid);
delete TIMER_POOL[tid];
};
// run with timer(setTimeout)
function run(node, date, localeFunc, opts) {
// clear the node's exist timer
clear(getTimerId(node));
var relativeDate = opts.relativeDate, minInterval = opts.minInterval;
// get diff seconds
var diff = diffSec(date, relativeDate);
// render
node.innerText = formatDiff(diff, localeFunc);
var tid = setTimeout(function () {
run(node, date, localeFunc, opts);
}, Math.min(Math.max(nextInterval(diff), minInterval || 1) * 1000, 0x7fffffff));
// there is no need to save node in object. Just save the key
TIMER_POOL[tid] = 0;
setTimerId(node, tid);
}
/**
* cancel a timer or all timers
* @param node - node hosting the time string
*/
export function cancel(node) {
// cancel one
if (node)
clear(getTimerId(node));
// cancel all
// @ts-ignore
else
Object.keys(TIMER_POOL).forEach(clear);
}
/**
* render a dom realtime
* @param nodes
* @param locale
* @param opts
*/
export function render(nodes, locale, opts) {
// by .length
// @ts-ignore
var nodeList = nodes.length ? nodes : [nodes];
nodeList.forEach(function (node) {
run(node, getDateAttribute(node), getLocale(locale), opts || {});
});
return nodeList;
}
//# sourceMappingURL=realtime.js.map