127 lines
4.5 KiB
JavaScript
127 lines
4.5 KiB
JavaScript
$(document).ready(async function() {
|
|
initSubscriptionTable();
|
|
initFiltersTable();
|
|
initContentTable();
|
|
|
|
$("#subscriptionsTab").click();
|
|
|
|
// Bind table select checkboxes
|
|
bindTableCheckboxes("#subTable", subTable, "#deleteSelectedSubscriptionsBtn");
|
|
bindTableCheckboxes("#filtersTable", filtersTable, "#deleteSelectedFiltersBtn");
|
|
bindTableCheckboxes("#contentTable", contentTable, "#deleteSelectedContentBtn")
|
|
|
|
// Bind pagination - subTable
|
|
await bindTablePagination("#subPagination", loadSubscriptions);
|
|
await bindTablePaginationResizer("#subTablePageSize", loadSubscriptions);
|
|
|
|
// Bind pagination filtersTable
|
|
await bindTablePagination("#filtersPagination", loadFilters);
|
|
await bindTablePaginationResizer("#filtersTablePageSize", loadFilters);
|
|
|
|
// Bind pagination - contentTable
|
|
await bindTablePagination("#contentPagination", loadContent);
|
|
await bindTablePaginationResizer("#contentTablePageSize", loadContent);
|
|
|
|
|
|
await loadSavedGuilds();
|
|
await loadServerOptions();
|
|
});
|
|
|
|
$('#serverTabs [data-bs-toggle="tab"]').on("show.bs.tab", function(event) {
|
|
const activeTab = $(event.target);
|
|
$(".tab-pane-buttons .tab-pane-buttons-item").hide();
|
|
$(`.tab-pane-buttons .tab-pane-buttons-item[data-tab="${activeTab.attr("id")}"]`).show();
|
|
});
|
|
|
|
$(document).on("selectedServerChange", function() {
|
|
$("#subscriptionsTab").click();
|
|
});
|
|
|
|
function bindTableCheckboxes(tableSelector, tableObject, deleteButtonSelector) {
|
|
// Select a row via checkbox
|
|
$(tableSelector).on("change", "tbody tr .table-select-row", function() {
|
|
|
|
var selected = $(this).prop("checked");
|
|
rowIndex = $(this).closest("tr").index();
|
|
row = tableObject.row(rowIndex);
|
|
|
|
if (selected) row.select();
|
|
else row.deselect();
|
|
|
|
determineSelectAllState(tableSelector, tableObject, deleteButtonSelector);
|
|
});
|
|
|
|
// Select all rows checkbox
|
|
$(tableSelector).on("change", "thead .table-select-all", function() {
|
|
var selected = $(this).prop("checked");
|
|
$(`${tableSelector} tbody tr`).each(function(rowIndex) {
|
|
var row = tableObject.row(rowIndex);
|
|
|
|
if (selected) row.select();
|
|
else row.deselect();
|
|
|
|
$(this).find('.table-select-row').prop("checked", selected);
|
|
});
|
|
|
|
determineSelectAllState(tableSelector, tableObject, deleteButtonSelector);
|
|
});
|
|
}
|
|
|
|
function determineSelectAllState(tableSelector, tableObject, deleteButtonSelector) {
|
|
var selectedRowsCount = tableObject.rows(".selected").data().toArray().length;
|
|
allRowsCount = tableObject.rows().data().toArray().length;
|
|
|
|
selectAllCheckbox = $(`${tableSelector} thead .table-select-all`);
|
|
|
|
checked = selectedRowsCount === allRowsCount;
|
|
indeterminate = !checked && selectedRowsCount > 0;
|
|
|
|
selectAllCheckbox.prop("checked", checked);
|
|
selectAllCheckbox.prop("indeterminate", indeterminate);
|
|
|
|
$(deleteButtonSelector).prop("disabled", !(checked || indeterminate) || !(allRowsCount > 0));
|
|
}
|
|
|
|
function formatDate(date) {
|
|
|
|
// Array of weekday names
|
|
const weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
|
|
|
|
// Array of month names
|
|
const months = [
|
|
"January", "February", "March", "April", "May", "June",
|
|
"July", "August", "September", "October", "November", "December"
|
|
];
|
|
|
|
// Get individual components
|
|
let hours = String(date.getHours()).padStart(2, '0');
|
|
let minutes = String(date.getMinutes()).padStart(2, '0');
|
|
let seconds = String(date.getSeconds()).padStart(2, '0');
|
|
let dayOfWeek = weekdays[date.getDay()];
|
|
let dayOfMonth = date.getDate();
|
|
let month = months[date.getMonth()];
|
|
let year = date.getFullYear();
|
|
|
|
// Format day with ordinal suffix
|
|
let dayOfMonthSuffix;
|
|
if (dayOfMonth % 10 === 1 && dayOfMonth !== 11) {
|
|
dayOfMonthSuffix = dayOfMonth + "st";
|
|
} else if (dayOfMonth % 10 === 2 && dayOfMonth !== 12) {
|
|
dayOfMonthSuffix = dayOfMonth + "nd";
|
|
} else if (dayOfMonth % 10 === 3 && dayOfMonth !== 13) {
|
|
dayOfMonthSuffix = dayOfMonth + "rd";
|
|
} else {
|
|
dayOfMonthSuffix = dayOfMonth + "th";
|
|
}
|
|
|
|
// `${hours}:${minutes}:${seconds} · `
|
|
return `${dayOfWeek}, ${dayOfMonthSuffix} ${month}, ${year}`;
|
|
}
|
|
|
|
function genHexString(len) {
|
|
let output = '';
|
|
for (let i = 0; i < len; ++i) {
|
|
output += (Math.floor(Math.random() * 16)).toString(16);
|
|
}
|
|
return output;
|
|
} |