fix bug in app.js

This commit is contained in:
admin committed 2026-09-11 22:21:32 +07:00
1 parent 1620f9b4d9
commit 000d2e818f
1 file changed
+23 -23
+23 -23
View File
@@ -151,21 +151,21 @@ const MAP = {
const $ = (sel) => document.querySelector(sel);
const $$ = (sel) => document.querySelectorAll(sel);
function t(key) {
function i18n(key) {
return I18N[State.lang][key] || I18N.en[key] || key;
}
function applyI18n() {
document.documentElement.lang = State.lang;
document.body.dataset.lang = State.lang;
document.title = t("page_title");
document.title = i18n("page_title");
$$("[data-i18n]").forEach(el => {
const k = el.getAttribute("data-i18n");
el.textContent = t(k);
el.textContent = i18n(k);
});
$$("[data-i18n-title]").forEach(el => {
const k = el.getAttribute("data-i18n-title");
el.title = t(k);
el.title = i18n(k);
});
}
@@ -384,7 +384,7 @@ function drawZones(zones) {
ctx.save();
ctx.font = "bold 11px 'Inter', system-ui, sans-serif";
ctx.textAlign = "center";
const occText = z.occupied ? t("occupied") : t("empty");
const occText = z.occupied ? i18n("occupied") : i18n("empty");
ctx.fillStyle = z.occupied ? "#ffffff" : hexToRgba("#000000", 0.55);
const label = `Z${z.id} · ${occText}`;
const metrics = ctx.measureText(label);
@@ -591,13 +591,13 @@ function refreshPanels() {
row.innerHTML = `
<div class="target-slot s${idx+1}">T${t.slot}</div>
<div class="target-detail">
<span class="status ${statusKey}">${t(statusKey)}</span>
<span class="status ${statusKey}">${i18n(statusKey)}</span>
<div class="target-metrics">
<div>${t("x_coord")}: <b>${t.x_mm} mm</b></div>
<div>${t("y_coord")}: <b>${t.y_mm} mm</b></div>
<div>${t("speed")}: <b>${speedTxt} cm/s</b></div>
<div>${t("distance")}: <b>${distanceKm} m</b></div>
<div style="grid-column: span 2;">${t("angle")}: <b>${angleTxt}</b></div>
<div>${i18n("x_coord")}: <b>${t.x_mm} mm</b></div>
<div>${i18n("y_coord")}: <b>${t.y_mm} mm</b></div>
<div>${i18n("speed")}: <b>${speedTxt} cm/s</b></div>
<div>${i18n("distance")}: <b>${distanceKm} m</b></div>
<div style="grid-column: span 2;">${i18n("angle")}: <b>${angleTxt}</b></div>
</div>
</div>`;
tl.appendChild(row);
@@ -612,10 +612,10 @@ function refreshPanels() {
row.innerHTML = `
<div class="zone-swatch z${idx+1}"></div>
<div class="zone-info">
<div class="zone-name">${t("zone_"+(idx+1))} · Z${z.id}</div>
<div class="zone-name">${i18n("zone_"+(idx+1))} · Z${z.id}</div>
<div class="zone-coord">[${z.x1}, ${z.y1}] → [${z.x2}, ${z.y2}]</div>
</div>
<div class="zone-badge ${z.occupied ? "occupied" : "empty"}">${z.occupied ? t("occupied") : t("empty")}</div>
<div class="zone-badge ${z.occupied ? "occupied" : "empty"}">${z.occupied ? i18n("occupied") : i18n("empty")}</div>
`;
zl.appendChild(row);
});
@@ -629,22 +629,22 @@ function buildEditorInputs() {
const block = document.createElement("div");
block.className = "zone-editor-block";
block.innerHTML = `
<label>${t("zone_"+(idx+1))} — Z${z.id}</label>
<label>${i18n("zone_"+(idx+1))} — Z${z.id}</label>
<div class="coord-grid">
<div class="coord-field">
<label>${t("edit_zone_x1")}</label>
<label>${i18n("edit_zone_x1")}</label>
<input type="number" data-zone="${idx}" data-field="x1" value="${z.x1}">
</div>
<div class="coord-field">
<label>${t("edit_zone_y1")}</label>
<label>${i18n("edit_zone_y1")}</label>
<input type="number" data-zone="${idx}" data-field="y1" value="${z.y1}">
</div>
<div class="coord-field">
<label>${t("edit_zone_x2")}</label>
<label>${i18n("edit_zone_x2")}</label>
<input type="number" data-zone="${idx}" data-field="x2" value="${z.x2}">
</div>
<div class="coord-field">
<label>${t("edit_zone_y2")}</label>
<label>${i18n("edit_zone_y2")}</label>
<input type="number" data-zone="${idx}" data-field="y2" value="${z.y2}">
</div>
</div>`;
@@ -719,7 +719,7 @@ function connectWS() {
console.warn("[Radar] WebSocket closed (code=" + ev.code + " reason=" + ev.reason + ")");
State.browserWsConnected = false;
updateWsStatus("err");
if (wsReconnectTimer == null) toast(t("ws_reconnecting"), "warning");
if (wsReconnectTimer == null) toast(i18n("ws_reconnecting"), "warning");
scheduleReconnect();
};
_activeWs.onerror = (ev) => {
@@ -741,14 +741,14 @@ function updateWsStatus(kind) {
const dot = chip.querySelector(".status-dot");
const txt = chip.querySelector("span:last-child");
dot.className = "status-dot " + (kind === "ok" ? "status-ok" : kind === "err" ? "status-err" : "status-warn");
txt.textContent = kind === "ok" ? t("ws_connected") : kind === "err" ? t("ws_disconnected") : t("ws_connecting");
txt.textContent = kind === "ok" ? i18n("ws_connected") : kind === "err" ? i18n("ws_disconnected") : i18n("ws_connecting");
}
function updateEsp32Status(connected) {
const chip = $("#statusEsp32");
const dot = chip.querySelector(".status-dot");
const txt = chip.querySelector("span:last-child");
dot.className = "status-dot " + (connected ? "status-ok" : "status-err");
txt.textContent = connected ? t("esp32_connected") : t("esp32_disconnected");
txt.textContent = connected ? i18n("esp32_connected") : i18n("esp32_disconnected");
}
/* Called on every broadcast frame from backend */
@@ -851,11 +851,11 @@ function initUI() {
body: JSON.stringify(payload),
});
if (!res.ok) throw new Error("HTTP " + res.status);
toast(t("zone_saved"), "success");
toast(i18n("zone_saved"), "success");
$("#zoneEditor").hidden = true;
} catch (err) {
console.error(err);
toast(t("zone_save_error") + ": " + err.message, "error");
toast(i18n("zone_save_error") + ": " + err.message, "error");
}
});