Spaces:
Running
Running
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 = ` | |
<td>${item.index}</td> | |
<td>${item.text}</td> | |
<td>${item.label}</td> | |
`; | |
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 = '<a class="page-link" href="#">Previous</a>'; | |
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 = '<a class="page-link" href="#">1</a>'; | |
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 = '<a class="page-link" href="#">...</a>'; | |
pagination.appendChild(dotsLi); | |
} | |
} | |
for (let i = startPage; i <= endPage; i++) { | |
const li = document.createElement('li'); | |
li.className = `page-item ${i === page ? 'active' : ''}`; | |
li.innerHTML = `<a class="page-link" href="#">${i}</a>`; | |
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 = '<a class="page-link" href="#">...</a>'; | |
pagination.appendChild(dotsLi); | |
} | |
const lastLi = document.createElement('li'); | |
lastLi.className = 'page-item'; | |
lastLi.innerHTML = `<a class="page-link" href="#">${totalPages}</a>`; | |
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 = '<a class="page-link" href="#">Next</a>'; | |
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 = '<tr><td colspan="3">Error loading dataset.</td></tr>'; | |
}); | |
}); |