front-0.0.0.1: src/Text/Blaze/Front/Event.hs
{-# LANGUAGE DeriveFunctor #-}
module Text.Blaze.Front.Event
( -- * Event handling
mapActions
-- ** Keyboard events
, onKeyDown
, onKeyUp
, onKeyPress
-- ** Focus events
, onFocus
, onBlur
-- ** Form events
, onValueChange
, onCheckedChange
, onSelectedChange
, onSubmit
-- ** Mouse events
, onClick
, onDoubleClick
, onMouseDown
, onMouseUp
, onMouseMove
, onMouseEnter
, onMouseLeave
, onMouseOver
, onMouseOut
-- ** UI Events
, onScroll
-- ** Wheel Events
, onWheel
) where
import Text.Blaze.Front.Internal (MarkupM(..), Attribute(..), Markup)
import Prelude
import Bridge
-- | Modify all event handlers attached to a 'Markup' tree so that the given
-- function is applied to the return values of their callbacks.
mapActions :: (act -> act') -> Markup act -> Markup act'
mapActions = MapActions
-- Keyboard events
-------------------------------------------------------------------------------
-- | The user has pressed a physical key while the target element was focused.
onKeyDown :: act -> Attribute act
onKeyDown = onEvent . OnKeyDown
-- | The user has released a phyiscal key while the target element was focused.
onKeyUp :: act -> Attribute act
onKeyUp = onEvent . OnKeyUp
-- | The user has input some ASCII character while the target element was
onKeyPress :: act -> Attribute act
onKeyPress = onEvent . OnKeyPress
-- Focus events
-------------------------------------------------------------------------------
-- | The focus has moved to the target element.
onFocus :: act -> Attribute act
onFocus = onEvent . OnFocus
-- | The focus has left the target element.
onBlur :: act -> Attribute act
onBlur = onEvent . OnBlur
-- Form events
-------------------------------------------------------------------------------
-- | The 'value' property of the target element has changed. The new value is
-- passed as a parameter to the callback. This handler is supported for
-- <input>, <textarea>, and <select> elements.
onValueChange :: act -> Attribute act
onValueChange = onEvent . OnValueChange
-- | The 'checked' property of the target element has changed. This handler is
-- supported for <input> elements of type 'checkbox' or 'radio'.
onCheckedChange :: act -> Attribute act
onCheckedChange = onEvent . OnCheckedChange
-- | The 'selected' property of the the target element has changed. This
-- handler is supported for <option> elements.
onSelectedChange :: act -> Attribute act
onSelectedChange = onEvent . OnSelectedChange
-- | The user has submitted the target form. This handler is supported for
-- <form> elements.
onSubmit :: act -> Attribute act
onSubmit = onEvent . OnSubmit
-- Mouse events
-------------------------------------------------------------------------------
-- | A simplified version of 'onClick' which watches for the 'LeftButton' only
-- and ignores the cursor position.
onClick :: act -> Attribute act
onClick = onEvent . OnClick
-- | A simplified version of 'onDoubleClick' which watches for the 'LeftButton'
-- only and ignores the cursor position.
onDoubleClick :: act -> Attribute act
onDoubleClick = onEvent . OnDoubleClick
-- | A simplified version of 'onMouseDown' which watches for the 'LeftButton'
-- only and ignores the cursor position.
onMouseDown :: act -> Attribute act
onMouseDown = onEvent . OnMouseDown
-- | A simplified version of 'onMouseUp' which watches for the 'LeftButton'
-- only and ignores the cursor position.
onMouseUp :: act -> Attribute act
onMouseUp = onEvent . OnMouseUp
-- | The mouse cursor has moved while positioned over the target element. The
-- mouse position at the time the event was fired is passed as a parameter to
-- the callback.
onMouseMove :: act -> Attribute act
onMouseMove = onEvent . OnMouseMove
-- | The mouse cursor has entered the region occupied by the target element.
-- The mouse position at the time the event was fired is passed as a parameter
-- to the callback.
onMouseEnter :: act -> Attribute act
onMouseEnter = onEvent . OnMouseEnter
-- | The mouse cursor has left the region occupied by the target element. The
-- mouse position at the time the event was fired is passed as a parameter to
-- the callback.
onMouseLeave :: act -> Attribute act
onMouseLeave = onEvent . OnMouseLeave
-- | Like MouseEnter, but handles bubbling differently.
onMouseOver :: act -> Attribute act
onMouseOver = onEvent . OnMouseOver
-- | Like MouseLeave, but handles bubbling differently.
onMouseOut :: act -> Attribute act
onMouseOut = onEvent . OnMouseOut
-- UI events
-------------------------------------------------------------------------------
-- | The the scroll-position of the page has changed. The amount by which it
-- has changed (in lines) is passed as a parameter to the callback.
onScroll :: act -> Attribute act
onScroll = onEvent . OnScroll
-- Wheel events
-------------------------------------------------------------------------------
-- | The user has moved the scroll-wheel. The amount by which the scroll
-- position of an infinitely large page is affected is passed as a parameter to
-- the callback.
onWheel :: act -> Attribute act
onWheel = onEvent . OnWheel
-------------------------------------------------------------------------------
-- Internal
-------------------------------------------------------------------------------
-- | Register an event handler.
onEvent :: EventHandler act -> Attribute act
onEvent eh = Attribute (OnEvent eh)
{-# INLINE onEvent #-}