module Main ( main ) where import qualified Data.Aeson as Aeson import qualified Data.ByteString.Lazy as LB import Data.JSString.Text (textFromJSString) import qualified Data.Text.Encoding as T import qualified GHCJS.DOM as Dom import qualified GHCJS.DOM.NonElementParentNode as Dom import GHCJS.DOM.Types (JSM, Element, JSString) import Prelude hiding (init, error) import Common.Model (InitResult(InitEmpty)) import qualified Common.Message as Message import qualified Common.Message.Key as Key import qualified View.App as App main :: JSM () main = do initResult <- readInit App.widget initResult readInit :: JSM InitResult readInit = do document <- Dom.currentDocumentUnchecked initNode <- Dom.getElementById document "init" case initNode of Just node -> do text <- textFromJSString <$> js_getInnerText node return $ case Aeson.decode (LB.fromStrict . T.encodeUtf8 $ text) of Just init -> init Nothing -> initParseError _ -> return initParseError where initParseError = InitEmpty (Left $ Message.get Key.SignIn_ParseError) foreign import javascript unsafe "$1[\"innerText\"]" js_getInnerText :: Element -> IO JSString