tricycle / system-actor-model / System.Browser

This module helps you set up an System Program.

Applications

Create an application that manages Url changes.

When the application starts, init gets the initial Url. You can show different things depending on the Url!

When someone clicks a link, like Home, it always goes through onUrlRequest. The resulting message goes to your update function, giving you a chance to save scroll position or persist data before changing the URL yourself with pushUrl or load. More info on this in the UrlRequest docs!

When the URL changes, the new Url goes through onUrlChange. The resulting message goes to update where you can decide what to show next.

Applications always use the Browser.Navigation module for precise control over Url changes.

application : { apply : appModel -> System.Internal.SystemActor.SystemActor appModel output (System.Internal.Message.SystemMessage addresses actors appMsg), factory : actors -> ( System.Internal.PID.PID, Json.Decode.Value ) -> ( appModel, System.Internal.Message.SystemMessage addresses actors appMsg ), init : flags -> Url -> Browser.Navigation.Key -> List (System.Internal.Message.SystemMessage addresses actors appMsg), view : List output -> List (Html (System.Internal.Message.SystemMessage addresses actors appMsg)), onUrlRequest : Browser.UrlRequest -> System.Internal.Message.SystemMessage addresses actors appMsg, onUrlChange : Url -> System.Internal.Message.SystemMessage addresses actors appMsg, onLogMessage : System.Internal.Message.LogMessage addresses actors appMsg -> System.Internal.Message.SystemMessage addresses actors appMsg } -> Program flags addresses actors appModel appMsg

Create an Application managed by Elm through a System

Elements

Create an HTML element managed by Elm.

element : { apply : appModel -> System.Internal.SystemActor.SystemActor appModel output (System.Internal.Message.SystemMessage addresses actors appMsg), factory : actors -> ( System.Internal.PID.PID, Json.Decode.Value ) -> ( appModel, System.Internal.Message.SystemMessage addresses actors appMsg ), init : flags -> List (System.Internal.Message.SystemMessage addresses actors appMsg), view : List output -> Html (System.Internal.Message.SystemMessage addresses actors appMsg), onLogMessage : System.Internal.Message.LogMessage addresses actors appMsg -> System.Internal.Message.SystemMessage addresses actors appMsg } -> Program flags addresses actors appModel appMsg

Create an HTML element managed by Elm through a System.

Use alternative programs

Get the records that are used to create the Elm Browser.application and .element

applicationRecord : { apply : appModel -> System.Internal.SystemActor.SystemActor appModel output (System.Internal.Message.SystemMessage addresses actors appMsg), factory : actors -> ( System.Internal.PID.PID, Json.Decode.Value ) -> ( appModel, System.Internal.Message.SystemMessage addresses actors appMsg ), init : flags -> Url -> Browser.Navigation.Key -> List (System.Internal.Message.SystemMessage addresses actors appMsg), view : List output -> List (Html (System.Internal.Message.SystemMessage addresses actors appMsg)), onUrlRequest : Browser.UrlRequest -> System.Internal.Message.SystemMessage addresses actors appMsg, onUrlChange : Url -> System.Internal.Message.SystemMessage addresses actors appMsg, onLogMessage : System.Internal.Message.LogMessage addresses actors appMsg -> System.Internal.Message.SystemMessage addresses actors appMsg } -> { init : flags -> Url -> Browser.Navigation.Key -> ( System.Internal.Model.SystemModel addresses actors appModel, Platform.Cmd.Cmd (System.Internal.Message.SystemMessage addresses actors appMsg) ), onUrlChange : Url -> System.Internal.Message.SystemMessage addresses actors appMsg, onUrlRequest : Browser.UrlRequest -> System.Internal.Message.SystemMessage addresses actors appMsg, subscriptions : System.Internal.Model.SystemModel addresses1 actors1 appModel -> Platform.Sub.Sub (System.Internal.Message.SystemMessage addresses actors appMsg), update : System.Internal.Message.SystemMessage addresses actors appMsg -> System.Internal.Model.SystemModel addresses actors appModel -> ( System.Internal.Model.SystemModel addresses actors appModel, Platform.Cmd.Cmd (System.Internal.Message.SystemMessage addresses actors appMsg) ), view : System.Internal.Model.SystemModel addresses actors appModel -> Browser.Document (System.Internal.Message.SystemMessage addresses actors appMsg) }

Returns the record that is used by Browser.application

elementRecord : { apply : appModel -> System.Internal.SystemActor.SystemActor appModel output (System.Internal.Message.SystemMessage addresses actors appMsg), factory : actors -> ( System.Internal.PID.PID, Json.Decode.Value ) -> ( appModel, System.Internal.Message.SystemMessage addresses actors appMsg ), init : flags -> List (System.Internal.Message.SystemMessage addresses actors appMsg), view : List output -> Html (System.Internal.Message.SystemMessage addresses actors appMsg), onLogMessage : System.Internal.Message.LogMessage addresses actors appMsg -> System.Internal.Message.SystemMessage addresses actors appMsg } -> { init : flags -> ( System.Internal.Model.SystemModel addresses actors appModel, Platform.Cmd.Cmd (System.Internal.Message.SystemMessage addresses actors appMsg) ), subscriptions : System.Internal.Model.SystemModel addresses actors appModel -> Platform.Sub.Sub (System.Internal.Message.SystemMessage addresses actors appMsg), update : System.Internal.Message.SystemMessage addresses actors appMsg -> System.Internal.Model.SystemModel addresses actors appModel -> ( System.Internal.Model.SystemModel addresses actors appModel, Platform.Cmd.Cmd (System.Internal.Message.SystemMessage addresses actors appMsg) ), view : System.Internal.Model.SystemModel addresses actors appModel -> Html (System.Internal.Message.SystemMessage addresses actors appMsg) }

Returns the record that is used by Browser.element

Program


type alias Program flags addresses actors appModel applicationMsg =
Platform.Program flags (System.Internal.Model.SystemModel addresses actors appModel) (System.Internal.Message.SystemMessage addresses actors applicationMsg)

This will be the type of your program when you create it using this package.

Checkout out the element and application functions in the System.Browser module to find out how to create a System.Program.

A Program describes an Elm program! How does it react to input? Does it show anything on screen? Etc.