Add table view hash state and shrink table font

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Ian Gulliver
2026-01-29 10:55:51 -08:00
parent 0c98198e91
commit 8ea593625a
2 changed files with 39 additions and 28 deletions

View File

@@ -124,7 +124,7 @@ locations:
- "ac:44:f2:4e:87:27" # MAIN2-R bridge interface - "ac:44:f2:4e:87:27" # MAIN2-R bridge interface
- ART6 # Wash - ART6 # Wash
- ART7 # Wash - ART7 # Wash
- DMX148 # wash6 - DMXF # wash6
- ART19 # Focus - ART19 # Focus
- name: Booth - name: Booth

View File

@@ -335,10 +335,11 @@
background: #222; background: #222;
border-radius: 8px; border-radius: 8px;
overflow: hidden; overflow: hidden;
font-size: 11px;
} }
.data-table th, .data-table td { .data-table th, .data-table td {
padding: 8px 12px; padding: 6px 10px;
text-align: left; text-align: left;
border-bottom: 1px solid #333; border-bottom: 1px solid #333;
} }
@@ -2325,7 +2326,21 @@
connectSSE(); connectSSE();
let currentMode = 'network';
let currentView = 'map';
let tableData = null;
let tableSortColumn = null;
let tableSortAsc = true;
function updateHash() {
let hash = '';
if (currentMode !== 'network') hash = currentMode;
if (currentView === 'table') hash += (hash ? '-' : '') + 'table';
window.location.hash = hash;
}
function setMode(mode) { function setMode(mode) {
currentMode = mode;
document.body.classList.remove('dante-mode', 'artnet-mode', 'sacn-mode'); document.body.classList.remove('dante-mode', 'artnet-mode', 'sacn-mode');
document.getElementById('mode-network').classList.remove('active'); document.getElementById('mode-network').classList.remove('active');
document.getElementById('mode-dante').classList.remove('active'); document.getElementById('mode-dante').classList.remove('active');
@@ -2335,20 +2350,17 @@
if (mode === 'dante') { if (mode === 'dante') {
document.body.classList.add('dante-mode'); document.body.classList.add('dante-mode');
document.getElementById('mode-dante').classList.add('active'); document.getElementById('mode-dante').classList.add('active');
window.location.hash = 'dante';
} else if (mode === 'artnet') { } else if (mode === 'artnet') {
document.body.classList.add('artnet-mode'); document.body.classList.add('artnet-mode');
document.getElementById('mode-artnet').classList.add('active'); document.getElementById('mode-artnet').classList.add('active');
window.location.hash = 'artnet';
} else if (mode === 'sacn') { } else if (mode === 'sacn') {
document.body.classList.add('sacn-mode'); document.body.classList.add('sacn-mode');
document.getElementById('mode-sacn').classList.add('active'); document.getElementById('mode-sacn').classList.add('active');
window.location.hash = 'sacn';
} else { } else {
document.getElementById('mode-network').classList.add('active'); document.getElementById('mode-network').classList.add('active');
window.location.hash = '';
} }
updateHash();
tableSortColumn = null; tableSortColumn = null;
tableSortAsc = true; tableSortAsc = true;
if (currentView === 'table') { if (currentView === 'table') {
@@ -2356,26 +2368,21 @@
} }
} }
function setView(view) {
currentView = view;
document.getElementById('view-map').classList.toggle('active', view === 'map');
document.getElementById('view-table').classList.toggle('active', view === 'table');
document.body.classList.toggle('table-view', view === 'table');
updateHash();
if (view === 'table' && tableData) {
renderTable();
}
}
document.getElementById('mode-network').addEventListener('click', () => setMode('network')); document.getElementById('mode-network').addEventListener('click', () => setMode('network'));
document.getElementById('mode-dante').addEventListener('click', () => setMode('dante')); document.getElementById('mode-dante').addEventListener('click', () => setMode('dante'));
document.getElementById('mode-artnet').addEventListener('click', () => setMode('artnet')); document.getElementById('mode-artnet').addEventListener('click', () => setMode('artnet'));
document.getElementById('mode-sacn').addEventListener('click', () => setMode('sacn')); document.getElementById('mode-sacn').addEventListener('click', () => setMode('sacn'));
let currentView = 'map';
let tableData = null;
let tableSortColumn = null;
let tableSortAsc = true;
function setView(view) {
currentView = view;
document.getElementById('view-map').classList.toggle('active', view === 'map');
document.getElementById('view-table').classList.toggle('active', view === 'table');
document.body.classList.toggle('table-view', view === 'table');
if (view === 'table' && tableData) {
renderTable();
}
}
document.getElementById('view-map').addEventListener('click', () => setView('map')); document.getElementById('view-map').addEventListener('click', () => setView('map'));
document.getElementById('view-table').addEventListener('click', () => setView('table')); document.getElementById('view-table').addEventListener('click', () => setView('table'));
@@ -2715,12 +2722,16 @@
} }
}); });
if (window.location.hash === '#dante') { const hash = window.location.hash.slice(1);
setMode('dante'); const hashParts = hash.split('-');
} else if (window.location.hash === '#artnet') { const hashMode = hashParts[0];
setMode('artnet'); const hashView = hashParts.includes('table') ? 'table' : 'map';
} else if (window.location.hash === '#sacn') {
setMode('sacn'); if (hashMode === 'dante' || hashMode === 'artnet' || hashMode === 'sacn') {
setMode(hashMode);
}
if (hashView === 'table') {
setView('table');
} }
</script> </script>
</body> </body>