let format_float precision f = let str = Js.Float.toString f in match Js.String.split "." str with | [| a ; b |] -> a ^ "." ^ (Js.String.substring ~from:0 ~to_:precision b) | _ -> str external btoa : string -> string = "btoa" [@@bs.val] [@@bs.scope "window"] external atob : string -> string = "atob" [@@bs.val] [@@bs.scope "window"] external unescape : string -> string = "unescape" [@@bs.val] external escape : string -> string = "escape" [@@bs.val] external encodeURIComponent : string -> string = "encodeURIComponent" [@@bs.val] external decodeURIComponent : string -> string = "decodeURIComponent" [@@bs.val] let encode str = str |> encodeURIComponent |> unescape |> btoa let decode str = str |> atob |> escape |> decodeURIComponent