fix: avoid overlapping month labels in heatmap SVG

This commit is contained in:
2026-04-20 12:05:06 -04:00
parent b73f851415
commit bebd96cf6d
+22 -8
View File
@@ -58,26 +58,40 @@ def weekday_row(day):
def month_labels(grid_start, visible_start, grid_end): def month_labels(grid_start, visible_start, grid_end):
labels = [] labels = []
total_weeks = ((grid_end - grid_start).days // 7) + 1 total_weeks = ((grid_end - grid_start).days // 7) + 1
first_visible_month = visible_start.strftime("%b")
first_visible_week = ((visible_start - grid_start).days // 7)
for week in range(total_weeks): for week in range(total_weeks):
week_start = grid_start + timedelta(days=week * 7) week_start = grid_start + timedelta(days=week * 7)
week_label = None label = None
for offset in range(7): for offset in range(7):
day = week_start + timedelta(days=offset) day = week_start + timedelta(days=offset)
if day < visible_start: if day < visible_start:
continue continue
if week == 0 and week_label is None:
week_label = day.strftime("%b")
if day.day == 1: if day.day == 1:
week_label = day.strftime("%b") label = day.strftime("%b")
break break
if week_label is not None: if week == first_visible_week and not labels:
if not labels or labels[-1][1] != week_label: next_month_close = False
labels.append((week, week_label)) for future_week in range(week + 1, min(week + 3, total_weeks)):
future_start = grid_start + timedelta(days=future_week * 7)
for offset in range(7):
day = future_start + timedelta(days=offset)
if day >= visible_start and day.day == 1:
next_month_close = True
break
if next_month_close:
break
if not next_month_close:
label = first_visible_month
if label is not None:
if not labels or labels[-1][1] != label:
labels.append((week, label))
return labels return labels