diff options
Diffstat (limited to 'public/sort.js')
-rw-r--r-- | public/sort.js | 101 |
1 files changed, 58 insertions, 43 deletions
diff --git a/public/sort.js b/public/sort.js index b98334d..ed243c2 100644 --- a/public/sort.js +++ b/public/sort.js @@ -1,67 +1,82 @@ -"use strict"; +"use strict" function sort_table_column(table, column) { - const minute = 60000; - const hour = 60 * minute; - const day = 24 * hour; - const week = 7 * day; + const minute = 60000 + const hour = 60 * minute + const day = 24 * hour + const week = 7 * day function is_date(s) { if (s.match(/^\d{4}-\d{2}-\d{2}$/)) - return true; + return true if (s.match(/^\d+ (minutes?|hours?|days|weeks) ago$/)) - return true; + return true if (s.match(/^(Yesterday|now)$/)) - return true; - return false; + return true + return false } function parse_date(s) { - if (s.match(/^\d{4}-\d{2}-\d{2}$/)) return new Date(s).valueOf(); - if (s === 'now') return Date.now(); - if (s === 'Yesterday') return Date.now() - day; - let [ _, value, unit ] = s.match(/^(\d+) (minutes?|hours?|days|weeks) ago$/); + if (s.match(/^\d{4}-\d{2}-\d{2}$/)) + return new Date(s).valueOf() + if (s === "now") + return Date.now() + if (s === "Yesterday") + return Date.now() - day + let [ _, value, unit ] = s.match(/^(\d+) (minutes?|hours?|days|weeks) ago$/) switch (unit) { - default: unit = 0; break; - case 'minute': case 'minutes': unit = minute; break; - case 'hours': case 'hours': unit = hour; break; - case 'days': unit = day; break; - case 'weeks': unit = week; break; + default: + unit = 0 + break + case "minute": + case "minutes": + unit = minute + break + case "hours": + case "hours": + unit = hour + break + case "days": + unit = day + break + case "weeks": + unit = week + break } - return Date.now() - Number(value) * unit; + return Date.now() - Number(value) * unit } - let tbody = table.querySelector("tbody"); - let rows = Array.from(tbody.querySelectorAll("tr")); + let tbody = table.querySelector("tbody") + let rows = Array.from(tbody.querySelectorAll("tr")) rows.sort((row_a, row_b) => { - let cell_a = row_a.querySelectorAll("td")[column].textContent; - let cell_b = row_b.querySelectorAll("td")[column].textContent; + let cell_a = row_a.querySelectorAll("td")[column].textContent + let cell_b = row_b.querySelectorAll("td")[column].textContent if (is_date(cell_a) && is_date(cell_b)) { - let age_a = parse_date(cell_a); - let age_b = parse_date(cell_b); - if (age_a > age_b) return -1; - if (age_a < age_b) return 1; - return 0; + let age_a = parse_date(cell_a) + let age_b = parse_date(cell_b) + if (age_a > age_b) return -1 + if (age_a < age_b) return 1 + return 0 } else if (cell_a.match(/^\d+$/) && cell_b.match(/^\d+$/)) { - cell_a = Number(cell_a); - cell_b = Number(cell_b); - if (cell_a > cell_b) return -1; - if (cell_a < cell_b) return 1; - return 0; + cell_a = Number(cell_a) + cell_b = Number(cell_b) + if (cell_a > cell_b) return -1 + if (cell_a < cell_b) return 1 + return 0 } else { - if (cell_a > cell_b) return 1; - if (cell_a < cell_b) return -1; - return 0; + if (cell_a > cell_b) return 1 + if (cell_a < cell_b) return -1 + return 0 } - }); - rows.forEach(row => tbody.appendChild(row)); + }) + rows.forEach((row) => tbody.appendChild(row)) } -document.querySelectorAll("table.sort").forEach(table => { +document.querySelectorAll("table.sort").forEach((table) => { table.querySelectorAll("th").forEach((th, column) => { if (th.textContent !== "") { - th.addEventListener("click", evt => sort_table_column(table, column)); - th.style.cursor = "pointer"; + th.addEventListener("click", (evt) => sort_table_column(table, column)) + th.style.cursor = "pointer" } - }); -}); + }) +}) |