@@ -64,22 +64,41 @@ mainHydrationWidgetWithHead = mainHydrationWidgetWithHead'
64{-# INLINABLE mainHydrationWidgetWithHead' #-}
64{-# INLINABLE mainHydrationWidgetWithHead' #-}
65-- | Warning: `mainHydrationWidgetWithHead'` is provided only as performance tweak. It is expected to disappear in future releases.
65-- | Warning: `mainHydrationWidgetWithHead'` is provided only as performance tweak. It is expected to disappear in future releases.
66mainHydrationWidgetWithHead' :: HydrationWidget () () -> HydrationWidget () () -> JSM ()
66mainHydrationWidgetWithHead' :: HydrationWidget () () -> HydrationWidget () () -> JSM ()
67−mainHydrationWidgetWithHead' = mainHydrationWidgetWithSwitchoverAction' (pure ()) (pure ())
67+mainHydrationWidgetWithHead' = mainHydrationWidgetWithSwitchoverAction' (pure ())
69{-# INLINE mainHydrationWidgetWithSwitchoverAction #-}
69{-# INLINE mainHydrationWidgetWithSwitchoverAction #-}
70−mainHydrationWidgetWithSwitchoverAction :: IO () -> JSM () -> (forall x. HydrationWidget x ()) -> (forall x. HydrationWidget x ()) -> JSM ()
70+mainHydrationWidgetWithSwitchoverAction :: JSM () -> (forall x. HydrationWidget x ()) -> (forall x. HydrationWidget x ()) -> JSM ()
71mainHydrationWidgetWithSwitchoverAction = mainHydrationWidgetWithSwitchoverAction'
71mainHydrationWidgetWithSwitchoverAction = mainHydrationWidgetWithSwitchoverAction'
73{-# INLINABLE mainHydrationWidgetWithSwitchoverAction' #-}
73{-# INLINABLE mainHydrationWidgetWithSwitchoverAction' #-}
74-- | Warning: `mainHydrationWidgetWithSwitchoverAction'` is provided only as performance tweak. It is expected to disappear in future releases.
74-- | Warning: `mainHydrationWidgetWithSwitchoverAction'` is provided only as performance tweak. It is expected to disappear in future releases.
75−mainHydrationWidgetWithSwitchoverAction' :: IO () -> JSM () -> HydrationWidget () () -> HydrationWidget () () -> JSM ()
75+mainHydrationWidgetWithSwitchoverAction' :: JSM () -> HydrationWidget () () -> HydrationWidget () () -> JSM ()
76+mainHydrationWidgetWithSwitchoverAction' = mainHydrationWidgetWithSwitchoverActionWithFailure' (pure ())
79+{-# INLINABLE mainHydrationWidgetWithSwitchoverActionWithFailure' #-}
80+-- | Warning: `mainHydrationWidgetWithSwitchoverActionWithFaiilure'` is provided only as performance tweak. It is expected to disappear in future releases.
81+mainHydrationWidgetWithSwitchoverActionWithFailure' :: IO () -> JSM () -> HydrationWidget () () -> HydrationWidget () () -> JSM ()
76−mainHydrationWidgetWithSwitchoverAction' onFailure switchoverAction head' body = do
82+mainHydrationWidgetWithSwitchoverActionWithFailure' onFailure switchoverAction head' body = do
77− runHydrationWidgetWithHeadAndBody onFailure switchoverAction $ \appendHead appendBody -> do
83+ runHydrationWidgetWithHeadAndBodyWithFailure onFailure switchoverAction $ \appendHead appendBody -> do
78 appendHead head'
84 appendHead head'
79 appendBody body
85 appendBody body
81{-# INLINABLE attachHydrationWidget #-}
87{-# INLINABLE attachHydrationWidget #-}
82attachHydrationWidget
88attachHydrationWidget
90+ -> JSContextSingleton ()
91+ -> ( Event DomTimeline ()
92+ -> IORef HydrationMode
93+ -> Maybe (IORef [(Node, HydrationRunnerT DomTimeline (DomCoreWidget ()) ())])
95+ -> PerformEventT DomTimeline DomHost (a, IORef (Maybe (EventTrigger DomTimeline ())))
97+ -> IO (a, FireCommand DomTimeline DomHost)
98+attachHydrationWidget = attachHydrationWidgetWithFailure (pure ())
100+{-# INLINABLE attachHydrationWidgetWithFailure #-}
101+attachHydrationWidgetWithFailure
84 -> JSM ()
103 -> JSM ()
85 -> JSContextSingleton ()
104 -> JSContextSingleton ()
@@ -90,7 +109,7 @@ attachHydrationWidget
90 -> PerformEventT DomTimeline DomHost (a, IORef (Maybe (EventTrigger DomTimeline ())))
109 -> PerformEventT DomTimeline DomHost (a, IORef (Maybe (EventTrigger DomTimeline ())))
92 -> IO (a, FireCommand DomTimeline DomHost)
111 -> IO (a, FireCommand DomTimeline DomHost)
93−attachHydrationWidget onFailure switchoverAction jsSing w = do
112+attachHydrationWidgetWithFailure onFailure switchoverAction jsSing w = do
94 hydrationMode <- liftIO $ newIORef HydrationMode_Hydrating
113 hydrationMode <- liftIO $ newIORef HydrationMode_Hydrating
95 rootNodesRef <- liftIO $ newIORef []
114 rootNodesRef <- liftIO $ newIORef []
96 events <- newChan
115 events <- newChan
@@ -106,7 +125,7 @@ attachHydrationWidget onFailure switchoverAction jsSing w = do
106 rootNodes <- liftIO $ readIORef rootNodesRef
125 rootNodes <- liftIO $ readIORef rootNodesRef
107 let delayedAction = do
126 let delayedAction = do
108 for_ (reverse rootNodes) $ \(rootNode, runner) -> do
127 for_ (reverse rootNodes) $ \(rootNode, runner) -> do
109− let hydrate = runHydrationRunnerT runner onFailure Nothing rootNode events
128+ let hydrate = runHydrationRunnerTWithFailure runner onFailure Nothing rootNode events
110 void $ runWithJSContextSingleton (runPostBuildT hydrate never) jsSing
129 void $ runWithJSContextSingleton (runPostBuildT hydrate never) jsSing
111 liftIO $ writeIORef hydrationMode HydrationMode_Immediate
130 liftIO $ writeIORef hydrationMode HydrationMode_Immediate
112 runWithJSContextSingleton (DOM.liftJSM switchoverAction) jsSing
131 runWithJSContextSingleton (DOM.liftJSM switchoverAction) jsSing
@@ -121,6 +140,16 @@ type DomCoreWidget x = PostBuildT DomTimeline (WithJSContextSingleton x (Perform
122{-# INLINABLE runHydrationWidgetWithHeadAndBody #-}
141{-# INLINABLE runHydrationWidgetWithHeadAndBody #-}
123runHydrationWidgetWithHeadAndBody
142runHydrationWidgetWithHeadAndBody
144+ -> ( (forall c. HydrationWidget () c -> FloatingWidget () c) -- "Append to head" --TODO: test invoking this more than once
145+ -> (forall c. HydrationWidget () c -> FloatingWidget () c) -- "Append to body" --TODO: test invoking this more than once
146+ -> FloatingWidget () ()
149+runHydrationWidgetWithHeadAndBody = runHydrationWidgetWithHeadAndBodyWithFailure (pure ())
151+{-# INLINABLE runHydrationWidgetWithHeadAndBodyWithFailure #-}
152+runHydrationWidgetWithHeadAndBodyWithFailure
125 -> JSM ()
154 -> JSM ()
126 -> ( (forall c. HydrationWidget () c -> FloatingWidget () c) -- "Append to head" --TODO: test invoking this more than once
155 -> ( (forall c. HydrationWidget () c -> FloatingWidget () c) -- "Append to head" --TODO: test invoking this more than once
@@ -128,11 +157,11 @@ runHydrationWidgetWithHeadAndBody
128 -> FloatingWidget () ()
157 -> FloatingWidget () ()
130 -> JSM ()
159 -> JSM ()
131−runHydrationWidgetWithHeadAndBody onFailure switchoverAction app = withJSContextSingletonMono $ \jsSing -> do
160+runHydrationWidgetWithHeadAndBodyWithFailure onFailure switchoverAction app = withJSContextSingletonMono $ \jsSing -> do
132 globalDoc <- currentDocumentUnchecked
161 globalDoc <- currentDocumentUnchecked
133 headElement <- getHeadUnchecked globalDoc
162 headElement <- getHeadUnchecked globalDoc
134 bodyElement <- getBodyUnchecked globalDoc
163 bodyElement <- getBodyUnchecked globalDoc
135− (events, fc) <- liftIO . attachHydrationWidget onFailure switchoverAction jsSing $ \switchover hydrationMode hydrationResult events -> do
164+ (events, fc) <- liftIO . attachHydrationWidgetWithFailure onFailure switchoverAction jsSing $ \switchover hydrationMode hydrationResult events -> do
136 (postBuild, postBuildTriggerRef) <- newEventWithTriggerRef
165 (postBuild, postBuildTriggerRef) <- newEventWithTriggerRef
137 let hydrateDom :: DOM.Node -> HydrationWidget () c -> FloatingWidget () c
166 let hydrateDom :: DOM.Node -> HydrationWidget () c -> FloatingWidget () c
138 hydrateDom n w = do
167 hydrateDom n w = do