You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wanijo/resources/public/js/scripts.js

120 lines
3.7 KiB

6 years ago
document.addEventListener('DOMContentLoaded', function () {
function label(element, value) {
6 years ago
if (element.hasAttribute('value')) {
if (value !== undefined) {
6 years ago
element.setAttribute('value', value)
} else {
return element.getAttribute('value')
}
} else {
6 years ago
if (value !== undefined) {
6 years ago
element.textContent = value
} else {
return element.textContent
}
}
}
function countdownDeleteButton(event) {
6 years ago
const btn = event.target
const countdown = btn.getAttribute('data-countdown')
6 years ago
if (countdown !== '1') {
6 years ago
event.preventDefault()
btn.classList.add('__on-countdown')
const hasCountdown = countdown !== null
const newCountdown = hasCountdown ? countdown - 1 : 3
6 years ago
if (!hasCountdown) {
6 years ago
btn.setAttribute('data-label', label(btn))
}
label(btn, newCountdown)
btn.setAttribute('data-countdown', newCountdown)
setTimeout(countdownDeleteButton, 1000, event)
} else {
label(btn, btn.getAttribute('data-label'))
}
}
6 years ago
document.querySelectorAll('.delete-btn').forEach(function (btn) {
6 years ago
btn.addEventListener('click', countdownDeleteButton)
})
6 years ago
function dynamicTables() {
6 years ago
const pageSize = 25
6 years ago
6 years ago
const range = (x, y) =>
x > y ? [] : [x, ...range(x + 1, y)];
6 years ago
const visibleRows = page =>
6 years ago
range(page * pageSize, (page + 1) * pageSize - 1)
function toggleVisibilities(tbl, ixsToShow) {
const rows = [...tbl.tBodies[0].rows]
rows.forEach(function (row, ix) {
row.style.display = ixsToShow.includes(ix) ? 'table-row' : 'none';
})
}
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)
6 years ago
})
}
6 years ago
6 years ago
dynamicTables()
})
6 years ago
/*
$(document).ready(function() {
$('table').DataTable({
stateSave: true,
fixedHeader: true,
lengthMenu: [[25, 50, 100, -1], [25, 50, 100, "All"]],
stateSaveCallback: function(settings,data) {
localStorage.setItem('DataTables', JSON.stringify(data))
},
stateLoadCallback: function(settings) {
return JSON.parse(localStorage.getItem('DataTables'))
}
})
})
*/