task 6: HTML export

This commit is contained in:
2024-05-08 14:45:20 +02:00
parent a93598d8f6
commit aee3052ad7
11 changed files with 483 additions and 9 deletions

58
res/template/base.js Normal file
View File

@@ -0,0 +1,58 @@
function initTable(table) {
table.tHead.querySelectorAll("th").forEach((header, i) => {
header.addEventListener("click", () => {
toggleSort(table, header, i)
})
})
}
function toggleSort(table, header, colI) {
if (header.classList.contains("sort-asc")) {
header.classList.remove("sort-asc")
header.classList.add("sort-desc")
doSort(table, colI, true)
} else if (header.classList.contains("sort-desc")) {
header.classList.remove("sort-desc")
header.classList.add("sort-asc")
doSort(table, colI, false)
} else {
table.tHead.querySelectorAll("th.sort-asc,th.sort-desc").forEach(th => {
th.classList.remove("sort-asc")
th.classList.remove("sort-desc")
})
header.classList.add("sort-asc")
doSort(table, colI, false)
}
}
function doSort(table, colI, desc = false) {
let swapped = true
while (swapped) {
let rows = Array.from(table.rows)
swapped = false
let rowA, rowB
for (let i=1; i<rows.length-1; i++) {
rowA = rows[i]
rowB = rows[i+1]
if (desc == compareRows(rowA, rowB, colI)) {
swapped = true
break
}
}
if (swapped) {
rowA.parentNode.insertBefore(rowB, rowA)
}
}
}
function compareRows(rowA, rowB, colI) {
let valA = rowA.querySelectorAll("td")[colI].innerText
let valB = rowB.querySelectorAll("td")[colI].innerText
if (!Number.isNaN(+valA) && !Number.isNaN(+valB)) {
valA = +valA
valB = +valB
}
return valB > valA
}