aboutsummaryrefslogtreecommitdiff
path: root/src/View
diff options
context:
space:
mode:
Diffstat (limited to 'src/View')
-rw-r--r--src/View/Timer.elm120
1 files changed, 78 insertions, 42 deletions
diff --git a/src/View/Timer.elm b/src/View/Timer.elm
index 604b045..100514a 100644
--- a/src/View/Timer.elm
+++ b/src/View/Timer.elm
@@ -5,15 +5,17 @@ module View.Timer
import Html (..)
import Html.Attributes (..)
import Html.Events (..)
-import String
import Time (Time)
import Signal
import Maybe
import List
+import String
import Model.Model (..)
import Model.Timer (..)
-import Model.TimerEdition (..)
+import Model.Edition.Edition (..)
+import Model.Edition.NameEdition (..)
+import Model.Edition.TimeEdition (..)
import Model.TimerState (..)
import Model.Id (..)
@@ -28,54 +30,75 @@ timerView : Model -> (Id, Timer) -> Html
timerView model (id, timer) =
div
[ class "timer" ]
- [ nameBlock (id, timer)
- , timeBlock model (id, timer)
+ [ renderMaybeEdition model id Name (nameBlockReadOnly id timer) (nameBlockEdition id timer)
+ , renderMaybeEdition model id Time (timeBlockReadOnly id timer) (timeBlockEdition timer)
, playPauseBlock (id, timer)
, stopBlock (id, timer)
, removeBlock (id, timer)
]
-nameBlock : (Id, Timer) -> Html
-nameBlock (id, timer) =
+nameBlockReadOnly : Id -> Timer -> Html
+nameBlockReadOnly id timer =
button
- [ class "name block" ]
- [ text timer.name ]
+ [ class "name block"
+ , onClick (Signal.send updates (Edit id Name))
+ ]
+ [ text (timerName id timer) ]
-timeBlock : Model -> (Id, Timer) -> Html
-timeBlock model (id, timer) =
- let maybeEdition = filterMaybe (\te -> te.id == id) model.timerEdition
- in case maybeEdition of
- Just edition ->
- let isEmptyEdition = List.isEmpty edition.numbers
- in button
- [ [ (True, "time block edition")
- , (isEmptyEdition, "empty")
- ]
- |> activatedClasses
- , onClick (Signal.send updates ValidTimerEdition)
- ]
- [ if isEmptyEdition
- then
- timeWithProgressBar timer
- else
- text (editionView edition.numbers)
- ]
+nameBlockEdition : Id -> Timer -> Edition -> Html
+nameBlockEdition id timer edition =
+ button
+ [ [ (True, "name block edition")
+ , (List.isEmpty edition.chars, "empty")
+ ]
+ |> activatedClasses
+ , onClick (Signal.send updates ValidEdition)
+ ]
+ [ if List.isEmpty edition.chars
+ then
+ text (timerName id timer)
+ else
+ edition.chars
+ |> renderNameEdition
+ |> text
+ ]
- Nothing ->
- button
- [ [ (True, "time block")
- , (timer.state == Ringing, "isRinging")
- , (timer.state == Running, "isRunning")
- ]
- |> activatedClasses
- , onClick
- <| if timer.state == Ringing
- then Signal.send updates (UpdateTimer id Stop)
- else Signal.send updates (EditTimer id)
- ]
- [ timeWithProgressBar timer ]
-
-editionView : Numbers -> String
+timerName : Id -> Timer -> String
+timerName id = Maybe.withDefault ("Timer " ++ toString id) << .name
+
+timeBlockReadOnly : Id -> Timer -> Html
+timeBlockReadOnly id timer =
+ button
+ [ [ (True, "time block")
+ , (timer.state == Ringing, "isRinging")
+ , (timer.state == Running, "isRunning")
+ ]
+ |> activatedClasses
+ , onClick
+ <| if timer.state == Ringing
+ then Signal.send updates (UpdateTimer id Stop)
+ else Signal.send updates (Edit id Time)
+ ]
+ [ timeWithProgressBar timer ]
+
+timeBlockEdition : Timer -> Edition -> Html
+timeBlockEdition timer edition =
+ let isEmptyEdition = List.isEmpty edition.chars
+ in button
+ [ [ (True, "time block edition")
+ , (isEmptyEdition, "empty")
+ ]
+ |> activatedClasses
+ , onClick (Signal.send updates ValidEdition)
+ ]
+ [ if isEmptyEdition
+ then
+ timeWithProgressBar timer
+ else
+ text (editionView edition.chars)
+ ]
+
+editionView : List Char -> String
editionView numbers =
let (minutes, seconds) = toMinutesAndSeconds numbers
in minutes ++ " : " ++ seconds
@@ -134,3 +157,16 @@ removeBlock (id, timer) =
, onClick (Signal.send updates (RemoveTimer id))
]
[ i [ class "fa fa-fw fa-remove" ] [] ]
+
+renderMaybeEdition : Model -> Id -> Kind -> Html -> (Edition -> Html) -> Html
+renderMaybeEdition model id kind readOnlyView editionView =
+ let maybeEdition = filterMaybe (\edition -> edition.id == id) model.edition
+ in case maybeEdition of
+ Just edition ->
+ if edition.kind == kind
+ then
+ editionView edition
+ else
+ readOnlyView
+ Nothing ->
+ readOnlyView