summaryrefslogtreecommitdiff
path: root/viz.js/process/process.ml
blob: ef23b78d84fe2dd826d3688385c4db112897d738 (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
open Js_of_ocaml

class type viz = object
  (* PNG output *)
  method renderImageElement: Js.js_string Js.t -> (Dom_html.imageElement Js.t, unit) Promise.promise Js.meth
  (* SVG output *)
  method renderSVGElement: Js.js_string Js.t -> (Dom_svg.svgElement Js.t, unit) Promise.promise Js.meth

  method renderString: Js.js_string Js.t -> (Js.js_string Js.t, unit) Promise.promise Js.meth
end

type t = Js.js_string Js.t * Js.js_string Js.t

let do_action
  : viz Js.t -> Js.js_string Js.t -> (unit, unit) Promise.promise
  = fun v text ->

    if text##.length != 0 then (
      let gv = Formatter.convert text in
      let promise =
        (try v##renderString gv
         with _ -> Promise.reject ()
        ) in
      Promise.then_map
        ~on_fulfilled:(fun svg -> Worker.post_message ((gv, svg):t))
        ~on_rejected:(fun _ -> ())
        promise
    ) else
      Promise.reject ()