diff --git a/cmd/anvilweb/static/index.html b/cmd/anvilweb/static/index.html index e911817..db930ba 100644 --- a/cmd/anvilweb/static/index.html +++ b/cmd/anvilweb/static/index.html @@ -74,6 +74,11 @@ content: 'No log data yet...'; color: #666; } + th.sortable { cursor: pointer; user-select: none; } + th.sortable:hover { background: var(--pico-secondary-background); } + th.sortable::after { content: ' ⇅'; opacity: 0.3; } + th.sortable.asc::after { content: ' ↑'; opacity: 1; } + th.sortable.desc::after { content: ' ↓'; opacity: 1; }
@@ -190,6 +195,8 @@ let currentSessionId = null; let allSessions = []; let logEventSource = null; + let sortColumn = 'alias'; + let sortAsc = true; function escapeHtml(text) { const div = document.createElement('div'); @@ -221,21 +228,31 @@ } sessions.sort((a, b) => { - const nameA = (a.alias || a.id).toLowerCase(); - const nameB = (b.alias || b.id).toLowerCase(); - return nameA.localeCompare(nameB); + let valA, valB; + switch (sortColumn) { + case 'alias': valA = (a.alias || a.id).toLowerCase(); valB = (b.alias || b.id).toLowerCase(); break; + case 'id': valA = a.id; valB = b.id; break; + case 'state': valA = a.state; valB = b.state; break; + case 'backend': valA = a.backend || ''; valB = b.backend || ''; break; + case 'cwd': valA = a.cwd; valB = b.cwd; break; + case 'pid': valA = parseInt(a.pid) || 0; valB = parseInt(b.pid) || 0; break; + default: valA = ''; valB = ''; + } + const cmp = typeof valA === 'number' ? valA - valB : String(valA).localeCompare(String(valB)); + return sortAsc ? cmp : -cmp; }); + const sortClass = col => `sortable${sortColumn === col ? (sortAsc ? ' asc' : ' desc') : ''}`; const table = `| Alias | -ID | -State | -Backend | -Working Directory | -PID | +Alias | +ID | +State | +Backend | +Working Directory | +PID | Actions |
|---|