aboutsummaryrefslogtreecommitdiff
path: root/lib/elements/transfert.ml
blob: ddeecd056372a15014b88a7aabb6cb13332430ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
open Js_of_ocaml
open Brr

let send
  : mime_type:Jstr.t -> filename:Jstr.t -> Jstr.t -> unit
  = fun ~mime_type ~filename content ->
    let btoa = Jv.get Jv.global "btoa" in
    let base64data = Jv.apply btoa
        [| Jv.of_jstr content |] in

    let mime =   (Jv.Id.(of_jv @@ to_jv mime_type))
    and base64 = (Jv.Id.(of_jv @@ to_jv base64data))
    in

    let data = (Js.string "data:")##concat_3 mime (Js.string ";base64,") base64 in

    (* Create the link to download the the element, and simulate a click on it *)
    let a = El.a
        ~at:At.[ href Jv.Id.(of_jv @@ to_jv data)
               ; v (Jstr.v "download") filename ]
        [] in
    El.click a