Created
July 26, 2016 16:52
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- 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