From 20c287378ad93f08b3f2aef63719e3986e5c488a Mon Sep 17 00:00:00 2001 From: Daniel Barlow Date: Fri, 22 Nov 2024 17:43:33 +0000 Subject: [PATCH] extract function for drag finish --- frontend/src/Main.elm | 64 +++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/frontend/src/Main.elm b/frontend/src/Main.elm index 257e4cc..d66ae73 100644 --- a/frontend/src/Main.elm +++ b/frontend/src/Main.elm @@ -138,7 +138,7 @@ dragDelta target d = else (0, 0) _ -> (0, 0) -subTuple (fx,fy) (tx,ty) = (fx-tx, fy-ty) +subtractTuple (fx,fy) (tx,ty) = (fx-tx, fy-ty) type TrackState = Empty | Loading | Failure String | Present (List Point) @@ -197,6 +197,37 @@ update : Msg -> Model -> (Model, Cmd Msg) update msg model = (updateModel msg model, Cmd.none) +secondsFromPixels model seconds = + (toFloat seconds) * model.duration / portalWidth + +handleDragFinish model target (x, y) = + case target of + Map -> + { model | + centre = translatePixels model.centre (toZoom model.zoom) (x, y) + } + Graph -> + { model | + startTime = + model.startTime + secondsFromPixels model x + } + StartMark -> + { model | + markedTime = + let deltat = secondsFromPixels model x + (s, d) = model.markedTime + in (s - deltat, d + deltat) + } + EndMark -> + { model | + markedTime = + let deltat = secondsFromPixels model x + (s, d) = model.markedTime + in (s, d - deltat) + } + NoTarget -> model + + updateModel msg model = case msg of MapScale y -> @@ -210,35 +241,8 @@ updateModel msg model = DragFinish (x,y) -> case model.drag of - Dragging Map start end -> - { model | - drag = None, - centre = translatePixels model.centre (toZoom model.zoom) (subTuple start end) } - Dragging Graph start end -> - { model | - drag = None, - startTime = - let (delta, _) = subTuple start end - in model.startTime + toFloat delta * model.duration / portalWidth - } - Dragging StartMark start end -> - { model | - drag = None, - markedTime = - let delta = Tuple.first (subTuple start end) - deltat = toFloat delta * model.duration / portalWidth - (s, d) = model.markedTime - in (s - deltat, d + deltat) - } - Dragging EndMark start end -> - { model | - drag = None, - markedTime = - let delta = Tuple.first (subTuple start end) - deltat = toFloat delta * model.duration / portalWidth - (s, d) = model.markedTime - in (s, d - deltat) - } + Dragging target start end -> + handleDragFinish { model | drag = None } target (subtractTuple start end) _ -> model TimeScale factor ->