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

Commit 0b2bfa5

Browse files
authored
Merge pull request #82 from themoritz/clipboard
Add ClipboardEvent type
2 parents a7d7a51 + a10369f commit 0b2bfa5

File tree

8 files changed

+138
-33
lines changed

8 files changed

+138
-33
lines changed

src/DOM/Event/ClipboardEvent.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
"use strict";
2+
3+
exports.clipboardData = function (e) {
4+
return e.clipboardData;
5+
};

src/DOM/Event/ClipboardEvent.purs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
module DOM.Event.ClipboardEvent
2+
( module T
3+
, module DT
4+
, eventToClipboardEvent
5+
, clipboardData
6+
) where
7+
8+
import Prelude
9+
import DOM.Event.Types (Event, ClipboardEvent, readClipboardEvent)
10+
import DOM.Event.Types (ClipboardEvent, clipboardEventToEvent, readClipboardEvent) as T
11+
import DOM.HTML.Event.DataTransfer (DataTransfer) as DT
12+
import Data.Foreign (F, toForeign)
13+
14+
eventToClipboardEvent :: Event -> F ClipboardEvent
15+
eventToClipboardEvent = readClipboardEvent <<< toForeign
16+
17+
foreign import clipboardData :: ClipboardEvent -> DT.DataTransfer

src/DOM/Event/Types.purs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ module DOM.Event.Types
3333
, ProgressEvent
3434
, progressEventToEvent
3535
, readProgressEvent
36+
, ClipboardEvent
37+
, clipboardEventToEvent
38+
, readClipboardEvent
3639
) where
3740

3841
import Prelude
@@ -176,3 +179,14 @@ readProgressEvent = unsafeReadTagged "ProgressEvent"
176179

177180
instance isForeignProgressEvent :: IsForeign ProgressEvent where
178181
read = readProgressEvent
182+
183+
foreign import data ClipboardEvent :: *
184+
185+
clipboardEventToEvent :: ClipboardEvent -> Event
186+
clipboardEventToEvent = U.unsafeCoerce
187+
188+
readClipboardEvent :: Foreign -> F ClipboardEvent
189+
readClipboardEvent = unsafeReadTagged "ClipboardEvent"
190+
191+
instance isForeignClipboardEvent :: IsForeign ClipboardEvent where
192+
read = readClipboardEvent

src/DOM/HTML/Event/DataTransfer.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"use strict";
2+
3+
exports.filesNullable = function (dataTransfer) {
4+
return dataTransfer.files;
5+
};
6+
7+
exports.types = function (dataTransfer) {
8+
return dataTransfer.types;
9+
};
10+
11+
exports.getDataImpl = function (format) {
12+
return function (dataTransfer) {
13+
return function () {
14+
return dataTransfer.getData(format);
15+
};
16+
};
17+
};
18+
19+
exports.setDataImpl = function (format) {
20+
return function (data) {
21+
return function (dataTransfer) {
22+
return function () {
23+
return dataTransfer.setData(format, data);
24+
};
25+
};
26+
};
27+
};
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
module DOM.HTML.Event.DataTransfer
2+
( DataTransfer
3+
, files
4+
, filesNullable
5+
, types
6+
, getData
7+
, setData
8+
) where
9+
10+
import Prelude
11+
import Control.Monad.Eff (Eff)
12+
import DOM (DOM)
13+
import DOM.File.Types (FileList)
14+
import Data.Maybe (Maybe)
15+
import Data.MediaType (MediaType(..))
16+
import Data.Nullable (Nullable, toMaybe)
17+
18+
foreign import data DataTransfer :: *
19+
20+
-- | Contains a list of all the local files available on the data transfer.
21+
-- | Empty if the drag operation doesn't involve dragging files.
22+
-- |
23+
-- | It's possible that a drag operation may have null files, instead of an
24+
-- | empty file list. In these cases Nothing is returned.
25+
files :: DataTransfer -> Maybe FileList
26+
files = toMaybe <$> filesNullable
27+
28+
foreign import filesNullable :: DataTransfer -> Nullable FileList
29+
30+
-- | Returns an array of data formats used in the drag operation.
31+
-- | If the drag operation included no data, then the array is empty.
32+
foreign import types :: DataTransfer -> Array String
33+
34+
foreign import getDataImpl
35+
:: forall eff
36+
. String
37+
-> DataTransfer
38+
-> Eff (dom :: DOM | eff) String
39+
40+
-- | Retrieves the data for a given media type, or an empty string if data for
41+
-- | that type does not exist or the data transfer object contains no data.
42+
getData
43+
:: forall eff. MediaType -> DataTransfer -> Eff (dom :: DOM | eff) String
44+
getData (MediaType format) dt = getDataImpl format dt
45+
46+
foreign import setDataImpl
47+
:: forall eff
48+
. String
49+
-> String
50+
-> DataTransfer
51+
-> Eff (dom :: DOM | eff) Unit
52+
53+
-- | Sets the data transfer object's data for a given media format.
54+
-- |
55+
-- | Example:
56+
-- |
57+
-- | setData textPlain "Foo" dataTransfer
58+
setData
59+
:: forall eff
60+
. MediaType
61+
-> String
62+
-> DataTransfer
63+
-> Eff (dom :: DOM | eff) Unit
64+
setData (MediaType format) dat dt = setDataImpl format dat dt

src/DOM/HTML/Event/DragEvent/DataTransfer.js

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,5 @@
11
module DOM.HTML.Event.DragEvent.DataTransfer
2-
( DataTransfer
3-
, files
4-
, filesNullable
5-
, types
2+
( module DataTransfer
63
) where
74

8-
import Prelude
9-
import DOM.File.Types (FileList)
10-
import Data.Maybe (Maybe)
11-
import Data.Nullable (Nullable, toMaybe)
12-
13-
foreign import data DataTransfer :: *
14-
15-
-- | Contains a list of all the local files available on the data transfer.
16-
-- | Empty if the drag operation doesn't involve dragging files.
17-
-- |
18-
-- | It's possible that a drag operation may have null files, instead of an
19-
-- | empty file list. In these cases Nothing is returned.
20-
files :: DataTransfer -> Maybe FileList
21-
files = toMaybe <$> filesNullable
22-
23-
foreign import filesNullable :: DataTransfer -> Nullable FileList
24-
25-
-- | Returns an array of data formats used in the drag operation.
26-
-- | If the drag operation included no data, then the array is empty.
27-
foreign import types :: DataTransfer -> Array String
5+
import DOM.HTML.Event.DataTransfer as DataTransfer

src/DOM/HTML/Event/EventTypes.purs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ compositionupdate = EventType "compositionupdate"
4141
contextmenu :: EventType
4242
contextmenu = EventType "contextmenu"
4343

44+
copy :: EventType
45+
copy = EventType "copy"
46+
47+
cut :: EventType
48+
cut = EventType "cut"
49+
4450
dblclick :: EventType
4551
dblclick = EventType "dblclick"
4652

@@ -134,6 +140,9 @@ pagehide = EventType "pagehide"
134140
pageshow :: EventType
135141
pageshow = EventType "pageshow"
136142

143+
paste :: EventType
144+
paste = EventType "paste"
145+
137146
pause :: EventType
138147
pause = EventType "pause"
139148

0 commit comments

Comments
 (0)