`;
const res = await fetch("/api/paddeln/ergebnisse.php");
const data = await res.json();
let html = "";
if (Object.keys(data).length === 0) {
html = '
Noch keine Teilnehmer vorhanden.
';
} else {
for (const [kat, teilnehmer] of Object.entries(data)) {
html += `
${kat}
#
Name
Best‑Zeit
Alle Versuche
`;
// Teilnehmer in ein Array umwandeln und nach best_time sortieren
const sortedTeilnehmer = Object.values(teilnehmer).sort((a, b) => {
if (a.best_time === b.best_time) return 0;
if (a.best_time === null || a.best_time === undefined) return 1;
if (b.best_time === null || b.best_time === undefined) return -1;
// Numerischer Vergleich der Zeiten (aufsteigend)
return parseFloat(a.best_time) - parseFloat(b.best_time);
});
let rank = 1;
let displayRank = 1;
let previousTime = null;
for (const t of sortedTeilnehmer) {
if (t.best_time) {
// Wenn es nicht der erste Eintrag ist und die Zeit gleich dem Vorgänger ist
if (previousTime !== null && parseFloat(t.best_time) === parseFloat(previousTime)) {
// Behalte displayRank bei (geteilter Platz)
} else {
// Ansonsten bekommt er den aktuell hochgezählten Rang
displayRank = rank;
}
previousTime = t.best_time;
rank++; // Zählt im Hintergrund immer um 1 weiter (für den echten "nächsten" Platz)
}
const bestTimeDisp = t.best_time ? `${this.formatSec(t.best_time)}` : "--";
const otherRuns = t.all_runs.map((run) => this.formatSec(run)).join(" | ");
html += `
${t.best_time ? displayRank : ""}
${t.name}
${bestTimeDisp}
${otherRuns}
`;
}
html += `
`;
}
}
this._container.innerHTML = html;
} catch (e) {
console.error("Fehler beim Laden der Ergebnisse", e);
this._container.innerHTML = '