diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/TimeLine.vue | 9 | ||||
| -rw-r--r-- | src/lib.ts | 12 |
2 files changed, 17 insertions, 4 deletions
diff --git a/src/components/TimeLine.vue b/src/components/TimeLine.vue index 0c0e6d6..8301dba 100644 --- a/src/components/TimeLine.vue +++ b/src/components/TimeLine.vue @@ -414,6 +414,8 @@ function zoomTimeline(zoomRatio: number){ newStartOffset /= oldUnitsPerNew; newEndOffset /= oldUnitsPerNew; // Shift starting and ending points to align with new scale + // Note: There is some distortion due to not accounting for no year 0 CE here + // But the result seems tolerable, and resolving it adds a fair bit of code complexity let newStartSubUnits = (scale.value == DAY_SCALE) ? getDaysInMonth(newStart.year, newStart.month) : (scale.value == MONTH_SCALE) ? 12 : @@ -455,6 +457,13 @@ function zoomTimeline(zoomRatio: number){ } else { newStart.year = Math.floor(newStart.year / newScale) * newScale; newEnd.year = Math.floor(newEnd.year / newScale) * newScale; + // Account for no 0 CE + if (newStart.year == 0){ + newStart.year = 1; + } + if (newEnd.year == 0){ + newEnd.year = 1; + } } // scaleIdx.value -= 1; @@ -216,12 +216,16 @@ export function stepDate(date: HistDate, scale: number, {forward=true, count=1, let newYear; if (forward){ newYear = newDate.year + scale; - if (newDate.year < 0 && newYear >= 0){ // If different sign, account for there being no 0 CE - newYear += 1; + if (newYear == 0){ // Account for there being no 0 CE + newYear = 1; + } else if (newDate.year == 1 && scale > 1){ + newYear -= 1; } } else { newYear = newDate.year - scale; - if (newDate.year > 0 && newYear <= 0){ + if (newYear == 0 && scale > 1){ + newYear = 1; + } else if (newDate.year == 1){ newYear -= 1; } } @@ -236,7 +240,7 @@ export function inDateScale(date: HistDate, scale: number): boolean { } else if (scale == MONTH_SCALE){ return date.day == 1; } else { - return date.year % scale == 0 && date.month == 1 && date.day == 1; + return (date.year == 1 || date.year % scale == 0) && date.month == 1 && date.day == 1; } } export function getScaleRatio(scale: number, scale2: number){ |
