diff options
| author | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-02 18:41:43 +0300 |
|---|---|---|
| committer | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-02 18:41:43 +0300 |
| commit | 6bf7c5ce92ff6237c0b17c332873805018812b40 (patch) | |
| tree | 18905aaed6af4be08f686f18aac1660f9606628d /cgit/cgit.js | |
| parent | c93af47179aad2d3fae3bc756d058f3ff1a14ccf (diff) | |
| parent | e94c3cd8bda6f9c2a6d0a613733c6eeddd1a406f (diff) | |
| download | Project-Tick-6bf7c5ce92ff6237c0b17c332873805018812b40.tar.gz Project-Tick-6bf7c5ce92ff6237c0b17c332873805018812b40.zip | |
Add 'cgit/' from commit 'e94c3cd8bda6f9c2a6d0a613733c6eeddd1a406f'
git-subtree-dir: cgit
git-subtree-mainline: c93af47179aad2d3fae3bc756d058f3ff1a14ccf
git-subtree-split: e94c3cd8bda6f9c2a6d0a613733c6eeddd1a406f
Diffstat (limited to 'cgit/cgit.js')
| -rw-r--r-- | cgit/cgit.js | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/cgit/cgit.js b/cgit/cgit.js new file mode 100644 index 0000000000..8e741646ff --- /dev/null +++ b/cgit/cgit.js @@ -0,0 +1,104 @@ +/* cgit.js: javacript functions for cgit + * + * Copyright (C) 2006-2018 cgit Development Team <cgit@lists.zx2c4.com> + * Copyright (C) 2026 Project Tick + * + * 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(); + + var treeFilter = document.getElementById("tree-filter"); + if (treeFilter) { + var table = treeFilter.parentNode.nextElementSibling; + var rows = table ? table.querySelectorAll("tr[data-name]") : []; + var count = document.getElementById("tree-filter-count"); + + function updateTreeFilter() { + var q = treeFilter.value.toLowerCase(); + var shown = 0; + var total = rows.length; + + for (var i = 0; i < rows.length; i++) { + var name = rows[i].getAttribute("data-name") || ""; + var path = rows[i].getAttribute("data-path") || ""; + var hay = (name + " " + path).toLowerCase(); + if (!q || hay.indexOf(q) !== -1) { + rows[i].style.display = ""; + shown++; + } else { + rows[i].style.display = "none"; + } + } + if (count) { + if (!q) { + count.textContent = ""; + } else { + count.textContent = shown + " / " + total; + } + } + } + + treeFilter.addEventListener("input", updateTreeFilter, false); + updateTreeFilter(); + } +}, false); + +})(); |
