ScuttleBot

feat: select-all checkbox in agent list header

lmata 2026-04-05 16:55 trunk
Commit 30e53110edb0698146d4f8d05d16e55f9b4056382367e78cc0eb9cc329b799c5
1 file changed +5 -1
--- internal/api/ui/index.html
+++ internal/api/ui/index.html
@@ -1690,11 +1690,11 @@
16901690
<button class="sm danger" onclick="deleteAgent('${esc(a.nick)}')">delete</button></div></td>
16911691
</tr>`;
16921692
});
16931693
renderTable('agents-container', null, rows,
16941694
bots.length ? 'no agents match the filter' : 'no agents registered yet',
1695
- ['nick','type','channels','last seen','']);
1695
+ ['<input type="checkbox" id="agent-select-all" onchange="toggleSelectAllAgents(this.checked)" style="margin-right:6px">nick','type','channels','last seen','']);
16961696
}
16971697
16981698
async function revokeAgent(nick) {
16991699
if (!confirm(`Revoke "${nick}"? This cannot be undone.`)) return;
17001700
try { await api('POST', `/v1/agents/${nick}/revoke`); await loadAgents(); await loadStatus(); }
@@ -1702,10 +1702,14 @@
17021702
}
17031703
async function deleteAgent(nick) {
17041704
if (!confirm(`Delete "${nick}"? This permanently removes the agent from the registry.`)) return;
17051705
try { await api('DELETE', `/v1/agents/${nick}`); await loadAgents(); await loadStatus(); }
17061706
catch(e) { alert('Delete failed: '+e.message); }
1707
+}
1708
+function toggleSelectAllAgents(checked) {
1709
+ document.querySelectorAll('.agent-select').forEach(cb => cb.checked = checked);
1710
+ updateBulkBtn();
17071711
}
17081712
function updateBulkBtn() {
17091713
const checked = document.querySelectorAll('.agent-select:checked');
17101714
const btn = document.getElementById('bulk-delete-btn');
17111715
btn.style.display = checked.length > 0 ? '' : 'none';
17121716
--- internal/api/ui/index.html
+++ internal/api/ui/index.html
@@ -1690,11 +1690,11 @@
1690 <button class="sm danger" onclick="deleteAgent('${esc(a.nick)}')">delete</button></div></td>
1691 </tr>`;
1692 });
1693 renderTable('agents-container', null, rows,
1694 bots.length ? 'no agents match the filter' : 'no agents registered yet',
1695 ['nick','type','channels','last seen','']);
1696 }
1697
1698 async function revokeAgent(nick) {
1699 if (!confirm(`Revoke "${nick}"? This cannot be undone.`)) return;
1700 try { await api('POST', `/v1/agents/${nick}/revoke`); await loadAgents(); await loadStatus(); }
@@ -1702,10 +1702,14 @@
1702 }
1703 async function deleteAgent(nick) {
1704 if (!confirm(`Delete "${nick}"? This permanently removes the agent from the registry.`)) return;
1705 try { await api('DELETE', `/v1/agents/${nick}`); await loadAgents(); await loadStatus(); }
1706 catch(e) { alert('Delete failed: '+e.message); }
 
 
 
 
1707 }
1708 function updateBulkBtn() {
1709 const checked = document.querySelectorAll('.agent-select:checked');
1710 const btn = document.getElementById('bulk-delete-btn');
1711 btn.style.display = checked.length > 0 ? '' : 'none';
1712
--- internal/api/ui/index.html
+++ internal/api/ui/index.html
@@ -1690,11 +1690,11 @@
1690 <button class="sm danger" onclick="deleteAgent('${esc(a.nick)}')">delete</button></div></td>
1691 </tr>`;
1692 });
1693 renderTable('agents-container', null, rows,
1694 bots.length ? 'no agents match the filter' : 'no agents registered yet',
1695 ['<input type="checkbox" id="agent-select-all" onchange="toggleSelectAllAgents(this.checked)" style="margin-right:6px">nick','type','channels','last seen','']);
1696 }
1697
1698 async function revokeAgent(nick) {
1699 if (!confirm(`Revoke "${nick}"? This cannot be undone.`)) return;
1700 try { await api('POST', `/v1/agents/${nick}/revoke`); await loadAgents(); await loadStatus(); }
@@ -1702,10 +1702,14 @@
1702 }
1703 async function deleteAgent(nick) {
1704 if (!confirm(`Delete "${nick}"? This permanently removes the agent from the registry.`)) return;
1705 try { await api('DELETE', `/v1/agents/${nick}`); await loadAgents(); await loadStatus(); }
1706 catch(e) { alert('Delete failed: '+e.message); }
1707 }
1708 function toggleSelectAllAgents(checked) {
1709 document.querySelectorAll('.agent-select').forEach(cb => cb.checked = checked);
1710 updateBulkBtn();
1711 }
1712 function updateBulkBtn() {
1713 const checked = document.querySelectorAll('.agent-select:checked');
1714 const btn = document.getElementById('bulk-delete-btn');
1715 btn.style.display = checked.length > 0 ? '' : 'none';
1716

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button