module Graphics.UI.Threepenny.JQuery where
import Control.Arrow
import Data.Aeson as JSON
import Data.String
import Data.Char
import Data.Default
import Data.Maybe
import Graphics.UI.Threepenny.Core
import Graphics.UI.Threepenny.Internal.FFI (showJSON)
import qualified Graphics.UI.Threepenny.Internal.Driver as Core
import qualified Graphics.UI.Threepenny.Internal.Types as Core
import Reactive.Threepenny
data Easing = Swing | Linear
deriving (Eq,Enum,Show)
instance Default Easing where
def = Linear
animate :: Element -> [(String,String)] -> Int -> Easing -> IO () -> IO ()
animate el props duration easing complete =
Core.withElement (toElement el) $ \elid window ->
callDeferredFunction window
"jquery_animate"
[showJSON elid,showJSON propsJSON,show duration,map toLower (show easing)]
(const complete)
where
propsJSON = JSON.object [fromString name .= val | (name,val) <- props]
fadeIn :: Element -> Int -> Easing -> IO () -> IO ()
fadeIn el duration easing complete =
animate el [("opacity","1")] duration easing complete
fadeOut :: Element -> Int -> Easing -> IO () -> IO ()
fadeOut el duration easing complete =
animate el [("opacity","0")] duration easing complete
sendValue :: Element -> Event String
sendValue el = fmap f (domEvent "sendvalue" el)
where
f (EventData x) = concat . catMaybes $ x
setFocus :: Element -> UI ()
setFocus = runFunction . ffi "$(%1).focus()"
scrollToBottom :: Element -> UI ()
scrollToBottom = runFunction . ffi "jquery_scrollToBottom(%1)"