aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/Main.elm
blob: f79d6a04a2b912980bb6b5252a59d09b256f9a55 (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
module Main
  ( main
  ) where

import Graphics.Element exposing (..)

import Html exposing (Html)

import Http
import Task exposing (..)
import Time exposing (..)
import Json.Decode as Json
import Dict
import String

import Model exposing (Model, initialModel)
import Model.Translations exposing (..)
import Model.Config exposing (..)

import Update exposing (Action(..), actions, updateModel)
import Update.SignIn exposing (..)

import View.Page exposing (renderPage)

import ServerCommunication as SC exposing (serverCommunications, sendRequest)

import Persona as Persona exposing (operations)

import InitViewAction exposing (initViewAction)

import Sign

main : Signal Html
main = Signal.map renderPage model

model : Signal Model
model = Signal.foldp updateModel (initialModel initialTime translations config) update

update : Signal Action
update = Signal.mergeMany
  [ Signal.map UpdateTime (Time.every 1000)
  , actions.signal
  ]

---------------------------------------

port initialTime : Time

---------------------------------------

port translations : String

---------------------------------------

port config : String

---------------------------------------

port ready : Signal String
port ready = Signal.constant "ready"

---------------------------------------

port initView : Task Http.Error ()
port initView = initViewAction `Task.andThen` (Signal.send actions.address)

---------------------------------------

port serverCommunicationsPort : Signal (Task Http.Error ())
port serverCommunicationsPort =
  Signal.map
    (\comm ->
      sendRequest comm
        |> flip Task.andThen (\action -> Signal.send actions.address action)
    )
    (Signal.merge signCommunication serverCommunications.signal)

---------------------------------------

port persona : Signal String
port persona = Signal.map Persona.toString operations.signal

---------------------------------------

port sign : Signal Json.Value

signCommunication : Signal SC.Communication
signCommunication =
  Signal.map (Sign.toServerCommunication << Sign.decodeOperation) sign