Skip to content

Commit 0c49778

Browse files
authored
Add DataTransferItem and related API (#55)
1 parent 61cb302 commit 0c49778

File tree

5 files changed

+100
-0
lines changed

5 files changed

+100
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Notable changes to this project are documented in this file. The format is based
77
Breaking changes:
88

99
New features:
10+
- Added `items` function for `DataTransfer` and related types (`DataTransferItem`, `DataTransferItemList`) (#55 by @ptrfrncsmrph)
1011

1112
Bugfixes:
1213

src/Web/HTML/Event/DataTransfer.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ exports._files = function (dataTransfer) {
44
return dataTransfer.files;
55
};
66

7+
exports.items = function (dataTransfer) {
8+
return dataTransfer.items;
9+
};
10+
711
exports.types = function (dataTransfer) {
812
return dataTransfer.types;
913
};

src/Web/HTML/Event/DataTransfer.purs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module Web.HTML.Event.DataTransfer
22
( DataTransfer
33
, files
4+
, items
45
, types
56
, getData
67
, setData
@@ -18,6 +19,7 @@ import Data.Nullable (Nullable, toMaybe)
1819
import Effect (Effect)
1920
import Web.DOM.Element (Element)
2021
import Web.File.FileList (FileList)
22+
import Web.HTML.Event.DataTransfer.DataTransferItem (DataTransferItemList)
2123

2224
foreign import data DataTransfer :: Type
2325

@@ -31,6 +33,10 @@ files = toMaybe <$> _files
3133

3234
foreign import _files :: DataTransfer -> Nullable FileList
3335

36+
-- | Returns a `DataTransferItemList` object which is a list of all of the drag
37+
-- | data.
38+
foreign import items :: DataTransfer -> DataTransferItemList
39+
3440
-- | Returns an array of data formats used in the drag operation.
3541
-- | If the drag operation included no data, then the array is empty.
3642
foreign import types :: DataTransfer -> Array String
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"use strict";
2+
3+
exports._kind = function (nothing, just, text, file, dataTransferItem) {
4+
if (dataTransferItem.kind === "string") {
5+
return just(text);
6+
} else if (dataTransferItem.kind === "file") {
7+
return just(file);
8+
} else {
9+
return nothing;
10+
}
11+
};
12+
13+
exports.type_ = function (dataTransferItem) {
14+
return dataTransferItem.type;
15+
};
16+
17+
exports._dataTransferItem = function (index) {
18+
return function (dataTransferItemList) {
19+
return dataTransferItemList[index];
20+
};
21+
};
22+
23+
exports._length = function (dataTransferItemList) {
24+
return dataTransferItemList.length;
25+
};
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
module Web.HTML.Event.DataTransfer.DataTransferItem
2+
( DataTransferItem
3+
, DataTransferItemKind(..)
4+
, DataTransferItemList
5+
, dataTransferItem
6+
, kind
7+
, length
8+
, type_
9+
) where
10+
11+
import Prelude
12+
13+
import Data.Function.Uncurried (Fn5)
14+
import Data.Function.Uncurried as Uncurried
15+
import Data.Maybe (Maybe(..))
16+
import Data.Nullable (Nullable)
17+
import Data.Nullable as Nullable
18+
19+
data DataTransferItemKind = Text | File
20+
21+
derive instance Eq DataTransferItemKind
22+
derive instance Ord DataTransferItemKind
23+
24+
instance Show DataTransferItemKind where
25+
show = case _ of
26+
Text -> "Text"
27+
File -> "File"
28+
29+
foreign import _kind
30+
:: Fn5 (forall x. Maybe x)
31+
(forall x. x -> Maybe x)
32+
DataTransferItemKind
33+
DataTransferItemKind
34+
DataTransferItem
35+
(Maybe DataTransferItemKind)
36+
37+
-- | Returns the drag data item kind of the `DataTransferItem`. In the case
38+
-- | where the `DataTransferItem` object is in _disabled mode_, `Nothing` is
39+
-- | returned.
40+
kind :: DataTransferItem -> Maybe DataTransferItemKind
41+
kind = Uncurried.runFn5 _kind Nothing Just Text File
42+
43+
-- | A Unicode string giving the type or format of the data, generally given by
44+
-- | a MIME type. Some values that are not MIME types are special-cased for
45+
-- | legacy reasons. The API does not enforce the use of MIME types; other
46+
-- | values can be used as well. In all cases, however, the values are all
47+
-- | converted to ASCII lowercase by the API.
48+
-- | There is a limit of one text item per item type string.
49+
foreign import type_ :: DataTransferItem -> String
50+
51+
foreign import _dataTransferItem :: Int -> DataTransferItemList -> Nullable DataTransferItem
52+
53+
-- | Access an item in the `DataTransferItemList` by index.
54+
dataTransferItem :: Int -> DataTransferItemList -> Maybe DataTransferItem
55+
dataTransferItem = map Nullable.toMaybe <$> _dataTransferItem
56+
57+
foreign import _length :: DataTransferItemList -> Int
58+
59+
length :: DataTransferItemList -> Int
60+
length = _length
61+
62+
foreign import data DataTransferItem :: Type
63+
64+
foreign import data DataTransferItemList :: Type

0 commit comments

Comments
 (0)