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"