[feat](trx-frontend-http): add rds raw json copy action
Co-authored-by: Codex <codex@openai.com> Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
@@ -3269,6 +3269,21 @@ async function copyRdsPsToClipboard() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function copyRdsRawToClipboard() {
|
||||||
|
const rawEl = document.getElementById("rds-raw");
|
||||||
|
const rawText = rawEl?.textContent ?? "";
|
||||||
|
if (!rawText || rawText === "--") {
|
||||||
|
showHint("No RDS JSON", 1200);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await navigator.clipboard.writeText(rawText);
|
||||||
|
showHint("RDS JSON copied", 1200);
|
||||||
|
} catch (_) {
|
||||||
|
showHint("Clipboard failed", 1500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (rdsPsOverlay) {
|
if (rdsPsOverlay) {
|
||||||
rdsPsOverlay.addEventListener("click", () => { copyRdsPsToClipboard(); });
|
rdsPsOverlay.addEventListener("click", () => { copyRdsPsToClipboard(); });
|
||||||
}
|
}
|
||||||
@@ -3276,6 +3291,10 @@ const rdsPsValueEl = document.getElementById("rds-ps");
|
|||||||
if (rdsPsValueEl) {
|
if (rdsPsValueEl) {
|
||||||
rdsPsValueEl.addEventListener("click", () => { copyRdsPsToClipboard(); });
|
rdsPsValueEl.addEventListener("click", () => { copyRdsPsToClipboard(); });
|
||||||
}
|
}
|
||||||
|
const rdsRawCopyBtn = document.getElementById("rds-raw-copy-btn");
|
||||||
|
if (rdsRawCopyBtn) {
|
||||||
|
rdsRawCopyBtn.addEventListener("click", () => { copyRdsRawToClipboard(); });
|
||||||
|
}
|
||||||
|
|
||||||
function updateRdsPsOverlay(rds) {
|
function updateRdsPsOverlay(rds) {
|
||||||
// Overview strip overlay
|
// Overview strip overlay
|
||||||
|
|||||||
@@ -289,7 +289,10 @@
|
|||||||
<div class="rds-field"><span class="rds-label">Dynamic PTY</span><span id="rds-dynamic-pty" class="rds-value">--</span></div>
|
<div class="rds-field"><span class="rds-label">Dynamic PTY</span><span id="rds-dynamic-pty" class="rds-value">--</span></div>
|
||||||
<div class="rds-field"><span class="rds-label">RadioText</span><span id="rds-radio-text" class="rds-value rds-text">--</span></div>
|
<div class="rds-field"><span class="rds-label">RadioText</span><span id="rds-radio-text" class="rds-value rds-text">--</span></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="rds-raw-label">Raw JSON (last spectrum frame)</div>
|
<div class="rds-raw-header">
|
||||||
|
<div class="rds-raw-label">Raw JSON (last spectrum frame)</div>
|
||||||
|
<button id="rds-raw-copy-btn" class="header-bar-btn" type="button">Copy</button>
|
||||||
|
</div>
|
||||||
<pre id="rds-raw" class="rds-raw">--</pre>
|
<pre id="rds-raw" class="rds-raw">--</pre>
|
||||||
</div>
|
</div>
|
||||||
<div id="subtab-aprs" class="sub-tab-panel" style="display:none;">
|
<div id="subtab-aprs" class="sub-tab-panel" style="display:none;">
|
||||||
|
|||||||
@@ -814,7 +814,10 @@ small { color: var(--text-muted); }
|
|||||||
.rds-text { white-space: normal; overflow-wrap: anywhere; line-height: 1.35; }
|
.rds-text { white-space: normal; overflow-wrap: anywhere; line-height: 1.35; }
|
||||||
.rds-no-signal { color: var(--text-muted); }
|
.rds-no-signal { color: var(--text-muted); }
|
||||||
.rds-decoding { color: var(--accent-green); }
|
.rds-decoding { color: var(--accent-green); }
|
||||||
|
.rds-raw-header { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; margin-bottom: 0.3rem; }
|
||||||
.rds-raw-label { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-muted); margin-bottom: 0.3rem; }
|
.rds-raw-label { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-muted); margin-bottom: 0.3rem; }
|
||||||
|
.rds-raw-header .rds-raw-label { margin-bottom: 0; }
|
||||||
|
#rds-raw-copy-btn { height: 1.65rem; padding: 0 0.55rem; font-size: 0.72rem; }
|
||||||
.rds-raw { background: var(--input-bg); border: 1px solid var(--border-light); border-radius: 6px; padding: 0.5rem 0.6rem; font-size: 0.8rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; color: var(--text); white-space: pre; overflow-x: auto; margin: 0; }
|
.rds-raw { background: var(--input-bg); border: 1px solid var(--border-light); border-radius: 6px; padding: 0.5rem 0.6rem; font-size: 0.8rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; color: var(--text); white-space: pre; overflow-x: auto; margin: 0; }
|
||||||
|
|
||||||
.cw-controls { display: flex; gap: 0.6rem; align-items: center; margin-bottom: 0.75rem; }
|
.cw-controls { display: flex; gap: 0.6rem; align-items: center; margin-bottom: 0.75rem; }
|
||||||
|
|||||||
Reference in New Issue
Block a user