diff --git a/templates/index.html b/templates/index.html
index 8582322..baea888 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -4418,43 +4418,16 @@
// Shared module destroy map — closes SSE EventSources, timers, etc.
// Used by both switchMode() and dashboard navigation cleanup.
function getModuleDestroyFn(mode) {
- const moduleDestroyMap = {
- pager: () => { if (eventSource) { eventSource.close(); eventSource = null; } },
- sensor: () => { if (eventSource) { eventSource.close(); eventSource = null; } },
- rtlamr: () => { if (eventSource) { eventSource.close(); eventSource = null; } },
- subghz: () => typeof SubGhz !== 'undefined' && SubGhz.destroy(),
- morse: () => typeof MorseMode !== 'undefined' && MorseMode.destroy?.(),
- spaceweather: () => typeof SpaceWeather !== 'undefined' && SpaceWeather.destroy?.(),
- weathersat: () => typeof WeatherSat !== 'undefined' && WeatherSat.destroy?.(),
- wefax: () => typeof WeFax !== 'undefined' && WeFax.destroy?.(),
- system: () => typeof SystemHealth !== 'undefined' && SystemHealth.destroy?.(),
- waterfall: () => typeof Waterfall !== 'undefined' && Waterfall.destroy?.(),
- gps: () => typeof GPS !== 'undefined' && GPS.destroy?.(),
- meshtastic: () => typeof Meshtastic !== 'undefined' && Meshtastic.destroy?.(),
- meshcore: () => typeof MeshCore !== 'undefined' && MeshCore.destroy?.(),
- bluetooth: () => typeof BluetoothMode !== 'undefined' && BluetoothMode.destroy?.(),
- wifi: () => typeof WiFiMode !== 'undefined' && WiFiMode.destroy?.(),
- bt_locate: () => typeof BtLocate !== 'undefined' && BtLocate.destroy?.(),
- wifi_locate: () => typeof WiFiLocate !== 'undefined' && WiFiLocate.destroy?.(),
- sstv: () => typeof SSTV !== 'undefined' && SSTV.destroy?.(),
- sstv_general: () => typeof SSTVGeneral !== 'undefined' && SSTVGeneral.destroy?.(),
- websdr: () => typeof WebSDR !== 'undefined' && WebSDR.destroy?.(),
- spystations: () => typeof SpyStations !== 'undefined' && SpyStations.destroy?.(),
- radiosonde: () => { if (radiosondeEventSource) { radiosondeEventSource.close(); radiosondeEventSource = null; } },
- aprs: () => {
- if (typeof destroyAprsMode === 'function') {
- destroyAprsMode();
- } else if (aprsEventSource) {
- aprsEventSource.close();
- aprsEventSource = null;
- }
- },
- tscm: () => { if (tscmEventSource) { tscmEventSource.close(); tscmEventSource = null; } },
- meteor: () => typeof MeteorScatter !== 'undefined' && MeteorScatter.destroy?.(),
- ook: () => typeof OokMode !== 'undefined' && OokMode.destroy?.(),
- drone: () => typeof DroneMode !== 'undefined' && DroneMode.destroy?.(),
- };
- return moduleDestroyMap[mode] || null;
+ const def = window.INTERCEPT_MODES[mode];
+ if (!def) return null;
+ if (def.destroy) return def.destroy;
+ if (def.module) {
+ return () => {
+ const mod = window[def.module];
+ if (mod && typeof mod.destroy === 'function') mod.destroy();
+ };
+ }
+ return null;
}
function destroyCurrentMode() {
@@ -4780,34 +4753,11 @@
if (activeMobileBtn) {
activeMobileBtn.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });
}
- document.getElementById('pagerMode')?.classList.toggle('active', mode === 'pager');
- document.getElementById('sensorMode')?.classList.toggle('active', mode === 'sensor');
- document.getElementById('rtlamrMode')?.classList.toggle('active', mode === 'rtlamr');
- document.getElementById('satelliteMode')?.classList.toggle('active', mode === 'satellite');
- document.getElementById('sstvMode')?.classList.toggle('active', mode === 'sstv');
- document.getElementById('weatherSatMode')?.classList.toggle('active', mode === 'weathersat');
- document.getElementById('sstvGeneralMode')?.classList.toggle('active', mode === 'sstv_general');
- document.getElementById('wefaxMode')?.classList.toggle('active', mode === 'wefax');
- document.getElementById('gpsMode')?.classList.toggle('active', mode === 'gps');
- document.getElementById('wifiMode')?.classList.toggle('active', mode === 'wifi');
- document.getElementById('bluetoothMode')?.classList.toggle('active', mode === 'bluetooth');
- document.getElementById('btLocateMode')?.classList.toggle('active', mode === 'bt_locate');
- document.getElementById('wflMode')?.classList.toggle('active', mode === 'wifi_locate');
- document.getElementById('aprsMode')?.classList.toggle('active', mode === 'aprs');
- document.getElementById('tscmMode')?.classList.toggle('active', mode === 'tscm');
- document.getElementById('droneMode')?.classList.toggle('active', mode === 'drone');
- document.getElementById('radiosondeMode')?.classList.toggle('active', mode === 'radiosonde');
- document.getElementById('spystationsMode')?.classList.toggle('active', mode === 'spystations');
- document.getElementById('meshtasticMode')?.classList.toggle('active', mode === 'meshtastic');
- document.getElementById('meshcoreMode')?.classList.toggle('active', mode === 'meshcore');
- document.getElementById('websdrMode')?.classList.toggle('active', mode === 'websdr');
- document.getElementById('subghzMode')?.classList.toggle('active', mode === 'subghz');
- document.getElementById('spaceWeatherMode')?.classList.toggle('active', mode === 'spaceweather');
- document.getElementById('waterfallMode')?.classList.toggle('active', mode === 'waterfall');
- document.getElementById('morseMode')?.classList.toggle('active', mode === 'morse');
- document.getElementById('meteorMode')?.classList.toggle('active', mode === 'meteor');
- document.getElementById('systemMode')?.classList.toggle('active', mode === 'system');
- document.getElementById('ookMode')?.classList.toggle('active', mode === 'ook');
+ for (const [m, def] of Object.entries(window.INTERCEPT_MODES)) {
+ if (def.elementId) {
+ document.getElementById(def.elementId)?.classList.toggle('active', mode === m);
+ }
+ }
document.getElementById('pagerStats')?.classList.toggle('active', mode === 'pager');