summaryrefslogtreecommitdiff
path: root/editor/ui.ml
blob: a4f54161e68d496eb110274bfc51dce342463801 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
open Brr
open Brr_note
module Js = Js_of_ocaml.Js

let popup
  : 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