fix: avoid overlapping month labels in heatmap SVG
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user