/
DataTransfer.purs
101 lines (82 loc) · 2.97 KB
/
DataTransfer.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
module Web.HTML.Event.DataTransfer
( DataTransfer
, files
, items
, types
, getData
, setData
, setDragImage
, DropEffect(..)
, dropEffect
, setDropEffect
) where
import Prelude
import Data.Maybe (Maybe)
import Data.MediaType (MediaType(..))
import Data.Nullable (Nullable, toMaybe)
import Effect (Effect)
import Web.DOM.Element (Element)
import Web.File.FileList (FileList)
import Web.HTML.Event.DataTransfer.DataTransferItem (DataTransferItemList)
foreign import data DataTransfer :: Type
-- | Contains a list of all the local files available on the data transfer.
-- | Empty if the drag operation doesn't involve dragging files.
-- |
-- | It's possible that a drag operation may have null files, instead of an
-- | empty file list. In these cases Nothing is returned.
files :: DataTransfer -> Maybe FileList
files = toMaybe <$> _files
foreign import _files :: DataTransfer -> Nullable FileList
-- | Returns a `DataTransferItemList` object which is a list of all of the drag
-- | data.
foreign import items :: DataTransfer -> DataTransferItemList
-- | Returns an array of data formats used in the drag operation.
-- | If the drag operation included no data, then the array is empty.
foreign import types :: DataTransfer -> Array String
foreign import _getData
:: String
-> DataTransfer
-> Effect String
-- | Retrieves the data for a given media type, or an empty string if data for
-- | that type does not exist or the data transfer object contains no data.
getData :: MediaType -> DataTransfer -> Effect String
getData (MediaType format) dt = _getData format dt
foreign import _setData
:: String
-> String
-> DataTransfer
-> Effect Unit
-- | Sets the data transfer object's data for a given media format.
setData
:: MediaType
-> String
-> DataTransfer
-> Effect Unit
setData (MediaType format) dat dt = _setData format dat dt
foreign import _setDragImage :: DataTransfer -> Element -> Int -> Int -> Effect Unit
-- | Sets the image to be used for dragging if a custom one is desired.
-- | The image will typically be an <image> but could be any other *visible* element.
-- | The x and y coordinates define where the image appears relative to the mouse.
setDragImage :: DataTransfer -> Element -> Int -> Int -> Effect Unit
setDragImage = _setDragImage
foreign import _dropEffect :: DataTransfer -> Effect String
data DropEffect = Copy | Link | Move | None
derive instance eqDropEffect :: Eq DropEffect
derive instance ordDropEffect :: Ord DropEffect
-- | Gets the data transfer object's drop effect.
dropEffect :: DataTransfer -> Effect DropEffect
dropEffect dt =
_dropEffect dt <#> case _ of
"copy" -> Copy
"link" -> Link
"move" -> Move
"none" -> None
_ -> None
foreign import _setDropEffect :: String -> DataTransfer -> Effect Unit
-- | Sets the data transfer object's drop effect.
setDropEffect :: DropEffect -> DataTransfer -> Effect Unit
setDropEffect de = _setDropEffect case de of
Copy -> "copy"
Link -> "link"
Move -> "move"
None -> "none"