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

Commit 52fb86d

Browse files
committed
Add API entries for UIEvents
This commit implements a large portion of the https://www.w3.org/TR/uievents/ specification.
1 parent 88f8a54 commit 52fb86d

10 files changed

+459
-0
lines changed

src/DOM/Event/CompositionEvent.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/* global CompositionEvent */
2+
"use strict";
3+
4+
exports._eventToCompositionEvent = function (just) {
5+
return function (nothing) {
6+
return function (e) {
7+
return e instanceof CompositionEvent ? just(e) : nothing;
8+
};
9+
};
10+
};
11+
12+
exports.data_ = function (e) {
13+
return e.data;
14+
};

src/DOM/Event/CompositionEvent.purs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
module DOM.Event.CompositionEvent (
2+
module T,
3+
eventToCompositionEvent,
4+
data_
5+
) where
6+
7+
import Data.Maybe (Maybe(..))
8+
import DOM.Event.Types (CompositionEvent, Event)
9+
import DOM.Event.Types (CompositionEvent, compositionEventToEvent, readCompositionEvent) as T
10+
11+
eventToCompositionEvent :: Event -> Maybe CompositionEvent
12+
eventToCompositionEvent = _eventToCompositionEvent Just Nothing
13+
14+
foreign import _eventToCompositionEvent
15+
:: forall a
16+
. (a -> Maybe a)
17+
-> Maybe a
18+
-> Event
19+
-> Maybe CompositionEvent
20+
21+
foreign import data_ :: CompositionEvent -> String

src/DOM/Event/FocusEvent.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/* global FocusEvent */
2+
"use strict";
3+
4+
exports._eventToFocusEvent = function (just) {
5+
return function (nothing) {
6+
return function (e) {
7+
return e instanceof FocusEvent ? just(e) : nothing;
8+
};
9+
};
10+
};
11+
12+
exports.relatedTargetNullable = function (e) {
13+
return e.relatedTarget;
14+
};

src/DOM/Event/FocusEvent.purs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module DOM.Event.FocusEvent
2+
( module T
3+
, eventToFocusEvent
4+
, relatedTarget
5+
) where
6+
7+
import Prelude
8+
import Data.Maybe (Maybe (..))
9+
import Data.Nullable (Nullable, toMaybe)
10+
import DOM.Event.Types (Event, EventTarget, FocusEvent)
11+
import DOM.Event.Types (FocusEvent, focusEventToEvent, readFocusEvent) as T
12+
13+
eventToFocusEvent :: Event -> Maybe FocusEvent
14+
eventToFocusEvent = _eventToFocusEvent Just Nothing
15+
16+
foreign import _eventToFocusEvent
17+
:: forall a
18+
. (a -> Maybe a)
19+
-> Maybe a
20+
-> Event
21+
-> Maybe FocusEvent
22+
23+
foreign import relatedTargetNullable :: FocusEvent -> Nullable EventTarget
24+
25+
relatedTarget :: FocusEvent -> Maybe EventTarget
26+
relatedTarget = toMaybe <$> relatedTargetNullable

src/DOM/Event/KeyboardEvent.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/* global KeyboardEvent */
2+
"use strict";
3+
4+
exports._eventToKeyboardEvent = function (just) {
5+
return function (nothing) {
6+
return function (e) {
7+
return e instanceof KeyboardEvent ? just(e) : nothing;
8+
};
9+
};
10+
};
11+
12+
exports.key = function (e) {
13+
return e.key;
14+
};
15+
16+
exports.code = function (e) {
17+
return e.code;
18+
};
19+
20+
exports.locationIndex = function (e) {
21+
return e.location;
22+
};
23+
24+
exports.ctrlKey = function (e) {
25+
return e.ctrlKey;
26+
};
27+
28+
exports.shiftKey = function (e) {
29+
return e.shiftKey;
30+
};
31+
32+
exports.altKey = function (e) {
33+
return e.altKey;
34+
};
35+
36+
exports.metaKey = function (e) {
37+
return e.metaKey;
38+
};
39+
40+
exports.repeat = function (e) {
41+
return e.repeat;
42+
};
43+
44+
exports.isComposing = function (e) {
45+
return e.isComposing;
46+
};
47+
48+
exports.getModifierState = function (s) {
49+
return function (e) {
50+
return function () {
51+
return e.getModifierState(s);
52+
};
53+
};
54+
};

src/DOM/Event/KeyboardEvent.purs

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
module DOM.Event.KeyboardEvent
2+
( module T
3+
, eventToKeyboardEvent
4+
, key
5+
, code
6+
, locationIndex
7+
, location
8+
, KeyLocation(..)
9+
, toEnumKeyLocation
10+
, fromEnumKeyLocation
11+
, ctrlKey
12+
, shiftKey
13+
, altKey
14+
, metaKey
15+
, repeat
16+
, isComposing
17+
, getModifierState
18+
) where
19+
20+
import Prelude
21+
import Control.Monad.Eff (Eff)
22+
import Data.Enum (class BoundedEnum, class Enum, Cardinality(..), defaultPred, defaultSucc, toEnum)
23+
import Data.Maybe (Maybe(..), fromJust)
24+
import DOM (DOM)
25+
import DOM.Event.Types (Event, KeyboardEvent)
26+
import DOM.Event.Types (KeyboardEvent, keyboardEventToEvent, readKeyboardEvent) as T
27+
28+
eventToKeyboardEvent :: Event -> Maybe KeyboardEvent
29+
eventToKeyboardEvent = _eventToKeyboardEvent Just Nothing
30+
31+
foreign import _eventToKeyboardEvent
32+
:: forall a
33+
. (a -> Maybe a)
34+
-> Maybe a
35+
-> Event
36+
-> Maybe KeyboardEvent
37+
38+
foreign import key :: KeyboardEvent -> String
39+
40+
foreign import code :: KeyboardEvent -> String
41+
42+
foreign import locationIndex :: KeyboardEvent -> Int
43+
44+
location :: Partial => KeyboardEvent -> KeyLocation
45+
location = fromJust <<< toEnum <<< locationIndex
46+
47+
data KeyLocation
48+
= Standard
49+
| Left
50+
| Right
51+
| Numpad
52+
53+
derive instance eqKeyLocation :: Eq KeyLocation
54+
derive instance ordKeyLocation :: Ord KeyLocation
55+
56+
instance boundedKeyLocation :: Bounded KeyLocation where
57+
bottom = Standard
58+
top = Numpad
59+
60+
instance enumKeyLocation :: Enum KeyLocation where
61+
succ = defaultSucc toEnumKeyLocation fromEnumKeyLocation
62+
pred = defaultPred toEnumKeyLocation fromEnumKeyLocation
63+
64+
instance boundedEnumKeyLocation :: BoundedEnum KeyLocation where
65+
cardinality = Cardinality 4
66+
toEnum = toEnumKeyLocation
67+
fromEnum = fromEnumKeyLocation
68+
69+
toEnumKeyLocation :: Int -> Maybe KeyLocation
70+
toEnumKeyLocation =
71+
case _ of
72+
0 -> Just Standard
73+
1 -> Just Left
74+
2 -> Just Right
75+
3 -> Just Numpad
76+
_ -> Nothing
77+
78+
fromEnumKeyLocation :: KeyLocation -> Int
79+
fromEnumKeyLocation =
80+
case _ of
81+
Standard -> 0
82+
Left -> 1
83+
Right -> 2
84+
Numpad -> 3
85+
86+
foreign import ctrlKey :: KeyboardEvent -> Boolean
87+
88+
foreign import shiftKey :: KeyboardEvent -> Boolean
89+
90+
foreign import altKey :: KeyboardEvent -> Boolean
91+
92+
foreign import metaKey :: KeyboardEvent -> Boolean
93+
94+
foreign import repeat :: KeyboardEvent -> Boolean
95+
96+
foreign import isComposing :: KeyboardEvent -> Boolean
97+
98+
foreign import getModifierState
99+
:: forall eff
100+
. String
101+
-> KeyboardEvent
102+
-> Eff (dom :: DOM | eff) Boolean

src/DOM/Event/MouseEvent.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/* global MouseEvent */
2+
"use strict";
3+
4+
exports._eventToMouseEvent = function (just) {
5+
return function (nothing) {
6+
return function (e) {
7+
return e instanceof MouseEvent ? just(e) : nothing;
8+
};
9+
};
10+
};
11+
12+
exports.screenX = function (e) {
13+
return e.screenX;
14+
};
15+
16+
exports.screenY = function (e) {
17+
return e.screenY;
18+
};
19+
20+
exports.clientX = function (e) {
21+
return e.clientX;
22+
};
23+
24+
exports.clientY = function (e) {
25+
return e.clientY;
26+
};
27+
28+
exports.ctrlKey = function (e) {
29+
return e.ctrlKey;
30+
};
31+
32+
exports.shiftKey = function (e) {
33+
return e.shiftKey;
34+
};
35+
36+
exports.altKey = function (e) {
37+
return e.altKey;
38+
};
39+
40+
exports.metaKey = function (e) {
41+
return e.metaKey;
42+
};
43+
44+
exports.button = function (e) {
45+
return e.button;
46+
};
47+
48+
exports.relatedTargetNullable = function (e) {
49+
return e.relatedTarget;
50+
};
51+
52+
exports.buttons = function (e) {
53+
return e.buttons;
54+
};
55+
56+
exports.getModifierState = function (s) {
57+
return function (e) {
58+
return function () {
59+
return e.getModifierState(s);
60+
};
61+
};
62+
};

src/DOM/Event/MouseEvent.purs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
module DOM.Event.MouseEvent
2+
( module T
3+
, eventToMouseEvent
4+
, screenX
5+
, screenY
6+
, clientX
7+
, clientY
8+
, ctrlKey
9+
, shiftKey
10+
, altKey
11+
, metaKey
12+
, button
13+
, relatedTarget
14+
, buttons
15+
, getModifierState
16+
) where
17+
18+
import Prelude
19+
import Control.Monad.Eff (Eff)
20+
import Data.Maybe (Maybe(..))
21+
import Data.Nullable (Nullable, toMaybe)
22+
import DOM (DOM)
23+
import DOM.Event.Types (Event, EventTarget, MouseEvent)
24+
import DOM.Event.Types (MouseEvent, mouseEventToEvent, readMouseEvent) as T
25+
26+
eventToMouseEvent :: Event -> Maybe MouseEvent
27+
eventToMouseEvent = _eventToMouseEvent Just Nothing
28+
29+
foreign import _eventToMouseEvent
30+
:: forall a
31+
. (a -> Maybe a)
32+
-> Maybe a
33+
-> Event
34+
-> Maybe MouseEvent
35+
36+
foreign import screenX :: MouseEvent -> Int
37+
38+
foreign import screenY :: MouseEvent -> Int
39+
40+
foreign import clientX :: MouseEvent -> Int
41+
42+
foreign import clientY :: MouseEvent -> Int
43+
44+
foreign import ctrlKey :: MouseEvent -> Boolean
45+
46+
foreign import shiftKey :: MouseEvent -> Boolean
47+
48+
foreign import altKey :: MouseEvent -> Boolean
49+
50+
foreign import metaKey :: MouseEvent -> Boolean
51+
52+
foreign import button :: MouseEvent -> Int
53+
54+
foreign import relatedTargetNullable :: MouseEvent -> Nullable EventTarget
55+
56+
relatedTarget :: MouseEvent -> Maybe EventTarget
57+
relatedTarget = toMaybe <$> relatedTargetNullable
58+
59+
foreign import buttons :: MouseEvent -> Int
60+
61+
foreign import getModifierState
62+
:: forall eff
63+
. String
64+
-> MouseEvent
65+
-> Eff (dom :: DOM | eff) Boolean

src/DOM/Event/WheelEvent.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/* global WheelEvent */
2+
"use strict";
3+
4+
exports._eventToWheelEvent = function (just) {
5+
return function (nothing) {
6+
return function (e) {
7+
return e instanceof WheelEvent ? just(e) : nothing;
8+
};
9+
};
10+
};
11+
12+
exports.deltaX = function (e) {
13+
return e.deltaX;
14+
};
15+
16+
exports.deltaY = function (e) {
17+
return e.deltaY;
18+
};
19+
20+
exports.deltaZ = function (e) {
21+
return e.deltaZ;
22+
};
23+
24+
exports.deltaModeIndex = function (e) {
25+
return e.deltaModeIndex;
26+
};

0 commit comments

Comments
 (0)