62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var dom_1 = require("./utils/dom");
|
|
var date_1 = require("./utils/date");
|
|
var register_1 = require("./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(dom_1.getTimerId(node));
|
|
var relativeDate = opts.relativeDate, minInterval = opts.minInterval;
|
|
// get diff seconds
|
|
var diff = date_1.diffSec(date, relativeDate);
|
|
// render
|
|
node.innerText = date_1.formatDiff(diff, localeFunc);
|
|
var tid = setTimeout(function () {
|
|
run(node, date, localeFunc, opts);
|
|
}, Math.min(Math.max(date_1.nextInterval(diff), minInterval || 1) * 1000, 0x7fffffff));
|
|
// there is no need to save node in object. Just save the key
|
|
TIMER_POOL[tid] = 0;
|
|
dom_1.setTimerId(node, tid);
|
|
}
|
|
/**
|
|
* cancel a timer or all timers
|
|
* @param node - node hosting the time string
|
|
*/
|
|
function cancel(node) {
|
|
// cancel one
|
|
if (node)
|
|
clear(dom_1.getTimerId(node));
|
|
// cancel all
|
|
// @ts-ignore
|
|
else
|
|
Object.keys(TIMER_POOL).forEach(clear);
|
|
}
|
|
exports.cancel = cancel;
|
|
/**
|
|
* render a dom realtime
|
|
* @param nodes
|
|
* @param locale
|
|
* @param opts
|
|
*/
|
|
function render(nodes, locale, opts) {
|
|
// by .length
|
|
// @ts-ignore
|
|
var nodeList = nodes.length ? nodes : [nodes];
|
|
nodeList.forEach(function (node) {
|
|
run(node, dom_1.getDateAttribute(node), register_1.getLocale(locale), opts || {});
|
|
});
|
|
return nodeList;
|
|
}
|
|
exports.render = render;
|
|
//# sourceMappingURL=realtime.js.map
|