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