summaryrefslogtreecommitdiff
path: root/editor/forms/ui.ml
diff options
context:
space:
mode:
Diffstat (limited to 'editor/forms/ui.ml')
-rwxr-xr-xeditor/forms/ui.ml58
1 files changed, 31 insertions, 27 deletions
diff --git a/editor/forms/ui.ml b/editor/forms/ui.ml
index d8a259a..53039c4 100755
--- a/editor/forms/ui.ml
+++ b/editor/forms/ui.ml
@@ -3,8 +3,8 @@ open Brr_note
module Js = Js_of_ocaml.Js
let popup
- : title:Jstr.t -> ?form:Events.t option -> Events.event option Note.E.send -> El.t
- = fun ~title ?(form = None) send ->
+ : ?form:('a Note.signal * El.t) option -> title:Jstr.t -> 'a option Note.event
+ = fun ?(form = None) ~title ->
(* Ensure we keep a track for the signal event.
@@ -17,15 +17,10 @@ let popup
let close_btn =
El.span
~at:At.[class' (Jstr.v "modal-close")]
- [ El.txt' "×"] in
+ [ El.txt' "×"]
- Evr.endless_listen
- (El.as_target close_btn)
- Ev.click
- (fun _ ->
- Option.iter Note.Logr.destroy log_opt;
- send None
- );
+ and submit_btn = El.input ()
+ ~at:At.[type' (Jstr.v "submit")] in
let container = match form with
| None -> El.div
@@ -37,23 +32,12 @@ let popup
and footer = match form with
| None -> El.txt Jstr.empty
- | Some (values, _) ->
+ | Some _ ->
- let btn = El.input ()
- ~at:At.[type' (Jstr.v "submit")] in
-
- Evr.endless_listen
- (El.as_target btn)
- Ev.click
- (fun _ ->
- Option.iter Note.Logr.force log_opt;
- let form_content = (Note.S.value values) in
- Option.iter Note.Logr.destroy log_opt;
- send (Some form_content));
-
- El.div [ btn ]
+ El.div [ submit_btn ]
~at:At.[class' (Jstr.v "row")] in
+ (* HTML Element creation *)
let el = El.div
~at:At.[class' (Jstr.v "modal")]
[ container
@@ -70,6 +54,26 @@ let popup
~at:At.[class' (Jstr.v "modal-footer")]
[ footer ]]] in
- El.append_children (Document.body G.document)
- [ el ]
- ; el
+ let () = El.append_children (Document.body G.document)
+ [ el ] in
+
+ (* Event handler *)
+ let close_event = Evr.on_el
+ Ev.click
+ (fun _ ->
+ El.remove el;
+ Option.iter Note.Logr.destroy log_opt;
+ None)
+ close_btn
+
+ and submit_event = Evr.on_el
+ Ev.click
+ (fun _ ->
+ El.remove el;
+ Option.iter Note.Logr.destroy log_opt;
+ Option.map (fun v -> Note.S.value (fst v)) form)
+ submit_btn in
+
+ Note.E.select
+ [ close_event
+ ; submit_event ]