basic pagination

integration-tests
Josha von Gizycki 6 years ago
parent b546d68a2c
commit d60f7863db

@ -221,23 +221,22 @@ table {
margin-top: 1rem; margin-top: 1rem;
margin-bottom: 1rem; margin-bottom: 1rem;
td, th {
border-bottom: @border-stack;
padding: @text-padding-v * 2 @text-padding-h / 2h;
}
thead { thead {
position: sticky; position: sticky;
top: 0; top: 0;
background-color: @body-background-color; background-color: @body-background-color;
th { th {
padding: @text-padding-v @text-padding-h; padding: @text-padding-v @text-padding-h @text-padding-v + .3rem @text-padding-v;
border-bottom: @accent-border-width / 5 solid @ci-color;
} }
} }
tbody { tbody {
td {
border-bottom: @border-stack;
padding: @text-padding-v * 2 @text-padding-h / 2h;
}
input[type=submit] { input[type=submit] {
margin-bottom: 0; margin-bottom: 0;
} }

@ -1,13 +1,13 @@
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function () {
function label(element, value) { function label(element, value) {
if(element.hasAttribute('value')) { if (element.hasAttribute('value')) {
if(value !== undefined) { if (value !== undefined) {
element.setAttribute('value', value) element.setAttribute('value', value)
} else { } else {
return element.getAttribute('value') return element.getAttribute('value')
} }
} else { } else {
if(value !== undefined) { if (value !== undefined) {
element.textContent = value element.textContent = value
} else { } else {
return element.textContent return element.textContent
@ -19,14 +19,14 @@ document.addEventListener('DOMContentLoaded', function() {
const btn = event.target const btn = event.target
const countdown = btn.getAttribute('data-countdown') const countdown = btn.getAttribute('data-countdown')
if(countdown !== '1') { if (countdown !== '1') {
event.preventDefault() event.preventDefault()
btn.classList.add('__on-countdown') btn.classList.add('__on-countdown')
const hasCountdown = countdown !== null const hasCountdown = countdown !== null
const newCountdown = hasCountdown ? countdown - 1 : 3 const newCountdown = hasCountdown ? countdown - 1 : 3
if(!hasCountdown) { if (!hasCountdown) {
btn.setAttribute('data-label', label(btn)) btn.setAttribute('data-label', label(btn))
} }
@ -38,29 +38,67 @@ document.addEventListener('DOMContentLoaded', function() {
} }
} }
document.querySelectorAll('.delete-btn').forEach(function(btn) { document.querySelectorAll('.delete-btn').forEach(function (btn) {
btn.addEventListener('click', countdownDeleteButton) btn.addEventListener('click', countdownDeleteButton)
}) })
function dynamicTables() { function dynamicTables() {
const range = (x,y) => const pageSize = 25
x > y ? [] : [x, ...range(x + 1, y)];
const pageSize = 50 const range = (x, y) =>
const colsFromThead = thead => x > y ? [] : [x, ...range(x + 1, y)];
[...thead.children[0].children].map(th => th.innerText)
const visibleRows = page => const visibleRows = page =>
range(page * pageSize, (page + 1) * pageSize - 1) range(page * pageSize, (page + 1) * pageSize - 1)
document.querySelectorAll('table').forEach(function(tbl) { function toggleVisibilities(tbl, ixsToShow) {
const thead = tbl.tHead const rows = [...tbl.tBodies[0].rows]
const tbody = tbl.tBodies[0] rows.forEach(function (row, ix) {
const cols = colsFromThead(thead) row.style.display = ixsToShow.includes(ix) ? 'table-row' : 'none';
const rows = [...tbl.rows] })
let page = 0 }
console.debug(visibleRows(1))
function prevClick(tbl) {
const page = tbl.getAttribute('data-page') * 1
tbl.setAttribute('data-page', page - 1)
toggleVisibilities(tbl, visibleRows(page - 1))
}
function nextClick(tbl) {
const page = tbl.getAttribute('data-page') * 1
tbl.setAttribute('data-page', page + 1)
toggleVisibilities(tbl, visibleRows(page + 1))
}
function addToolbar(tbl) {
const toolbar = document.createElement('section')
toolbar.classList.add('tbl-toolbar')
const prevBtn = document.createElement('button')
prevBtn.classList.add('prev')
prevBtn.innerText = 'Prev'
prevBtn.addEventListener('click', function () {
prevClick(tbl)
})
toolbar.insertAdjacentElement('beforeend', prevBtn)
const nextBtn = document.createElement('button')
nextBtn.classList.add('next')
nextBtn.innerText = 'Next'
nextBtn.addEventListener('click', function () {
nextClick(tbl)
})
toolbar.insertAdjacentElement('beforeend', nextBtn)
tbl.insertAdjacentElement('afterend', toolbar)
}
document.querySelectorAll('table').forEach(function (tbl) {
toggleVisibilities(tbl, visibleRows(0))
tbl.setAttribute('data-page', 0)
addToolbar(tbl)
}) })
} }
dynamicTables() dynamicTables()
}) })

Loading…
Cancel
Save