@@ -42,7 +42,7 @@ import qualified Reflex.TriggerEvent.Base as TriggerEvent
4242
4343makePrisms ''Sum
4444
45−type ObeliskWidget t route m =
45+type ObeliskWidget t x route m =
4646 ( DomBuilder t m
4747 , MonadFix m
4848 , MonadHold t m
@@ -53,18 +53,20 @@ type ObeliskWidget t route m =
5353 , MonadIO m
5454 , MonadIO (Performable m)
5555 , TriggerEvent t m
56−-- , HasDocument m --TODO: Would need StaticDomBuilderT to have this
56+ , HasDocument m
5757 , MonadRef m
5858 , Ref m ~ Ref IO
5959 , MonadRef (Performable m)
6060 , Ref (Performable m) ~ Ref IO
6161 , MonadFix (Performable m)
62+ , PrimMonad m
63+ , Prerender x m
6264 , EventWriter t (Endo route) m
6365 )
6466
6567data Frontend route = Frontend
66− { _frontend_head :: !(forall t m. ObeliskWidget t route m => RoutedT t route m ())
67− , _frontend_body :: !(forall t m x. (MonadWidget t m, PrimMonad m, ObeliskWidget t route m, HasJS x m) => RoutedT t route m ())
68+ { _frontend_head :: !(forall t m x. ObeliskWidget t x route m => RoutedT t route m ())
69+ , _frontend_body :: !(forall t m x. ObeliskWidget t x route m => RoutedT t route m ())
6870 , _frontend_title :: !(route -> Text)
6971 , _frontend_notFoundRoute :: !(Text -> route) --TODO: Instead, maybe we should just require that the `parse` Monad for routeEncoder be `Identity`
7072 }
@@ -76,11 +78,6 @@ type FloatingWidget x = TriggerEventT DomTimeline (DomCoreWidget x)
7678
7779type DomCoreWidget x = PostBuildT DomTimeline (WithJSContextSingleton x (PerformEventT DomTimeline DomHost))
7880
79−--TODO: Upstream
80−instance HasJS x m => HasJS x (EventWriterT t w m) where
81− type JSX (EventWriterT t w m) = JSX m
82− liftJS = lift . liftJS
83−
8481--TODO: Rename
8582{-# INLINABLE attachWidget''' #-}
8683attachWidget'''
@@ -107,9 +104,10 @@ runWithHeadAndBody app = withJSContextSingletonMono $ \jsSing -> do
107104 unreadyChildren <- liftIO $ newIORef 0
108105 let commit = do
109106 headElement <- getHeadUnchecked globalDoc
110− replaceElementContents headElement headFragment
111107 bodyElement <- getBodyUnchecked globalDoc
112− replaceElementContents bodyElement bodyFragment
108+ void $ inAnimationFrame' $ \_ -> do
109+ replaceElementContents headElement headFragment
110+ replaceElementContents bodyElement bodyFragment
113111 liftIO $ attachWidget''' $ \events -> flip runWithJSContextSingleton jsSing $ do
114112 (postBuild, postBuildTriggerRef) <- newEventWithTriggerRef
115113 let appendImmediateDom :: DOM.DocumentFragment -> Widget' () c -> FloatingWidget () c