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

Commit 0fbfc89

Browse files
authored
Merge pull request #54 from ianbollinger/events
Add API entries for UIEvents
2 parents 88f8a54 + 9a35333 commit 0fbfc89

10 files changed

+384
-0
lines changed

src/DOM/Event/CompositionEvent.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.data_ = function (e) {
4+
return e.data;
5+
};

src/DOM/Event/CompositionEvent.purs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module DOM.Event.CompositionEvent (
2+
module T,
3+
eventToCompositionEvent,
4+
data_
5+
) where
6+
7+
import Prelude
8+
import Data.Foreign (F, toForeign)
9+
import DOM.Event.Types (CompositionEvent, Event, readCompositionEvent)
10+
import DOM.Event.Types (CompositionEvent, compositionEventToEvent, readCompositionEvent) as T
11+
12+
eventToCompositionEvent :: Event -> F CompositionEvent
13+
eventToCompositionEvent = readCompositionEvent <<< toForeign
14+
15+
foreign import data_ :: CompositionEvent -> String

src/DOM/Event/FocusEvent.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.relatedTargetNullable = function (e) {
4+
return e.relatedTarget;
5+
};

src/DOM/Event/FocusEvent.purs

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

src/DOM/Event/KeyboardEvent.js

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

src/DOM/Event/KeyboardEvent.purs

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

src/DOM/Event/MouseEvent.js

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

src/DOM/Event/MouseEvent.purs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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.Foreign (F, toForeign)
21+
import Data.Maybe (Maybe)
22+
import Data.Nullable (Nullable, toMaybe)
23+
import DOM (DOM)
24+
import DOM.Event.Types (Event, EventTarget, MouseEvent, readMouseEvent)
25+
import DOM.Event.Types (MouseEvent, mouseEventToEvent, readMouseEvent) as T
26+
27+
eventToMouseEvent :: Event -> F MouseEvent
28+
eventToMouseEvent = readMouseEvent <<< toForeign
29+
30+
foreign import screenX :: MouseEvent -> Int
31+
32+
foreign import screenY :: MouseEvent -> Int
33+
34+
foreign import clientX :: MouseEvent -> Int
35+
36+
foreign import clientY :: MouseEvent -> Int
37+
38+
foreign import ctrlKey :: MouseEvent -> Boolean
39+
40+
foreign import shiftKey :: MouseEvent -> Boolean
41+
42+
foreign import altKey :: MouseEvent -> Boolean
43+
44+
foreign import metaKey :: MouseEvent -> Boolean
45+
46+
foreign import button :: MouseEvent -> Int
47+
48+
foreign import relatedTargetNullable :: MouseEvent -> Nullable EventTarget
49+
50+
relatedTarget :: MouseEvent -> Maybe EventTarget
51+
relatedTarget = toMaybe <$> relatedTargetNullable
52+
53+
foreign import buttons :: MouseEvent -> Int
54+
55+
foreign import getModifierState
56+
:: forall eff
57+
. String
58+
-> MouseEvent
59+
-> Eff (dom :: DOM | eff) Boolean

src/DOM/Event/WheelEvent.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
"use strict";
2+
3+
exports.deltaX = function (e) {
4+
return e.deltaX;
5+
};
6+
7+
exports.deltaY = function (e) {
8+
return e.deltaY;
9+
};
10+
11+
exports.deltaZ = function (e) {
12+
return e.deltaZ;
13+
};
14+
15+
exports.deltaModeIndex = function (e) {
16+
return e.deltaModeIndex;
17+
};

src/DOM/Event/WheelEvent.purs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
module DOM.Event.WheelEvent
2+
( module T
3+
, eventToWheelEvent
4+
, deltaX
5+
, deltaY
6+
, deltaZ
7+
, deltaModeIndex
8+
, deltaMode
9+
, DeltaMode(..)
10+
, toEnumDeltaMode
11+
, fromEnumDeltaMode
12+
) where
13+
14+
import Prelude
15+
import Data.Enum (class BoundedEnum, class Enum, Cardinality(..), defaultPred, defaultSucc, toEnum)
16+
import Data.Foreign (F, toForeign)
17+
import Data.Maybe (Maybe(..), fromJust)
18+
import DOM.Event.Types (Event, WheelEvent, readWheelEvent)
19+
import DOM.Event.Types (WheelEvent, readWheelEvent, wheelEventToEvent) as T
20+
21+
eventToWheelEvent :: Event -> F WheelEvent
22+
eventToWheelEvent = readWheelEvent <<< toForeign
23+
24+
foreign import deltaX :: WheelEvent -> Number
25+
26+
foreign import deltaY :: WheelEvent -> Number
27+
28+
foreign import deltaZ :: WheelEvent -> Number
29+
30+
foreign import deltaModeIndex :: WheelEvent -> Int
31+
32+
deltaMode :: Partial => WheelEvent -> DeltaMode
33+
deltaMode = fromJust <<< toEnum <<< deltaModeIndex
34+
35+
data DeltaMode
36+
= Pixel
37+
| Line
38+
| Page
39+
40+
derive instance eqDeltaMode :: Eq DeltaMode
41+
derive instance ordDeltaMode :: Ord DeltaMode
42+
43+
instance boundedDeltaMode :: Bounded DeltaMode where
44+
bottom = Pixel
45+
top = Page
46+
47+
instance enumDeltaMode :: Enum DeltaMode where
48+
succ = defaultSucc toEnumDeltaMode fromEnumDeltaMode
49+
pred = defaultPred toEnumDeltaMode fromEnumDeltaMode
50+
51+
instance boundedEnumDeltaMode :: BoundedEnum DeltaMode where
52+
cardinality = Cardinality 3
53+
toEnum = toEnumDeltaMode
54+
fromEnum = fromEnumDeltaMode
55+
56+
toEnumDeltaMode :: Int -> Maybe DeltaMode
57+
toEnumDeltaMode =
58+
case _ of
59+
0 -> Just Pixel
60+
1 -> Just Line
61+
2 -> Just Page
62+
_ -> Nothing
63+
64+
fromEnumDeltaMode :: DeltaMode -> Int
65+
fromEnumDeltaMode =
66+
case _ of
67+
Pixel -> 0
68+
Line -> 1
69+
Page -> 2

0 commit comments

Comments
 (0)