File size: 6,344 Bytes
3e1f389
 
e436ba0
 
f3b513c
 
 
3e1f389
 
 
 
218ec82
f3b513c
3e1f389
 
 
 
f3b513c
3e1f389
f3b513c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e436ba0
 
 
 
 
 
f3b513c
 
 
 
 
 
e436ba0
 
f3b513c
e436ba0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f3b513c
 
 
 
 
 
 
 
 
 
e436ba0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f3b513c
 
 
 
 
 
 
 
 
 
e436ba0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f3b513c
 
 
 
 
 
3e1f389
f3b513c
3e1f389
 
 
 
 
f3b513c
3e1f389
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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>';
        });
});