From 0c8b0a7513ccf457556db1486beb092265c594a3 Mon Sep 17 00:00:00 2001 From: Terry Truong Date: Sat, 15 Oct 2022 14:15:46 +1100 Subject: Make BaseLine spans use TimeLine start/end offsets Change TimelineRange to hold years not HistDates --- src/App.vue | 12 +++++++----- src/components/BaseLine.vue | 6 +++--- src/components/TimeLine.vue | 8 +++++++- src/lib.ts | 4 ++-- 4 files changed, 19 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/App.vue b/src/App.vue index 278ef63..1eae198 100644 --- a/src/App.vue +++ b/src/App.vue @@ -19,7 +19,7 @@
@@ -60,16 +60,18 @@ onMounted(updateAreaDims) // Timeline data const timelineRanges: Ref = ref([]); +const INITIAL_START_DATE = new HistDate(1900, 1, 1); +const INITIAL_END_DATE = new HistDate(2000, 1, 1); let nextTimelineId = 1; function addNewTimelineRange(){ - timelineRanges.value.push({id: nextTimelineId, start: new HistDate(1900, 1, 1), end: new HistDate(2000, 1, 1)}); + timelineRanges.value.push({id: nextTimelineId, startYear: 1900, endYear: 2000}); nextTimelineId++; } addNewTimelineRange(); -function onRangeChg(newBounds: [HistDate, HistDate], idx: number){ +function onRangeChg(newBounds: [number, number], idx: number){ let range = timelineRanges.value[idx]; - range.start = newBounds[0]; - range.end = newBounds[1]; + range.startYear = newBounds[0]; + range.endYear = newBounds[1]; } // For timeline addition/removal diff --git a/src/components/BaseLine.vue b/src/components/BaseLine.vue index ccadb0b..e2cf7c8 100644 --- a/src/components/BaseLine.vue +++ b/src/components/BaseLine.vue @@ -80,9 +80,9 @@ const labelStyles = computed((): Record => ({ function spanStyles(range: TimelineRange){ let styles: Record; let availLen = props.vert ? height.value : width.value; - // Determine positions in full timeline (only considers year values) - let startFrac = (range.start.year - MIN_DATE.year) / (MAX_DATE.year - MIN_DATE.year); - let lenFrac = (range.end.year - range.start.year) / (MAX_DATE.year - MIN_DATE.year); + // Determine positions in full timeline + let startFrac = (range.startYear - MIN_DATE.year) / (MAX_DATE.year - MIN_DATE.year); + let lenFrac = (range.endYear - range.startYear) / (MAX_DATE.year - MIN_DATE.year); let startPx = Math.max(0, availLen * startFrac); // Prevent negatives due to end-padding let lenPx = Math.min(availLen - startPx, availLen * lenFrac); lenPx = Math.max(1, lenPx); // Prevent zero length diff --git a/src/components/TimeLine.vue b/src/components/TimeLine.vue index 22069bc..281f4e4 100644 --- a/src/components/TimeLine.vue +++ b/src/components/TimeLine.vue @@ -630,7 +630,13 @@ function onShiftWheel(evt: WheelEvent){ // For bound-change signalling watch(startDate, () => { - emit('range-chg', [startDate.value, endDate.value]); + let startYear = startDate.value.year; + let endYear = endDate.value.year; + if (scale.value != MONTH_SCALE && scale.value != DAY_SCALE){ // Possibly incorporate offsets + startYear -= startOffset.value * scale.value; + endYear += endOffset.value * scale.value; + } + emit('range-chg', [startYear, endYear]); }); // For skipping transitions on startup (and on horz/vert swap) diff --git a/src/lib.ts b/src/lib.ts index bd454bc..c4703f2 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -261,8 +261,8 @@ export function getScaleRatio(scale: number, scale2: number){ // For sending timeline-bound data to BaseLine export type TimelineRange = { id: number, - start: HistDate, - end: HistDate, + startYear: number, + endYear: number, }; export type HistEvent = { -- cgit v1.2.3