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 b9622ef..34b7082 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,32 +29,42 @@ function addFt8Message(msg) {
}
function renderFt8Message(message) {
- const gridRegex = /[A-R]{2}\\d{2}(?:[A-X]{2})?/gi;
let out = "";
- let lastIdx = 0;
- for (const match of message.matchAll(gridRegex)) {
- const idx = match.index ?? 0;
- const grid = match[0].toUpperCase();
- const prev = idx > 0 ? message[idx - 1] : "";
- const next = idx + grid.length < message.length ? message[idx + grid.length] : "";
- if (isAlphaNum(prev) || isAlphaNum(next)) continue;
- out += escapeHtml(message.slice(lastIdx, idx));
- out += `[${grid}]`;
- lastIdx = idx + grid.length;
+ let i = 0;
+ while (i < message.length) {
+ const ch = message[i];
+ if (isAlphaNum(ch)) {
+ let j = i + 1;
+ while (j < message.length && isAlphaNum(message[j])) j++;
+ const token = message.slice(i, j);
+ const grid = token.toUpperCase();
+ if (/^[A-R]{2}\\d{2}(?:[A-X]{2})?$/.test(grid)) {
+ out += `[${grid}]`;
+ } else {
+ out += escapeHtml(token);
+ }
+ i = j;
+ } else {
+ out += escapeHtml(ch);
+ i += 1;
+ }
}
- out += escapeHtml(message.slice(lastIdx));
return out;
}
function extractFirstGrid(message) {
- const gridRegex = /[A-R]{2}\\d{2}(?:[A-X]{2})?/gi;
- for (const match of message.matchAll(gridRegex)) {
- const idx = match.index ?? 0;
- const grid = match[0].toUpperCase();
- const prev = idx > 0 ? message[idx - 1] : "";
- const next = idx + grid.length < message.length ? message[idx + grid.length] : "";
- if (isAlphaNum(prev) || isAlphaNum(next)) continue;
- return grid;
+ let i = 0;
+ while (i < message.length) {
+ if (isAlphaNum(message[i])) {
+ let j = i + 1;
+ while (j < message.length && isAlphaNum(message[j])) j++;
+ const token = message.slice(i, j);
+ const grid = token.toUpperCase();
+ if (/^[A-R]{2}\\d{2}(?:[A-X]{2})?$/.test(grid)) return grid;
+ i = j;
+ } else {
+ i += 1;
+ }
}
return null;
}