{-# LANGUAGE CPP #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-}
module Reflex.Dom.Internal
( module Main
, run
, mainWidget
, mainWidgetWithHead, mainWidgetWithCss, mainWidgetWithHead', mainWidgetInElementById, runApp'
, mainHydrationWidgetWithHead, mainHydrationWidgetWithHead'
) where
import Data.ByteString (ByteString)
import Data.Text (Text)
import Reflex.Dom.Core (Widget)
import Reflex.Dom.Main as Main hiding
(mainWidget, mainWidgetWithHead, mainWidgetWithCss,
mainWidgetWithHead', mainWidgetInElementById, runApp',
mainHydrationWidgetWithHead, mainHydrationWidgetWithHead')
import qualified Reflex.Dom.Main as Main
(mainWidget, mainWidgetWithHead, mainWidgetWithCss,
mainWidgetWithHead', mainWidgetInElementById, runApp',
mainHydrationWidgetWithHead, mainHydrationWidgetWithHead')
#if defined(ghcjs_HOST_OS)
run :: a -> a
run = id
#elif defined(MIN_VERSION_jsaddle_warp)
import Data.Maybe (maybe)
import Data.Monoid ((<>))
import Language.Javascript.JSaddle (JSM)
import qualified Language.Javascript.JSaddle.Warp as JW
import System.Environment (lookupEnv)
run :: JSM () -> IO()
run jsm = do
port <- maybe 3003 read <$> lookupEnv "JSADDLE_WARP_PORT"
putStrLn $ "Running jsaddle-warp server on port " <> show port
JW.run port jsm
#elif defined(MIN_VERSION_jsaddle_wkwebview)
#if defined(ios_HOST_OS)
import Data.Default
import Data.Monoid ((<>))
import Language.Javascript.JSaddle (JSM)
import Language.Javascript.JSaddle.WKWebView (run', mainBundleResourcePath)
import Language.Javascript.JSaddle.WKWebView.Internal (jsaddleMainHTMLWithBaseURL)
run :: JSM () -> IO ()
run jsm = do
let indexHtml = "<!DOCTYPE html><html><head></head><body></body></html>"
baseUrl <- mainBundleResourcePath >>= \case
Nothing -> do
putStrLn "Reflex.Dom.run: unable to find main bundle resource path. Assets may not load properly."
return ""
Just p -> return $ "file://" <> p <> "/index.html"
run' def $ jsaddleMainHTMLWithBaseURL indexHtml baseUrl jsm
#else
import Language.Javascript.JSaddle.WKWebView (run)
#endif
#elif defined(ANDROID)
import Android.HaskellActivity
import Control.Monad
import Control.Concurrent
import Data.Default
import Data.String
import Reflex.Dom.Android.MainWidget
import System.IO
import Language.Javascript.JSaddle (JSM)
run :: JSM () -> IO ()
run jsm = do
hSetBuffering stdout LineBuffering
hSetBuffering stderr LineBuffering
continueWithCallbacks $ def
{ _activityCallbacks_onCreate = \_ -> do
a <- getHaskellActivity
let startPage = fromString "file:///android_asset/index.html"
startMainWidget a startPage jsm
}
forever $ threadDelay 1000000000
#elif defined(wasm32_HOST_ARCH)
import qualified Language.Javascript.JSaddle.Wasm as Wasm (run)
import Language.Javascript.JSaddle (JSM)
run :: JSM () -> IO ()
run = Wasm.run 0
#else
import Language.Javascript.JSaddle.WebKitGTK (run)
#endif
mainWidget :: (forall x. Widget x ()) -> IO ()
mainWidget :: (forall x. Widget x ()) -> IO ()
mainWidget w :: forall x. Widget x ()
w = JSM () -> IO ()
run (JSM () -> IO ()) -> JSM () -> IO ()
forall a b. (a -> b) -> a -> b
$ (forall x. Widget x ()) -> JSM ()
Main.mainWidget forall x. Widget x ()
w
{-# INLINE mainWidget #-}
mainWidgetWithHead :: (forall x. Widget x ()) -> (forall x. Widget x ()) -> IO ()
mainWidgetWithHead :: (forall x. Widget x ()) -> (forall x. Widget x ()) -> IO ()
mainWidgetWithHead h :: forall x. Widget x ()
h b :: forall x. Widget x ()
b = JSM () -> IO ()
run (JSM () -> IO ()) -> JSM () -> IO ()
forall a b. (a -> b) -> a -> b
$ (forall x. Widget x ()) -> (forall x. Widget x ()) -> JSM ()
Main.mainWidgetWithHead forall x. Widget x ()
h forall x. Widget x ()
b
{-# INLINE mainWidgetWithHead #-}
mainWidgetWithCss :: ByteString -> (forall x. Widget x ()) -> IO ()
mainWidgetWithCss :: ByteString -> (forall x. Widget x ()) -> IO ()
mainWidgetWithCss css :: ByteString
css w :: forall x. Widget x ()
w = JSM () -> IO ()
run (JSM () -> IO ()) -> JSM () -> IO ()
forall a b. (a -> b) -> a -> b
$ ByteString -> (forall x. Widget x ()) -> JSM ()
Main.mainWidgetWithCss ByteString
css forall x. Widget x ()
w
{-# INLINE mainWidgetWithCss #-}
mainWidgetWithHead' :: (a -> Widget () b, b -> Widget () a) -> IO ()
mainWidgetWithHead' :: (a -> Widget () b, b -> Widget () a) -> IO ()
mainWidgetWithHead' w :: (a -> Widget () b, b -> Widget () a)
w = JSM () -> IO ()
run (JSM () -> IO ()) -> JSM () -> IO ()
forall a b. (a -> b) -> a -> b
$ (a -> Widget () b, b -> Widget () a) -> JSM ()
forall a b. (a -> Widget () b, b -> Widget () a) -> JSM ()
Main.mainWidgetWithHead' (a -> Widget () b, b -> Widget () a)
w
{-# INLINE mainWidgetWithHead' #-}
mainWidgetInElementById :: Text -> (forall x. Widget x ()) -> IO ()
mainWidgetInElementById :: Text -> (forall x. Widget x ()) -> IO ()
mainWidgetInElementById eid :: Text
eid w :: forall x. Widget x ()
w = JSM () -> IO ()
run (JSM () -> IO ()) -> JSM () -> IO ()
forall a b. (a -> b) -> a -> b
$ Text -> (forall x. Widget x ()) -> JSM ()
Main.mainWidgetInElementById Text
eid forall x. Widget x ()
w
{-# INLINE mainWidgetInElementById #-}
runApp' :: (forall x. AppInput DomTimeline -> Widget x (AppOutput DomTimeline)) -> IO ()
runApp' :: (forall x.
AppInput DomTimeline -> Widget x (AppOutput DomTimeline))
-> IO ()
runApp' app :: forall x. AppInput DomTimeline -> Widget x (AppOutput DomTimeline)
app = JSM () -> IO ()
run (JSM () -> IO ()) -> JSM () -> IO ()
forall a b. (a -> b) -> a -> b
$ (forall x.
AppInput DomTimeline -> Widget x (AppOutput DomTimeline))
-> JSM ()
forall t.
(t ~ DomTimeline) =>
(forall x. AppInput t -> Widget x (AppOutput t)) -> JSM ()
Main.runApp' forall x. AppInput DomTimeline -> Widget x (AppOutput DomTimeline)
app
{-# INLINE runApp' #-}
mainHydrationWidgetWithHead :: (forall x. HydrationWidget x ()) -> (forall x. HydrationWidget x ()) -> IO ()
mainHydrationWidgetWithHead :: (forall x. HydrationWidget x ())
-> (forall x. HydrationWidget x ()) -> IO ()
mainHydrationWidgetWithHead h :: forall x. HydrationWidget x ()
h b :: forall x. HydrationWidget x ()
b = JSM () -> IO ()
run (JSM () -> IO ()) -> JSM () -> IO ()
forall a b. (a -> b) -> a -> b
$ (forall x. HydrationWidget x ())
-> (forall x. HydrationWidget x ()) -> JSM ()
Main.mainHydrationWidgetWithHead forall x. HydrationWidget x ()
h forall x. HydrationWidget x ()
b
{-# INLINE mainHydrationWidgetWithHead #-}
mainHydrationWidgetWithHead' :: HydrationWidget () () -> HydrationWidget () () -> IO ()
mainHydrationWidgetWithHead' :: HydrationWidget () () -> HydrationWidget () () -> IO ()
mainHydrationWidgetWithHead' h :: HydrationWidget () ()
h b :: HydrationWidget () ()
b = JSM () -> IO ()
run (JSM () -> IO ()) -> JSM () -> IO ()
forall a b. (a -> b) -> a -> b
$ HydrationWidget () () -> HydrationWidget () () -> JSM ()
Main.mainHydrationWidgetWithHead' HydrationWidget () ()
h HydrationWidget () ()
b
{-# INLINE mainHydrationWidgetWithHead' #-}