diff options
Diffstat (limited to 'editor/ui.ml')
-rwxr-xr-x | editor/ui.ml | 67 |
1 files changed, 63 insertions, 4 deletions
diff --git a/editor/ui.ml b/editor/ui.ml index 001ae98..a4f5416 100755 --- a/editor/ui.ml +++ b/editor/ui.ml @@ -1,8 +1,67 @@ open Brr +open Brr_note module Js = Js_of_ocaml.Js let popup - : unit -> El.t - = fun () -> - El.div - [] + : title:Jstr.t -> ?form:Forms.Events.t option -> 'a option Note.E.send -> El.t + = fun ~title ?(form = None) send -> + let _ = send in + + let close_btn = + El.span + ~at:At.[class' (Jstr.v "modal-close")] + [ El.txt' "×"] in + + Evr.endless_listen + (El.as_target close_btn) + Ev.click + (fun _ -> send None); + + let container = match form with + | None -> El.div + | Some _ -> El.form + + and body = match form with + | None -> El.div [] + | Some (_, content) -> content + + + and footer = match form with + | None -> El.txt Jstr.empty + | Some (values, _) -> + + + let log = Note.S.log values (fun _ -> ()) in + + let btn = El.input () + ~at:At.[type' (Jstr.v "submit")] in + + Evr.endless_listen + (El.as_target btn) + Ev.click + (fun _ -> Note.Logr.force log + ; send (Some (Note.S.value values))); + + El.div ~at:At.[class' (Jstr.v "row")] + [ btn ] + in + + let el = El.div + ~at:At.[class' (Jstr.v "modal")] + [ container + ~at:At.[class' (Jstr.v "modal-content")] + [ El.div + ~at:At.[class' (Jstr.v "modal-header")] + [ close_btn + ; El.h3 + [ El.txt title ]] + ; El.div + ~at:At.[class' (Jstr.v "modal-body")] + [ body ] + ; El.div + ~at:At.[class' (Jstr.v "modal-footer")] + [ footer ]]] in + + El.append_children (Document.body G.document) + [ el ] + ; el |