Skip to content

Commit 898a805

Browse files
committed
Added refs, deferred, and expanded events.
1 parent 5611d2c commit 898a805

File tree

1 file changed

+48
-2
lines changed

1 file changed

+48
-2
lines changed

src/React.purs

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module React where
55

66
foreign import data DOM :: !
77
foreign import data ReadPropsEff :: * -> !
8+
foreign import data ReadRefsEff :: * -> !
89
foreign import data ReadStateEff :: * -> !
910
foreign import data WriteStateEff :: * -> !
1011
foreign import data UI :: *
@@ -90,6 +91,13 @@ module React where
9091
:: forall props eff.
9192
Eff (p :: ReadPropsEff props | eff) props
9293

94+
foreign import getRefs
95+
" function getRefs() { \
96+
\ return __current.refs; \
97+
\ }"
98+
:: forall refs eff.
99+
Eff (f :: ReadRefsEff refs | eff) refs
100+
93101
foreign import writeState
94102
" function writeState(state) { \
95103
\ __current.replaceState({state: state}); \
@@ -176,9 +184,34 @@ module React where
176184
-> Render props state
177185
-> (props -> UI)
178186

179-
type Event = { }
187+
type DOMEvent = forall attrs. { | attrs}
188+
type DOMEventTarget = forall attrs. { | attrs }
189+
type Event = { bubbles :: Boolean
190+
, cancelable :: Boolean
191+
, currentTarget :: DOMEventTarget
192+
, defaultPrevented :: Boolean
193+
, eventPhase :: Number
194+
, isTrusted :: Boolean
195+
, nativeEvent :: DOMEvent
196+
, preventDefault :: {} -> {}
197+
, stopPropagation :: {} -> {}
198+
, target :: DOMEventTarget
199+
, timeStamp :: Number
200+
, eventType :: String
201+
}
180202
type MouseEvent = { pageX :: Number, pageY :: Number }
181-
type KeyboardEvent = { key :: String }
203+
type KeyboardEvent = { altKey :: Boolean
204+
, ctrlKey :: Boolean
205+
, charCode :: Number
206+
, key :: String
207+
, keyCode :: Number
208+
, locale :: String
209+
, location :: Number
210+
, metaKey :: Boolean
211+
, repeat :: Boolean
212+
, shiftKey :: Boolean
213+
, which :: Number
214+
}
182215

183216
type EventHandlerContext eff props state result = Eff (
184217
p :: ReadPropsEff props,
@@ -225,3 +258,16 @@ module React where
225258
\ } \
226259
\ }"
227260
:: forall eff. String -> UI -> Eff (dom :: DOM | eff) UI
261+
262+
foreign import deferred
263+
"function deferred(action) {\
264+
\ var component = __current;\
265+
\ return function() {\
266+
\ __current = component;\
267+
\ try {\
268+
\ return action();\
269+
\ } finally {\
270+
\ __current = null;\
271+
\ }\
272+
\ };\
273+
\}" :: forall a eff. Eff eff a -> Eff eff a

0 commit comments

Comments
 (0)