module Miso.Lynx.FFI
(
setInterval
, clearInterval
, setTimeout
, clearTimeout
, invokeExec
) where
import Control.Monad
import Language.Javascript.JSaddle
import Miso
setInterval :: Double -> JSM () -> JSM Double
setInterval :: Double -> JSM () -> JSM Double
setInterval Double
delay JSM ()
f = do
cb <- Function -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal (Function -> JSM JSVal) -> JSM Function -> JSM JSVal
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSM () -> JSM Function
asyncCallback JSM ()
f
v <- toJSVal delay
result <- jsg "lynx" # "setInterval" $ ([cb, v] :: [JSVal])
fromJSValUnchecked result
clearInterval :: Double -> JSM Double
clearInterval :: Double -> JSM Double
clearInterval Double
intervalId = do
result <- String -> JSM JSVal
forall a. ToJSString a => a -> JSM JSVal
jsg String
"lynx" JSM JSVal -> String -> [Double] -> JSM JSVal
forall this name args.
(MakeObject this, ToJSString name, MakeArgs args) =>
this -> name -> args -> JSM JSVal
# String
"clearInterval" ([Double] -> JSM JSVal) -> [Double] -> JSM JSVal
forall a b. (a -> b) -> a -> b
$ [Double
intervalId]
fromJSValUnchecked result
setTimeout :: Double -> JSM () -> JSM Double
setTimeout :: Double -> JSM () -> JSM Double
setTimeout Double
delay JSM ()
f = do
cb <- JSM Function -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal (JSM () -> JSM Function
asyncCallback JSM ()
f)
v <- toJSVal delay
result <- jsg "lynx" # "setTimeout" $ [cb, v]
fromJSValUnchecked result
clearTimeout :: Double -> JSM ()
clearTimeout :: Double -> JSM ()
clearTimeout Double
timerId = JSM JSVal -> JSM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSM JSVal -> JSM ()) -> JSM JSVal -> JSM ()
forall a b. (a -> b) -> a -> b
$ String -> JSM JSVal
forall a. ToJSString a => a -> JSM JSVal
jsg String
"lynx" JSM JSVal -> String -> [Double] -> JSM JSVal
forall this name args.
(MakeObject this, ToJSString name, MakeArgs args) =>
this -> name -> args -> JSM JSVal
# String
"clearTimeout" ([Double] -> JSM JSVal) -> [Double] -> JSM JSVal
forall a b. (a -> b) -> a -> b
$ [Double
timerId]
invokeExec
:: (ToJSVal params, FromJSVal argument)
=> MisoString
-> MisoString
-> params
-> (argument -> action)
-> (MisoString -> action)
-> Effect parent model action
invokeExec :: forall params argument action parent model.
(ToJSVal params, FromJSVal argument) =>
MisoString
-> MisoString
-> params
-> (argument -> action)
-> (MisoString -> action)
-> Effect parent model action
invokeExec MisoString
method MisoString
selector params
params argument -> action
successful MisoString -> action
errorful = do
(Sink action -> JSM ()) -> Effect parent model action
forall action parent model.
(Sink action -> JSM ()) -> Effect parent model action
withSink ((Sink action -> JSM ()) -> Effect parent model action)
-> (Sink action -> JSM ()) -> Effect parent model action
forall a b. (a -> b) -> a -> b
$ \Sink action
sink -> do
selector_ <- MisoString -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal MisoString
selector
successful_ <- toJSVal =<< do
asyncCallback1 $ \JSVal
arg -> do
result <- JSVal -> JSM argument
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked JSVal
arg
sink (successful result)
errorful_ <- toJSVal =<< do
asyncCallback1 $ \JSVal
arg -> do
rect <- JSVal -> JSM MisoString
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked JSVal
arg
sink (errorful rect)
params_ <- toJSVal params
method__ <- toJSVal method
void $ do
jsg (ms "globalThis" :: MisoString) # (ms "invokeExec" :: MisoString) $
[ selector_
, method__
, params_
, successful_
, errorful_
]