]> gitweb.ps.run Git - ps-cgit/blobdiff - cgit.js
git: update to v2.46.0
[ps-cgit] / cgit.js
diff --git a/cgit.js b/cgit.js
index b35e0bca0fb76ed1f688e51191b0166a4df64947..df3ad4ec97531bbb32a12c93025b69953867af79 100644 (file)
--- a/cgit.js
+++ b/cgit.js
@@ -5,3 +5,64 @@
  * Licensed under GNU General Public License v2
  *   (see COPYING for full license text)
  */
+
+(function () {
+
+/* This follows the logic and suffixes used in ui-shared.c */
+
+var age_classes = [ "age-mins", "age-hours", "age-days",    "age-weeks",    "age-months",    "age-years" ];
+var age_suffix =  [ "min.",     "hours",     "days",        "weeks",        "months",        "years",         "years" ];
+var age_next =    [ 60,         3600,        24 * 3600,     7 * 24 * 3600,  30 * 24 * 3600,  365 * 24 * 3600, 365 * 24 * 3600 ];
+var age_limit =   [ 7200,       24 * 7200,   7 * 24 * 7200, 30 * 24 * 7200, 365 * 25 * 7200, 365 * 25 * 7200 ];
+var update_next = [ 10,         5 * 60,      1800,          24 * 3600,      24 * 3600,       24 * 3600,       24 * 3600 ];
+
+function render_age(e, age) {
+       var t, n;
+
+       for (n = 0; n < age_classes.length; n++)
+               if (age < age_limit[n])
+                       break;
+
+       t = Math.round(age / age_next[n]) + " " + age_suffix[n];
+
+       if (e.textContent != t) {
+               e.textContent = t;
+               if (n == age_classes.length)
+                       n--;
+               if (e.className != age_classes[n])
+                       e.className = age_classes[n];
+       }
+}
+
+function aging() {
+       var n, next = 24 * 3600,
+           now_ut = Math.round((new Date().getTime() / 1000));
+
+       for (n = 0; n < age_classes.length; n++) {
+               var m, elems = document.getElementsByClassName(age_classes[n]);
+
+               if (elems.length && update_next[n] < next)
+                       next = update_next[n];
+
+               for (m = 0; m < elems.length; m++) {
+                       var age = now_ut - elems[m].getAttribute("data-ut");
+
+                       render_age(elems[m], age);
+               }
+       }
+
+       /*
+        * We only need to come back when the age might have changed.
+        * Eg, if everything is counted in hours already, once per
+        * 5 minutes is accurate enough.
+        */
+
+       window.setTimeout(aging, next * 1000);
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+       /* we can do the aging on DOM content load since no layout dependency */
+       aging();
+}, false);
+
+})();