Commit 5829c8ab authored by James Laver's avatar James Laver

Make SyntheticEvent be a type parameterised by an underlying native event type

parent 792d95b6
...@@ -3,129 +3,110 @@ module Reactix.SyntheticEvent where ...@@ -3,129 +3,110 @@ module Reactix.SyntheticEvent where
import Prelude import Prelude
import DOM.Simple as DOM import DOM.Simple as DOM
import DOM.Simple.Event as E
import DOM.Simple.Event
( class IsEvent, class IsMouseEvent, class HasModifierKeys
, KeyboardEvent, MouseEvent, MouseButtonEvent, TouchEvent )
import Effect ( Effect ) import Effect ( Effect )
import Effect.Uncurried ( EffectFn1, runEffectFn1 ) import Effect.Uncurried ( EffectFn1, runEffectFn1 )
import FFI.Simple ( (..), (...), delay ) import FFI.Simple ( (..), (...), delay )
class IsSyntheticEvent e foreign import data SyntheticEvent :: Type -> Type
foreign import data NativeEvent :: Type bubbles :: forall e. IsEvent e => SyntheticEvent e -> Boolean
foreign import data MouseEvent :: Type
foreign import data KeyboardEvent :: Type
instance keyboardEventIsSyntheticEvent :: IsSyntheticEvent KeyboardEvent
instance mouseEventIsSyntheticEvent :: IsSyntheticEvent MouseEvent
bubbles :: forall e. IsSyntheticEvent e => e -> Boolean
bubbles e = e .. "bubbles" bubbles e = e .. "bubbles"
cancelable :: forall e. IsSyntheticEvent e => e -> Boolean cancelable :: forall e. IsEvent e => SyntheticEvent e -> Boolean
cancelable e = e .. "cancelable" cancelable e = e .. "cancelable"
isTrusted :: forall e. IsSyntheticEvent e => e -> Boolean isTrusted :: forall e. IsEvent e => SyntheticEvent e -> Boolean
isTrusted e = e .. "isTrusted" isTrusted e = e .. "isTrusted"
defaultPrevented :: forall e. IsSyntheticEvent e => e -> Boolean defaultPrevented :: forall e. IsEvent e => SyntheticEvent e -> Boolean
defaultPrevented e = e .. "defaultPrevented" defaultPrevented e = e .. "defaultPrevented"
eventPhase :: forall e. IsSyntheticEvent e => e -> Number eventPhase :: forall e. IsEvent e => SyntheticEvent e -> Number
eventPhase e = e .. "eventPhase" eventPhase e = e .. "eventPhase"
timestamp :: forall e. IsSyntheticEvent e => e -> Number timestamp :: forall e. IsEvent e => SyntheticEvent e -> Number
timestamp e = e .. "timeStamp" timestamp e = e .. "timeStamp"
type' :: forall e. IsSyntheticEvent e => e -> String type' :: forall e. IsEvent e => SyntheticEvent e -> String
type' e = e .. "type" type' e = e .. "type"
-- target :: forall e. IsSyntheticEvent e => e -> NativeEventTarget target :: forall e t. IsEvent e => SyntheticEvent e -> DOM.Element
-- target e = e .. "target" target e = e .. "target"
-- currentTarget :: forall e. IsSyntheticEvent e => e -> NativeEventTarget currentTarget :: forall e. IsEvent e => SyntheticEvent e -> DOM.Element
-- currentTarget e = e .. "currentTarget" currentTarget e = e .. "currentTarget"
-- nativeEvent :: forall e. IsSyntheticEvent e => e -> NativeEvent nativeEvent :: forall e. IsEvent e => SyntheticEvent e -> e
-- nativeEvent e = e .. "nativeEvent" nativeEvent e = e .. "nativeEvent"
stopPropagation :: forall e. IsSyntheticEvent e => e -> Effect Unit stopPropagation :: forall e. IsEvent e => SyntheticEvent e -> Effect Unit
stopPropagation e = delay $ \_ -> pure $ e ... "stopPropagation" $ [] stopPropagation e = delay unit $ \_ -> pure $ e ... "stopPropagation" $ []
preventDefault :: forall e. IsSyntheticEvent e => e -> Effect Unit preventDefault :: forall e. IsEvent e => SyntheticEvent e -> Effect Unit
preventDefault e = delay $ \_ -> pure $ e ... "preventDefault" $ [] preventDefault e = delay unit $ \_ -> pure $ e ... "preventDefault" $ []
isPropagationStopped :: forall e. IsSyntheticEvent e => e -> Effect Unit isPropagationStopped :: forall e. IsEvent e => SyntheticEvent e -> Effect Unit
isPropagationStopped e = e ... "isPropagationStopped" $ [] isPropagationStopped e = e ... "isPropagationStopped" $ []
isDefaultPrevented :: forall e. IsSyntheticEvent e => e -> Effect Unit isDefaultPrevented :: forall e. IsEvent e => SyntheticEvent e -> Effect Unit
isDefaultPrevented e = e ... "isDefaultPrevented" $ [] isDefaultPrevented e = e ... "isDefaultPrevented" $ []
-- Events with Modifier keys -- Events with Modifier keys
-- | This class is used to access information about modifier keys for altKey :: forall e. HasModifierKeys e => SyntheticEvent e -> Boolean
-- | supported events
class HasModifierKeys e
instance mouseEventHasModifierKeys :: HasModifierKeys MouseEvent
instance keyboardEventHasModifierKeys :: HasModifierKeys KeyboardEvent
-- instance touchEventHasModifierKeys :: HasModifierKeys TouchEvent
altKey :: forall e. HasModifierKeys e => e -> Boolean
altKey e = e .. "altKey" altKey e = e .. "altKey"
ctrlKey :: forall e. HasModifierKeys e => e -> Boolean ctrlKey :: forall e. HasModifierKeys e => SyntheticEvent e -> Boolean
ctrlKey e = e .. "ctrlKey" ctrlKey e = e .. "ctrlKey"
shiftKey :: forall e. HasModifierKeys e => e -> Boolean shiftKey :: forall e. HasModifierKeys e => SyntheticEvent e -> Boolean
shiftKey e = e .. "shiftKey" shiftKey e = e .. "shiftKey"
metaKey :: forall e. HasModifierKeys e => e -> Boolean metaKey :: forall e. HasModifierKeys e => SyntheticEvent e -> Boolean
metaKey e = e .. "metaKey" metaKey e = e .. "metaKey"
getModifierState :: forall e. HasModifierKeys e => e -> String -> Boolean getModifierState :: forall e. HasModifierKeys e => SyntheticEvent e -> String -> Boolean
getModifierState e s = e ... "getModifierState" $ [ s ] getModifierState e s = e ... "getModifierState" $ [ s ]
-- Keyboard Events -- Keyboard Events
key :: KeyboardEvent -> String key :: SyntheticEvent KeyboardEvent -> String
key e = e .. "key" key e = e .. "key"
which :: KeyboardEvent -> Number which :: SyntheticEvent KeyboardEvent -> Number
which e = e .. "which" which e = e .. "which"
charCode :: KeyboardEvent -> Int charCode :: SyntheticEvent KeyboardEvent -> Int
charCode e = e .. "charCode" charCode e = e .. "charCode"
keyCode :: KeyboardEvent -> Number keyCode :: SyntheticEvent KeyboardEvent -> Number
keyCode e = e .. "keyCode" keyCode e = e .. "keyCode"
locale :: KeyboardEvent -> String locale :: SyntheticEvent KeyboardEvent -> String
locale e = e .. "locale" locale e = e .. "locale"
location :: KeyboardEvent -> Number location :: SyntheticEvent KeyboardEvent -> Number
location e = e .. "location" location e = e .. "location"
repeat :: KeyboardEvent -> Boolean repeat :: SyntheticEvent KeyboardEvent -> Boolean
repeat e = e .. "repeat" repeat e = e .. "repeat"
button :: MouseEvent -> Number button :: SyntheticEvent MouseButtonEvent -> Number
button e = e .. "button" button e = e .. "button"
buttons :: MouseEvent -> Number buttons :: forall e. IsMouseEvent e => SyntheticEvent e -> Number
buttons e = e .. "buttons" buttons e = e .. "buttons"
-- relatedTarget :: MouseEvent -> NativeEventTarget relatedTarget :: forall e. IsMouseEvent e => SyntheticEvent e -> DOM.Element
-- relatedTarget e = e .. "relatedTarget" relatedTarget e = e .. "relatedTarget"
clientX :: MouseEvent -> Number clientX :: forall e. IsMouseEvent e => SyntheticEvent e -> Number
clientX e = e .. "clientX" clientX e = e .. "clientX"
clientY :: MouseEvent -> Number clientY :: forall e. IsMouseEvent e => SyntheticEvent e -> Number
clientY e = e .. "clientY" clientY e = e .. "clientY"
pageX :: MouseEvent -> Number pageX :: forall e. IsMouseEvent e => SyntheticEvent e -> Number
pageX e = e .. "pageX" pageX e = e .. "pageX"
pageY :: MouseEvent -> Number pageY :: forall e. IsMouseEvent e => SyntheticEvent e -> Number
pageY e = e .. "pageY" pageY e = e .. "pageY"
screenX :: MouseEvent -> Number screenX :: forall e. IsMouseEvent e => SyntheticEvent e -> Number
screenX e = e .. "screenX" screenX e = e .. "screenX"
screenY :: MouseEvent -> Number screenY :: forall e. IsMouseEvent e => SyntheticEvent e -> Number
screenY e = e .. "screenY" screenY e = e .. "screenY"
-- foreign import data TouchEvent :: Type -- changedTouches :: TouchEvent -> TouchList
-- targetTouches :: TouchEvent -> TouchList
-- changedTouches :: TouchEvent -> NativeTouchList -- touches :: TouchEvent -> TouchList
-- targetTouches :: TouchEvent -> NativeTouchList
-- touches :: TouchEvent -> NativeTouchList
-- foreign import data NativeDataTransfer :: Type
-- foreign import data NativeAbstractView :: Type
-- foreign import data NativeTouchList :: Type
-- foreign import data AnimationEvent :: Type -- foreign import data AnimationEvent :: Type
-- animationName :: AnimationEvent -> String -- animationName :: AnimationEvent -> String
...@@ -133,14 +114,13 @@ screenY e = e .. "screenY" ...@@ -133,14 +114,13 @@ screenY e = e .. "screenY"
-- elapsedTime :: AnimationEvent -> Number -- elapsedTime :: AnimationEvent -> Number
-- foreign import data ClipboardEvent :: Type -- foreign import data ClipboardEvent :: Type
-- clipboardData :: ClipboardEvent -> NativeDataTransfer -- clipboardData :: ClipboardEvent -> DataTransfer
-- foreign import data CompositionEvent :: Type -- foreign import data CompositionEvent :: Type
-- data' :: SyntheticCompositionEvent -> String -- data' :: SyntheticCompositionEvent -> String
-- foreign import data FocusEvent :: Type -- foreign import data FocusEvent :: Type
-- relatedTarget :: FocusEvent -> NativeEventTarget -- relatedTarget :: FocusEvent -> DOM.Element
-- foreign import data TransitionEvent :: Type -- foreign import data TransitionEvent :: Type
-- propertyName :: TransitionEvent -> String -- propertyName :: TransitionEvent -> String
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment