-
Nigel Sahl authoredb9bafb26
pagination.js 1.47 KiB
function generatePagination(totalItems, itemsPerPage, currentPage, maxPages = 6) {
const totalPages = Math.ceil(totalItems / itemsPerPage);
let pagination = '<div class="pagination">';
const queryParams = new URLSearchParams(window.location.search);
queryParams.delete('page');
const queryString = queryParams.toString() ? `&${queryParams.toString()}` : '';
// Previous page
if (currentPage > 1) {
pagination += `<a href="?page=${currentPage - 1}${queryString}">«</a>`;
}
// Individual pages
if (totalPages > maxPages) {
let start = Math.max(1, currentPage - Math.floor(maxPages / 2));
let end = Math.min(totalPages, start + maxPages - 1);
start = Math.max(1, end - maxPages + 1);
if (start > 1) {
pagination += '<span>...</span>';
}
for (let i = start; i <= end; i++) {
pagination += `<a href="?page=${i}${queryString}" ${i == currentPage ? 'class="active"' : ''}>${i}</a>`;
}
if (end < totalPages) {
pagination += '<span>...</span>';
}
} else {
for (let i = 1; i <= totalPages; i++) {
pagination += `<a href="?page=${i}${queryString}" ${i === currentPage ? 'class="active"' : ''}>${i}</a>`;
}
}
// Next page
if (currentPage < totalPages) {
pagination += `<a href="?page=${currentPage + 1}${queryString}">»</a>`;
}
pagination += '</div>';
return pagination;
}