Förbättrat ljudsystemet

This commit is contained in:
larssand
2026-08-24 19:40:39 +02:00
parent 2e6866a013
commit 355a1ad3b0
13 changed files with 345 additions and 47 deletions

View File

@@ -373,7 +373,7 @@ export function renderDriversView(deps) {
const classOptions = state.classes.map((c) => `<option value="${c.id}">${escapeHtml(c.name)}</option>`).join("");
const driverSearch = driverBrandFilter().trim().toLowerCase();
const filteredDrivers = state.drivers.filter((driver) =>
!driverSearch || [driver.name, driver.transponder, driver.brand].map((value) => String(value || "").toLowerCase()).some((value) => value.includes(driverSearch))
!driverSearch || [driver.name, driver.speechName, driver.transponder, driver.brand].map((value) => String(value || "").toLowerCase()).some((value) => value.includes(driverSearch))
);
const editingDriver = state.drivers.find((driver) => driver.id === selectedDriverEditId()) || null;
@@ -385,6 +385,7 @@ export function renderDriversView(deps) {
<select name="classId">${classOptions}</select>
<input name="brand" placeholder="${t("drivers.brand_placeholder")}" />
<input name="transponder" placeholder="${t("drivers.transponder_placeholder")}" />
<input name="speechName" placeholder="${t("drivers.speech_name_placeholder")}" title="${t("drivers.speech_name_hint")}" />
<button class="btn btn-primary" type="submit">${t("drivers.add")}</button>
</form>
</section>
@@ -396,7 +397,7 @@ export function renderDriversView(deps) {
</div>
<div class="panel-body">
${renderTable(
[t("table.name"), t("table.class"), t("table.brand"), t("table.transponder"), t("events.actions")],
[t("table.name"), t("table.class"), t("table.brand"), t("table.transponder"), t("drivers.speech_name"), t("events.actions")],
filteredDrivers.map(
(d) => `
<tr>
@@ -404,6 +405,7 @@ export function renderDriversView(deps) {
<td>${escapeHtml(getClassName(d.classId))}</td>
<td>${escapeHtml(d.brand || "-")}</td>
<td>${escapeHtml(d.transponder || "-")}</td>
<td>${escapeHtml(d.speechName || d.name)}</td>
<td class="actions-inline">
<button id="driver-edit-${d.id}" class="btn">${t("common.edit")}</button>
<button id="driver-delete-${d.id}" class="btn btn-danger">${t("common.delete")}</button>
@@ -424,7 +426,7 @@ export function renderDriversView(deps) {
<h3>${t("common.edit")}</h3>
<button class="btn" id="driverEditCancel" type="button">${t("common.cancel")}</button>
</div>
<form id="driverEditForm" class="panel-body form-grid cols-4">
<form id="driverEditForm" class="panel-body form-grid cols-5">
<input name="name" required value="${escapeHtml(editingDriver.name)}" placeholder="${t("drivers.name_placeholder")}" />
<select name="classId">
${state.classes
@@ -433,6 +435,7 @@ export function renderDriversView(deps) {
</select>
<input name="brand" value="${escapeHtml(editingDriver.brand || "")}" placeholder="${t("drivers.brand_placeholder")}" />
<input name="transponder" value="${escapeHtml(editingDriver.transponder || "")}" placeholder="${t("drivers.transponder_placeholder")}" />
<input name="speechName" value="${escapeHtml(editingDriver.speechName || "")}" placeholder="${t("drivers.speech_name_placeholder")}" title="${t("drivers.speech_name_hint")}" />
<p class="form-error" id="driverEditError" hidden></p>
<div class="actions-inline">
<button class="btn btn-primary" id="driverEditSave" type="button">${t("common.save")}</button>
@@ -456,6 +459,7 @@ export function renderDriversView(deps) {
classId: String(form.get("classId")),
brand: String(form.get("brand") || "").trim(),
transponder: String(form.get("transponder") || "").trim(),
speechName: String(form.get("speechName") || "").trim(),
})
);
saveState();
@@ -522,6 +526,7 @@ export function renderDriversView(deps) {
const cleanedClassId = String(form.get("classId") || "").trim();
const cleanedBrand = String(form.get("brand") || "").trim();
const cleanedTp = String(form.get("transponder") || "").trim();
const cleanedSpeechName = String(form.get("speechName") || "").trim();
if (!cleanedName) {
setFormError("driverEditError", t("validation.required_name"));
return;
@@ -539,6 +544,7 @@ export function renderDriversView(deps) {
classId: cleanedClassId || item.classId,
brand: cleanedBrand,
transponder: cleanedTp,
speechName: cleanedSpeechName,
})
: item
);