@@ -4,15 +4,21 @@ module DOM.HTML.Event.DataTransfer
44 , types
55 , getData
66 , setData
7+ , DropEffect (..)
8+ , dropEffect
9+ , setDropEffect
710 ) where
811
912import Prelude
13+
1014import Control.Monad.Eff (Eff )
1115import DOM (DOM )
1216import DOM.File.Types (FileList )
1317import Data.Maybe (Maybe )
1418import Data.MediaType (MediaType (..))
1519import Data.Nullable (Nullable , toMaybe )
20+ import Partial (crashWith )
21+ import Partial.Unsafe (unsafePartial )
1622
1723foreign import data DataTransfer :: Type
1824
@@ -61,3 +67,31 @@ setData
6167 -> DataTransfer
6268 -> Eff (dom :: DOM | eff ) Unit
6369setData (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