diff --git a/src/DOM/HTML/Event/DataTransfer.js b/src/DOM/HTML/Event/DataTransfer.js
index fb55de5..691edf4 100644
--- a/src/DOM/HTML/Event/DataTransfer.js
+++ b/src/DOM/HTML/Event/DataTransfer.js
@@ -25,3 +25,17 @@ exports.setDataImpl = function (format) {
};
};
};
+
+exports.dropEffectImpl = function (dataTransfer) {
+ return function () {
+ return dataTransfer.dropEffect;
+ };
+};
+
+exports.setDropEffectImpl = function (e) {
+ return function (dataTransfer) {
+ return function () {
+ dataTransfer.dropEffect = e;
+ };
+ };
+};
diff --git a/src/DOM/HTML/Event/DataTransfer.purs b/src/DOM/HTML/Event/DataTransfer.purs
index b695a68..b64233f 100644
--- a/src/DOM/HTML/Event/DataTransfer.purs
+++ b/src/DOM/HTML/Event/DataTransfer.purs
@@ -4,15 +4,21 @@ module DOM.HTML.Event.DataTransfer
, types
, getData
, setData
+ , DropEffect(..)
+ , dropEffect
+ , setDropEffect
) where
import Prelude
+
import Control.Monad.Eff (Eff)
import DOM (DOM)
import DOM.File.Types (FileList)
import Data.Maybe (Maybe)
import Data.MediaType (MediaType(..))
import Data.Nullable (Nullable, toMaybe)
+import Partial (crashWith)
+import Partial.Unsafe (unsafePartial)
foreign import data DataTransfer :: Type
@@ -61,3 +67,31 @@ setData
-> DataTransfer
-> Eff (dom :: DOM | eff) Unit
setData (MediaType format) dat dt = setDataImpl format dat dt
+
+foreign import dropEffectImpl :: forall eff. DataTransfer -> Eff (dom :: DOM | eff) 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 :: forall eff. DataTransfer -> Eff (dom :: DOM | eff) DropEffect
+dropEffect dt = do
+ de <- dropEffectImpl dt
+ pure $ unsafePartial $ case de of
+ "copy" -> Copy
+ "link" -> Link
+ "move" -> Move
+ "none" -> None
+ _ -> crashWith "Impossible according to https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/dropEffect"
+
+foreign import setDropEffectImpl :: forall eff. String -> DataTransfer -> Eff (dom :: DOM | eff) Unit
+
+--| Sets the data transfer object's drop effect.
+setDropEffect :: forall eff. DropEffect -> DataTransfer -> Eff (dom :: DOM | eff) Unit
+setDropEffect de = setDropEffectImpl case de of
+ Copy -> "copy"
+ Link -> "link"
+ Move -> "move"
+ None -> "none"