@@ -5,7 +5,7 @@ module Obelisk.Run where
55
66import Control.Concurrent
77import Control.Exception
8−import Control.Lens ((^?), _Right, _Just)
8+import Control.Lens ((^?), _Just, _Right)
99import qualified Data.Attoparsec.ByteString.Char8 as A
1010import Data.ByteString (ByteString)
1111import qualified Data.ByteString.Char8 as BSC
@@ -14,15 +14,15 @@ import Data.Maybe
1414import Data.Semigroup ((<>))
1515import Data.Streaming.Network (bindPortTCP)
1616import qualified Data.Text as T
17−import Language.Javascript.JSaddle.WebSockets
1817import Language.Javascript.JSaddle.Run (syncPoint)
19−import Network.HTTP.Client (defaultManagerSettings, newManager, Manager)
18+import Language.Javascript.JSaddle.WebSockets
19+import Network.HTTP.Client (Manager, defaultManagerSettings, newManager)
2020import qualified Network.HTTP.ReverseProxy as RP
2121import Network.Socket
2222import Network.Wai (Application)
2323import Network.Wai.Handler.Warp
24+import Network.Wai.Handler.Warp.Internal (settingsHost, settingsPort)
2425import Network.WebSockets.Connection (defaultConnectionOptions)
25−import Network.Wai.Handler.Warp.Internal (settingsPort, settingsHost)
2626import Obelisk.ExecutableConfig (get)
2727import Reflex.Dom.Core
2828import System.Environment
@@ -34,7 +34,7 @@ import Text.URI.Lens
3434
3535run :: Int -- ^ Port to run the backend
3636 -> IO () -- ^ Backend
37− -> Widget () () -- ^ Frontend widget
37+ -> (Widget () (), Widget () ()) -- ^ Frontend widget (head, body)
3838 -> IO ()
3939run port backend frontend = do
4040 let handleBackendErr (_ :: SomeException) = hPutStrLn stderr "backend stopped; make a change to your code to reload"
@@ -52,8 +52,8 @@ getConfigRoute = do
5252defAppUri :: URI
5353defAppUri = fromMaybe (error "defAppUri") $ URI.mkURI "http://127.0.0.1:8000"
5454
55−runWidget :: RunConfig -> Widget () () -> IO ()
56−runWidget conf w = do
55+runWidget :: RunConfig -> (Widget () (), Widget () ()) -> IO ()
56+runWidget conf (h, b) = do
5757 uri <- fromMaybe defAppUri <$> getConfigRoute
5858 let port = fromIntegral $ fromMaybe 80 $ uri ^? uriAuthority . _Right . authPort . _Just
5959 redirectHost = _runConfig_redirectHost conf
@@ -66,7 +66,10 @@ runWidget conf w = do
6666 close
6767 (\skt -> do
6868 man <- newManager defaultManagerSettings
69− app <- jsaddleWithAppOr defaultConnectionOptions (mainWidget' w >> syncPoint) (fallbackProxy redirectHost redirectPort man)
69+ app <- jsaddleWithAppOr
70+ defaultConnectionOptions
71+ (mainWidgetWithHead' (const h, const b) >> syncPoint)
72+ (fallbackProxy redirectHost redirectPort man)
7073 runSettingsSocket settings skt app)
7174
7275-- | like 'bindPortTCP' but reconnects on exception