Skip to content

Commit bd3933d

Browse files
authored
Refactor events (#144)
#136 #140
1 parent db05c85 commit bd3933d

File tree

5 files changed

+261
-29
lines changed

5 files changed

+261
-29
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22
bower_components/
33
node_modules/
44
output/
5+
yarn-error.log
56
.psc-package
67
.psc-ide-port

src/React.purs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ import Control.Monad.Eff.Uncurried (EffFn2, runEffFn2)
7171

7272
import Data.Nullable (Nullable)
7373

74-
import React.SyntheticEvent (preventDefault, isDefaultPrevented, stopPropagation, isPropagationStopped, persist) as SyntheticEvent
74+
import React.SyntheticEvent as SyntheticEvent
7575

7676
import Unsafe.Coerce (unsafeCoerce)
7777

src/React/DOM/Props.purs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ module React.DOM.Props where
22

33
import Data.Nullable (Nullable)
44

5-
import React (SyntheticEventHandlerContext, Ref, handle)
5+
import React
6+
( Ref
7+
, handle
68

7-
import React.SyntheticEvent
8-
( SyntheticEvent
9+
, SyntheticEventHandlerContext
10+
11+
, SyntheticEvent
912
, SyntheticAnimationEvent
1013
, SyntheticClipboardEvent
1114
, SyntheticCompositionEvent

src/React/SyntheticEvent.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,19 @@ exports.persist = function persist(event) {
2929
return event.persist();
3030
};
3131
};
32+
33+
exports.getModifierState = function getModifierState(key) {
34+
return function(event) {
35+
return function() {
36+
return event.getModifierState(key);
37+
};
38+
};
39+
};
40+
41+
exports.unsafeGet = function unsafeGet(key) {
42+
return function (event) {
43+
return function () {
44+
return event[key];
45+
};
46+
};
47+
};

src/React/SyntheticEvent.purs

Lines changed: 237 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,54 +22,118 @@ module React.SyntheticEvent
2222
, SyntheticAnimationEvent'
2323
, SyntheticClipboardEvent'
2424
, SyntheticCompositionEvent'
25-
, SyntheticKeyboardEvent'
2625
, SyntheticFocusEvent'
26+
, SyntheticKeyboardEvent'
2727
, SyntheticMouseEvent'
2828
, SyntheticTouchEvent'
2929
, SyntheticTransitionEvent'
3030
, SyntheticUIEvent'
3131
, SyntheticWheelEvent'
3232

33+
, SyntheticEvent_
34+
3335
, NativeEventTarget
3436
, NativeEvent
3537
, NativeDataTransfer
3638
, NativeAbstractView
3739
, NativeTouchList
3840

41+
, bubbles
42+
, cancelable
43+
, currentTarget
44+
, defaultPrevented
45+
, eventPhase
46+
, isTrusted
47+
, nativeEvent
3948
, preventDefault
4049
, isDefaultPrevented
4150
, stopPropagation
4251
, isPropagationStopped
52+
, target
53+
, timeStamp
54+
, type_
4355
, persist
56+
, animationName
57+
, clipboardData
58+
, data_
59+
, relatedTarget
60+
, charCode
61+
, key
62+
, keyCode
63+
, locale
64+
, location
65+
, repeat
66+
, which
67+
, button
68+
, buttons
69+
, clientX
70+
, clientY
71+
, pageX
72+
, pageY
73+
, screenX
74+
, screenY
75+
, changedTouches
76+
, targetTouches
77+
, touches
78+
, altKey
79+
, ctrlKey
80+
, getModifierState
81+
, metaKey
82+
, shiftKey
83+
, propertyName
84+
, pseudoElement
85+
, elapsedTime
86+
, detail
87+
, view
88+
, deltaMode
89+
, deltaX
90+
, deltaY
91+
, deltaZ
4492
) where
4593

4694
import Prelude
4795

4896
import Control.Monad.Eff (Eff)
4997

50-
type SyntheticEvent = Record (SyntheticEvent' ())
98+
import Data.Symbol (class IsSymbol, SProxy(..), reflectSymbol)
99+
100+
type SyntheticEvent
101+
= SyntheticEvent_ (SyntheticEvent' ())
102+
103+
type SyntheticAnimationEvent
104+
= SyntheticEvent_ (SyntheticAnimationEvent' (SyntheticEvent' ()))
51105

52-
type SyntheticAnimationEvent = Record (SyntheticAnimationEvent' (SyntheticEvent' ()))
106+
type SyntheticClipboardEvent
107+
= SyntheticEvent_ (SyntheticClipboardEvent' (SyntheticEvent' ()))
53108

54-
type SyntheticClipboardEvent = Record (SyntheticClipboardEvent' (SyntheticEvent' ()))
109+
type SyntheticCompositionEvent
110+
= SyntheticEvent_ (SyntheticCompositionEvent' (SyntheticUIEvent' (SyntheticEvent' ())))
55111

56-
type SyntheticCompositionEvent = Record (SyntheticCompositionEvent' (SyntheticUIEvent' (SyntheticEvent' ())))
112+
type SyntheticInputEvent
113+
= SyntheticEvent_ (SyntheticUIEvent' (SyntheticEvent' ()))
57114

58-
type SyntheticInputEvent = Record (SyntheticUIEvent' (SyntheticEvent' ()))
115+
type SyntheticKeyboardEvent
116+
= SyntheticEvent_ (SyntheticKeyboardEvent' (SyntheticUIEvent' (SyntheticEvent' ())))
59117

60-
type SyntheticKeyboardEvent = Record (SyntheticKeyboardEvent' (SyntheticUIEvent' (SyntheticEvent' ())))
118+
type SyntheticFocusEvent
119+
= SyntheticEvent_ (SyntheticFocusEvent' (SyntheticUIEvent' (SyntheticEvent' ())))
61120

62-
type SyntheticFocusEvent = Record (SyntheticFocusEvent' (SyntheticUIEvent' (SyntheticEvent' ())))
121+
type SyntheticMouseEvent
122+
= SyntheticEvent_ (SyntheticMouseEvent' (SyntheticUIEvent' (SyntheticEvent' ())))
63123

64-
type SyntheticMouseEvent = Record (SyntheticMouseEvent' (SyntheticUIEvent' (SyntheticEvent' ())))
124+
type SyntheticTouchEvent
125+
= SyntheticEvent_ (SyntheticTouchEvent' (SyntheticUIEvent' (SyntheticEvent' ())))
65126

66-
type SyntheticTouchEvent = Record (SyntheticTouchEvent' (SyntheticUIEvent' (SyntheticEvent' ())))
127+
type SyntheticTransitionEvent
128+
= SyntheticEvent_ (SyntheticTransitionEvent' (SyntheticEvent' ()))
67129

68-
type SyntheticTransitionEvent = Record (SyntheticTransitionEvent' (SyntheticEvent' ()))
130+
type SyntheticUIEvent
131+
= SyntheticEvent_ (SyntheticUIEvent' (SyntheticEvent' ()))
69132

70-
type SyntheticUIEvent = Record (SyntheticUIEvent' (SyntheticEvent' ()))
133+
type SyntheticWheelEvent
134+
= SyntheticEvent_ (SyntheticWheelEvent' (SyntheticMouseEvent' (SyntheticEvent' ())))
71135

72-
type SyntheticWheelEvent = Record (SyntheticWheelEvent' (SyntheticMouseEvent' (SyntheticEvent' ())))
136+
foreign import data SyntheticEvent_ :: # Type -> Type
73137

74138
foreign import data NativeEventTarget :: Type
75139

@@ -81,16 +145,6 @@ foreign import data NativeAbstractView :: Type
81145

82146
foreign import data NativeTouchList :: Type
83147

84-
foreign import preventDefault :: forall eff r. Record (SyntheticEvent' r) -> Eff eff Unit
85-
86-
foreign import isDefaultPrevented :: forall eff r. Record (SyntheticEvent' r) -> Eff eff Boolean
87-
88-
foreign import stopPropagation :: forall eff r. Record (SyntheticEvent' r) -> Eff eff Unit
89-
90-
foreign import isPropagationStopped :: forall eff r. Record (SyntheticEvent' r) -> Eff eff Boolean
91-
92-
foreign import persist :: forall eff r. Record (SyntheticEvent' r) -> Eff eff Unit
93-
94148
type SyntheticEvent' r
95149
= ( bubbles :: Boolean
96150
, cancelable :: Boolean
@@ -129,9 +183,9 @@ type SyntheticFocusEvent' r
129183

130184
type SyntheticKeyboardEvent' r
131185
= ( altKey :: Boolean
132-
, charCode :: Int
133186
, ctrlKey :: Boolean
134187
, getModifierState :: String -> Boolean
188+
, charCode :: Int
135189
, key :: String
136190
, keyCode :: Number
137191
, locale :: String
@@ -167,8 +221,8 @@ type SyntheticTouchEvent' r
167221
, ctrlKey :: Boolean
168222
, getModifierState :: String -> Boolean
169223
, metaKey :: Boolean
170-
, shiftKey :: Boolean
171224
, targetTouches :: NativeTouchList
225+
, shiftKey :: Boolean
172226
, touches :: NativeTouchList
173227
| r
174228
)
@@ -193,3 +247,161 @@ type SyntheticWheelEvent' r
193247
, deltaZ :: Number
194248
| r
195249
)
250+
251+
bubbles :: forall eff r. SyntheticEvent_ (bubbles :: Boolean | r) -> Eff eff Boolean
252+
bubbles = get (SProxy :: SProxy "bubbles")
253+
254+
cancelable :: forall eff r. SyntheticEvent_ (cancelable :: Boolean | r) -> Eff eff Boolean
255+
cancelable = get (SProxy :: SProxy "cancelable")
256+
257+
currentTarget :: forall eff r. SyntheticEvent_ (currentTarget :: NativeEventTarget | r) -> Eff eff NativeEventTarget
258+
currentTarget = get (SProxy :: SProxy "currentTarget")
259+
260+
defaultPrevented :: forall eff r. SyntheticEvent_ (defaultPrevented :: Boolean | r) -> Eff eff Boolean
261+
defaultPrevented = get (SProxy :: SProxy "defaultPrevented")
262+
263+
eventPhase :: forall eff r. SyntheticEvent_ (eventPhase :: Number | r) -> Eff eff Number
264+
eventPhase = get (SProxy :: SProxy "eventPhase")
265+
266+
isTrusted :: forall eff r. SyntheticEvent_ (isTrusted :: Boolean | r) -> Eff eff Boolean
267+
isTrusted = get (SProxy :: SProxy "isTrusted")
268+
269+
nativeEvent :: forall eff r. SyntheticEvent_ (nativeEvent :: NativeEvent | r) -> Eff eff NativeEvent
270+
nativeEvent = get (SProxy :: SProxy "nativeEvent")
271+
272+
target :: forall eff r. SyntheticEvent_ (target :: NativeEventTarget | r) -> Eff eff NativeEventTarget
273+
target = get (SProxy :: SProxy "target")
274+
275+
timeStamp :: forall eff r. SyntheticEvent_ (timeStamp :: Number | r) -> Eff eff Number
276+
timeStamp = get (SProxy :: SProxy "timeStamp")
277+
278+
type_ :: forall eff r. SyntheticEvent_ (type :: String | r) -> Eff eff String
279+
type_ = get (SProxy :: SProxy "type")
280+
281+
animationName :: forall eff r. SyntheticEvent_ (animationName :: String | r) -> Eff eff String
282+
animationName = get (SProxy :: SProxy "animationName")
283+
284+
clipboardData :: forall eff r. SyntheticEvent_ (clipboardData :: NativeDataTransfer | r) -> Eff eff NativeDataTransfer
285+
clipboardData = get (SProxy :: SProxy "clipboardData")
286+
287+
data_ :: forall eff r. SyntheticEvent_ (data :: String | r) -> Eff eff String
288+
data_ = get (SProxy :: SProxy "data")
289+
290+
relatedTarget :: forall eff r. SyntheticEvent_ (relatedTarget :: NativeEventTarget | r) -> Eff eff NativeEventTarget
291+
relatedTarget = get (SProxy :: SProxy "relatedTarget")
292+
293+
charCode :: forall eff r. SyntheticEvent_ (charCode :: Int | r) -> Eff eff Int
294+
charCode = get (SProxy :: SProxy "charCode")
295+
296+
key :: forall eff r. SyntheticEvent_ (key :: String | r) -> Eff eff String
297+
key = get (SProxy :: SProxy "key")
298+
299+
keyCode :: forall eff r. SyntheticEvent_ (keyCode :: Number | r) -> Eff eff Number
300+
keyCode = get (SProxy :: SProxy "keyCode")
301+
302+
locale :: forall eff r. SyntheticEvent_ (locale :: String | r) -> Eff eff String
303+
locale = get (SProxy :: SProxy "locale")
304+
305+
location :: forall eff r. SyntheticEvent_ (location :: Number | r) -> Eff eff Number
306+
location = get (SProxy :: SProxy "location")
307+
308+
repeat :: forall eff r. SyntheticEvent_ (repeat :: Boolean | r) -> Eff eff Boolean
309+
repeat = get (SProxy :: SProxy "repeat")
310+
311+
which :: forall eff r. SyntheticEvent_ (which :: Number | r) -> Eff eff Number
312+
which = get (SProxy :: SProxy "which")
313+
314+
button :: forall eff r. SyntheticEvent_ (button :: Number | r) -> Eff eff Number
315+
button = get (SProxy :: SProxy "button")
316+
317+
buttons :: forall eff r. SyntheticEvent_ (buttons :: Number | r) -> Eff eff Number
318+
buttons = get (SProxy :: SProxy "buttons")
319+
320+
clientX :: forall eff r. SyntheticEvent_ (clientX :: Number | r) -> Eff eff Number
321+
clientX = get (SProxy :: SProxy "clientX")
322+
323+
clientY :: forall eff r. SyntheticEvent_ (clientY :: Number | r) -> Eff eff Number
324+
clientY = get (SProxy :: SProxy "clientY")
325+
326+
pageX :: forall eff r. SyntheticEvent_ (pageX :: Number | r) -> Eff eff Number
327+
pageX = get (SProxy :: SProxy "pageX")
328+
329+
pageY :: forall eff r. SyntheticEvent_ (pageY :: Number | r) -> Eff eff Number
330+
pageY = get (SProxy :: SProxy "pageY")
331+
332+
screenX :: forall eff r. SyntheticEvent_ (screenX :: Number | r) -> Eff eff Number
333+
screenX = get (SProxy :: SProxy "screenX")
334+
335+
screenY :: forall eff r. SyntheticEvent_ (screenY :: Number | r) -> Eff eff Number
336+
screenY = get (SProxy :: SProxy "screenY")
337+
338+
changedTouches :: forall eff r. SyntheticEvent_ (changedTouches :: NativeTouchList | r) -> Eff eff NativeTouchList
339+
changedTouches = get (SProxy :: SProxy "changedTouches")
340+
341+
targetTouches :: forall eff r. SyntheticEvent_ (targetTouches :: NativeTouchList | r) -> Eff eff NativeTouchList
342+
targetTouches = get (SProxy :: SProxy "targetTouches")
343+
344+
touches :: forall eff r. SyntheticEvent_ (touches :: NativeTouchList | r) -> Eff eff NativeTouchList
345+
touches = get (SProxy :: SProxy "touches")
346+
347+
altKey :: forall eff r. SyntheticEvent_ (altKey :: Boolean | r) -> Eff eff Boolean
348+
altKey = get (SProxy :: SProxy "altKey")
349+
350+
ctrlKey :: forall eff r. SyntheticEvent_ (ctrlKey :: Boolean | r) -> Eff eff Boolean
351+
ctrlKey = get (SProxy :: SProxy "ctrlKey")
352+
353+
metaKey :: forall eff r. SyntheticEvent_ (metaKey :: Boolean | r) -> Eff eff Boolean
354+
metaKey = get (SProxy :: SProxy "metaKey")
355+
356+
shiftKey :: forall eff r. SyntheticEvent_ (shiftKey :: Boolean | r) -> Eff eff Boolean
357+
shiftKey = get (SProxy :: SProxy "shiftKey")
358+
359+
propertyName :: forall eff r. SyntheticEvent_ (propertyName :: String | r) -> Eff eff String
360+
propertyName = get (SProxy :: SProxy "propertyName")
361+
362+
pseudoElement :: forall eff r. SyntheticEvent_ (pseudoElement :: String | r) -> Eff eff String
363+
pseudoElement = get (SProxy :: SProxy "pseudoElement")
364+
365+
elapsedTime :: forall eff r. SyntheticEvent_ (elapsedTime :: Number | r) -> Eff eff Number
366+
elapsedTime = get (SProxy :: SProxy "elapsedTime")
367+
368+
detail :: forall eff r. SyntheticEvent_ (detail :: Number | r) -> Eff eff Number
369+
detail = get (SProxy :: SProxy "detail")
370+
371+
view :: forall eff r. SyntheticEvent_ (view :: NativeAbstractView | r) -> Eff eff NativeAbstractView
372+
view = get (SProxy :: SProxy "view")
373+
374+
deltaMode :: forall eff r. SyntheticEvent_ (deltaMode :: Number | r) -> Eff eff Number
375+
deltaMode = get (SProxy :: SProxy "deltaMode")
376+
377+
deltaX :: forall eff r. SyntheticEvent_ (deltaX :: Number | r) -> Eff eff Number
378+
deltaX = get (SProxy :: SProxy "deltaX")
379+
380+
deltaY :: forall eff r. SyntheticEvent_ (deltaY :: Number | r) -> Eff eff Number
381+
deltaY = get (SProxy :: SProxy "deltaY")
382+
383+
deltaZ :: forall eff r. SyntheticEvent_ (deltaZ :: Number | r) -> Eff eff Number
384+
deltaZ = get (SProxy :: SProxy "deltaZ")
385+
386+
foreign import preventDefault :: forall eff r. SyntheticEvent_ r -> Eff eff Unit
387+
388+
foreign import isDefaultPrevented :: forall eff r. SyntheticEvent_ r -> Eff eff Boolean
389+
390+
foreign import stopPropagation :: forall eff r. SyntheticEvent_ r -> Eff eff Unit
391+
392+
foreign import isPropagationStopped :: forall eff r. SyntheticEvent_ r -> Eff eff Boolean
393+
394+
foreign import persist :: forall eff r. SyntheticEvent_ r -> Eff eff Unit
395+
396+
foreign import getModifierState :: forall eff r. String -> SyntheticEvent_ (getModifierState :: String -> Boolean | r) -> Eff eff Boolean
397+
398+
get
399+
:: forall eff l r s a
400+
. RowCons l a r s
401+
=> IsSymbol l
402+
=> SProxy l
403+
-> SyntheticEvent_ s
404+
-> Eff eff a
405+
get l r = unsafeGet (reflectSymbol l) r
406+
407+
foreign import unsafeGet :: forall eff r a. String -> SyntheticEvent_ r -> Eff eff a

0 commit comments

Comments
 (0)