项目作者: roine

项目描述 :
Perimeter for elm
高级语言: Elm
项目地址: git://github.com/roine/elm-perimeter.git
创建时间: 2017-04-16T19:00:57Z
项目社区:https://github.com/roine/elm-perimeter

开源协议:

下载


ELM Perimeter

Creates an invisible perimeter around a target element and monitors mouse breaches.

Demo can be found here.

Code sample:

  1. module Main exposing (view, update, subscriptions)
  2. import Html exposing (..)
  3. import Perimeter exposing (Perimeter)
  4. type alias Model =
  5. { perimeter : Perimeter }
  6. init : ( Model, Cmd Msg )
  7. init =
  8. ( initialModel, Cmd.none )
  9. initialModel : Model
  10. initialModel =
  11. { perimeter = Perimeter.init }
  12. perimeterConfig =
  13. { padding = 12
  14. , onBreach = Breached
  15. , onLeave = Left
  16. , debug = True
  17. }
  18. type Msg
  19. = Breached
  20. | Left
  21. | PerimeterMsg Perimeter.Msg
  22. update : Msg -> Model -> ( Model, Cmd Msg )
  23. update msg model =
  24. case msg of
  25. Breached ->
  26. model ! []
  27. Left ->
  28. model ! []
  29. PerimeterMsg subMsg ->
  30. let
  31. ( newPerimeterModel, maybeMsg ) =
  32. Perimeter.update subMsg model.perimeter perimeterConfig
  33. in
  34. case maybeMsg of
  35. Nothing ->
  36. ( { model | perimeter = newPerimeterModel }, Cmd.none )
  37. Just msg ->
  38. update msg { model | perimeter = newPerimeterModel }
  39. view : Model -> Html Msg
  40. view model =
  41. Html.map PerimeterMsg (Perimeter.view perimeterConfig model.perimeter [ button [] [ text model.buttonText ] ])
  42. subscriptions : Model -> Sub Msg
  43. subscriptions model =
  44. Sub.map PerimeterMsg (Perimeter.subscriptions model.perimeter)
  45. main =
  46. program
  47. { init = init
  48. , update = update
  49. , subscriptions = subscriptions
  50. , view = view
  51. }