[feat](trx-frontend-http): add dedicated WSPR plugin tab

Expose a WSPR subtab in the Plugins view with its own controls and
message list, wire a dedicated wspr.js asset endpoint, and route WSPR
decode events to the new panel.

This makes WSPR visible in the HTTP frontend instead of reusing the
FT8 panel for WSPR messages.

Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Stanislaw Grams <stanislawgrams@gmail.com>
This commit is contained in:
2026-02-12 23:18:36 +01:00
parent 6d2d647511
commit 7b75049f4f
6 changed files with 104 additions and 12 deletions
@@ -125,6 +125,7 @@
<button class="sub-tab" data-subtab="map">Map</button>
<button class="sub-tab" data-subtab="aprs">APRS</button>
<button class="sub-tab" data-subtab="ft8">FT8</button>
<button class="sub-tab" data-subtab="wspr">WSPR</button>
<button class="sub-tab" data-subtab="cw">CW</button>
</div>
<div id="subtab-overview" class="sub-tab-panel">
@@ -146,6 +147,12 @@
Decodes FT8 messages from RX audio (DIG/USB only, toggle required).
</div>
</div>
<div class="plugin-item">
<strong>WSPR Decoder</strong>
<div style="color:var(--text-muted); font-size:0.85rem; margin-top:0.2rem;">
Decodes WSPR messages from RX audio (DIG/USB only, toggle required).
</div>
</div>
</div>
<div id="subtab-map" class="sub-tab-panel" style="display:none;">
<div class="map-controls">
@@ -177,6 +184,21 @@
</div>
<div id="ft8-messages"></div>
</div>
<div id="subtab-wspr" class="sub-tab-panel" style="display:none;">
<div class="ft8-controls">
<button id="wspr-decode-toggle-btn" type="button">Enable WSPR</button>
<button id="wspr-clear-btn" type="button">Clear</button>
<small id="wspr-status" style="color:var(--text-muted);">Waiting for server decode</small>
</div>
<div class="ft8-header">
<span class="ft8-time">Time</span>
<span class="ft8-snr">SNR</span>
<span class="ft8-dt">DT</span>
<span class="ft8-freq">RF</span>
<span class="ft8-msg">Message</span>
</div>
<div id="wspr-messages"></div>
</div>
<div id="subtab-cw" class="sub-tab-panel" style="display:none;">
<div class="cw-controls">
<button id="cw-clear-btn" type="button">Clear</button>
@@ -212,6 +234,7 @@
<script src="/app.js"></script>
<script src="/aprs.js"></script>
<script src="/ft8.js"></script>
<script src="/wspr.js"></script>
<script src="/cw.js"></script>
</body>
</html>