From 44a4c0df24341042381c1a36714c0ad2c6faf72d Mon Sep 17 00:00:00 2001 From: Stanislaw Grams Date: Mon, 9 Feb 2026 22:04:12 +0100 Subject: [PATCH] [fix](trx-frontend-http): parse ft8 locators reliably Co-authored-by: Codex Signed-off-by: Stanislaw Grams --- .../assets/web/plugins/ft8.js | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/plugins/ft8.js b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/plugins/ft8.js index 9c97762..eb9b098 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/plugins/ft8.js +++ b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/plugins/ft8.js @@ -29,17 +29,27 @@ function addFt8Message(msg) { } function renderFt8Message(message) { - const gridRegex = /(^|\\s)([A-R]{2}\\d{2}(?:[A-X]{2})?)(?=\\s|$)/gi; - return message.replace(gridRegex, (match, lead, grid) => { - const safeGrid = grid.toUpperCase(); - return `${lead}[${safeGrid}]`; - }); + const parts = message.split(/(\\s+)/); + return parts.map((part) => { + const token = part.trim(); + if (!token) return part; + const grid = token.toUpperCase(); + if (/^[A-R]{2}\\d{2}(?:[A-X]{2})?$/.test(grid)) { + return part.replace(token, `[${grid}]`); + } + return part; + }).join(""); } function extractFirstGrid(message) { - const gridRegex = /(^|\\s)([A-R]{2}\\d{2}(?:[A-X]{2})?)(?=\\s|$)/i; - const match = message.match(gridRegex); - return match ? match[2].toUpperCase() : null; + const parts = message.split(/\\s+/); + for (const part of parts) { + const grid = part.toUpperCase(); + if (/^[A-R]{2}\\d{2}(?:[A-X]{2})?$/.test(grid)) { + return grid; + } + } + return null; } document.getElementById("ft8-decode-toggle-btn").addEventListener("click", async () => {