diff options
Diffstat (limited to 'src/config.ml')
-rw-r--r-- | src/config.ml | 94 |
1 files changed, 0 insertions, 94 deletions
diff --git a/src/config.ml b/src/config.ml deleted file mode 100644 index f8e20f9..0000000 --- a/src/config.ml +++ /dev/null @@ -1,94 +0,0 @@ -(* Model *) - -type config = { - prepare : int; - tabatas : int; - cycles : int; - work : int; - rest : int; -} - -(* State *) - -let config = ref { prepare = 10; tabatas = 4; cycles = 8; work = 20; rest = 10 } - -let onStart : (unit -> unit) ref = ref (fun () -> ()) - -(* Elements *) - -let formElt = Document.querySelectorUnsafe "#g-Form" - -let prepareElt = Document.querySelectorUnsafe "#g-Form__Prepare" - -let tabatasElt = Document.querySelectorUnsafe "#g-Form__Tabatas" - -let cyclesElt = Document.querySelectorUnsafe "#g-Form__Cycles" - -let workElt = Document.querySelectorUnsafe "#g-Form__Work" - -let restElt = Document.querySelectorUnsafe "#g-Form__Rest" - -let durationElt = Document.querySelectorUnsafe "#g-Form__DurationValue" - -(* Duration *) - -let getDuration () = - let { prepare; tabatas; cycles; work; rest } = !config in - tabatas * (prepare + (cycles * (work + rest))) - -let writeDuration () = - let duration = getDuration () in - Element.setInnerText durationElt (Duration.prettyPrint duration) - -(* Write to DOM *) - -let writeToDom () = - let () = Element.setValue prepareElt (Js.Int.toString !config.prepare) in - let () = Element.setValue tabatasElt (Js.Int.toString !config.tabatas) in - let () = Element.setValue cyclesElt (Js.Int.toString !config.cycles) in - let () = Element.setValue workElt (Js.Int.toString !config.work) in - let () = Element.setValue restElt (Js.Int.toString !config.rest) in - writeDuration () - -(* Update from DOM *) - -let listenTo inputElt update = - Element.addEventListener inputElt "input" (fun e -> - match - EventTarget.value (Event.target e) |> Option.flatMap Belt.Int.fromString - with - | Some n -> - let () = config := update !config n in - writeDuration () - | None -> ()) - -let listenToChanges () = - let () = listenTo prepareElt (fun config n -> { config with prepare = n }) in - let () = listenTo tabatasElt (fun config n -> { config with tabatas = n }) in - let () = listenTo cyclesElt (fun config n -> { config with cycles = n }) in - let () = listenTo workElt (fun config n -> { config with work = n }) in - listenTo restElt (fun config n -> { config with rest = n }) - -(* Setup *) - -let setup onTimerStart = - let () = onStart := onTimerStart in - let () = writeToDom () in - listenToChanges () - -(* Start *) - -let startTimer () = - let () = Element.setStyle formElt "display: none" in - !onStart () - -(* Hide / show *) - -let show () = Element.setStyle formElt "display: flex" - -let hide () = Element.setStyle formElt "display: none" - -let () = - Element.addEventListener formElt "submit" (fun e -> - let () = Event.preventDefault e in - !onStart ()) |