aboutsummaryrefslogtreecommitdiffstats
path: root/cgit.js
diff options
context:
space:
mode:
Diffstat (limited to 'cgit.js')
-rw-r--r--cgit.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/cgit.js b/cgit.js
index b35e0bc..df3ad4e 100644
--- a/cgit.js
+++ b/cgit.js
@@ -5,3 +5,64 @@
5 * Licensed under GNU General Public License v2 5 * Licensed under GNU General Public License v2
6 * (see COPYING for full license text) 6 * (see COPYING for full license text)
7 */ 7 */
8
9(function () {
10
11/* This follows the logic and suffixes used in ui-shared.c */
12
13var age_classes = [ "age-mins", "age-hours", "age-days", "age-weeks", "age-months", "age-years" ];
14var age_suffix = [ "min.", "hours", "days", "weeks", "months", "years", "years" ];
15var age_next = [ 60, 3600, 24 * 3600, 7 * 24 * 3600, 30 * 24 * 3600, 365 * 24 * 3600, 365 * 24 * 3600 ];
16var age_limit = [ 7200, 24 * 7200, 7 * 24 * 7200, 30 * 24 * 7200, 365 * 25 * 7200, 365 * 25 * 7200 ];
17var update_next = [ 10, 5 * 60, 1800, 24 * 3600, 24 * 3600, 24 * 3600, 24 * 3600 ];
18
19function render_age(e, age) {
20 var t, n;
21
22 for (n = 0; n < age_classes.length; n++)
23 if (age < age_limit[n])
24 break;
25
26 t = Math.round(age / age_next[n]) + " " + age_suffix[n];
27
28 if (e.textContent != t) {
29 e.textContent = t;
30 if (n == age_classes.length)
31 n--;
32 if (e.className != age_classes[n])
33 e.className = age_classes[n];
34 }
35}
36
37function aging() {
38 var n, next = 24 * 3600,
39 now_ut = Math.round((new Date().getTime() / 1000));
40
41 for (n = 0; n < age_classes.length; n++) {
42 var m, elems = document.getElementsByClassName(age_classes[n]);
43
44 if (elems.length && update_next[n] < next)
45 next = update_next[n];
46
47 for (m = 0; m < elems.length; m++) {
48 var age = now_ut - elems[m].getAttribute("data-ut");
49
50 render_age(elems[m], age);
51 }
52 }
53
54 /*
55 * We only need to come back when the age might have changed.
56 * Eg, if everything is counted in hours already, once per
57 * 5 minutes is accurate enough.
58 */
59
60 window.setTimeout(aging, next * 1000);
61}
62
63document.addEventListener("DOMContentLoaded", function() {
64 /* we can do the aging on DOM content load since no layout dependency */
65 aging();
66}, false);
67
68})();