aboutsummaryrefslogtreecommitdiff
path: root/client/src/Main.hs
blob: 14f0feef584a37e09f4a98f95ce6e68a5ae047f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
module Main
  ( main
  ) where

import qualified Data.Aeson as Aeson
import qualified Data.ByteString.Lazy as LB
import qualified Data.JSString.Text as Dom
import qualified Data.Text.Encoding as T
import qualified JSDOM as Dom
import qualified JSDOM.Generated.HTMLElement as Dom
import qualified JSDOM.Generated.NonElementParentNode as Dom
import JSDOM.Types (JSM, HTMLElement(..))
import qualified JSDOM.Types as Dom
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 <- Dom.textFromJSString <$> Dom.getInnerText (Dom.uncheckedCastTo HTMLElement 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)