mirror of
https://github.com/correl/elm-mdl.git
synced 2024-11-23 19:19:52 +00:00
146 lines
2.7 KiB
Elm
146 lines
2.7 KiB
Elm
|
import StartApp
|
||
|
import Html exposing (..)
|
||
|
import Html.Attributes exposing (href, class, style)
|
||
|
import Effects exposing (Effects, Never)
|
||
|
import Task exposing (Task)
|
||
|
|
||
|
import Material.Button as Button
|
||
|
import Material.Scheme
|
||
|
|
||
|
|
||
|
-- MODEL
|
||
|
|
||
|
|
||
|
type alias Model =
|
||
|
{ count : Int
|
||
|
, increaseButtonModel : Button.Model
|
||
|
, resetButtonModel : Button.Model
|
||
|
}
|
||
|
|
||
|
|
||
|
model : Model
|
||
|
model =
|
||
|
{ count = 0
|
||
|
, increaseButtonModel = Button.model True -- With ripple animation
|
||
|
, resetButtonModel = Button.model False -- Without ripple animation
|
||
|
}
|
||
|
|
||
|
|
||
|
-- ACTION, UPDATE
|
||
|
|
||
|
|
||
|
type Action
|
||
|
= IncreaseButtonAction Button.Action
|
||
|
| ResetButtonAction Button.Action
|
||
|
|
||
|
|
||
|
increase : Model -> Model
|
||
|
increase model =
|
||
|
{ model | count = model.count + 1 }
|
||
|
|
||
|
|
||
|
reset : Model -> Model
|
||
|
reset model =
|
||
|
{ model | count = 0 }
|
||
|
|
||
|
|
||
|
update : Action -> Model -> (Model, Effects.Effects Action)
|
||
|
update action model =
|
||
|
case Debug.log "" action of
|
||
|
IncreaseButtonAction action' ->
|
||
|
let
|
||
|
(submodel, fx) =
|
||
|
Button.update action' model.increaseButtonModel
|
||
|
model' =
|
||
|
case action' of
|
||
|
Button.Click ->
|
||
|
increase model
|
||
|
_ ->
|
||
|
model
|
||
|
in
|
||
|
( { model' | increaseButtonModel = submodel }
|
||
|
, Effects.map IncreaseButtonAction fx
|
||
|
)
|
||
|
|
||
|
ResetButtonAction action' ->
|
||
|
let
|
||
|
(submodel, fx) =
|
||
|
Button.update action' model.resetButtonModel
|
||
|
model' =
|
||
|
case action' of
|
||
|
Button.Click ->
|
||
|
reset model
|
||
|
_ ->
|
||
|
model
|
||
|
in
|
||
|
( { model' | resetButtonModel = submodel }
|
||
|
, Effects.map ResetButtonAction fx
|
||
|
)
|
||
|
|
||
|
|
||
|
-- VIEW
|
||
|
|
||
|
|
||
|
view : Signal.Address Action -> Model -> Html
|
||
|
view addr model =
|
||
|
div
|
||
|
[ style
|
||
|
[ ("margin", "auto")
|
||
|
, ("padding-left", "5%")
|
||
|
, ("padding-right", "5%")
|
||
|
]
|
||
|
]
|
||
|
[ text ("Current count: " ++ toString model.count )
|
||
|
, Button.flat
|
||
|
(Signal.forwardTo addr IncreaseButtonAction)
|
||
|
model.increaseButtonModel
|
||
|
[]
|
||
|
[ text "Increase" ]
|
||
|
, Button.flat
|
||
|
(Signal.forwardTo addr ResetButtonAction)
|
||
|
model.resetButtonModel
|
||
|
[]
|
||
|
[ text "Reset" ]
|
||
|
]
|
||
|
|> Material.Scheme.top
|
||
|
|
||
|
|
||
|
{- The remainder of this file is Elm/StartApp boilerplate.
|
||
|
-}
|
||
|
|
||
|
|
||
|
-- SETUP
|
||
|
|
||
|
|
||
|
init : (Model, Effects.Effects Action)
|
||
|
init = (model, Effects.none)
|
||
|
|
||
|
|
||
|
inputs : List (Signal.Signal Action)
|
||
|
inputs =
|
||
|
[
|
||
|
]
|
||
|
|
||
|
|
||
|
app : StartApp.App Model
|
||
|
app =
|
||
|
StartApp.start
|
||
|
{ init = init
|
||
|
, view = view
|
||
|
, update = update
|
||
|
, inputs = inputs
|
||
|
}
|
||
|
|
||
|
|
||
|
main : Signal Html
|
||
|
main =
|
||
|
app.html
|
||
|
|
||
|
|
||
|
-- PORTS
|
||
|
|
||
|
|
||
|
port tasks : Signal (Task Never ())
|
||
|
port tasks =
|
||
|
app.tasks
|