aboutsummaryrefslogtreecommitdiff
path: root/lib/elements/transfert.ml
blob: 3001e3278619b688236f4059bf30bb2a1dffc742 (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
open Brr

let send_raw
  : filename:Jstr.t -> Jstr.t -> unit
  = fun ~filename data ->
    (* 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

(** Send a file to the user. *)
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 data = Jv.to_jstr @@ Jv.call
        (Jv.of_string "data:")
        "concat"
        [| Jv.of_jstr mime_type
         ; Jv.of_jstr (Jstr.v ";base64,")
         ; base64data
        |] in

    send_raw
      ~filename
      data