penpot/frontend/src/uxbox/util/webapi.cljs
2020-02-03 22:29:59 +01:00

68 lines
1.7 KiB
Clojure

;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) 2020 Andrey Antukh <niwi@niwi.nz>
(ns uxbox.util.webapi
"HTML5 web api helpers."
(:require
[beicon.core :as rx]
[cuerdas.core :as str]))
(defn read-file-as-text
[file]
(rx/create
(fn [sink]
(let [fr (js/FileReader.)]
(aset fr "onload" #(sink (rx/end (.-result fr))))
(.readAsText fr file)
(constantly nil)))))
(defn read-file-as-dataurl
[file]
(rx/create
(fn [sick]
(let [fr (js/FileReader.)]
(aset fr "onload" #(sick (rx/end (.-result fr))))
(.readAsDataURL fr file))
(constantly nil))))
(defn ^boolean blob?
[v]
(instance? js/Blob v))
(defn create-blob
"Create a blob from content."
([content]
(create-blob content "application/octet-stream"))
([content mtype]
(js/Blob. #js [content] #js {:type mtype})))
(defn revoke-uri
[url]
(assert (string? url) "invalid arguments")
(js/URL.revokeObjectURL url))
(defn create-uri
"Create a url from blob."
[b]
(assert (blob? b) "invalid arguments")
(js/URL.createObjectURL b))
;; (defn get-image-size
;; [file]
;; (letfn [(on-load [sink img]
;; (let [size [(.-width img) (.-height img)]]
;; (sink (rx/end size))))
;; (on-subscribe [sink]
;; (let [img (js/Image.)
;; uri (blob/create-uri file)]
;; (set! (.-onload img) (partial on-load sink img))
;; (set! (.-src img) uri)
;; #(blob/revoke-uri uri)))]
;; (rx/create on-subscribe)))