diff --git a/site/src/components/StatsView.svelte b/site/src/components/StatsView.svelte index 315255d..1825531 100644 --- a/site/src/components/StatsView.svelte +++ b/site/src/components/StatsView.svelte @@ -106,6 +106,10 @@ const now = new Date(); const years = [now.getFullYear(), now.getFullYear()-1, now.getFullYear()-2, now.getFullYear()-3]; + function localISO(d: Date): string { + return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; + } + function getWeeks(year: number): string[][] { const jan1 = new Date(year, 0, 1); const dec31 = new Date(year, 11, 31); @@ -118,8 +122,7 @@ while (cur <= end) { const week: string[] = []; for (let d = 0; d < 7; d++) { - const iso = cur.toISOString().slice(0, 10); - week.push(cur.getFullYear() === year ? iso : ''); + week.push(cur.getFullYear() === year ? localISO(cur) : ''); cur.setDate(cur.getDate() + 1); } weeks.push(week); @@ -130,18 +133,6 @@ const DOW = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; const MONTHS = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; - function monthLabels(weeks: string[][]): Array<{ month: string; col: number }> { - const seen = new Set(); - return weeks.flatMap((week, i) => { - const day = week.find(d => d); - if (!day) return []; - const m = MONTHS[parseInt(day.slice(5, 7)) - 1]; - if (seen.has(m)) return []; - seen.add(m); - return [{ month: m, col: i }]; - }); - } - function cellTitle(date: string): string { if (!date) return ''; const sportMap = byDateBySport.get(date); @@ -205,7 +196,6 @@ {#each years as year} {@const weeks = getWeeks(year)} - {@const labels = monthLabels(weeks)} {@const yt = totalsByYear.get(year)} {#if yt}
@@ -217,41 +207,38 @@
-
- -
- {#each labels as { month, col }} - {month} +
+ +
+
+ {#each DOW as d, i} + + {i % 2 === 1 ? d : ''} + {/each} -
- - -
- -
- {#each DOW as d, i} - - {i % 2 === 1 ? d : ''} - + + {#each weeks as week, wi} + {@const firstDay = week.find(d => d)} + {@const prevFirstDay = wi > 0 ? weeks[wi - 1].find(d => d) : null} + {@const showMonth = firstDay && (!prevFirstDay || prevFirstDay.slice(5, 7) !== firstDay.slice(5, 7))} +
+
+ {#if showMonth} + + {MONTHS[parseInt(firstDay.slice(5, 7)) - 1]} + + {/if} +
+ {#each week as date} +
{/each}
- - {#each weeks as week} -
- {#each week as date} -
- {/each} -
- {/each} -
+ {/each}