summaryrefslogtreecommitdiff
path: root/animism-align/frontend/views/align/align.util.js
diff options
context:
space:
mode:
Diffstat (limited to 'animism-align/frontend/views/align/align.util.js')
-rw-r--r--animism-align/frontend/views/align/align.util.js28
1 files changed, 28 insertions, 0 deletions
diff --git a/animism-align/frontend/views/align/align.util.js b/animism-align/frontend/views/align/align.util.js
new file mode 100644
index 0000000..32cbc35
--- /dev/null
+++ b/animism-align/frontend/views/align/align.util.js
@@ -0,0 +1,28 @@
+import { ZOOM_STEPS } from './constants'
+import { clamp } from '../../util'
+
+export const positionToTime = (y, { start_ts, zoom, duration }) => {
+ const secondsPerPixel = ZOOM_STEPS[zoom] * 0.1
+ const widthTimeDuration = window.innerHeight * secondsPerPixel
+ const timeMin = start_ts
+ const timeMax = Math.min(start_ts + widthTimeDuration, duration)
+ const timeWidth = timeMax - timeMin
+ return clamp(y * secondsPerPixel + start_ts, 0, timeMax)
+}
+
+export const timeToPosition = (ts, { start_ts, zoom, duration }) => {
+ const height = window.innerHeight
+ const secondsPerPixel = ZOOM_STEPS[zoom] * 0.1
+ const widthTimeDuration = height * secondsPerPixel
+ const timeMin = start_ts
+ const timeMax = Math.min(start_ts + widthTimeDuration, duration)
+ const timeWidth = timeMax - timeMin
+ const timeHalfHeight = height * secondsPerPixel / 2
+ if (ts < timeMin - timeHalfHeight) {
+ return -9999
+ }
+ if (ts > timeMax) {
+ return -9999
+ }
+ return (ts - timeMin) / timeWidth * height
+}