aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/components/TimeLine.vue9
-rw-r--r--src/lib.ts12
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;
diff --git a/src/lib.ts b/src/lib.ts
index e3d0cfc..bd454bc 100644
--- a/src/lib.ts
+++ b/src/lib.ts
@@ -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){