diff --git a/src/event_manager_controller.js b/src/event_manager_controller.js index 5aabcc1..f55648d 100644 --- a/src/event_manager_controller.js +++ b/src/event_manager_controller.js @@ -254,12 +254,18 @@ export function renderEventManagerView(context) { document.getElementById("sessionForm")?.addEventListener("submit", (e) => { e.preventDefault(); - const form = new FormData(e.currentTarget); + const formNode = e.currentTarget; + if (!(formNode instanceof HTMLFormElement)) { + return; + } + const form = new FormData(formNode); + const typeField = formNode.querySelector('[name="type"]'); + const selectedType = typeField instanceof HTMLSelectElement ? typeField.value : String(form.get("type") || ""); state.sessions.push(normalizeSession({ id: uid("session"), eventId, name: String(form.get("name")).trim(), - type: String(form.get("type")), + type: selectedType, durationMin: Number(form.get("durationMin")), followUpSec: Math.max(0, Number(form.get("followUpSec") || 0) || 0), startMode: String(form.get("startMode") || "mass"), @@ -350,7 +356,13 @@ export function renderEventManagerView(context) { if (!editingSession) { return; } - const form = new FormData(event.currentTarget); + const formNode = event.currentTarget; + if (!(formNode instanceof HTMLFormElement)) { + return; + } + const form = new FormData(formNode); + const typeField = formNode.querySelector('[name="type"]'); + const selectedType = typeField instanceof HTMLSelectElement ? typeField.value : String(form.get("type") || editingSession.type); const cleanedName = String(form.get("name") || "").trim(); const cleanedDuration = Number(form.get("durationMin") || editingSession.durationMin || 5) || 0; if (!cleanedName) { @@ -363,7 +375,7 @@ export function renderEventManagerView(context) { } setFormError("sessionEditError", ""); editingSession.name = cleanedName; - editingSession.type = String(form.get("type") || editingSession.type); + editingSession.type = selectedType; editingSession.durationMin = Math.max(1, cleanedDuration); editingSession.followUpSec = Math.max(0, Number(form.get("followUpSec") || 0) || 0); editingSession.startMode = normalizeStartMode(String(form.get("startMode") || editingSession.startMode || "mass")); @@ -496,7 +508,11 @@ export function renderEventManagerView(context) { if (showTeamsSection) { document.getElementById("teamForm")?.addEventListener("submit", (e) => { e.preventDefault(); - const form = new FormData(e.currentTarget); + const formNode = e.currentTarget; + if (!(formNode instanceof HTMLFormElement)) { + return; + } + const form = new FormData(formNode); const name = String(form.get("teamName") || "").trim(); const driverIds = form.getAll("teamDriverIds").map(String).filter(Boolean); const carIds = form.getAll("teamCarIds").map(String).filter(Boolean); @@ -559,7 +575,11 @@ export function renderEventManagerView(context) { if (!editingTeam) { return; } - const form = new FormData(submitEvent.currentTarget); + const formNode = submitEvent.currentTarget; + if (!(formNode instanceof HTMLFormElement)) { + return; + } + const form = new FormData(formNode); const name = String(form.get("teamName") || "").trim(); const driverIds = form.getAll("teamDriverIds").map(String).filter(Boolean); const carIds = form.getAll("teamCarIds").map(String).filter(Boolean); diff --git a/src/event_manager_view.js b/src/event_manager_view.js index 83be2b7..eddb289 100644 --- a/src/event_manager_view.js +++ b/src/event_manager_view.js @@ -59,7 +59,7 @@ export function renderEventManagerMarkup(context) { ${t("events.session_type_label")} - + ${sessionTypeChoices.map((s) => `${getSessionTypeLabel(s)}`).join("")} ${t(sessionTypeHintKey)} @@ -306,32 +306,40 @@ export function renderEventManagerMarkup(context) { ${t("events.team_form_drivers")} ${teamDriverPool.fallback ? `${t("events.team_driver_fallback")}` : ""} - ${teamDriverPool.drivers - .map( - (driver) => ` - - - ${escapeHtml(driver.name)}${driver.transponder ? ` (${escapeHtml(driver.transponder)})` : ""} - - ` - ) - .join("")} + ${ + teamDriverPool.drivers.length + ? teamDriverPool.drivers + .map( + (driver) => ` + + + ${escapeHtml(driver.name)}${driver.transponder ? ` (${escapeHtml(driver.transponder)})` : ""} + + ` + ) + .join("") + : `${t("common.no_entries")}` + } ${t("events.team_cars")} ${t("events.team_form_cars")} - ${state.cars - .map( - (car) => ` - - - ${escapeHtml(car.name)} (${escapeHtml(car.transponder || "-")}) - - ` - ) - .join("")} + ${ + state.cars.length + ? state.cars + .map( + (car) => ` + + + ${escapeHtml(car.name)} (${escapeHtml(car.transponder || "-")}) + + ` + ) + .join("") + : `${t("common.no_entries")}` + } @@ -778,7 +786,7 @@ export function renderEventManagerMarkup(context) { ${t("events.session_type_label")} - + ${sessionTypeChoices.map( (item) => `${getSessionTypeLabel(item)}` ).join("")}
${t("events.team_form_drivers")}
${t("events.team_driver_fallback")}
${t("common.no_entries")}
${t("events.team_form_cars")}