Skip to content

Instantly share code, notes, and snippets.

@krisajenkins
Last active May 24, 2016 10:37
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 krisajenkins/3011e6bca157f3b22f221045e4cf9832 to your computer and use it in GitHub Desktop.
Save krisajenkins/3011e6bca157f3b22f221045e4cf9832 to your computer and use it in GitHub Desktop.
elm-html runtime bug
module Main exposing (..)
import Html exposing (..)
import Html.App exposing (beginnerProgram)
import Html.Events exposing (onClick, on, targetChecked)
type View
= Ascending
| Descending
type Msg
= SetView View
| Say String
type alias Row =
{ name : String
, message : Maybe String
}
type alias Model =
{ data : List Row
, view : View
, lastMessage : Maybe String
}
model : Model
model =
{ data =
[ { name = "Bill"
, message = Just "Yes!"
}
, { name = "Ben"
, message = Just "No!"
}
, { name = "Bob"
, message = Nothing
}
]
, view = Ascending
, lastMessage = Nothing
}
update : Msg -> Model -> Model
update msg model =
case msg of
SetView v ->
{ model | view = v }
Say message ->
{ model | lastMessage = (Just message) }
view : Model -> Html Msg
view model =
let
makeRow r =
tr []
[ td
(case r.message of
Nothing ->
[]
Just message ->
[ onClick (Say message) ]
)
[ text (r.name ++ " (" ++ toString r.message ++ ")") ]
]
content =
div []
(model.data
|> (if model.view == Ascending then
identity
else
List.reverse
)
|> List.map makeRow
)
makeButton v =
button [ onClick (SetView v) ]
[ text (toString v) ]
buttons =
List.map makeButton [ Ascending, Descending ]
in
div []
[ div []
[ content ]
, h1 []
[ text (Maybe.withDefault "" model.lastMessage) ]
, div []
buttons
, hr [] []
, div []
[ text (toString model) ]
]
main : Program Never
main =
beginnerProgram { model = model, view = view, update = update }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment