Skip to content
Snippets Groups Projects
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}">&laquo;</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}">&raquo;</a>`;
    }

    pagination += '</div>';

    return pagination;
}