document.addEventListener('DOMContentLoaded', () => { const tableBody = document.getElementById('dataTable'); const sentimentFilter = document.getElementById('sentimentAnalysis'); const pagination = document.getElementById('customPagination'); const itemsPerPage = 10; let currentPage = 1; let dataset = []; fetch('data.csv') .then(response => response.text()) .then(data => { const rows = data.trim().split('\n').slice(1); dataset = rows.map(row => { const [index, text, label] = row.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); return { index: parseInt(index), text: text.replace(/^"|"$/g, ''), label: label.replace(/^"|"$/g, '') }; }); function displayData(filter = 'all', page = 1) { tableBody.innerHTML = ''; const filteredData = filter === 'all' ? dataset : dataset.filter(item => item.label === filter); const start = (page - 1) * itemsPerPage; const end = start + itemsPerPage; const paginatedData = filteredData.slice(start, end); paginatedData.forEach(item => { const row = document.createElement('tr'); row.innerHTML = ` ${item.index} ${item.text} ${item.label} `; tableBody.appendChild(row); }); tableBody.style.opacity = '0'; setTimeout(() => { tableBody.style.opacity = '1'; tableBody.style.transition = 'opacity 0.3s ease'; }, 50); updatePagination(filteredData.length, page); } function updatePagination(totalItems, page) { pagination.innerHTML = ''; const totalPages = Math.ceil(totalItems / itemsPerPage); const maxPagesToShow = 5; let startPage, endPage; if (totalPages <= maxPagesToShow) { startPage = 1; endPage = totalPages; } else { const half = Math.floor(maxPagesToShow / 2); if (page <= half) { startPage = 1; endPage = maxPagesToShow; } else if (page + half >= totalPages) { startPage = totalPages - maxPagesToShow + 1; endPage = totalPages; } else { startPage = page - half; endPage = page + half; } } const prevLi = document.createElement('li'); prevLi.className = `page-item ${page === 1 ? 'disabled' : ''}`; prevLi.innerHTML = 'Previous'; prevLi.addEventListener('click', (e) => { e.preventDefault(); if (page > 1) displayData(sentimentFilter.value, page - 1); }); pagination.appendChild(prevLi); if (startPage > 1) { const firstLi = document.createElement('li'); firstLi.className = 'page-item'; firstLi.innerHTML = '1'; firstLi.addEventListener('click', (e) => { e.preventDefault(); displayData(sentimentFilter.value, 1); }); pagination.appendChild(firstLi); if (startPage > 2) { const dotsLi = document.createElement('li'); dotsLi.className = 'page-item disabled'; dotsLi.innerHTML = '...'; pagination.appendChild(dotsLi); } } for (let i = startPage; i <= endPage; i++) { const li = document.createElement('li'); li.className = `page-item ${i === page ? 'active' : ''}`; li.innerHTML = `${i}`; li.addEventListener('click', (e) => { e.preventDefault(); displayData(sentimentFilter.value, i); }); pagination.appendChild(li); } if (endPage < totalPages) { if (endPage < totalPages - 1) { const dotsLi = document.createElement('li'); dotsLi.className = 'page-item disabled'; dotsLi.innerHTML = '...'; pagination.appendChild(dotsLi); } const lastLi = document.createElement('li'); lastLi.className = 'page-item'; lastLi.innerHTML = `${totalPages}`; lastLi.addEventListener('click', (e) => { e.preventDefault(); displayData(sentimentFilter.value, totalPages); }); pagination.appendChild(lastLi); } const nextLi = document.createElement('li'); nextLi.className = `page-item ${page === totalPages ? 'disabled' : ''}`; nextLi.innerHTML = 'Next'; nextLi.addEventListener('click', (e) => { e.preventDefault(); if (page < totalPages) displayData(sentimentFilter.value, page + 1); }); pagination.appendChild(nextLi); } displayData(); sentimentFilter.addEventListener('change', () => { displayData(sentimentFilter.value, 1); }); }) .catch(error => { console.error('Error loading data:', error); tableBody.innerHTML = 'Error loading dataset.'; }); });