Skip to content
This repository was archived by the owner on Oct 4, 2020. It is now read-only.

Commit 1935f9c

Browse files
authored
Merge pull request #65 from nwolverson/filereader
Initial FileReader bindings
2 parents 9b40110 + 9cc9f74 commit 1935f9c

File tree

4 files changed

+125
-0
lines changed

4 files changed

+125
-0
lines changed

src/DOM/File/FileReader.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/* global FileReader */
2+
"use strict";
3+
4+
exports.fileReader = function () { return new FileReader(); };
5+
6+
exports.error = function (fr) { return function () { return fr.error; }; };
7+
8+
exports.readyStateImpl = function (fr) { return function () { return fr.readyState; }; };
9+
10+
exports.result = function (fr) { return function () { return fr.result; }; };
11+
12+
exports.abort = function (fr) { return function () { fr.abort(); }; };
13+
14+
exports.readAsText = function (blob) {
15+
return function (fr) {
16+
return function () {
17+
fr.readAsText(blob);
18+
};
19+
};
20+
};
21+
22+
exports.readAsArrayBuffer = function (blob) {
23+
return function (fr) {
24+
return function () {
25+
fr.readAsArrayBuffer(blob);
26+
};
27+
};
28+
};
29+
30+
exports.readAsDataURL = function (blob) {
31+
return function (fr) {
32+
return function () {
33+
fr.readAsDataURL(blob);
34+
};
35+
};
36+
};

src/DOM/File/FileReader.purs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
module DOM.File.FileReader
2+
( fileReader
3+
, readyState
4+
, result
5+
, abort
6+
, readAsText
7+
, readAsArrayBuffer
8+
, readAsDataURL
9+
) where
10+
11+
import Prelude
12+
import Control.Monad.Eff (Eff)
13+
import DOM (DOM)
14+
import DOM.File.FileReader.ReadyState (toEnumReadyState, ReadyState)
15+
import DOM.File.Types (Blob, FileReader)
16+
import Data.Foreign (Foreign)
17+
import Data.Maybe (fromJust)
18+
import Partial.Unsafe (unsafePartial)
19+
20+
foreign import fileReader :: forall eff. Eff (dom :: DOM | eff) FileReader
21+
22+
foreign import error :: forall eff. FileReader -> Eff (dom :: DOM | eff) Foreign
23+
24+
foreign import readyStateImpl :: forall eff. FileReader -> Eff (dom :: DOM | eff) Int
25+
26+
readyState :: forall eff. FileReader -> Eff (dom :: DOM | eff) ReadyState
27+
readyState fr = do
28+
rs <- readyStateImpl fr
29+
pure $ unsafePartial $ fromJust $ toEnumReadyState rs
30+
31+
foreign import result :: forall eff. FileReader -> Eff (dom :: DOM | eff) Foreign
32+
33+
foreign import abort :: FileReader -> forall eff. Eff (dom :: DOM | eff) Unit
34+
35+
foreign import readAsText :: Blob -> FileReader -> forall eff. Eff (dom :: DOM | eff) Unit
36+
37+
foreign import readAsArrayBuffer :: Blob -> FileReader -> forall eff. Eff (dom :: DOM | eff) Unit
38+
39+
foreign import readAsDataURL :: Blob -> FileReader -> forall eff. Eff (dom :: DOM | eff) Unit
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
module DOM.File.FileReader.ReadyState where
2+
3+
import Prelude
4+
import Data.Enum (Cardinality(..), class BoundedEnum, defaultPred, defaultSucc, class Enum)
5+
import Data.Maybe (Maybe(..))
6+
7+
data ReadyState
8+
= EMPTY
9+
| LOADING
10+
| DONE
11+
12+
derive instance eqReadyState :: Eq ReadyState
13+
derive instance ordReadyState :: Ord ReadyState
14+
15+
instance boundedReadyState :: Bounded ReadyState where
16+
bottom = EMPTY
17+
top = DONE
18+
19+
instance enumReadyState :: Enum ReadyState where
20+
succ = defaultSucc toEnumReadyState fromEnumReadyState
21+
pred = defaultPred toEnumReadyState fromEnumReadyState
22+
23+
instance boundedEnumReadyState :: BoundedEnum ReadyState where
24+
cardinality = Cardinality 3
25+
toEnum = toEnumReadyState
26+
fromEnum = fromEnumReadyState
27+
28+
instance showReadyState :: Show ReadyState where
29+
show EMPTY = "EMPTY"
30+
show LOADING = "LOADING"
31+
show DONE = "DONE"
32+
33+
toEnumReadyState :: Int -> Maybe ReadyState
34+
toEnumReadyState =
35+
case _ of
36+
0 -> Just EMPTY
37+
1 -> Just LOADING
38+
2 -> Just DONE
39+
_ -> Nothing
40+
41+
fromEnumReadyState :: ReadyState -> Int
42+
fromEnumReadyState =
43+
case _ of
44+
EMPTY -> 0
45+
LOADING -> 1
46+
DONE -> 2

src/DOM/File/Types.purs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module DOM.File.Types where
22

3+
import DOM.Event.Types (EventTarget)
34
import Unsafe.Coerce (unsafeCoerce)
45

56
foreign import data Blob :: *
@@ -11,3 +12,6 @@ foreign import data FileReaderSync :: *
1112

1213
fileToBlob :: File -> Blob
1314
fileToBlob = unsafeCoerce
15+
16+
fileReaderToEventTarget :: FileReader -> EventTarget
17+
fileReaderToEventTarget = unsafeCoerce

0 commit comments

Comments
 (0)