UNPKG

1.76 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var dom_1 = require("./utils/dom");
4var date_1 = require("./utils/date");
5var register_1 = require("./register");
6// all realtime timer
7var TIMER_POOL = {};
8/**
9 * clear a timer from pool
10 * @param tid
11 */
12var clear = function (tid) {
13 clearTimeout(tid);
14 delete TIMER_POOL[tid];
15};
16// run with timer(setTimeout)
17function run(node, date, localeFunc, opts) {
18 // clear the node's exist timer
19 clear(dom_1.getTimerId(node));
20 var relativeDate = opts.relativeDate, minInterval = opts.minInterval;
21 // get diff seconds
22 var diff = date_1.diffSec(date, relativeDate);
23 // render
24 node.innerText = date_1.formatDiff(diff, localeFunc);
25 var tid = setTimeout(function () {
26 run(node, date, localeFunc, opts);
27 }, Math.min(Math.max(date_1.nextInterval(diff), minInterval || 1) * 1000, 0x7fffffff));
28 // there is no need to save node in object. Just save the key
29 TIMER_POOL[tid] = 0;
30 dom_1.setTimerId(node, tid);
31}
32/**
33 * cancel a timer or all timers
34 * @param node - node hosting the time string
35 */
36function cancel(node) {
37 // cancel one
38 if (node)
39 clear(dom_1.getTimerId(node));
40 // cancel all
41 // @ts-ignore
42 else
43 Object.keys(TIMER_POOL).forEach(clear);
44}
45exports.cancel = cancel;
46/**
47 * render a dom realtime
48 * @param nodes
49 * @param locale
50 * @param opts
51 */
52function render(nodes, locale, opts) {
53 // by .length
54 // @ts-ignore
55 var nodeList = nodes.length ? nodes : [nodes];
56 nodeList.forEach(function (node) {
57 run(node, dom_1.getDateAttribute(node), register_1.getLocale(locale), opts || {});
58 });
59 return nodeList;
60}
61exports.render = render;
62//# sourceMappingURL=realtime.js.map
\No newline at end of file