on develop help sign in
Use inAnimationFrame from ghcjs-dom.
b8ff8b6Hamish Mackenzie
reflex-dom-core/reflex-dom-core.cabal+1−1
@@ -51,7 +51,7 @@ library
51 dependent-sum-template >= 0.0.0.4 && < 0.1,
51 dependent-sum-template >= 0.0.0.4 && < 0.1,
52 directory >= 1.2 && < 1.4,
52 directory >= 1.2 && < 1.4,
53 exception-transformers == 0.4.*,
53 exception-transformers == 0.4.*,
54− ghcjs-dom >= 0.9.0.0 && < 0.10,
54+ ghcjs-dom >= 0.9.1.0 && < 0.10,
55 jsaddle >=0.9.0.0 && <0.10,
55 jsaddle >=0.9.0.0 && <0.10,
56 -- keycode-0.2 has a bug on firefox
56 -- keycode-0.2 has a bug on firefox
57 keycode >= 0.2.1 && < 0.3,
57 keycode >= 0.2.1 && < 0.3,
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+4−15
@@ -208,27 +208,16 @@ runImmediateDomBuilderT
208 -> ImmediateDomBuilderEnv t
208 -> ImmediateDomBuilderEnv t
209 -> Chan [DSum (EventTriggerRef t) TriggerInvocation]
209 -> Chan [DSum (EventTriggerRef t) TriggerInvocation]
210 -> m a
210 -> m a
211−runImmediateDomBuilderT (ImmediateDomBuilderT a) env eventChan = do
211+runImmediateDomBuilderT (ImmediateDomBuilderT a) env eventChan =
212− handlersMVar <- liftIO $ newMVar []
213 flip runTriggerEventT eventChan $ do
212 flip runTriggerEventT eventChan $ do
214− win <- DOM.currentWindowUnchecked
215 rec (x, req) <- runRequesterT (runReaderT a env) rsp
213 rec (x, req) <- runRequesterT (runReaderT a env) rsp
216− rsp <- performEventAsync $ ffor req $ \rm f -> liftJSM $ runInAnimationFrame handlersMVar win f $
214+ rsp <- performEventAsync $ ffor req $ \rm f -> liftJSM $ runInAnimationFrame f $
217 DMap.traverseWithKey (\_ r -> Identity <$> r) rm
215 DMap.traverseWithKey (\_ r -> Identity <$> r) rm
218 return x
216 return x
219 where
217 where
220− runInAnimationFrame handlersMVar win f x = do
218+ runInAnimationFrame f x = void . DOM.inAnimationFrame' $ \_ -> do
221− handlers <- liftIO $ takeMVar handlersMVar
222− when (null handlers) $ do
223− rec cb <- newRequestAnimationFrameCallbackSync $ \_ -> do
224− freeRequestAnimationFrameCallback cb
225− handlersToRun <- liftIO $ takeMVar handlersMVar
226− liftIO $ putMVar handlersMVar []
227− sequence_ (reverse handlersToRun)
228− void $ Window.requestAnimationFrame win cb
229− liftIO $ putMVar handlersMVar ((do
230 v <- synchronously x
219 v <- synchronously x
231− void . liftIO $ f v) : handlers)
220+ void . liftIO $ f v
232
221
233class Monad m => HasDocument m where
222class Monad m => HasDocument m where
234 askDocument :: m Document
223 askDocument :: m Document