|
| 1 | +module Web.HTML.Event.DataTransfer |
| 2 | + ( DataTransfer |
| 3 | + , files |
| 4 | + , types |
| 5 | + , getData |
| 6 | + , setData |
| 7 | + , DropEffect(..) |
| 8 | + , dropEffect |
| 9 | + , setDropEffect |
| 10 | + ) where |
| 11 | + |
| 12 | +import Prelude |
| 13 | + |
| 14 | +import Data.Maybe (Maybe) |
| 15 | +import Data.MediaType (MediaType(..)) |
| 16 | +import Data.Nullable (Nullable, toMaybe) |
| 17 | +import Effect (Effect) |
| 18 | +import Partial.Unsafe (unsafeCrashWith) |
| 19 | +import Web.File.FileList (FileList) |
| 20 | + |
| 21 | +foreign import data DataTransfer :: Type |
| 22 | + |
| 23 | +-- | Contains a list of all the local files available on the data transfer. |
| 24 | +-- | Empty if the drag operation doesn't involve dragging files. |
| 25 | +-- | |
| 26 | +-- | It's possible that a drag operation may have null files, instead of an |
| 27 | +-- | empty file list. In these cases Nothing is returned. |
| 28 | +files :: DataTransfer -> Maybe FileList |
| 29 | +files = toMaybe <$> _files |
| 30 | + |
| 31 | +foreign import _files :: DataTransfer -> Nullable FileList |
| 32 | + |
| 33 | +-- | Returns an array of data formats used in the drag operation. |
| 34 | +-- | If the drag operation included no data, then the array is empty. |
| 35 | +foreign import types :: DataTransfer -> Array String |
| 36 | + |
| 37 | +foreign import _getData |
| 38 | + :: String |
| 39 | + -> DataTransfer |
| 40 | + -> Effect String |
| 41 | + |
| 42 | +-- | Retrieves the data for a given media type, or an empty string if data for |
| 43 | +-- | that type does not exist or the data transfer object contains no data. |
| 44 | +getData :: MediaType -> DataTransfer -> Effect String |
| 45 | +getData (MediaType format) dt = _getData format dt |
| 46 | + |
| 47 | +foreign import _setData |
| 48 | + :: String |
| 49 | + -> String |
| 50 | + -> DataTransfer |
| 51 | + -> Effect Unit |
| 52 | + |
| 53 | +-- | Sets the data transfer object's data for a given media format. |
| 54 | +setData |
| 55 | + :: MediaType |
| 56 | + -> String |
| 57 | + -> DataTransfer |
| 58 | + -> Effect Unit |
| 59 | +setData (MediaType format) dat dt = _setData format dat dt |
| 60 | + |
| 61 | +foreign import _dropEffect :: DataTransfer -> Effect String |
| 62 | + |
| 63 | +data DropEffect = Copy | Link | Move | None |
| 64 | + |
| 65 | +derive instance eqDropEffect :: Eq DropEffect |
| 66 | +derive instance ordDropEffect :: Ord DropEffect |
| 67 | + |
| 68 | +-- | Gets the data transfer object's drop effect. |
| 69 | +dropEffect :: DataTransfer -> Effect DropEffect |
| 70 | +dropEffect dt = |
| 71 | + _dropEffect dt <#> case _ of |
| 72 | + "copy" -> Copy |
| 73 | + "link" -> Link |
| 74 | + "move" -> Move |
| 75 | + "none" -> None |
| 76 | + de -> unsafeCrashWith ("Found unexpected 'dropEffect' value: " <> de) |
| 77 | + |
| 78 | +foreign import _setDropEffect :: String -> DataTransfer -> Effect Unit |
| 79 | + |
| 80 | +-- | Sets the data transfer object's drop effect. |
| 81 | +setDropEffect :: DropEffect -> DataTransfer -> Effect Unit |
| 82 | +setDropEffect de = _setDropEffect case de of |
| 83 | + Copy -> "copy" |
| 84 | + Link -> "link" |
| 85 | + Move -> "move" |
| 86 | + None -> "none" |
0 commit comments