Skip to content

Instantly share code, notes, and snippets.

@artisonian
Forked from AWaselnuk/stuck_on_decoders.elm
Last active July 8, 2016 21:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save artisonian/c37a097e8e55d91300d5af112abae3de to your computer and use it in GitHub Desktop.
Save artisonian/c37a097e8e55d91300d5af112abae3de to your computer and use it in GitHub Desktop.
I don't understand custom event handlers and decoders in Elm
import Html exposing (..)
import Html.App as App
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import Json.Decode as Json
import String
main =
App.beginnerProgram
{ model = model
, update = update
, view = view
}
type alias Model =
{ level : Int
, name : String
}
model : Model
model =
{ level = 0
, name = ""
}
type Msg
= ModifyLevel String
| ModifyName String
update : Msg -> Model -> Model
update msg model =
case msg of
ModifyLevel newLevel ->
{ model
| level = Result.withDefault model.level <| String.toInt newLevel
}
ModifyName newName ->
{ model | name = newName }
view : Model -> Html Msg
view model =
let
levelDecoder =
Json.at ["target", "value"] Json.int
levelOption level isSelected =
option
[ value level
, selected isSelected
]
[ text level ]
levelOptions =
List.map
(\level -> levelOption (toString level) (level == model.level))
[0..9]
in
div []
[ p []
[ strong [] [ text "Name:" ]
, span [] [ text model.name ]
]
, p []
[ strong [] [ text "Level:" ]
, span [] [ text (toString model.level) ]
]
, select
[ name "character-level"
, onChange ModifyLevel
]
levelOptions
]
onChange tagger =
on "change" (Json.map tagger targetValue)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment