Diff options
Diffstat (limited to '')
| -rw-r--r-- | assets/cgit.js | 56 |
1 file changed, 26 insertions, 30 deletions
diff --git a/assets/cgit.js b/assets/cgit.js index 90f06c0..f62eb06 100644 --- a/assets/cgit.js +++ b/assets/cgit.js @@ -22,19 +22,18 @@ var YEAR = 365 * DAY; var MONTH = YEAR / 12; // The five arrays are indexed together by the bucket an age falls into. -// The search in render_age can stop one place past the last class, so -// age_suffix and age_unit repeat their final entry. Each limit is twice the -// next unit up, matching the thresholds cgit_print_age compares against. +// Each limit is twice the next unit up, matching the thresholds +// cgit_print_age compares against, and an age past the last is in years. 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_unit = [ MINUTE, HOUR, DAY, WEEK, MONTH, YEAR, YEAR ]; -var age_limit = [ 2 * HOUR, 2 * DAY, 2 * WEEK, 2 * MONTH, 2 * YEAR, 2 * YEAR ]; +var age_suffix = [ "min.", "hours", "days", "weeks", "months", "years" ]; +var age_unit = [ MINUTE, HOUR, DAY, WEEK, MONTH, YEAR ]; +var age_limit = [ 2 * HOUR, 2 * DAY, 2 * WEEK, 2 * MONTH, 2 * YEAR ]; var update_delay = [ 10, 5 * MINUTE, 30 * MINUTE, DAY, DAY, DAY ]; function render_age(element, age) { var text, bucket; - for (bucket = 0; bucket < age_classes.length; bucket++) + for (bucket = 0; bucket < age_limit.length; bucket++) if (age < age_limit[bucket]) break; @@ -45,10 +44,6 @@ function render_age(element, age) { // for nothing. if (element.textContent != text) { element.textContent = text; - // An age past the last limit is still counted in years, but there - // is no class beyond age-years to put on it. - if (bucket == age_classes.length) - bucket--; if (element.className != age_classes[bucket]) element.className = age_classes[bucket]; } @@ -63,11 +58,11 @@ function render_age(element, age) { */ function update_ages() { var bucket, elements, i, age; - var delay = 24 * 3600; + var delay = DAY; var now = Math.round(new Date().getTime() / 1000); for (bucket = 0; bucket < age_classes.length; bucket++) { - elements = document.getElementsByClassName(age_classes[bucket]); + elements = document.querySelectorAll("." + age_classes[bucket]); if (elements.length && update_delay[bucket] < delay) delay = update_delay[bucket]; @@ -91,7 +86,7 @@ function refresh_ages() { window.setTimeout(refresh_ages, update_ages() * 1000); } -document.addEventListener("DOMContentLoaded", refresh_ages, false); +document.addEventListener("DOMContentLoaded", refresh_ages); // A site script that adds rows of its own can ask for one pass over them. window.cgit = window.cgit || {}; @@ -153,13 +148,14 @@ function place_bar() { table.appendChild(bar); // A browser only scrolls to a fragment that names a real id, which a range - // never does, so bring the start of one into view here. + // never does, so bring the start of one into view here. The scroll margin + // on the anchors centres it the way it centres a single line. if (match[2]) - first.scrollIntoView({ block: "center" }); + first.scrollIntoView(); } -document.addEventListener("DOMContentLoaded", place_bar, false); -window.addEventListener("hashchange", place_bar, false); +document.addEventListener("DOMContentLoaded", place_bar); +window.addEventListener("hashchange", place_bar); // A site script that moves the lines about can ask for the bar to be laid // again. @@ -176,18 +172,18 @@ window.cgit.highlightLines = place_bar; (function () { -function fade_tabs(list) { - var hidden = list.scrollWidth - list.clientWidth; - - // A fractional scroll position can stop a pixel short of either end. - list.classList.toggle("fade-start", list.scrollLeft > 1); - list.classList.toggle("fade-end", list.scrollLeft < hidden - 1); -} - function fit_tabs() { var list = document.querySelector("nav.tabs ul"); var active, list_box, tab_box; + function fade_tabs() { + var hidden = list.scrollWidth - list.clientWidth; + + // A fractional scroll position can stop a pixel short of either end. + list.classList.toggle("fade-start", list.scrollLeft > 1); + list.classList.toggle("fade-end", list.scrollLeft < hidden - 1); + } + if (!list) return; active = list.querySelector("a.active"); @@ -196,11 +192,11 @@ function fit_tabs() { tab_box = active.getBoundingClientRect(); list.scrollLeft += tab_box.left - list_box.left - (list_box.width - tab_box.width) / 2; } - fade_tabs(list); - list.addEventListener("scroll", function () { fade_tabs(list); }, { passive: true }); - window.addEventListener("resize", function () { fade_tabs(list); }, false); + fade_tabs(); + list.addEventListener("scroll", fade_tabs, { passive: true }); + window.addEventListener("resize", fade_tabs); } -document.addEventListener("DOMContentLoaded", fit_tabs, false); +document.addEventListener("DOMContentLoaded", fit_tabs); })(); |
