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

Commit 06aea09

Browse files
committed
Merge pull request #38 from zudov/file-api
Add some Blob, File, FileList functions
2 parents 0e90b7c + 1bdcc07 commit 06aea09

File tree

8 files changed

+76
-1
lines changed

8 files changed

+76
-1
lines changed

bower.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
"purescript-enums": "^0.7.0",
2525
"purescript-foreign": "^0.7.0",
2626
"purescript-exceptions": "~0.3.0",
27-
"purescript-nullable": "~0.2.1"
27+
"purescript-nullable": "~0.2.1",
28+
"purescript-datetime": "~0.9.1",
29+
"purescript-media-types": "~0.1.1"
2830
}
2931
}

src/DOM/File/Blob.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// module DOM.File.Blob
2+
3+
exports.typeImpl = function(blob) { return blob.type };
4+
5+
exports.size = function(blob) { return blob.size };

src/DOM/File/Blob.purs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
module DOM.File.Blob
2+
( type_
3+
, size
4+
) where
5+
6+
import Prelude ((==))
7+
import Data.Maybe (Maybe(..))
8+
import Data.MediaType (MediaType(..))
9+
10+
import DOM.File.Types (Blob())
11+
12+
foreign import typeImpl :: Blob -> String
13+
14+
-- | `MediaType` of the data contained in the `Blob`.
15+
-- | Returns `Nothing` if the `MediaType` is unknown.
16+
type_ :: Blob -> Maybe MediaType
17+
type_ blob = let blobType = typeImpl blob
18+
in if blobType == ""
19+
then Nothing
20+
else Just (MediaType blobType)
21+
22+
-- | The size (in bytes) of the data contained in the `Blob`.
23+
foreign import size :: Blob -> Number

src/DOM/File/File.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// module DOM.File.File
2+
3+
exports.name = function(file) { return file.name };
4+
exports.lastModifiedDate = function(file) { return file.lastModifiedDate }
5+
exports.lastModified = function(file) { return file.lastModified }

src/DOM/File/File.purs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module DOM.File.File
2+
( name
3+
, lastModified
4+
, lastModifiedDate
5+
) where
6+
7+
import DOM.File.Types (File())
8+
9+
import Data.Date (JSDate())
10+
11+
foreign import name :: File -> String
12+
foreign import lastModifiedDate :: File -> JSDate
13+
foreign import lastModified :: File -> Number

src/DOM/File/FileList.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// module DOM.File.FileList
2+
3+
exports.length = function(fileList) { return fileList.length; };
4+
5+
exports.item = function(index) {
6+
return function(fileList) {
7+
return fileList.item(index);
8+
}
9+
};

src/DOM/File/FileList.purs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module DOM.File.FileList
2+
( item
3+
, length
4+
) where
5+
6+
import Data.Nullable (Nullable())
7+
import DOM.File.Types (FileList(), File())
8+
9+
-- | Number of files in the `FileList` object.
10+
foreign import length :: FileList -> Int
11+
12+
-- | Get `File` at the certain position
13+
foreign import item :: Int -> FileList -> Nullable File

src/DOM/File/Types.purs

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

3+
import Unsafe.Coerce (unsafeCoerce)
4+
35
foreign import data Blob :: *
46
foreign import data BlobURL :: *
57
foreign import data File :: *
68
foreign import data FileList :: *
79
foreign import data FileReader :: *
810
foreign import data FileReaderSync :: *
11+
12+
fileToBlob :: File -> Blob
13+
fileToBlob = unsafeCoerce

0 commit comments

Comments
 (0)