feat(series): add series/cup championships with points tables and standings

Group any number of races in freely chosen classes into a series with a
points table (ÖRC/100-80-70/F1/custom), best-N or drop-X counting, a
club filter that re-ranks members without guests, tie-breaks, rounds
created from a date list, and per-class standings with print and PDF.

Also fixes PDF export of wide tables: they are compacted and switched
to landscape instead of truncating names and dropping columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
larssand
2026-10-10 19:49:23 +02:00
parent f65e526948
commit 9a9379aa83
18 changed files with 848 additions and 20 deletions

View File

@@ -15,6 +15,7 @@ import { runPracticeResetSmoke } from "./browser_practice_reset.js";
import { runSuspectLapsSmoke } from "./browser_suspect_laps.js";
import { runCorrectionsScopeSmoke } from "./browser_corrections_scope.js";
import { runDriversPageSmoke } from "./browser_drivers_page.js";
import { runSeriesSmoke } from "./browser_series.js";
import { runObsPopupSmoke } from "./browser_obs_popup.js";
import { runDecoderReconnectSmoke } from "./browser_decoder_reconnect.js";
import assert from "node:assert/strict";
@@ -160,6 +161,7 @@ try {
await runSuspectLapsSmoke({ evaluate, navigate, savedState, waitFor, base, dialogs });
await runCorrectionsScopeSmoke({ evaluate, navigate, savedState, waitFor, base });
await runDriversPageSmoke({ evaluate, navigate, savedState, waitFor, base });
await runSeriesSmoke({ evaluate, navigate, savedState, waitFor, base, dialogs });
await runRaceDaySmoke({ evaluate, navigate, fill, savedState, waitFor, pause, base, dialogs });
await runRaceDayStartSequencesSmoke({ evaluate, navigate, waitFor, pause, base, dialogs });
await runObsPopupSmoke({ evaluate, navigate, fill, savedState, waitFor, pause, base, debugPort, dialogs, realClick });