@@ -4,15 +4,21 @@ module DOM.HTML.Event.DataTransfer
4
4
, types
5
5
, getData
6
6
, setData
7
+ , DropEffect (..)
8
+ , dropEffect
9
+ , setDropEffect
7
10
) where
8
11
9
12
import Prelude
13
+
10
14
import Control.Monad.Eff (Eff )
11
15
import DOM (DOM )
12
16
import DOM.File.Types (FileList )
13
17
import Data.Maybe (Maybe )
14
18
import Data.MediaType (MediaType (..))
15
19
import Data.Nullable (Nullable , toMaybe )
20
+ import Partial (crashWith )
21
+ import Partial.Unsafe (unsafePartial )
16
22
17
23
foreign import data DataTransfer :: Type
18
24
@@ -61,3 +67,31 @@ setData
61
67
-> DataTransfer
62
68
-> Eff (dom :: DOM | eff ) Unit
63
69
setData (MediaType format) dat dt = setDataImpl format dat dt
70
+
71
+ foreign import dropEffectImpl :: forall eff . DataTransfer -> Eff (dom :: DOM | eff ) String
72
+
73
+ data DropEffect = Copy | Link | Move | None
74
+
75
+ derive instance eqDropEffect :: Eq DropEffect
76
+ derive instance ordDropEffect :: Ord DropEffect
77
+
78
+ -- | Gets the data transfer object's drop effect.
79
+ dropEffect :: forall eff . DataTransfer -> Eff (dom :: DOM | eff ) DropEffect
80
+ dropEffect dt = do
81
+ de <- dropEffectImpl dt
82
+ pure $ unsafePartial $ case de of
83
+ " copy" -> Copy
84
+ " link" -> Link
85
+ " move" -> Move
86
+ " none" -> None
87
+ _ -> crashWith " Impossible according to https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/dropEffect"
88
+
89
+ foreign import setDropEffectImpl :: forall eff . String -> DataTransfer -> Eff (dom :: DOM | eff ) Unit
90
+
91
+ -- | Sets the data transfer object's drop effect.
92
+ setDropEffect :: forall eff . DropEffect -> DataTransfer -> Eff (dom :: DOM | eff ) Unit
93
+ setDropEffect de = setDropEffectImpl case de of
94
+ Copy -> " copy"
95
+ Link -> " link"
96
+ Move -> " move"
97
+ None -> " none"
0 commit comments