feat(series): choose open series or club members only for series points

Who scores is now an explicit per-series choice: every driver (default)
or club members only, with the club field shown only for the latter.
Series saved with a club keep members-only scoring. README updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
larssand
2026-10-11 18:12:18 +02:00
parent efa082c2b5
commit ec200aef2b
11 changed files with 77 additions and 16 deletions

View File

@@ -16,7 +16,11 @@ function renderSeriesForm(series, { t, escapeHtml, state }) {
return `
<form id="seriesForm" class="form-grid cols-3 settings-grid">
<label><span>${t("series.name")}</span><input name="name" required value="${escapeHtml(series.name)}" placeholder="${escapeHtml(t("series.name_placeholder"))}" /></label>
<label><span>${t("series.club")}</span><input name="club" list="seriesClubOptions" value="${escapeHtml(series.club)}" placeholder="${escapeHtml(t("series.club_all"))}" />
<label><span>${t("series.scoring")}</span><select name="scoring" data-series-scoring>
<option value="all" ${series.scoring === "all" ? "selected" : ""}>${t("series.scoring_all")}</option>
<option value="club" ${series.scoring === "club" ? "selected" : ""}>${t("series.scoring_club")}</option>
</select></label>
<label data-series-club ${series.scoring === "club" ? "" : "hidden"}><span>${t("series.club")}</span><input name="club" list="seriesClubOptions" value="${escapeHtml(series.club)}" placeholder="${escapeHtml(t("series.club_placeholder"))}" />
<datalist id="seriesClubOptions">${clubs.map((club) => `<option value="${escapeHtml(club)}"></option>`).join("")}</datalist>
<small>${t("series.club_hint")}</small></label>
<fieldset class="series-classes"><legend>${t("series.classes")}</legend>
@@ -120,6 +124,9 @@ export function renderSeriesView(deps) {
if (!series) return;
const form = document.getElementById("seriesForm");
form?.querySelector("[data-series-scoring]")?.addEventListener("change", (event) => {
form.querySelector("[data-series-club]").hidden = event.target.value !== "club";
});
form?.querySelector("[data-series-preset]")?.addEventListener("change", (event) => {
const preset = SERIES_POINT_PRESETS[event.target.value];
if (!preset) return;
@@ -133,6 +140,7 @@ export function renderSeriesView(deps) {
Object.assign(series, normalizeSeries({
...series,
name: data.get("name"),
scoring: data.get("scoring"),
club: data.get("club"),
classIds: data.getAll("classIds"),
pointsTable: parsePointsTable(data.get("pointsTable")),