From e5d4b142f6f7eb21c2b55edfbd472f503e7f3b89 Mon Sep 17 00:00:00 2001 From: Terry Truong Date: Sat, 7 Jan 2023 12:37:05 +1100 Subject: At each scale, always display a unit that includes MAX_DATE Without this, with a MAX_DATE of, say 2000/1/1, zooming out to scale 1e9 won't show events after 1 AD. --- src/lib.ts | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'src/lib.ts') diff --git a/src/lib.ts b/src/lib.ts index 3b0bc68..03b443d 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -582,14 +582,31 @@ export function dateToUnit(date: HistDate, scale: number): number { } } } -export function dateToScaleDate(date: HistDate, scale: number): HistDate { +export function dateToScaleDate(date: HistDate, scale: number, upward=false): HistDate { // Returns a date representing the unit on 'scale' that 'date' is within if (scale == DAY_SCALE){ return new CalDate(date.year, date.month, date.day); } else if (scale == MONTH_SCALE){ - return new CalDate(date.year, date.month, 1); + if (upward && date.day > 1){ + return stepDate(new CalDate(date.year, date.month, 1), MONTH_SCALE); + } else { + return new CalDate(date.year, date.month, 1); + } + } else if (scale == 1){ + if (upward && date.month > 1){ + return stepDate(new CalDate(date.year, 1, 1), 1); + } else { + if (date.year < MIN_CAL_YEAR){ + return new YearDate(date.year); + } else { + return new CalDate(date.year == 0 ? 1 : date.year, 1, 1); + } + } } else { - const year = Math.floor(date.year / scale) * scale; + let year = Math.floor(date.year / scale) * scale; + if (upward && moduloPositive(date.year, scale) > 0){ + year += scale; + } if (year < MIN_CAL_YEAR){ return new YearDate(year); } else { -- cgit v1.2.3