var reasonFlags = {};
let currentPage = 1;
let itemsPerPage = 100;
let data;
function renderTable(data, reasonFlags) {
const tableBody = document.querySelector('#bansTableBody');
tableBody.innerHTML = '';
const start = (currentPage - 1) * itemsPerPage;
const end = start + itemsPerPage;
const pageData = data.slice(start, end);
pageData.forEach(ban => {
const row = document.createElement('tr');
const banTimestamp = new Date(ban.banTimestamp).toLocaleString();
const expiresTimestamp = ban.expiresTimestamp ? new Date(ban.expiresTimestamp).toLocaleString() : 'Never';
const reasonsFlagNames = getSetFlags(ban.reasonsFlag, reasonFlags).join(', ');
row.innerHTML = `
${ban.id} |
${ban.robloxId || 'N/A'} |
${ban.discordId || 'N/A'} |
${ban.robloxUsername || 'N/A'} |
${ban.discordUsername || 'N/A'} |
${ban.reasonShort || 'N/A'} |
${ban.reasonLong || 'N/A'} |
${reasonsFlagNames} |
${ban.moderator || 'N/A'} |
${banTimestamp} |
${expiresTimestamp}
|
Edit
|
`;
tableBody.appendChild(row);
});
}
const itemsToShowDropdown = document.querySelector('#itemsToShowDropdown');
const itemsOptions = [5, 10, 20, 30, 40, 50, 100, 200, 500, 1000];
itemsOptions.forEach(option => {
const optionElement = document.createElement('option');
optionElement.value = option;
optionElement.textContent = option;
itemsToShowDropdown.appendChild(optionElement);
});
itemsToShowDropdown.addEventListener('change', (e) => {
const selectedValue = e.target.value;
itemsPerPage = parseInt(selectedValue, 10) || 5;
currentPage = 1;
renderTable(data, reasonFlags);
setupPagination(data);
console.log('Items per page:', itemsPerPage);
});
function setupPagination(data) {
const pagination = document.querySelector('#pagination');
pagination.innerHTML = '';
const totalPages = Math.ceil(data.length / itemsPerPage);
const ul = document.createElement('ul');
ul.classList.add('pagination');
const createPageItem = (page, text = page) => {
const li = document.createElement('li');
li.classList.add('page-item');
if (page === currentPage) {
li.classList.add('active');
}
const a = document.createElement('a');
a.classList.add('page-link');
a.textContent = text;
a.href = '#';
a.addEventListener('click', (e) => {
e.preventDefault();
currentPage = page;
renderTable(data, reasonFlags);
setupPagination(data);
});
li.appendChild(a);
return li;
};
ul.appendChild(createPageItem(1, 'First'));
ul.appendChild(createPageItem(Math.max(1, currentPage - 1), 'Prev'));
for (let i = Math.max(1, currentPage - 2); i <= Math.min(totalPages, currentPage + 2); i++) {
ul.appendChild(createPageItem(i));
}
ul.appendChild(createPageItem(Math.min(totalPages, currentPage + 1), 'Next'));
ul.appendChild(createPageItem(totalPages, 'Last'));
pagination.appendChild(ul);
}
fetch('/api/v1/info')
.then(response => response.json())
.then(data => {
reasonFlags = data.reasonFlags;
console.log('Reason Flags:', reasonFlags);
fetch('/admin/api/bans')
.then(response => response.json())
.then(data => {
renderTable(data, reasonFlags);
setupPagination(data);
})
.catch(error => console.error('Error fetching ban data:', error));
})
.catch(error => console.error('Error fetching reason flags:', error));