module Graphics.UI.Threepenny.JQuery where
import Control.Arrow
import Data.Char
import Data.Default
import Data.Maybe
import Graphics.UI.Threepenny.Core
import qualified Graphics.UI.Threepenny.Internal.Driver as Core
import qualified Graphics.UI.Threepenny.Internal.Types as Core
import Text.JSON
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"
[encode elid,encode (makeObj (map (second showJSON) props)),show duration,map toLower (show easing)]
(const complete)
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)"