fix stats sida
This commit is contained in:
@@ -25,7 +25,7 @@ Current layouts for race operation, live presentation, training and system confi
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="50%"><a href="docs/screenshots/training-overview.jpg"><img src="docs/screenshots/training-overview.jpg" alt="Practice statistics overview" /></a><br><strong>Practice statistics overview</strong></td>
|
<td width="50%"><a href="docs/screenshots/training-overview.jpg"><img src="docs/screenshots/training-overview.jpg" alt="Practice statistics overview" /></a><br><strong>Practice statistics overview</strong></td>
|
||||||
<td width="50%"><a href="docs/screenshots/training-extra-stats.jpg"><img src="docs/screenshots/training-extra-stats.jpg" alt="Extra practice statistics with pace heatmap and stint analysis" /></a><br><strong>Extra practice statistics</strong></td>
|
<td width="50%"><a href="docs/screenshots/training-extra-stats.jpg"><img src="docs/screenshots/training-extra-stats.jpg" alt="Detailed practice statistics with pace heatmap and stint analysis" /></a><br><strong>Detailed practice statistics</strong></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="50%"><a href="docs/screenshots/judging-current.jpg"><img src="docs/screenshots/judging-current.jpg" alt="Judging and race corrections" /></a><br><strong>Judging and race corrections</strong></td>
|
<td width="50%"><a href="docs/screenshots/judging-current.jpg"><img src="docs/screenshots/judging-current.jpg" alt="Judging and race corrections" /></a><br><strong>Judging and race corrections</strong></td>
|
||||||
@@ -204,7 +204,7 @@ The personal profile can also store `Club` and `Country`. These values are inher
|
|||||||
- a positive personal summary that recognizes today's volume, personal best, pace, consistency, and endurance without ranking drivers
|
- a positive personal summary that recognizes today's volume, personal best, pace, consistency, and endurance without ranking drivers
|
||||||
- a recent club progress feed ordered by activity rather than driver position or lap-count ranking
|
- a recent club progress feed ordered by activity rather than driver position or lap-count ranking
|
||||||
- a configurable shared club target that counts every new valid practice lap from all registered drivers from the moment the target is created
|
- a configurable shared club target that counts every new valid practice lap from all registered drivers from the moment the target is created
|
||||||
- a collapsed Extra statistics section with active 30-minute pace blocks based on a trimmed average
|
- one collapsed More statistics section with active 30-minute pace blocks based on a trimmed average
|
||||||
- class-specific setup markers for tires, suspension, car changes, or custom notes, including an automatic 30-minute before/after comparison
|
- class-specific setup markers for tires, suspension, car changes, or custom notes, including an automatic 30-minute before/after comparison
|
||||||
- detailed stint analysis with normal pace, best 10-lap race pace, mistakes, consistency, and start/end development
|
- detailed stint analysis with normal pace, best 10-lap race pace, mistakes, consistency, and start/end development
|
||||||
- automatic progression levels at useful lap totals without manual setup
|
- automatic progression levels at useful lap totals without manual setup
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Aktuella layouter för racedrift, livevisning, träning och systemkonfiguration.
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="50%"><a href="docs/screenshots/training-overview.jpg"><img src="docs/screenshots/training-overview.jpg" alt="Träningsöversikt" /></a><br><strong>Träningsöversikt</strong></td>
|
<td width="50%"><a href="docs/screenshots/training-overview.jpg"><img src="docs/screenshots/training-overview.jpg" alt="Träningsöversikt" /></a><br><strong>Träningsöversikt</strong></td>
|
||||||
<td width="50%"><a href="docs/screenshots/training-extra-stats.jpg"><img src="docs/screenshots/training-extra-stats.jpg" alt="Extra träningsstatistik med tempo-heatmap och stintanalys" /></a><br><strong>Extra träningsstatistik</strong></td>
|
<td width="50%"><a href="docs/screenshots/training-extra-stats.jpg"><img src="docs/screenshots/training-extra-stats.jpg" alt="Fördjupad träningsstatistik med tempo-heatmap och stintanalys" /></a><br><strong>Fördjupad träningsstatistik</strong></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="50%"><a href="docs/screenshots/judging-current.jpg"><img src="docs/screenshots/judging-current.jpg" alt="Domare och racekorrigeringar" /></a><br><strong>Domare och racekorrigeringar</strong></td>
|
<td width="50%"><a href="docs/screenshots/judging-current.jpg"><img src="docs/screenshots/judging-current.jpg" alt="Domare och racekorrigeringar" /></a><br><strong>Domare och racekorrigeringar</strong></td>
|
||||||
@@ -193,7 +193,7 @@ Förarprofilen kan även lagra `Klubb` och `Land`. Värdena ärvs när ytterliga
|
|||||||
- en positiv personlig summering som ger kredit för dagens mängd, personbästa, tempo, jämnhet och uthållighet utan att ranka förare
|
- en positiv personlig summering som ger kredit för dagens mängd, personbästa, tempo, jämnhet och uthållighet utan att ranka förare
|
||||||
- klubbfeed sorterad på senaste aktivitet i stället för placering eller totalvarvsranking
|
- klubbfeed sorterad på senaste aktivitet i stället för placering eller totalvarvsranking
|
||||||
- konfigurerbart gemensamt klubbmål som räknar alla nya giltiga träningsvarv från registrerade förare från det att målet skapas
|
- konfigurerbart gemensamt klubbmål som räknar alla nya giltiga träningsvarv från registrerade förare från det att målet skapas
|
||||||
- en hopfällbar Extra statistik-del med aktiva 30-minutersblock baserade på trimmat snitt
|
- en gemensam hopfällbar Mer statistik-del med aktiva 30-minutersblock baserade på trimmat snitt
|
||||||
- klasspecifika setupmarkörer för däck, dämpare, bilbyte eller egen notering med automatisk jämförelse 30 minuter före/efter
|
- klasspecifika setupmarkörer för däck, dämpare, bilbyte eller egen notering med automatisk jämförelse 30 minuter före/efter
|
||||||
- detaljerad stintanalys med normaltempo, bästa race pace över 10 varv, misstag, konsekvens och utveckling mellan start/slut
|
- detaljerad stintanalys med normaltempo, bästa race pace över 10 varv, misstag, konsekvens och utveckling mellan start/slut
|
||||||
- automatiska utvecklingsnivåer vid lämpliga varvantal utan manuell konfiguration
|
- automatiska utvecklingsnivåer vid lämpliga varvantal utan manuell konfiguration
|
||||||
|
|||||||
@@ -527,7 +527,7 @@ Owns:
|
|||||||
- positive-credit and optional daily-challenge cards based on the selected driver's own development
|
- positive-credit and optional daily-challenge cards based on the selected driver's own development
|
||||||
- recent club progress feed ordered by latest activity, without position numbers or cross-driver performance scoring
|
- recent club progress feed ordered by latest activity, without position numbers or cross-driver performance scoring
|
||||||
- shared club-goal create, celebrate, replace, and delete actions in the overview
|
- shared club-goal create, celebrate, replace, and delete actions in the overview
|
||||||
- collapsed Extra statistics with pace heatmap, setup-marker actions, weekday pace, featured stints, and an expandable full stint table
|
- one collapsed More statistics section containing pace heatmap, setup-marker actions, weekday pace, stint analysis, timing channels, and history
|
||||||
|
|
||||||
Mutations:
|
Mutations:
|
||||||
- replaces or appends entries in `state.training.goals`
|
- replaces or appends entries in `state.training.goals`
|
||||||
|
|||||||
12
src/app.js
12
src/app.js
@@ -444,9 +444,7 @@ const TRANSLATIONS = {
|
|||||||
"training.no_activity": "Ingen aktivitet ännu",
|
"training.no_activity": "Ingen aktivitet ännu",
|
||||||
"training.history": "Träningshistorik per dag",
|
"training.history": "Träningshistorik per dag",
|
||||||
"training.detailed_stats": "Mer statistik",
|
"training.detailed_stats": "Mer statistik",
|
||||||
"training.detailed_stats_hint": "Snitt, varvserie, mellantider, depåstopp och historik per träningsdag.",
|
"training.detailed_stats_hint": "Tempo per 30 minuter, setupändringar, stintanalys, mellantider, depåstopp och historik.",
|
||||||
"training.extra_stats": "Extra statistik",
|
|
||||||
"training.extra_stats_hint": "Tempo per 30 minuter, setupändringar och djupare stintanalys.",
|
|
||||||
"training.pace_30_title": "Tempo per aktivt 30-minutersblock",
|
"training.pace_30_title": "Tempo per aktivt 30-minutersblock",
|
||||||
"training.pace_30_hint": "Visar bara block med körning. Tempot är ett trimmat snitt så enstaka krascher inte styr hela blocket.",
|
"training.pace_30_hint": "Visar bara block med körning. Tempot är ett trimmat snitt så enstaka krascher inte styr hela blocket.",
|
||||||
"training.no_pace_data": "Det finns inte tillräckligt med varv för en tempokarta ännu.",
|
"training.no_pace_data": "Det finns inte tillräckligt med varv för en tempokarta ännu.",
|
||||||
@@ -1479,7 +1477,7 @@ const TRANSLATIONS = {
|
|||||||
"guide.training_14": "14. En personlig profil och mobillänk kan innehålla flera klasser, men 2WD/4WD-statistik, stints, varvtider och rekommendationer visas alltid separat per vald klass.",
|
"guide.training_14": "14. En personlig profil och mobillänk kan innehålla flera klasser, men 2WD/4WD-statistik, stints, varvtider och rekommendationer visas alltid separat per vald klass.",
|
||||||
"guide.training_15": "15. Utvecklingskortet jämför de senaste 30 giltiga varven med de föregående 30 inom samma klass. Positivt värde betyder snabbare snittempo eller mindre spridning; för litet underlag visas som insamling i stället för en osäker trend.",
|
"guide.training_15": "15. Utvecklingskortet jämför de senaste 30 giltiga varven med de föregående 30 inom samma klass. Positivt värde betyder snabbare snittempo eller mindre spridning; för litet underlag visas som insamling i stället för en osäker trend.",
|
||||||
"guide.training_16": "16. Achievements och klubbens framstegsfeed lyfter träningspass, varvmål, jämn körning och fullföljda femminutersstints. Feedens ordning följer senaste aktivitet och är inte en ranking mellan förare.",
|
"guide.training_16": "16. Achievements och klubbens framstegsfeed lyfter träningspass, varvmål, jämn körning och fullföljda femminutersstints. Feedens ordning följer senaste aktivitet och är inte en ranking mellan förare.",
|
||||||
"guide.training_17": "17. Öppna Extra statistik för tempo per aktivt 30-minutersblock. Tomma tider döljs och tempot använder trimmat snitt så enstaka krascher inte förvränger jämförelsen.",
|
"guide.training_17": "17. Öppna Mer statistik för tempo per aktivt 30-minutersblock, setupändringar, stintanalys, mellantider, depåstopp och historik. Tomma tider döljs och tempot använder trimmat snitt.",
|
||||||
"guide.training_18": "18. Före en biländring väljer du Ny setup, däck, dämpare, bil eller egen notering och klickar Markera ändring nu. Markören sparas endast för vald personlig profil och klass.",
|
"guide.training_18": "18. Före en biländring väljer du Ny setup, däck, dämpare, bil eller egen notering och klickar Markera ändring nu. Markören sparas endast för vald personlig profil och klass.",
|
||||||
"guide.training_19": "19. När det finns minst tre giltiga varv inom 30 minuter både före och efter markören visas förbättringen automatiskt. Jämför bara pass med liknande bana och förhållanden.",
|
"guide.training_19": "19. När det finns minst tre giltiga varv inom 30 minuter både före och efter markören visas förbättringen automatiskt. Jämför bara pass med liknande bana och förhållanden.",
|
||||||
"guide.training_20": "20. Stintanalysen använder glapp över två minuter som gräns. Normaltempo är trimmat snitt, misstag är varv över 15 procent långsammare än stintens median och Race pace 10 kräver tio sammanhängande varv.",
|
"guide.training_20": "20. Stintanalysen använder glapp över två minuter som gräns. Normaltempo är trimmat snitt, misstag är varv över 15 procent långsammare än stintens median och Race pace 10 kräver tio sammanhängande varv.",
|
||||||
@@ -1690,9 +1688,7 @@ const TRANSLATIONS = {
|
|||||||
"training.no_activity": "No activity yet",
|
"training.no_activity": "No activity yet",
|
||||||
"training.history": "Daily practice history",
|
"training.history": "Daily practice history",
|
||||||
"training.detailed_stats": "More statistics",
|
"training.detailed_stats": "More statistics",
|
||||||
"training.detailed_stats_hint": "Averages, lap streak, split timing, pit stops, and daily practice history.",
|
"training.detailed_stats_hint": "30-minute pace, setup changes, stint analysis, split timing, pit stops, and history.",
|
||||||
"training.extra_stats": "Extra statistics",
|
|
||||||
"training.extra_stats_hint": "30-minute pace, setup changes, and deeper stint analysis.",
|
|
||||||
"training.pace_30_title": "Pace per active 30-minute block",
|
"training.pace_30_title": "Pace per active 30-minute block",
|
||||||
"training.pace_30_hint": "Only blocks with driving are shown. Pace uses a trimmed average so isolated crashes do not control the block.",
|
"training.pace_30_hint": "Only blocks with driving are shown. Pace uses a trimmed average so isolated crashes do not control the block.",
|
||||||
"training.no_pace_data": "There are not enough laps for a pace map yet.",
|
"training.no_pace_data": "There are not enough laps for a pace map yet.",
|
||||||
@@ -2725,7 +2721,7 @@ const TRANSLATIONS = {
|
|||||||
"guide.training_14": "14. One personal profile and mobile link can contain several classes, but 2WD/4WD statistics, stints, lap times, and recommendations are always shown separately for the selected class.",
|
"guide.training_14": "14. One personal profile and mobile link can contain several classes, but 2WD/4WD statistics, stints, lap times, and recommendations are always shown separately for the selected class.",
|
||||||
"guide.training_15": "15. The development card compares the latest 30 valid laps with the preceding 30 in the same class. A positive value means faster average pace or a smaller spread; insufficient data is shown as collecting rather than an unreliable trend.",
|
"guide.training_15": "15. The development card compares the latest 30 valid laps with the preceding 30 in the same class. A positive value means faster average pace or a smaller spread; insufficient data is shown as collecting rather than an unreliable trend.",
|
||||||
"guide.training_16": "16. Achievements and the club progress feed recognize practice sessions, lap milestones, controlled driving, and completed five-minute stints. The feed follows recent activity and is not a ranking between drivers.",
|
"guide.training_16": "16. Achievements and the club progress feed recognize practice sessions, lap milestones, controlled driving, and completed five-minute stints. The feed follows recent activity and is not a ranking between drivers.",
|
||||||
"guide.training_17": "17. Open Extra statistics for pace per active 30-minute block. Empty periods are hidden and pace uses a trimmed average so isolated crashes do not distort the comparison.",
|
"guide.training_17": "17. Open More statistics for active 30-minute pace, setup changes, stint analysis, split timing, pit stops, and history. Empty periods are hidden and pace uses a trimmed average.",
|
||||||
"guide.training_18": "18. Before changing the car, select New setup, tires, suspension, car, or a custom note and click Mark change now. The marker is stored only for the selected personal profile and class.",
|
"guide.training_18": "18. Before changing the car, select New setup, tires, suspension, car, or a custom note and click Mark change now. The marker is stored only for the selected personal profile and class.",
|
||||||
"guide.training_19": "19. Once at least three valid laps exist within 30 minutes both before and after the marker, the change is compared automatically. Only compare runs with similar track conditions.",
|
"guide.training_19": "19. Once at least three valid laps exist within 30 minutes both before and after the marker, the change is compared automatically. Only compare runs with similar track conditions.",
|
||||||
"guide.training_20": "20. Stint analysis uses gaps longer than two minutes as boundaries. Normal pace is a trimmed average, mistakes are laps over 15 percent slower than the stint median, and Race pace 10 requires ten consecutive laps.",
|
"guide.training_20": "20. Stint analysis uses gaps longer than two minutes as boundaries. Normal pace is a trimmed average, mistakes are laps over 15 percent slower than the stint median, and Race pace 10 requires ten consecutive laps.",
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ function renderStintRow(row, { t, escapeHtml, formatLap, formatRaceClock }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function renderTrainingView(deps) {
|
export function renderTrainingView(deps) {
|
||||||
const extraStatsWasOpen = Boolean(document.getElementById("trainingExtraStats")?.open);
|
const moreStatsWasOpen = Boolean(document.getElementById("trainingMoreStats")?.open);
|
||||||
const {
|
const {
|
||||||
state,
|
state,
|
||||||
dom,
|
dom,
|
||||||
@@ -453,9 +453,9 @@ export function renderTrainingView(deps) {
|
|||||||
</div>
|
</div>
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details class="training-disclosure" id="trainingExtraStats" ${extraStatsWasOpen ? "open" : ""}>
|
<details class="training-disclosure" id="trainingMoreStats" ${moreStatsWasOpen ? "open" : ""}>
|
||||||
<summary>
|
<summary>
|
||||||
<span><strong>${escapeHtml(t("training.extra_stats"))}</strong><small>${escapeHtml(t("training.extra_stats_hint"))}</small></span>
|
<span><strong>${escapeHtml(t("training.detailed_stats"))}</strong><small>${escapeHtml(t("training.detailed_stats_hint"))}</small></span>
|
||||||
<span class="training-disclosure-arrow">+</span>
|
<span class="training-disclosure-arrow">+</span>
|
||||||
</summary>
|
</summary>
|
||||||
<div class="training-disclosure-body">
|
<div class="training-disclosure-body">
|
||||||
@@ -506,15 +506,6 @@ export function renderTrainingView(deps) {
|
|||||||
</div>
|
</div>
|
||||||
</details>` : ""}
|
</details>` : ""}
|
||||||
<p class="hint training-method-note">${escapeHtml(t("training.stats_method"))}</p>
|
<p class="hint training-method-note">${escapeHtml(t("training.stats_method"))}</p>
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details class="training-disclosure">
|
|
||||||
<summary>
|
|
||||||
<span><strong>${escapeHtml(t("training.detailed_stats"))}</strong><small>${escapeHtml(t("training.detailed_stats_hint"))}</small></span>
|
|
||||||
<span class="training-disclosure-arrow">+</span>
|
|
||||||
</summary>
|
|
||||||
<div class="training-disclosure-body">
|
|
||||||
<section class="training-insights">
|
<section class="training-insights">
|
||||||
${trainingInsight(t("training.average_lap"), formatLap(stats.averageLapMs))}
|
${trainingInsight(t("training.average_lap"), formatLap(stats.averageLapMs))}
|
||||||
${trainingInsight(t("training.recent_average"), formatLap(stats.recentAverageMs))}
|
${trainingInsight(t("training.recent_average"), formatLap(stats.recentAverageMs))}
|
||||||
|
|||||||
Reference in New Issue
Block a user