Skip to content

Instantly share code, notes, and snippets.

@moonlightdrive
Created July 26, 2016 16:52
Show Gist options
  • Save moonlightdrive/ef1564fd9c26ce493dc0172d08290a97 to your computer and use it in GitHub Desktop.
Save moonlightdrive/ef1564fd9c26ce493dc0172d08290a97 to your computer and use it in GitHub Desktop.
Print Left or Right when mouse on left or right side of window respectively
-- Prints Left or Right when mouse on left or right side of window respectively
{-
"dependencies": {
"elm-lang/core": "4.0.3 <= v < 5.0.0",
"elm-lang/html": "1.1.0 <= v < 2.0.0",
"elm-lang/mouse": "1.0.0 <= v < 2.0.0",
"elm-lang/window": "1.0.0 <= v < 2.0.0"
},
"elm-version": "0.17.1 <= v < 0.18.0"
-}
import Html.App as App
import Html exposing (..)
import Task
import Mouse
import Window
main = App.program { init = init
, view = view
, update = update
, subscriptions = subscriptions
}
-- MODEL
type Side
= Left
| Right
type alias Model =
{ side : Side
, midpoint : Int
}
type Msg
= Move Mouse.Position
| Resize Window.Size
| TaskFail Never
-- TODO initial mouse position defaults to Left...
init : (Model, Cmd Msg)
init =
( Model Left 0, Task.perform TaskFail Resize Window.size )
-- UPDATE
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
Move pos ->
let side' =
if pos.x > model.midpoint then Right else Left
in { model | side = side' } ! []
Resize window ->
{ model | midpoint = window.width // 2 } ! []
TaskFail _ ->
model ! []
subscriptions : Model -> Sub Msg
subscriptions model =
Sub.batch
[ Mouse.moves Move
, Window.resizes Resize
]
-- VIEW
view : Model -> Html Msg
view model =
div []
[ h1
[]
[ text (toString model.side) ]
, h2
[]
[ text (toString model.midpoint) ]
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment