${escapeHtml(row.resultDisplay || "-")}
+ ${t("overlay.active_member")}: ${escapeHtml(row.subLabel || "-")} +diff --git a/src/app.js b/src/app.js index ca4a92f..60831b9 100644 --- a/src/app.js +++ b/src/app.js @@ -220,6 +220,7 @@ const TRANSLATIONS = { "events.no_teams": "Inga lag skapade ännu.", "events.team_standings": "Lagställning", "events.no_team_results": "Inga teamresultat ännu.", + "events.edit_team": "Redigera lag", "events.add_session": "Lägg till session", "events.set_active": "Sätt aktiv", "events.assignments": "Tilldelningar", @@ -277,6 +278,7 @@ const TRANSLATIONS = { "timing.open_speaker_overlay": "Speaker overlay", "timing.open_results_overlay": "Result overlay", "timing.open_tv_overlay": "TV overlay", + "timing.open_team_overlay": "Team overlay", "timing.close_details": "Stang", "timing.detail_title": "Leaderboard-detaljer", "timing.lap_history": "Varvhistorik", @@ -479,12 +481,16 @@ const TRANSLATIONS = { "overlay.mode_speaker": "Speaker", "overlay.mode_results": "Resultat", "overlay.mode_tv": "TV", + "overlay.mode_team": "Team", "overlay.fastest_lap": "Snabbaste varv", "overlay.fullscreen": "Fullscreen", "overlay.leaderboard_live": "Live leaderboard", "overlay.rotating_panel": "Displaypanel", "overlay.next_predicted_lap": "Nästa varv", "overlay.event_markers": "Eventmarkörer", + "overlay.team_battle": "Lagkamp", + "overlay.active_member": "Aktiv förare/bil", + "overlay.top_three": "Topp 3", "guide.host_title": "Hur Managed AMMC körs", "guide.host_1": "1. AMMC körs alltid på samma maskin som `npm start` eller `node server.js` körs på.", "guide.host_2": "2. Om du bara surfar in från en laptop/webbläsare startas ingen process där. Webbläsaren styr bara backend via HTTP.", @@ -722,6 +728,7 @@ const TRANSLATIONS = { "events.no_teams": "No teams created yet.", "events.team_standings": "Team standings", "events.no_team_results": "No team results yet.", + "events.edit_team": "Edit team", "events.add_session": "Add Session", "events.set_active": "Set Active", "events.assignments": "Assignments", @@ -779,6 +786,7 @@ const TRANSLATIONS = { "timing.open_speaker_overlay": "Speaker overlay", "timing.open_results_overlay": "Results overlay", "timing.open_tv_overlay": "TV overlay", + "timing.open_team_overlay": "Team overlay", "timing.close_details": "Close", "timing.detail_title": "Leaderboard details", "timing.lap_history": "Lap history", @@ -981,12 +989,16 @@ const TRANSLATIONS = { "overlay.mode_speaker": "Speaker", "overlay.mode_results": "Results", "overlay.mode_tv": "TV", + "overlay.mode_team": "Team", "overlay.fastest_lap": "Fastest Lap", "overlay.fullscreen": "Fullscreen", "overlay.leaderboard_live": "Live leaderboard", "overlay.rotating_panel": "Display panel", "overlay.next_predicted_lap": "Next lap", "overlay.event_markers": "Event markers", + "overlay.team_battle": "Team battle", + "overlay.active_member": "Active driver/car", + "overlay.top_three": "Top 3", "guide.host_title": "How Managed AMMC Runs", "guide.host_1": "1. AMMC always runs on the same machine where `npm start` or `node server.js` is running.", "guide.host_2": "2. If you only browse from a laptop/browser, no process is started there. The browser only controls the backend over HTTP.", @@ -1024,7 +1036,7 @@ const TRANSLATIONS = { const urlParams = new URLSearchParams(window.location.search); const overlayMode = urlParams.get("view") === "overlay"; -const overlayViewMode = ["leaderboard", "speaker", "results", "tv"].includes(String(urlParams.get("overlayMode") || "").toLowerCase()) +const overlayViewMode = ["leaderboard", "speaker", "results", "tv", "team"].includes(String(urlParams.get("overlayMode") || "").toLowerCase()) ? String(urlParams.get("overlayMode")).toLowerCase() : "leaderboard"; const state = loadState(); @@ -1041,6 +1053,7 @@ let selectedDriverEditId = null; let selectedCarEditId = null; let selectedEventEditId = null; let selectedSessionEditId = null; +let selectedTeamEditId = null; let quickAddDraft = null; let overlaySyncTimer = null; let overlayRotationTimer = null; @@ -2749,6 +2762,10 @@ function renderEventManager(eventId) { .join(""); const raceDrivers = event.mode === "race" ? state.drivers.filter((driver) => !event.classId || driver.classId === event.classId) : []; const raceTeams = event.mode === "race" ? getEventTeams(event) : []; + if (selectedTeamEditId && !raceTeams.some((team) => team.id === selectedTeamEditId)) { + selectedTeamEditId = null; + } + const editingTeam = event.mode === "race" ? raceTeams.find((team) => team.id === selectedTeamEditId) || null : null; const carOptions = state.cars .map((c) => ``) .join(""); @@ -2992,7 +3009,10 @@ function renderEventManager(eventId) { .join(", ") || "-" )} - +