aboutsummaryrefslogtreecommitdiff
path: root/src/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/Lib')
-rw-r--r--src/Lib/Dom/Element.ml3
-rw-r--r--src/Lib/Dom/HA.ml2
-rw-r--r--src/Lib/File.ml12
-rw-r--r--src/Lib/Fun.ml2
-rw-r--r--src/Lib/URI.ml2
5 files changed, 21 insertions, 0 deletions
diff --git a/src/Lib/Dom/Element.ml b/src/Lib/Dom/Element.ml
index 3c63ef4..90c0321 100644
--- a/src/Lib/Dom/Element.ml
+++ b/src/Lib/Dom/Element.ml
@@ -27,6 +27,9 @@ external first_child : Dom.element -> Dom.element Js.Nullable.t = "firstChild"
external remove_child : Dom.element -> Dom.element -> unit = "removeChild"
[@@bs.send]
+external click : Dom.element -> unit = "click"
+ [@@bs.send]
+
let remove_first_child element =
match Js.toOption (first_child element) with
| Some child ->
diff --git a/src/Lib/Dom/HA.ml b/src/Lib/Dom/HA.ml
index 53fb84d..ce02f2a 100644
--- a/src/Lib/Dom/HA.ml
+++ b/src/Lib/Dom/HA.ml
@@ -39,3 +39,5 @@ let style v = H.TextAttr ("style", v)
let href v = H.TextAttr ("href", v)
let autocomplete v = H.TextAttr ("autocomplete", v)
+
+let download v = H.TextAttr ("download", v)
diff --git a/src/Lib/File.ml b/src/Lib/File.ml
new file mode 100644
index 0000000..0089001
--- /dev/null
+++ b/src/Lib/File.ml
@@ -0,0 +1,12 @@
+let download filename content =
+ let a =
+ H.a
+ [| HA.href ("data:text/plain;charset=utf-8," ^ URI.encode content)
+ ; HA.download filename
+ ; HA.style "display:none"
+ |]
+ [| |]
+ in
+ let () = Element.append_child Document.body a in
+ let () = Element.click a in
+ Element.remove_child Document.body a
diff --git a/src/Lib/Fun.ml b/src/Lib/Fun.ml
new file mode 100644
index 0000000..bf1eb38
--- /dev/null
+++ b/src/Lib/Fun.ml
@@ -0,0 +1,2 @@
+let flip f b a =
+ f a b
diff --git a/src/Lib/URI.ml b/src/Lib/URI.ml
new file mode 100644
index 0000000..705bc7b
--- /dev/null
+++ b/src/Lib/URI.ml
@@ -0,0 +1,2 @@
+external encode : string -> string = "encodeURIComponent"
+ [@@bs.val]