gontrol/static/gontrol-helper.js

85 lines
2.8 KiB
JavaScript

const checkboxState = new Map();
document.addEventListener('DOMContentLoaded', () => {
document.body.addEventListener('htmx:beforeSwap', function(event) {
if (event.target.id === "agentList") {
saveCheckboxState();
}
});
document.body.addEventListener('htmx:afterSwap', function(event) {
if (event.target.id === "agentList") {
restoreCheckboxState();
updateAgentDropdown();
}
});
});
function prepareAgentNames(event) {
const selected = Array.from(document.querySelectorAll('.agent-checkbox'))
.filter(cb => cb.checked)
.map(cb => cb.dataset.agentName);
const hiddenInput = document.getElementById('agentNamesInput');
if (selected.length > 0) {
document.getElementById('agentName').removeAttribute('name');
hiddenInput.value = selected.join(',');
} else {
document.getElementById('agentName').setAttribute('name', 'agentName');
hiddenInput.value = '';
}
}
function toggleAllCheckboxes() {
const checkboxes = document.querySelectorAll('input[name="agent-checkbox"]');
const allChecked = Array.from(checkboxes).every(checkbox => checkbox.checked);
checkboxes.forEach(checkbox => checkbox.checked = !allChecked);
}
function saveCheckboxState() {
document.querySelectorAll('.agent-checkbox').forEach((checkbox) => {
checkboxState.set(checkbox.dataset.agentName, checkbox.checked);
});
}
function restoreCheckboxState() {
document.querySelectorAll('.agent-checkbox').forEach((checkbox) => {
const state = checkboxState.get(checkbox.dataset.agentName);
if (state !== undefined) {
checkbox.checked = state;
}
});
}
function updateAgentDropdown() {
const select = document.getElementById("agentName");
const optionValues = Array.from(select.options).map(opt => opt.value);
const rows = document.querySelectorAll("#agentList tbody tr");
rows.forEach(row => {
const status = row.cells[4].textContent.trim();
const name = row.cells[1].textContent.trim();
if (status === "Connected") {
row.cells[4].innerHTML = '<span class="badge bg-success">Connected</span>';
const option = document.createElement("option");
if (!(optionValues.includes(name))) {
option.value = name;
option.textContent = name;
select.appendChild(option);
}
}
if (status === "Disconnected") {
row.cells[4].innerHTML = '<span class="badge bg-danger">Disconnected</span>';
const option = Array.from(select.options).find(opt => opt.value === name);
if(option) {
select.removeChild(option);
}
}
});
}