Skip to content
This repository was archived by the owner on Oct 4, 2020. It is now read-only.

Add dropEffect getter and setter on DataTransfer #140

Merged
merged 2 commits into from
Jan 21, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions src/DOM/HTML/Event/DataTransfer.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
};
};
34 changes: 34 additions & 0 deletions src/DOM/HTML/Event/DataTransfer.purs
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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"