This module helps you set up an System Program.
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
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.
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
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.