diff --git a/Audio.elm b/Audio.elm new file mode 100644 index 0000000..5c63785 --- /dev/null +++ b/Audio.elm @@ -0,0 +1,6 @@ +port module Audio exposing (play) + +-- PORTS + + +port play : String -> Cmd msg diff --git a/Bee.elm b/Bee.elm new file mode 100644 index 0000000..1e3e4a5 --- /dev/null +++ b/Bee.elm @@ -0,0 +1,169 @@ +module Bee exposing (..) + +import Animation exposing (Animation, animation, from, speed, to) +import Dictionary.Translator exposing (Translator) +import Html exposing (Html, div, img) +import Html.Attributes exposing (height, src, style, width) +import Html.Events exposing (onClick) +import Time exposing (Time) + + +-- MODEL + + +type alias Bee = + { x : Int + , y : Int + , animX : Animation + , animY : Animation + , src : String + , audio : Maybe String + } + + + +-- VIEW + + +view : Maybe (String -> msg) -> Bee -> Html msg +view clickAction bee = + let + attributes = + [ src bee.src + , height <| scaleBee beeHeight + , width <| scaleBee beeWidth + ] + + attributesWithEvents = + case ( clickAction, bee.audio ) of + ( Just click, Just audio ) -> + onClick (click audio) :: attributes + + _ -> + attributes + + wrapper = + div + [ style + [ -- ( "box-shadow", "3px 3px 1px #ccc" ) + ( "position", "absolute" ) + , ( "user-select", "none" ) + , ( "left", toString bee.x ++ "px" ) + , ( "top", toString bee.y ++ "px" ) + ] + ] + in + wrapper + [ img attributesWithEvents [] + ] + + + +-- Bees + + +player = + { x = 0 + , y = 0 + , animX = animation 0 + , animY = animation 0 + , src = "imgs/bee-left.png" + , audio = Nothing + } + + +mama : Translator -> Bee +mama translator = + { x = 100 + , y = 100 + , animX = animation 0 + , animY = animation 0 + , src = "imgs/mama-bee.png" + , audio = Just (translator.audio "mom") + } + + +papa : Translator -> Bee +papa translator = + { x = 600 + , y = 100 + , animX = animation 0 + , animY = animation 0 + , src = "imgs/papa-bee.png" + , audio = Just (translator.audio "dad") + } + + + +-- ANIMATION + + +beeVelocity = + 0.5 + + +type alias Position = + { x : Int + , y : Int + } + + +animate : Time -> Bee -> Bee +animate time bee = + let + newX = + Animation.animate time bee.animX + + newY = + Animation.animate time bee.animY + in + { bee | x = round newX, y = round newY } + + +animateStart : Time -> Position -> Bee -> Bee +animateStart startTime toPosition bee = + let + animX = + animation startTime + |> from (toFloat bee.x) + |> to (toFloat toPosition.x) + |> speed beeVelocity + + animY = + animation startTime + |> from (toFloat bee.y) + |> to (toFloat toPosition.y) + |> speed beeVelocity + in + { bee + | animX = animX + , animY = animY + } + + +retarget : Time -> Position -> Bee -> Bee +retarget time toPosition bee = + let + animX = + bee.animX |> Animation.retarget time (toFloat toPosition.x) + + animY = + bee.animY |> Animation.retarget time (toFloat toPosition.y) + in + { bee + | animX = animX + , animY = animY + } + + + +-- HELPERS + + +( beeHeight, beeWidth ) = + ( 456, 640 ) + + +scaleBee : Float -> Int +scaleBee dimension = + dimension / 8 |> round diff --git a/Main.elm b/Main.elm new file mode 100644 index 0000000..dc37cf7 --- /dev/null +++ b/Main.elm @@ -0,0 +1,251 @@ +port module Main exposing (..) + +import Animation exposing (..) +import AnimationFrame +import Bee exposing (Bee) +import Dictionary.French as French +import Dictionary.Spanish as Spanish +import Dictionary.Translator exposing (Translator) +import Html exposing (Html, button, div, h1, img, text) +import Html.Attributes exposing (class, height, src, style, width) +import Html.Events exposing (onClick) +import Location.Home as Home +import Map exposing (Map) +import Mouse +import Task +import Time exposing (Time) +import Window + + +-- MODEL + + +type alias Model = + { user : Bee + , mouse : MouseStatus + , time : Time + , window : Window.Size + , map : Map + , pause : Bool + } + + +type MouseStatus + = Down Mouse.Position + | Up + + +init : Model +init = + { user = Bee.player + , mouse = Up + , time = 0 + , window = { width = 100, height = 100 } + , pause = False + , map = Map.init (Map.Home Home.init) + } + + + +-- UPDATE + + +type Msg + = Move Mouse.Position + | WindowResize Window.Size + | MouseDown Mouse.Position + | MouseUp Mouse.Position + | MapMsg Map.Msg + | Tick Time + | Pause + + +update : Translator -> Msg -> Model -> ( Model, Cmd Msg ) +update translator msg model = + case msg of + Pause -> + ( { model | pause = not model.pause }, Cmd.none ) + + WindowResize newSize -> + ( { model | window = newSize }, Cmd.none ) + + MouseUp _ -> + ( { model | mouse = Up }, Cmd.none ) + + MouseDown position -> + ( { model + | mouse = Down position + , user = model.user |> Bee.animateStart model.time position + } + , Cmd.none + ) + + Move position -> + case model.mouse of + Up -> + ( model, Cmd.none ) + + Down _ -> + ( { model + | mouse = Down position + , user = model.user |> Bee.retarget model.time position + } + , Cmd.none + ) + + Tick timeDelta -> + { model + | user = model.user |> Bee.animate model.time + , time = model.time + timeDelta + } + |> updateMap translator (Map.Tick timeDelta) + + MapMsg msg -> + updateMap translator msg model + + +updateMap : Translator -> Map.Msg -> Model -> ( Model, Cmd Msg ) +updateMap translator mapMsg model = + let + window = + model.window + + mapScreen = + { window | height = window.height - headerHeight } + + ( map, cmd ) = + Map.update translator mapScreen mapMsg model.map + in + ( { model | map = map }, cmd |> Cmd.map MapMsg ) + + + +-- VIEW + + +view : Translator -> Model -> Html Msg +view translator model = + div + [ style + [ ( "user-select", "none" ) + ] + ] + [ header model + , mapView model.window translator model.map + + -- , Bee.view Nothing model.user + ] + + +mapView : Window.Size -> Translator -> Map -> Html Msg +mapView window translator map = + div + [ style + [ ( "position", "absolute" ) + , ( "top", px 110 ) + ] + ] + [ Map.view { window | height = window.height - headerHeight } translator map + |> Html.map MapMsg + ] + + + +-- HEADER + + +headerHeight = + 100 + + +header : Model -> Html Msg +header model = + -- TODO: add dropdown selector for language + div + [ style + [ ( "position", "absolute" ) + , ( "top", px 0 ) + , ( "bottom", px 0 ) + , ( "height", px headerHeight ) + , ( "width", px model.window.width ) + , ( "border-bottom", "1px solid black" ) + , ( "background-color", "hsl(189, 100%, 50%)" ) + ] + ] + [ h1 [] [ text "Lingua" ] + , viewPoints model.map.points + , pauseButton model + ] + + +pauseButton : Model -> Html Msg +pauseButton model = + if model.pause then + button [ onClick Pause, style [ ( "float", "right" ) ] ] [ text "play" ] + else + button [ onClick Pause, style [ ( "float", "right" ) ] ] [ text "pause" ] + + +viewPoints : Int -> Html msg +viewPoints count = + Html.div [ class "points" ] [ text <| "Points: " ++ toString count ] + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + if model.pause then + Sub.none + else + case model.mouse of + Up -> + Sub.batch + [ Mouse.downs MouseDown + , AnimationFrame.diffs Tick + , Window.resizes WindowResize + ] + + Down _ -> + Sub.batch + [ Mouse.moves Move + , Mouse.ups MouseUp + , AnimationFrame.diffs Tick + , Window.resizes WindowResize + ] + + +px : Int -> String +px x = + toString x ++ "px" + + + +-- MAIN + + +spanishTranslator = + { translate = Spanish.translate + , audio = Spanish.audio + } + + +frenchTranslator = + { translate = French.translate + , audio = French.audio + } + + +translator = + frenchTranslator + + +main = + Html.program + { init = ( init, Task.perform WindowResize Window.size ) + , view = view translator + , update = update translator + , subscriptions = subscriptions + } diff --git a/Map.elm b/Map.elm new file mode 100644 index 0000000..6e72d8b --- /dev/null +++ b/Map.elm @@ -0,0 +1,438 @@ +module Map exposing (..) + +import Audio +import Bee exposing (Bee) +import Dict exposing (Dict) +import Dictionary.Translator exposing (Translator) +import EveryDict exposing (EveryDict) +import Html exposing (Html, button, div, h1, img, text) +import Html.Attributes exposing (class, src, style) +import Html.Events exposing (onClick, onMouseDown) +import Location.ArtStore as ArtStore +import Location.GroceryStore as GroceryStore +import Location.Home as Home +import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) +import Random +import Random.Extra +import Random.List exposing (choose) +import Time exposing (Time) +import Window + + +-- MODEL + + +type alias Map = + { level : Level + , points : Int + , seed : Random.Seed + } + + +init : Level -> Map +init level = + { level = level + , points = 0 + , seed = Random.initialSeed 0 + } + + +type Level + = HomeTown + | Home Home.Model + | GroceryStore GroceryStore.Model + | ArtStore ArtStore.Model + + +type alias PlayGame = + Bool + + +type Color + = Red + | Orange + | Yellow + | Green + | Blue + | Purple + + + +-- UPDATE + + +type Msg + = NewLevel Route + | PlayAudio String + | Tick Time + | NoOp + | HomeMsg Home.Msg + | ArtStoreMsg ArtStore.Msg + | GroceryStoreMsg GroceryStore.Msg + + +type Route + = HomeRoute + | HomeTownRoute + | GroceryStoreRoute + | ArtStoreRoute + + +(=>) = + (,) + + +update : Translator -> Window.Size -> Msg -> Map -> ( Map, Cmd Msg ) +update translator window msg map = + case ( msg, map.level ) of + ( NewLevel route, _ ) -> + newLevel window route map + + ( PlayAudio file, _ ) -> + map => Audio.play file + + ( Tick timeDelta, _ ) -> + tick timeDelta window translator map + + ( HomeMsg msg, Home home ) -> + let + ( newHome, msgFromPage, cmd ) = + Home.update window translator msg home + + points = + case msgFromPage of + Home.AddPoints newPoints -> + map.points + newPoints + + _ -> + map.points + + level = + case msgFromPage of + Home.Exit -> + HomeTown + + _ -> + Home home + in + ( { map + | level = level + , points = points + } + , Cmd.map HomeMsg cmd + ) + + ( ArtStoreMsg msg, ArtStore artStore ) -> + let + ( newArtStore, msgFromPage, cmd ) = + ArtStore.update window translator msg artStore + + points = + case msgFromPage of + ArtStore.AddPoints newPoints -> + map.points + newPoints + + _ -> + map.points + + level = + case msgFromPage of + ArtStore.Exit -> + HomeTown + + _ -> + ArtStore newArtStore + in + ( { map + | level = level + , points = points + } + , Cmd.map ArtStoreMsg cmd + ) + + ( GroceryStoreMsg msg, GroceryStore artStore ) -> + let + ( newGroceryStore, msgFromPage, cmd ) = + GroceryStore.update window translator msg artStore + + points = + case msgFromPage of + GroceryStore.AddPoints newPoints -> + map.points + newPoints + + _ -> + map.points + + level = + case msgFromPage of + GroceryStore.Exit -> + HomeTown + + _ -> + GroceryStore newGroceryStore + in + ( { map + | level = level + , points = points + } + , Cmd.map GroceryStoreMsg cmd + ) + + ( _, _ ) -> + -- Disregard messages from the wrong page + ( map, Cmd.none ) + + +newLevel : Window.Size -> Route -> Map -> ( Map, Cmd Msg ) +newLevel window route map = + let + ( newLevel, newSeed ) = + case route of + HomeRoute -> + Home Home.init => map.seed + + HomeTownRoute -> + HomeTown => map.seed + + GroceryStoreRoute -> + GroceryStore GroceryStore.init => map.seed + + ArtStoreRoute -> + let + ( store, newSeed ) = + ArtStore.init window map.seed + in + ArtStore store => newSeed + in + { map | level = newLevel, seed = newSeed } => Cmd.none + + +tick : Time -> Window.Size -> Translator -> Map -> ( Map, Cmd Msg ) +tick timeDelta window translator map = + case map.level of + ArtStore store -> + let + ( newArtStore, msgFromPage, cmd ) = + ArtStore.update window translator (ArtStore.Tick timeDelta) store + in + ( { map | level = ArtStore newArtStore }, cmd |> Cmd.map ArtStoreMsg ) + + _ -> + ( map, Cmd.none ) + + + +-- VIEW + + +view : Window.Size -> Translator -> Map -> Html Msg +view mapSize translator map = + case map.level of + HomeTown -> + hometown mapSize translator + + Home homeModel -> + Home.view mapSize translator + |> Html.map HomeMsg + + GroceryStore store -> + GroceryStore.view mapSize translator store + |> Html.map GroceryStoreMsg + + -- groceryStore mapSize + ArtStore store -> + ArtStore.view translator store + |> Html.map ArtStoreMsg + + + +-- BODY + + +body : Html Msg -> Html Msg +body level = + div + [ style + [ ( "position", "absolute" ) + , ( "top", px 100 ) + , ( "bottom", px 0 ) + , ( "height", px 100 ) + ] + ] + [ level + ] + + +px : Int -> String +px x = + toString x ++ "px" + + + +-- TOWN + + +hometown : Window.Size -> Translator -> Html Msg +hometown mapSize translator = + div [] + [ house ( 0, 0 ) + , groceryStoreBuilding ( 160, 0 ) translator True + , artStoreBuilding ( 320, 0 ) translator + ] + + +house : ( Int, Int ) -> Html Msg +house ( x, y ) = + img + [ src "imgs/home.png" + , onClick (NewLevel HomeRoute) + , style + [ ( "position", "absolute" ) + , ( "height", "128px" ) + , ( "width", "128px" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + ] + ] + [] + + +groceryStoreBuilding : ( Int, Int ) -> Translator -> Bool -> Html Msg +groceryStoreBuilding ( x, y ) translator locked = + let + ( click, extraAttrs ) = + if locked then + ( onClick NoOp, [ ( "filter", "grayscale(100%)" ) ] ) + else + ( onClick (NewLevel GroceryStoreRoute), [] ) + in + div [] + [ img + [ src "imgs/store.png" + , click + , style + ([ ( "position", "absolute" ) + , ( "height", "128px" ) + , ( "width", "128px" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + ] + ++ extraAttrs + ) + ] + [] + , div + [ style + [ ( "position", "absolute" ) + , ( "height", "27px" ) + , ( "width", "112px" ) + , ( "text-align", "center" ) + , ( "border", "1px solid black" ) + , ( "background-color", "white" ) + , ( "left", toString (x + 7) ++ "px" ) + , ( "top", toString (y + 10) ++ "px" ) + ] + ] + [ text <| translator.translate "grocery store" ] + ] + + +artStoreBuilding : ( Int, Int ) -> Translator -> Html Msg +artStoreBuilding ( x, y ) translator = + div [] + [ img + [ src "imgs/store.png" + , onClick (NewLevel ArtStoreRoute) + , style + [ ( "position", "absolute" ) + , ( "height", "128px" ) + , ( "width", "128px" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + ] + ] + [] + , div + [ style + [ ( "position", "absolute" ) + , ( "height", "27px" ) + , ( "width", "112px" ) + , ( "text-align", "center" ) + , ( "border", "1px solid black" ) + , ( "background-color", "white" ) + , ( "left", toString (x + 7) ++ "px" ) + , ( "top", toString (y + 10) ++ "px" ) + ] + ] + [ text <| translator.translate "art store" ] + ] + + + +-- COMMON + + +playButton : ( Int, Int ) -> Route -> Html Msg +playButton ( x, y ) level = + button + [ style + [ ( "border", "1px solid black" ) + , ( "position", "absolute" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + , ( "width", "128px" ) + , ( "height", "64px" ) + ] + , onClick (NewLevel level) + ] + [ text "Play!" ] + + +backButton : ( Int, Int ) -> Route -> Html Msg +backButton ( x, y ) level = + button + [ style + [ ( "border", "1px solid black" ) + , ( "position", "absolute" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + , ( "width", "128px" ) + , ( "height", "64px" ) + ] + , onClick (NewLevel level) + ] + [ text "Back" ] + + +exit : Route -> Html Msg +exit level = + div [ onClick (NewLevel level) ] + [ tile ( 0, 0 ) + , tile ( 0, 32 ) + , tile ( 32, 0 ) + , tile ( 32, 32 ) + ] + + +tileCountFromPixels : Int -> Int +tileCountFromPixels pixels = + round <| toFloat pixels / 32 + + +row : Int -> Int -> List (Html msg) +row width y = + List.map (\i -> tile ( i * 32, y )) (List.range 0 width) + + +tile : ( Int, Int ) -> Html msg +tile ( x, y ) = + img + [ src "imgs/map-tileset.png" + , style + [ ( "position", "absolute" ) + , ( "clip", "rect(32px 64px 64px 32px)" ) + , ( "left", toString (x - 32) ++ "px" ) + , ( "top", toString (y - 32) ++ "px" ) + ] + ] + [] diff --git a/audio/el_platano.mp3 b/audio/el_platano.mp3 new file mode 100644 index 0000000..abe2cc5 Binary files /dev/null and b/audio/el_platano.mp3 differ diff --git a/audio/french/asul.mp3 b/audio/french/asul.mp3 new file mode 100644 index 0000000..21d1c16 Binary files /dev/null and b/audio/french/asul.mp3 differ diff --git a/audio/french/berde.mp3 b/audio/french/berde.mp3 new file mode 100644 index 0000000..47b11f4 Binary files /dev/null and b/audio/french/berde.mp3 differ diff --git a/audio/french/dilaw.mp3 b/audio/french/dilaw.mp3 new file mode 100644 index 0000000..8cde31c Binary files /dev/null and b/audio/french/dilaw.mp3 differ diff --git a/audio/french/itim.mp3 b/audio/french/itim.mp3 new file mode 100644 index 0000000..f24218b Binary files /dev/null and b/audio/french/itim.mp3 differ diff --git a/audio/french/kahel.mp3 b/audio/french/kahel.mp3 new file mode 100644 index 0000000..85d71a2 Binary files /dev/null and b/audio/french/kahel.mp3 differ diff --git a/audio/french/lila.mp3 b/audio/french/lila.mp3 new file mode 100644 index 0000000..91452f4 Binary files /dev/null and b/audio/french/lila.mp3 differ diff --git a/audio/french/maman.mp3 b/audio/french/maman.mp3 new file mode 100644 index 0000000..28d8aa2 Binary files /dev/null and b/audio/french/maman.mp3 differ diff --git a/audio/french/papa.mp3 b/audio/french/papa.mp3 new file mode 100644 index 0000000..0ab9c0c Binary files /dev/null and b/audio/french/papa.mp3 differ diff --git a/audio/french/pula.mp3 b/audio/french/pula.mp3 new file mode 100644 index 0000000..01ba38c Binary files /dev/null and b/audio/french/pula.mp3 differ diff --git a/audio/french/puti.mp3 b/audio/french/puti.mp3 new file mode 100644 index 0000000..7d30fc0 Binary files /dev/null and b/audio/french/puti.mp3 differ diff --git a/audio/leche.mp3 b/audio/leche.mp3 new file mode 100644 index 0000000..61c9f48 Binary files /dev/null and b/audio/leche.mp3 differ diff --git a/audio/madre.mov b/audio/madre.mov new file mode 100644 index 0000000..e245625 Binary files /dev/null and b/audio/madre.mov differ diff --git a/audio/padre.m4a b/audio/padre.m4a new file mode 100644 index 0000000..4b871aa Binary files /dev/null and b/audio/padre.m4a differ diff --git a/audio/puff.mp3 b/audio/puff.mp3 new file mode 100644 index 0000000..c7a1e67 Binary files /dev/null and b/audio/puff.mp3 differ diff --git a/audio/spanish/amarillo.mp3 b/audio/spanish/amarillo.mp3 new file mode 100644 index 0000000..0f99db3 Binary files /dev/null and b/audio/spanish/amarillo.mp3 differ diff --git a/audio/spanish/azul.mp3 b/audio/spanish/azul.mp3 new file mode 100644 index 0000000..514ddd5 Binary files /dev/null and b/audio/spanish/azul.mp3 differ diff --git a/audio/spanish/blanco.mp3 b/audio/spanish/blanco.mp3 new file mode 100644 index 0000000..5adc93f Binary files /dev/null and b/audio/spanish/blanco.mp3 differ diff --git "a/audio/spanish/mam\303\241.mp3" "b/audio/spanish/mam\303\241.mp3" new file mode 100644 index 0000000..31734ea Binary files /dev/null and "b/audio/spanish/mam\303\241.mp3" differ diff --git a/audio/spanish/naranja.mp3 b/audio/spanish/naranja.mp3 new file mode 100644 index 0000000..e802f5f Binary files /dev/null and b/audio/spanish/naranja.mp3 differ diff --git a/audio/spanish/negro.mp3 b/audio/spanish/negro.mp3 new file mode 100644 index 0000000..76441d5 Binary files /dev/null and b/audio/spanish/negro.mp3 differ diff --git "a/audio/spanish/pap\303\241.mp3" "b/audio/spanish/pap\303\241.mp3" new file mode 100644 index 0000000..e774b56 Binary files /dev/null and "b/audio/spanish/pap\303\241.mp3" differ diff --git "a/audio/spanish/p\303\272rpura.mp3" "b/audio/spanish/p\303\272rpura.mp3" new file mode 100644 index 0000000..7a823d5 Binary files /dev/null and "b/audio/spanish/p\303\272rpura.mp3" differ diff --git a/audio/spanish/rojo.mp3 b/audio/spanish/rojo.mp3 new file mode 100644 index 0000000..939abb5 Binary files /dev/null and b/audio/spanish/rojo.mp3 differ diff --git a/audio/spanish/verde.mp3 b/audio/spanish/verde.mp3 new file mode 100644 index 0000000..e9a2343 Binary files /dev/null and b/audio/spanish/verde.mp3 differ diff --git a/bee.js b/bee.js deleted file mode 100644 index f8ecfbc..0000000 --- a/bee.js +++ /dev/null @@ -1,10061 +0,0 @@ - -(function() { -'use strict'; - -function F2(fun) -{ - function wrapper(a) { return function(b) { return fun(a,b); }; } - wrapper.arity = 2; - wrapper.func = fun; - return wrapper; -} - -function F3(fun) -{ - function wrapper(a) { - return function(b) { return function(c) { return fun(a, b, c); }; }; - } - wrapper.arity = 3; - wrapper.func = fun; - return wrapper; -} - -function F4(fun) -{ - function wrapper(a) { return function(b) { return function(c) { - return function(d) { return fun(a, b, c, d); }; }; }; - } - wrapper.arity = 4; - wrapper.func = fun; - return wrapper; -} - -function F5(fun) -{ - function wrapper(a) { return function(b) { return function(c) { - return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; }; - } - wrapper.arity = 5; - wrapper.func = fun; - return wrapper; -} - -function F6(fun) -{ - function wrapper(a) { return function(b) { return function(c) { - return function(d) { return function(e) { return function(f) { - return fun(a, b, c, d, e, f); }; }; }; }; }; - } - wrapper.arity = 6; - wrapper.func = fun; - return wrapper; -} - -function F7(fun) -{ - function wrapper(a) { return function(b) { return function(c) { - return function(d) { return function(e) { return function(f) { - return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; }; - } - wrapper.arity = 7; - wrapper.func = fun; - return wrapper; -} - -function F8(fun) -{ - function wrapper(a) { return function(b) { return function(c) { - return function(d) { return function(e) { return function(f) { - return function(g) { return function(h) { - return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; }; - } - wrapper.arity = 8; - wrapper.func = fun; - return wrapper; -} - -function F9(fun) -{ - function wrapper(a) { return function(b) { return function(c) { - return function(d) { return function(e) { return function(f) { - return function(g) { return function(h) { return function(i) { - return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; }; - } - wrapper.arity = 9; - wrapper.func = fun; - return wrapper; -} - -function A2(fun, a, b) -{ - return fun.arity === 2 - ? fun.func(a, b) - : fun(a)(b); -} -function A3(fun, a, b, c) -{ - return fun.arity === 3 - ? fun.func(a, b, c) - : fun(a)(b)(c); -} -function A4(fun, a, b, c, d) -{ - return fun.arity === 4 - ? fun.func(a, b, c, d) - : fun(a)(b)(c)(d); -} -function A5(fun, a, b, c, d, e) -{ - return fun.arity === 5 - ? fun.func(a, b, c, d, e) - : fun(a)(b)(c)(d)(e); -} -function A6(fun, a, b, c, d, e, f) -{ - return fun.arity === 6 - ? fun.func(a, b, c, d, e, f) - : fun(a)(b)(c)(d)(e)(f); -} -function A7(fun, a, b, c, d, e, f, g) -{ - return fun.arity === 7 - ? fun.func(a, b, c, d, e, f, g) - : fun(a)(b)(c)(d)(e)(f)(g); -} -function A8(fun, a, b, c, d, e, f, g, h) -{ - return fun.arity === 8 - ? fun.func(a, b, c, d, e, f, g, h) - : fun(a)(b)(c)(d)(e)(f)(g)(h); -} -function A9(fun, a, b, c, d, e, f, g, h, i) -{ - return fun.arity === 9 - ? fun.func(a, b, c, d, e, f, g, h, i) - : fun(a)(b)(c)(d)(e)(f)(g)(h)(i); -} - -//import Native.Utils // - -var _elm_lang$core$Native_Basics = function() { - -function div(a, b) -{ - return (a / b) | 0; -} -function rem(a, b) -{ - return a % b; -} -function mod(a, b) -{ - if (b === 0) - { - throw new Error('Cannot perform mod 0. Division by zero error.'); - } - var r = a % b; - var m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r + b) : -mod(-a, -b)); - - return m === b ? 0 : m; -} -function logBase(base, n) -{ - return Math.log(n) / Math.log(base); -} -function negate(n) -{ - return -n; -} -function abs(n) -{ - return n < 0 ? -n : n; -} - -function min(a, b) -{ - return _elm_lang$core$Native_Utils.cmp(a, b) < 0 ? a : b; -} -function max(a, b) -{ - return _elm_lang$core$Native_Utils.cmp(a, b) > 0 ? a : b; -} -function clamp(lo, hi, n) -{ - return _elm_lang$core$Native_Utils.cmp(n, lo) < 0 - ? lo - : _elm_lang$core$Native_Utils.cmp(n, hi) > 0 - ? hi - : n; -} - -var ord = ['LT', 'EQ', 'GT']; - -function compare(x, y) -{ - return { ctor: ord[_elm_lang$core$Native_Utils.cmp(x, y) + 1] }; -} - -function xor(a, b) -{ - return a !== b; -} -function not(b) -{ - return !b; -} -function isInfinite(n) -{ - return n === Infinity || n === -Infinity; -} - -function truncate(n) -{ - return n | 0; -} - -function degrees(d) -{ - return d * Math.PI / 180; -} -function turns(t) -{ - return 2 * Math.PI * t; -} -function fromPolar(point) -{ - var r = point._0; - var t = point._1; - return _elm_lang$core$Native_Utils.Tuple2(r * Math.cos(t), r * Math.sin(t)); -} -function toPolar(point) -{ - var x = point._0; - var y = point._1; - return _elm_lang$core$Native_Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x)); -} - -return { - div: F2(div), - rem: F2(rem), - mod: F2(mod), - - pi: Math.PI, - e: Math.E, - cos: Math.cos, - sin: Math.sin, - tan: Math.tan, - acos: Math.acos, - asin: Math.asin, - atan: Math.atan, - atan2: F2(Math.atan2), - - degrees: degrees, - turns: turns, - fromPolar: fromPolar, - toPolar: toPolar, - - sqrt: Math.sqrt, - logBase: F2(logBase), - negate: negate, - abs: abs, - min: F2(min), - max: F2(max), - clamp: F3(clamp), - compare: F2(compare), - - xor: F2(xor), - not: not, - - truncate: truncate, - ceiling: Math.ceil, - floor: Math.floor, - round: Math.round, - toFloat: function(x) { return x; }, - isNaN: isNaN, - isInfinite: isInfinite -}; - -}(); -//import // - -var _elm_lang$core$Native_Utils = function() { - -// COMPARISONS - -function eq(x, y) -{ - var stack = []; - var isEqual = eqHelp(x, y, 0, stack); - var pair; - while (isEqual && (pair = stack.pop())) - { - isEqual = eqHelp(pair.x, pair.y, 0, stack); - } - return isEqual; -} - - -function eqHelp(x, y, depth, stack) -{ - if (depth > 100) - { - stack.push({ x: x, y: y }); - return true; - } - - if (x === y) - { - return true; - } - - if (typeof x !== 'object') - { - if (typeof x === 'function') - { - throw new Error( - 'Trying to use `(==)` on functions. There is no way to know if functions are "the same" in the Elm sense.' - + ' Read more about this at http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#==' - + ' which describes why it is this way and what the better version will look like.' - ); - } - return false; - } - - if (x === null || y === null) - { - return false - } - - if (x instanceof Date) - { - return x.getTime() === y.getTime(); - } - - if (!('ctor' in x)) - { - for (var key in x) - { - if (!eqHelp(x[key], y[key], depth + 1, stack)) - { - return false; - } - } - return true; - } - - // convert Dicts and Sets to lists - if (x.ctor === 'RBNode_elm_builtin' || x.ctor === 'RBEmpty_elm_builtin') - { - x = _elm_lang$core$Dict$toList(x); - y = _elm_lang$core$Dict$toList(y); - } - if (x.ctor === 'Set_elm_builtin') - { - x = _elm_lang$core$Set$toList(x); - y = _elm_lang$core$Set$toList(y); - } - - // check if lists are equal without recursion - if (x.ctor === '::') - { - var a = x; - var b = y; - while (a.ctor === '::' && b.ctor === '::') - { - if (!eqHelp(a._0, b._0, depth + 1, stack)) - { - return false; - } - a = a._1; - b = b._1; - } - return a.ctor === b.ctor; - } - - // check if Arrays are equal - if (x.ctor === '_Array') - { - var xs = _elm_lang$core$Native_Array.toJSArray(x); - var ys = _elm_lang$core$Native_Array.toJSArray(y); - if (xs.length !== ys.length) - { - return false; - } - for (var i = 0; i < xs.length; i++) - { - if (!eqHelp(xs[i], ys[i], depth + 1, stack)) - { - return false; - } - } - return true; - } - - if (!eqHelp(x.ctor, y.ctor, depth + 1, stack)) - { - return false; - } - - for (var key in x) - { - if (!eqHelp(x[key], y[key], depth + 1, stack)) - { - return false; - } - } - return true; -} - -// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on -// the particular integer values assigned to LT, EQ, and GT. - -var LT = -1, EQ = 0, GT = 1; - -function cmp(x, y) -{ - if (typeof x !== 'object') - { - return x === y ? EQ : x < y ? LT : GT; - } - - if (x instanceof String) - { - var a = x.valueOf(); - var b = y.valueOf(); - return a === b ? EQ : a < b ? LT : GT; - } - - if (x.ctor === '::' || x.ctor === '[]') - { - while (x.ctor === '::' && y.ctor === '::') - { - var ord = cmp(x._0, y._0); - if (ord !== EQ) - { - return ord; - } - x = x._1; - y = y._1; - } - return x.ctor === y.ctor ? EQ : x.ctor === '[]' ? LT : GT; - } - - if (x.ctor.slice(0, 6) === '_Tuple') - { - var ord; - var n = x.ctor.slice(6) - 0; - var err = 'cannot compare tuples with more than 6 elements.'; - if (n === 0) return EQ; - if (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord; - if (n >= 2) { ord = cmp(x._1, y._1); if (ord !== EQ) return ord; - if (n >= 3) { ord = cmp(x._2, y._2); if (ord !== EQ) return ord; - if (n >= 4) { ord = cmp(x._3, y._3); if (ord !== EQ) return ord; - if (n >= 5) { ord = cmp(x._4, y._4); if (ord !== EQ) return ord; - if (n >= 6) { ord = cmp(x._5, y._5); if (ord !== EQ) return ord; - if (n >= 7) throw new Error('Comparison error: ' + err); } } } } } } - return EQ; - } - - throw new Error( - 'Comparison error: comparison is only defined on ints, ' - + 'floats, times, chars, strings, lists of comparable values, ' - + 'and tuples of comparable values.' - ); -} - - -// COMMON VALUES - -var Tuple0 = { - ctor: '_Tuple0' -}; - -function Tuple2(x, y) -{ - return { - ctor: '_Tuple2', - _0: x, - _1: y - }; -} - -function chr(c) -{ - return new String(c); -} - - -// GUID - -var count = 0; -function guid(_) -{ - return count++; -} - - -// RECORDS - -function update(oldRecord, updatedFields) -{ - var newRecord = {}; - for (var key in oldRecord) - { - var value = (key in updatedFields) ? updatedFields[key] : oldRecord[key]; - newRecord[key] = value; - } - return newRecord; -} - - -//// LIST STUFF //// - -var Nil = { ctor: '[]' }; - -function Cons(hd, tl) -{ - return { - ctor: '::', - _0: hd, - _1: tl - }; -} - -function append(xs, ys) -{ - // append Strings - if (typeof xs === 'string') - { - return xs + ys; - } - - // append Lists - if (xs.ctor === '[]') - { - return ys; - } - var root = Cons(xs._0, Nil); - var curr = root; - xs = xs._1; - while (xs.ctor !== '[]') - { - curr._1 = Cons(xs._0, Nil); - xs = xs._1; - curr = curr._1; - } - curr._1 = ys; - return root; -} - - -// CRASHES - -function crash(moduleName, region) -{ - return function(message) { - throw new Error( - 'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\n' - + 'The message provided by the code author is:\n\n ' - + message - ); - }; -} - -function crashCase(moduleName, region, value) -{ - return function(message) { - throw new Error( - 'Ran into a `Debug.crash` in module `' + moduleName + '`\n\n' - + 'This was caused by the `case` expression ' + regionToString(region) + '.\n' - + 'One of the branches ended with a crash and the following value got through:\n\n ' + toString(value) + '\n\n' - + 'The message provided by the code author is:\n\n ' - + message - ); - }; -} - -function regionToString(region) -{ - if (region.start.line == region.end.line) - { - return 'on line ' + region.start.line; - } - return 'between lines ' + region.start.line + ' and ' + region.end.line; -} - - -// TO STRING - -function toString(v) -{ - var type = typeof v; - if (type === 'function') - { - var name = v.func ? v.func.name : v.name; - return ''; - } - - if (type === 'boolean') - { - return v ? 'True' : 'False'; - } - - if (type === 'number') - { - return v + ''; - } - - if (v instanceof String) - { - return '\'' + addSlashes(v, true) + '\''; - } - - if (type === 'string') - { - return '"' + addSlashes(v, false) + '"'; - } - - if (v === null) - { - return 'null'; - } - - if (type === 'object' && 'ctor' in v) - { - var ctorStarter = v.ctor.substring(0, 5); - - if (ctorStarter === '_Tupl') - { - var output = []; - for (var k in v) - { - if (k === 'ctor') continue; - output.push(toString(v[k])); - } - return '(' + output.join(',') + ')'; - } - - if (ctorStarter === '_Task') - { - return '' - } - - if (v.ctor === '_Array') - { - var list = _elm_lang$core$Array$toList(v); - return 'Array.fromList ' + toString(list); - } - - if (v.ctor === '') - { - return ''; - } - - if (v.ctor === '_Process') - { - return ''; - } - - if (v.ctor === '::') - { - var output = '[' + toString(v._0); - v = v._1; - while (v.ctor === '::') - { - output += ',' + toString(v._0); - v = v._1; - } - return output + ']'; - } - - if (v.ctor === '[]') - { - return '[]'; - } - - if (v.ctor === 'Set_elm_builtin') - { - return 'Set.fromList ' + toString(_elm_lang$core$Set$toList(v)); - } - - if (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin') - { - return 'Dict.fromList ' + toString(_elm_lang$core$Dict$toList(v)); - } - - var output = ''; - for (var i in v) - { - if (i === 'ctor') continue; - var str = toString(v[i]); - var c0 = str[0]; - var parenless = c0 === '{' || c0 === '(' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0; - output += ' ' + (parenless ? str : '(' + str + ')'); - } - return v.ctor + output; - } - - if (type === 'object') - { - if (v instanceof Date) - { - return '<' + v.toString() + '>'; - } - - if (v.elm_web_socket) - { - return ''; - } - - var output = []; - for (var k in v) - { - output.push(k + ' = ' + toString(v[k])); - } - if (output.length === 0) - { - return '{}'; - } - return '{ ' + output.join(', ') + ' }'; - } - - return ''; -} - -function addSlashes(str, isChar) -{ - var s = str.replace(/\\/g, '\\\\') - .replace(/\n/g, '\\n') - .replace(/\t/g, '\\t') - .replace(/\r/g, '\\r') - .replace(/\v/g, '\\v') - .replace(/\0/g, '\\0'); - if (isChar) - { - return s.replace(/\'/g, '\\\''); - } - else - { - return s.replace(/\"/g, '\\"'); - } -} - - -return { - eq: eq, - cmp: cmp, - Tuple0: Tuple0, - Tuple2: Tuple2, - chr: chr, - update: update, - guid: guid, - - append: F2(append), - - crash: crash, - crashCase: crashCase, - - toString: toString -}; - -}(); -var _elm_lang$core$Basics$uncurry = F2( - function (f, _p0) { - var _p1 = _p0; - return A2(f, _p1._0, _p1._1); - }); -var _elm_lang$core$Basics$curry = F3( - function (f, a, b) { - return f( - {ctor: '_Tuple2', _0: a, _1: b}); - }); -var _elm_lang$core$Basics$flip = F3( - function (f, b, a) { - return A2(f, a, b); - }); -var _elm_lang$core$Basics$snd = function (_p2) { - var _p3 = _p2; - return _p3._1; -}; -var _elm_lang$core$Basics$fst = function (_p4) { - var _p5 = _p4; - return _p5._0; -}; -var _elm_lang$core$Basics$always = F2( - function (a, _p6) { - return a; - }); -var _elm_lang$core$Basics$identity = function (x) { - return x; -}; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['<|'] = F2( - function (f, x) { - return f(x); - }); -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['|>'] = F2( - function (x, f) { - return f(x); - }); -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['>>'] = F3( - function (f, g, x) { - return g( - f(x)); - }); -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['<<'] = F3( - function (g, f, x) { - return g( - f(x)); - }); -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['++'] = _elm_lang$core$Native_Utils.append; -var _elm_lang$core$Basics$toString = _elm_lang$core$Native_Utils.toString; -var _elm_lang$core$Basics$isInfinite = _elm_lang$core$Native_Basics.isInfinite; -var _elm_lang$core$Basics$isNaN = _elm_lang$core$Native_Basics.isNaN; -var _elm_lang$core$Basics$toFloat = _elm_lang$core$Native_Basics.toFloat; -var _elm_lang$core$Basics$ceiling = _elm_lang$core$Native_Basics.ceiling; -var _elm_lang$core$Basics$floor = _elm_lang$core$Native_Basics.floor; -var _elm_lang$core$Basics$truncate = _elm_lang$core$Native_Basics.truncate; -var _elm_lang$core$Basics$round = _elm_lang$core$Native_Basics.round; -var _elm_lang$core$Basics$not = _elm_lang$core$Native_Basics.not; -var _elm_lang$core$Basics$xor = _elm_lang$core$Native_Basics.xor; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['||'] = _elm_lang$core$Native_Basics.or; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['&&'] = _elm_lang$core$Native_Basics.and; -var _elm_lang$core$Basics$max = _elm_lang$core$Native_Basics.max; -var _elm_lang$core$Basics$min = _elm_lang$core$Native_Basics.min; -var _elm_lang$core$Basics$compare = _elm_lang$core$Native_Basics.compare; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['>='] = _elm_lang$core$Native_Basics.ge; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['<='] = _elm_lang$core$Native_Basics.le; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['>'] = _elm_lang$core$Native_Basics.gt; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['<'] = _elm_lang$core$Native_Basics.lt; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['/='] = _elm_lang$core$Native_Basics.neq; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['=='] = _elm_lang$core$Native_Basics.eq; -var _elm_lang$core$Basics$e = _elm_lang$core$Native_Basics.e; -var _elm_lang$core$Basics$pi = _elm_lang$core$Native_Basics.pi; -var _elm_lang$core$Basics$clamp = _elm_lang$core$Native_Basics.clamp; -var _elm_lang$core$Basics$logBase = _elm_lang$core$Native_Basics.logBase; -var _elm_lang$core$Basics$abs = _elm_lang$core$Native_Basics.abs; -var _elm_lang$core$Basics$negate = _elm_lang$core$Native_Basics.negate; -var _elm_lang$core$Basics$sqrt = _elm_lang$core$Native_Basics.sqrt; -var _elm_lang$core$Basics$atan2 = _elm_lang$core$Native_Basics.atan2; -var _elm_lang$core$Basics$atan = _elm_lang$core$Native_Basics.atan; -var _elm_lang$core$Basics$asin = _elm_lang$core$Native_Basics.asin; -var _elm_lang$core$Basics$acos = _elm_lang$core$Native_Basics.acos; -var _elm_lang$core$Basics$tan = _elm_lang$core$Native_Basics.tan; -var _elm_lang$core$Basics$sin = _elm_lang$core$Native_Basics.sin; -var _elm_lang$core$Basics$cos = _elm_lang$core$Native_Basics.cos; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['^'] = _elm_lang$core$Native_Basics.exp; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['%'] = _elm_lang$core$Native_Basics.mod; -var _elm_lang$core$Basics$rem = _elm_lang$core$Native_Basics.rem; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['//'] = _elm_lang$core$Native_Basics.div; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['/'] = _elm_lang$core$Native_Basics.floatDiv; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['*'] = _elm_lang$core$Native_Basics.mul; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['-'] = _elm_lang$core$Native_Basics.sub; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['+'] = _elm_lang$core$Native_Basics.add; -var _elm_lang$core$Basics$toPolar = _elm_lang$core$Native_Basics.toPolar; -var _elm_lang$core$Basics$fromPolar = _elm_lang$core$Native_Basics.fromPolar; -var _elm_lang$core$Basics$turns = _elm_lang$core$Native_Basics.turns; -var _elm_lang$core$Basics$degrees = _elm_lang$core$Native_Basics.degrees; -var _elm_lang$core$Basics$radians = function (t) { - return t; -}; -var _elm_lang$core$Basics$GT = {ctor: 'GT'}; -var _elm_lang$core$Basics$EQ = {ctor: 'EQ'}; -var _elm_lang$core$Basics$LT = {ctor: 'LT'}; -var _elm_lang$core$Basics$Never = function (a) { - return {ctor: 'Never', _0: a}; -}; - -//import Native.Utils // - -var _elm_lang$core$Native_Debug = function() { - -function log(tag, value) -{ - var msg = tag + ': ' + _elm_lang$core$Native_Utils.toString(value); - var process = process || {}; - if (process.stdout) - { - process.stdout.write(msg); - } - else - { - console.log(msg); - } - return value; -} - -function crash(message) -{ - throw new Error(message); -} - -return { - crash: crash, - log: F2(log) -}; - -}(); -var _elm_lang$core$Debug$crash = _elm_lang$core$Native_Debug.crash; -var _elm_lang$core$Debug$log = _elm_lang$core$Native_Debug.log; - -var _elm_lang$core$Maybe$withDefault = F2( - function ($default, maybe) { - var _p0 = maybe; - if (_p0.ctor === 'Just') { - return _p0._0; - } else { - return $default; - } - }); -var _elm_lang$core$Maybe$Nothing = {ctor: 'Nothing'}; -var _elm_lang$core$Maybe$oneOf = function (maybes) { - oneOf: - while (true) { - var _p1 = maybes; - if (_p1.ctor === '[]') { - return _elm_lang$core$Maybe$Nothing; - } else { - var _p3 = _p1._0; - var _p2 = _p3; - if (_p2.ctor === 'Nothing') { - var _v3 = _p1._1; - maybes = _v3; - continue oneOf; - } else { - return _p3; - } - } - } -}; -var _elm_lang$core$Maybe$andThen = F2( - function (maybeValue, callback) { - var _p4 = maybeValue; - if (_p4.ctor === 'Just') { - return callback(_p4._0); - } else { - return _elm_lang$core$Maybe$Nothing; - } - }); -var _elm_lang$core$Maybe$Just = function (a) { - return {ctor: 'Just', _0: a}; -}; -var _elm_lang$core$Maybe$map = F2( - function (f, maybe) { - var _p5 = maybe; - if (_p5.ctor === 'Just') { - return _elm_lang$core$Maybe$Just( - f(_p5._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } - }); -var _elm_lang$core$Maybe$map2 = F3( - function (func, ma, mb) { - var _p6 = {ctor: '_Tuple2', _0: ma, _1: mb}; - if (((_p6.ctor === '_Tuple2') && (_p6._0.ctor === 'Just')) && (_p6._1.ctor === 'Just')) { - return _elm_lang$core$Maybe$Just( - A2(func, _p6._0._0, _p6._1._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } - }); -var _elm_lang$core$Maybe$map3 = F4( - function (func, ma, mb, mc) { - var _p7 = {ctor: '_Tuple3', _0: ma, _1: mb, _2: mc}; - if ((((_p7.ctor === '_Tuple3') && (_p7._0.ctor === 'Just')) && (_p7._1.ctor === 'Just')) && (_p7._2.ctor === 'Just')) { - return _elm_lang$core$Maybe$Just( - A3(func, _p7._0._0, _p7._1._0, _p7._2._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } - }); -var _elm_lang$core$Maybe$map4 = F5( - function (func, ma, mb, mc, md) { - var _p8 = {ctor: '_Tuple4', _0: ma, _1: mb, _2: mc, _3: md}; - if (((((_p8.ctor === '_Tuple4') && (_p8._0.ctor === 'Just')) && (_p8._1.ctor === 'Just')) && (_p8._2.ctor === 'Just')) && (_p8._3.ctor === 'Just')) { - return _elm_lang$core$Maybe$Just( - A4(func, _p8._0._0, _p8._1._0, _p8._2._0, _p8._3._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } - }); -var _elm_lang$core$Maybe$map5 = F6( - function (func, ma, mb, mc, md, me) { - var _p9 = {ctor: '_Tuple5', _0: ma, _1: mb, _2: mc, _3: md, _4: me}; - if ((((((_p9.ctor === '_Tuple5') && (_p9._0.ctor === 'Just')) && (_p9._1.ctor === 'Just')) && (_p9._2.ctor === 'Just')) && (_p9._3.ctor === 'Just')) && (_p9._4.ctor === 'Just')) { - return _elm_lang$core$Maybe$Just( - A5(func, _p9._0._0, _p9._1._0, _p9._2._0, _p9._3._0, _p9._4._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } - }); - -//import Native.Utils // - -var _elm_lang$core$Native_List = function() { - -var Nil = { ctor: '[]' }; - -function Cons(hd, tl) -{ - return { ctor: '::', _0: hd, _1: tl }; -} - -function fromArray(arr) -{ - var out = Nil; - for (var i = arr.length; i--; ) - { - out = Cons(arr[i], out); - } - return out; -} - -function toArray(xs) -{ - var out = []; - while (xs.ctor !== '[]') - { - out.push(xs._0); - xs = xs._1; - } - return out; -} - - -function range(lo, hi) -{ - var list = Nil; - if (lo <= hi) - { - do - { - list = Cons(hi, list); - } - while (hi-- > lo); - } - return list; -} - -function foldr(f, b, xs) -{ - var arr = toArray(xs); - var acc = b; - for (var i = arr.length; i--; ) - { - acc = A2(f, arr[i], acc); - } - return acc; -} - -function map2(f, xs, ys) -{ - var arr = []; - while (xs.ctor !== '[]' && ys.ctor !== '[]') - { - arr.push(A2(f, xs._0, ys._0)); - xs = xs._1; - ys = ys._1; - } - return fromArray(arr); -} - -function map3(f, xs, ys, zs) -{ - var arr = []; - while (xs.ctor !== '[]' && ys.ctor !== '[]' && zs.ctor !== '[]') - { - arr.push(A3(f, xs._0, ys._0, zs._0)); - xs = xs._1; - ys = ys._1; - zs = zs._1; - } - return fromArray(arr); -} - -function map4(f, ws, xs, ys, zs) -{ - var arr = []; - while ( ws.ctor !== '[]' - && xs.ctor !== '[]' - && ys.ctor !== '[]' - && zs.ctor !== '[]') - { - arr.push(A4(f, ws._0, xs._0, ys._0, zs._0)); - ws = ws._1; - xs = xs._1; - ys = ys._1; - zs = zs._1; - } - return fromArray(arr); -} - -function map5(f, vs, ws, xs, ys, zs) -{ - var arr = []; - while ( vs.ctor !== '[]' - && ws.ctor !== '[]' - && xs.ctor !== '[]' - && ys.ctor !== '[]' - && zs.ctor !== '[]') - { - arr.push(A5(f, vs._0, ws._0, xs._0, ys._0, zs._0)); - vs = vs._1; - ws = ws._1; - xs = xs._1; - ys = ys._1; - zs = zs._1; - } - return fromArray(arr); -} - -function sortBy(f, xs) -{ - return fromArray(toArray(xs).sort(function(a, b) { - return _elm_lang$core$Native_Utils.cmp(f(a), f(b)); - })); -} - -function sortWith(f, xs) -{ - return fromArray(toArray(xs).sort(function(a, b) { - var ord = f(a)(b).ctor; - return ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1; - })); -} - -return { - Nil: Nil, - Cons: Cons, - cons: F2(Cons), - toArray: toArray, - fromArray: fromArray, - range: range, - - foldr: F3(foldr), - - map2: F3(map2), - map3: F4(map3), - map4: F5(map4), - map5: F6(map5), - sortBy: F2(sortBy), - sortWith: F2(sortWith) -}; - -}(); -var _elm_lang$core$List$sortWith = _elm_lang$core$Native_List.sortWith; -var _elm_lang$core$List$sortBy = _elm_lang$core$Native_List.sortBy; -var _elm_lang$core$List$sort = function (xs) { - return A2(_elm_lang$core$List$sortBy, _elm_lang$core$Basics$identity, xs); -}; -var _elm_lang$core$List$drop = F2( - function (n, list) { - drop: - while (true) { - if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { - return list; - } else { - var _p0 = list; - if (_p0.ctor === '[]') { - return list; - } else { - var _v1 = n - 1, - _v2 = _p0._1; - n = _v1; - list = _v2; - continue drop; - } - } - } - }); -var _elm_lang$core$List$map5 = _elm_lang$core$Native_List.map5; -var _elm_lang$core$List$map4 = _elm_lang$core$Native_List.map4; -var _elm_lang$core$List$map3 = _elm_lang$core$Native_List.map3; -var _elm_lang$core$List$map2 = _elm_lang$core$Native_List.map2; -var _elm_lang$core$List$any = F2( - function (isOkay, list) { - any: - while (true) { - var _p1 = list; - if (_p1.ctor === '[]') { - return false; - } else { - if (isOkay(_p1._0)) { - return true; - } else { - var _v4 = isOkay, - _v5 = _p1._1; - isOkay = _v4; - list = _v5; - continue any; - } - } - } - }); -var _elm_lang$core$List$all = F2( - function (isOkay, list) { - return _elm_lang$core$Basics$not( - A2( - _elm_lang$core$List$any, - function (_p2) { - return _elm_lang$core$Basics$not( - isOkay(_p2)); - }, - list)); - }); -var _elm_lang$core$List$foldr = _elm_lang$core$Native_List.foldr; -var _elm_lang$core$List$foldl = F3( - function (func, acc, list) { - foldl: - while (true) { - var _p3 = list; - if (_p3.ctor === '[]') { - return acc; - } else { - var _v7 = func, - _v8 = A2(func, _p3._0, acc), - _v9 = _p3._1; - func = _v7; - acc = _v8; - list = _v9; - continue foldl; - } - } - }); -var _elm_lang$core$List$length = function (xs) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p4, i) { - return i + 1; - }), - 0, - xs); -}; -var _elm_lang$core$List$sum = function (numbers) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (x, y) { - return x + y; - }), - 0, - numbers); -}; -var _elm_lang$core$List$product = function (numbers) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (x, y) { - return x * y; - }), - 1, - numbers); -}; -var _elm_lang$core$List$maximum = function (list) { - var _p5 = list; - if (_p5.ctor === '::') { - return _elm_lang$core$Maybe$Just( - A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$max, _p5._0, _p5._1)); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$List$minimum = function (list) { - var _p6 = list; - if (_p6.ctor === '::') { - return _elm_lang$core$Maybe$Just( - A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$min, _p6._0, _p6._1)); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$List$indexedMap = F2( - function (f, xs) { - return A3( - _elm_lang$core$List$map2, - f, - _elm_lang$core$Native_List.range( - 0, - _elm_lang$core$List$length(xs) - 1), - xs); - }); -var _elm_lang$core$List$member = F2( - function (x, xs) { - return A2( - _elm_lang$core$List$any, - function (a) { - return _elm_lang$core$Native_Utils.eq(a, x); - }, - xs); - }); -var _elm_lang$core$List$isEmpty = function (xs) { - var _p7 = xs; - if (_p7.ctor === '[]') { - return true; - } else { - return false; - } -}; -var _elm_lang$core$List$tail = function (list) { - var _p8 = list; - if (_p8.ctor === '::') { - return _elm_lang$core$Maybe$Just(_p8._1); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$List$head = function (list) { - var _p9 = list; - if (_p9.ctor === '::') { - return _elm_lang$core$Maybe$Just(_p9._0); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$List_ops = _elm_lang$core$List_ops || {}; -_elm_lang$core$List_ops['::'] = _elm_lang$core$Native_List.cons; -var _elm_lang$core$List$map = F2( - function (f, xs) { - return A3( - _elm_lang$core$List$foldr, - F2( - function (x, acc) { - return A2( - _elm_lang$core$List_ops['::'], - f(x), - acc); - }), - _elm_lang$core$Native_List.fromArray( - []), - xs); - }); -var _elm_lang$core$List$filter = F2( - function (pred, xs) { - var conditionalCons = F2( - function (x, xs$) { - return pred(x) ? A2(_elm_lang$core$List_ops['::'], x, xs$) : xs$; - }); - return A3( - _elm_lang$core$List$foldr, - conditionalCons, - _elm_lang$core$Native_List.fromArray( - []), - xs); - }); -var _elm_lang$core$List$maybeCons = F3( - function (f, mx, xs) { - var _p10 = f(mx); - if (_p10.ctor === 'Just') { - return A2(_elm_lang$core$List_ops['::'], _p10._0, xs); - } else { - return xs; - } - }); -var _elm_lang$core$List$filterMap = F2( - function (f, xs) { - return A3( - _elm_lang$core$List$foldr, - _elm_lang$core$List$maybeCons(f), - _elm_lang$core$Native_List.fromArray( - []), - xs); - }); -var _elm_lang$core$List$reverse = function (list) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (x, y) { - return A2(_elm_lang$core$List_ops['::'], x, y); - }), - _elm_lang$core$Native_List.fromArray( - []), - list); -}; -var _elm_lang$core$List$scanl = F3( - function (f, b, xs) { - var scan1 = F2( - function (x, accAcc) { - var _p11 = accAcc; - if (_p11.ctor === '::') { - return A2( - _elm_lang$core$List_ops['::'], - A2(f, x, _p11._0), - accAcc); - } else { - return _elm_lang$core$Native_List.fromArray( - []); - } - }); - return _elm_lang$core$List$reverse( - A3( - _elm_lang$core$List$foldl, - scan1, - _elm_lang$core$Native_List.fromArray( - [b]), - xs)); - }); -var _elm_lang$core$List$append = F2( - function (xs, ys) { - var _p12 = ys; - if (_p12.ctor === '[]') { - return xs; - } else { - return A3( - _elm_lang$core$List$foldr, - F2( - function (x, y) { - return A2(_elm_lang$core$List_ops['::'], x, y); - }), - ys, - xs); - } - }); -var _elm_lang$core$List$concat = function (lists) { - return A3( - _elm_lang$core$List$foldr, - _elm_lang$core$List$append, - _elm_lang$core$Native_List.fromArray( - []), - lists); -}; -var _elm_lang$core$List$concatMap = F2( - function (f, list) { - return _elm_lang$core$List$concat( - A2(_elm_lang$core$List$map, f, list)); - }); -var _elm_lang$core$List$partition = F2( - function (pred, list) { - var step = F2( - function (x, _p13) { - var _p14 = _p13; - var _p16 = _p14._0; - var _p15 = _p14._1; - return pred(x) ? { - ctor: '_Tuple2', - _0: A2(_elm_lang$core$List_ops['::'], x, _p16), - _1: _p15 - } : { - ctor: '_Tuple2', - _0: _p16, - _1: A2(_elm_lang$core$List_ops['::'], x, _p15) - }; - }); - return A3( - _elm_lang$core$List$foldr, - step, - { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_List.fromArray( - []), - _1: _elm_lang$core$Native_List.fromArray( - []) - }, - list); - }); -var _elm_lang$core$List$unzip = function (pairs) { - var step = F2( - function (_p18, _p17) { - var _p19 = _p18; - var _p20 = _p17; - return { - ctor: '_Tuple2', - _0: A2(_elm_lang$core$List_ops['::'], _p19._0, _p20._0), - _1: A2(_elm_lang$core$List_ops['::'], _p19._1, _p20._1) - }; - }); - return A3( - _elm_lang$core$List$foldr, - step, - { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_List.fromArray( - []), - _1: _elm_lang$core$Native_List.fromArray( - []) - }, - pairs); -}; -var _elm_lang$core$List$intersperse = F2( - function (sep, xs) { - var _p21 = xs; - if (_p21.ctor === '[]') { - return _elm_lang$core$Native_List.fromArray( - []); - } else { - var step = F2( - function (x, rest) { - return A2( - _elm_lang$core$List_ops['::'], - sep, - A2(_elm_lang$core$List_ops['::'], x, rest)); - }); - var spersed = A3( - _elm_lang$core$List$foldr, - step, - _elm_lang$core$Native_List.fromArray( - []), - _p21._1); - return A2(_elm_lang$core$List_ops['::'], _p21._0, spersed); - } - }); -var _elm_lang$core$List$takeReverse = F3( - function (n, list, taken) { - takeReverse: - while (true) { - if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { - return taken; - } else { - var _p22 = list; - if (_p22.ctor === '[]') { - return taken; - } else { - var _v23 = n - 1, - _v24 = _p22._1, - _v25 = A2(_elm_lang$core$List_ops['::'], _p22._0, taken); - n = _v23; - list = _v24; - taken = _v25; - continue takeReverse; - } - } - } - }); -var _elm_lang$core$List$takeTailRec = F2( - function (n, list) { - return _elm_lang$core$List$reverse( - A3( - _elm_lang$core$List$takeReverse, - n, - list, - _elm_lang$core$Native_List.fromArray( - []))); - }); -var _elm_lang$core$List$takeFast = F3( - function (ctr, n, list) { - if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { - return _elm_lang$core$Native_List.fromArray( - []); - } else { - var _p23 = {ctor: '_Tuple2', _0: n, _1: list}; - _v26_5: - do { - _v26_1: - do { - if (_p23.ctor === '_Tuple2') { - if (_p23._1.ctor === '[]') { - return list; - } else { - if (_p23._1._1.ctor === '::') { - switch (_p23._0) { - case 1: - break _v26_1; - case 2: - return _elm_lang$core$Native_List.fromArray( - [_p23._1._0, _p23._1._1._0]); - case 3: - if (_p23._1._1._1.ctor === '::') { - return _elm_lang$core$Native_List.fromArray( - [_p23._1._0, _p23._1._1._0, _p23._1._1._1._0]); - } else { - break _v26_5; - } - default: - if ((_p23._1._1._1.ctor === '::') && (_p23._1._1._1._1.ctor === '::')) { - var _p28 = _p23._1._1._1._0; - var _p27 = _p23._1._1._0; - var _p26 = _p23._1._0; - var _p25 = _p23._1._1._1._1._0; - var _p24 = _p23._1._1._1._1._1; - return (_elm_lang$core$Native_Utils.cmp(ctr, 1000) > 0) ? A2( - _elm_lang$core$List_ops['::'], - _p26, - A2( - _elm_lang$core$List_ops['::'], - _p27, - A2( - _elm_lang$core$List_ops['::'], - _p28, - A2( - _elm_lang$core$List_ops['::'], - _p25, - A2(_elm_lang$core$List$takeTailRec, n - 4, _p24))))) : A2( - _elm_lang$core$List_ops['::'], - _p26, - A2( - _elm_lang$core$List_ops['::'], - _p27, - A2( - _elm_lang$core$List_ops['::'], - _p28, - A2( - _elm_lang$core$List_ops['::'], - _p25, - A3(_elm_lang$core$List$takeFast, ctr + 1, n - 4, _p24))))); - } else { - break _v26_5; - } - } - } else { - if (_p23._0 === 1) { - break _v26_1; - } else { - break _v26_5; - } - } - } - } else { - break _v26_5; - } - } while(false); - return _elm_lang$core$Native_List.fromArray( - [_p23._1._0]); - } while(false); - return list; - } - }); -var _elm_lang$core$List$take = F2( - function (n, list) { - return A3(_elm_lang$core$List$takeFast, 0, n, list); - }); -var _elm_lang$core$List$repeatHelp = F3( - function (result, n, value) { - repeatHelp: - while (true) { - if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { - return result; - } else { - var _v27 = A2(_elm_lang$core$List_ops['::'], value, result), - _v28 = n - 1, - _v29 = value; - result = _v27; - n = _v28; - value = _v29; - continue repeatHelp; - } - } - }); -var _elm_lang$core$List$repeat = F2( - function (n, value) { - return A3( - _elm_lang$core$List$repeatHelp, - _elm_lang$core$Native_List.fromArray( - []), - n, - value); - }); - -var _elm_lang$core$Result$toMaybe = function (result) { - var _p0 = result; - if (_p0.ctor === 'Ok') { - return _elm_lang$core$Maybe$Just(_p0._0); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$Result$withDefault = F2( - function (def, result) { - var _p1 = result; - if (_p1.ctor === 'Ok') { - return _p1._0; - } else { - return def; - } - }); -var _elm_lang$core$Result$Err = function (a) { - return {ctor: 'Err', _0: a}; -}; -var _elm_lang$core$Result$andThen = F2( - function (result, callback) { - var _p2 = result; - if (_p2.ctor === 'Ok') { - return callback(_p2._0); - } else { - return _elm_lang$core$Result$Err(_p2._0); - } - }); -var _elm_lang$core$Result$Ok = function (a) { - return {ctor: 'Ok', _0: a}; -}; -var _elm_lang$core$Result$map = F2( - function (func, ra) { - var _p3 = ra; - if (_p3.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - func(_p3._0)); - } else { - return _elm_lang$core$Result$Err(_p3._0); - } - }); -var _elm_lang$core$Result$map2 = F3( - function (func, ra, rb) { - var _p4 = {ctor: '_Tuple2', _0: ra, _1: rb}; - if (_p4._0.ctor === 'Ok') { - if (_p4._1.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A2(func, _p4._0._0, _p4._1._0)); - } else { - return _elm_lang$core$Result$Err(_p4._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p4._0._0); - } - }); -var _elm_lang$core$Result$map3 = F4( - function (func, ra, rb, rc) { - var _p5 = {ctor: '_Tuple3', _0: ra, _1: rb, _2: rc}; - if (_p5._0.ctor === 'Ok') { - if (_p5._1.ctor === 'Ok') { - if (_p5._2.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A3(func, _p5._0._0, _p5._1._0, _p5._2._0)); - } else { - return _elm_lang$core$Result$Err(_p5._2._0); - } - } else { - return _elm_lang$core$Result$Err(_p5._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p5._0._0); - } - }); -var _elm_lang$core$Result$map4 = F5( - function (func, ra, rb, rc, rd) { - var _p6 = {ctor: '_Tuple4', _0: ra, _1: rb, _2: rc, _3: rd}; - if (_p6._0.ctor === 'Ok') { - if (_p6._1.ctor === 'Ok') { - if (_p6._2.ctor === 'Ok') { - if (_p6._3.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A4(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0)); - } else { - return _elm_lang$core$Result$Err(_p6._3._0); - } - } else { - return _elm_lang$core$Result$Err(_p6._2._0); - } - } else { - return _elm_lang$core$Result$Err(_p6._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p6._0._0); - } - }); -var _elm_lang$core$Result$map5 = F6( - function (func, ra, rb, rc, rd, re) { - var _p7 = {ctor: '_Tuple5', _0: ra, _1: rb, _2: rc, _3: rd, _4: re}; - if (_p7._0.ctor === 'Ok') { - if (_p7._1.ctor === 'Ok') { - if (_p7._2.ctor === 'Ok') { - if (_p7._3.ctor === 'Ok') { - if (_p7._4.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A5(func, _p7._0._0, _p7._1._0, _p7._2._0, _p7._3._0, _p7._4._0)); - } else { - return _elm_lang$core$Result$Err(_p7._4._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._3._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._2._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._0._0); - } - }); -var _elm_lang$core$Result$formatError = F2( - function (f, result) { - var _p8 = result; - if (_p8.ctor === 'Ok') { - return _elm_lang$core$Result$Ok(_p8._0); - } else { - return _elm_lang$core$Result$Err( - f(_p8._0)); - } - }); -var _elm_lang$core$Result$fromMaybe = F2( - function (err, maybe) { - var _p9 = maybe; - if (_p9.ctor === 'Just') { - return _elm_lang$core$Result$Ok(_p9._0); - } else { - return _elm_lang$core$Result$Err(err); - } - }); - -//import // - -var _elm_lang$core$Native_Platform = function() { - - -// PROGRAMS - -function addPublicModule(object, name, main) -{ - var init = main ? makeEmbed(name, main) : mainIsUndefined(name); - - object['worker'] = function worker(flags) - { - return init(undefined, flags, false); - } - - object['embed'] = function embed(domNode, flags) - { - return init(domNode, flags, true); - } - - object['fullscreen'] = function fullscreen(flags) - { - return init(document.body, flags, true); - }; -} - - -// PROGRAM FAIL - -function mainIsUndefined(name) -{ - return function(domNode) - { - var message = 'Cannot initialize module `' + name + - '` because it has no `main` value!\nWhat should I show on screen?'; - domNode.innerHTML = errorHtml(message); - throw new Error(message); - }; -} - -function errorHtml(message) -{ - return '
' - + '

Oops! Something went wrong when starting your Elm program.

' - + '
' + message + '
' - + '
'; -} - - -// PROGRAM SUCCESS - -function makeEmbed(moduleName, main) -{ - return function embed(rootDomNode, flags, withRenderer) - { - try - { - var program = mainToProgram(moduleName, main); - if (!withRenderer) - { - program.renderer = dummyRenderer; - } - return makeEmbedHelp(moduleName, program, rootDomNode, flags); - } - catch (e) - { - rootDomNode.innerHTML = errorHtml(e.message); - throw e; - } - }; -} - -function dummyRenderer() -{ - return { update: function() {} }; -} - - -// MAIN TO PROGRAM - -function mainToProgram(moduleName, wrappedMain) -{ - var main = wrappedMain.main; - - if (typeof main.init === 'undefined') - { - var emptyBag = batch(_elm_lang$core$Native_List.Nil); - var noChange = _elm_lang$core$Native_Utils.Tuple2( - _elm_lang$core$Native_Utils.Tuple0, - emptyBag - ); - - return _elm_lang$virtual_dom$VirtualDom$programWithFlags({ - init: function() { return noChange; }, - view: function() { return main; }, - update: F2(function() { return noChange; }), - subscriptions: function () { return emptyBag; } - }); - } - - var flags = wrappedMain.flags; - var init = flags - ? initWithFlags(moduleName, main.init, flags) - : initWithoutFlags(moduleName, main.init); - - return _elm_lang$virtual_dom$VirtualDom$programWithFlags({ - init: init, - view: main.view, - update: main.update, - subscriptions: main.subscriptions, - }); -} - -function initWithoutFlags(moduleName, realInit) -{ - return function init(flags) - { - if (typeof flags !== 'undefined') - { - throw new Error( - 'You are giving module `' + moduleName + '` an argument in JavaScript.\n' - + 'This module does not take arguments though! You probably need to change the\n' - + 'initialization code to something like `Elm.' + moduleName + '.fullscreen()`' - ); - } - return realInit(); - }; -} - -function initWithFlags(moduleName, realInit, flagDecoder) -{ - return function init(flags) - { - var result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags); - if (result.ctor === 'Err') - { - throw new Error( - 'You are trying to initialize module `' + moduleName + '` with an unexpected argument.\n' - + 'When trying to convert it to a usable Elm value, I run into this problem:\n\n' - + result._0 - ); - } - return realInit(result._0); - }; -} - - -// SETUP RUNTIME SYSTEM - -function makeEmbedHelp(moduleName, program, rootDomNode, flags) -{ - var init = program.init; - var update = program.update; - var subscriptions = program.subscriptions; - var view = program.view; - var makeRenderer = program.renderer; - - // ambient state - var managers = {}; - var renderer; - - // init and update state in main process - var initApp = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - var results = init(flags); - var model = results._0; - renderer = makeRenderer(rootDomNode, enqueue, view(model)); - var cmds = results._1; - var subs = subscriptions(model); - dispatchEffects(managers, cmds, subs); - callback(_elm_lang$core$Native_Scheduler.succeed(model)); - }); - - function onMessage(msg, model) - { - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - var results = A2(update, msg, model); - model = results._0; - renderer.update(view(model)); - var cmds = results._1; - var subs = subscriptions(model); - dispatchEffects(managers, cmds, subs); - callback(_elm_lang$core$Native_Scheduler.succeed(model)); - }); - } - - var mainProcess = spawnLoop(initApp, onMessage); - - function enqueue(msg) - { - _elm_lang$core$Native_Scheduler.rawSend(mainProcess, msg); - } - - var ports = setupEffects(managers, enqueue); - - return ports ? { ports: ports } : {}; -} - - -// EFFECT MANAGERS - -var effectManagers = {}; - -function setupEffects(managers, callback) -{ - var ports; - - // setup all necessary effect managers - for (var key in effectManagers) - { - var manager = effectManagers[key]; - - if (manager.isForeign) - { - ports = ports || {}; - ports[key] = manager.tag === 'cmd' - ? setupOutgoingPort(key) - : setupIncomingPort(key, callback); - } - - managers[key] = makeManager(manager, callback); - } - - return ports; -} - -function makeManager(info, callback) -{ - var router = { - main: callback, - self: undefined - }; - - var tag = info.tag; - var onEffects = info.onEffects; - var onSelfMsg = info.onSelfMsg; - - function onMessage(msg, state) - { - if (msg.ctor === 'self') - { - return A3(onSelfMsg, router, msg._0, state); - } - - var fx = msg._0; - switch (tag) - { - case 'cmd': - return A3(onEffects, router, fx.cmds, state); - - case 'sub': - return A3(onEffects, router, fx.subs, state); - - case 'fx': - return A4(onEffects, router, fx.cmds, fx.subs, state); - } - } - - var process = spawnLoop(info.init, onMessage); - router.self = process; - return process; -} - -function sendToApp(router, msg) -{ - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) - { - router.main(msg); - callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0)); - }); -} - -function sendToSelf(router, msg) -{ - return A2(_elm_lang$core$Native_Scheduler.send, router.self, { - ctor: 'self', - _0: msg - }); -} - - -// HELPER for STATEFUL LOOPS - -function spawnLoop(init, onMessage) -{ - var andThen = _elm_lang$core$Native_Scheduler.andThen; - - function loop(state) - { - var handleMsg = _elm_lang$core$Native_Scheduler.receive(function(msg) { - return onMessage(msg, state); - }); - return A2(andThen, handleMsg, loop); - } - - var task = A2(andThen, init, loop); - - return _elm_lang$core$Native_Scheduler.rawSpawn(task); -} - - -// BAGS - -function leaf(home) -{ - return function(value) - { - return { - type: 'leaf', - home: home, - value: value - }; - }; -} - -function batch(list) -{ - return { - type: 'node', - branches: list - }; -} - -function map(tagger, bag) -{ - return { - type: 'map', - tagger: tagger, - tree: bag - } -} - - -// PIPE BAGS INTO EFFECT MANAGERS - -function dispatchEffects(managers, cmdBag, subBag) -{ - var effectsDict = {}; - gatherEffects(true, cmdBag, effectsDict, null); - gatherEffects(false, subBag, effectsDict, null); - - for (var home in managers) - { - var fx = home in effectsDict - ? effectsDict[home] - : { - cmds: _elm_lang$core$Native_List.Nil, - subs: _elm_lang$core$Native_List.Nil - }; - - _elm_lang$core$Native_Scheduler.rawSend(managers[home], { ctor: 'fx', _0: fx }); - } -} - -function gatherEffects(isCmd, bag, effectsDict, taggers) -{ - switch (bag.type) - { - case 'leaf': - var home = bag.home; - var effect = toEffect(isCmd, home, taggers, bag.value); - effectsDict[home] = insert(isCmd, effect, effectsDict[home]); - return; - - case 'node': - var list = bag.branches; - while (list.ctor !== '[]') - { - gatherEffects(isCmd, list._0, effectsDict, taggers); - list = list._1; - } - return; - - case 'map': - gatherEffects(isCmd, bag.tree, effectsDict, { - tagger: bag.tagger, - rest: taggers - }); - return; - } -} - -function toEffect(isCmd, home, taggers, value) -{ - function applyTaggers(x) - { - var temp = taggers; - while (temp) - { - x = temp.tagger(x); - temp = temp.rest; - } - return x; - } - - var map = isCmd - ? effectManagers[home].cmdMap - : effectManagers[home].subMap; - - return A2(map, applyTaggers, value) -} - -function insert(isCmd, newEffect, effects) -{ - effects = effects || { - cmds: _elm_lang$core$Native_List.Nil, - subs: _elm_lang$core$Native_List.Nil - }; - if (isCmd) - { - effects.cmds = _elm_lang$core$Native_List.Cons(newEffect, effects.cmds); - return effects; - } - effects.subs = _elm_lang$core$Native_List.Cons(newEffect, effects.subs); - return effects; -} - - -// PORTS - -function checkPortName(name) -{ - if (name in effectManagers) - { - throw new Error('There can only be one port named `' + name + '`, but your program has multiple.'); - } -} - - -// OUTGOING PORTS - -function outgoingPort(name, converter) -{ - checkPortName(name); - effectManagers[name] = { - tag: 'cmd', - cmdMap: outgoingPortMap, - converter: converter, - isForeign: true - }; - return leaf(name); -} - -var outgoingPortMap = F2(function cmdMap(tagger, value) { - return value; -}); - -function setupOutgoingPort(name) -{ - var subs = []; - var converter = effectManagers[name].converter; - - // CREATE MANAGER - - var init = _elm_lang$core$Native_Scheduler.succeed(null); - - function onEffects(router, cmdList, state) - { - while (cmdList.ctor !== '[]') - { - var value = converter(cmdList._0); - for (var i = 0; i < subs.length; i++) - { - subs[i](value); - } - cmdList = cmdList._1; - } - return init; - } - - effectManagers[name].init = init; - effectManagers[name].onEffects = F3(onEffects); - - // PUBLIC API - - function subscribe(callback) - { - subs.push(callback); - } - - function unsubscribe(callback) - { - var index = subs.indexOf(callback); - if (index >= 0) - { - subs.splice(index, 1); - } - } - - return { - subscribe: subscribe, - unsubscribe: unsubscribe - }; -} - - -// INCOMING PORTS - -function incomingPort(name, converter) -{ - checkPortName(name); - effectManagers[name] = { - tag: 'sub', - subMap: incomingPortMap, - converter: converter, - isForeign: true - }; - return leaf(name); -} - -var incomingPortMap = F2(function subMap(tagger, finalTagger) -{ - return function(value) - { - return tagger(finalTagger(value)); - }; -}); - -function setupIncomingPort(name, callback) -{ - var sentBeforeInit = []; - var subs = _elm_lang$core$Native_List.Nil; - var converter = effectManagers[name].converter; - var currentOnEffects = preInitOnEffects; - var currentSend = preInitSend; - - // CREATE MANAGER - - var init = _elm_lang$core$Native_Scheduler.succeed(null); - - function preInitOnEffects(router, subList, state) - { - var postInitResult = postInitOnEffects(router, subList, state); - - for(var i = 0; i < sentBeforeInit.length; i++) - { - postInitSend(sentBeforeInit[i]); - } - - sentBeforeInit = null; // to release objects held in queue - currentSend = postInitSend; - currentOnEffects = postInitOnEffects; - return postInitResult; - } - - function postInitOnEffects(router, subList, state) - { - subs = subList; - return init; - } - - function onEffects(router, subList, state) - { - return currentOnEffects(router, subList, state); - } - - effectManagers[name].init = init; - effectManagers[name].onEffects = F3(onEffects); - - // PUBLIC API - - function preInitSend(value) - { - sentBeforeInit.push(value); - } - - function postInitSend(incomingValue) - { - var result = A2(_elm_lang$core$Json_Decode$decodeValue, converter, incomingValue); - if (result.ctor === 'Err') - { - throw new Error('Trying to send an unexpected type of value through port `' + name + '`:\n' + result._0); - } - - var value = result._0; - var temp = subs; - while (temp.ctor !== '[]') - { - callback(temp._0(value)); - temp = temp._1; - } - } - - function send(incomingValue) - { - currentSend(incomingValue); - } - - return { send: send }; -} - -return { - // routers - sendToApp: F2(sendToApp), - sendToSelf: F2(sendToSelf), - - // global setup - mainToProgram: mainToProgram, - effectManagers: effectManagers, - outgoingPort: outgoingPort, - incomingPort: incomingPort, - addPublicModule: addPublicModule, - - // effect bags - leaf: leaf, - batch: batch, - map: F2(map) -}; - -}(); - -//import Native.Utils // - -var _elm_lang$core$Native_Scheduler = function() { - -var MAX_STEPS = 10000; - - -// TASKS - -function succeed(value) -{ - return { - ctor: '_Task_succeed', - value: value - }; -} - -function fail(error) -{ - return { - ctor: '_Task_fail', - value: error - }; -} - -function nativeBinding(callback) -{ - return { - ctor: '_Task_nativeBinding', - callback: callback, - cancel: null - }; -} - -function andThen(task, callback) -{ - return { - ctor: '_Task_andThen', - task: task, - callback: callback - }; -} - -function onError(task, callback) -{ - return { - ctor: '_Task_onError', - task: task, - callback: callback - }; -} - -function receive(callback) -{ - return { - ctor: '_Task_receive', - callback: callback - }; -} - - -// PROCESSES - -function rawSpawn(task) -{ - var process = { - ctor: '_Process', - id: _elm_lang$core$Native_Utils.guid(), - root: task, - stack: null, - mailbox: [] - }; - - enqueue(process); - - return process; -} - -function spawn(task) -{ - return nativeBinding(function(callback) { - var process = rawSpawn(task); - callback(succeed(process)); - }); -} - -function rawSend(process, msg) -{ - process.mailbox.push(msg); - enqueue(process); -} - -function send(process, msg) -{ - return nativeBinding(function(callback) { - rawSend(process, msg); - callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); - }); -} - -function kill(process) -{ - return nativeBinding(function(callback) { - var root = process.root; - if (root.ctor === '_Task_nativeBinding' && root.cancel) - { - root.cancel(); - } - - process.root = null; - - callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); - }); -} - -function sleep(time) -{ - return nativeBinding(function(callback) { - var id = setTimeout(function() { - callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); - }, time); - - return function() { clearTimeout(id); }; - }); -} - - -// STEP PROCESSES - -function step(numSteps, process) -{ - while (numSteps < MAX_STEPS) - { - var ctor = process.root.ctor; - - if (ctor === '_Task_succeed') - { - while (process.stack && process.stack.ctor === '_Task_onError') - { - process.stack = process.stack.rest; - } - if (process.stack === null) - { - break; - } - process.root = process.stack.callback(process.root.value); - process.stack = process.stack.rest; - ++numSteps; - continue; - } - - if (ctor === '_Task_fail') - { - while (process.stack && process.stack.ctor === '_Task_andThen') - { - process.stack = process.stack.rest; - } - if (process.stack === null) - { - break; - } - process.root = process.stack.callback(process.root.value); - process.stack = process.stack.rest; - ++numSteps; - continue; - } - - if (ctor === '_Task_andThen') - { - process.stack = { - ctor: '_Task_andThen', - callback: process.root.callback, - rest: process.stack - }; - process.root = process.root.task; - ++numSteps; - continue; - } - - if (ctor === '_Task_onError') - { - process.stack = { - ctor: '_Task_onError', - callback: process.root.callback, - rest: process.stack - }; - process.root = process.root.task; - ++numSteps; - continue; - } - - if (ctor === '_Task_nativeBinding') - { - process.root.cancel = process.root.callback(function(newRoot) { - process.root = newRoot; - enqueue(process); - }); - - break; - } - - if (ctor === '_Task_receive') - { - var mailbox = process.mailbox; - if (mailbox.length === 0) - { - break; - } - - process.root = process.root.callback(mailbox.shift()); - ++numSteps; - continue; - } - - throw new Error(ctor); - } - - if (numSteps < MAX_STEPS) - { - return numSteps + 1; - } - enqueue(process); - - return numSteps; -} - - -// WORK QUEUE - -var working = false; -var workQueue = []; - -function enqueue(process) -{ - workQueue.push(process); - - if (!working) - { - setTimeout(work, 0); - working = true; - } -} - -function work() -{ - var numSteps = 0; - var process; - while (numSteps < MAX_STEPS && (process = workQueue.shift())) - { - if (process.root) - { - numSteps = step(numSteps, process); - } - } - if (!process) - { - working = false; - return; - } - setTimeout(work, 0); -} - - -return { - succeed: succeed, - fail: fail, - nativeBinding: nativeBinding, - andThen: F2(andThen), - onError: F2(onError), - receive: receive, - - spawn: spawn, - kill: kill, - sleep: sleep, - send: F2(send), - - rawSpawn: rawSpawn, - rawSend: rawSend -}; - -}(); -var _elm_lang$core$Platform$hack = _elm_lang$core$Native_Scheduler.succeed; -var _elm_lang$core$Platform$sendToSelf = _elm_lang$core$Native_Platform.sendToSelf; -var _elm_lang$core$Platform$sendToApp = _elm_lang$core$Native_Platform.sendToApp; -var _elm_lang$core$Platform$Program = {ctor: 'Program'}; -var _elm_lang$core$Platform$Task = {ctor: 'Task'}; -var _elm_lang$core$Platform$ProcessId = {ctor: 'ProcessId'}; -var _elm_lang$core$Platform$Router = {ctor: 'Router'}; - -var _elm_lang$core$Platform_Cmd$batch = _elm_lang$core$Native_Platform.batch; -var _elm_lang$core$Platform_Cmd$none = _elm_lang$core$Platform_Cmd$batch( - _elm_lang$core$Native_List.fromArray( - [])); -var _elm_lang$core$Platform_Cmd_ops = _elm_lang$core$Platform_Cmd_ops || {}; -_elm_lang$core$Platform_Cmd_ops['!'] = F2( - function (model, commands) { - return { - ctor: '_Tuple2', - _0: model, - _1: _elm_lang$core$Platform_Cmd$batch(commands) - }; - }); -var _elm_lang$core$Platform_Cmd$map = _elm_lang$core$Native_Platform.map; -var _elm_lang$core$Platform_Cmd$Cmd = {ctor: 'Cmd'}; - -var _elm_lang$core$Platform_Sub$batch = _elm_lang$core$Native_Platform.batch; -var _elm_lang$core$Platform_Sub$none = _elm_lang$core$Platform_Sub$batch( - _elm_lang$core$Native_List.fromArray( - [])); -var _elm_lang$core$Platform_Sub$map = _elm_lang$core$Native_Platform.map; -var _elm_lang$core$Platform_Sub$Sub = {ctor: 'Sub'}; - -var _elm_lang$animation_frame$Native_AnimationFrame = function() -{ - -var hasStartTime = - window.performance && - window.performance.timing && - window.performance.timing.navigationStart; - -var navStart = hasStartTime - ? window.performance.timing.navigationStart - : Date.now(); - -var rAF = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) -{ - var id = requestAnimationFrame(function(time) { - var timeNow = time - ? (time > navStart ? time : time + navStart) - : Date.now(); - - callback(_elm_lang$core$Native_Scheduler.succeed(timeNow)); - }); - - return function() { - cancelAnimationFrame(id); - }; -}); - -return { - rAF: rAF -}; - -}(); - -var _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError; -var _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen; -var _elm_lang$core$Task$spawnCmd = F2( - function (router, _p0) { - var _p1 = _p0; - return _elm_lang$core$Native_Scheduler.spawn( - A2( - _elm_lang$core$Task$andThen, - _p1._0, - _elm_lang$core$Platform$sendToApp(router))); - }); -var _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail; -var _elm_lang$core$Task$mapError = F2( - function (f, task) { - return A2( - _elm_lang$core$Task$onError, - task, - function (err) { - return _elm_lang$core$Task$fail( - f(err)); - }); - }); -var _elm_lang$core$Task$succeed = _elm_lang$core$Native_Scheduler.succeed; -var _elm_lang$core$Task$map = F2( - function (func, taskA) { - return A2( - _elm_lang$core$Task$andThen, - taskA, - function (a) { - return _elm_lang$core$Task$succeed( - func(a)); - }); - }); -var _elm_lang$core$Task$map2 = F3( - function (func, taskA, taskB) { - return A2( - _elm_lang$core$Task$andThen, - taskA, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - taskB, - function (b) { - return _elm_lang$core$Task$succeed( - A2(func, a, b)); - }); - }); - }); -var _elm_lang$core$Task$map3 = F4( - function (func, taskA, taskB, taskC) { - return A2( - _elm_lang$core$Task$andThen, - taskA, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - taskB, - function (b) { - return A2( - _elm_lang$core$Task$andThen, - taskC, - function (c) { - return _elm_lang$core$Task$succeed( - A3(func, a, b, c)); - }); - }); - }); - }); -var _elm_lang$core$Task$map4 = F5( - function (func, taskA, taskB, taskC, taskD) { - return A2( - _elm_lang$core$Task$andThen, - taskA, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - taskB, - function (b) { - return A2( - _elm_lang$core$Task$andThen, - taskC, - function (c) { - return A2( - _elm_lang$core$Task$andThen, - taskD, - function (d) { - return _elm_lang$core$Task$succeed( - A4(func, a, b, c, d)); - }); - }); - }); - }); - }); -var _elm_lang$core$Task$map5 = F6( - function (func, taskA, taskB, taskC, taskD, taskE) { - return A2( - _elm_lang$core$Task$andThen, - taskA, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - taskB, - function (b) { - return A2( - _elm_lang$core$Task$andThen, - taskC, - function (c) { - return A2( - _elm_lang$core$Task$andThen, - taskD, - function (d) { - return A2( - _elm_lang$core$Task$andThen, - taskE, - function (e) { - return _elm_lang$core$Task$succeed( - A5(func, a, b, c, d, e)); - }); - }); - }); - }); - }); - }); -var _elm_lang$core$Task$andMap = F2( - function (taskFunc, taskValue) { - return A2( - _elm_lang$core$Task$andThen, - taskFunc, - function (func) { - return A2( - _elm_lang$core$Task$andThen, - taskValue, - function (value) { - return _elm_lang$core$Task$succeed( - func(value)); - }); - }); - }); -var _elm_lang$core$Task$sequence = function (tasks) { - var _p2 = tasks; - if (_p2.ctor === '[]') { - return _elm_lang$core$Task$succeed( - _elm_lang$core$Native_List.fromArray( - [])); - } else { - return A3( - _elm_lang$core$Task$map2, - F2( - function (x, y) { - return A2(_elm_lang$core$List_ops['::'], x, y); - }), - _p2._0, - _elm_lang$core$Task$sequence(_p2._1)); - } -}; -var _elm_lang$core$Task$onEffects = F3( - function (router, commands, state) { - return A2( - _elm_lang$core$Task$map, - function (_p3) { - return {ctor: '_Tuple0'}; - }, - _elm_lang$core$Task$sequence( - A2( - _elm_lang$core$List$map, - _elm_lang$core$Task$spawnCmd(router), - commands))); - }); -var _elm_lang$core$Task$toMaybe = function (task) { - return A2( - _elm_lang$core$Task$onError, - A2(_elm_lang$core$Task$map, _elm_lang$core$Maybe$Just, task), - function (_p4) { - return _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing); - }); -}; -var _elm_lang$core$Task$fromMaybe = F2( - function ($default, maybe) { - var _p5 = maybe; - if (_p5.ctor === 'Just') { - return _elm_lang$core$Task$succeed(_p5._0); - } else { - return _elm_lang$core$Task$fail($default); - } - }); -var _elm_lang$core$Task$toResult = function (task) { - return A2( - _elm_lang$core$Task$onError, - A2(_elm_lang$core$Task$map, _elm_lang$core$Result$Ok, task), - function (msg) { - return _elm_lang$core$Task$succeed( - _elm_lang$core$Result$Err(msg)); - }); -}; -var _elm_lang$core$Task$fromResult = function (result) { - var _p6 = result; - if (_p6.ctor === 'Ok') { - return _elm_lang$core$Task$succeed(_p6._0); - } else { - return _elm_lang$core$Task$fail(_p6._0); - } -}; -var _elm_lang$core$Task$init = _elm_lang$core$Task$succeed( - {ctor: '_Tuple0'}); -var _elm_lang$core$Task$onSelfMsg = F3( - function (_p9, _p8, _p7) { - return _elm_lang$core$Task$succeed( - {ctor: '_Tuple0'}); - }); -var _elm_lang$core$Task$command = _elm_lang$core$Native_Platform.leaf('Task'); -var _elm_lang$core$Task$T = function (a) { - return {ctor: 'T', _0: a}; -}; -var _elm_lang$core$Task$perform = F3( - function (onFail, onSuccess, task) { - return _elm_lang$core$Task$command( - _elm_lang$core$Task$T( - A2( - _elm_lang$core$Task$onError, - A2(_elm_lang$core$Task$map, onSuccess, task), - function (x) { - return _elm_lang$core$Task$succeed( - onFail(x)); - }))); - }); -var _elm_lang$core$Task$cmdMap = F2( - function (tagger, _p10) { - var _p11 = _p10; - return _elm_lang$core$Task$T( - A2(_elm_lang$core$Task$map, tagger, _p11._0)); - }); -_elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap}; - -//import Maybe, Native.List, Native.Utils, Result // - -var _elm_lang$core$Native_String = function() { - -function isEmpty(str) -{ - return str.length === 0; -} -function cons(chr, str) -{ - return chr + str; -} -function uncons(str) -{ - var hd = str[0]; - if (hd) - { - return _elm_lang$core$Maybe$Just(_elm_lang$core$Native_Utils.Tuple2(_elm_lang$core$Native_Utils.chr(hd), str.slice(1))); - } - return _elm_lang$core$Maybe$Nothing; -} -function append(a, b) -{ - return a + b; -} -function concat(strs) -{ - return _elm_lang$core$Native_List.toArray(strs).join(''); -} -function length(str) -{ - return str.length; -} -function map(f, str) -{ - var out = str.split(''); - for (var i = out.length; i--; ) - { - out[i] = f(_elm_lang$core$Native_Utils.chr(out[i])); - } - return out.join(''); -} -function filter(pred, str) -{ - return str.split('').map(_elm_lang$core$Native_Utils.chr).filter(pred).join(''); -} -function reverse(str) -{ - return str.split('').reverse().join(''); -} -function foldl(f, b, str) -{ - var len = str.length; - for (var i = 0; i < len; ++i) - { - b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b); - } - return b; -} -function foldr(f, b, str) -{ - for (var i = str.length; i--; ) - { - b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b); - } - return b; -} -function split(sep, str) -{ - return _elm_lang$core$Native_List.fromArray(str.split(sep)); -} -function join(sep, strs) -{ - return _elm_lang$core$Native_List.toArray(strs).join(sep); -} -function repeat(n, str) -{ - var result = ''; - while (n > 0) - { - if (n & 1) - { - result += str; - } - n >>= 1, str += str; - } - return result; -} -function slice(start, end, str) -{ - return str.slice(start, end); -} -function left(n, str) -{ - return n < 1 ? '' : str.slice(0, n); -} -function right(n, str) -{ - return n < 1 ? '' : str.slice(-n); -} -function dropLeft(n, str) -{ - return n < 1 ? str : str.slice(n); -} -function dropRight(n, str) -{ - return n < 1 ? str : str.slice(0, -n); -} -function pad(n, chr, str) -{ - var half = (n - str.length) / 2; - return repeat(Math.ceil(half), chr) + str + repeat(half | 0, chr); -} -function padRight(n, chr, str) -{ - return str + repeat(n - str.length, chr); -} -function padLeft(n, chr, str) -{ - return repeat(n - str.length, chr) + str; -} - -function trim(str) -{ - return str.trim(); -} -function trimLeft(str) -{ - return str.replace(/^\s+/, ''); -} -function trimRight(str) -{ - return str.replace(/\s+$/, ''); -} - -function words(str) -{ - return _elm_lang$core$Native_List.fromArray(str.trim().split(/\s+/g)); -} -function lines(str) -{ - return _elm_lang$core$Native_List.fromArray(str.split(/\r\n|\r|\n/g)); -} - -function toUpper(str) -{ - return str.toUpperCase(); -} -function toLower(str) -{ - return str.toLowerCase(); -} - -function any(pred, str) -{ - for (var i = str.length; i--; ) - { - if (pred(_elm_lang$core$Native_Utils.chr(str[i]))) - { - return true; - } - } - return false; -} -function all(pred, str) -{ - for (var i = str.length; i--; ) - { - if (!pred(_elm_lang$core$Native_Utils.chr(str[i]))) - { - return false; - } - } - return true; -} - -function contains(sub, str) -{ - return str.indexOf(sub) > -1; -} -function startsWith(sub, str) -{ - return str.indexOf(sub) === 0; -} -function endsWith(sub, str) -{ - return str.length >= sub.length && - str.lastIndexOf(sub) === str.length - sub.length; -} -function indexes(sub, str) -{ - var subLen = sub.length; - - if (subLen < 1) - { - return _elm_lang$core$Native_List.Nil; - } - - var i = 0; - var is = []; - - while ((i = str.indexOf(sub, i)) > -1) - { - is.push(i); - i = i + subLen; - } - - return _elm_lang$core$Native_List.fromArray(is); -} - -function toInt(s) -{ - var len = s.length; - if (len === 0) - { - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int" ); - } - var start = 0; - if (s[0] === '-') - { - if (len === 1) - { - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int" ); - } - start = 1; - } - for (var i = start; i < len; ++i) - { - var c = s[i]; - if (c < '0' || '9' < c) - { - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int" ); - } - } - return _elm_lang$core$Result$Ok(parseInt(s, 10)); -} - -function toFloat(s) -{ - var len = s.length; - if (len === 0) - { - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float" ); - } - var start = 0; - if (s[0] === '-') - { - if (len === 1) - { - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float" ); - } - start = 1; - } - var dotCount = 0; - for (var i = start; i < len; ++i) - { - var c = s[i]; - if ('0' <= c && c <= '9') - { - continue; - } - if (c === '.') - { - dotCount += 1; - if (dotCount <= 1) - { - continue; - } - } - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float" ); - } - return _elm_lang$core$Result$Ok(parseFloat(s)); -} - -function toList(str) -{ - return _elm_lang$core$Native_List.fromArray(str.split('').map(_elm_lang$core$Native_Utils.chr)); -} -function fromList(chars) -{ - return _elm_lang$core$Native_List.toArray(chars).join(''); -} - -return { - isEmpty: isEmpty, - cons: F2(cons), - uncons: uncons, - append: F2(append), - concat: concat, - length: length, - map: F2(map), - filter: F2(filter), - reverse: reverse, - foldl: F3(foldl), - foldr: F3(foldr), - - split: F2(split), - join: F2(join), - repeat: F2(repeat), - - slice: F3(slice), - left: F2(left), - right: F2(right), - dropLeft: F2(dropLeft), - dropRight: F2(dropRight), - - pad: F3(pad), - padLeft: F3(padLeft), - padRight: F3(padRight), - - trim: trim, - trimLeft: trimLeft, - trimRight: trimRight, - - words: words, - lines: lines, - - toUpper: toUpper, - toLower: toLower, - - any: F2(any), - all: F2(all), - - contains: F2(contains), - startsWith: F2(startsWith), - endsWith: F2(endsWith), - indexes: F2(indexes), - - toInt: toInt, - toFloat: toFloat, - toList: toList, - fromList: fromList -}; - -}(); - -//import Native.Utils // - -var _elm_lang$core$Native_Char = function() { - -return { - fromCode: function(c) { return _elm_lang$core$Native_Utils.chr(String.fromCharCode(c)); }, - toCode: function(c) { return c.charCodeAt(0); }, - toUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toUpperCase()); }, - toLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLowerCase()); }, - toLocaleUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleUpperCase()); }, - toLocaleLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleLowerCase()); } -}; - -}(); -var _elm_lang$core$Char$fromCode = _elm_lang$core$Native_Char.fromCode; -var _elm_lang$core$Char$toCode = _elm_lang$core$Native_Char.toCode; -var _elm_lang$core$Char$toLocaleLower = _elm_lang$core$Native_Char.toLocaleLower; -var _elm_lang$core$Char$toLocaleUpper = _elm_lang$core$Native_Char.toLocaleUpper; -var _elm_lang$core$Char$toLower = _elm_lang$core$Native_Char.toLower; -var _elm_lang$core$Char$toUpper = _elm_lang$core$Native_Char.toUpper; -var _elm_lang$core$Char$isBetween = F3( - function (low, high, $char) { - var code = _elm_lang$core$Char$toCode($char); - return (_elm_lang$core$Native_Utils.cmp( - code, - _elm_lang$core$Char$toCode(low)) > -1) && (_elm_lang$core$Native_Utils.cmp( - code, - _elm_lang$core$Char$toCode(high)) < 1); - }); -var _elm_lang$core$Char$isUpper = A2( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('A'), - _elm_lang$core$Native_Utils.chr('Z')); -var _elm_lang$core$Char$isLower = A2( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('a'), - _elm_lang$core$Native_Utils.chr('z')); -var _elm_lang$core$Char$isDigit = A2( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('0'), - _elm_lang$core$Native_Utils.chr('9')); -var _elm_lang$core$Char$isOctDigit = A2( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('0'), - _elm_lang$core$Native_Utils.chr('7')); -var _elm_lang$core$Char$isHexDigit = function ($char) { - return _elm_lang$core$Char$isDigit($char) || (A3( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('a'), - _elm_lang$core$Native_Utils.chr('f'), - $char) || A3( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('A'), - _elm_lang$core$Native_Utils.chr('F'), - $char)); -}; - -var _elm_lang$core$String$fromList = _elm_lang$core$Native_String.fromList; -var _elm_lang$core$String$toList = _elm_lang$core$Native_String.toList; -var _elm_lang$core$String$toFloat = _elm_lang$core$Native_String.toFloat; -var _elm_lang$core$String$toInt = _elm_lang$core$Native_String.toInt; -var _elm_lang$core$String$indices = _elm_lang$core$Native_String.indexes; -var _elm_lang$core$String$indexes = _elm_lang$core$Native_String.indexes; -var _elm_lang$core$String$endsWith = _elm_lang$core$Native_String.endsWith; -var _elm_lang$core$String$startsWith = _elm_lang$core$Native_String.startsWith; -var _elm_lang$core$String$contains = _elm_lang$core$Native_String.contains; -var _elm_lang$core$String$all = _elm_lang$core$Native_String.all; -var _elm_lang$core$String$any = _elm_lang$core$Native_String.any; -var _elm_lang$core$String$toLower = _elm_lang$core$Native_String.toLower; -var _elm_lang$core$String$toUpper = _elm_lang$core$Native_String.toUpper; -var _elm_lang$core$String$lines = _elm_lang$core$Native_String.lines; -var _elm_lang$core$String$words = _elm_lang$core$Native_String.words; -var _elm_lang$core$String$trimRight = _elm_lang$core$Native_String.trimRight; -var _elm_lang$core$String$trimLeft = _elm_lang$core$Native_String.trimLeft; -var _elm_lang$core$String$trim = _elm_lang$core$Native_String.trim; -var _elm_lang$core$String$padRight = _elm_lang$core$Native_String.padRight; -var _elm_lang$core$String$padLeft = _elm_lang$core$Native_String.padLeft; -var _elm_lang$core$String$pad = _elm_lang$core$Native_String.pad; -var _elm_lang$core$String$dropRight = _elm_lang$core$Native_String.dropRight; -var _elm_lang$core$String$dropLeft = _elm_lang$core$Native_String.dropLeft; -var _elm_lang$core$String$right = _elm_lang$core$Native_String.right; -var _elm_lang$core$String$left = _elm_lang$core$Native_String.left; -var _elm_lang$core$String$slice = _elm_lang$core$Native_String.slice; -var _elm_lang$core$String$repeat = _elm_lang$core$Native_String.repeat; -var _elm_lang$core$String$join = _elm_lang$core$Native_String.join; -var _elm_lang$core$String$split = _elm_lang$core$Native_String.split; -var _elm_lang$core$String$foldr = _elm_lang$core$Native_String.foldr; -var _elm_lang$core$String$foldl = _elm_lang$core$Native_String.foldl; -var _elm_lang$core$String$reverse = _elm_lang$core$Native_String.reverse; -var _elm_lang$core$String$filter = _elm_lang$core$Native_String.filter; -var _elm_lang$core$String$map = _elm_lang$core$Native_String.map; -var _elm_lang$core$String$length = _elm_lang$core$Native_String.length; -var _elm_lang$core$String$concat = _elm_lang$core$Native_String.concat; -var _elm_lang$core$String$append = _elm_lang$core$Native_String.append; -var _elm_lang$core$String$uncons = _elm_lang$core$Native_String.uncons; -var _elm_lang$core$String$cons = _elm_lang$core$Native_String.cons; -var _elm_lang$core$String$fromChar = function ($char) { - return A2(_elm_lang$core$String$cons, $char, ''); -}; -var _elm_lang$core$String$isEmpty = _elm_lang$core$Native_String.isEmpty; - -var _elm_lang$core$Dict$foldr = F3( - function (f, acc, t) { - foldr: - while (true) { - var _p0 = t; - if (_p0.ctor === 'RBEmpty_elm_builtin') { - return acc; - } else { - var _v1 = f, - _v2 = A3( - f, - _p0._1, - _p0._2, - A3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)), - _v3 = _p0._3; - f = _v1; - acc = _v2; - t = _v3; - continue foldr; - } - } - }); -var _elm_lang$core$Dict$keys = function (dict) { - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (key, value, keyList) { - return A2(_elm_lang$core$List_ops['::'], key, keyList); - }), - _elm_lang$core$Native_List.fromArray( - []), - dict); -}; -var _elm_lang$core$Dict$values = function (dict) { - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (key, value, valueList) { - return A2(_elm_lang$core$List_ops['::'], value, valueList); - }), - _elm_lang$core$Native_List.fromArray( - []), - dict); -}; -var _elm_lang$core$Dict$toList = function (dict) { - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (key, value, list) { - return A2( - _elm_lang$core$List_ops['::'], - {ctor: '_Tuple2', _0: key, _1: value}, - list); - }), - _elm_lang$core$Native_List.fromArray( - []), - dict); -}; -var _elm_lang$core$Dict$foldl = F3( - function (f, acc, dict) { - foldl: - while (true) { - var _p1 = dict; - if (_p1.ctor === 'RBEmpty_elm_builtin') { - return acc; - } else { - var _v5 = f, - _v6 = A3( - f, - _p1._1, - _p1._2, - A3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)), - _v7 = _p1._4; - f = _v5; - acc = _v6; - dict = _v7; - continue foldl; - } - } - }); -var _elm_lang$core$Dict$merge = F6( - function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) { - var stepState = F3( - function (rKey, rValue, _p2) { - stepState: - while (true) { - var _p3 = _p2; - var _p9 = _p3._1; - var _p8 = _p3._0; - var _p4 = _p8; - if (_p4.ctor === '[]') { - return { - ctor: '_Tuple2', - _0: _p8, - _1: A3(rightStep, rKey, rValue, _p9) - }; - } else { - var _p7 = _p4._1; - var _p6 = _p4._0._1; - var _p5 = _p4._0._0; - if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) { - var _v10 = rKey, - _v11 = rValue, - _v12 = { - ctor: '_Tuple2', - _0: _p7, - _1: A3(leftStep, _p5, _p6, _p9) - }; - rKey = _v10; - rValue = _v11; - _p2 = _v12; - continue stepState; - } else { - if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) { - return { - ctor: '_Tuple2', - _0: _p8, - _1: A3(rightStep, rKey, rValue, _p9) - }; - } else { - return { - ctor: '_Tuple2', - _0: _p7, - _1: A4(bothStep, _p5, _p6, rValue, _p9) - }; - } - } - } - } - }); - var _p10 = A3( - _elm_lang$core$Dict$foldl, - stepState, - { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$toList(leftDict), - _1: initialResult - }, - rightDict); - var leftovers = _p10._0; - var intermediateResult = _p10._1; - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p11, result) { - var _p12 = _p11; - return A3(leftStep, _p12._0, _p12._1, result); - }), - intermediateResult, - leftovers); - }); -var _elm_lang$core$Dict$reportRemBug = F4( - function (msg, c, lgot, rgot) { - return _elm_lang$core$Native_Debug.crash( - _elm_lang$core$String$concat( - _elm_lang$core$Native_List.fromArray( - [ - 'Internal red-black tree invariant violated, expected ', - msg, - ' and got ', - _elm_lang$core$Basics$toString(c), - '/', - lgot, - '/', - rgot, - '\nPlease report this bug to ' - ]))); - }); -var _elm_lang$core$Dict$isBBlack = function (dict) { - var _p13 = dict; - _v14_2: - do { - if (_p13.ctor === 'RBNode_elm_builtin') { - if (_p13._0.ctor === 'BBlack') { - return true; - } else { - break _v14_2; - } - } else { - if (_p13._0.ctor === 'LBBlack') { - return true; - } else { - break _v14_2; - } - } - } while(false); - return false; -}; -var _elm_lang$core$Dict$sizeHelp = F2( - function (n, dict) { - sizeHelp: - while (true) { - var _p14 = dict; - if (_p14.ctor === 'RBEmpty_elm_builtin') { - return n; - } else { - var _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4), - _v17 = _p14._3; - n = _v16; - dict = _v17; - continue sizeHelp; - } - } - }); -var _elm_lang$core$Dict$size = function (dict) { - return A2(_elm_lang$core$Dict$sizeHelp, 0, dict); -}; -var _elm_lang$core$Dict$get = F2( - function (targetKey, dict) { - get: - while (true) { - var _p15 = dict; - if (_p15.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Maybe$Nothing; - } else { - var _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1); - switch (_p16.ctor) { - case 'LT': - var _v20 = targetKey, - _v21 = _p15._3; - targetKey = _v20; - dict = _v21; - continue get; - case 'EQ': - return _elm_lang$core$Maybe$Just(_p15._2); - default: - var _v22 = targetKey, - _v23 = _p15._4; - targetKey = _v22; - dict = _v23; - continue get; - } - } - } - }); -var _elm_lang$core$Dict$member = F2( - function (key, dict) { - var _p17 = A2(_elm_lang$core$Dict$get, key, dict); - if (_p17.ctor === 'Just') { - return true; - } else { - return false; - } - }); -var _elm_lang$core$Dict$maxWithDefault = F3( - function (k, v, r) { - maxWithDefault: - while (true) { - var _p18 = r; - if (_p18.ctor === 'RBEmpty_elm_builtin') { - return {ctor: '_Tuple2', _0: k, _1: v}; - } else { - var _v26 = _p18._1, - _v27 = _p18._2, - _v28 = _p18._4; - k = _v26; - v = _v27; - r = _v28; - continue maxWithDefault; - } - } - }); -var _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'}; -var _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'}; -var _elm_lang$core$Dict$Black = {ctor: 'Black'}; -var _elm_lang$core$Dict$blackish = function (t) { - var _p19 = t; - if (_p19.ctor === 'RBNode_elm_builtin') { - var _p20 = _p19._0; - return _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack); - } else { - return true; - } -}; -var _elm_lang$core$Dict$Red = {ctor: 'Red'}; -var _elm_lang$core$Dict$moreBlack = function (color) { - var _p21 = color; - switch (_p21.ctor) { - case 'Black': - return _elm_lang$core$Dict$BBlack; - case 'Red': - return _elm_lang$core$Dict$Black; - case 'NBlack': - return _elm_lang$core$Dict$Red; - default: - return _elm_lang$core$Native_Debug.crash('Can\'t make a double black node more black!'); - } -}; -var _elm_lang$core$Dict$lessBlack = function (color) { - var _p22 = color; - switch (_p22.ctor) { - case 'BBlack': - return _elm_lang$core$Dict$Black; - case 'Black': - return _elm_lang$core$Dict$Red; - case 'Red': - return _elm_lang$core$Dict$NBlack; - default: - return _elm_lang$core$Native_Debug.crash('Can\'t make a negative black node less black!'); - } -}; -var _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'}; -var _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'}; -var _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) { - return {ctor: 'RBEmpty_elm_builtin', _0: a}; -}; -var _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); -var _elm_lang$core$Dict$isEmpty = function (dict) { - return _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty); -}; -var _elm_lang$core$Dict$RBNode_elm_builtin = F5( - function (a, b, c, d, e) { - return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e}; - }); -var _elm_lang$core$Dict$ensureBlackRoot = function (dict) { - var _p23 = dict; - if ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4); - } else { - return dict; - } -}; -var _elm_lang$core$Dict$lessBlackTree = function (dict) { - var _p24 = dict; - if (_p24.ctor === 'RBNode_elm_builtin') { - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$lessBlack(_p24._0), - _p24._1, - _p24._2, - _p24._3, - _p24._4); - } else { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - } -}; -var _elm_lang$core$Dict$balancedTree = function (col) { - return function (xk) { - return function (xv) { - return function (yk) { - return function (yv) { - return function (zk) { - return function (zv) { - return function (a) { - return function (b) { - return function (c) { - return function (d) { - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$lessBlack(col), - yk, - yv, - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b), - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d)); - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; -}; -var _elm_lang$core$Dict$blacken = function (t) { - var _p25 = t; - if (_p25.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - } else { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4); - } -}; -var _elm_lang$core$Dict$redden = function (t) { - var _p26 = t; - if (_p26.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Native_Debug.crash('can\'t make a Leaf red'); - } else { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4); - } -}; -var _elm_lang$core$Dict$balanceHelp = function (tree) { - var _p27 = tree; - _v36_6: - do { - _v36_5: - do { - _v36_4: - do { - _v36_3: - do { - _v36_2: - do { - _v36_1: - do { - _v36_0: - do { - if (_p27.ctor === 'RBNode_elm_builtin') { - if (_p27._3.ctor === 'RBNode_elm_builtin') { - if (_p27._4.ctor === 'RBNode_elm_builtin') { - switch (_p27._3._0.ctor) { - case 'Red': - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - break _v36_6; - } - } - } - } - case 'NBlack': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - } - } - default: - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - break _v36_6; - } - } - } - case 'NBlack': - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - } - case 'NBlack': - if (_p27._0.ctor === 'BBlack') { - if ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - if ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - } else { - break _v36_6; - } - default: - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - default: - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - break _v36_6; - } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } - } else { - switch (_p27._3._0.ctor) { - case 'Red': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - break _v36_6; - } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } - } else { - if (_p27._4.ctor === 'RBNode_elm_builtin') { - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - break _v36_6; - } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } else { - break _v36_6; - } - } - } else { - break _v36_6; - } - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4); - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4); - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4); - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4); - } while(false); - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$Black, - _p27._4._3._1, - _p27._4._3._2, - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3), - A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$Black, - _p27._4._1, - _p27._4._2, - _p27._4._3._4, - _elm_lang$core$Dict$redden(_p27._4._4))); - } while(false); - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$Black, - _p27._3._4._1, - _p27._3._4._2, - A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$Black, - _p27._3._1, - _p27._3._2, - _elm_lang$core$Dict$redden(_p27._3._3), - _p27._3._4._3), - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4)); - } while(false); - return tree; -}; -var _elm_lang$core$Dict$balance = F5( - function (c, k, v, l, r) { - var tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); - return _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree; - }); -var _elm_lang$core$Dict$bubble = F5( - function (c, k, v, l, r) { - return (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$moreBlack(c), - k, - v, - _elm_lang$core$Dict$lessBlackTree(l), - _elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); - }); -var _elm_lang$core$Dict$removeMax = F5( - function (c, k, v, l, r) { - var _p28 = r; - if (_p28.ctor === 'RBEmpty_elm_builtin') { - return A3(_elm_lang$core$Dict$rem, c, l, r); - } else { - return A5( - _elm_lang$core$Dict$bubble, - c, - k, - v, - l, - A5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4)); - } - }); -var _elm_lang$core$Dict$rem = F3( - function (c, l, r) { - var _p29 = {ctor: '_Tuple2', _0: l, _1: r}; - if (_p29._0.ctor === 'RBEmpty_elm_builtin') { - if (_p29._1.ctor === 'RBEmpty_elm_builtin') { - var _p30 = c; - switch (_p30.ctor) { - case 'Red': - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - case 'Black': - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack); - default: - return _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); - } - } else { - var _p33 = _p29._1._0; - var _p32 = _p29._0._0; - var _p31 = {ctor: '_Tuple3', _0: c, _1: _p32, _2: _p33}; - if ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4); - } else { - return A4( - _elm_lang$core$Dict$reportRemBug, - 'Black/LBlack/Red', - c, - _elm_lang$core$Basics$toString(_p32), - _elm_lang$core$Basics$toString(_p33)); - } - } - } else { - if (_p29._1.ctor === 'RBEmpty_elm_builtin') { - var _p36 = _p29._1._0; - var _p35 = _p29._0._0; - var _p34 = {ctor: '_Tuple3', _0: c, _1: _p35, _2: _p36}; - if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4); - } else { - return A4( - _elm_lang$core$Dict$reportRemBug, - 'Black/Red/LBlack', - c, - _elm_lang$core$Basics$toString(_p35), - _elm_lang$core$Basics$toString(_p36)); - } - } else { - var _p40 = _p29._0._2; - var _p39 = _p29._0._4; - var _p38 = _p29._0._1; - var l$ = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39); - var _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39); - var k = _p37._0; - var v = _p37._1; - return A5(_elm_lang$core$Dict$bubble, c, k, v, l$, r); - } - } - }); -var _elm_lang$core$Dict$map = F2( - function (f, dict) { - var _p41 = dict; - if (_p41.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - } else { - var _p42 = _p41._1; - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _p41._0, - _p42, - A2(f, _p42, _p41._2), - A2(_elm_lang$core$Dict$map, f, _p41._3), - A2(_elm_lang$core$Dict$map, f, _p41._4)); - } - }); -var _elm_lang$core$Dict$Same = {ctor: 'Same'}; -var _elm_lang$core$Dict$Remove = {ctor: 'Remove'}; -var _elm_lang$core$Dict$Insert = {ctor: 'Insert'}; -var _elm_lang$core$Dict$update = F3( - function (k, alter, dict) { - var up = function (dict) { - var _p43 = dict; - if (_p43.ctor === 'RBEmpty_elm_builtin') { - var _p44 = alter(_elm_lang$core$Maybe$Nothing); - if (_p44.ctor === 'Nothing') { - return {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty}; - } else { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty) - }; - } - } else { - var _p55 = _p43._2; - var _p54 = _p43._4; - var _p53 = _p43._3; - var _p52 = _p43._1; - var _p51 = _p43._0; - var _p45 = A2(_elm_lang$core$Basics$compare, k, _p52); - switch (_p45.ctor) { - case 'EQ': - var _p46 = alter( - _elm_lang$core$Maybe$Just(_p55)); - if (_p46.ctor === 'Nothing') { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54) - }; - } else { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54) - }; - } - case 'LT': - var _p47 = up(_p53); - var flag = _p47._0; - var newLeft = _p47._1; - var _p48 = flag; - switch (_p48.ctor) { - case 'Same': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54) - }; - case 'Insert': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54) - }; - default: - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54) - }; - } - default: - var _p49 = up(_p54); - var flag = _p49._0; - var newRight = _p49._1; - var _p50 = flag; - switch (_p50.ctor) { - case 'Same': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight) - }; - case 'Insert': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight) - }; - default: - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight) - }; - } - } - } - }; - var _p56 = up(dict); - var flag = _p56._0; - var updatedDict = _p56._1; - var _p57 = flag; - switch (_p57.ctor) { - case 'Same': - return updatedDict; - case 'Insert': - return _elm_lang$core$Dict$ensureBlackRoot(updatedDict); - default: - return _elm_lang$core$Dict$blacken(updatedDict); - } - }); -var _elm_lang$core$Dict$insert = F3( - function (key, value, dict) { - return A3( - _elm_lang$core$Dict$update, - key, - _elm_lang$core$Basics$always( - _elm_lang$core$Maybe$Just(value)), - dict); - }); -var _elm_lang$core$Dict$singleton = F2( - function (key, value) { - return A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty); - }); -var _elm_lang$core$Dict$union = F2( - function (t1, t2) { - return A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1); - }); -var _elm_lang$core$Dict$filter = F2( - function (predicate, dictionary) { - var add = F3( - function (key, value, dict) { - return A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict; - }); - return A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary); - }); -var _elm_lang$core$Dict$intersect = F2( - function (t1, t2) { - return A2( - _elm_lang$core$Dict$filter, - F2( - function (k, _p58) { - return A2(_elm_lang$core$Dict$member, k, t2); - }), - t1); - }); -var _elm_lang$core$Dict$partition = F2( - function (predicate, dict) { - var add = F3( - function (key, value, _p59) { - var _p60 = _p59; - var _p62 = _p60._1; - var _p61 = _p60._0; - return A2(predicate, key, value) ? { - ctor: '_Tuple2', - _0: A3(_elm_lang$core$Dict$insert, key, value, _p61), - _1: _p62 - } : { - ctor: '_Tuple2', - _0: _p61, - _1: A3(_elm_lang$core$Dict$insert, key, value, _p62) - }; - }); - return A3( - _elm_lang$core$Dict$foldl, - add, - {ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty}, - dict); - }); -var _elm_lang$core$Dict$fromList = function (assocs) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p63, dict) { - var _p64 = _p63; - return A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict); - }), - _elm_lang$core$Dict$empty, - assocs); -}; -var _elm_lang$core$Dict$remove = F2( - function (key, dict) { - return A3( - _elm_lang$core$Dict$update, - key, - _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), - dict); - }); -var _elm_lang$core$Dict$diff = F2( - function (t1, t2) { - return A3( - _elm_lang$core$Dict$foldl, - F3( - function (k, v, t) { - return A2(_elm_lang$core$Dict$remove, k, t); - }), - t1, - t2); - }); - -//import Native.Scheduler // - -var _elm_lang$core$Native_Time = function() { - -var now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) -{ - callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); -}); - -function setInterval_(interval, task) -{ - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) - { - var id = setInterval(function() { - _elm_lang$core$Native_Scheduler.rawSpawn(task); - }, interval); - - return function() { clearInterval(id); }; - }); -} - -return { - now: now, - setInterval_: F2(setInterval_) -}; - -}(); -var _elm_lang$core$Time$setInterval = _elm_lang$core$Native_Time.setInterval_; -var _elm_lang$core$Time$spawnHelp = F3( - function (router, intervals, processes) { - var _p0 = intervals; - if (_p0.ctor === '[]') { - return _elm_lang$core$Task$succeed(processes); - } else { - var _p1 = _p0._0; - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Native_Scheduler.spawn( - A2( - _elm_lang$core$Time$setInterval, - _p1, - A2(_elm_lang$core$Platform$sendToSelf, router, _p1))), - function (id) { - return A3( - _elm_lang$core$Time$spawnHelp, - router, - _p0._1, - A3(_elm_lang$core$Dict$insert, _p1, id, processes)); - }); - } - }); -var _elm_lang$core$Time$addMySub = F2( - function (_p2, state) { - var _p3 = _p2; - var _p6 = _p3._1; - var _p5 = _p3._0; - var _p4 = A2(_elm_lang$core$Dict$get, _p5, state); - if (_p4.ctor === 'Nothing') { - return A3( - _elm_lang$core$Dict$insert, - _p5, - _elm_lang$core$Native_List.fromArray( - [_p6]), - state); - } else { - return A3( - _elm_lang$core$Dict$insert, - _p5, - A2(_elm_lang$core$List_ops['::'], _p6, _p4._0), - state); - } - }); -var _elm_lang$core$Time$inMilliseconds = function (t) { - return t; -}; -var _elm_lang$core$Time$millisecond = 1; -var _elm_lang$core$Time$second = 1000 * _elm_lang$core$Time$millisecond; -var _elm_lang$core$Time$minute = 60 * _elm_lang$core$Time$second; -var _elm_lang$core$Time$hour = 60 * _elm_lang$core$Time$minute; -var _elm_lang$core$Time$inHours = function (t) { - return t / _elm_lang$core$Time$hour; -}; -var _elm_lang$core$Time$inMinutes = function (t) { - return t / _elm_lang$core$Time$minute; -}; -var _elm_lang$core$Time$inSeconds = function (t) { - return t / _elm_lang$core$Time$second; -}; -var _elm_lang$core$Time$now = _elm_lang$core$Native_Time.now; -var _elm_lang$core$Time$onSelfMsg = F3( - function (router, interval, state) { - var _p7 = A2(_elm_lang$core$Dict$get, interval, state.taggers); - if (_p7.ctor === 'Nothing') { - return _elm_lang$core$Task$succeed(state); - } else { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Time$now, - function (time) { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Task$sequence( - A2( - _elm_lang$core$List$map, - function (tagger) { - return A2( - _elm_lang$core$Platform$sendToApp, - router, - tagger(time)); - }, - _p7._0)), - function (_p8) { - return _elm_lang$core$Task$succeed(state); - }); - }); - } - }); -var _elm_lang$core$Time$subscription = _elm_lang$core$Native_Platform.leaf('Time'); -var _elm_lang$core$Time$State = F2( - function (a, b) { - return {taggers: a, processes: b}; - }); -var _elm_lang$core$Time$init = _elm_lang$core$Task$succeed( - A2(_elm_lang$core$Time$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty)); -var _elm_lang$core$Time$onEffects = F3( - function (router, subs, _p9) { - var _p10 = _p9; - var rightStep = F3( - function (_p12, id, _p11) { - var _p13 = _p11; - return { - ctor: '_Tuple3', - _0: _p13._0, - _1: _p13._1, - _2: A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Native_Scheduler.kill(id), - function (_p14) { - return _p13._2; - }) - }; - }); - var bothStep = F4( - function (interval, taggers, id, _p15) { - var _p16 = _p15; - return { - ctor: '_Tuple3', - _0: _p16._0, - _1: A3(_elm_lang$core$Dict$insert, interval, id, _p16._1), - _2: _p16._2 - }; - }); - var leftStep = F3( - function (interval, taggers, _p17) { - var _p18 = _p17; - return { - ctor: '_Tuple3', - _0: A2(_elm_lang$core$List_ops['::'], interval, _p18._0), - _1: _p18._1, - _2: _p18._2 - }; - }); - var newTaggers = A3(_elm_lang$core$List$foldl, _elm_lang$core$Time$addMySub, _elm_lang$core$Dict$empty, subs); - var _p19 = A6( - _elm_lang$core$Dict$merge, - leftStep, - bothStep, - rightStep, - newTaggers, - _p10.processes, - { - ctor: '_Tuple3', - _0: _elm_lang$core$Native_List.fromArray( - []), - _1: _elm_lang$core$Dict$empty, - _2: _elm_lang$core$Task$succeed( - {ctor: '_Tuple0'}) - }); - var spawnList = _p19._0; - var existingDict = _p19._1; - var killTask = _p19._2; - return A2( - _elm_lang$core$Task$andThen, - killTask, - function (_p20) { - return A2( - _elm_lang$core$Task$andThen, - A3(_elm_lang$core$Time$spawnHelp, router, spawnList, existingDict), - function (newProcesses) { - return _elm_lang$core$Task$succeed( - A2(_elm_lang$core$Time$State, newTaggers, newProcesses)); - }); - }); - }); -var _elm_lang$core$Time$Every = F2( - function (a, b) { - return {ctor: 'Every', _0: a, _1: b}; - }); -var _elm_lang$core$Time$every = F2( - function (interval, tagger) { - return _elm_lang$core$Time$subscription( - A2(_elm_lang$core$Time$Every, interval, tagger)); - }); -var _elm_lang$core$Time$subMap = F2( - function (f, _p21) { - var _p22 = _p21; - return A2( - _elm_lang$core$Time$Every, - _p22._0, - function (_p23) { - return f( - _p22._1(_p23)); - }); - }); -_elm_lang$core$Native_Platform.effectManagers['Time'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Time$init, onEffects: _elm_lang$core$Time$onEffects, onSelfMsg: _elm_lang$core$Time$onSelfMsg, tag: 'sub', subMap: _elm_lang$core$Time$subMap}; - -var _elm_lang$core$Process$kill = _elm_lang$core$Native_Scheduler.kill; -var _elm_lang$core$Process$sleep = _elm_lang$core$Native_Scheduler.sleep; -var _elm_lang$core$Process$spawn = _elm_lang$core$Native_Scheduler.spawn; - -var _elm_lang$animation_frame$AnimationFrame$rAF = _elm_lang$animation_frame$Native_AnimationFrame.rAF; -var _elm_lang$animation_frame$AnimationFrame$subscription = _elm_lang$core$Native_Platform.leaf('AnimationFrame'); -var _elm_lang$animation_frame$AnimationFrame$State = F3( - function (a, b, c) { - return {subs: a, request: b, oldTime: c}; - }); -var _elm_lang$animation_frame$AnimationFrame$init = _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - _elm_lang$core$Native_List.fromArray( - []), - _elm_lang$core$Maybe$Nothing, - 0)); -var _elm_lang$animation_frame$AnimationFrame$onEffects = F3( - function (router, subs, _p0) { - var _p1 = _p0; - var _p5 = _p1.request; - var _p4 = _p1.oldTime; - var _p2 = {ctor: '_Tuple2', _0: _p5, _1: subs}; - if (_p2._0.ctor === 'Nothing') { - if (_p2._1.ctor === '[]') { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - _elm_lang$core$Native_List.fromArray( - []), - _elm_lang$core$Maybe$Nothing, - _p4)); - } else { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Process$spawn( - A2( - _elm_lang$core$Task$andThen, - _elm_lang$animation_frame$AnimationFrame$rAF, - _elm_lang$core$Platform$sendToSelf(router))), - function (pid) { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Time$now, - function (time) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - subs, - _elm_lang$core$Maybe$Just(pid), - time)); - }); - }); - } - } else { - if (_p2._1.ctor === '[]') { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Process$kill(_p2._0._0), - function (_p3) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - _elm_lang$core$Native_List.fromArray( - []), - _elm_lang$core$Maybe$Nothing, - _p4)); - }); - } else { - return _elm_lang$core$Task$succeed( - A3(_elm_lang$animation_frame$AnimationFrame$State, subs, _p5, _p4)); - } - } - }); -var _elm_lang$animation_frame$AnimationFrame$onSelfMsg = F3( - function (router, newTime, _p6) { - var _p7 = _p6; - var _p10 = _p7.subs; - var diff = newTime - _p7.oldTime; - var send = function (sub) { - var _p8 = sub; - if (_p8.ctor === 'Time') { - return A2( - _elm_lang$core$Platform$sendToApp, - router, - _p8._0(newTime)); - } else { - return A2( - _elm_lang$core$Platform$sendToApp, - router, - _p8._0(diff)); - } - }; - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Process$spawn( - A2( - _elm_lang$core$Task$andThen, - _elm_lang$animation_frame$AnimationFrame$rAF, - _elm_lang$core$Platform$sendToSelf(router))), - function (pid) { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Task$sequence( - A2(_elm_lang$core$List$map, send, _p10)), - function (_p9) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - _p10, - _elm_lang$core$Maybe$Just(pid), - newTime)); - }); - }); - }); -var _elm_lang$animation_frame$AnimationFrame$Diff = function (a) { - return {ctor: 'Diff', _0: a}; -}; -var _elm_lang$animation_frame$AnimationFrame$diffs = function (tagger) { - return _elm_lang$animation_frame$AnimationFrame$subscription( - _elm_lang$animation_frame$AnimationFrame$Diff(tagger)); -}; -var _elm_lang$animation_frame$AnimationFrame$Time = function (a) { - return {ctor: 'Time', _0: a}; -}; -var _elm_lang$animation_frame$AnimationFrame$times = function (tagger) { - return _elm_lang$animation_frame$AnimationFrame$subscription( - _elm_lang$animation_frame$AnimationFrame$Time(tagger)); -}; -var _elm_lang$animation_frame$AnimationFrame$subMap = F2( - function (func, sub) { - var _p11 = sub; - if (_p11.ctor === 'Time') { - return _elm_lang$animation_frame$AnimationFrame$Time( - function (_p12) { - return func( - _p11._0(_p12)); - }); - } else { - return _elm_lang$animation_frame$AnimationFrame$Diff( - function (_p13) { - return func( - _p11._0(_p13)); - }); - } - }); -_elm_lang$core$Native_Platform.effectManagers['AnimationFrame'] = {pkg: 'elm-lang/animation-frame', init: _elm_lang$animation_frame$AnimationFrame$init, onEffects: _elm_lang$animation_frame$AnimationFrame$onEffects, onSelfMsg: _elm_lang$animation_frame$AnimationFrame$onSelfMsg, tag: 'sub', subMap: _elm_lang$animation_frame$AnimationFrame$subMap}; - -//import Native.List // - -var _elm_lang$core$Native_Array = function() { - -// A RRB-Tree has two distinct data types. -// Leaf -> "height" is always 0 -// "table" is an array of elements -// Node -> "height" is always greater than 0 -// "table" is an array of child nodes -// "lengths" is an array of accumulated lengths of the child nodes - -// M is the maximal table size. 32 seems fast. E is the allowed increase -// of search steps when concatting to find an index. Lower values will -// decrease balancing, but will increase search steps. -var M = 32; -var E = 2; - -// An empty array. -var empty = { - ctor: '_Array', - height: 0, - table: [] -}; - - -function get(i, array) -{ - if (i < 0 || i >= length(array)) - { - throw new Error( - 'Index ' + i + ' is out of range. Check the length of ' + - 'your array first or use getMaybe or getWithDefault.'); - } - return unsafeGet(i, array); -} - - -function unsafeGet(i, array) -{ - for (var x = array.height; x > 0; x--) - { - var slot = i >> (x * 5); - while (array.lengths[slot] <= i) - { - slot++; - } - if (slot > 0) - { - i -= array.lengths[slot - 1]; - } - array = array.table[slot]; - } - return array.table[i]; -} - - -// Sets the value at the index i. Only the nodes leading to i will get -// copied and updated. -function set(i, item, array) -{ - if (i < 0 || length(array) <= i) - { - return array; - } - return unsafeSet(i, item, array); -} - - -function unsafeSet(i, item, array) -{ - array = nodeCopy(array); - - if (array.height === 0) - { - array.table[i] = item; - } - else - { - var slot = getSlot(i, array); - if (slot > 0) - { - i -= array.lengths[slot - 1]; - } - array.table[slot] = unsafeSet(i, item, array.table[slot]); - } - return array; -} - - -function initialize(len, f) -{ - if (len <= 0) - { - return empty; - } - var h = Math.floor( Math.log(len) / Math.log(M) ); - return initialize_(f, h, 0, len); -} - -function initialize_(f, h, from, to) -{ - if (h === 0) - { - var table = new Array((to - from) % (M + 1)); - for (var i = 0; i < table.length; i++) - { - table[i] = f(from + i); - } - return { - ctor: '_Array', - height: 0, - table: table - }; - } - - var step = Math.pow(M, h); - var table = new Array(Math.ceil((to - from) / step)); - var lengths = new Array(table.length); - for (var i = 0; i < table.length; i++) - { - table[i] = initialize_(f, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to)); - lengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0); - } - return { - ctor: '_Array', - height: h, - table: table, - lengths: lengths - }; -} - -function fromList(list) -{ - if (list.ctor === '[]') - { - return empty; - } - - // Allocate M sized blocks (table) and write list elements to it. - var table = new Array(M); - var nodes = []; - var i = 0; - - while (list.ctor !== '[]') - { - table[i] = list._0; - list = list._1; - i++; - - // table is full, so we can push a leaf containing it into the - // next node. - if (i === M) - { - var leaf = { - ctor: '_Array', - height: 0, - table: table - }; - fromListPush(leaf, nodes); - table = new Array(M); - i = 0; - } - } - - // Maybe there is something left on the table. - if (i > 0) - { - var leaf = { - ctor: '_Array', - height: 0, - table: table.splice(0, i) - }; - fromListPush(leaf, nodes); - } - - // Go through all of the nodes and eventually push them into higher nodes. - for (var h = 0; h < nodes.length - 1; h++) - { - if (nodes[h].table.length > 0) - { - fromListPush(nodes[h], nodes); - } - } - - var head = nodes[nodes.length - 1]; - if (head.height > 0 && head.table.length === 1) - { - return head.table[0]; - } - else - { - return head; - } -} - -// Push a node into a higher node as a child. -function fromListPush(toPush, nodes) -{ - var h = toPush.height; - - // Maybe the node on this height does not exist. - if (nodes.length === h) - { - var node = { - ctor: '_Array', - height: h + 1, - table: [], - lengths: [] - }; - nodes.push(node); - } - - nodes[h].table.push(toPush); - var len = length(toPush); - if (nodes[h].lengths.length > 0) - { - len += nodes[h].lengths[nodes[h].lengths.length - 1]; - } - nodes[h].lengths.push(len); - - if (nodes[h].table.length === M) - { - fromListPush(nodes[h], nodes); - nodes[h] = { - ctor: '_Array', - height: h + 1, - table: [], - lengths: [] - }; - } -} - -// Pushes an item via push_ to the bottom right of a tree. -function push(item, a) -{ - var pushed = push_(item, a); - if (pushed !== null) - { - return pushed; - } - - var newTree = create(item, a.height); - return siblise(a, newTree); -} - -// Recursively tries to push an item to the bottom-right most -// tree possible. If there is no space left for the item, -// null will be returned. -function push_(item, a) -{ - // Handle resursion stop at leaf level. - if (a.height === 0) - { - if (a.table.length < M) - { - var newA = { - ctor: '_Array', - height: 0, - table: a.table.slice() - }; - newA.table.push(item); - return newA; - } - else - { - return null; - } - } - - // Recursively push - var pushed = push_(item, botRight(a)); - - // There was space in the bottom right tree, so the slot will - // be updated. - if (pushed !== null) - { - var newA = nodeCopy(a); - newA.table[newA.table.length - 1] = pushed; - newA.lengths[newA.lengths.length - 1]++; - return newA; - } - - // When there was no space left, check if there is space left - // for a new slot with a tree which contains only the item - // at the bottom. - if (a.table.length < M) - { - var newSlot = create(item, a.height - 1); - var newA = nodeCopy(a); - newA.table.push(newSlot); - newA.lengths.push(newA.lengths[newA.lengths.length - 1] + length(newSlot)); - return newA; - } - else - { - return null; - } -} - -// Converts an array into a list of elements. -function toList(a) -{ - return toList_(_elm_lang$core$Native_List.Nil, a); -} - -function toList_(list, a) -{ - for (var i = a.table.length - 1; i >= 0; i--) - { - list = - a.height === 0 - ? _elm_lang$core$Native_List.Cons(a.table[i], list) - : toList_(list, a.table[i]); - } - return list; -} - -// Maps a function over the elements of an array. -function map(f, a) -{ - var newA = { - ctor: '_Array', - height: a.height, - table: new Array(a.table.length) - }; - if (a.height > 0) - { - newA.lengths = a.lengths; - } - for (var i = 0; i < a.table.length; i++) - { - newA.table[i] = - a.height === 0 - ? f(a.table[i]) - : map(f, a.table[i]); - } - return newA; -} - -// Maps a function over the elements with their index as first argument. -function indexedMap(f, a) -{ - return indexedMap_(f, a, 0); -} - -function indexedMap_(f, a, from) -{ - var newA = { - ctor: '_Array', - height: a.height, - table: new Array(a.table.length) - }; - if (a.height > 0) - { - newA.lengths = a.lengths; - } - for (var i = 0; i < a.table.length; i++) - { - newA.table[i] = - a.height === 0 - ? A2(f, from + i, a.table[i]) - : indexedMap_(f, a.table[i], i == 0 ? from : from + a.lengths[i - 1]); - } - return newA; -} - -function foldl(f, b, a) -{ - if (a.height === 0) - { - for (var i = 0; i < a.table.length; i++) - { - b = A2(f, a.table[i], b); - } - } - else - { - for (var i = 0; i < a.table.length; i++) - { - b = foldl(f, b, a.table[i]); - } - } - return b; -} - -function foldr(f, b, a) -{ - if (a.height === 0) - { - for (var i = a.table.length; i--; ) - { - b = A2(f, a.table[i], b); - } - } - else - { - for (var i = a.table.length; i--; ) - { - b = foldr(f, b, a.table[i]); - } - } - return b; -} - -// TODO: currently, it slices the right, then the left. This can be -// optimized. -function slice(from, to, a) -{ - if (from < 0) - { - from += length(a); - } - if (to < 0) - { - to += length(a); - } - return sliceLeft(from, sliceRight(to, a)); -} - -function sliceRight(to, a) -{ - if (to === length(a)) - { - return a; - } - - // Handle leaf level. - if (a.height === 0) - { - var newA = { ctor:'_Array', height:0 }; - newA.table = a.table.slice(0, to); - return newA; - } - - // Slice the right recursively. - var right = getSlot(to, a); - var sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]); - - // Maybe the a node is not even needed, as sliced contains the whole slice. - if (right === 0) - { - return sliced; - } - - // Create new node. - var newA = { - ctor: '_Array', - height: a.height, - table: a.table.slice(0, right), - lengths: a.lengths.slice(0, right) - }; - if (sliced.table.length > 0) - { - newA.table[right] = sliced; - newA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0); - } - return newA; -} - -function sliceLeft(from, a) -{ - if (from === 0) - { - return a; - } - - // Handle leaf level. - if (a.height === 0) - { - var newA = { ctor:'_Array', height:0 }; - newA.table = a.table.slice(from, a.table.length + 1); - return newA; - } - - // Slice the left recursively. - var left = getSlot(from, a); - var sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]); - - // Maybe the a node is not even needed, as sliced contains the whole slice. - if (left === a.table.length - 1) - { - return sliced; - } - - // Create new node. - var newA = { - ctor: '_Array', - height: a.height, - table: a.table.slice(left, a.table.length + 1), - lengths: new Array(a.table.length - left) - }; - newA.table[0] = sliced; - var len = 0; - for (var i = 0; i < newA.table.length; i++) - { - len += length(newA.table[i]); - newA.lengths[i] = len; - } - - return newA; -} - -// Appends two trees. -function append(a,b) -{ - if (a.table.length === 0) - { - return b; - } - if (b.table.length === 0) - { - return a; - } - - var c = append_(a, b); - - // Check if both nodes can be crunshed together. - if (c[0].table.length + c[1].table.length <= M) - { - if (c[0].table.length === 0) - { - return c[1]; - } - if (c[1].table.length === 0) - { - return c[0]; - } - - // Adjust .table and .lengths - c[0].table = c[0].table.concat(c[1].table); - if (c[0].height > 0) - { - var len = length(c[0]); - for (var i = 0; i < c[1].lengths.length; i++) - { - c[1].lengths[i] += len; - } - c[0].lengths = c[0].lengths.concat(c[1].lengths); - } - - return c[0]; - } - - if (c[0].height > 0) - { - var toRemove = calcToRemove(a, b); - if (toRemove > E) - { - c = shuffle(c[0], c[1], toRemove); - } - } - - return siblise(c[0], c[1]); -} - -// Returns an array of two nodes; right and left. One node _may_ be empty. -function append_(a, b) -{ - if (a.height === 0 && b.height === 0) - { - return [a, b]; - } - - if (a.height !== 1 || b.height !== 1) - { - if (a.height === b.height) - { - a = nodeCopy(a); - b = nodeCopy(b); - var appended = append_(botRight(a), botLeft(b)); - - insertRight(a, appended[1]); - insertLeft(b, appended[0]); - } - else if (a.height > b.height) - { - a = nodeCopy(a); - var appended = append_(botRight(a), b); - - insertRight(a, appended[0]); - b = parentise(appended[1], appended[1].height + 1); - } - else - { - b = nodeCopy(b); - var appended = append_(a, botLeft(b)); - - var left = appended[0].table.length === 0 ? 0 : 1; - var right = left === 0 ? 1 : 0; - insertLeft(b, appended[left]); - a = parentise(appended[right], appended[right].height + 1); - } - } - - // Check if balancing is needed and return based on that. - if (a.table.length === 0 || b.table.length === 0) - { - return [a, b]; - } - - var toRemove = calcToRemove(a, b); - if (toRemove <= E) - { - return [a, b]; - } - return shuffle(a, b, toRemove); -} - -// Helperfunctions for append_. Replaces a child node at the side of the parent. -function insertRight(parent, node) -{ - var index = parent.table.length - 1; - parent.table[index] = node; - parent.lengths[index] = length(node); - parent.lengths[index] += index > 0 ? parent.lengths[index - 1] : 0; -} - -function insertLeft(parent, node) -{ - if (node.table.length > 0) - { - parent.table[0] = node; - parent.lengths[0] = length(node); - - var len = length(parent.table[0]); - for (var i = 1; i < parent.lengths.length; i++) - { - len += length(parent.table[i]); - parent.lengths[i] = len; - } - } - else - { - parent.table.shift(); - for (var i = 1; i < parent.lengths.length; i++) - { - parent.lengths[i] = parent.lengths[i] - parent.lengths[0]; - } - parent.lengths.shift(); - } -} - -// Returns the extra search steps for E. Refer to the paper. -function calcToRemove(a, b) -{ - var subLengths = 0; - for (var i = 0; i < a.table.length; i++) - { - subLengths += a.table[i].table.length; - } - for (var i = 0; i < b.table.length; i++) - { - subLengths += b.table[i].table.length; - } - - var toRemove = a.table.length + b.table.length; - return toRemove - (Math.floor((subLengths - 1) / M) + 1); -} - -// get2, set2 and saveSlot are helpers for accessing elements over two arrays. -function get2(a, b, index) -{ - return index < a.length - ? a[index] - : b[index - a.length]; -} - -function set2(a, b, index, value) -{ - if (index < a.length) - { - a[index] = value; - } - else - { - b[index - a.length] = value; - } -} - -function saveSlot(a, b, index, slot) -{ - set2(a.table, b.table, index, slot); - - var l = (index === 0 || index === a.lengths.length) - ? 0 - : get2(a.lengths, a.lengths, index - 1); - - set2(a.lengths, b.lengths, index, l + length(slot)); -} - -// Creates a node or leaf with a given length at their arrays for perfomance. -// Is only used by shuffle. -function createNode(h, length) -{ - if (length < 0) - { - length = 0; - } - var a = { - ctor: '_Array', - height: h, - table: new Array(length) - }; - if (h > 0) - { - a.lengths = new Array(length); - } - return a; -} - -// Returns an array of two balanced nodes. -function shuffle(a, b, toRemove) -{ - var newA = createNode(a.height, Math.min(M, a.table.length + b.table.length - toRemove)); - var newB = createNode(a.height, newA.table.length - (a.table.length + b.table.length - toRemove)); - - // Skip the slots with size M. More precise: copy the slot references - // to the new node - var read = 0; - while (get2(a.table, b.table, read).table.length % M === 0) - { - set2(newA.table, newB.table, read, get2(a.table, b.table, read)); - set2(newA.lengths, newB.lengths, read, get2(a.lengths, b.lengths, read)); - read++; - } - - // Pulling items from left to right, caching in a slot before writing - // it into the new nodes. - var write = read; - var slot = new createNode(a.height - 1, 0); - var from = 0; - - // If the current slot is still containing data, then there will be at - // least one more write, so we do not break this loop yet. - while (read - write - (slot.table.length > 0 ? 1 : 0) < toRemove) - { - // Find out the max possible items for copying. - var source = get2(a.table, b.table, read); - var to = Math.min(M - slot.table.length, source.table.length); - - // Copy and adjust size table. - slot.table = slot.table.concat(source.table.slice(from, to)); - if (slot.height > 0) - { - var len = slot.lengths.length; - for (var i = len; i < len + to - from; i++) - { - slot.lengths[i] = length(slot.table[i]); - slot.lengths[i] += (i > 0 ? slot.lengths[i - 1] : 0); - } - } - - from += to; - - // Only proceed to next slots[i] if the current one was - // fully copied. - if (source.table.length <= to) - { - read++; from = 0; - } - - // Only create a new slot if the current one is filled up. - if (slot.table.length === M) - { - saveSlot(newA, newB, write, slot); - slot = createNode(a.height - 1, 0); - write++; - } - } - - // Cleanup after the loop. Copy the last slot into the new nodes. - if (slot.table.length > 0) - { - saveSlot(newA, newB, write, slot); - write++; - } - - // Shift the untouched slots to the left - while (read < a.table.length + b.table.length ) - { - saveSlot(newA, newB, write, get2(a.table, b.table, read)); - read++; - write++; - } - - return [newA, newB]; -} - -// Navigation functions -function botRight(a) -{ - return a.table[a.table.length - 1]; -} -function botLeft(a) -{ - return a.table[0]; -} - -// Copies a node for updating. Note that you should not use this if -// only updating only one of "table" or "lengths" for performance reasons. -function nodeCopy(a) -{ - var newA = { - ctor: '_Array', - height: a.height, - table: a.table.slice() - }; - if (a.height > 0) - { - newA.lengths = a.lengths.slice(); - } - return newA; -} - -// Returns how many items are in the tree. -function length(array) -{ - if (array.height === 0) - { - return array.table.length; - } - else - { - return array.lengths[array.lengths.length - 1]; - } -} - -// Calculates in which slot of "table" the item probably is, then -// find the exact slot via forward searching in "lengths". Returns the index. -function getSlot(i, a) -{ - var slot = i >> (5 * a.height); - while (a.lengths[slot] <= i) - { - slot++; - } - return slot; -} - -// Recursively creates a tree with a given height containing -// only the given item. -function create(item, h) -{ - if (h === 0) - { - return { - ctor: '_Array', - height: 0, - table: [item] - }; - } - return { - ctor: '_Array', - height: h, - table: [create(item, h - 1)], - lengths: [1] - }; -} - -// Recursively creates a tree that contains the given tree. -function parentise(tree, h) -{ - if (h === tree.height) - { - return tree; - } - - return { - ctor: '_Array', - height: h, - table: [parentise(tree, h - 1)], - lengths: [length(tree)] - }; -} - -// Emphasizes blood brotherhood beneath two trees. -function siblise(a, b) -{ - return { - ctor: '_Array', - height: a.height + 1, - table: [a, b], - lengths: [length(a), length(a) + length(b)] - }; -} - -function toJSArray(a) -{ - var jsArray = new Array(length(a)); - toJSArray_(jsArray, 0, a); - return jsArray; -} - -function toJSArray_(jsArray, i, a) -{ - for (var t = 0; t < a.table.length; t++) - { - if (a.height === 0) - { - jsArray[i + t] = a.table[t]; - } - else - { - var inc = t === 0 ? 0 : a.lengths[t - 1]; - toJSArray_(jsArray, i + inc, a.table[t]); - } - } -} - -function fromJSArray(jsArray) -{ - if (jsArray.length === 0) - { - return empty; - } - var h = Math.floor(Math.log(jsArray.length) / Math.log(M)); - return fromJSArray_(jsArray, h, 0, jsArray.length); -} - -function fromJSArray_(jsArray, h, from, to) -{ - if (h === 0) - { - return { - ctor: '_Array', - height: 0, - table: jsArray.slice(from, to) - }; - } - - var step = Math.pow(M, h); - var table = new Array(Math.ceil((to - from) / step)); - var lengths = new Array(table.length); - for (var i = 0; i < table.length; i++) - { - table[i] = fromJSArray_(jsArray, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to)); - lengths[i] = length(table[i]) + (i > 0 ? lengths[i - 1] : 0); - } - return { - ctor: '_Array', - height: h, - table: table, - lengths: lengths - }; -} - -return { - empty: empty, - fromList: fromList, - toList: toList, - initialize: F2(initialize), - append: F2(append), - push: F2(push), - slice: F3(slice), - get: F2(get), - set: F3(set), - map: F2(map), - indexedMap: F2(indexedMap), - foldl: F3(foldl), - foldr: F3(foldr), - length: length, - - toJSArray: toJSArray, - fromJSArray: fromJSArray -}; - -}(); -var _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append; -var _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length; -var _elm_lang$core$Array$isEmpty = function (array) { - return _elm_lang$core$Native_Utils.eq( - _elm_lang$core$Array$length(array), - 0); -}; -var _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice; -var _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set; -var _elm_lang$core$Array$get = F2( - function (i, array) { - return ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp( - i, - _elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just( - A2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing; - }); -var _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push; -var _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty; -var _elm_lang$core$Array$filter = F2( - function (isOkay, arr) { - var update = F2( - function (x, xs) { - return isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs; - }); - return A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr); - }); -var _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr; -var _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl; -var _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap; -var _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map; -var _elm_lang$core$Array$toIndexedList = function (array) { - return A3( - _elm_lang$core$List$map2, - F2( - function (v0, v1) { - return {ctor: '_Tuple2', _0: v0, _1: v1}; - }), - _elm_lang$core$Native_List.range( - 0, - _elm_lang$core$Native_Array.length(array) - 1), - _elm_lang$core$Native_Array.toList(array)); -}; -var _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList; -var _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList; -var _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize; -var _elm_lang$core$Array$repeat = F2( - function (n, e) { - return A2( - _elm_lang$core$Array$initialize, - n, - _elm_lang$core$Basics$always(e)); - }); -var _elm_lang$core$Array$Array = {ctor: 'Array'}; - -//import Maybe, Native.Array, Native.List, Native.Utils, Result // - -var _elm_lang$core$Native_Json = function() { - - -// CORE DECODERS - -function succeed(msg) -{ - return { - ctor: '', - tag: 'succeed', - msg: msg - }; -} - -function fail(msg) -{ - return { - ctor: '', - tag: 'fail', - msg: msg - }; -} - -function decodePrimitive(tag) -{ - return { - ctor: '', - tag: tag - }; -} - -function decodeContainer(tag, decoder) -{ - return { - ctor: '', - tag: tag, - decoder: decoder - }; -} - -function decodeNull(value) -{ - return { - ctor: '', - tag: 'null', - value: value - }; -} - -function decodeField(field, decoder) -{ - return { - ctor: '', - tag: 'field', - field: field, - decoder: decoder - }; -} - -function decodeKeyValuePairs(decoder) -{ - return { - ctor: '', - tag: 'key-value', - decoder: decoder - }; -} - -function decodeObject(f, decoders) -{ - return { - ctor: '', - tag: 'map-many', - func: f, - decoders: decoders - }; -} - -function decodeTuple(f, decoders) -{ - return { - ctor: '', - tag: 'tuple', - func: f, - decoders: decoders - }; -} - -function andThen(decoder, callback) -{ - return { - ctor: '', - tag: 'andThen', - decoder: decoder, - callback: callback - }; -} - -function customAndThen(decoder, callback) -{ - return { - ctor: '', - tag: 'customAndThen', - decoder: decoder, - callback: callback - }; -} - -function oneOf(decoders) -{ - return { - ctor: '', - tag: 'oneOf', - decoders: decoders - }; -} - - -// DECODING OBJECTS - -function decodeObject1(f, d1) -{ - return decodeObject(f, [d1]); -} - -function decodeObject2(f, d1, d2) -{ - return decodeObject(f, [d1, d2]); -} - -function decodeObject3(f, d1, d2, d3) -{ - return decodeObject(f, [d1, d2, d3]); -} - -function decodeObject4(f, d1, d2, d3, d4) -{ - return decodeObject(f, [d1, d2, d3, d4]); -} - -function decodeObject5(f, d1, d2, d3, d4, d5) -{ - return decodeObject(f, [d1, d2, d3, d4, d5]); -} - -function decodeObject6(f, d1, d2, d3, d4, d5, d6) -{ - return decodeObject(f, [d1, d2, d3, d4, d5, d6]); -} - -function decodeObject7(f, d1, d2, d3, d4, d5, d6, d7) -{ - return decodeObject(f, [d1, d2, d3, d4, d5, d6, d7]); -} - -function decodeObject8(f, d1, d2, d3, d4, d5, d6, d7, d8) -{ - return decodeObject(f, [d1, d2, d3, d4, d5, d6, d7, d8]); -} - - -// DECODING TUPLES - -function decodeTuple1(f, d1) -{ - return decodeTuple(f, [d1]); -} - -function decodeTuple2(f, d1, d2) -{ - return decodeTuple(f, [d1, d2]); -} - -function decodeTuple3(f, d1, d2, d3) -{ - return decodeTuple(f, [d1, d2, d3]); -} - -function decodeTuple4(f, d1, d2, d3, d4) -{ - return decodeTuple(f, [d1, d2, d3, d4]); -} - -function decodeTuple5(f, d1, d2, d3, d4, d5) -{ - return decodeTuple(f, [d1, d2, d3, d4, d5]); -} - -function decodeTuple6(f, d1, d2, d3, d4, d5, d6) -{ - return decodeTuple(f, [d1, d2, d3, d4, d5, d6]); -} - -function decodeTuple7(f, d1, d2, d3, d4, d5, d6, d7) -{ - return decodeTuple(f, [d1, d2, d3, d4, d5, d6, d7]); -} - -function decodeTuple8(f, d1, d2, d3, d4, d5, d6, d7, d8) -{ - return decodeTuple(f, [d1, d2, d3, d4, d5, d6, d7, d8]); -} - - -// DECODE HELPERS - -function ok(value) -{ - return { tag: 'ok', value: value }; -} - -function badPrimitive(type, value) -{ - return { tag: 'primitive', type: type, value: value }; -} - -function badIndex(index, nestedProblems) -{ - return { tag: 'index', index: index, rest: nestedProblems }; -} - -function badField(field, nestedProblems) -{ - return { tag: 'field', field: field, rest: nestedProblems }; -} - -function badOneOf(problems) -{ - return { tag: 'oneOf', problems: problems }; -} - -function badCustom(msg) -{ - return { tag: 'custom', msg: msg }; -} - -function bad(msg) -{ - return { tag: 'fail', msg: msg }; -} - -function badToString(problem) -{ - var context = '_'; - while (problem) - { - switch (problem.tag) - { - case 'primitive': - return 'Expecting ' + problem.type - + (context === '_' ? '' : ' at ' + context) - + ' but instead got: ' + jsToString(problem.value); - - case 'index': - context += '[' + problem.index + ']'; - problem = problem.rest; - break; - - case 'field': - context += '.' + problem.field; - problem = problem.rest; - break; - - case 'oneOf': - var problems = problem.problems; - for (var i = 0; i < problems.length; i++) - { - problems[i] = badToString(problems[i]); - } - return 'I ran into the following problems' - + (context === '_' ? '' : ' at ' + context) - + ':\n\n' + problems.join('\n'); - - case 'custom': - return 'A `customDecoder` failed' - + (context === '_' ? '' : ' at ' + context) - + ' with the message: ' + problem.msg; - - case 'fail': - return 'I ran into a `fail` decoder' - + (context === '_' ? '' : ' at ' + context) - + ': ' + problem.msg; - } - } -} - -function jsToString(value) -{ - return value === undefined - ? 'undefined' - : JSON.stringify(value); -} - - -// DECODE - -function runOnString(decoder, string) -{ - var json; - try - { - json = JSON.parse(string); - } - catch (e) - { - return _elm_lang$core$Result$Err('Given an invalid JSON: ' + e.message); - } - return run(decoder, json); -} - -function run(decoder, value) -{ - var result = runHelp(decoder, value); - return (result.tag === 'ok') - ? _elm_lang$core$Result$Ok(result.value) - : _elm_lang$core$Result$Err(badToString(result)); -} - -function runHelp(decoder, value) -{ - switch (decoder.tag) - { - case 'bool': - return (typeof value === 'boolean') - ? ok(value) - : badPrimitive('a Bool', value); - - case 'int': - if (typeof value !== 'number') { - return badPrimitive('an Int', value); - } - - if (-2147483647 < value && value < 2147483647 && (value | 0) === value) { - return ok(value); - } - - if (isFinite(value) && !(value % 1)) { - return ok(value); - } - - return badPrimitive('an Int', value); - - case 'float': - return (typeof value === 'number') - ? ok(value) - : badPrimitive('a Float', value); - - case 'string': - return (typeof value === 'string') - ? ok(value) - : (value instanceof String) - ? ok(value + '') - : badPrimitive('a String', value); - - case 'null': - return (value === null) - ? ok(decoder.value) - : badPrimitive('null', value); - - case 'value': - return ok(value); - - case 'list': - if (!(value instanceof Array)) - { - return badPrimitive('a List', value); - } - - var list = _elm_lang$core$Native_List.Nil; - for (var i = value.length; i--; ) - { - var result = runHelp(decoder.decoder, value[i]); - if (result.tag !== 'ok') - { - return badIndex(i, result) - } - list = _elm_lang$core$Native_List.Cons(result.value, list); - } - return ok(list); - - case 'array': - if (!(value instanceof Array)) - { - return badPrimitive('an Array', value); - } - - var len = value.length; - var array = new Array(len); - for (var i = len; i--; ) - { - var result = runHelp(decoder.decoder, value[i]); - if (result.tag !== 'ok') - { - return badIndex(i, result); - } - array[i] = result.value; - } - return ok(_elm_lang$core$Native_Array.fromJSArray(array)); - - case 'maybe': - var result = runHelp(decoder.decoder, value); - return (result.tag === 'ok') - ? ok(_elm_lang$core$Maybe$Just(result.value)) - : ok(_elm_lang$core$Maybe$Nothing); - - case 'field': - var field = decoder.field; - if (typeof value !== 'object' || value === null || !(field in value)) - { - return badPrimitive('an object with a field named `' + field + '`', value); - } - - var result = runHelp(decoder.decoder, value[field]); - return (result.tag === 'ok') - ? result - : badField(field, result); - - case 'key-value': - if (typeof value !== 'object' || value === null || value instanceof Array) - { - return badPrimitive('an object', value); - } - - var keyValuePairs = _elm_lang$core$Native_List.Nil; - for (var key in value) - { - var result = runHelp(decoder.decoder, value[key]); - if (result.tag !== 'ok') - { - return badField(key, result); - } - var pair = _elm_lang$core$Native_Utils.Tuple2(key, result.value); - keyValuePairs = _elm_lang$core$Native_List.Cons(pair, keyValuePairs); - } - return ok(keyValuePairs); - - case 'map-many': - var answer = decoder.func; - var decoders = decoder.decoders; - for (var i = 0; i < decoders.length; i++) - { - var result = runHelp(decoders[i], value); - if (result.tag !== 'ok') - { - return result; - } - answer = answer(result.value); - } - return ok(answer); - - case 'tuple': - var decoders = decoder.decoders; - var len = decoders.length; - - if ( !(value instanceof Array) || value.length !== len ) - { - return badPrimitive('a Tuple with ' + len + ' entries', value); - } - - var answer = decoder.func; - for (var i = 0; i < len; i++) - { - var result = runHelp(decoders[i], value[i]); - if (result.tag !== 'ok') - { - return badIndex(i, result); - } - answer = answer(result.value); - } - return ok(answer); - - case 'customAndThen': - var result = runHelp(decoder.decoder, value); - if (result.tag !== 'ok') - { - return result; - } - var realResult = decoder.callback(result.value); - if (realResult.ctor === 'Err') - { - return badCustom(realResult._0); - } - return ok(realResult._0); - - case 'andThen': - var result = runHelp(decoder.decoder, value); - return (result.tag !== 'ok') - ? result - : runHelp(decoder.callback(result.value), value); - - case 'oneOf': - var errors = []; - var temp = decoder.decoders; - while (temp.ctor !== '[]') - { - var result = runHelp(temp._0, value); - - if (result.tag === 'ok') - { - return result; - } - - errors.push(result); - - temp = temp._1; - } - return badOneOf(errors); - - case 'fail': - return bad(decoder.msg); - - case 'succeed': - return ok(decoder.msg); - } -} - - -// EQUALITY - -function equality(a, b) -{ - if (a === b) - { - return true; - } - - if (a.tag !== b.tag) - { - return false; - } - - switch (a.tag) - { - case 'succeed': - case 'fail': - return a.msg === b.msg; - - case 'bool': - case 'int': - case 'float': - case 'string': - case 'value': - return true; - - case 'null': - return a.value === b.value; - - case 'list': - case 'array': - case 'maybe': - case 'key-value': - return equality(a.decoder, b.decoder); - - case 'field': - return a.field === b.field && equality(a.decoder, b.decoder); - - case 'map-many': - case 'tuple': - if (a.func !== b.func) - { - return false; - } - return listEquality(a.decoders, b.decoders); - - case 'andThen': - case 'customAndThen': - return a.callback === b.callback && equality(a.decoder, b.decoder); - - case 'oneOf': - return listEquality(a.decoders, b.decoders); - } -} - -function listEquality(aDecoders, bDecoders) -{ - var len = aDecoders.length; - if (len !== bDecoders.length) - { - return false; - } - for (var i = 0; i < len; i++) - { - if (!equality(aDecoders[i], bDecoders[i])) - { - return false; - } - } - return true; -} - - -// ENCODE - -function encode(indentLevel, value) -{ - return JSON.stringify(value, null, indentLevel); -} - -function identity(value) -{ - return value; -} - -function encodeObject(keyValuePairs) -{ - var obj = {}; - while (keyValuePairs.ctor !== '[]') - { - var pair = keyValuePairs._0; - obj[pair._0] = pair._1; - keyValuePairs = keyValuePairs._1; - } - return obj; -} - -return { - encode: F2(encode), - runOnString: F2(runOnString), - run: F2(run), - - decodeNull: decodeNull, - decodePrimitive: decodePrimitive, - decodeContainer: F2(decodeContainer), - - decodeField: F2(decodeField), - - decodeObject1: F2(decodeObject1), - decodeObject2: F3(decodeObject2), - decodeObject3: F4(decodeObject3), - decodeObject4: F5(decodeObject4), - decodeObject5: F6(decodeObject5), - decodeObject6: F7(decodeObject6), - decodeObject7: F8(decodeObject7), - decodeObject8: F9(decodeObject8), - decodeKeyValuePairs: decodeKeyValuePairs, - - decodeTuple1: F2(decodeTuple1), - decodeTuple2: F3(decodeTuple2), - decodeTuple3: F4(decodeTuple3), - decodeTuple4: F5(decodeTuple4), - decodeTuple5: F6(decodeTuple5), - decodeTuple6: F7(decodeTuple6), - decodeTuple7: F8(decodeTuple7), - decodeTuple8: F9(decodeTuple8), - - andThen: F2(andThen), - customAndThen: F2(customAndThen), - fail: fail, - succeed: succeed, - oneOf: oneOf, - - identity: identity, - encodeNull: null, - encodeArray: _elm_lang$core$Native_Array.toJSArray, - encodeList: _elm_lang$core$Native_List.toArray, - encodeObject: encodeObject, - - equality: equality -}; - -}(); - -var _elm_lang$core$Json_Encode$list = _elm_lang$core$Native_Json.encodeList; -var _elm_lang$core$Json_Encode$array = _elm_lang$core$Native_Json.encodeArray; -var _elm_lang$core$Json_Encode$object = _elm_lang$core$Native_Json.encodeObject; -var _elm_lang$core$Json_Encode$null = _elm_lang$core$Native_Json.encodeNull; -var _elm_lang$core$Json_Encode$bool = _elm_lang$core$Native_Json.identity; -var _elm_lang$core$Json_Encode$float = _elm_lang$core$Native_Json.identity; -var _elm_lang$core$Json_Encode$int = _elm_lang$core$Native_Json.identity; -var _elm_lang$core$Json_Encode$string = _elm_lang$core$Native_Json.identity; -var _elm_lang$core$Json_Encode$encode = _elm_lang$core$Native_Json.encode; -var _elm_lang$core$Json_Encode$Value = {ctor: 'Value'}; - -var _elm_lang$core$Json_Decode$tuple8 = _elm_lang$core$Native_Json.decodeTuple8; -var _elm_lang$core$Json_Decode$tuple7 = _elm_lang$core$Native_Json.decodeTuple7; -var _elm_lang$core$Json_Decode$tuple6 = _elm_lang$core$Native_Json.decodeTuple6; -var _elm_lang$core$Json_Decode$tuple5 = _elm_lang$core$Native_Json.decodeTuple5; -var _elm_lang$core$Json_Decode$tuple4 = _elm_lang$core$Native_Json.decodeTuple4; -var _elm_lang$core$Json_Decode$tuple3 = _elm_lang$core$Native_Json.decodeTuple3; -var _elm_lang$core$Json_Decode$tuple2 = _elm_lang$core$Native_Json.decodeTuple2; -var _elm_lang$core$Json_Decode$tuple1 = _elm_lang$core$Native_Json.decodeTuple1; -var _elm_lang$core$Json_Decode$succeed = _elm_lang$core$Native_Json.succeed; -var _elm_lang$core$Json_Decode$fail = _elm_lang$core$Native_Json.fail; -var _elm_lang$core$Json_Decode$andThen = _elm_lang$core$Native_Json.andThen; -var _elm_lang$core$Json_Decode$customDecoder = _elm_lang$core$Native_Json.customAndThen; -var _elm_lang$core$Json_Decode$decodeValue = _elm_lang$core$Native_Json.run; -var _elm_lang$core$Json_Decode$value = _elm_lang$core$Native_Json.decodePrimitive('value'); -var _elm_lang$core$Json_Decode$maybe = function (decoder) { - return A2(_elm_lang$core$Native_Json.decodeContainer, 'maybe', decoder); -}; -var _elm_lang$core$Json_Decode$null = _elm_lang$core$Native_Json.decodeNull; -var _elm_lang$core$Json_Decode$array = function (decoder) { - return A2(_elm_lang$core$Native_Json.decodeContainer, 'array', decoder); -}; -var _elm_lang$core$Json_Decode$list = function (decoder) { - return A2(_elm_lang$core$Native_Json.decodeContainer, 'list', decoder); -}; -var _elm_lang$core$Json_Decode$bool = _elm_lang$core$Native_Json.decodePrimitive('bool'); -var _elm_lang$core$Json_Decode$int = _elm_lang$core$Native_Json.decodePrimitive('int'); -var _elm_lang$core$Json_Decode$float = _elm_lang$core$Native_Json.decodePrimitive('float'); -var _elm_lang$core$Json_Decode$string = _elm_lang$core$Native_Json.decodePrimitive('string'); -var _elm_lang$core$Json_Decode$oneOf = _elm_lang$core$Native_Json.oneOf; -var _elm_lang$core$Json_Decode$keyValuePairs = _elm_lang$core$Native_Json.decodeKeyValuePairs; -var _elm_lang$core$Json_Decode$object8 = _elm_lang$core$Native_Json.decodeObject8; -var _elm_lang$core$Json_Decode$object7 = _elm_lang$core$Native_Json.decodeObject7; -var _elm_lang$core$Json_Decode$object6 = _elm_lang$core$Native_Json.decodeObject6; -var _elm_lang$core$Json_Decode$object5 = _elm_lang$core$Native_Json.decodeObject5; -var _elm_lang$core$Json_Decode$object4 = _elm_lang$core$Native_Json.decodeObject4; -var _elm_lang$core$Json_Decode$object3 = _elm_lang$core$Native_Json.decodeObject3; -var _elm_lang$core$Json_Decode$object2 = _elm_lang$core$Native_Json.decodeObject2; -var _elm_lang$core$Json_Decode$object1 = _elm_lang$core$Native_Json.decodeObject1; -var _elm_lang$core$Json_Decode_ops = _elm_lang$core$Json_Decode_ops || {}; -_elm_lang$core$Json_Decode_ops[':='] = _elm_lang$core$Native_Json.decodeField; -var _elm_lang$core$Json_Decode$at = F2( - function (fields, decoder) { - return A3( - _elm_lang$core$List$foldr, - F2( - function (x, y) { - return A2(_elm_lang$core$Json_Decode_ops[':='], x, y); - }), - decoder, - fields); - }); -var _elm_lang$core$Json_Decode$decodeString = _elm_lang$core$Native_Json.runOnString; -var _elm_lang$core$Json_Decode$map = _elm_lang$core$Native_Json.decodeObject1; -var _elm_lang$core$Json_Decode$dict = function (decoder) { - return A2( - _elm_lang$core$Json_Decode$map, - _elm_lang$core$Dict$fromList, - _elm_lang$core$Json_Decode$keyValuePairs(decoder)); -}; -var _elm_lang$core$Json_Decode$Decoder = {ctor: 'Decoder'}; - -var _elm_lang$core$Set$foldr = F3( - function (f, b, _p0) { - var _p1 = _p0; - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (k, _p2, b) { - return A2(f, k, b); - }), - b, - _p1._0); - }); -var _elm_lang$core$Set$foldl = F3( - function (f, b, _p3) { - var _p4 = _p3; - return A3( - _elm_lang$core$Dict$foldl, - F3( - function (k, _p5, b) { - return A2(f, k, b); - }), - b, - _p4._0); - }); -var _elm_lang$core$Set$toList = function (_p6) { - var _p7 = _p6; - return _elm_lang$core$Dict$keys(_p7._0); -}; -var _elm_lang$core$Set$size = function (_p8) { - var _p9 = _p8; - return _elm_lang$core$Dict$size(_p9._0); -}; -var _elm_lang$core$Set$member = F2( - function (k, _p10) { - var _p11 = _p10; - return A2(_elm_lang$core$Dict$member, k, _p11._0); - }); -var _elm_lang$core$Set$isEmpty = function (_p12) { - var _p13 = _p12; - return _elm_lang$core$Dict$isEmpty(_p13._0); -}; -var _elm_lang$core$Set$Set_elm_builtin = function (a) { - return {ctor: 'Set_elm_builtin', _0: a}; -}; -var _elm_lang$core$Set$empty = _elm_lang$core$Set$Set_elm_builtin(_elm_lang$core$Dict$empty); -var _elm_lang$core$Set$singleton = function (k) { - return _elm_lang$core$Set$Set_elm_builtin( - A2( - _elm_lang$core$Dict$singleton, - k, - {ctor: '_Tuple0'})); -}; -var _elm_lang$core$Set$insert = F2( - function (k, _p14) { - var _p15 = _p14; - return _elm_lang$core$Set$Set_elm_builtin( - A3( - _elm_lang$core$Dict$insert, - k, - {ctor: '_Tuple0'}, - _p15._0)); - }); -var _elm_lang$core$Set$fromList = function (xs) { - return A3(_elm_lang$core$List$foldl, _elm_lang$core$Set$insert, _elm_lang$core$Set$empty, xs); -}; -var _elm_lang$core$Set$map = F2( - function (f, s) { - return _elm_lang$core$Set$fromList( - A2( - _elm_lang$core$List$map, - f, - _elm_lang$core$Set$toList(s))); - }); -var _elm_lang$core$Set$remove = F2( - function (k, _p16) { - var _p17 = _p16; - return _elm_lang$core$Set$Set_elm_builtin( - A2(_elm_lang$core$Dict$remove, k, _p17._0)); - }); -var _elm_lang$core$Set$union = F2( - function (_p19, _p18) { - var _p20 = _p19; - var _p21 = _p18; - return _elm_lang$core$Set$Set_elm_builtin( - A2(_elm_lang$core$Dict$union, _p20._0, _p21._0)); - }); -var _elm_lang$core$Set$intersect = F2( - function (_p23, _p22) { - var _p24 = _p23; - var _p25 = _p22; - return _elm_lang$core$Set$Set_elm_builtin( - A2(_elm_lang$core$Dict$intersect, _p24._0, _p25._0)); - }); -var _elm_lang$core$Set$diff = F2( - function (_p27, _p26) { - var _p28 = _p27; - var _p29 = _p26; - return _elm_lang$core$Set$Set_elm_builtin( - A2(_elm_lang$core$Dict$diff, _p28._0, _p29._0)); - }); -var _elm_lang$core$Set$filter = F2( - function (p, _p30) { - var _p31 = _p30; - return _elm_lang$core$Set$Set_elm_builtin( - A2( - _elm_lang$core$Dict$filter, - F2( - function (k, _p32) { - return p(k); - }), - _p31._0)); - }); -var _elm_lang$core$Set$partition = F2( - function (p, _p33) { - var _p34 = _p33; - var _p35 = A2( - _elm_lang$core$Dict$partition, - F2( - function (k, _p36) { - return p(k); - }), - _p34._0); - var p1 = _p35._0; - var p2 = _p35._1; - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Set$Set_elm_builtin(p1), - _1: _elm_lang$core$Set$Set_elm_builtin(p2) - }; - }); - -var _elm_lang$dom$Native_Dom = function() { - -function on(node) -{ - return function(eventName, decoder, toTask) - { - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - - function performTask(event) - { - var result = A2(_elm_lang$core$Json_Decode$decodeValue, decoder, event); - if (result.ctor === 'Ok') - { - _elm_lang$core$Native_Scheduler.rawSpawn(toTask(result._0)); - } - } - - node.addEventListener(eventName, performTask); - - return function() - { - node.removeEventListener(eventName, performTask); - }; - }); - }; -} - -var rAF = typeof requestAnimationFrame !== 'undefined' - ? requestAnimationFrame - : function(callback) { callback(); }; - -function withNode(id, doStuff) -{ - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) - { - rAF(function() - { - var node = document.getElementById(id); - if (node === null) - { - callback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'NotFound', _0: id })); - return; - } - callback(_elm_lang$core$Native_Scheduler.succeed(doStuff(node))); - }); - }); -} - - -// FOCUS - -function focus(id) -{ - return withNode(id, function(node) { - node.focus(); - return _elm_lang$core$Native_Utils.Tuple0; - }); -} - -function blur(id) -{ - return withNode(id, function(node) { - node.blur(); - return _elm_lang$core$Native_Utils.Tuple0; - }); -} - - -// SCROLLING - -function getScrollTop(id) -{ - return withNode(id, function(node) { - return node.scrollTop; - }); -} - -function setScrollTop(id, desiredScrollTop) -{ - return withNode(id, function(node) { - node.scrollTop = desiredScrollTop; - return _elm_lang$core$Native_Utils.Tuple0; - }); -} - -function toBottom(id) -{ - return withNode(id, function(node) { - node.scrollTop = node.scrollHeight; - return _elm_lang$core$Native_Utils.Tuple0; - }); -} - -function getScrollLeft(id) -{ - return withNode(id, function(node) { - return node.scrollLeft; - }); -} - -function setScrollLeft(id, desiredScrollLeft) -{ - return withNode(id, function(node) { - node.scrollLeft = desiredScrollLeft; - return _elm_lang$core$Native_Utils.Tuple0; - }); -} - -function toRight(id) -{ - return withNode(id, function(node) { - node.scrollLeft = node.scrollWidth; - return _elm_lang$core$Native_Utils.Tuple0; - }); -} - - -// SIZE - -function width(options, id) -{ - return withNode(id, function(node) { - switch (options.ctor) - { - case 'Content': - return node.scrollWidth; - case 'VisibleContent': - return node.clientWidth; - case 'VisibleContentWithBorders': - return node.offsetWidth; - case 'VisibleContentWithBordersAndMargins': - var rect = node.getBoundingClientRect(); - return rect.right - rect.left; - } - }); -} - -function height(options, id) -{ - return withNode(id, function(node) { - switch (options.ctor) - { - case 'Content': - return node.scrollHeight; - case 'VisibleContent': - return node.clientHeight; - case 'VisibleContentWithBorders': - return node.offsetHeight; - case 'VisibleContentWithBordersAndMargins': - var rect = node.getBoundingClientRect(); - return rect.bottom - rect.top; - } - }); -} - -return { - onDocument: F3(on(document)), - onWindow: F3(on(window)), - - focus: focus, - blur: blur, - - getScrollTop: getScrollTop, - setScrollTop: F2(setScrollTop), - getScrollLeft: getScrollLeft, - setScrollLeft: F2(setScrollLeft), - toBottom: toBottom, - toRight: toRight, - - height: F2(height), - width: F2(width) -}; - -}(); - -var _elm_lang$dom$Dom_LowLevel$onWindow = _elm_lang$dom$Native_Dom.onWindow; -var _elm_lang$dom$Dom_LowLevel$onDocument = _elm_lang$dom$Native_Dom.onDocument; - -//import Native.Json // - -var _elm_lang$virtual_dom$Native_VirtualDom = function() { - -var STYLE_KEY = 'STYLE'; -var EVENT_KEY = 'EVENT'; -var ATTR_KEY = 'ATTR'; -var ATTR_NS_KEY = 'ATTR_NS'; - - - -//////////// VIRTUAL DOM NODES //////////// - - -function text(string) -{ - return { - type: 'text', - text: string - }; -} - - -function node(tag) -{ - return F2(function(factList, kidList) { - return nodeHelp(tag, factList, kidList); - }); -} - - -function nodeHelp(tag, factList, kidList) -{ - var organized = organizeFacts(factList); - var namespace = organized.namespace; - var facts = organized.facts; - - var children = []; - var descendantsCount = 0; - while (kidList.ctor !== '[]') - { - var kid = kidList._0; - descendantsCount += (kid.descendantsCount || 0); - children.push(kid); - kidList = kidList._1; - } - descendantsCount += children.length; - - return { - type: 'node', - tag: tag, - facts: facts, - children: children, - namespace: namespace, - descendantsCount: descendantsCount - }; -} - - -function keyedNode(tag, factList, kidList) -{ - var organized = organizeFacts(factList); - var namespace = organized.namespace; - var facts = organized.facts; - - var children = []; - var descendantsCount = 0; - while (kidList.ctor !== '[]') - { - var kid = kidList._0; - descendantsCount += (kid._1.descendantsCount || 0); - children.push(kid); - kidList = kidList._1; - } - descendantsCount += children.length; - - return { - type: 'keyed-node', - tag: tag, - facts: facts, - children: children, - namespace: namespace, - descendantsCount: descendantsCount - }; -} - - -function custom(factList, model, impl) -{ - var facts = organizeFacts(factList).facts; - - return { - type: 'custom', - facts: facts, - model: model, - impl: impl - }; -} - - -function map(tagger, node) -{ - return { - type: 'tagger', - tagger: tagger, - node: node, - descendantsCount: 1 + (node.descendantsCount || 0) - }; -} - - -function thunk(func, args, thunk) -{ - return { - type: 'thunk', - func: func, - args: args, - thunk: thunk, - node: undefined - }; -} - -function lazy(fn, a) -{ - return thunk(fn, [a], function() { - return fn(a); - }); -} - -function lazy2(fn, a, b) -{ - return thunk(fn, [a,b], function() { - return A2(fn, a, b); - }); -} - -function lazy3(fn, a, b, c) -{ - return thunk(fn, [a,b,c], function() { - return A3(fn, a, b, c); - }); -} - - - -// FACTS - - -function organizeFacts(factList) -{ - var namespace, facts = {}; - - while (factList.ctor !== '[]') - { - var entry = factList._0; - var key = entry.key; - - if (key === ATTR_KEY || key === ATTR_NS_KEY || key === EVENT_KEY) - { - var subFacts = facts[key] || {}; - subFacts[entry.realKey] = entry.value; - facts[key] = subFacts; - } - else if (key === STYLE_KEY) - { - var styles = facts[key] || {}; - var styleList = entry.value; - while (styleList.ctor !== '[]') - { - var style = styleList._0; - styles[style._0] = style._1; - styleList = styleList._1; - } - facts[key] = styles; - } - else if (key === 'namespace') - { - namespace = entry.value; - } - else - { - facts[key] = entry.value; - } - factList = factList._1; - } - - return { - facts: facts, - namespace: namespace - }; -} - - - -//////////// PROPERTIES AND ATTRIBUTES //////////// - - -function style(value) -{ - return { - key: STYLE_KEY, - value: value - }; -} - - -function property(key, value) -{ - return { - key: key, - value: value - }; -} - - -function attribute(key, value) -{ - return { - key: ATTR_KEY, - realKey: key, - value: value - }; -} - - -function attributeNS(namespace, key, value) -{ - return { - key: ATTR_NS_KEY, - realKey: key, - value: { - value: value, - namespace: namespace - } - }; -} - - -function on(name, options, decoder) -{ - return { - key: EVENT_KEY, - realKey: name, - value: { - options: options, - decoder: decoder - } - }; -} - - -function equalEvents(a, b) -{ - if (!a.options === b.options) - { - if (a.stopPropagation !== b.stopPropagation || a.preventDefault !== b.preventDefault) - { - return false; - } - } - return _elm_lang$core$Native_Json.equality(a.decoder, b.decoder); -} - - - -//////////// RENDERER //////////// - - -function renderer(parent, tagger, initialVirtualNode) -{ - var eventNode = { tagger: tagger, parent: undefined }; - - var domNode = render(initialVirtualNode, eventNode); - parent.appendChild(domNode); - - var state = 'NO_REQUEST'; - var currentVirtualNode = initialVirtualNode; - var nextVirtualNode = initialVirtualNode; - - function registerVirtualNode(vNode) - { - if (state === 'NO_REQUEST') - { - rAF(updateIfNeeded); - } - state = 'PENDING_REQUEST'; - nextVirtualNode = vNode; - } - - function updateIfNeeded() - { - switch (state) - { - case 'NO_REQUEST': - throw new Error( - 'Unexpected draw callback.\n' + - 'Please report this to .' - ); - - case 'PENDING_REQUEST': - rAF(updateIfNeeded); - state = 'EXTRA_REQUEST'; - - var patches = diff(currentVirtualNode, nextVirtualNode); - domNode = applyPatches(domNode, currentVirtualNode, patches, eventNode); - currentVirtualNode = nextVirtualNode; - - return; - - case 'EXTRA_REQUEST': - state = 'NO_REQUEST'; - return; - } - } - - return { update: registerVirtualNode }; -} - - -var rAF = - typeof requestAnimationFrame !== 'undefined' - ? requestAnimationFrame - : function(cb) { setTimeout(cb, 1000 / 60); }; - - - -//////////// RENDER //////////// - - -function render(vNode, eventNode) -{ - switch (vNode.type) - { - case 'thunk': - if (!vNode.node) - { - vNode.node = vNode.thunk(); - } - return render(vNode.node, eventNode); - - case 'tagger': - var subNode = vNode.node; - var tagger = vNode.tagger; - - while (subNode.type === 'tagger') - { - typeof tagger !== 'object' - ? tagger = [tagger, subNode.tagger] - : tagger.push(subNode.tagger); - - subNode = subNode.node; - } - - var subEventRoot = { - tagger: tagger, - parent: eventNode - }; - - var domNode = render(subNode, subEventRoot); - domNode.elm_event_node_ref = subEventRoot; - return domNode; - - case 'text': - return document.createTextNode(vNode.text); - - case 'node': - var domNode = vNode.namespace - ? document.createElementNS(vNode.namespace, vNode.tag) - : document.createElement(vNode.tag); - - applyFacts(domNode, eventNode, vNode.facts); - - var children = vNode.children; - - for (var i = 0; i < children.length; i++) - { - domNode.appendChild(render(children[i], eventNode)); - } - - return domNode; - - case 'keyed-node': - var domNode = vNode.namespace - ? document.createElementNS(vNode.namespace, vNode.tag) - : document.createElement(vNode.tag); - - applyFacts(domNode, eventNode, vNode.facts); - - var children = vNode.children; - - for (var i = 0; i < children.length; i++) - { - domNode.appendChild(render(children[i]._1, eventNode)); - } - - return domNode; - - case 'custom': - var domNode = vNode.impl.render(vNode.model); - applyFacts(domNode, eventNode, vNode.facts); - return domNode; - } -} - - - -//////////// APPLY FACTS //////////// - - -function applyFacts(domNode, eventNode, facts) -{ - for (var key in facts) - { - var value = facts[key]; - - switch (key) - { - case STYLE_KEY: - applyStyles(domNode, value); - break; - - case EVENT_KEY: - applyEvents(domNode, eventNode, value); - break; - - case ATTR_KEY: - applyAttrs(domNode, value); - break; - - case ATTR_NS_KEY: - applyAttrsNS(domNode, value); - break; - - case 'value': - if (domNode[key] !== value) - { - domNode[key] = value; - } - break; - - default: - domNode[key] = value; - break; - } - } -} - -function applyStyles(domNode, styles) -{ - var domNodeStyle = domNode.style; - - for (var key in styles) - { - domNodeStyle[key] = styles[key]; - } -} - -function applyEvents(domNode, eventNode, events) -{ - var allHandlers = domNode.elm_handlers || {}; - - for (var key in events) - { - var handler = allHandlers[key]; - var value = events[key]; - - if (typeof value === 'undefined') - { - domNode.removeEventListener(key, handler); - allHandlers[key] = undefined; - } - else if (typeof handler === 'undefined') - { - var handler = makeEventHandler(eventNode, value); - domNode.addEventListener(key, handler); - allHandlers[key] = handler; - } - else - { - handler.info = value; - } - } - - domNode.elm_handlers = allHandlers; -} - -function makeEventHandler(eventNode, info) -{ - function eventHandler(event) - { - var info = eventHandler.info; - - var value = A2(_elm_lang$core$Native_Json.run, info.decoder, event); - - if (value.ctor === 'Ok') - { - var options = info.options; - if (options.stopPropagation) - { - event.stopPropagation(); - } - if (options.preventDefault) - { - event.preventDefault(); - } - - var message = value._0; - - var currentEventNode = eventNode; - while (currentEventNode) - { - var tagger = currentEventNode.tagger; - if (typeof tagger === 'function') - { - message = tagger(message); - } - else - { - for (var i = tagger.length; i--; ) - { - message = tagger[i](message); - } - } - currentEventNode = currentEventNode.parent; - } - } - }; - - eventHandler.info = info; - - return eventHandler; -} - -function applyAttrs(domNode, attrs) -{ - for (var key in attrs) - { - var value = attrs[key]; - if (typeof value === 'undefined') - { - domNode.removeAttribute(key); - } - else - { - domNode.setAttribute(key, value); - } - } -} - -function applyAttrsNS(domNode, nsAttrs) -{ - for (var key in nsAttrs) - { - var pair = nsAttrs[key]; - var namespace = pair.namespace; - var value = pair.value; - - if (typeof value === 'undefined') - { - domNode.removeAttributeNS(namespace, key); - } - else - { - domNode.setAttributeNS(namespace, key, value); - } - } -} - - - -//////////// DIFF //////////// - - -function diff(a, b) -{ - var patches = []; - diffHelp(a, b, patches, 0); - return patches; -} - - -function makePatch(type, index, data) -{ - return { - index: index, - type: type, - data: data, - domNode: undefined, - eventNode: undefined - }; -} - - -function diffHelp(a, b, patches, index) -{ - if (a === b) - { - return; - } - - var aType = a.type; - var bType = b.type; - - // Bail if you run into different types of nodes. Implies that the - // structure has changed significantly and it's not worth a diff. - if (aType !== bType) - { - patches.push(makePatch('p-redraw', index, b)); - return; - } - - // Now we know that both nodes are the same type. - switch (bType) - { - case 'thunk': - var aArgs = a.args; - var bArgs = b.args; - var i = aArgs.length; - var same = a.func === b.func && i === bArgs.length; - while (same && i--) - { - same = aArgs[i] === bArgs[i]; - } - if (same) - { - b.node = a.node; - return; - } - b.node = b.thunk(); - var subPatches = []; - diffHelp(a.node, b.node, subPatches, 0); - if (subPatches.length > 0) - { - patches.push(makePatch('p-thunk', index, subPatches)); - } - return; - - case 'tagger': - // gather nested taggers - var aTaggers = a.tagger; - var bTaggers = b.tagger; - var nesting = false; - - var aSubNode = a.node; - while (aSubNode.type === 'tagger') - { - nesting = true; - - typeof aTaggers !== 'object' - ? aTaggers = [aTaggers, aSubNode.tagger] - : aTaggers.push(aSubNode.tagger); - - aSubNode = aSubNode.node; - } - - var bSubNode = b.node; - while (bSubNode.type === 'tagger') - { - nesting = true; - - typeof bTaggers !== 'object' - ? bTaggers = [bTaggers, bSubNode.tagger] - : bTaggers.push(bSubNode.tagger); - - bSubNode = bSubNode.node; - } - - // Just bail if different numbers of taggers. This implies the - // structure of the virtual DOM has changed. - if (nesting && aTaggers.length !== bTaggers.length) - { - patches.push(makePatch('p-redraw', index, b)); - return; - } - - // check if taggers are "the same" - if (nesting ? !pairwiseRefEqual(aTaggers, bTaggers) : aTaggers !== bTaggers) - { - patches.push(makePatch('p-tagger', index, bTaggers)); - } - - // diff everything below the taggers - diffHelp(aSubNode, bSubNode, patches, index + 1); - return; - - case 'text': - if (a.text !== b.text) - { - patches.push(makePatch('p-text', index, b.text)); - return; - } - - return; - - case 'node': - // Bail if obvious indicators have changed. Implies more serious - // structural changes such that it's not worth it to diff. - if (a.tag !== b.tag || a.namespace !== b.namespace) - { - patches.push(makePatch('p-redraw', index, b)); - return; - } - - var factsDiff = diffFacts(a.facts, b.facts); - - if (typeof factsDiff !== 'undefined') - { - patches.push(makePatch('p-facts', index, factsDiff)); - } - - diffChildren(a, b, patches, index); - return; - - case 'keyed-node': - // Bail if obvious indicators have changed. Implies more serious - // structural changes such that it's not worth it to diff. - if (a.tag !== b.tag || a.namespace !== b.namespace) - { - patches.push(makePatch('p-redraw', index, b)); - return; - } - - var factsDiff = diffFacts(a.facts, b.facts); - - if (typeof factsDiff !== 'undefined') - { - patches.push(makePatch('p-facts', index, factsDiff)); - } - - diffKeyedChildren(a, b, patches, index); - return; - - case 'custom': - if (a.impl !== b.impl) - { - patches.push(makePatch('p-redraw', index, b)); - return; - } - - var factsDiff = diffFacts(a.facts, b.facts); - if (typeof factsDiff !== 'undefined') - { - patches.push(makePatch('p-facts', index, factsDiff)); - } - - var patch = b.impl.diff(a,b); - if (patch) - { - patches.push(makePatch('p-custom', index, patch)); - return; - } - - return; - } -} - - -// assumes the incoming arrays are the same length -function pairwiseRefEqual(as, bs) -{ - for (var i = 0; i < as.length; i++) - { - if (as[i] !== bs[i]) - { - return false; - } - } - - return true; -} - - -// TODO Instead of creating a new diff object, it's possible to just test if -// there *is* a diff. During the actual patch, do the diff again and make the -// modifications directly. This way, there's no new allocations. Worth it? -function diffFacts(a, b, category) -{ - var diff; - - // look for changes and removals - for (var aKey in a) - { - if (aKey === STYLE_KEY || aKey === EVENT_KEY || aKey === ATTR_KEY || aKey === ATTR_NS_KEY) - { - var subDiff = diffFacts(a[aKey], b[aKey] || {}, aKey); - if (subDiff) - { - diff = diff || {}; - diff[aKey] = subDiff; - } - continue; - } - - // remove if not in the new facts - if (!(aKey in b)) - { - diff = diff || {}; - diff[aKey] = - (typeof category === 'undefined') - ? (typeof a[aKey] === 'string' ? '' : null) - : - (category === STYLE_KEY) - ? '' - : - (category === EVENT_KEY || category === ATTR_KEY) - ? undefined - : - { namespace: a[aKey].namespace, value: undefined }; - - continue; - } - - var aValue = a[aKey]; - var bValue = b[aKey]; - - // reference equal, so don't worry about it - if (aValue === bValue && aKey !== 'value' - || category === EVENT_KEY && equalEvents(aValue, bValue)) - { - continue; - } - - diff = diff || {}; - diff[aKey] = bValue; - } - - // add new stuff - for (var bKey in b) - { - if (!(bKey in a)) - { - diff = diff || {}; - diff[bKey] = b[bKey]; - } - } - - return diff; -} - - -function diffChildren(aParent, bParent, patches, rootIndex) -{ - var aChildren = aParent.children; - var bChildren = bParent.children; - - var aLen = aChildren.length; - var bLen = bChildren.length; - - // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS - - if (aLen > bLen) - { - patches.push(makePatch('p-remove-last', rootIndex, aLen - bLen)); - } - else if (aLen < bLen) - { - patches.push(makePatch('p-append', rootIndex, bChildren.slice(aLen))); - } - - // PAIRWISE DIFF EVERYTHING ELSE - - var index = rootIndex; - var minLen = aLen < bLen ? aLen : bLen; - for (var i = 0; i < minLen; i++) - { - index++; - var aChild = aChildren[i]; - diffHelp(aChild, bChildren[i], patches, index); - index += aChild.descendantsCount || 0; - } -} - - - -//////////// KEYED DIFF //////////// - - -function diffKeyedChildren(aParent, bParent, patches, rootIndex) -{ - var localPatches = []; - - var changes = {}; // Dict String Entry - var inserts = []; // Array { index : Int, entry : Entry } - // type Entry = { tag : String, vnode : VNode, index : Int, data : _ } - - var aChildren = aParent.children; - var bChildren = bParent.children; - var aLen = aChildren.length; - var bLen = bChildren.length; - var aIndex = 0; - var bIndex = 0; - - var index = rootIndex; - - while (aIndex < aLen && bIndex < bLen) - { - var a = aChildren[aIndex]; - var b = bChildren[bIndex]; - - var aKey = a._0; - var bKey = b._0; - var aNode = a._1; - var bNode = b._1; - - // check if keys match - - if (aKey === bKey) - { - index++; - diffHelp(aNode, bNode, localPatches, index); - index += aNode.descendantsCount || 0; - - aIndex++; - bIndex++; - continue; - } - - // look ahead 1 to detect insertions and removals. - - var aLookAhead = aIndex + 1 < aLen; - var bLookAhead = bIndex + 1 < bLen; - - if (aLookAhead) - { - var aNext = aChildren[aIndex + 1]; - var aNextKey = aNext._0; - var aNextNode = aNext._1; - var oldMatch = bKey === aNextKey; - } - - if (bLookAhead) - { - var bNext = bChildren[bIndex + 1]; - var bNextKey = bNext._0; - var bNextNode = bNext._1; - var newMatch = aKey === bNextKey; - } - - - // swap a and b - if (aLookAhead && bLookAhead && newMatch && oldMatch) - { - index++; - diffHelp(aNode, bNextNode, localPatches, index); - insertNode(changes, localPatches, aKey, bNode, bIndex, inserts); - index += aNode.descendantsCount || 0; - - index++; - removeNode(changes, localPatches, aKey, aNextNode, index); - index += aNextNode.descendantsCount || 0; - - aIndex += 2; - bIndex += 2; - continue; - } - - // insert b - if (bLookAhead && newMatch) - { - index++; - insertNode(changes, localPatches, bKey, bNode, bIndex, inserts); - diffHelp(aNode, bNextNode, localPatches, index); - index += aNode.descendantsCount || 0; - - aIndex += 1; - bIndex += 2; - continue; - } - - // remove a - if (aLookAhead && oldMatch) - { - index++; - removeNode(changes, localPatches, aKey, aNode, index); - index += aNode.descendantsCount || 0; - - index++; - diffHelp(aNextNode, bNode, localPatches, index); - index += aNextNode.descendantsCount || 0; - - aIndex += 2; - bIndex += 1; - continue; - } - - // remove a, insert b - if (aLookAhead && bLookAhead && aNextKey === bNextKey) - { - index++; - removeNode(changes, localPatches, aKey, aNode, index); - insertNode(changes, localPatches, bKey, bNode, bIndex, inserts); - index += aNode.descendantsCount || 0; - - index++; - diffHelp(aNextNode, bNextNode, localPatches, index); - index += aNextNode.descendantsCount || 0; - - aIndex += 2; - bIndex += 2; - continue; - } - - break; - } - - // eat up any remaining nodes with removeNode and insertNode - - while (aIndex < aLen) - { - index++; - var a = aChildren[aIndex]; - var aNode = a._1; - removeNode(changes, localPatches, a._0, aNode, index); - index += aNode.descendantsCount || 0; - aIndex++; - } - - var endInserts; - while (bIndex < bLen) - { - endInserts = endInserts || []; - var b = bChildren[bIndex]; - insertNode(changes, localPatches, b._0, b._1, undefined, endInserts); - bIndex++; - } - - if (localPatches.length > 0 || inserts.length > 0 || typeof endInserts !== 'undefined') - { - patches.push(makePatch('p-reorder', rootIndex, { - patches: localPatches, - inserts: inserts, - endInserts: endInserts - })); - } -} - - - -//////////// CHANGES FROM KEYED DIFF //////////// - - -var POSTFIX = '_elmW6BL'; - - -function insertNode(changes, localPatches, key, vnode, bIndex, inserts) -{ - var entry = changes[key]; - - // never seen this key before - if (typeof entry === 'undefined') - { - entry = { - tag: 'insert', - vnode: vnode, - index: bIndex, - data: undefined - }; - - inserts.push({ index: bIndex, entry: entry }); - changes[key] = entry; - - return; - } - - // this key was removed earlier, a match! - if (entry.tag === 'remove') - { - inserts.push({ index: bIndex, entry: entry }); - - entry.tag = 'move'; - var subPatches = []; - diffHelp(entry.vnode, vnode, subPatches, entry.index); - entry.index = bIndex; - entry.data.data = { - patches: subPatches, - entry: entry - }; - - return; - } - - // this key has already been inserted or moved, a duplicate! - insertNode(changes, localPatches, key + POSTFIX, vnode, bIndex, inserts); -} - - -function removeNode(changes, localPatches, key, vnode, index) -{ - var entry = changes[key]; - - // never seen this key before - if (typeof entry === 'undefined') - { - var patch = makePatch('p-remove', index, undefined); - localPatches.push(patch); - - changes[key] = { - tag: 'remove', - vnode: vnode, - index: index, - data: patch - }; - - return; - } - - // this key was inserted earlier, a match! - if (entry.tag === 'insert') - { - entry.tag = 'move'; - var subPatches = []; - diffHelp(vnode, entry.vnode, subPatches, index); - - var patch = makePatch('p-remove', index, { - patches: subPatches, - entry: entry - }); - localPatches.push(patch); - - return; - } - - // this key has already been removed or moved, a duplicate! - removeNode(changes, localPatches, key + POSTFIX, vnode, index); -} - - - -//////////// ADD DOM NODES //////////// -// -// Each DOM node has an "index" assigned in order of traversal. It is important -// to minimize our crawl over the actual DOM, so these indexes (along with the -// descendantsCount of virtual nodes) let us skip touching entire subtrees of -// the DOM if we know there are no patches there. - - -function addDomNodes(domNode, vNode, patches, eventNode) -{ - addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.descendantsCount, eventNode); -} - - -// assumes `patches` is non-empty and indexes increase monotonically. -function addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode) -{ - var patch = patches[i]; - var index = patch.index; - - while (index === low) - { - var patchType = patch.type; - - if (patchType === 'p-thunk') - { - addDomNodes(domNode, vNode.node, patch.data, eventNode); - } - else if (patchType === 'p-reorder') - { - patch.domNode = domNode; - patch.eventNode = eventNode; - - var subPatches = patch.data.patches; - if (subPatches.length > 0) - { - addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); - } - } - else if (patchType === 'p-remove') - { - patch.domNode = domNode; - patch.eventNode = eventNode; - - var data = patch.data; - if (typeof data !== 'undefined') - { - data.entry.data = domNode; - var subPatches = data.patches; - if (subPatches.length > 0) - { - addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); - } - } - } - else - { - patch.domNode = domNode; - patch.eventNode = eventNode; - } - - i++; - - if (!(patch = patches[i]) || (index = patch.index) > high) - { - return i; - } - } - - switch (vNode.type) - { - case 'tagger': - var subNode = vNode.node; - - while (subNode.type === "tagger") - { - subNode = subNode.node; - } - - return addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref); - - case 'node': - var vChildren = vNode.children; - var childNodes = domNode.childNodes; - for (var j = 0; j < vChildren.length; j++) - { - low++; - var vChild = vChildren[j]; - var nextLow = low + (vChild.descendantsCount || 0); - if (low <= index && index <= nextLow) - { - i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode); - if (!(patch = patches[i]) || (index = patch.index) > high) - { - return i; - } - } - low = nextLow; - } - return i; - - case 'keyed-node': - var vChildren = vNode.children; - var childNodes = domNode.childNodes; - for (var j = 0; j < vChildren.length; j++) - { - low++; - var vChild = vChildren[j]._1; - var nextLow = low + (vChild.descendantsCount || 0); - if (low <= index && index <= nextLow) - { - i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode); - if (!(patch = patches[i]) || (index = patch.index) > high) - { - return i; - } - } - low = nextLow; - } - return i; - - case 'text': - case 'thunk': - throw new Error('should never traverse `text` or `thunk` nodes like this'); - } -} - - - -//////////// APPLY PATCHES //////////// - - -function applyPatches(rootDomNode, oldVirtualNode, patches, eventNode) -{ - if (patches.length === 0) - { - return rootDomNode; - } - - addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode); - return applyPatchesHelp(rootDomNode, patches); -} - -function applyPatchesHelp(rootDomNode, patches) -{ - for (var i = 0; i < patches.length; i++) - { - var patch = patches[i]; - var localDomNode = patch.domNode - var newNode = applyPatch(localDomNode, patch); - if (localDomNode === rootDomNode) - { - rootDomNode = newNode; - } - } - return rootDomNode; -} - -function applyPatch(domNode, patch) -{ - switch (patch.type) - { - case 'p-redraw': - return applyPatchRedraw(domNode, patch.data, patch.eventNode); - - case 'p-facts': - applyFacts(domNode, patch.eventNode, patch.data); - return domNode; - - case 'p-text': - domNode.replaceData(0, domNode.length, patch.data); - return domNode; - - case 'p-thunk': - return applyPatchesHelp(domNode, patch.data); - - case 'p-tagger': - domNode.elm_event_node_ref.tagger = patch.data; - return domNode; - - case 'p-remove-last': - var i = patch.data; - while (i--) - { - domNode.removeChild(domNode.lastChild); - } - return domNode; - - case 'p-append': - var newNodes = patch.data; - for (var i = 0; i < newNodes.length; i++) - { - domNode.appendChild(render(newNodes[i], patch.eventNode)); - } - return domNode; - - case 'p-remove': - var data = patch.data; - if (typeof data === 'undefined') - { - domNode.parentNode.removeChild(domNode); - return domNode; - } - var entry = data.entry; - if (typeof entry.index !== 'undefined') - { - domNode.parentNode.removeChild(domNode); - } - entry.data = applyPatchesHelp(domNode, data.patches); - return domNode; - - case 'p-reorder': - return applyPatchReorder(domNode, patch); - - case 'p-custom': - var impl = patch.data; - return impl.applyPatch(domNode, impl.data); - - default: - throw new Error('Ran into an unknown patch!'); - } -} - - -function applyPatchRedraw(domNode, vNode, eventNode) -{ - var parentNode = domNode.parentNode; - var newNode = render(vNode, eventNode); - - if (typeof newNode.elm_event_node_ref === 'undefined') - { - newNode.elm_event_node_ref = domNode.elm_event_node_ref; - } - - if (parentNode && newNode !== domNode) - { - parentNode.replaceChild(newNode, domNode); - } - return newNode; -} - - -function applyPatchReorder(domNode, patch) -{ - var data = patch.data; - - // remove end inserts - var frag = applyPatchReorderEndInsertsHelp(data.endInserts, patch); - - // removals - domNode = applyPatchesHelp(domNode, data.patches); - - // inserts - var inserts = data.inserts; - for (var i = 0; i < inserts.length; i++) - { - var insert = inserts[i]; - var entry = insert.entry; - var node = entry.tag === 'move' - ? entry.data - : render(entry.vnode, patch.eventNode); - domNode.insertBefore(node, domNode.childNodes[insert.index]); - } - - // add end inserts - if (typeof frag !== 'undefined') - { - domNode.appendChild(frag); - } - - return domNode; -} - - -function applyPatchReorderEndInsertsHelp(endInserts, patch) -{ - if (typeof endInserts === 'undefined') - { - return; - } - - var frag = document.createDocumentFragment(); - for (var i = 0; i < endInserts.length; i++) - { - var insert = endInserts[i]; - var entry = insert.entry; - frag.appendChild(entry.tag === 'move' - ? entry.data - : render(entry.vnode, patch.eventNode) - ); - } - return frag; -} - - - -//////////// PROGRAMS //////////// - - -function programWithFlags(details) -{ - return { - init: details.init, - update: details.update, - subscriptions: details.subscriptions, - view: details.view, - renderer: renderer - }; -} - - -return { - node: node, - text: text, - - custom: custom, - - map: F2(map), - - on: F3(on), - style: style, - property: F2(property), - attribute: F2(attribute), - attributeNS: F3(attributeNS), - - lazy: F2(lazy), - lazy2: F3(lazy2), - lazy3: F4(lazy3), - keyedNode: F3(keyedNode), - - programWithFlags: programWithFlags -}; - -}(); -var _elm_lang$virtual_dom$VirtualDom$programWithFlags = _elm_lang$virtual_dom$Native_VirtualDom.programWithFlags; -var _elm_lang$virtual_dom$VirtualDom$keyedNode = _elm_lang$virtual_dom$Native_VirtualDom.keyedNode; -var _elm_lang$virtual_dom$VirtualDom$lazy3 = _elm_lang$virtual_dom$Native_VirtualDom.lazy3; -var _elm_lang$virtual_dom$VirtualDom$lazy2 = _elm_lang$virtual_dom$Native_VirtualDom.lazy2; -var _elm_lang$virtual_dom$VirtualDom$lazy = _elm_lang$virtual_dom$Native_VirtualDom.lazy; -var _elm_lang$virtual_dom$VirtualDom$defaultOptions = {stopPropagation: false, preventDefault: false}; -var _elm_lang$virtual_dom$VirtualDom$onWithOptions = _elm_lang$virtual_dom$Native_VirtualDom.on; -var _elm_lang$virtual_dom$VirtualDom$on = F2( - function (eventName, decoder) { - return A3(_elm_lang$virtual_dom$VirtualDom$onWithOptions, eventName, _elm_lang$virtual_dom$VirtualDom$defaultOptions, decoder); - }); -var _elm_lang$virtual_dom$VirtualDom$style = _elm_lang$virtual_dom$Native_VirtualDom.style; -var _elm_lang$virtual_dom$VirtualDom$attributeNS = _elm_lang$virtual_dom$Native_VirtualDom.attributeNS; -var _elm_lang$virtual_dom$VirtualDom$attribute = _elm_lang$virtual_dom$Native_VirtualDom.attribute; -var _elm_lang$virtual_dom$VirtualDom$property = _elm_lang$virtual_dom$Native_VirtualDom.property; -var _elm_lang$virtual_dom$VirtualDom$map = _elm_lang$virtual_dom$Native_VirtualDom.map; -var _elm_lang$virtual_dom$VirtualDom$text = _elm_lang$virtual_dom$Native_VirtualDom.text; -var _elm_lang$virtual_dom$VirtualDom$node = _elm_lang$virtual_dom$Native_VirtualDom.node; -var _elm_lang$virtual_dom$VirtualDom$Options = F2( - function (a, b) { - return {stopPropagation: a, preventDefault: b}; - }); -var _elm_lang$virtual_dom$VirtualDom$Node = {ctor: 'Node'}; -var _elm_lang$virtual_dom$VirtualDom$Property = {ctor: 'Property'}; - -var _elm_lang$html$Html$text = _elm_lang$virtual_dom$VirtualDom$text; -var _elm_lang$html$Html$node = _elm_lang$virtual_dom$VirtualDom$node; -var _elm_lang$html$Html$body = _elm_lang$html$Html$node('body'); -var _elm_lang$html$Html$section = _elm_lang$html$Html$node('section'); -var _elm_lang$html$Html$nav = _elm_lang$html$Html$node('nav'); -var _elm_lang$html$Html$article = _elm_lang$html$Html$node('article'); -var _elm_lang$html$Html$aside = _elm_lang$html$Html$node('aside'); -var _elm_lang$html$Html$h1 = _elm_lang$html$Html$node('h1'); -var _elm_lang$html$Html$h2 = _elm_lang$html$Html$node('h2'); -var _elm_lang$html$Html$h3 = _elm_lang$html$Html$node('h3'); -var _elm_lang$html$Html$h4 = _elm_lang$html$Html$node('h4'); -var _elm_lang$html$Html$h5 = _elm_lang$html$Html$node('h5'); -var _elm_lang$html$Html$h6 = _elm_lang$html$Html$node('h6'); -var _elm_lang$html$Html$header = _elm_lang$html$Html$node('header'); -var _elm_lang$html$Html$footer = _elm_lang$html$Html$node('footer'); -var _elm_lang$html$Html$address = _elm_lang$html$Html$node('address'); -var _elm_lang$html$Html$main$ = _elm_lang$html$Html$node('main'); -var _elm_lang$html$Html$p = _elm_lang$html$Html$node('p'); -var _elm_lang$html$Html$hr = _elm_lang$html$Html$node('hr'); -var _elm_lang$html$Html$pre = _elm_lang$html$Html$node('pre'); -var _elm_lang$html$Html$blockquote = _elm_lang$html$Html$node('blockquote'); -var _elm_lang$html$Html$ol = _elm_lang$html$Html$node('ol'); -var _elm_lang$html$Html$ul = _elm_lang$html$Html$node('ul'); -var _elm_lang$html$Html$li = _elm_lang$html$Html$node('li'); -var _elm_lang$html$Html$dl = _elm_lang$html$Html$node('dl'); -var _elm_lang$html$Html$dt = _elm_lang$html$Html$node('dt'); -var _elm_lang$html$Html$dd = _elm_lang$html$Html$node('dd'); -var _elm_lang$html$Html$figure = _elm_lang$html$Html$node('figure'); -var _elm_lang$html$Html$figcaption = _elm_lang$html$Html$node('figcaption'); -var _elm_lang$html$Html$div = _elm_lang$html$Html$node('div'); -var _elm_lang$html$Html$a = _elm_lang$html$Html$node('a'); -var _elm_lang$html$Html$em = _elm_lang$html$Html$node('em'); -var _elm_lang$html$Html$strong = _elm_lang$html$Html$node('strong'); -var _elm_lang$html$Html$small = _elm_lang$html$Html$node('small'); -var _elm_lang$html$Html$s = _elm_lang$html$Html$node('s'); -var _elm_lang$html$Html$cite = _elm_lang$html$Html$node('cite'); -var _elm_lang$html$Html$q = _elm_lang$html$Html$node('q'); -var _elm_lang$html$Html$dfn = _elm_lang$html$Html$node('dfn'); -var _elm_lang$html$Html$abbr = _elm_lang$html$Html$node('abbr'); -var _elm_lang$html$Html$time = _elm_lang$html$Html$node('time'); -var _elm_lang$html$Html$code = _elm_lang$html$Html$node('code'); -var _elm_lang$html$Html$var = _elm_lang$html$Html$node('var'); -var _elm_lang$html$Html$samp = _elm_lang$html$Html$node('samp'); -var _elm_lang$html$Html$kbd = _elm_lang$html$Html$node('kbd'); -var _elm_lang$html$Html$sub = _elm_lang$html$Html$node('sub'); -var _elm_lang$html$Html$sup = _elm_lang$html$Html$node('sup'); -var _elm_lang$html$Html$i = _elm_lang$html$Html$node('i'); -var _elm_lang$html$Html$b = _elm_lang$html$Html$node('b'); -var _elm_lang$html$Html$u = _elm_lang$html$Html$node('u'); -var _elm_lang$html$Html$mark = _elm_lang$html$Html$node('mark'); -var _elm_lang$html$Html$ruby = _elm_lang$html$Html$node('ruby'); -var _elm_lang$html$Html$rt = _elm_lang$html$Html$node('rt'); -var _elm_lang$html$Html$rp = _elm_lang$html$Html$node('rp'); -var _elm_lang$html$Html$bdi = _elm_lang$html$Html$node('bdi'); -var _elm_lang$html$Html$bdo = _elm_lang$html$Html$node('bdo'); -var _elm_lang$html$Html$span = _elm_lang$html$Html$node('span'); -var _elm_lang$html$Html$br = _elm_lang$html$Html$node('br'); -var _elm_lang$html$Html$wbr = _elm_lang$html$Html$node('wbr'); -var _elm_lang$html$Html$ins = _elm_lang$html$Html$node('ins'); -var _elm_lang$html$Html$del = _elm_lang$html$Html$node('del'); -var _elm_lang$html$Html$img = _elm_lang$html$Html$node('img'); -var _elm_lang$html$Html$iframe = _elm_lang$html$Html$node('iframe'); -var _elm_lang$html$Html$embed = _elm_lang$html$Html$node('embed'); -var _elm_lang$html$Html$object = _elm_lang$html$Html$node('object'); -var _elm_lang$html$Html$param = _elm_lang$html$Html$node('param'); -var _elm_lang$html$Html$video = _elm_lang$html$Html$node('video'); -var _elm_lang$html$Html$audio = _elm_lang$html$Html$node('audio'); -var _elm_lang$html$Html$source = _elm_lang$html$Html$node('source'); -var _elm_lang$html$Html$track = _elm_lang$html$Html$node('track'); -var _elm_lang$html$Html$canvas = _elm_lang$html$Html$node('canvas'); -var _elm_lang$html$Html$svg = _elm_lang$html$Html$node('svg'); -var _elm_lang$html$Html$math = _elm_lang$html$Html$node('math'); -var _elm_lang$html$Html$table = _elm_lang$html$Html$node('table'); -var _elm_lang$html$Html$caption = _elm_lang$html$Html$node('caption'); -var _elm_lang$html$Html$colgroup = _elm_lang$html$Html$node('colgroup'); -var _elm_lang$html$Html$col = _elm_lang$html$Html$node('col'); -var _elm_lang$html$Html$tbody = _elm_lang$html$Html$node('tbody'); -var _elm_lang$html$Html$thead = _elm_lang$html$Html$node('thead'); -var _elm_lang$html$Html$tfoot = _elm_lang$html$Html$node('tfoot'); -var _elm_lang$html$Html$tr = _elm_lang$html$Html$node('tr'); -var _elm_lang$html$Html$td = _elm_lang$html$Html$node('td'); -var _elm_lang$html$Html$th = _elm_lang$html$Html$node('th'); -var _elm_lang$html$Html$form = _elm_lang$html$Html$node('form'); -var _elm_lang$html$Html$fieldset = _elm_lang$html$Html$node('fieldset'); -var _elm_lang$html$Html$legend = _elm_lang$html$Html$node('legend'); -var _elm_lang$html$Html$label = _elm_lang$html$Html$node('label'); -var _elm_lang$html$Html$input = _elm_lang$html$Html$node('input'); -var _elm_lang$html$Html$button = _elm_lang$html$Html$node('button'); -var _elm_lang$html$Html$select = _elm_lang$html$Html$node('select'); -var _elm_lang$html$Html$datalist = _elm_lang$html$Html$node('datalist'); -var _elm_lang$html$Html$optgroup = _elm_lang$html$Html$node('optgroup'); -var _elm_lang$html$Html$option = _elm_lang$html$Html$node('option'); -var _elm_lang$html$Html$textarea = _elm_lang$html$Html$node('textarea'); -var _elm_lang$html$Html$keygen = _elm_lang$html$Html$node('keygen'); -var _elm_lang$html$Html$output = _elm_lang$html$Html$node('output'); -var _elm_lang$html$Html$progress = _elm_lang$html$Html$node('progress'); -var _elm_lang$html$Html$meter = _elm_lang$html$Html$node('meter'); -var _elm_lang$html$Html$details = _elm_lang$html$Html$node('details'); -var _elm_lang$html$Html$summary = _elm_lang$html$Html$node('summary'); -var _elm_lang$html$Html$menuitem = _elm_lang$html$Html$node('menuitem'); -var _elm_lang$html$Html$menu = _elm_lang$html$Html$node('menu'); - -var _elm_lang$html$Html_App$programWithFlags = _elm_lang$virtual_dom$VirtualDom$programWithFlags; -var _elm_lang$html$Html_App$program = function (app) { - return _elm_lang$html$Html_App$programWithFlags( - _elm_lang$core$Native_Utils.update( - app, - { - init: function (_p0) { - return app.init; - } - })); -}; -var _elm_lang$html$Html_App$beginnerProgram = function (_p1) { - var _p2 = _p1; - return _elm_lang$html$Html_App$programWithFlags( - { - init: function (_p3) { - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - _p2.model, - _elm_lang$core$Native_List.fromArray( - [])); - }, - update: F2( - function (msg, model) { - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - A2(_p2.update, msg, model), - _elm_lang$core$Native_List.fromArray( - [])); - }), - view: _p2.view, - subscriptions: function (_p4) { - return _elm_lang$core$Platform_Sub$none; - } - }); -}; -var _elm_lang$html$Html_App$map = _elm_lang$virtual_dom$VirtualDom$map; - -var _elm_lang$html$Html_Attributes$attribute = _elm_lang$virtual_dom$VirtualDom$attribute; -var _elm_lang$html$Html_Attributes$contextmenu = function (value) { - return A2(_elm_lang$html$Html_Attributes$attribute, 'contextmenu', value); -}; -var _elm_lang$html$Html_Attributes$draggable = function (value) { - return A2(_elm_lang$html$Html_Attributes$attribute, 'draggable', value); -}; -var _elm_lang$html$Html_Attributes$list = function (value) { - return A2(_elm_lang$html$Html_Attributes$attribute, 'list', value); -}; -var _elm_lang$html$Html_Attributes$maxlength = function (n) { - return A2( - _elm_lang$html$Html_Attributes$attribute, - 'maxlength', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$datetime = function (value) { - return A2(_elm_lang$html$Html_Attributes$attribute, 'datetime', value); -}; -var _elm_lang$html$Html_Attributes$pubdate = function (value) { - return A2(_elm_lang$html$Html_Attributes$attribute, 'pubdate', value); -}; -var _elm_lang$html$Html_Attributes$colspan = function (n) { - return A2( - _elm_lang$html$Html_Attributes$attribute, - 'colspan', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$rowspan = function (n) { - return A2( - _elm_lang$html$Html_Attributes$attribute, - 'rowspan', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$property = _elm_lang$virtual_dom$VirtualDom$property; -var _elm_lang$html$Html_Attributes$stringProperty = F2( - function (name, string) { - return A2( - _elm_lang$html$Html_Attributes$property, - name, - _elm_lang$core$Json_Encode$string(string)); - }); -var _elm_lang$html$Html_Attributes$class = function (name) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'className', name); -}; -var _elm_lang$html$Html_Attributes$id = function (name) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'id', name); -}; -var _elm_lang$html$Html_Attributes$title = function (name) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'title', name); -}; -var _elm_lang$html$Html_Attributes$accesskey = function ($char) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'accessKey', - _elm_lang$core$String$fromChar($char)); -}; -var _elm_lang$html$Html_Attributes$dir = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'dir', value); -}; -var _elm_lang$html$Html_Attributes$dropzone = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'dropzone', value); -}; -var _elm_lang$html$Html_Attributes$itemprop = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'itemprop', value); -}; -var _elm_lang$html$Html_Attributes$lang = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'lang', value); -}; -var _elm_lang$html$Html_Attributes$tabindex = function (n) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'tabIndex', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$charset = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'charset', value); -}; -var _elm_lang$html$Html_Attributes$content = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'content', value); -}; -var _elm_lang$html$Html_Attributes$httpEquiv = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'httpEquiv', value); -}; -var _elm_lang$html$Html_Attributes$language = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'language', value); -}; -var _elm_lang$html$Html_Attributes$src = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'src', value); -}; -var _elm_lang$html$Html_Attributes$height = function (value) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'height', - _elm_lang$core$Basics$toString(value)); -}; -var _elm_lang$html$Html_Attributes$width = function (value) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'width', - _elm_lang$core$Basics$toString(value)); -}; -var _elm_lang$html$Html_Attributes$alt = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'alt', value); -}; -var _elm_lang$html$Html_Attributes$preload = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'preload', value); -}; -var _elm_lang$html$Html_Attributes$poster = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'poster', value); -}; -var _elm_lang$html$Html_Attributes$kind = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'kind', value); -}; -var _elm_lang$html$Html_Attributes$srclang = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'srclang', value); -}; -var _elm_lang$html$Html_Attributes$sandbox = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'sandbox', value); -}; -var _elm_lang$html$Html_Attributes$srcdoc = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'srcdoc', value); -}; -var _elm_lang$html$Html_Attributes$type$ = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'type', value); -}; -var _elm_lang$html$Html_Attributes$value = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'value', value); -}; -var _elm_lang$html$Html_Attributes$defaultValue = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'defaultValue', value); -}; -var _elm_lang$html$Html_Attributes$placeholder = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'placeholder', value); -}; -var _elm_lang$html$Html_Attributes$accept = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'accept', value); -}; -var _elm_lang$html$Html_Attributes$acceptCharset = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'acceptCharset', value); -}; -var _elm_lang$html$Html_Attributes$action = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'action', value); -}; -var _elm_lang$html$Html_Attributes$autocomplete = function (bool) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'autocomplete', - bool ? 'on' : 'off'); -}; -var _elm_lang$html$Html_Attributes$autosave = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'autosave', value); -}; -var _elm_lang$html$Html_Attributes$enctype = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'enctype', value); -}; -var _elm_lang$html$Html_Attributes$formaction = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'formAction', value); -}; -var _elm_lang$html$Html_Attributes$minlength = function (n) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'minLength', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$method = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'method', value); -}; -var _elm_lang$html$Html_Attributes$name = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'name', value); -}; -var _elm_lang$html$Html_Attributes$pattern = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'pattern', value); -}; -var _elm_lang$html$Html_Attributes$size = function (n) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'size', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$for = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'htmlFor', value); -}; -var _elm_lang$html$Html_Attributes$form = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'form', value); -}; -var _elm_lang$html$Html_Attributes$max = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'max', value); -}; -var _elm_lang$html$Html_Attributes$min = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'min', value); -}; -var _elm_lang$html$Html_Attributes$step = function (n) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'step', n); -}; -var _elm_lang$html$Html_Attributes$cols = function (n) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'cols', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$rows = function (n) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'rows', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$wrap = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'wrap', value); -}; -var _elm_lang$html$Html_Attributes$usemap = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'useMap', value); -}; -var _elm_lang$html$Html_Attributes$shape = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'shape', value); -}; -var _elm_lang$html$Html_Attributes$coords = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'coords', value); -}; -var _elm_lang$html$Html_Attributes$challenge = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'challenge', value); -}; -var _elm_lang$html$Html_Attributes$keytype = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'keytype', value); -}; -var _elm_lang$html$Html_Attributes$align = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'align', value); -}; -var _elm_lang$html$Html_Attributes$cite = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'cite', value); -}; -var _elm_lang$html$Html_Attributes$href = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'href', value); -}; -var _elm_lang$html$Html_Attributes$target = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'target', value); -}; -var _elm_lang$html$Html_Attributes$downloadAs = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'download', value); -}; -var _elm_lang$html$Html_Attributes$hreflang = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'hreflang', value); -}; -var _elm_lang$html$Html_Attributes$media = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'media', value); -}; -var _elm_lang$html$Html_Attributes$ping = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'ping', value); -}; -var _elm_lang$html$Html_Attributes$rel = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'rel', value); -}; -var _elm_lang$html$Html_Attributes$start = function (n) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'start', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$headers = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'headers', value); -}; -var _elm_lang$html$Html_Attributes$scope = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'scope', value); -}; -var _elm_lang$html$Html_Attributes$manifest = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'manifest', value); -}; -var _elm_lang$html$Html_Attributes$boolProperty = F2( - function (name, bool) { - return A2( - _elm_lang$html$Html_Attributes$property, - name, - _elm_lang$core$Json_Encode$bool(bool)); - }); -var _elm_lang$html$Html_Attributes$hidden = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'hidden', bool); -}; -var _elm_lang$html$Html_Attributes$contenteditable = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'contentEditable', bool); -}; -var _elm_lang$html$Html_Attributes$spellcheck = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'spellcheck', bool); -}; -var _elm_lang$html$Html_Attributes$async = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'async', bool); -}; -var _elm_lang$html$Html_Attributes$defer = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'defer', bool); -}; -var _elm_lang$html$Html_Attributes$scoped = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'scoped', bool); -}; -var _elm_lang$html$Html_Attributes$autoplay = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'autoplay', bool); -}; -var _elm_lang$html$Html_Attributes$controls = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'controls', bool); -}; -var _elm_lang$html$Html_Attributes$loop = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'loop', bool); -}; -var _elm_lang$html$Html_Attributes$default = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'default', bool); -}; -var _elm_lang$html$Html_Attributes$seamless = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'seamless', bool); -}; -var _elm_lang$html$Html_Attributes$checked = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'checked', bool); -}; -var _elm_lang$html$Html_Attributes$selected = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'selected', bool); -}; -var _elm_lang$html$Html_Attributes$autofocus = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'autofocus', bool); -}; -var _elm_lang$html$Html_Attributes$disabled = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'disabled', bool); -}; -var _elm_lang$html$Html_Attributes$multiple = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'multiple', bool); -}; -var _elm_lang$html$Html_Attributes$novalidate = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'noValidate', bool); -}; -var _elm_lang$html$Html_Attributes$readonly = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'readOnly', bool); -}; -var _elm_lang$html$Html_Attributes$required = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'required', bool); -}; -var _elm_lang$html$Html_Attributes$ismap = function (value) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'isMap', value); -}; -var _elm_lang$html$Html_Attributes$download = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'download', bool); -}; -var _elm_lang$html$Html_Attributes$reversed = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'reversed', bool); -}; -var _elm_lang$html$Html_Attributes$classList = function (list) { - return _elm_lang$html$Html_Attributes$class( - A2( - _elm_lang$core$String$join, - ' ', - A2( - _elm_lang$core$List$map, - _elm_lang$core$Basics$fst, - A2(_elm_lang$core$List$filter, _elm_lang$core$Basics$snd, list)))); -}; -var _elm_lang$html$Html_Attributes$style = _elm_lang$virtual_dom$VirtualDom$style; - -var _elm_lang$keyboard$Keyboard$onSelfMsg = F3( - function (router, _p0, state) { - var _p1 = _p0; - var _p2 = A2(_elm_lang$core$Dict$get, _p1.category, state); - if (_p2.ctor === 'Nothing') { - return _elm_lang$core$Task$succeed(state); - } else { - var send = function (tagger) { - return A2( - _elm_lang$core$Platform$sendToApp, - router, - tagger(_p1.keyCode)); - }; - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Task$sequence( - A2(_elm_lang$core$List$map, send, _p2._0.taggers)), - function (_p3) { - return _elm_lang$core$Task$succeed(state); - }); - } - }); -var _elm_lang$keyboard$Keyboard_ops = _elm_lang$keyboard$Keyboard_ops || {}; -_elm_lang$keyboard$Keyboard_ops['&>'] = F2( - function (t1, t2) { - return A2( - _elm_lang$core$Task$andThen, - t1, - function (_p4) { - return t2; - }); - }); -var _elm_lang$keyboard$Keyboard$init = _elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty); -var _elm_lang$keyboard$Keyboard$categorizeHelpHelp = F2( - function (value, maybeValues) { - var _p5 = maybeValues; - if (_p5.ctor === 'Nothing') { - return _elm_lang$core$Maybe$Just( - _elm_lang$core$Native_List.fromArray( - [value])); - } else { - return _elm_lang$core$Maybe$Just( - A2(_elm_lang$core$List_ops['::'], value, _p5._0)); - } - }); -var _elm_lang$keyboard$Keyboard$categorizeHelp = F2( - function (subs, subDict) { - categorizeHelp: - while (true) { - var _p6 = subs; - if (_p6.ctor === '[]') { - return subDict; - } else { - var _v4 = _p6._1, - _v5 = A3( - _elm_lang$core$Dict$update, - _p6._0._0, - _elm_lang$keyboard$Keyboard$categorizeHelpHelp(_p6._0._1), - subDict); - subs = _v4; - subDict = _v5; - continue categorizeHelp; - } - } - }); -var _elm_lang$keyboard$Keyboard$categorize = function (subs) { - return A2(_elm_lang$keyboard$Keyboard$categorizeHelp, subs, _elm_lang$core$Dict$empty); -}; -var _elm_lang$keyboard$Keyboard$keyCode = A2(_elm_lang$core$Json_Decode_ops[':='], 'keyCode', _elm_lang$core$Json_Decode$int); -var _elm_lang$keyboard$Keyboard$subscription = _elm_lang$core$Native_Platform.leaf('Keyboard'); -var _elm_lang$keyboard$Keyboard$Watcher = F2( - function (a, b) { - return {taggers: a, pid: b}; - }); -var _elm_lang$keyboard$Keyboard$Msg = F2( - function (a, b) { - return {category: a, keyCode: b}; - }); -var _elm_lang$keyboard$Keyboard$onEffects = F3( - function (router, newSubs, oldState) { - var rightStep = F3( - function (category, taggers, task) { - return A2( - _elm_lang$core$Task$andThen, - task, - function (state) { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Process$spawn( - A3( - _elm_lang$dom$Dom_LowLevel$onDocument, - category, - _elm_lang$keyboard$Keyboard$keyCode, - function (_p7) { - return A2( - _elm_lang$core$Platform$sendToSelf, - router, - A2(_elm_lang$keyboard$Keyboard$Msg, category, _p7)); - })), - function (pid) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$core$Dict$insert, - category, - A2(_elm_lang$keyboard$Keyboard$Watcher, taggers, pid), - state)); - }); - }); - }); - var bothStep = F4( - function (category, _p8, taggers, task) { - var _p9 = _p8; - return A2( - _elm_lang$core$Task$andThen, - task, - function (state) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$core$Dict$insert, - category, - A2(_elm_lang$keyboard$Keyboard$Watcher, taggers, _p9.pid), - state)); - }); - }); - var leftStep = F3( - function (category, _p10, task) { - var _p11 = _p10; - return A2( - _elm_lang$keyboard$Keyboard_ops['&>'], - _elm_lang$core$Process$kill(_p11.pid), - task); - }); - return A6( - _elm_lang$core$Dict$merge, - leftStep, - bothStep, - rightStep, - oldState, - _elm_lang$keyboard$Keyboard$categorize(newSubs), - _elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty)); - }); -var _elm_lang$keyboard$Keyboard$MySub = F2( - function (a, b) { - return {ctor: 'MySub', _0: a, _1: b}; - }); -var _elm_lang$keyboard$Keyboard$presses = function (tagger) { - return _elm_lang$keyboard$Keyboard$subscription( - A2(_elm_lang$keyboard$Keyboard$MySub, 'keypress', tagger)); -}; -var _elm_lang$keyboard$Keyboard$downs = function (tagger) { - return _elm_lang$keyboard$Keyboard$subscription( - A2(_elm_lang$keyboard$Keyboard$MySub, 'keydown', tagger)); -}; -var _elm_lang$keyboard$Keyboard$ups = function (tagger) { - return _elm_lang$keyboard$Keyboard$subscription( - A2(_elm_lang$keyboard$Keyboard$MySub, 'keyup', tagger)); -}; -var _elm_lang$keyboard$Keyboard$subMap = F2( - function (func, _p12) { - var _p13 = _p12; - return A2( - _elm_lang$keyboard$Keyboard$MySub, - _p13._0, - function (_p14) { - return func( - _p13._1(_p14)); - }); - }); -_elm_lang$core$Native_Platform.effectManagers['Keyboard'] = {pkg: 'elm-lang/keyboard', init: _elm_lang$keyboard$Keyboard$init, onEffects: _elm_lang$keyboard$Keyboard$onEffects, onSelfMsg: _elm_lang$keyboard$Keyboard$onSelfMsg, tag: 'sub', subMap: _elm_lang$keyboard$Keyboard$subMap}; - -var _ohanhi$keyboard_extra$Keyboard_Arrows$boolToInt = function (bool) { - return bool ? 1 : 0; -}; -var _ohanhi$keyboard_extra$Keyboard_Arrows$determineArrows = function (keys) { - var toInt = function (key) { - return _ohanhi$keyboard_extra$Keyboard_Arrows$boolToInt( - A2(_elm_lang$core$Set$member, key, keys)); - }; - var x = toInt(39) - toInt(37); - var y = toInt(38) - toInt(40); - return {x: x, y: y}; -}; -var _ohanhi$keyboard_extra$Keyboard_Arrows$determineWasd = function (keys) { - var toInt = function (key) { - return _ohanhi$keyboard_extra$Keyboard_Arrows$boolToInt( - A2(_elm_lang$core$Set$member, key, keys)); - }; - var x = toInt(68) - toInt(65); - var y = toInt(87) - toInt(83); - return {x: x, y: y}; -}; -var _ohanhi$keyboard_extra$Keyboard_Arrows$init = {x: 0, y: 0}; -var _ohanhi$keyboard_extra$Keyboard_Arrows$Arrows = F2( - function (a, b) { - return {x: a, y: b}; - }); - -var _ohanhi$keyboard_extra$Keyboard_Extra$wasd = function (model) { - return _ohanhi$keyboard_extra$Keyboard_Arrows$determineWasd(model.keysDown); -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$arrows = function (model) { - return _ohanhi$keyboard_extra$Keyboard_Arrows$determineArrows(model.keysDown); -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$update = F2( - function (msg, model) { - var _p0 = msg; - if (_p0.ctor === 'Down') { - var keysDown = A2(_elm_lang$core$Set$insert, _p0._0, model.keysDown); - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - _elm_lang$core$Native_Utils.update( - model, - {keysDown: keysDown}), - _elm_lang$core$Native_List.fromArray( - [])); - } else { - var keysDown = A2(_elm_lang$core$Set$remove, _p0._0, model.keysDown); - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - _elm_lang$core$Native_Utils.update( - model, - {keysDown: keysDown}), - _elm_lang$core$Native_List.fromArray( - [])); - } - }); -var _ohanhi$keyboard_extra$Keyboard_Extra$Model = function (a) { - return {keysDown: a}; -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$init = { - ctor: '_Tuple2', - _0: _ohanhi$keyboard_extra$Keyboard_Extra$Model(_elm_lang$core$Set$empty), - _1: _elm_lang$core$Platform_Cmd$none -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Up = function (a) { - return {ctor: 'Up', _0: a}; -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Down = function (a) { - return {ctor: 'Down', _0: a}; -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$subscriptions = _elm_lang$core$Platform_Sub$batch( - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$keyboard$Keyboard$downs(_ohanhi$keyboard_extra$Keyboard_Extra$Down), - _elm_lang$keyboard$Keyboard$ups(_ohanhi$keyboard_extra$Keyboard_Extra$Up) - ])); -var _ohanhi$keyboard_extra$Keyboard_Extra$NoDirection = {ctor: 'NoDirection'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$NorthWest = {ctor: 'NorthWest'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$West = {ctor: 'West'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$SouthWest = {ctor: 'SouthWest'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$South = {ctor: 'South'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$SouthEast = {ctor: 'SouthEast'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$East = {ctor: 'East'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$NorthEast = {ctor: 'NorthEast'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$North = {ctor: 'North'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$arrowsToDir = function (_p1) { - var _p2 = _p1; - var _p3 = {ctor: '_Tuple2', _0: _p2.x, _1: _p2.y}; - _v2_8: - do { - if (_p3.ctor === '_Tuple2') { - switch (_p3._0) { - case 1: - switch (_p3._1) { - case 1: - return _ohanhi$keyboard_extra$Keyboard_Extra$NorthEast; - case 0: - return _ohanhi$keyboard_extra$Keyboard_Extra$East; - case -1: - return _ohanhi$keyboard_extra$Keyboard_Extra$SouthEast; - default: - break _v2_8; - } - case 0: - switch (_p3._1) { - case 1: - return _ohanhi$keyboard_extra$Keyboard_Extra$North; - case -1: - return _ohanhi$keyboard_extra$Keyboard_Extra$South; - default: - break _v2_8; - } - case -1: - switch (_p3._1) { - case -1: - return _ohanhi$keyboard_extra$Keyboard_Extra$SouthWest; - case 0: - return _ohanhi$keyboard_extra$Keyboard_Extra$West; - case 1: - return _ohanhi$keyboard_extra$Keyboard_Extra$NorthWest; - default: - break _v2_8; - } - default: - break _v2_8; - } - } else { - break _v2_8; - } - } while(false); - return _ohanhi$keyboard_extra$Keyboard_Extra$NoDirection; -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$arrowsDirection = function (_p4) { - return _ohanhi$keyboard_extra$Keyboard_Extra$arrowsToDir( - _ohanhi$keyboard_extra$Keyboard_Extra$arrows(_p4)); -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$wasdDirection = function (_p5) { - return _ohanhi$keyboard_extra$Keyboard_Extra$arrowsToDir( - _ohanhi$keyboard_extra$Keyboard_Extra$wasd(_p5)); -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Other = {ctor: 'Other'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Altgr = {ctor: 'Altgr'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Meta = {ctor: 'Meta'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Quote = {ctor: 'Quote'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CloseBracket = {ctor: 'CloseBracket'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$BackSlash = {ctor: 'BackSlash'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$OpenBracket = {ctor: 'OpenBracket'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$BackQuote = {ctor: 'BackQuote'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Slash = {ctor: 'Slash'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Period = {ctor: 'Period'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Minus = {ctor: 'Minus'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Comma = {ctor: 'Comma'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$VolumeUp = {ctor: 'VolumeUp'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$VolumeDown = {ctor: 'VolumeDown'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$VolumeMute = {ctor: 'VolumeMute'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Tilde = {ctor: 'Tilde'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CloseCurlyBracket = {ctor: 'CloseCurlyBracket'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$OpenCurlyBracket = {ctor: 'OpenCurlyBracket'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$HyphenMinus = {ctor: 'HyphenMinus'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Pipe = {ctor: 'Pipe'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Plus = {ctor: 'Plus'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Asterisk = {ctor: 'Asterisk'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CloseParen = {ctor: 'CloseParen'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$OpenParen = {ctor: 'OpenParen'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Underscore = {ctor: 'Underscore'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Ampersand = {ctor: 'Ampersand'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Percent = {ctor: 'Percent'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Dollar = {ctor: 'Dollar'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Hash = {ctor: 'Hash'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$DoubleQuote = {ctor: 'DoubleQuote'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Exclamation = {ctor: 'Exclamation'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Circumflex = {ctor: 'Circumflex'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ScrollLock = {ctor: 'ScrollLock'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$NumLock = {ctor: 'NumLock'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F24 = {ctor: 'F24'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F23 = {ctor: 'F23'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F22 = {ctor: 'F22'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F21 = {ctor: 'F21'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F20 = {ctor: 'F20'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F19 = {ctor: 'F19'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F18 = {ctor: 'F18'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F17 = {ctor: 'F17'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F16 = {ctor: 'F16'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F15 = {ctor: 'F15'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F14 = {ctor: 'F14'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F13 = {ctor: 'F13'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F12 = {ctor: 'F12'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F11 = {ctor: 'F11'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F10 = {ctor: 'F10'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F9 = {ctor: 'F9'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F8 = {ctor: 'F8'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F7 = {ctor: 'F7'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F6 = {ctor: 'F6'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F5 = {ctor: 'F5'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F4 = {ctor: 'F4'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F3 = {ctor: 'F3'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F2 = {ctor: 'F2'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F1 = {ctor: 'F1'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Divide = {ctor: 'Divide'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Decimal = {ctor: 'Decimal'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Subtract = {ctor: 'Subtract'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Separator = {ctor: 'Separator'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Add = {ctor: 'Add'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Multiply = {ctor: 'Multiply'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad9 = {ctor: 'Numpad9'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad8 = {ctor: 'Numpad8'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad7 = {ctor: 'Numpad7'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad6 = {ctor: 'Numpad6'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad5 = {ctor: 'Numpad5'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad4 = {ctor: 'Numpad4'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad3 = {ctor: 'Numpad3'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad2 = {ctor: 'Numpad2'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad1 = {ctor: 'Numpad1'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad0 = {ctor: 'Numpad0'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Sleep = {ctor: 'Sleep'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ContextMenu = {ctor: 'ContextMenu'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Super = {ctor: 'Super'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharZ = {ctor: 'CharZ'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharY = {ctor: 'CharY'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharX = {ctor: 'CharX'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharW = {ctor: 'CharW'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharV = {ctor: 'CharV'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharU = {ctor: 'CharU'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharT = {ctor: 'CharT'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharS = {ctor: 'CharS'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharR = {ctor: 'CharR'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharQ = {ctor: 'CharQ'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharP = {ctor: 'CharP'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharO = {ctor: 'CharO'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharN = {ctor: 'CharN'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharM = {ctor: 'CharM'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharL = {ctor: 'CharL'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharK = {ctor: 'CharK'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharJ = {ctor: 'CharJ'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharI = {ctor: 'CharI'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharH = {ctor: 'CharH'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharG = {ctor: 'CharG'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharF = {ctor: 'CharF'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharE = {ctor: 'CharE'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharD = {ctor: 'CharD'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharC = {ctor: 'CharC'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharB = {ctor: 'CharB'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharA = {ctor: 'CharA'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$At = {ctor: 'At'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$QuestionMark = {ctor: 'QuestionMark'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$GreaterThan = {ctor: 'GreaterThan'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Equals = {ctor: 'Equals'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$LessThan = {ctor: 'LessThan'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Semicolon = {ctor: 'Semicolon'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Colon = {ctor: 'Colon'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number9 = {ctor: 'Number9'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number8 = {ctor: 'Number8'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number7 = {ctor: 'Number7'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number6 = {ctor: 'Number6'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number5 = {ctor: 'Number5'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number4 = {ctor: 'Number4'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number3 = {ctor: 'Number3'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number2 = {ctor: 'Number2'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number1 = {ctor: 'Number1'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number0 = {ctor: 'Number0'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Delete = {ctor: 'Delete'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Insert = {ctor: 'Insert'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$PrintScreen = {ctor: 'PrintScreen'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Execute = {ctor: 'Execute'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Print = {ctor: 'Print'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Select = {ctor: 'Select'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ArrowDown = {ctor: 'ArrowDown'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ArrowRight = {ctor: 'ArrowRight'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ArrowUp = {ctor: 'ArrowUp'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ArrowLeft = {ctor: 'ArrowLeft'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Home = {ctor: 'Home'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$End = {ctor: 'End'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$PageDown = {ctor: 'PageDown'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$PageUp = {ctor: 'PageUp'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Space = {ctor: 'Space'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ModeChange = {ctor: 'ModeChange'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Accept = {ctor: 'Accept'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$NonConvert = {ctor: 'NonConvert'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Convert = {ctor: 'Convert'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Escape = {ctor: 'Escape'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CapsLock = {ctor: 'CapsLock'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Pause = {ctor: 'Pause'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Alt = {ctor: 'Alt'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Control = {ctor: 'Control'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Shift = {ctor: 'Shift'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Enter = {ctor: 'Enter'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Clear = {ctor: 'Clear'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Tab = {ctor: 'Tab'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$BackSpace = {ctor: 'BackSpace'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Help = {ctor: 'Help'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Cancel = {ctor: 'Cancel'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$codeBook = _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 3, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Cancel}, - {ctor: '_Tuple2', _0: 6, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Help}, - {ctor: '_Tuple2', _0: 8, _1: _ohanhi$keyboard_extra$Keyboard_Extra$BackSpace}, - {ctor: '_Tuple2', _0: 9, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Tab}, - {ctor: '_Tuple2', _0: 12, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Clear}, - {ctor: '_Tuple2', _0: 13, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Enter}, - {ctor: '_Tuple2', _0: 16, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Shift}, - {ctor: '_Tuple2', _0: 17, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Control}, - {ctor: '_Tuple2', _0: 18, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Alt}, - {ctor: '_Tuple2', _0: 19, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Pause}, - {ctor: '_Tuple2', _0: 20, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CapsLock}, - {ctor: '_Tuple2', _0: 27, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Escape}, - {ctor: '_Tuple2', _0: 28, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Convert}, - {ctor: '_Tuple2', _0: 29, _1: _ohanhi$keyboard_extra$Keyboard_Extra$NonConvert}, - {ctor: '_Tuple2', _0: 30, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Accept}, - {ctor: '_Tuple2', _0: 31, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ModeChange}, - {ctor: '_Tuple2', _0: 32, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Space}, - {ctor: '_Tuple2', _0: 33, _1: _ohanhi$keyboard_extra$Keyboard_Extra$PageUp}, - {ctor: '_Tuple2', _0: 34, _1: _ohanhi$keyboard_extra$Keyboard_Extra$PageDown}, - {ctor: '_Tuple2', _0: 35, _1: _ohanhi$keyboard_extra$Keyboard_Extra$End}, - {ctor: '_Tuple2', _0: 36, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Home}, - {ctor: '_Tuple2', _0: 37, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ArrowLeft}, - {ctor: '_Tuple2', _0: 38, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ArrowUp}, - {ctor: '_Tuple2', _0: 39, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ArrowRight}, - {ctor: '_Tuple2', _0: 40, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ArrowDown}, - {ctor: '_Tuple2', _0: 41, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Select}, - {ctor: '_Tuple2', _0: 42, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Print}, - {ctor: '_Tuple2', _0: 43, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Execute}, - {ctor: '_Tuple2', _0: 44, _1: _ohanhi$keyboard_extra$Keyboard_Extra$PrintScreen}, - {ctor: '_Tuple2', _0: 45, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Insert}, - {ctor: '_Tuple2', _0: 46, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Delete}, - {ctor: '_Tuple2', _0: 48, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number0}, - {ctor: '_Tuple2', _0: 49, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number1}, - {ctor: '_Tuple2', _0: 50, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number2}, - {ctor: '_Tuple2', _0: 51, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number3}, - {ctor: '_Tuple2', _0: 52, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number4}, - {ctor: '_Tuple2', _0: 53, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number5}, - {ctor: '_Tuple2', _0: 54, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number6}, - {ctor: '_Tuple2', _0: 55, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number7}, - {ctor: '_Tuple2', _0: 56, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number8}, - {ctor: '_Tuple2', _0: 57, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number9}, - {ctor: '_Tuple2', _0: 58, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Colon}, - {ctor: '_Tuple2', _0: 59, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Semicolon}, - {ctor: '_Tuple2', _0: 60, _1: _ohanhi$keyboard_extra$Keyboard_Extra$LessThan}, - {ctor: '_Tuple2', _0: 61, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Equals}, - {ctor: '_Tuple2', _0: 62, _1: _ohanhi$keyboard_extra$Keyboard_Extra$GreaterThan}, - {ctor: '_Tuple2', _0: 63, _1: _ohanhi$keyboard_extra$Keyboard_Extra$QuestionMark}, - {ctor: '_Tuple2', _0: 64, _1: _ohanhi$keyboard_extra$Keyboard_Extra$At}, - {ctor: '_Tuple2', _0: 65, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharA}, - {ctor: '_Tuple2', _0: 66, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharB}, - {ctor: '_Tuple2', _0: 67, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharC}, - {ctor: '_Tuple2', _0: 68, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharD}, - {ctor: '_Tuple2', _0: 69, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharE}, - {ctor: '_Tuple2', _0: 70, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharF}, - {ctor: '_Tuple2', _0: 71, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharG}, - {ctor: '_Tuple2', _0: 72, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharH}, - {ctor: '_Tuple2', _0: 73, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharI}, - {ctor: '_Tuple2', _0: 74, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharJ}, - {ctor: '_Tuple2', _0: 75, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharK}, - {ctor: '_Tuple2', _0: 76, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharL}, - {ctor: '_Tuple2', _0: 77, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharM}, - {ctor: '_Tuple2', _0: 78, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharN}, - {ctor: '_Tuple2', _0: 79, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharO}, - {ctor: '_Tuple2', _0: 80, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharP}, - {ctor: '_Tuple2', _0: 81, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharQ}, - {ctor: '_Tuple2', _0: 82, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharR}, - {ctor: '_Tuple2', _0: 83, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharS}, - {ctor: '_Tuple2', _0: 84, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharT}, - {ctor: '_Tuple2', _0: 85, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharU}, - {ctor: '_Tuple2', _0: 86, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharV}, - {ctor: '_Tuple2', _0: 87, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharW}, - {ctor: '_Tuple2', _0: 88, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharX}, - {ctor: '_Tuple2', _0: 89, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharY}, - {ctor: '_Tuple2', _0: 90, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharZ}, - {ctor: '_Tuple2', _0: 91, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Super}, - {ctor: '_Tuple2', _0: 93, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ContextMenu}, - {ctor: '_Tuple2', _0: 95, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Sleep}, - {ctor: '_Tuple2', _0: 96, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad0}, - {ctor: '_Tuple2', _0: 97, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad1}, - {ctor: '_Tuple2', _0: 98, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad2}, - {ctor: '_Tuple2', _0: 99, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad3}, - {ctor: '_Tuple2', _0: 100, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad4}, - {ctor: '_Tuple2', _0: 101, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad5}, - {ctor: '_Tuple2', _0: 102, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad6}, - {ctor: '_Tuple2', _0: 103, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad7}, - {ctor: '_Tuple2', _0: 104, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad8}, - {ctor: '_Tuple2', _0: 105, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad9}, - {ctor: '_Tuple2', _0: 106, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Multiply}, - {ctor: '_Tuple2', _0: 107, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Add}, - {ctor: '_Tuple2', _0: 108, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Separator}, - {ctor: '_Tuple2', _0: 109, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Subtract}, - {ctor: '_Tuple2', _0: 110, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Decimal}, - {ctor: '_Tuple2', _0: 111, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Divide}, - {ctor: '_Tuple2', _0: 112, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F1}, - {ctor: '_Tuple2', _0: 113, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F2}, - {ctor: '_Tuple2', _0: 114, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F3}, - {ctor: '_Tuple2', _0: 115, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F4}, - {ctor: '_Tuple2', _0: 116, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F5}, - {ctor: '_Tuple2', _0: 117, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F6}, - {ctor: '_Tuple2', _0: 118, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F7}, - {ctor: '_Tuple2', _0: 119, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F8}, - {ctor: '_Tuple2', _0: 120, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F9}, - {ctor: '_Tuple2', _0: 121, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F10}, - {ctor: '_Tuple2', _0: 122, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F11}, - {ctor: '_Tuple2', _0: 123, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F12}, - {ctor: '_Tuple2', _0: 124, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F13}, - {ctor: '_Tuple2', _0: 125, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F14}, - {ctor: '_Tuple2', _0: 126, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F15}, - {ctor: '_Tuple2', _0: 127, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F16}, - {ctor: '_Tuple2', _0: 128, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F17}, - {ctor: '_Tuple2', _0: 129, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F18}, - {ctor: '_Tuple2', _0: 130, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F19}, - {ctor: '_Tuple2', _0: 131, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F20}, - {ctor: '_Tuple2', _0: 132, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F21}, - {ctor: '_Tuple2', _0: 133, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F22}, - {ctor: '_Tuple2', _0: 134, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F23}, - {ctor: '_Tuple2', _0: 135, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F24}, - {ctor: '_Tuple2', _0: 144, _1: _ohanhi$keyboard_extra$Keyboard_Extra$NumLock}, - {ctor: '_Tuple2', _0: 145, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ScrollLock}, - {ctor: '_Tuple2', _0: 160, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Circumflex}, - {ctor: '_Tuple2', _0: 161, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Exclamation}, - {ctor: '_Tuple2', _0: 162, _1: _ohanhi$keyboard_extra$Keyboard_Extra$DoubleQuote}, - {ctor: '_Tuple2', _0: 163, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Hash}, - {ctor: '_Tuple2', _0: 164, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Dollar}, - {ctor: '_Tuple2', _0: 165, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Percent}, - {ctor: '_Tuple2', _0: 166, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Ampersand}, - {ctor: '_Tuple2', _0: 167, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Underscore}, - {ctor: '_Tuple2', _0: 168, _1: _ohanhi$keyboard_extra$Keyboard_Extra$OpenParen}, - {ctor: '_Tuple2', _0: 169, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CloseParen}, - {ctor: '_Tuple2', _0: 170, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Asterisk}, - {ctor: '_Tuple2', _0: 171, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Plus}, - {ctor: '_Tuple2', _0: 172, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Pipe}, - {ctor: '_Tuple2', _0: 173, _1: _ohanhi$keyboard_extra$Keyboard_Extra$HyphenMinus}, - {ctor: '_Tuple2', _0: 174, _1: _ohanhi$keyboard_extra$Keyboard_Extra$OpenCurlyBracket}, - {ctor: '_Tuple2', _0: 175, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CloseCurlyBracket}, - {ctor: '_Tuple2', _0: 176, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Tilde}, - {ctor: '_Tuple2', _0: 181, _1: _ohanhi$keyboard_extra$Keyboard_Extra$VolumeMute}, - {ctor: '_Tuple2', _0: 182, _1: _ohanhi$keyboard_extra$Keyboard_Extra$VolumeDown}, - {ctor: '_Tuple2', _0: 183, _1: _ohanhi$keyboard_extra$Keyboard_Extra$VolumeUp}, - {ctor: '_Tuple2', _0: 186, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Semicolon}, - {ctor: '_Tuple2', _0: 187, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Equals}, - {ctor: '_Tuple2', _0: 188, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Comma}, - {ctor: '_Tuple2', _0: 189, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Minus}, - {ctor: '_Tuple2', _0: 190, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Period}, - {ctor: '_Tuple2', _0: 191, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Slash}, - {ctor: '_Tuple2', _0: 192, _1: _ohanhi$keyboard_extra$Keyboard_Extra$BackQuote}, - {ctor: '_Tuple2', _0: 219, _1: _ohanhi$keyboard_extra$Keyboard_Extra$OpenBracket}, - {ctor: '_Tuple2', _0: 220, _1: _ohanhi$keyboard_extra$Keyboard_Extra$BackSlash}, - {ctor: '_Tuple2', _0: 221, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CloseBracket}, - {ctor: '_Tuple2', _0: 222, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Quote}, - {ctor: '_Tuple2', _0: 224, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Meta}, - {ctor: '_Tuple2', _0: 225, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Altgr} - ]); -var _ohanhi$keyboard_extra$Keyboard_Extra$toCode = function (key) { - return A2( - _elm_lang$core$Maybe$withDefault, - 0, - _elm_lang$core$List$head( - A2( - _elm_lang$core$List$map, - _elm_lang$core$Basics$fst, - A2( - _elm_lang$core$List$filter, - function (_p6) { - return A2( - F2( - function (x, y) { - return _elm_lang$core$Native_Utils.eq(x, y); - }), - key, - _elm_lang$core$Basics$snd(_p6)); - }, - _ohanhi$keyboard_extra$Keyboard_Extra$codeBook)))); -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$isPressed = F2( - function (key, model) { - return A2( - _elm_lang$core$Set$member, - _ohanhi$keyboard_extra$Keyboard_Extra$toCode(key), - model.keysDown); - }); -var _ohanhi$keyboard_extra$Keyboard_Extra$codeDict = _elm_lang$core$Dict$fromList(_ohanhi$keyboard_extra$Keyboard_Extra$codeBook); -var _ohanhi$keyboard_extra$Keyboard_Extra$fromCode = function (code) { - return A2( - _elm_lang$core$Maybe$withDefault, - _ohanhi$keyboard_extra$Keyboard_Extra$Other, - A2(_elm_lang$core$Dict$get, code, _ohanhi$keyboard_extra$Keyboard_Extra$codeDict)); -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$pressedDown = function (model) { - return A2( - _elm_lang$core$List$map, - _ohanhi$keyboard_extra$Keyboard_Extra$fromCode, - _elm_lang$core$Set$toList(model.keysDown)); -}; - -var _user$project$Tiles$imgFromSpriteSheet = F2( - function (spriteSheet, _p0) { - var _p1 = _p0; - return A2( - _elm_lang$html$Html$img, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$src('empty.png'), - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'width', _1: '32px'}, - {ctor: '_Tuple2', _0: 'height', _1: '32px'}, - { - ctor: '_Tuple2', - _0: 'background-image', - _1: A2( - _elm_lang$core$Basics_ops['++'], - 'url(', - A2(_elm_lang$core$Basics_ops['++'], spriteSheet, ')')) - }, - { - ctor: '_Tuple2', - _0: 'background-position', - _1: A2( - _elm_lang$core$Basics_ops['++'], - '-', - A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p1._0), - A2( - _elm_lang$core$Basics_ops['++'], - 'px -', - A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p1._1), - 'px')))) - } - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [])); - }); -var _user$project$Tiles$tileFromSpriteSheet = _user$project$Tiles$imgFromSpriteSheet('terrain.png'); -var _user$project$Tiles$grass = _user$project$Tiles$tileFromSpriteSheet( - {ctor: '_Tuple2', _0: 0, _1: 0}); -var _user$project$Tiles$vertPath = _user$project$Tiles$tileFromSpriteSheet( - {ctor: '_Tuple2', _0: 32, _1: 0}); -var _user$project$Tiles$crossPath = _user$project$Tiles$tileFromSpriteSheet( - {ctor: '_Tuple2', _0: 64, _1: 0}); -var _user$project$Tiles$horzPath = _user$project$Tiles$tileFromSpriteSheet( - {ctor: '_Tuple2', _0: 0, _1: 32}); -var _user$project$Tiles$tPath = _user$project$Tiles$tileFromSpriteSheet( - {ctor: '_Tuple2', _0: 32, _1: 32}); - -var _user$project$Map$column = function (divs) { - return A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - []), - divs); -}; -var _user$project$Map$row = function (divs) { - return A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'height', _1: '32px'} - ])) - ]), - divs); -}; -var _user$project$Map$_p0 = {ctor: '_Tuple2', _0: 224, _1: 224}; -var _user$project$Map$width = _user$project$Map$_p0._0; -var _user$project$Map$height = _user$project$Map$_p0._1; -var _user$project$Map$_p1 = {ctor: '_Tuple2', _0: _user$project$Map$width / 2, _1: _user$project$Map$height / 2}; -var _user$project$Map$halfWidth = _user$project$Map$_p1._0; -var _user$project$Map$halfHeight = _user$project$Map$_p1._1; -var _user$project$Map$_p2 = {ctor: '_Tuple2', _0: 288, _1: 288}; -var _user$project$Map$fullMapWidth = _user$project$Map$_p2._0; -var _user$project$Map$fullMapHeight = _user$project$Map$_p2._1; -var _user$project$Map$_p3 = {ctor: '_Tuple2', _0: _user$project$Map$fullMapWidth - _user$project$Map$width, _1: _user$project$Map$fullMapHeight - _user$project$Map$height}; -var _user$project$Map$overflowWidth = _user$project$Map$_p3._0; -var _user$project$Map$overflowHeight = _user$project$Map$_p3._1; -var _user$project$Map$init = { - top: _elm_lang$core$Basics$round(0 - (_user$project$Map$overflowHeight / 2)), - left: _elm_lang$core$Basics$round(0 - (_user$project$Map$overflowWidth / 2)) -}; -var _user$project$Map$update = F2( - function (action, model) { - var _p4 = action; - if (_p4.ctor === 'VerticalScroll') { - return _elm_lang$core$Native_Utils.update( - model, - { - top: A3(_elm_lang$core$Basics$clamp, 0 - _user$project$Map$overflowHeight, 0, model.top + _p4._0) - }); - } else { - return _elm_lang$core$Native_Utils.update( - model, - { - left: A3(_elm_lang$core$Basics$clamp, 0 - _user$project$Map$overflowWidth, 0, model.left - _p4._0) - }); - } - }); -var _user$project$Map$fullMap = function (model) { - return A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - { - ctor: '_Tuple2', - _0: 'width', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Map$fullMapWidth), - 'px') - }, - { - ctor: '_Tuple2', - _0: 'height', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Map$fullMapHeight), - 'px') - }, - {ctor: '_Tuple2', _0: 'position', _1: 'relative'}, - { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(model.top), - 'px') - }, - { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(model.left), - 'px') - } - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [ - _user$project$Map$column( - _elm_lang$core$Native_List.fromArray( - [ - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$crossPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])) - ])) - ])); -}; -var _user$project$Map$view = function (model) { - return A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - { - ctor: '_Tuple2', - _0: 'width', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Map$width), - 'px') - }, - { - ctor: '_Tuple2', - _0: 'height', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Map$height), - 'px') - }, - {ctor: '_Tuple2', _0: 'overflow', _1: 'hidden'}, - {ctor: '_Tuple2', _0: 'border', _1: '2px solid black'} - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [ - _user$project$Map$fullMap(model) - ])); -}; -var _user$project$Map$Model = F2( - function (a, b) { - return {top: a, left: b}; - }); -var _user$project$Map$HorizontalScroll = function (a) { - return {ctor: 'HorizontalScroll', _0: a}; -}; -var _user$project$Map$VerticalScroll = function (a) { - return {ctor: 'VerticalScroll', _0: a}; -}; - -var _user$project$Sprite$imgFromSpriteSheet = F2( - function (spriteSheet, _p0) { - var _p1 = _p0; - return A2( - _elm_lang$html$Html$img, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$src('empty.png'), - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'width', _1: '32px'}, - {ctor: '_Tuple2', _0: 'height', _1: '32px'}, - { - ctor: '_Tuple2', - _0: 'background-image', - _1: A2( - _elm_lang$core$Basics_ops['++'], - 'url(', - A2(_elm_lang$core$Basics_ops['++'], spriteSheet, ')')) - }, - { - ctor: '_Tuple2', - _0: 'background-position', - _1: A2( - _elm_lang$core$Basics_ops['++'], - '-', - A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p1._0), - A2( - _elm_lang$core$Basics_ops['++'], - 'px -', - A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p1._1), - 'px')))) - } - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [])); - }); -var _user$project$Sprite$beeFromSpriteSheet = _user$project$Sprite$imgFromSpriteSheet('bee.png'); -var _user$project$Sprite$northWestBee1 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 64, _1: 0}); -var _user$project$Sprite$northWestBee2 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 0, _1: 32}); -var _user$project$Sprite$northEastBee1 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 0, _1: 0}); -var _user$project$Sprite$northEastBee2 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 32, _1: 0}); -var _user$project$Sprite$southWestBee1 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 32, _1: 32}); -var _user$project$Sprite$southWestBee2 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 64, _1: 32}); -var _user$project$Sprite$southEastBee1 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 0, _1: 64}); -var _user$project$Sprite$southEastBee2 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 32, _1: 64}); -var _user$project$Sprite$view = function (_p2) { - var _p3 = _p2; - var beeImage = function () { - var _p4 = {ctor: '_Tuple3', _0: _p3.dir, _1: _p3.orientation, _2: _p3.frame}; - _v2_8: - do { - if (_p4._0.ctor === 'Left') { - if (_p4._1.ctor === 'Toward') { - switch (_p4._2) { - case 0: - return _user$project$Sprite$southWestBee1; - case 1: - return _user$project$Sprite$southWestBee2; - default: - break _v2_8; - } - } else { - switch (_p4._2) { - case 0: - return _user$project$Sprite$northWestBee1; - case 1: - return _user$project$Sprite$northWestBee2; - default: - break _v2_8; - } - } - } else { - if (_p4._1.ctor === 'Toward') { - switch (_p4._2) { - case 0: - return _user$project$Sprite$southEastBee1; - case 1: - return _user$project$Sprite$southEastBee2; - default: - break _v2_8; - } - } else { - switch (_p4._2) { - case 0: - return _user$project$Sprite$northEastBee1; - case 1: - return _user$project$Sprite$northEastBee2; - default: - break _v2_8; - } - } - } - } while(false); - return _user$project$Sprite$southWestBee1; - }(); - return A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'width', _1: '32px'}, - {ctor: '_Tuple2', _0: 'height', _1: '32px'}, - {ctor: '_Tuple2', _0: 'position', _1: 'relative'}, - { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - '-', - A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p3.y), - 'px')) - }, - { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p3.x), - 'px') - } - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [beeImage])); -}; -var _user$project$Sprite$updateFrame = function (model) { - return _elm_lang$core$Native_Utils.update( - model, - { - frame: A2(_elm_lang$core$Basics_ops['%'], model.frame + 1, 2) - }); -}; -var _user$project$Sprite$updatePosition = F2( - function (dt, _p5) { - var _p6 = _p5; - return _elm_lang$core$Native_Utils.update( - _p6, - { - x: A3(_elm_lang$core$Basics$clamp, 0, _user$project$Map$width - 32, _p6.x + (dt * _p6.vx)), - y: A3(_elm_lang$core$Basics$clamp, 32, _user$project$Map$height, _p6.y + (dt * _p6.vy)) - }); - }); -var _user$project$Sprite$newVelocity = F2( - function (_p7, model) { - var _p8 = _p7; - var _p10 = _p8.y; - var _p9 = _p8.x; - var scale = 0.2; - var newVel = function (n) { - return (_elm_lang$core$Native_Utils.eq(_p9, 0) || _elm_lang$core$Native_Utils.eq(_p10, 0)) ? (scale * _elm_lang$core$Basics$toFloat(n)) : ((scale * _elm_lang$core$Basics$toFloat(n)) / _elm_lang$core$Basics$sqrt(2)); - }; - return _elm_lang$core$Native_Utils.update( - model, - { - vx: newVel(_p9), - vy: newVel(_p10) - }); - }); -var _user$project$Sprite$Model = F7( - function (a, b, c, d, e, f, g) { - return {x: a, y: b, vx: c, vy: d, dir: e, orientation: f, frame: g}; - }); -var _user$project$Sprite$Right = {ctor: 'Right'}; -var _user$project$Sprite$Left = {ctor: 'Left'}; -var _user$project$Sprite$Away = {ctor: 'Away'}; -var _user$project$Sprite$Toward = {ctor: 'Toward'}; -var _user$project$Sprite$init = A7(_user$project$Sprite$Model, _user$project$Map$halfWidth, _user$project$Map$halfHeight, 0, 0, _user$project$Sprite$Left, _user$project$Sprite$Toward, 0); -var _user$project$Sprite$setDirection = F2( - function (_p11, model) { - var _p12 = _p11; - var _p14 = _p12.y; - var _p13 = _p12.x; - return _elm_lang$core$Native_Utils.update( - model, - { - orientation: (_elm_lang$core$Native_Utils.cmp(_p14, 0) < 0) ? _user$project$Sprite$Toward : ((_elm_lang$core$Native_Utils.cmp(_p14, 0) > 0) ? _user$project$Sprite$Away : model.orientation), - dir: (_elm_lang$core$Native_Utils.cmp(_p13, 0) > 0) ? _user$project$Sprite$Right : ((_elm_lang$core$Native_Utils.cmp(_p13, 0) < 0) ? _user$project$Sprite$Left : model.dir) - }); - }); -var _user$project$Sprite$update = F2( - function (msg, model) { - var _p15 = msg; - switch (_p15.ctor) { - case 'Nothing': - return model; - case 'Direction': - var _p16 = _p15._0; - return A2( - _user$project$Sprite$setDirection, - _p16, - A2(_user$project$Sprite$newVelocity, _p16, model)); - default: - return _user$project$Sprite$updateFrame( - A2(_user$project$Sprite$updatePosition, _p15._0, model)); - } - }); -var _user$project$Sprite$Nothing = {ctor: 'Nothing'}; -var _user$project$Sprite$Direction = function (a) { - return {ctor: 'Direction', _0: a}; -}; -var _user$project$Sprite$Tick = function (a) { - return {ctor: 'Tick', _0: a}; -}; - -var _user$project$Main$updateMap = F2( - function (dt, model) { - var _p0 = {ctor: '_Tuple4', _0: 0, _1: 0, _2: _user$project$Map$width, _3: _user$project$Map$height}; - var bottomWall = _p0._0; - var leftWall = _p0._1; - var rightWall = _p0._2; - var topWall = _p0._3; - var _p1 = {ctor: '_Tuple5', _0: model.sprite.x, _1: model.sprite.y, _2: model.sprite.vx, _3: model.sprite.vy, _4: model.map}; - var x = _p1._0; - var y = _p1._1; - var vx = _p1._2; - var vy = _p1._3; - var map = _p1._4; - var _p2 = { - ctor: '_Tuple4', - _0: _elm_lang$core$Native_Utils.cmp(vy, 0) > 0, - _1: _elm_lang$core$Native_Utils.cmp(vy, 0) < 0, - _2: _elm_lang$core$Native_Utils.cmp(vx, 0) > 0, - _3: _elm_lang$core$Native_Utils.cmp(vx, 0) < 0 - }; - var movingUp = _p2._0; - var movingDown = _p2._1; - var movingRight = _p2._2; - var movingLeft = _p2._3; - var action = (_elm_lang$core$Native_Utils.eq(x, leftWall) && movingLeft) ? _user$project$Map$HorizontalScroll( - _elm_lang$core$Basics$round(dt * vx)) : ((_elm_lang$core$Native_Utils.eq(x + 32, rightWall) && movingRight) ? _user$project$Map$HorizontalScroll( - _elm_lang$core$Basics$round(dt * vx)) : ((_elm_lang$core$Native_Utils.eq(y, topWall) && movingUp) ? _user$project$Map$VerticalScroll( - _elm_lang$core$Basics$round(dt * vy)) : ((_elm_lang$core$Native_Utils.eq(y - 32, bottomWall) && movingDown) ? _user$project$Map$VerticalScroll( - _elm_lang$core$Basics$round(dt * vy)) : _user$project$Map$HorizontalScroll(0)))); - return _elm_lang$core$Native_Utils.update( - model, - { - map: A2(_user$project$Map$update, action, map) - }); - }); -var _user$project$Main$updateSprite = F2( - function (msg, model) { - var sprite$ = A2(_user$project$Sprite$update, msg, model.sprite); - return _elm_lang$core$Native_Utils.update( - model, - {sprite: sprite$}); - }); -var _user$project$Main$update = F2( - function (msg, model) { - var _p3 = msg; - switch (_p3.ctor) { - case 'Tick': - var _p4 = _p3._0; - return { - ctor: '_Tuple2', - _0: A2( - _user$project$Main$updateSprite, - _user$project$Sprite$Tick(_p4), - A2(_user$project$Main$updateMap, _p4, model)), - _1: _elm_lang$core$Platform_Cmd$none - }; - case 'KeyPress': - var _p5 = A2(_ohanhi$keyboard_extra$Keyboard_Extra$update, _p3._0, model.keyboard); - var keyboard = _p5._0; - var direction = _ohanhi$keyboard_extra$Keyboard_Extra$arrows(keyboard); - return { - ctor: '_Tuple2', - _0: A2( - _user$project$Main$updateSprite, - _user$project$Sprite$Direction(direction), - _elm_lang$core$Native_Utils.update( - model, - {keyboard: keyboard})), - _1: _elm_lang$core$Platform_Cmd$none - }; - default: - return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; - } - }); -var _user$project$Main$Model = F3( - function (a, b, c) { - return {sprite: a, map: b, keyboard: c}; - }); -var _user$project$Main$initialModel = function (keyboard) { - return A3(_user$project$Main$Model, _user$project$Sprite$init, _user$project$Map$init, keyboard); -}; -var _user$project$Main$Nothing = {ctor: 'Nothing'}; -var _user$project$Main$view = function (model) { - var bee = A2( - _elm_lang$html$Html_App$map, - function (_p6) { - return _user$project$Main$Nothing; - }, - _user$project$Sprite$view(model.sprite)); - var inner = A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'margin-left', _1: 'auto'}, - {ctor: '_Tuple2', _0: 'margin-right', _1: 'auto'}, - { - ctor: '_Tuple2', - _0: 'width', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Map$width), - 'px') - } - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [ - A2( - _elm_lang$html$Html_App$map, - function (_p7) { - return _user$project$Main$Nothing; - }, - _user$project$Map$view(model.map)), - bee - ])); - var middle = A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'display', _1: 'table-cell'}, - {ctor: '_Tuple2', _0: 'vertical-align', _1: 'middle'} - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [inner])); - var outer = A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'display', _1: 'table'}, - {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - {ctor: '_Tuple2', _0: 'height', _1: '100%'}, - {ctor: '_Tuple2', _0: 'width', _1: '100%'} - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [middle])); - return outer; -}; -var _user$project$Main$KeyPress = function (a) { - return {ctor: 'KeyPress', _0: a}; -}; -var _user$project$Main$Tick = function (a) { - return {ctor: 'Tick', _0: a}; -}; -var _user$project$Main$subs = _elm_lang$core$Platform_Sub$batch( - _elm_lang$core$Native_List.fromArray( - [ - A2(_elm_lang$core$Platform_Sub$map, _user$project$Main$KeyPress, _ohanhi$keyboard_extra$Keyboard_Extra$subscriptions), - _elm_lang$animation_frame$AnimationFrame$diffs(_user$project$Main$Tick) - ])); -var _user$project$Main$main = { - main: function () { - var _p8 = _ohanhi$keyboard_extra$Keyboard_Extra$init; - var initialKeyboard = _p8._0; - var keyboardCmd = _p8._1; - return _elm_lang$html$Html_App$program( - { - init: { - ctor: '_Tuple2', - _0: _user$project$Main$initialModel(initialKeyboard), - _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$KeyPress, keyboardCmd) - }, - update: _user$project$Main$update, - subscriptions: _elm_lang$core$Basics$always(_user$project$Main$subs), - view: _user$project$Main$view - }); - }() -}; - -var Elm = {}; -Elm['Main'] = Elm['Main'] || {}; -_elm_lang$core$Native_Platform.addPublicModule(Elm['Main'], 'Main', typeof _user$project$Main$main === 'undefined' ? null : _user$project$Main$main); - -if (typeof define === "function" && define['amd']) -{ - define([], function() { return Elm; }); - return; -} - -if (typeof module === "object") -{ - module['exports'] = Elm; - return; -} - -var globalElm = this['Elm']; -if (typeof globalElm === "undefined") -{ - this['Elm'] = Elm; - return; -} - -for (var publicModule in Elm) -{ - if (publicModule in globalElm) - { - throw new Error('There are two Elm modules called `' + publicModule + '` on this page! Rename one of them.'); - } - globalElm[publicModule] = Elm[publicModule]; -} - -}).call(this); - diff --git a/bee.png b/bee.png deleted file mode 100644 index 6c0e8fe..0000000 Binary files a/bee.png and /dev/null differ diff --git a/bin/build b/bin/build deleted file mode 100755 index 3da3660..0000000 --- a/bin/build +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -elm-make main.elm --warn --output bee.js diff --git a/bin/live.sh b/bin/live.sh new file mode 100755 index 0000000..460eed2 --- /dev/null +++ b/bin/live.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +elm-live Main.elm --output elm.js diff --git a/dictionary/French.elm b/dictionary/French.elm new file mode 100644 index 0000000..8540e6f --- /dev/null +++ b/dictionary/French.elm @@ -0,0 +1,88 @@ +module Dictionary.French exposing (..) + +import Dict exposing (Dict) +import String.Extra exposing (replace) + + +type alias Word = + String + + +type alias Audio = + String + + +dictionary : Dict String Word +dictionary = + List.foldl Dict.union + Dict.empty + [ family, colors, places ] + + +family : Dict String Word +family = + Dict.fromList + [ ( "mom", "maman" ) + , ( "dad", "papa" ) + ] + + +colors : Dict String Word +colors = + Dict.fromList + [ ( "red", "pula" ) + , ( "orange", "kahel" ) + , ( "yellow", "dilaw" ) + , ( "green", "berde" ) + , ( "blue", "asul" ) + , ( "purple", "lila" ) + , ( "black", "itim" ) + , ( "white", "puti" ) + ] + + +places : Dict String Word +places = + Dict.fromList + [ ( "art store", "magasin d'art" ) + , ( "grocery store", "épicerie" ) + ] + + +wordToString : Word -> String +wordToString str = + str + + +wordAudio : Word -> String +wordAudio str = + audioFile (replace "ú" "u" str) + + +findWord : String -> Word +findWord original = + Dict.get (String.toLower original) dictionary + |> Maybe.withDefault original + + +translate : String -> String +translate word = + findWord word |> wordToString + + +audio : String -> String +audio word = + findWord word |> wordAudio + + + +-- HELPERS + + +audioDir = + "audio/french/" + + +audioFile : String -> String +audioFile file = + audioDir ++ file ++ ".mp3" diff --git a/dictionary/Spanish.elm b/dictionary/Spanish.elm new file mode 100644 index 0000000..2164e2c --- /dev/null +++ b/dictionary/Spanish.elm @@ -0,0 +1,88 @@ +module Dictionary.Spanish exposing (..) + +import Dict exposing (Dict) +import String.Extra exposing (replace) + + +type alias Word = + String + + +type alias Audio = + String + + +dictionary : Dict String Word +dictionary = + List.foldl Dict.union + Dict.empty + [ family, colors, places ] + + +family : Dict String Word +family = + Dict.fromList + [ ( "mom", "mamá" ) + , ( "dad", "papá" ) + ] + + +colors : Dict String Word +colors = + Dict.fromList + [ ( "red", "rojo" ) + , ( "orange", "naranja" ) + , ( "yellow", "amarillo" ) + , ( "green", "verde" ) + , ( "blue", "azul" ) + , ( "purple", "púrpura" ) + , ( "black", "negro" ) + , ( "white", "blanco" ) + ] + + +places : Dict String Word +places = + Dict.fromList + [ ( "art store", "tienda de arte" ) + , ( "grocery store", "el mercado" ) + ] + + +wordToString : Word -> String +wordToString str = + str + + +wordAudio : Word -> String +wordAudio str = + audioFile str + + +findWord : String -> Word +findWord original = + Dict.get (String.toLower original) dictionary + |> Maybe.withDefault original + + +translate : String -> String +translate word = + findWord word |> wordToString + + +audio : String -> String +audio word = + findWord word |> wordAudio + + + +-- HELPERS + + +audioDir = + "audio/spanish/" + + +audioFile : String -> String +audioFile file = + audioDir ++ file ++ ".mp3" diff --git a/dictionary/Translator.elm b/dictionary/Translator.elm new file mode 100644 index 0000000..7ee74ca --- /dev/null +++ b/dictionary/Translator.elm @@ -0,0 +1,7 @@ +module Dictionary.Translator exposing (..) + + +type alias Translator = + { translate : String -> String + , audio : String -> String + } diff --git a/elm-package.json b/elm-package.json index 1cc59e5..dfc5aca 100644 --- a/elm-package.json +++ b/elm-package.json @@ -8,13 +8,19 @@ ], "exposed-modules": [], "dependencies": { - "elm-lang/animation-frame": "1.0.0 <= v < 2.0.0", - "elm-lang/core": "4.0.5 <= v < 5.0.0", - "elm-lang/html": "1.1.0 <= v < 2.0.0", - "elm-lang/keyboard": "1.0.0 <= v < 2.0.0", - "elm-lang/window": "1.0.0 <= v < 2.0.0", - "evancz/elm-markdown": "3.0.0 <= v < 4.0.0", - "ohanhi/keyboard-extra": "1.1.0 <= v < 2.0.0" + "eeue56/elm-all-dict": "2.0.1 <= v < 3.0.0", + "elm-community/linear-algebra": "3.1.0 <= v < 4.0.0", + "elm-community/list-extra": "6.1.0 <= v < 7.0.0", + "elm-community/random-extra": "2.0.0 <= v < 3.0.0", + "elm-community/string-extra": "1.3.3 <= v < 2.0.0", + "elm-lang/animation-frame": "1.0.1 <= v < 2.0.0", + "elm-lang/core": "5.1.1 <= v < 6.0.0", + "elm-lang/html": "2.0.0 <= v < 3.0.0", + "elm-lang/mouse": "1.0.1 <= v < 2.0.0", + "elm-lang/window": "1.0.1 <= v < 2.0.0", + "mgold/elm-animation": "1.0.5 <= v < 2.0.0", + "rtfeldman/elm-css": "8.2.0 <= v < 9.0.0", + "wernerdegroot/listzipper": "3.0.0 <= v < 4.0.0" }, - "elm-version": "0.17.0 <= v < 0.18.0" -} \ No newline at end of file + "elm-version": "0.18.0 <= v < 0.19.0" +} diff --git a/elm.js b/elm.js new file mode 100644 index 0000000..3d11884 --- /dev/null +++ b/elm.js @@ -0,0 +1,17407 @@ + +(function() { +'use strict'; + +function F2(fun) +{ + function wrapper(a) { return function(b) { return fun(a,b); }; } + wrapper.arity = 2; + wrapper.func = fun; + return wrapper; +} + +function F3(fun) +{ + function wrapper(a) { + return function(b) { return function(c) { return fun(a, b, c); }; }; + } + wrapper.arity = 3; + wrapper.func = fun; + return wrapper; +} + +function F4(fun) +{ + function wrapper(a) { return function(b) { return function(c) { + return function(d) { return fun(a, b, c, d); }; }; }; + } + wrapper.arity = 4; + wrapper.func = fun; + return wrapper; +} + +function F5(fun) +{ + function wrapper(a) { return function(b) { return function(c) { + return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; }; + } + wrapper.arity = 5; + wrapper.func = fun; + return wrapper; +} + +function F6(fun) +{ + function wrapper(a) { return function(b) { return function(c) { + return function(d) { return function(e) { return function(f) { + return fun(a, b, c, d, e, f); }; }; }; }; }; + } + wrapper.arity = 6; + wrapper.func = fun; + return wrapper; +} + +function F7(fun) +{ + function wrapper(a) { return function(b) { return function(c) { + return function(d) { return function(e) { return function(f) { + return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; }; + } + wrapper.arity = 7; + wrapper.func = fun; + return wrapper; +} + +function F8(fun) +{ + function wrapper(a) { return function(b) { return function(c) { + return function(d) { return function(e) { return function(f) { + return function(g) { return function(h) { + return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; }; + } + wrapper.arity = 8; + wrapper.func = fun; + return wrapper; +} + +function F9(fun) +{ + function wrapper(a) { return function(b) { return function(c) { + return function(d) { return function(e) { return function(f) { + return function(g) { return function(h) { return function(i) { + return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; }; + } + wrapper.arity = 9; + wrapper.func = fun; + return wrapper; +} + +function A2(fun, a, b) +{ + return fun.arity === 2 + ? fun.func(a, b) + : fun(a)(b); +} +function A3(fun, a, b, c) +{ + return fun.arity === 3 + ? fun.func(a, b, c) + : fun(a)(b)(c); +} +function A4(fun, a, b, c, d) +{ + return fun.arity === 4 + ? fun.func(a, b, c, d) + : fun(a)(b)(c)(d); +} +function A5(fun, a, b, c, d, e) +{ + return fun.arity === 5 + ? fun.func(a, b, c, d, e) + : fun(a)(b)(c)(d)(e); +} +function A6(fun, a, b, c, d, e, f) +{ + return fun.arity === 6 + ? fun.func(a, b, c, d, e, f) + : fun(a)(b)(c)(d)(e)(f); +} +function A7(fun, a, b, c, d, e, f, g) +{ + return fun.arity === 7 + ? fun.func(a, b, c, d, e, f, g) + : fun(a)(b)(c)(d)(e)(f)(g); +} +function A8(fun, a, b, c, d, e, f, g, h) +{ + return fun.arity === 8 + ? fun.func(a, b, c, d, e, f, g, h) + : fun(a)(b)(c)(d)(e)(f)(g)(h); +} +function A9(fun, a, b, c, d, e, f, g, h, i) +{ + return fun.arity === 9 + ? fun.func(a, b, c, d, e, f, g, h, i) + : fun(a)(b)(c)(d)(e)(f)(g)(h)(i); +} + +//import Native.Utils // + +var _elm_lang$core$Native_Basics = function() { + +function div(a, b) +{ + return (a / b) | 0; +} +function rem(a, b) +{ + return a % b; +} +function mod(a, b) +{ + if (b === 0) + { + throw new Error('Cannot perform mod 0. Division by zero error.'); + } + var r = a % b; + var m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r + b) : -mod(-a, -b)); + + return m === b ? 0 : m; +} +function logBase(base, n) +{ + return Math.log(n) / Math.log(base); +} +function negate(n) +{ + return -n; +} +function abs(n) +{ + return n < 0 ? -n : n; +} + +function min(a, b) +{ + return _elm_lang$core$Native_Utils.cmp(a, b) < 0 ? a : b; +} +function max(a, b) +{ + return _elm_lang$core$Native_Utils.cmp(a, b) > 0 ? a : b; +} +function clamp(lo, hi, n) +{ + return _elm_lang$core$Native_Utils.cmp(n, lo) < 0 + ? lo + : _elm_lang$core$Native_Utils.cmp(n, hi) > 0 + ? hi + : n; +} + +var ord = ['LT', 'EQ', 'GT']; + +function compare(x, y) +{ + return { ctor: ord[_elm_lang$core$Native_Utils.cmp(x, y) + 1] }; +} + +function xor(a, b) +{ + return a !== b; +} +function not(b) +{ + return !b; +} +function isInfinite(n) +{ + return n === Infinity || n === -Infinity; +} + +function truncate(n) +{ + return n | 0; +} + +function degrees(d) +{ + return d * Math.PI / 180; +} +function turns(t) +{ + return 2 * Math.PI * t; +} +function fromPolar(point) +{ + var r = point._0; + var t = point._1; + return _elm_lang$core$Native_Utils.Tuple2(r * Math.cos(t), r * Math.sin(t)); +} +function toPolar(point) +{ + var x = point._0; + var y = point._1; + return _elm_lang$core$Native_Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x)); +} + +return { + div: F2(div), + rem: F2(rem), + mod: F2(mod), + + pi: Math.PI, + e: Math.E, + cos: Math.cos, + sin: Math.sin, + tan: Math.tan, + acos: Math.acos, + asin: Math.asin, + atan: Math.atan, + atan2: F2(Math.atan2), + + degrees: degrees, + turns: turns, + fromPolar: fromPolar, + toPolar: toPolar, + + sqrt: Math.sqrt, + logBase: F2(logBase), + negate: negate, + abs: abs, + min: F2(min), + max: F2(max), + clamp: F3(clamp), + compare: F2(compare), + + xor: F2(xor), + not: not, + + truncate: truncate, + ceiling: Math.ceil, + floor: Math.floor, + round: Math.round, + toFloat: function(x) { return x; }, + isNaN: isNaN, + isInfinite: isInfinite +}; + +}(); +//import // + +var _elm_lang$core$Native_Utils = function() { + +// COMPARISONS + +function eq(x, y) +{ + var stack = []; + var isEqual = eqHelp(x, y, 0, stack); + var pair; + while (isEqual && (pair = stack.pop())) + { + isEqual = eqHelp(pair.x, pair.y, 0, stack); + } + return isEqual; +} + + +function eqHelp(x, y, depth, stack) +{ + if (depth > 100) + { + stack.push({ x: x, y: y }); + return true; + } + + if (x === y) + { + return true; + } + + if (typeof x !== 'object') + { + if (typeof x === 'function') + { + throw new Error( + 'Trying to use `(==)` on functions. There is no way to know if functions are "the same" in the Elm sense.' + + ' Read more about this at http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#==' + + ' which describes why it is this way and what the better version will look like.' + ); + } + return false; + } + + if (x === null || y === null) + { + return false + } + + if (x instanceof Date) + { + return x.getTime() === y.getTime(); + } + + if (!('ctor' in x)) + { + for (var key in x) + { + if (!eqHelp(x[key], y[key], depth + 1, stack)) + { + return false; + } + } + return true; + } + + // convert Dicts and Sets to lists + if (x.ctor === 'RBNode_elm_builtin' || x.ctor === 'RBEmpty_elm_builtin') + { + x = _elm_lang$core$Dict$toList(x); + y = _elm_lang$core$Dict$toList(y); + } + if (x.ctor === 'Set_elm_builtin') + { + x = _elm_lang$core$Set$toList(x); + y = _elm_lang$core$Set$toList(y); + } + + // check if lists are equal without recursion + if (x.ctor === '::') + { + var a = x; + var b = y; + while (a.ctor === '::' && b.ctor === '::') + { + if (!eqHelp(a._0, b._0, depth + 1, stack)) + { + return false; + } + a = a._1; + b = b._1; + } + return a.ctor === b.ctor; + } + + // check if Arrays are equal + if (x.ctor === '_Array') + { + var xs = _elm_lang$core$Native_Array.toJSArray(x); + var ys = _elm_lang$core$Native_Array.toJSArray(y); + if (xs.length !== ys.length) + { + return false; + } + for (var i = 0; i < xs.length; i++) + { + if (!eqHelp(xs[i], ys[i], depth + 1, stack)) + { + return false; + } + } + return true; + } + + if (!eqHelp(x.ctor, y.ctor, depth + 1, stack)) + { + return false; + } + + for (var key in x) + { + if (!eqHelp(x[key], y[key], depth + 1, stack)) + { + return false; + } + } + return true; +} + +// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on +// the particular integer values assigned to LT, EQ, and GT. + +var LT = -1, EQ = 0, GT = 1; + +function cmp(x, y) +{ + if (typeof x !== 'object') + { + return x === y ? EQ : x < y ? LT : GT; + } + + if (x instanceof String) + { + var a = x.valueOf(); + var b = y.valueOf(); + return a === b ? EQ : a < b ? LT : GT; + } + + if (x.ctor === '::' || x.ctor === '[]') + { + while (x.ctor === '::' && y.ctor === '::') + { + var ord = cmp(x._0, y._0); + if (ord !== EQ) + { + return ord; + } + x = x._1; + y = y._1; + } + return x.ctor === y.ctor ? EQ : x.ctor === '[]' ? LT : GT; + } + + if (x.ctor.slice(0, 6) === '_Tuple') + { + var ord; + var n = x.ctor.slice(6) - 0; + var err = 'cannot compare tuples with more than 6 elements.'; + if (n === 0) return EQ; + if (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord; + if (n >= 2) { ord = cmp(x._1, y._1); if (ord !== EQ) return ord; + if (n >= 3) { ord = cmp(x._2, y._2); if (ord !== EQ) return ord; + if (n >= 4) { ord = cmp(x._3, y._3); if (ord !== EQ) return ord; + if (n >= 5) { ord = cmp(x._4, y._4); if (ord !== EQ) return ord; + if (n >= 6) { ord = cmp(x._5, y._5); if (ord !== EQ) return ord; + if (n >= 7) throw new Error('Comparison error: ' + err); } } } } } } + return EQ; + } + + throw new Error( + 'Comparison error: comparison is only defined on ints, ' + + 'floats, times, chars, strings, lists of comparable values, ' + + 'and tuples of comparable values.' + ); +} + + +// COMMON VALUES + +var Tuple0 = { + ctor: '_Tuple0' +}; + +function Tuple2(x, y) +{ + return { + ctor: '_Tuple2', + _0: x, + _1: y + }; +} + +function chr(c) +{ + return new String(c); +} + + +// GUID + +var count = 0; +function guid(_) +{ + return count++; +} + + +// RECORDS + +function update(oldRecord, updatedFields) +{ + var newRecord = {}; + + for (var key in oldRecord) + { + newRecord[key] = oldRecord[key]; + } + + for (var key in updatedFields) + { + newRecord[key] = updatedFields[key]; + } + + return newRecord; +} + + +//// LIST STUFF //// + +var Nil = { ctor: '[]' }; + +function Cons(hd, tl) +{ + return { + ctor: '::', + _0: hd, + _1: tl + }; +} + +function append(xs, ys) +{ + // append Strings + if (typeof xs === 'string') + { + return xs + ys; + } + + // append Lists + if (xs.ctor === '[]') + { + return ys; + } + var root = Cons(xs._0, Nil); + var curr = root; + xs = xs._1; + while (xs.ctor !== '[]') + { + curr._1 = Cons(xs._0, Nil); + xs = xs._1; + curr = curr._1; + } + curr._1 = ys; + return root; +} + + +// CRASHES + +function crash(moduleName, region) +{ + return function(message) { + throw new Error( + 'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\n' + + 'The message provided by the code author is:\n\n ' + + message + ); + }; +} + +function crashCase(moduleName, region, value) +{ + return function(message) { + throw new Error( + 'Ran into a `Debug.crash` in module `' + moduleName + '`\n\n' + + 'This was caused by the `case` expression ' + regionToString(region) + '.\n' + + 'One of the branches ended with a crash and the following value got through:\n\n ' + toString(value) + '\n\n' + + 'The message provided by the code author is:\n\n ' + + message + ); + }; +} + +function regionToString(region) +{ + if (region.start.line == region.end.line) + { + return 'on line ' + region.start.line; + } + return 'between lines ' + region.start.line + ' and ' + region.end.line; +} + + +// TO STRING + +function toString(v) +{ + var type = typeof v; + if (type === 'function') + { + return ''; + } + + if (type === 'boolean') + { + return v ? 'True' : 'False'; + } + + if (type === 'number') + { + return v + ''; + } + + if (v instanceof String) + { + return '\'' + addSlashes(v, true) + '\''; + } + + if (type === 'string') + { + return '"' + addSlashes(v, false) + '"'; + } + + if (v === null) + { + return 'null'; + } + + if (type === 'object' && 'ctor' in v) + { + var ctorStarter = v.ctor.substring(0, 5); + + if (ctorStarter === '_Tupl') + { + var output = []; + for (var k in v) + { + if (k === 'ctor') continue; + output.push(toString(v[k])); + } + return '(' + output.join(',') + ')'; + } + + if (ctorStarter === '_Task') + { + return '' + } + + if (v.ctor === '_Array') + { + var list = _elm_lang$core$Array$toList(v); + return 'Array.fromList ' + toString(list); + } + + if (v.ctor === '') + { + return ''; + } + + if (v.ctor === '_Process') + { + return ''; + } + + if (v.ctor === '::') + { + var output = '[' + toString(v._0); + v = v._1; + while (v.ctor === '::') + { + output += ',' + toString(v._0); + v = v._1; + } + return output + ']'; + } + + if (v.ctor === '[]') + { + return '[]'; + } + + if (v.ctor === 'Set_elm_builtin') + { + return 'Set.fromList ' + toString(_elm_lang$core$Set$toList(v)); + } + + if (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin') + { + return 'Dict.fromList ' + toString(_elm_lang$core$Dict$toList(v)); + } + + var output = ''; + for (var i in v) + { + if (i === 'ctor') continue; + var str = toString(v[i]); + var c0 = str[0]; + var parenless = c0 === '{' || c0 === '(' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0; + output += ' ' + (parenless ? str : '(' + str + ')'); + } + return v.ctor + output; + } + + if (type === 'object') + { + if (v instanceof Date) + { + return '<' + v.toString() + '>'; + } + + if (v.elm_web_socket) + { + return ''; + } + + var output = []; + for (var k in v) + { + output.push(k + ' = ' + toString(v[k])); + } + if (output.length === 0) + { + return '{}'; + } + return '{ ' + output.join(', ') + ' }'; + } + + return ''; +} + +function addSlashes(str, isChar) +{ + var s = str.replace(/\\/g, '\\\\') + .replace(/\n/g, '\\n') + .replace(/\t/g, '\\t') + .replace(/\r/g, '\\r') + .replace(/\v/g, '\\v') + .replace(/\0/g, '\\0'); + if (isChar) + { + return s.replace(/\'/g, '\\\''); + } + else + { + return s.replace(/\"/g, '\\"'); + } +} + + +return { + eq: eq, + cmp: cmp, + Tuple0: Tuple0, + Tuple2: Tuple2, + chr: chr, + update: update, + guid: guid, + + append: F2(append), + + crash: crash, + crashCase: crashCase, + + toString: toString +}; + +}(); +var _elm_lang$core$Basics$never = function (_p0) { + never: + while (true) { + var _p1 = _p0; + var _v1 = _p1._0; + _p0 = _v1; + continue never; + } +}; +var _elm_lang$core$Basics$uncurry = F2( + function (f, _p2) { + var _p3 = _p2; + return A2(f, _p3._0, _p3._1); + }); +var _elm_lang$core$Basics$curry = F3( + function (f, a, b) { + return f( + {ctor: '_Tuple2', _0: a, _1: b}); + }); +var _elm_lang$core$Basics$flip = F3( + function (f, b, a) { + return A2(f, a, b); + }); +var _elm_lang$core$Basics$always = F2( + function (a, _p4) { + return a; + }); +var _elm_lang$core$Basics$identity = function (x) { + return x; +}; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<|'] = F2( + function (f, x) { + return f(x); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['|>'] = F2( + function (x, f) { + return f(x); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['>>'] = F3( + function (f, g, x) { + return g( + f(x)); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<<'] = F3( + function (g, f, x) { + return g( + f(x)); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['++'] = _elm_lang$core$Native_Utils.append; +var _elm_lang$core$Basics$toString = _elm_lang$core$Native_Utils.toString; +var _elm_lang$core$Basics$isInfinite = _elm_lang$core$Native_Basics.isInfinite; +var _elm_lang$core$Basics$isNaN = _elm_lang$core$Native_Basics.isNaN; +var _elm_lang$core$Basics$toFloat = _elm_lang$core$Native_Basics.toFloat; +var _elm_lang$core$Basics$ceiling = _elm_lang$core$Native_Basics.ceiling; +var _elm_lang$core$Basics$floor = _elm_lang$core$Native_Basics.floor; +var _elm_lang$core$Basics$truncate = _elm_lang$core$Native_Basics.truncate; +var _elm_lang$core$Basics$round = _elm_lang$core$Native_Basics.round; +var _elm_lang$core$Basics$not = _elm_lang$core$Native_Basics.not; +var _elm_lang$core$Basics$xor = _elm_lang$core$Native_Basics.xor; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['||'] = _elm_lang$core$Native_Basics.or; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['&&'] = _elm_lang$core$Native_Basics.and; +var _elm_lang$core$Basics$max = _elm_lang$core$Native_Basics.max; +var _elm_lang$core$Basics$min = _elm_lang$core$Native_Basics.min; +var _elm_lang$core$Basics$compare = _elm_lang$core$Native_Basics.compare; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['>='] = _elm_lang$core$Native_Basics.ge; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<='] = _elm_lang$core$Native_Basics.le; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['>'] = _elm_lang$core$Native_Basics.gt; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<'] = _elm_lang$core$Native_Basics.lt; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['/='] = _elm_lang$core$Native_Basics.neq; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['=='] = _elm_lang$core$Native_Basics.eq; +var _elm_lang$core$Basics$e = _elm_lang$core$Native_Basics.e; +var _elm_lang$core$Basics$pi = _elm_lang$core$Native_Basics.pi; +var _elm_lang$core$Basics$clamp = _elm_lang$core$Native_Basics.clamp; +var _elm_lang$core$Basics$logBase = _elm_lang$core$Native_Basics.logBase; +var _elm_lang$core$Basics$abs = _elm_lang$core$Native_Basics.abs; +var _elm_lang$core$Basics$negate = _elm_lang$core$Native_Basics.negate; +var _elm_lang$core$Basics$sqrt = _elm_lang$core$Native_Basics.sqrt; +var _elm_lang$core$Basics$atan2 = _elm_lang$core$Native_Basics.atan2; +var _elm_lang$core$Basics$atan = _elm_lang$core$Native_Basics.atan; +var _elm_lang$core$Basics$asin = _elm_lang$core$Native_Basics.asin; +var _elm_lang$core$Basics$acos = _elm_lang$core$Native_Basics.acos; +var _elm_lang$core$Basics$tan = _elm_lang$core$Native_Basics.tan; +var _elm_lang$core$Basics$sin = _elm_lang$core$Native_Basics.sin; +var _elm_lang$core$Basics$cos = _elm_lang$core$Native_Basics.cos; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['^'] = _elm_lang$core$Native_Basics.exp; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['%'] = _elm_lang$core$Native_Basics.mod; +var _elm_lang$core$Basics$rem = _elm_lang$core$Native_Basics.rem; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['//'] = _elm_lang$core$Native_Basics.div; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['/'] = _elm_lang$core$Native_Basics.floatDiv; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['*'] = _elm_lang$core$Native_Basics.mul; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['-'] = _elm_lang$core$Native_Basics.sub; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['+'] = _elm_lang$core$Native_Basics.add; +var _elm_lang$core$Basics$toPolar = _elm_lang$core$Native_Basics.toPolar; +var _elm_lang$core$Basics$fromPolar = _elm_lang$core$Native_Basics.fromPolar; +var _elm_lang$core$Basics$turns = _elm_lang$core$Native_Basics.turns; +var _elm_lang$core$Basics$degrees = _elm_lang$core$Native_Basics.degrees; +var _elm_lang$core$Basics$radians = function (t) { + return t; +}; +var _elm_lang$core$Basics$GT = {ctor: 'GT'}; +var _elm_lang$core$Basics$EQ = {ctor: 'EQ'}; +var _elm_lang$core$Basics$LT = {ctor: 'LT'}; +var _elm_lang$core$Basics$JustOneMore = function (a) { + return {ctor: 'JustOneMore', _0: a}; +}; + +var _elm_lang$core$Maybe$withDefault = F2( + function ($default, maybe) { + var _p0 = maybe; + if (_p0.ctor === 'Just') { + return _p0._0; + } else { + return $default; + } + }); +var _elm_lang$core$Maybe$Nothing = {ctor: 'Nothing'}; +var _elm_lang$core$Maybe$andThen = F2( + function (callback, maybeValue) { + var _p1 = maybeValue; + if (_p1.ctor === 'Just') { + return callback(_p1._0); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$Just = function (a) { + return {ctor: 'Just', _0: a}; +}; +var _elm_lang$core$Maybe$map = F2( + function (f, maybe) { + var _p2 = maybe; + if (_p2.ctor === 'Just') { + return _elm_lang$core$Maybe$Just( + f(_p2._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map2 = F3( + function (func, ma, mb) { + var _p3 = {ctor: '_Tuple2', _0: ma, _1: mb}; + if (((_p3.ctor === '_Tuple2') && (_p3._0.ctor === 'Just')) && (_p3._1.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A2(func, _p3._0._0, _p3._1._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map3 = F4( + function (func, ma, mb, mc) { + var _p4 = {ctor: '_Tuple3', _0: ma, _1: mb, _2: mc}; + if ((((_p4.ctor === '_Tuple3') && (_p4._0.ctor === 'Just')) && (_p4._1.ctor === 'Just')) && (_p4._2.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A3(func, _p4._0._0, _p4._1._0, _p4._2._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map4 = F5( + function (func, ma, mb, mc, md) { + var _p5 = {ctor: '_Tuple4', _0: ma, _1: mb, _2: mc, _3: md}; + if (((((_p5.ctor === '_Tuple4') && (_p5._0.ctor === 'Just')) && (_p5._1.ctor === 'Just')) && (_p5._2.ctor === 'Just')) && (_p5._3.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A4(func, _p5._0._0, _p5._1._0, _p5._2._0, _p5._3._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map5 = F6( + function (func, ma, mb, mc, md, me) { + var _p6 = {ctor: '_Tuple5', _0: ma, _1: mb, _2: mc, _3: md, _4: me}; + if ((((((_p6.ctor === '_Tuple5') && (_p6._0.ctor === 'Just')) && (_p6._1.ctor === 'Just')) && (_p6._2.ctor === 'Just')) && (_p6._3.ctor === 'Just')) && (_p6._4.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A5(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0, _p6._4._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); + +//import Native.Utils // + +var _elm_lang$core$Native_List = function() { + +var Nil = { ctor: '[]' }; + +function Cons(hd, tl) +{ + return { ctor: '::', _0: hd, _1: tl }; +} + +function fromArray(arr) +{ + var out = Nil; + for (var i = arr.length; i--; ) + { + out = Cons(arr[i], out); + } + return out; +} + +function toArray(xs) +{ + var out = []; + while (xs.ctor !== '[]') + { + out.push(xs._0); + xs = xs._1; + } + return out; +} + +function foldr(f, b, xs) +{ + var arr = toArray(xs); + var acc = b; + for (var i = arr.length; i--; ) + { + acc = A2(f, arr[i], acc); + } + return acc; +} + +function map2(f, xs, ys) +{ + var arr = []; + while (xs.ctor !== '[]' && ys.ctor !== '[]') + { + arr.push(A2(f, xs._0, ys._0)); + xs = xs._1; + ys = ys._1; + } + return fromArray(arr); +} + +function map3(f, xs, ys, zs) +{ + var arr = []; + while (xs.ctor !== '[]' && ys.ctor !== '[]' && zs.ctor !== '[]') + { + arr.push(A3(f, xs._0, ys._0, zs._0)); + xs = xs._1; + ys = ys._1; + zs = zs._1; + } + return fromArray(arr); +} + +function map4(f, ws, xs, ys, zs) +{ + var arr = []; + while ( ws.ctor !== '[]' + && xs.ctor !== '[]' + && ys.ctor !== '[]' + && zs.ctor !== '[]') + { + arr.push(A4(f, ws._0, xs._0, ys._0, zs._0)); + ws = ws._1; + xs = xs._1; + ys = ys._1; + zs = zs._1; + } + return fromArray(arr); +} + +function map5(f, vs, ws, xs, ys, zs) +{ + var arr = []; + while ( vs.ctor !== '[]' + && ws.ctor !== '[]' + && xs.ctor !== '[]' + && ys.ctor !== '[]' + && zs.ctor !== '[]') + { + arr.push(A5(f, vs._0, ws._0, xs._0, ys._0, zs._0)); + vs = vs._1; + ws = ws._1; + xs = xs._1; + ys = ys._1; + zs = zs._1; + } + return fromArray(arr); +} + +function sortBy(f, xs) +{ + return fromArray(toArray(xs).sort(function(a, b) { + return _elm_lang$core$Native_Utils.cmp(f(a), f(b)); + })); +} + +function sortWith(f, xs) +{ + return fromArray(toArray(xs).sort(function(a, b) { + var ord = f(a)(b).ctor; + return ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1; + })); +} + +return { + Nil: Nil, + Cons: Cons, + cons: F2(Cons), + toArray: toArray, + fromArray: fromArray, + + foldr: F3(foldr), + + map2: F3(map2), + map3: F4(map3), + map4: F5(map4), + map5: F6(map5), + sortBy: F2(sortBy), + sortWith: F2(sortWith) +}; + +}(); +var _elm_lang$core$List$sortWith = _elm_lang$core$Native_List.sortWith; +var _elm_lang$core$List$sortBy = _elm_lang$core$Native_List.sortBy; +var _elm_lang$core$List$sort = function (xs) { + return A2(_elm_lang$core$List$sortBy, _elm_lang$core$Basics$identity, xs); +}; +var _elm_lang$core$List$singleton = function (value) { + return { + ctor: '::', + _0: value, + _1: {ctor: '[]'} + }; +}; +var _elm_lang$core$List$drop = F2( + function (n, list) { + drop: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return list; + } else { + var _p0 = list; + if (_p0.ctor === '[]') { + return list; + } else { + var _v1 = n - 1, + _v2 = _p0._1; + n = _v1; + list = _v2; + continue drop; + } + } + } + }); +var _elm_lang$core$List$map5 = _elm_lang$core$Native_List.map5; +var _elm_lang$core$List$map4 = _elm_lang$core$Native_List.map4; +var _elm_lang$core$List$map3 = _elm_lang$core$Native_List.map3; +var _elm_lang$core$List$map2 = _elm_lang$core$Native_List.map2; +var _elm_lang$core$List$any = F2( + function (isOkay, list) { + any: + while (true) { + var _p1 = list; + if (_p1.ctor === '[]') { + return false; + } else { + if (isOkay(_p1._0)) { + return true; + } else { + var _v4 = isOkay, + _v5 = _p1._1; + isOkay = _v4; + list = _v5; + continue any; + } + } + } + }); +var _elm_lang$core$List$all = F2( + function (isOkay, list) { + return !A2( + _elm_lang$core$List$any, + function (_p2) { + return !isOkay(_p2); + }, + list); + }); +var _elm_lang$core$List$foldr = _elm_lang$core$Native_List.foldr; +var _elm_lang$core$List$foldl = F3( + function (func, acc, list) { + foldl: + while (true) { + var _p3 = list; + if (_p3.ctor === '[]') { + return acc; + } else { + var _v7 = func, + _v8 = A2(func, _p3._0, acc), + _v9 = _p3._1; + func = _v7; + acc = _v8; + list = _v9; + continue foldl; + } + } + }); +var _elm_lang$core$List$length = function (xs) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p4, i) { + return i + 1; + }), + 0, + xs); +}; +var _elm_lang$core$List$sum = function (numbers) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (x, y) { + return x + y; + }), + 0, + numbers); +}; +var _elm_lang$core$List$product = function (numbers) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (x, y) { + return x * y; + }), + 1, + numbers); +}; +var _elm_lang$core$List$maximum = function (list) { + var _p5 = list; + if (_p5.ctor === '::') { + return _elm_lang$core$Maybe$Just( + A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$max, _p5._0, _p5._1)); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$List$minimum = function (list) { + var _p6 = list; + if (_p6.ctor === '::') { + return _elm_lang$core$Maybe$Just( + A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$min, _p6._0, _p6._1)); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$List$member = F2( + function (x, xs) { + return A2( + _elm_lang$core$List$any, + function (a) { + return _elm_lang$core$Native_Utils.eq(a, x); + }, + xs); + }); +var _elm_lang$core$List$isEmpty = function (xs) { + var _p7 = xs; + if (_p7.ctor === '[]') { + return true; + } else { + return false; + } +}; +var _elm_lang$core$List$tail = function (list) { + var _p8 = list; + if (_p8.ctor === '::') { + return _elm_lang$core$Maybe$Just(_p8._1); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$List$head = function (list) { + var _p9 = list; + if (_p9.ctor === '::') { + return _elm_lang$core$Maybe$Just(_p9._0); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$List_ops = _elm_lang$core$List_ops || {}; +_elm_lang$core$List_ops['::'] = _elm_lang$core$Native_List.cons; +var _elm_lang$core$List$map = F2( + function (f, xs) { + return A3( + _elm_lang$core$List$foldr, + F2( + function (x, acc) { + return { + ctor: '::', + _0: f(x), + _1: acc + }; + }), + {ctor: '[]'}, + xs); + }); +var _elm_lang$core$List$filter = F2( + function (pred, xs) { + var conditionalCons = F2( + function (front, back) { + return pred(front) ? {ctor: '::', _0: front, _1: back} : back; + }); + return A3( + _elm_lang$core$List$foldr, + conditionalCons, + {ctor: '[]'}, + xs); + }); +var _elm_lang$core$List$maybeCons = F3( + function (f, mx, xs) { + var _p10 = f(mx); + if (_p10.ctor === 'Just') { + return {ctor: '::', _0: _p10._0, _1: xs}; + } else { + return xs; + } + }); +var _elm_lang$core$List$filterMap = F2( + function (f, xs) { + return A3( + _elm_lang$core$List$foldr, + _elm_lang$core$List$maybeCons(f), + {ctor: '[]'}, + xs); + }); +var _elm_lang$core$List$reverse = function (list) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + }), + {ctor: '[]'}, + list); +}; +var _elm_lang$core$List$scanl = F3( + function (f, b, xs) { + var scan1 = F2( + function (x, accAcc) { + var _p11 = accAcc; + if (_p11.ctor === '::') { + return { + ctor: '::', + _0: A2(f, x, _p11._0), + _1: accAcc + }; + } else { + return {ctor: '[]'}; + } + }); + return _elm_lang$core$List$reverse( + A3( + _elm_lang$core$List$foldl, + scan1, + { + ctor: '::', + _0: b, + _1: {ctor: '[]'} + }, + xs)); + }); +var _elm_lang$core$List$append = F2( + function (xs, ys) { + var _p12 = ys; + if (_p12.ctor === '[]') { + return xs; + } else { + return A3( + _elm_lang$core$List$foldr, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + }), + ys, + xs); + } + }); +var _elm_lang$core$List$concat = function (lists) { + return A3( + _elm_lang$core$List$foldr, + _elm_lang$core$List$append, + {ctor: '[]'}, + lists); +}; +var _elm_lang$core$List$concatMap = F2( + function (f, list) { + return _elm_lang$core$List$concat( + A2(_elm_lang$core$List$map, f, list)); + }); +var _elm_lang$core$List$partition = F2( + function (pred, list) { + var step = F2( + function (x, _p13) { + var _p14 = _p13; + var _p16 = _p14._0; + var _p15 = _p14._1; + return pred(x) ? { + ctor: '_Tuple2', + _0: {ctor: '::', _0: x, _1: _p16}, + _1: _p15 + } : { + ctor: '_Tuple2', + _0: _p16, + _1: {ctor: '::', _0: x, _1: _p15} + }; + }); + return A3( + _elm_lang$core$List$foldr, + step, + { + ctor: '_Tuple2', + _0: {ctor: '[]'}, + _1: {ctor: '[]'} + }, + list); + }); +var _elm_lang$core$List$unzip = function (pairs) { + var step = F2( + function (_p18, _p17) { + var _p19 = _p18; + var _p20 = _p17; + return { + ctor: '_Tuple2', + _0: {ctor: '::', _0: _p19._0, _1: _p20._0}, + _1: {ctor: '::', _0: _p19._1, _1: _p20._1} + }; + }); + return A3( + _elm_lang$core$List$foldr, + step, + { + ctor: '_Tuple2', + _0: {ctor: '[]'}, + _1: {ctor: '[]'} + }, + pairs); +}; +var _elm_lang$core$List$intersperse = F2( + function (sep, xs) { + var _p21 = xs; + if (_p21.ctor === '[]') { + return {ctor: '[]'}; + } else { + var step = F2( + function (x, rest) { + return { + ctor: '::', + _0: sep, + _1: {ctor: '::', _0: x, _1: rest} + }; + }); + var spersed = A3( + _elm_lang$core$List$foldr, + step, + {ctor: '[]'}, + _p21._1); + return {ctor: '::', _0: _p21._0, _1: spersed}; + } + }); +var _elm_lang$core$List$takeReverse = F3( + function (n, list, taken) { + takeReverse: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return taken; + } else { + var _p22 = list; + if (_p22.ctor === '[]') { + return taken; + } else { + var _v23 = n - 1, + _v24 = _p22._1, + _v25 = {ctor: '::', _0: _p22._0, _1: taken}; + n = _v23; + list = _v24; + taken = _v25; + continue takeReverse; + } + } + } + }); +var _elm_lang$core$List$takeTailRec = F2( + function (n, list) { + return _elm_lang$core$List$reverse( + A3( + _elm_lang$core$List$takeReverse, + n, + list, + {ctor: '[]'})); + }); +var _elm_lang$core$List$takeFast = F3( + function (ctr, n, list) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return {ctor: '[]'}; + } else { + var _p23 = {ctor: '_Tuple2', _0: n, _1: list}; + _v26_5: + do { + _v26_1: + do { + if (_p23.ctor === '_Tuple2') { + if (_p23._1.ctor === '[]') { + return list; + } else { + if (_p23._1._1.ctor === '::') { + switch (_p23._0) { + case 1: + break _v26_1; + case 2: + return { + ctor: '::', + _0: _p23._1._0, + _1: { + ctor: '::', + _0: _p23._1._1._0, + _1: {ctor: '[]'} + } + }; + case 3: + if (_p23._1._1._1.ctor === '::') { + return { + ctor: '::', + _0: _p23._1._0, + _1: { + ctor: '::', + _0: _p23._1._1._0, + _1: { + ctor: '::', + _0: _p23._1._1._1._0, + _1: {ctor: '[]'} + } + } + }; + } else { + break _v26_5; + } + default: + if ((_p23._1._1._1.ctor === '::') && (_p23._1._1._1._1.ctor === '::')) { + var _p28 = _p23._1._1._1._0; + var _p27 = _p23._1._1._0; + var _p26 = _p23._1._0; + var _p25 = _p23._1._1._1._1._0; + var _p24 = _p23._1._1._1._1._1; + return (_elm_lang$core$Native_Utils.cmp(ctr, 1000) > 0) ? { + ctor: '::', + _0: _p26, + _1: { + ctor: '::', + _0: _p27, + _1: { + ctor: '::', + _0: _p28, + _1: { + ctor: '::', + _0: _p25, + _1: A2(_elm_lang$core$List$takeTailRec, n - 4, _p24) + } + } + } + } : { + ctor: '::', + _0: _p26, + _1: { + ctor: '::', + _0: _p27, + _1: { + ctor: '::', + _0: _p28, + _1: { + ctor: '::', + _0: _p25, + _1: A3(_elm_lang$core$List$takeFast, ctr + 1, n - 4, _p24) + } + } + } + }; + } else { + break _v26_5; + } + } + } else { + if (_p23._0 === 1) { + break _v26_1; + } else { + break _v26_5; + } + } + } + } else { + break _v26_5; + } + } while(false); + return { + ctor: '::', + _0: _p23._1._0, + _1: {ctor: '[]'} + }; + } while(false); + return list; + } + }); +var _elm_lang$core$List$take = F2( + function (n, list) { + return A3(_elm_lang$core$List$takeFast, 0, n, list); + }); +var _elm_lang$core$List$repeatHelp = F3( + function (result, n, value) { + repeatHelp: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return result; + } else { + var _v27 = {ctor: '::', _0: value, _1: result}, + _v28 = n - 1, + _v29 = value; + result = _v27; + n = _v28; + value = _v29; + continue repeatHelp; + } + } + }); +var _elm_lang$core$List$repeat = F2( + function (n, value) { + return A3( + _elm_lang$core$List$repeatHelp, + {ctor: '[]'}, + n, + value); + }); +var _elm_lang$core$List$rangeHelp = F3( + function (lo, hi, list) { + rangeHelp: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(lo, hi) < 1) { + var _v30 = lo, + _v31 = hi - 1, + _v32 = {ctor: '::', _0: hi, _1: list}; + lo = _v30; + hi = _v31; + list = _v32; + continue rangeHelp; + } else { + return list; + } + } + }); +var _elm_lang$core$List$range = F2( + function (lo, hi) { + return A3( + _elm_lang$core$List$rangeHelp, + lo, + hi, + {ctor: '[]'}); + }); +var _elm_lang$core$List$indexedMap = F2( + function (f, xs) { + return A3( + _elm_lang$core$List$map2, + f, + A2( + _elm_lang$core$List$range, + 0, + _elm_lang$core$List$length(xs) - 1), + xs); + }); + +//import Native.Utils // + +var _elm_lang$core$Native_Debug = function() { + +function log(tag, value) +{ + var msg = tag + ': ' + _elm_lang$core$Native_Utils.toString(value); + var process = process || {}; + if (process.stdout) + { + process.stdout.write(msg); + } + else + { + console.log(msg); + } + return value; +} + +function crash(message) +{ + throw new Error(message); +} + +return { + crash: crash, + log: F2(log) +}; + +}(); +//import Maybe, Native.List, Native.Utils, Result // + +var _elm_lang$core$Native_String = function() { + +function isEmpty(str) +{ + return str.length === 0; +} +function cons(chr, str) +{ + return chr + str; +} +function uncons(str) +{ + var hd = str[0]; + if (hd) + { + return _elm_lang$core$Maybe$Just(_elm_lang$core$Native_Utils.Tuple2(_elm_lang$core$Native_Utils.chr(hd), str.slice(1))); + } + return _elm_lang$core$Maybe$Nothing; +} +function append(a, b) +{ + return a + b; +} +function concat(strs) +{ + return _elm_lang$core$Native_List.toArray(strs).join(''); +} +function length(str) +{ + return str.length; +} +function map(f, str) +{ + var out = str.split(''); + for (var i = out.length; i--; ) + { + out[i] = f(_elm_lang$core$Native_Utils.chr(out[i])); + } + return out.join(''); +} +function filter(pred, str) +{ + return str.split('').map(_elm_lang$core$Native_Utils.chr).filter(pred).join(''); +} +function reverse(str) +{ + return str.split('').reverse().join(''); +} +function foldl(f, b, str) +{ + var len = str.length; + for (var i = 0; i < len; ++i) + { + b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b); + } + return b; +} +function foldr(f, b, str) +{ + for (var i = str.length; i--; ) + { + b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b); + } + return b; +} +function split(sep, str) +{ + return _elm_lang$core$Native_List.fromArray(str.split(sep)); +} +function join(sep, strs) +{ + return _elm_lang$core$Native_List.toArray(strs).join(sep); +} +function repeat(n, str) +{ + var result = ''; + while (n > 0) + { + if (n & 1) + { + result += str; + } + n >>= 1, str += str; + } + return result; +} +function slice(start, end, str) +{ + return str.slice(start, end); +} +function left(n, str) +{ + return n < 1 ? '' : str.slice(0, n); +} +function right(n, str) +{ + return n < 1 ? '' : str.slice(-n); +} +function dropLeft(n, str) +{ + return n < 1 ? str : str.slice(n); +} +function dropRight(n, str) +{ + return n < 1 ? str : str.slice(0, -n); +} +function pad(n, chr, str) +{ + var half = (n - str.length) / 2; + return repeat(Math.ceil(half), chr) + str + repeat(half | 0, chr); +} +function padRight(n, chr, str) +{ + return str + repeat(n - str.length, chr); +} +function padLeft(n, chr, str) +{ + return repeat(n - str.length, chr) + str; +} + +function trim(str) +{ + return str.trim(); +} +function trimLeft(str) +{ + return str.replace(/^\s+/, ''); +} +function trimRight(str) +{ + return str.replace(/\s+$/, ''); +} + +function words(str) +{ + return _elm_lang$core$Native_List.fromArray(str.trim().split(/\s+/g)); +} +function lines(str) +{ + return _elm_lang$core$Native_List.fromArray(str.split(/\r\n|\r|\n/g)); +} + +function toUpper(str) +{ + return str.toUpperCase(); +} +function toLower(str) +{ + return str.toLowerCase(); +} + +function any(pred, str) +{ + for (var i = str.length; i--; ) + { + if (pred(_elm_lang$core$Native_Utils.chr(str[i]))) + { + return true; + } + } + return false; +} +function all(pred, str) +{ + for (var i = str.length; i--; ) + { + if (!pred(_elm_lang$core$Native_Utils.chr(str[i]))) + { + return false; + } + } + return true; +} + +function contains(sub, str) +{ + return str.indexOf(sub) > -1; +} +function startsWith(sub, str) +{ + return str.indexOf(sub) === 0; +} +function endsWith(sub, str) +{ + return str.length >= sub.length && + str.lastIndexOf(sub) === str.length - sub.length; +} +function indexes(sub, str) +{ + var subLen = sub.length; + + if (subLen < 1) + { + return _elm_lang$core$Native_List.Nil; + } + + var i = 0; + var is = []; + + while ((i = str.indexOf(sub, i)) > -1) + { + is.push(i); + i = i + subLen; + } + + return _elm_lang$core$Native_List.fromArray(is); +} + + +function toInt(s) +{ + var len = s.length; + + // if empty + if (len === 0) + { + return intErr(s); + } + + // if hex + var c = s[0]; + if (c === '0' && s[1] === 'x') + { + for (var i = 2; i < len; ++i) + { + var c = s[i]; + if (('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f')) + { + continue; + } + return intErr(s); + } + return _elm_lang$core$Result$Ok(parseInt(s, 16)); + } + + // is decimal + if (c > '9' || (c < '0' && c !== '-' && c !== '+')) + { + return intErr(s); + } + for (var i = 1; i < len; ++i) + { + var c = s[i]; + if (c < '0' || '9' < c) + { + return intErr(s); + } + } + + return _elm_lang$core$Result$Ok(parseInt(s, 10)); +} + +function intErr(s) +{ + return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int"); +} + + +function toFloat(s) +{ + // check if it is a hex, octal, or binary number + if (s.length === 0 || /[\sxbo]/.test(s)) + { + return floatErr(s); + } + var n = +s; + // faster isNaN check + return n === n ? _elm_lang$core$Result$Ok(n) : floatErr(s); +} + +function floatErr(s) +{ + return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float"); +} + + +function toList(str) +{ + return _elm_lang$core$Native_List.fromArray(str.split('').map(_elm_lang$core$Native_Utils.chr)); +} +function fromList(chars) +{ + return _elm_lang$core$Native_List.toArray(chars).join(''); +} + +return { + isEmpty: isEmpty, + cons: F2(cons), + uncons: uncons, + append: F2(append), + concat: concat, + length: length, + map: F2(map), + filter: F2(filter), + reverse: reverse, + foldl: F3(foldl), + foldr: F3(foldr), + + split: F2(split), + join: F2(join), + repeat: F2(repeat), + + slice: F3(slice), + left: F2(left), + right: F2(right), + dropLeft: F2(dropLeft), + dropRight: F2(dropRight), + + pad: F3(pad), + padLeft: F3(padLeft), + padRight: F3(padRight), + + trim: trim, + trimLeft: trimLeft, + trimRight: trimRight, + + words: words, + lines: lines, + + toUpper: toUpper, + toLower: toLower, + + any: F2(any), + all: F2(all), + + contains: F2(contains), + startsWith: F2(startsWith), + endsWith: F2(endsWith), + indexes: F2(indexes), + + toInt: toInt, + toFloat: toFloat, + toList: toList, + fromList: fromList +}; + +}(); + +//import Native.Utils // + +var _elm_lang$core$Native_Char = function() { + +return { + fromCode: function(c) { return _elm_lang$core$Native_Utils.chr(String.fromCharCode(c)); }, + toCode: function(c) { return c.charCodeAt(0); }, + toUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toUpperCase()); }, + toLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLowerCase()); }, + toLocaleUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleUpperCase()); }, + toLocaleLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleLowerCase()); } +}; + +}(); +var _elm_lang$core$Char$fromCode = _elm_lang$core$Native_Char.fromCode; +var _elm_lang$core$Char$toCode = _elm_lang$core$Native_Char.toCode; +var _elm_lang$core$Char$toLocaleLower = _elm_lang$core$Native_Char.toLocaleLower; +var _elm_lang$core$Char$toLocaleUpper = _elm_lang$core$Native_Char.toLocaleUpper; +var _elm_lang$core$Char$toLower = _elm_lang$core$Native_Char.toLower; +var _elm_lang$core$Char$toUpper = _elm_lang$core$Native_Char.toUpper; +var _elm_lang$core$Char$isBetween = F3( + function (low, high, $char) { + var code = _elm_lang$core$Char$toCode($char); + return (_elm_lang$core$Native_Utils.cmp( + code, + _elm_lang$core$Char$toCode(low)) > -1) && (_elm_lang$core$Native_Utils.cmp( + code, + _elm_lang$core$Char$toCode(high)) < 1); + }); +var _elm_lang$core$Char$isUpper = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('A'), + _elm_lang$core$Native_Utils.chr('Z')); +var _elm_lang$core$Char$isLower = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('a'), + _elm_lang$core$Native_Utils.chr('z')); +var _elm_lang$core$Char$isDigit = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('0'), + _elm_lang$core$Native_Utils.chr('9')); +var _elm_lang$core$Char$isOctDigit = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('0'), + _elm_lang$core$Native_Utils.chr('7')); +var _elm_lang$core$Char$isHexDigit = function ($char) { + return _elm_lang$core$Char$isDigit($char) || (A3( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('a'), + _elm_lang$core$Native_Utils.chr('f'), + $char) || A3( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('A'), + _elm_lang$core$Native_Utils.chr('F'), + $char)); +}; + +var _elm_lang$core$Result$toMaybe = function (result) { + var _p0 = result; + if (_p0.ctor === 'Ok') { + return _elm_lang$core$Maybe$Just(_p0._0); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$Result$withDefault = F2( + function (def, result) { + var _p1 = result; + if (_p1.ctor === 'Ok') { + return _p1._0; + } else { + return def; + } + }); +var _elm_lang$core$Result$Err = function (a) { + return {ctor: 'Err', _0: a}; +}; +var _elm_lang$core$Result$andThen = F2( + function (callback, result) { + var _p2 = result; + if (_p2.ctor === 'Ok') { + return callback(_p2._0); + } else { + return _elm_lang$core$Result$Err(_p2._0); + } + }); +var _elm_lang$core$Result$Ok = function (a) { + return {ctor: 'Ok', _0: a}; +}; +var _elm_lang$core$Result$map = F2( + function (func, ra) { + var _p3 = ra; + if (_p3.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + func(_p3._0)); + } else { + return _elm_lang$core$Result$Err(_p3._0); + } + }); +var _elm_lang$core$Result$map2 = F3( + function (func, ra, rb) { + var _p4 = {ctor: '_Tuple2', _0: ra, _1: rb}; + if (_p4._0.ctor === 'Ok') { + if (_p4._1.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A2(func, _p4._0._0, _p4._1._0)); + } else { + return _elm_lang$core$Result$Err(_p4._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p4._0._0); + } + }); +var _elm_lang$core$Result$map3 = F4( + function (func, ra, rb, rc) { + var _p5 = {ctor: '_Tuple3', _0: ra, _1: rb, _2: rc}; + if (_p5._0.ctor === 'Ok') { + if (_p5._1.ctor === 'Ok') { + if (_p5._2.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A3(func, _p5._0._0, _p5._1._0, _p5._2._0)); + } else { + return _elm_lang$core$Result$Err(_p5._2._0); + } + } else { + return _elm_lang$core$Result$Err(_p5._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p5._0._0); + } + }); +var _elm_lang$core$Result$map4 = F5( + function (func, ra, rb, rc, rd) { + var _p6 = {ctor: '_Tuple4', _0: ra, _1: rb, _2: rc, _3: rd}; + if (_p6._0.ctor === 'Ok') { + if (_p6._1.ctor === 'Ok') { + if (_p6._2.ctor === 'Ok') { + if (_p6._3.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A4(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0)); + } else { + return _elm_lang$core$Result$Err(_p6._3._0); + } + } else { + return _elm_lang$core$Result$Err(_p6._2._0); + } + } else { + return _elm_lang$core$Result$Err(_p6._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p6._0._0); + } + }); +var _elm_lang$core$Result$map5 = F6( + function (func, ra, rb, rc, rd, re) { + var _p7 = {ctor: '_Tuple5', _0: ra, _1: rb, _2: rc, _3: rd, _4: re}; + if (_p7._0.ctor === 'Ok') { + if (_p7._1.ctor === 'Ok') { + if (_p7._2.ctor === 'Ok') { + if (_p7._3.ctor === 'Ok') { + if (_p7._4.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A5(func, _p7._0._0, _p7._1._0, _p7._2._0, _p7._3._0, _p7._4._0)); + } else { + return _elm_lang$core$Result$Err(_p7._4._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._3._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._2._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._0._0); + } + }); +var _elm_lang$core$Result$mapError = F2( + function (f, result) { + var _p8 = result; + if (_p8.ctor === 'Ok') { + return _elm_lang$core$Result$Ok(_p8._0); + } else { + return _elm_lang$core$Result$Err( + f(_p8._0)); + } + }); +var _elm_lang$core$Result$fromMaybe = F2( + function (err, maybe) { + var _p9 = maybe; + if (_p9.ctor === 'Just') { + return _elm_lang$core$Result$Ok(_p9._0); + } else { + return _elm_lang$core$Result$Err(err); + } + }); + +var _elm_lang$core$String$fromList = _elm_lang$core$Native_String.fromList; +var _elm_lang$core$String$toList = _elm_lang$core$Native_String.toList; +var _elm_lang$core$String$toFloat = _elm_lang$core$Native_String.toFloat; +var _elm_lang$core$String$toInt = _elm_lang$core$Native_String.toInt; +var _elm_lang$core$String$indices = _elm_lang$core$Native_String.indexes; +var _elm_lang$core$String$indexes = _elm_lang$core$Native_String.indexes; +var _elm_lang$core$String$endsWith = _elm_lang$core$Native_String.endsWith; +var _elm_lang$core$String$startsWith = _elm_lang$core$Native_String.startsWith; +var _elm_lang$core$String$contains = _elm_lang$core$Native_String.contains; +var _elm_lang$core$String$all = _elm_lang$core$Native_String.all; +var _elm_lang$core$String$any = _elm_lang$core$Native_String.any; +var _elm_lang$core$String$toLower = _elm_lang$core$Native_String.toLower; +var _elm_lang$core$String$toUpper = _elm_lang$core$Native_String.toUpper; +var _elm_lang$core$String$lines = _elm_lang$core$Native_String.lines; +var _elm_lang$core$String$words = _elm_lang$core$Native_String.words; +var _elm_lang$core$String$trimRight = _elm_lang$core$Native_String.trimRight; +var _elm_lang$core$String$trimLeft = _elm_lang$core$Native_String.trimLeft; +var _elm_lang$core$String$trim = _elm_lang$core$Native_String.trim; +var _elm_lang$core$String$padRight = _elm_lang$core$Native_String.padRight; +var _elm_lang$core$String$padLeft = _elm_lang$core$Native_String.padLeft; +var _elm_lang$core$String$pad = _elm_lang$core$Native_String.pad; +var _elm_lang$core$String$dropRight = _elm_lang$core$Native_String.dropRight; +var _elm_lang$core$String$dropLeft = _elm_lang$core$Native_String.dropLeft; +var _elm_lang$core$String$right = _elm_lang$core$Native_String.right; +var _elm_lang$core$String$left = _elm_lang$core$Native_String.left; +var _elm_lang$core$String$slice = _elm_lang$core$Native_String.slice; +var _elm_lang$core$String$repeat = _elm_lang$core$Native_String.repeat; +var _elm_lang$core$String$join = _elm_lang$core$Native_String.join; +var _elm_lang$core$String$split = _elm_lang$core$Native_String.split; +var _elm_lang$core$String$foldr = _elm_lang$core$Native_String.foldr; +var _elm_lang$core$String$foldl = _elm_lang$core$Native_String.foldl; +var _elm_lang$core$String$reverse = _elm_lang$core$Native_String.reverse; +var _elm_lang$core$String$filter = _elm_lang$core$Native_String.filter; +var _elm_lang$core$String$map = _elm_lang$core$Native_String.map; +var _elm_lang$core$String$length = _elm_lang$core$Native_String.length; +var _elm_lang$core$String$concat = _elm_lang$core$Native_String.concat; +var _elm_lang$core$String$append = _elm_lang$core$Native_String.append; +var _elm_lang$core$String$uncons = _elm_lang$core$Native_String.uncons; +var _elm_lang$core$String$cons = _elm_lang$core$Native_String.cons; +var _elm_lang$core$String$fromChar = function ($char) { + return A2(_elm_lang$core$String$cons, $char, ''); +}; +var _elm_lang$core$String$isEmpty = _elm_lang$core$Native_String.isEmpty; + +var _elm_lang$core$Dict$foldr = F3( + function (f, acc, t) { + foldr: + while (true) { + var _p0 = t; + if (_p0.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v1 = f, + _v2 = A3( + f, + _p0._1, + _p0._2, + A3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)), + _v3 = _p0._3; + f = _v1; + acc = _v2; + t = _v3; + continue foldr; + } + } + }); +var _elm_lang$core$Dict$keys = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, keyList) { + return {ctor: '::', _0: key, _1: keyList}; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$values = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, valueList) { + return {ctor: '::', _0: value, _1: valueList}; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$toList = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, list) { + return { + ctor: '::', + _0: {ctor: '_Tuple2', _0: key, _1: value}, + _1: list + }; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$foldl = F3( + function (f, acc, dict) { + foldl: + while (true) { + var _p1 = dict; + if (_p1.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v5 = f, + _v6 = A3( + f, + _p1._1, + _p1._2, + A3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)), + _v7 = _p1._4; + f = _v5; + acc = _v6; + dict = _v7; + continue foldl; + } + } + }); +var _elm_lang$core$Dict$merge = F6( + function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) { + var stepState = F3( + function (rKey, rValue, _p2) { + stepState: + while (true) { + var _p3 = _p2; + var _p9 = _p3._1; + var _p8 = _p3._0; + var _p4 = _p8; + if (_p4.ctor === '[]') { + return { + ctor: '_Tuple2', + _0: _p8, + _1: A3(rightStep, rKey, rValue, _p9) + }; + } else { + var _p7 = _p4._1; + var _p6 = _p4._0._1; + var _p5 = _p4._0._0; + if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) { + var _v10 = rKey, + _v11 = rValue, + _v12 = { + ctor: '_Tuple2', + _0: _p7, + _1: A3(leftStep, _p5, _p6, _p9) + }; + rKey = _v10; + rValue = _v11; + _p2 = _v12; + continue stepState; + } else { + if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) { + return { + ctor: '_Tuple2', + _0: _p8, + _1: A3(rightStep, rKey, rValue, _p9) + }; + } else { + return { + ctor: '_Tuple2', + _0: _p7, + _1: A4(bothStep, _p5, _p6, rValue, _p9) + }; + } + } + } + } + }); + var _p10 = A3( + _elm_lang$core$Dict$foldl, + stepState, + { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$toList(leftDict), + _1: initialResult + }, + rightDict); + var leftovers = _p10._0; + var intermediateResult = _p10._1; + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p11, result) { + var _p12 = _p11; + return A3(leftStep, _p12._0, _p12._1, result); + }), + intermediateResult, + leftovers); + }); +var _elm_lang$core$Dict$reportRemBug = F4( + function (msg, c, lgot, rgot) { + return _elm_lang$core$Native_Debug.crash( + _elm_lang$core$String$concat( + { + ctor: '::', + _0: 'Internal red-black tree invariant violated, expected ', + _1: { + ctor: '::', + _0: msg, + _1: { + ctor: '::', + _0: ' and got ', + _1: { + ctor: '::', + _0: _elm_lang$core$Basics$toString(c), + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: lgot, + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: rgot, + _1: { + ctor: '::', + _0: '\nPlease report this bug to ', + _1: {ctor: '[]'} + } + } + } + } + } + } + } + } + })); + }); +var _elm_lang$core$Dict$isBBlack = function (dict) { + var _p13 = dict; + _v14_2: + do { + if (_p13.ctor === 'RBNode_elm_builtin') { + if (_p13._0.ctor === 'BBlack') { + return true; + } else { + break _v14_2; + } + } else { + if (_p13._0.ctor === 'LBBlack') { + return true; + } else { + break _v14_2; + } + } + } while(false); + return false; +}; +var _elm_lang$core$Dict$sizeHelp = F2( + function (n, dict) { + sizeHelp: + while (true) { + var _p14 = dict; + if (_p14.ctor === 'RBEmpty_elm_builtin') { + return n; + } else { + var _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4), + _v17 = _p14._3; + n = _v16; + dict = _v17; + continue sizeHelp; + } + } + }); +var _elm_lang$core$Dict$size = function (dict) { + return A2(_elm_lang$core$Dict$sizeHelp, 0, dict); +}; +var _elm_lang$core$Dict$get = F2( + function (targetKey, dict) { + get: + while (true) { + var _p15 = dict; + if (_p15.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Maybe$Nothing; + } else { + var _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1); + switch (_p16.ctor) { + case 'LT': + var _v20 = targetKey, + _v21 = _p15._3; + targetKey = _v20; + dict = _v21; + continue get; + case 'EQ': + return _elm_lang$core$Maybe$Just(_p15._2); + default: + var _v22 = targetKey, + _v23 = _p15._4; + targetKey = _v22; + dict = _v23; + continue get; + } + } + } + }); +var _elm_lang$core$Dict$member = F2( + function (key, dict) { + var _p17 = A2(_elm_lang$core$Dict$get, key, dict); + if (_p17.ctor === 'Just') { + return true; + } else { + return false; + } + }); +var _elm_lang$core$Dict$maxWithDefault = F3( + function (k, v, r) { + maxWithDefault: + while (true) { + var _p18 = r; + if (_p18.ctor === 'RBEmpty_elm_builtin') { + return {ctor: '_Tuple2', _0: k, _1: v}; + } else { + var _v26 = _p18._1, + _v27 = _p18._2, + _v28 = _p18._4; + k = _v26; + v = _v27; + r = _v28; + continue maxWithDefault; + } + } + }); +var _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'}; +var _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'}; +var _elm_lang$core$Dict$Black = {ctor: 'Black'}; +var _elm_lang$core$Dict$blackish = function (t) { + var _p19 = t; + if (_p19.ctor === 'RBNode_elm_builtin') { + var _p20 = _p19._0; + return _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack); + } else { + return true; + } +}; +var _elm_lang$core$Dict$Red = {ctor: 'Red'}; +var _elm_lang$core$Dict$moreBlack = function (color) { + var _p21 = color; + switch (_p21.ctor) { + case 'Black': + return _elm_lang$core$Dict$BBlack; + case 'Red': + return _elm_lang$core$Dict$Black; + case 'NBlack': + return _elm_lang$core$Dict$Red; + default: + return _elm_lang$core$Native_Debug.crash('Can\'t make a double black node more black!'); + } +}; +var _elm_lang$core$Dict$lessBlack = function (color) { + var _p22 = color; + switch (_p22.ctor) { + case 'BBlack': + return _elm_lang$core$Dict$Black; + case 'Black': + return _elm_lang$core$Dict$Red; + case 'Red': + return _elm_lang$core$Dict$NBlack; + default: + return _elm_lang$core$Native_Debug.crash('Can\'t make a negative black node less black!'); + } +}; +var _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'}; +var _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'}; +var _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) { + return {ctor: 'RBEmpty_elm_builtin', _0: a}; +}; +var _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); +var _elm_lang$core$Dict$isEmpty = function (dict) { + return _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty); +}; +var _elm_lang$core$Dict$RBNode_elm_builtin = F5( + function (a, b, c, d, e) { + return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e}; + }); +var _elm_lang$core$Dict$ensureBlackRoot = function (dict) { + var _p23 = dict; + if ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4); + } else { + return dict; + } +}; +var _elm_lang$core$Dict$lessBlackTree = function (dict) { + var _p24 = dict; + if (_p24.ctor === 'RBNode_elm_builtin') { + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$lessBlack(_p24._0), + _p24._1, + _p24._2, + _p24._3, + _p24._4); + } else { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } +}; +var _elm_lang$core$Dict$balancedTree = function (col) { + return function (xk) { + return function (xv) { + return function (yk) { + return function (yv) { + return function (zk) { + return function (zv) { + return function (a) { + return function (b) { + return function (c) { + return function (d) { + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$lessBlack(col), + yk, + yv, + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b), + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d)); + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; +}; +var _elm_lang$core$Dict$blacken = function (t) { + var _p25 = t; + if (_p25.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } else { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4); + } +}; +var _elm_lang$core$Dict$redden = function (t) { + var _p26 = t; + if (_p26.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Native_Debug.crash('can\'t make a Leaf red'); + } else { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4); + } +}; +var _elm_lang$core$Dict$balanceHelp = function (tree) { + var _p27 = tree; + _v36_6: + do { + _v36_5: + do { + _v36_4: + do { + _v36_3: + do { + _v36_2: + do { + _v36_1: + do { + _v36_0: + do { + if (_p27.ctor === 'RBNode_elm_builtin') { + if (_p27._3.ctor === 'RBNode_elm_builtin') { + if (_p27._4.ctor === 'RBNode_elm_builtin') { + switch (_p27._3._0.ctor) { + case 'Red': + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + } + } + case 'NBlack': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + } + } + default: + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + break _v36_6; + } + } + } + case 'NBlack': + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + } + case 'NBlack': + if (_p27._0.ctor === 'BBlack') { + if ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + if ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + } else { + break _v36_6; + } + default: + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + default: + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } + } else { + switch (_p27._3._0.ctor) { + case 'Red': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } + } else { + if (_p27._4.ctor === 'RBNode_elm_builtin') { + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } else { + break _v36_6; + } + } + } else { + break _v36_6; + } + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4); + } while(false); + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$Black, + _p27._4._3._1, + _p27._4._3._2, + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3), + A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$Black, + _p27._4._1, + _p27._4._2, + _p27._4._3._4, + _elm_lang$core$Dict$redden(_p27._4._4))); + } while(false); + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$Black, + _p27._3._4._1, + _p27._3._4._2, + A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$Black, + _p27._3._1, + _p27._3._2, + _elm_lang$core$Dict$redden(_p27._3._3), + _p27._3._4._3), + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4)); + } while(false); + return tree; +}; +var _elm_lang$core$Dict$balance = F5( + function (c, k, v, l, r) { + var tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); + return _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree; + }); +var _elm_lang$core$Dict$bubble = F5( + function (c, k, v, l, r) { + return (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$moreBlack(c), + k, + v, + _elm_lang$core$Dict$lessBlackTree(l), + _elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); + }); +var _elm_lang$core$Dict$removeMax = F5( + function (c, k, v, l, r) { + var _p28 = r; + if (_p28.ctor === 'RBEmpty_elm_builtin') { + return A3(_elm_lang$core$Dict$rem, c, l, r); + } else { + return A5( + _elm_lang$core$Dict$bubble, + c, + k, + v, + l, + A5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4)); + } + }); +var _elm_lang$core$Dict$rem = F3( + function (color, left, right) { + var _p29 = {ctor: '_Tuple2', _0: left, _1: right}; + if (_p29._0.ctor === 'RBEmpty_elm_builtin') { + if (_p29._1.ctor === 'RBEmpty_elm_builtin') { + var _p30 = color; + switch (_p30.ctor) { + case 'Red': + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + case 'Black': + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack); + default: + return _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); + } + } else { + var _p33 = _p29._1._0; + var _p32 = _p29._0._0; + var _p31 = {ctor: '_Tuple3', _0: color, _1: _p32, _2: _p33}; + if ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4); + } else { + return A4( + _elm_lang$core$Dict$reportRemBug, + 'Black/LBlack/Red', + color, + _elm_lang$core$Basics$toString(_p32), + _elm_lang$core$Basics$toString(_p33)); + } + } + } else { + if (_p29._1.ctor === 'RBEmpty_elm_builtin') { + var _p36 = _p29._1._0; + var _p35 = _p29._0._0; + var _p34 = {ctor: '_Tuple3', _0: color, _1: _p35, _2: _p36}; + if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4); + } else { + return A4( + _elm_lang$core$Dict$reportRemBug, + 'Black/Red/LBlack', + color, + _elm_lang$core$Basics$toString(_p35), + _elm_lang$core$Basics$toString(_p36)); + } + } else { + var _p40 = _p29._0._2; + var _p39 = _p29._0._4; + var _p38 = _p29._0._1; + var newLeft = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39); + var _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39); + var k = _p37._0; + var v = _p37._1; + return A5(_elm_lang$core$Dict$bubble, color, k, v, newLeft, right); + } + } + }); +var _elm_lang$core$Dict$map = F2( + function (f, dict) { + var _p41 = dict; + if (_p41.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } else { + var _p42 = _p41._1; + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _p41._0, + _p42, + A2(f, _p42, _p41._2), + A2(_elm_lang$core$Dict$map, f, _p41._3), + A2(_elm_lang$core$Dict$map, f, _p41._4)); + } + }); +var _elm_lang$core$Dict$Same = {ctor: 'Same'}; +var _elm_lang$core$Dict$Remove = {ctor: 'Remove'}; +var _elm_lang$core$Dict$Insert = {ctor: 'Insert'}; +var _elm_lang$core$Dict$update = F3( + function (k, alter, dict) { + var up = function (dict) { + var _p43 = dict; + if (_p43.ctor === 'RBEmpty_elm_builtin') { + var _p44 = alter(_elm_lang$core$Maybe$Nothing); + if (_p44.ctor === 'Nothing') { + return {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty}; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty) + }; + } + } else { + var _p55 = _p43._2; + var _p54 = _p43._4; + var _p53 = _p43._3; + var _p52 = _p43._1; + var _p51 = _p43._0; + var _p45 = A2(_elm_lang$core$Basics$compare, k, _p52); + switch (_p45.ctor) { + case 'EQ': + var _p46 = alter( + _elm_lang$core$Maybe$Just(_p55)); + if (_p46.ctor === 'Nothing') { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54) + }; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54) + }; + } + case 'LT': + var _p47 = up(_p53); + var flag = _p47._0; + var newLeft = _p47._1; + var _p48 = flag; + switch (_p48.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54) + }; + } + default: + var _p49 = up(_p54); + var flag = _p49._0; + var newRight = _p49._1; + var _p50 = flag; + switch (_p50.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight) + }; + } + } + } + }; + var _p56 = up(dict); + var flag = _p56._0; + var updatedDict = _p56._1; + var _p57 = flag; + switch (_p57.ctor) { + case 'Same': + return updatedDict; + case 'Insert': + return _elm_lang$core$Dict$ensureBlackRoot(updatedDict); + default: + return _elm_lang$core$Dict$blacken(updatedDict); + } + }); +var _elm_lang$core$Dict$insert = F3( + function (key, value, dict) { + return A3( + _elm_lang$core$Dict$update, + key, + _elm_lang$core$Basics$always( + _elm_lang$core$Maybe$Just(value)), + dict); + }); +var _elm_lang$core$Dict$singleton = F2( + function (key, value) { + return A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty); + }); +var _elm_lang$core$Dict$union = F2( + function (t1, t2) { + return A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1); + }); +var _elm_lang$core$Dict$filter = F2( + function (predicate, dictionary) { + var add = F3( + function (key, value, dict) { + return A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict; + }); + return A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary); + }); +var _elm_lang$core$Dict$intersect = F2( + function (t1, t2) { + return A2( + _elm_lang$core$Dict$filter, + F2( + function (k, _p58) { + return A2(_elm_lang$core$Dict$member, k, t2); + }), + t1); + }); +var _elm_lang$core$Dict$partition = F2( + function (predicate, dict) { + var add = F3( + function (key, value, _p59) { + var _p60 = _p59; + var _p62 = _p60._1; + var _p61 = _p60._0; + return A2(predicate, key, value) ? { + ctor: '_Tuple2', + _0: A3(_elm_lang$core$Dict$insert, key, value, _p61), + _1: _p62 + } : { + ctor: '_Tuple2', + _0: _p61, + _1: A3(_elm_lang$core$Dict$insert, key, value, _p62) + }; + }); + return A3( + _elm_lang$core$Dict$foldl, + add, + {ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty}, + dict); + }); +var _elm_lang$core$Dict$fromList = function (assocs) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p63, dict) { + var _p64 = _p63; + return A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict); + }), + _elm_lang$core$Dict$empty, + assocs); +}; +var _elm_lang$core$Dict$remove = F2( + function (key, dict) { + return A3( + _elm_lang$core$Dict$update, + key, + _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), + dict); + }); +var _elm_lang$core$Dict$diff = F2( + function (t1, t2) { + return A3( + _elm_lang$core$Dict$foldl, + F3( + function (k, v, t) { + return A2(_elm_lang$core$Dict$remove, k, t); + }), + t1, + t2); + }); + +var _elm_lang$core$Debug$crash = _elm_lang$core$Native_Debug.crash; +var _elm_lang$core$Debug$log = _elm_lang$core$Native_Debug.log; + +var _elm_lang$core$Tuple$mapSecond = F2( + function (func, _p0) { + var _p1 = _p0; + return { + ctor: '_Tuple2', + _0: _p1._0, + _1: func(_p1._1) + }; + }); +var _elm_lang$core$Tuple$mapFirst = F2( + function (func, _p2) { + var _p3 = _p2; + return { + ctor: '_Tuple2', + _0: func(_p3._0), + _1: _p3._1 + }; + }); +var _elm_lang$core$Tuple$second = function (_p4) { + var _p5 = _p4; + return _p5._1; +}; +var _elm_lang$core$Tuple$first = function (_p6) { + var _p7 = _p6; + return _p7._0; +}; + +//import // + +var _elm_lang$core$Native_Platform = function() { + + +// PROGRAMS + +function program(impl) +{ + return function(flagDecoder) + { + return function(object, moduleName) + { + object['worker'] = function worker(flags) + { + if (typeof flags !== 'undefined') + { + throw new Error( + 'The `' + moduleName + '` module does not need flags.\n' + + 'Call ' + moduleName + '.worker() with no arguments and you should be all set!' + ); + } + + return initialize( + impl.init, + impl.update, + impl.subscriptions, + renderer + ); + }; + }; + }; +} + +function programWithFlags(impl) +{ + return function(flagDecoder) + { + return function(object, moduleName) + { + object['worker'] = function worker(flags) + { + if (typeof flagDecoder === 'undefined') + { + throw new Error( + 'Are you trying to sneak a Never value into Elm? Trickster!\n' + + 'It looks like ' + moduleName + '.main is defined with `programWithFlags` but has type `Program Never`.\n' + + 'Use `program` instead if you do not want flags.' + ); + } + + var result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags); + if (result.ctor === 'Err') + { + throw new Error( + moduleName + '.worker(...) was called with an unexpected argument.\n' + + 'I tried to convert it to an Elm value, but ran into this problem:\n\n' + + result._0 + ); + } + + return initialize( + impl.init(result._0), + impl.update, + impl.subscriptions, + renderer + ); + }; + }; + }; +} + +function renderer(enqueue, _) +{ + return function(_) {}; +} + + +// HTML TO PROGRAM + +function htmlToProgram(vnode) +{ + var emptyBag = batch(_elm_lang$core$Native_List.Nil); + var noChange = _elm_lang$core$Native_Utils.Tuple2( + _elm_lang$core$Native_Utils.Tuple0, + emptyBag + ); + + return _elm_lang$virtual_dom$VirtualDom$program({ + init: noChange, + view: function(model) { return main; }, + update: F2(function(msg, model) { return noChange; }), + subscriptions: function (model) { return emptyBag; } + }); +} + + +// INITIALIZE A PROGRAM + +function initialize(init, update, subscriptions, renderer) +{ + // ambient state + var managers = {}; + var updateView; + + // init and update state in main process + var initApp = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + var model = init._0; + updateView = renderer(enqueue, model); + var cmds = init._1; + var subs = subscriptions(model); + dispatchEffects(managers, cmds, subs); + callback(_elm_lang$core$Native_Scheduler.succeed(model)); + }); + + function onMessage(msg, model) + { + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + var results = A2(update, msg, model); + model = results._0; + updateView(model); + var cmds = results._1; + var subs = subscriptions(model); + dispatchEffects(managers, cmds, subs); + callback(_elm_lang$core$Native_Scheduler.succeed(model)); + }); + } + + var mainProcess = spawnLoop(initApp, onMessage); + + function enqueue(msg) + { + _elm_lang$core$Native_Scheduler.rawSend(mainProcess, msg); + } + + var ports = setupEffects(managers, enqueue); + + return ports ? { ports: ports } : {}; +} + + +// EFFECT MANAGERS + +var effectManagers = {}; + +function setupEffects(managers, callback) +{ + var ports; + + // setup all necessary effect managers + for (var key in effectManagers) + { + var manager = effectManagers[key]; + + if (manager.isForeign) + { + ports = ports || {}; + ports[key] = manager.tag === 'cmd' + ? setupOutgoingPort(key) + : setupIncomingPort(key, callback); + } + + managers[key] = makeManager(manager, callback); + } + + return ports; +} + +function makeManager(info, callback) +{ + var router = { + main: callback, + self: undefined + }; + + var tag = info.tag; + var onEffects = info.onEffects; + var onSelfMsg = info.onSelfMsg; + + function onMessage(msg, state) + { + if (msg.ctor === 'self') + { + return A3(onSelfMsg, router, msg._0, state); + } + + var fx = msg._0; + switch (tag) + { + case 'cmd': + return A3(onEffects, router, fx.cmds, state); + + case 'sub': + return A3(onEffects, router, fx.subs, state); + + case 'fx': + return A4(onEffects, router, fx.cmds, fx.subs, state); + } + } + + var process = spawnLoop(info.init, onMessage); + router.self = process; + return process; +} + +function sendToApp(router, msg) +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + router.main(msg); + callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0)); + }); +} + +function sendToSelf(router, msg) +{ + return A2(_elm_lang$core$Native_Scheduler.send, router.self, { + ctor: 'self', + _0: msg + }); +} + + +// HELPER for STATEFUL LOOPS + +function spawnLoop(init, onMessage) +{ + var andThen = _elm_lang$core$Native_Scheduler.andThen; + + function loop(state) + { + var handleMsg = _elm_lang$core$Native_Scheduler.receive(function(msg) { + return onMessage(msg, state); + }); + return A2(andThen, loop, handleMsg); + } + + var task = A2(andThen, loop, init); + + return _elm_lang$core$Native_Scheduler.rawSpawn(task); +} + + +// BAGS + +function leaf(home) +{ + return function(value) + { + return { + type: 'leaf', + home: home, + value: value + }; + }; +} + +function batch(list) +{ + return { + type: 'node', + branches: list + }; +} + +function map(tagger, bag) +{ + return { + type: 'map', + tagger: tagger, + tree: bag + } +} + + +// PIPE BAGS INTO EFFECT MANAGERS + +function dispatchEffects(managers, cmdBag, subBag) +{ + var effectsDict = {}; + gatherEffects(true, cmdBag, effectsDict, null); + gatherEffects(false, subBag, effectsDict, null); + + for (var home in managers) + { + var fx = home in effectsDict + ? effectsDict[home] + : { + cmds: _elm_lang$core$Native_List.Nil, + subs: _elm_lang$core$Native_List.Nil + }; + + _elm_lang$core$Native_Scheduler.rawSend(managers[home], { ctor: 'fx', _0: fx }); + } +} + +function gatherEffects(isCmd, bag, effectsDict, taggers) +{ + switch (bag.type) + { + case 'leaf': + var home = bag.home; + var effect = toEffect(isCmd, home, taggers, bag.value); + effectsDict[home] = insert(isCmd, effect, effectsDict[home]); + return; + + case 'node': + var list = bag.branches; + while (list.ctor !== '[]') + { + gatherEffects(isCmd, list._0, effectsDict, taggers); + list = list._1; + } + return; + + case 'map': + gatherEffects(isCmd, bag.tree, effectsDict, { + tagger: bag.tagger, + rest: taggers + }); + return; + } +} + +function toEffect(isCmd, home, taggers, value) +{ + function applyTaggers(x) + { + var temp = taggers; + while (temp) + { + x = temp.tagger(x); + temp = temp.rest; + } + return x; + } + + var map = isCmd + ? effectManagers[home].cmdMap + : effectManagers[home].subMap; + + return A2(map, applyTaggers, value) +} + +function insert(isCmd, newEffect, effects) +{ + effects = effects || { + cmds: _elm_lang$core$Native_List.Nil, + subs: _elm_lang$core$Native_List.Nil + }; + if (isCmd) + { + effects.cmds = _elm_lang$core$Native_List.Cons(newEffect, effects.cmds); + return effects; + } + effects.subs = _elm_lang$core$Native_List.Cons(newEffect, effects.subs); + return effects; +} + + +// PORTS + +function checkPortName(name) +{ + if (name in effectManagers) + { + throw new Error('There can only be one port named `' + name + '`, but your program has multiple.'); + } +} + + +// OUTGOING PORTS + +function outgoingPort(name, converter) +{ + checkPortName(name); + effectManagers[name] = { + tag: 'cmd', + cmdMap: outgoingPortMap, + converter: converter, + isForeign: true + }; + return leaf(name); +} + +var outgoingPortMap = F2(function cmdMap(tagger, value) { + return value; +}); + +function setupOutgoingPort(name) +{ + var subs = []; + var converter = effectManagers[name].converter; + + // CREATE MANAGER + + var init = _elm_lang$core$Native_Scheduler.succeed(null); + + function onEffects(router, cmdList, state) + { + while (cmdList.ctor !== '[]') + { + // grab a separate reference to subs in case unsubscribe is called + var currentSubs = subs; + var value = converter(cmdList._0); + for (var i = 0; i < currentSubs.length; i++) + { + currentSubs[i](value); + } + cmdList = cmdList._1; + } + return init; + } + + effectManagers[name].init = init; + effectManagers[name].onEffects = F3(onEffects); + + // PUBLIC API + + function subscribe(callback) + { + subs.push(callback); + } + + function unsubscribe(callback) + { + // copy subs into a new array in case unsubscribe is called within a + // subscribed callback + subs = subs.slice(); + var index = subs.indexOf(callback); + if (index >= 0) + { + subs.splice(index, 1); + } + } + + return { + subscribe: subscribe, + unsubscribe: unsubscribe + }; +} + + +// INCOMING PORTS + +function incomingPort(name, converter) +{ + checkPortName(name); + effectManagers[name] = { + tag: 'sub', + subMap: incomingPortMap, + converter: converter, + isForeign: true + }; + return leaf(name); +} + +var incomingPortMap = F2(function subMap(tagger, finalTagger) +{ + return function(value) + { + return tagger(finalTagger(value)); + }; +}); + +function setupIncomingPort(name, callback) +{ + var sentBeforeInit = []; + var subs = _elm_lang$core$Native_List.Nil; + var converter = effectManagers[name].converter; + var currentOnEffects = preInitOnEffects; + var currentSend = preInitSend; + + // CREATE MANAGER + + var init = _elm_lang$core$Native_Scheduler.succeed(null); + + function preInitOnEffects(router, subList, state) + { + var postInitResult = postInitOnEffects(router, subList, state); + + for(var i = 0; i < sentBeforeInit.length; i++) + { + postInitSend(sentBeforeInit[i]); + } + + sentBeforeInit = null; // to release objects held in queue + currentSend = postInitSend; + currentOnEffects = postInitOnEffects; + return postInitResult; + } + + function postInitOnEffects(router, subList, state) + { + subs = subList; + return init; + } + + function onEffects(router, subList, state) + { + return currentOnEffects(router, subList, state); + } + + effectManagers[name].init = init; + effectManagers[name].onEffects = F3(onEffects); + + // PUBLIC API + + function preInitSend(value) + { + sentBeforeInit.push(value); + } + + function postInitSend(value) + { + var temp = subs; + while (temp.ctor !== '[]') + { + callback(temp._0(value)); + temp = temp._1; + } + } + + function send(incomingValue) + { + var result = A2(_elm_lang$core$Json_Decode$decodeValue, converter, incomingValue); + if (result.ctor === 'Err') + { + throw new Error('Trying to send an unexpected type of value through port `' + name + '`:\n' + result._0); + } + + currentSend(result._0); + } + + return { send: send }; +} + +return { + // routers + sendToApp: F2(sendToApp), + sendToSelf: F2(sendToSelf), + + // global setup + effectManagers: effectManagers, + outgoingPort: outgoingPort, + incomingPort: incomingPort, + + htmlToProgram: htmlToProgram, + program: program, + programWithFlags: programWithFlags, + initialize: initialize, + + // effect bags + leaf: leaf, + batch: batch, + map: F2(map) +}; + +}(); + +//import Native.Utils // + +var _elm_lang$core$Native_Scheduler = function() { + +var MAX_STEPS = 10000; + + +// TASKS + +function succeed(value) +{ + return { + ctor: '_Task_succeed', + value: value + }; +} + +function fail(error) +{ + return { + ctor: '_Task_fail', + value: error + }; +} + +function nativeBinding(callback) +{ + return { + ctor: '_Task_nativeBinding', + callback: callback, + cancel: null + }; +} + +function andThen(callback, task) +{ + return { + ctor: '_Task_andThen', + callback: callback, + task: task + }; +} + +function onError(callback, task) +{ + return { + ctor: '_Task_onError', + callback: callback, + task: task + }; +} + +function receive(callback) +{ + return { + ctor: '_Task_receive', + callback: callback + }; +} + + +// PROCESSES + +function rawSpawn(task) +{ + var process = { + ctor: '_Process', + id: _elm_lang$core$Native_Utils.guid(), + root: task, + stack: null, + mailbox: [] + }; + + enqueue(process); + + return process; +} + +function spawn(task) +{ + return nativeBinding(function(callback) { + var process = rawSpawn(task); + callback(succeed(process)); + }); +} + +function rawSend(process, msg) +{ + process.mailbox.push(msg); + enqueue(process); +} + +function send(process, msg) +{ + return nativeBinding(function(callback) { + rawSend(process, msg); + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); + }); +} + +function kill(process) +{ + return nativeBinding(function(callback) { + var root = process.root; + if (root.ctor === '_Task_nativeBinding' && root.cancel) + { + root.cancel(); + } + + process.root = null; + + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); + }); +} + +function sleep(time) +{ + return nativeBinding(function(callback) { + var id = setTimeout(function() { + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); + }, time); + + return function() { clearTimeout(id); }; + }); +} + + +// STEP PROCESSES + +function step(numSteps, process) +{ + while (numSteps < MAX_STEPS) + { + var ctor = process.root.ctor; + + if (ctor === '_Task_succeed') + { + while (process.stack && process.stack.ctor === '_Task_onError') + { + process.stack = process.stack.rest; + } + if (process.stack === null) + { + break; + } + process.root = process.stack.callback(process.root.value); + process.stack = process.stack.rest; + ++numSteps; + continue; + } + + if (ctor === '_Task_fail') + { + while (process.stack && process.stack.ctor === '_Task_andThen') + { + process.stack = process.stack.rest; + } + if (process.stack === null) + { + break; + } + process.root = process.stack.callback(process.root.value); + process.stack = process.stack.rest; + ++numSteps; + continue; + } + + if (ctor === '_Task_andThen') + { + process.stack = { + ctor: '_Task_andThen', + callback: process.root.callback, + rest: process.stack + }; + process.root = process.root.task; + ++numSteps; + continue; + } + + if (ctor === '_Task_onError') + { + process.stack = { + ctor: '_Task_onError', + callback: process.root.callback, + rest: process.stack + }; + process.root = process.root.task; + ++numSteps; + continue; + } + + if (ctor === '_Task_nativeBinding') + { + process.root.cancel = process.root.callback(function(newRoot) { + process.root = newRoot; + enqueue(process); + }); + + break; + } + + if (ctor === '_Task_receive') + { + var mailbox = process.mailbox; + if (mailbox.length === 0) + { + break; + } + + process.root = process.root.callback(mailbox.shift()); + ++numSteps; + continue; + } + + throw new Error(ctor); + } + + if (numSteps < MAX_STEPS) + { + return numSteps + 1; + } + enqueue(process); + + return numSteps; +} + + +// WORK QUEUE + +var working = false; +var workQueue = []; + +function enqueue(process) +{ + workQueue.push(process); + + if (!working) + { + setTimeout(work, 0); + working = true; + } +} + +function work() +{ + var numSteps = 0; + var process; + while (numSteps < MAX_STEPS && (process = workQueue.shift())) + { + if (process.root) + { + numSteps = step(numSteps, process); + } + } + if (!process) + { + working = false; + return; + } + setTimeout(work, 0); +} + + +return { + succeed: succeed, + fail: fail, + nativeBinding: nativeBinding, + andThen: F2(andThen), + onError: F2(onError), + receive: receive, + + spawn: spawn, + kill: kill, + sleep: sleep, + send: F2(send), + + rawSpawn: rawSpawn, + rawSend: rawSend +}; + +}(); +var _elm_lang$core$Platform_Cmd$batch = _elm_lang$core$Native_Platform.batch; +var _elm_lang$core$Platform_Cmd$none = _elm_lang$core$Platform_Cmd$batch( + {ctor: '[]'}); +var _elm_lang$core$Platform_Cmd_ops = _elm_lang$core$Platform_Cmd_ops || {}; +_elm_lang$core$Platform_Cmd_ops['!'] = F2( + function (model, commands) { + return { + ctor: '_Tuple2', + _0: model, + _1: _elm_lang$core$Platform_Cmd$batch(commands) + }; + }); +var _elm_lang$core$Platform_Cmd$map = _elm_lang$core$Native_Platform.map; +var _elm_lang$core$Platform_Cmd$Cmd = {ctor: 'Cmd'}; + +var _elm_lang$core$Platform_Sub$batch = _elm_lang$core$Native_Platform.batch; +var _elm_lang$core$Platform_Sub$none = _elm_lang$core$Platform_Sub$batch( + {ctor: '[]'}); +var _elm_lang$core$Platform_Sub$map = _elm_lang$core$Native_Platform.map; +var _elm_lang$core$Platform_Sub$Sub = {ctor: 'Sub'}; + +var _elm_lang$core$Platform$hack = _elm_lang$core$Native_Scheduler.succeed; +var _elm_lang$core$Platform$sendToSelf = _elm_lang$core$Native_Platform.sendToSelf; +var _elm_lang$core$Platform$sendToApp = _elm_lang$core$Native_Platform.sendToApp; +var _elm_lang$core$Platform$programWithFlags = _elm_lang$core$Native_Platform.programWithFlags; +var _elm_lang$core$Platform$program = _elm_lang$core$Native_Platform.program; +var _elm_lang$core$Platform$Program = {ctor: 'Program'}; +var _elm_lang$core$Platform$Task = {ctor: 'Task'}; +var _elm_lang$core$Platform$ProcessId = {ctor: 'ProcessId'}; +var _elm_lang$core$Platform$Router = {ctor: 'Router'}; + +var _eeue56$elm_all_dict$EveryDict$foldr = F3( + function (f, acc, t) { + foldr: + while (true) { + var _p0 = t; + if (_p0.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v1 = f, + _v2 = A3( + f, + _p0._1, + _p0._2, + A3(_eeue56$elm_all_dict$EveryDict$foldr, f, acc, _p0._4)), + _v3 = _p0._3; + f = _v1; + acc = _v2; + t = _v3; + continue foldr; + } + } + }); +var _eeue56$elm_all_dict$EveryDict$keys = function (dict) { + return A3( + _eeue56$elm_all_dict$EveryDict$foldr, + F3( + function (key, value, keyList) { + return {ctor: '::', _0: key, _1: keyList}; + }), + {ctor: '[]'}, + dict); +}; +var _eeue56$elm_all_dict$EveryDict$values = function (dict) { + return A3( + _eeue56$elm_all_dict$EveryDict$foldr, + F3( + function (key, value, valueList) { + return {ctor: '::', _0: value, _1: valueList}; + }), + {ctor: '[]'}, + dict); +}; +var _eeue56$elm_all_dict$EveryDict$toList = function (dict) { + return A3( + _eeue56$elm_all_dict$EveryDict$foldr, + F3( + function (key, value, list) { + return { + ctor: '::', + _0: {ctor: '_Tuple2', _0: key, _1: value}, + _1: list + }; + }), + {ctor: '[]'}, + dict); +}; +var _eeue56$elm_all_dict$EveryDict$foldl = F3( + function (f, acc, dict) { + foldl: + while (true) { + var _p1 = dict; + if (_p1.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v5 = f, + _v6 = A3( + f, + _p1._1, + _p1._2, + A3(_eeue56$elm_all_dict$EveryDict$foldl, f, acc, _p1._3)), + _v7 = _p1._4; + f = _v5; + acc = _v6; + dict = _v7; + continue foldl; + } + } + }); +var _eeue56$elm_all_dict$EveryDict$isBBlack = function (dict) { + var _p2 = dict; + _v8_2: + do { + if (_p2.ctor === 'RBNode_elm_builtin') { + if (_p2._0.ctor === 'BBlack') { + return true; + } else { + break _v8_2; + } + } else { + if (_p2._0.ctor === 'LBBlack') { + return true; + } else { + break _v8_2; + } + } + } while(false); + return false; +}; +var _eeue56$elm_all_dict$EveryDict$showFlag = function (f) { + var _p3 = f; + switch (_p3.ctor) { + case 'Insert': + return 'Insert'; + case 'Remove': + return 'Remove'; + default: + return 'Same'; + } +}; +var _eeue56$elm_all_dict$EveryDict$sizeHelp = F2( + function (n, dict) { + sizeHelp: + while (true) { + var _p4 = dict; + if (_p4.ctor === 'RBEmpty_elm_builtin') { + return n; + } else { + var _v11 = A2(_eeue56$elm_all_dict$EveryDict$sizeHelp, n + 1, _p4._4), + _v12 = _p4._3; + n = _v11; + dict = _v12; + continue sizeHelp; + } + } + }); +var _eeue56$elm_all_dict$EveryDict$size = function (dict) { + return A2(_eeue56$elm_all_dict$EveryDict$sizeHelp, 0, dict); +}; +var _eeue56$elm_all_dict$EveryDict$isEmpty = function (dict) { + var _p5 = dict; + if (_p5.ctor === 'RBEmpty_elm_builtin') { + return true; + } else { + return false; + } +}; +var _eeue56$elm_all_dict$EveryDict$max = function (dict) { + max: + while (true) { + var _p6 = dict; + if (_p6.ctor === 'RBNode_elm_builtin') { + if (_p6._4.ctor === 'RBEmpty_elm_builtin') { + return {ctor: '_Tuple2', _0: _p6._1, _1: _p6._2}; + } else { + var _v15 = _p6._4; + dict = _v15; + continue max; + } + } else { + return _elm_lang$core$Native_Utils.crashCase( + 'EveryDict', + { + start: {line: 127, column: 5}, + end: {line: 135, column: 51} + }, + _p6)('(max Empty) is not defined'); + } + } +}; +var _eeue56$elm_all_dict$EveryDict$min = function (dict) { + min: + while (true) { + var _p8 = dict; + if (_p8.ctor === 'RBNode_elm_builtin') { + if ((_p8._3.ctor === 'RBEmpty_elm_builtin') && (_p8._3._0.ctor === 'LBlack')) { + return {ctor: '_Tuple2', _0: _p8._1, _1: _p8._2}; + } else { + var _v17 = _p8._3; + dict = _v17; + continue min; + } + } else { + return _elm_lang$core$Native_Utils.crashCase( + 'EveryDict', + { + start: {line: 115, column: 5}, + end: {line: 123, column: 51} + }, + _p8)('(min Empty) is not defined'); + } + } +}; +var _eeue56$elm_all_dict$EveryDict$eq = F2( + function (first, second) { + return _elm_lang$core$Native_Utils.eq( + _eeue56$elm_all_dict$EveryDict$toList(first), + _eeue56$elm_all_dict$EveryDict$toList(second)); + }); +var _eeue56$elm_all_dict$EveryDict$ord = _elm_lang$core$Basics$toString; +var _eeue56$elm_all_dict$EveryDict$get_ = F2( + function (targetKey, dict) { + get_: + while (true) { + var _p10 = dict; + if (_p10.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Maybe$Nothing; + } else { + var _p11 = A2( + _elm_lang$core$Basics$compare, + _eeue56$elm_all_dict$EveryDict$ord(targetKey), + _eeue56$elm_all_dict$EveryDict$ord(_p10._1)); + switch (_p11.ctor) { + case 'LT': + var _v20 = targetKey, + _v21 = _p10._3; + targetKey = _v20; + dict = _v21; + continue get_; + case 'EQ': + return _elm_lang$core$Maybe$Just(_p10._2); + default: + var _v22 = targetKey, + _v23 = _p10._4; + targetKey = _v22; + dict = _v23; + continue get_; + } + } + } + }); +var _eeue56$elm_all_dict$EveryDict$get = F2( + function (targetKey, dict) { + return A2(_eeue56$elm_all_dict$EveryDict$get_, targetKey, dict); + }); +var _eeue56$elm_all_dict$EveryDict$member = F2( + function (key, dict) { + var _p12 = A2(_eeue56$elm_all_dict$EveryDict$get_, key, dict); + if (_p12.ctor === 'Just') { + return true; + } else { + return false; + } + }); +var _eeue56$elm_all_dict$EveryDict$showLColor = function (color) { + var _p13 = color; + if (_p13.ctor === 'LBlack') { + return 'LBlack'; + } else { + return 'LBBlack'; + } +}; +var _eeue56$elm_all_dict$EveryDict$showNColor = function (c) { + var _p14 = c; + switch (_p14.ctor) { + case 'Red': + return 'Red'; + case 'Black': + return 'Black'; + case 'BBlack': + return 'BBlack'; + default: + return 'NBlack'; + } +}; +var _eeue56$elm_all_dict$EveryDict$reportRemBug = F4( + function (msg, c, lgot, rgot) { + return _elm_lang$core$Native_Utils.crash( + 'EveryDict', + { + start: {line: 320, column: 3}, + end: {line: 320, column: 14} + })( + _elm_lang$core$String$concat( + { + ctor: '::', + _0: 'Internal red-black tree invariant violated, expected ', + _1: { + ctor: '::', + _0: msg, + _1: { + ctor: '::', + _0: ' and got ', + _1: { + ctor: '::', + _0: _eeue56$elm_all_dict$EveryDict$showNColor(c), + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: lgot, + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: rgot, + _1: { + ctor: '::', + _0: '\nPlease report this bug to ', + _1: {ctor: '[]'} + } + } + } + } + } + } + } + } + })); + }); +var _eeue56$elm_all_dict$EveryDict$NBlack = {ctor: 'NBlack'}; +var _eeue56$elm_all_dict$EveryDict$BBlack = {ctor: 'BBlack'}; +var _eeue56$elm_all_dict$EveryDict$Black = {ctor: 'Black'}; +var _eeue56$elm_all_dict$EveryDict$blackish = function (t) { + var _p15 = t; + if (_p15.ctor === 'RBNode_elm_builtin') { + var _p16 = _p15._0; + return _elm_lang$core$Native_Utils.eq(_p16, _eeue56$elm_all_dict$EveryDict$Black) || _elm_lang$core$Native_Utils.eq(_p16, _eeue56$elm_all_dict$EveryDict$BBlack); + } else { + return true; + } +}; +var _eeue56$elm_all_dict$EveryDict$Red = {ctor: 'Red'}; +var _eeue56$elm_all_dict$EveryDict$moreBlack = function (color) { + var _p17 = color; + switch (_p17.ctor) { + case 'Black': + return _eeue56$elm_all_dict$EveryDict$BBlack; + case 'Red': + return _eeue56$elm_all_dict$EveryDict$Black; + case 'NBlack': + return _eeue56$elm_all_dict$EveryDict$Red; + default: + return _elm_lang$core$Native_Utils.crashCase( + 'EveryDict', + { + start: {line: 294, column: 5}, + end: {line: 298, column: 73} + }, + _p17)('Can\'t make a double black node more black!'); + } +}; +var _eeue56$elm_all_dict$EveryDict$lessBlack = function (color) { + var _p19 = color; + switch (_p19.ctor) { + case 'BBlack': + return _eeue56$elm_all_dict$EveryDict$Black; + case 'Black': + return _eeue56$elm_all_dict$EveryDict$Red; + case 'Red': + return _eeue56$elm_all_dict$EveryDict$NBlack; + default: + return _elm_lang$core$Native_Utils.crashCase( + 'EveryDict', + { + start: {line: 303, column: 5}, + end: {line: 307, column: 75} + }, + _p19)('Can\'t make a negative black node less black!'); + } +}; +var _eeue56$elm_all_dict$EveryDict$LBBlack = {ctor: 'LBBlack'}; +var _eeue56$elm_all_dict$EveryDict$LBlack = {ctor: 'LBlack'}; +var _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin = function (a) { + return {ctor: 'RBEmpty_elm_builtin', _0: a}; +}; +var _eeue56$elm_all_dict$EveryDict$empty = _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin(_eeue56$elm_all_dict$EveryDict$LBlack); +var _eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin = F5( + function (a, b, c, d, e) { + return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e}; + }); +var _eeue56$elm_all_dict$EveryDict$ensureBlackRoot = function (dict) { + var _p21 = dict; + if (_p21.ctor === 'RBNode_elm_builtin') { + switch (_p21._0.ctor) { + case 'Red': + return A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, _p21._1, _p21._2, _p21._3, _p21._4); + case 'Black': + return dict; + default: + return dict; + } + } else { + return dict; + } +}; +var _eeue56$elm_all_dict$EveryDict$lessBlackTree = function (dict) { + var _p22 = dict; + if (_p22.ctor === 'RBNode_elm_builtin') { + return A5( + _eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, + _eeue56$elm_all_dict$EveryDict$lessBlack(_p22._0), + _p22._1, + _p22._2, + _p22._3, + _p22._4); + } else { + if (_p22._0.ctor === 'LBBlack') { + return _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin(_eeue56$elm_all_dict$EveryDict$LBlack); + } else { + return dict; + } + } +}; +var _eeue56$elm_all_dict$EveryDict$blacken = function (t) { + var _p23 = t; + if (_p23.ctor === 'RBEmpty_elm_builtin') { + return _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin(_eeue56$elm_all_dict$EveryDict$LBlack); + } else { + return A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, _p23._1, _p23._2, _p23._3, _p23._4); + } +}; +var _eeue56$elm_all_dict$EveryDict$redden = function (t) { + var _p24 = t; + if (_p24.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Native_Utils.crashCase( + 'EveryDict', + { + start: {line: 440, column: 5}, + end: {line: 442, column: 69} + }, + _p24)('can\'t make a Leaf red'); + } else { + return A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Red, _p24._1, _p24._2, _p24._3, _p24._4); + } +}; +var _eeue56$elm_all_dict$EveryDict$balance_node = function (t) { + var assemble = function (col) { + return function (xk) { + return function (xv) { + return function (yk) { + return function (yv) { + return function (zk) { + return function (zv) { + return function (a) { + return function (b) { + return function (c) { + return function (d) { + return A5( + _eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, + _eeue56$elm_all_dict$EveryDict$lessBlack(col), + yk, + yv, + A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, xk, xv, a, b), + A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, zk, zv, c, d)); + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + if (_eeue56$elm_all_dict$EveryDict$blackish(t)) { + var _p26 = t; + _v34_6: + do { + _v34_5: + do { + _v34_4: + do { + _v34_3: + do { + _v34_2: + do { + _v34_1: + do { + _v34_0: + do { + if (_p26.ctor === 'RBNode_elm_builtin') { + if (_p26._3.ctor === 'RBNode_elm_builtin') { + if (_p26._4.ctor === 'RBNode_elm_builtin') { + switch (_p26._3._0.ctor) { + case 'Red': + switch (_p26._4._0.ctor) { + case 'Red': + if ((_p26._3._3.ctor === 'RBNode_elm_builtin') && (_p26._3._3._0.ctor === 'Red')) { + break _v34_0; + } else { + if ((_p26._3._4.ctor === 'RBNode_elm_builtin') && (_p26._3._4._0.ctor === 'Red')) { + break _v34_1; + } else { + if ((_p26._4._3.ctor === 'RBNode_elm_builtin') && (_p26._4._3._0.ctor === 'Red')) { + break _v34_2; + } else { + if ((_p26._4._4.ctor === 'RBNode_elm_builtin') && (_p26._4._4._0.ctor === 'Red')) { + break _v34_3; + } else { + break _v34_6; + } + } + } + } + case 'NBlack': + if ((_p26._3._3.ctor === 'RBNode_elm_builtin') && (_p26._3._3._0.ctor === 'Red')) { + break _v34_0; + } else { + if ((_p26._3._4.ctor === 'RBNode_elm_builtin') && (_p26._3._4._0.ctor === 'Red')) { + break _v34_1; + } else { + if (((_p26._0.ctor === 'BBlack') && (_p26._4._3.ctor === 'RBNode_elm_builtin')) && (_p26._4._3._0.ctor === 'Black')) { + break _v34_4; + } else { + break _v34_6; + } + } + } + default: + if ((_p26._3._3.ctor === 'RBNode_elm_builtin') && (_p26._3._3._0.ctor === 'Red')) { + break _v34_0; + } else { + if ((_p26._3._4.ctor === 'RBNode_elm_builtin') && (_p26._3._4._0.ctor === 'Red')) { + break _v34_1; + } else { + break _v34_6; + } + } + } + case 'NBlack': + switch (_p26._4._0.ctor) { + case 'Red': + if ((_p26._4._3.ctor === 'RBNode_elm_builtin') && (_p26._4._3._0.ctor === 'Red')) { + break _v34_2; + } else { + if ((_p26._4._4.ctor === 'RBNode_elm_builtin') && (_p26._4._4._0.ctor === 'Red')) { + break _v34_3; + } else { + if (((_p26._0.ctor === 'BBlack') && (_p26._3._4.ctor === 'RBNode_elm_builtin')) && (_p26._3._4._0.ctor === 'Black')) { + break _v34_5; + } else { + break _v34_6; + } + } + } + case 'NBlack': + if (_p26._0.ctor === 'BBlack') { + if ((_p26._4._3.ctor === 'RBNode_elm_builtin') && (_p26._4._3._0.ctor === 'Black')) { + break _v34_4; + } else { + if ((_p26._3._4.ctor === 'RBNode_elm_builtin') && (_p26._3._4._0.ctor === 'Black')) { + break _v34_5; + } else { + break _v34_6; + } + } + } else { + break _v34_6; + } + default: + if (((_p26._0.ctor === 'BBlack') && (_p26._3._4.ctor === 'RBNode_elm_builtin')) && (_p26._3._4._0.ctor === 'Black')) { + break _v34_5; + } else { + break _v34_6; + } + } + default: + switch (_p26._4._0.ctor) { + case 'Red': + if ((_p26._4._3.ctor === 'RBNode_elm_builtin') && (_p26._4._3._0.ctor === 'Red')) { + break _v34_2; + } else { + if ((_p26._4._4.ctor === 'RBNode_elm_builtin') && (_p26._4._4._0.ctor === 'Red')) { + break _v34_3; + } else { + break _v34_6; + } + } + case 'NBlack': + if (((_p26._0.ctor === 'BBlack') && (_p26._4._3.ctor === 'RBNode_elm_builtin')) && (_p26._4._3._0.ctor === 'Black')) { + break _v34_4; + } else { + break _v34_6; + } + default: + break _v34_6; + } + } + } else { + switch (_p26._3._0.ctor) { + case 'Red': + if ((_p26._3._3.ctor === 'RBNode_elm_builtin') && (_p26._3._3._0.ctor === 'Red')) { + break _v34_0; + } else { + if ((_p26._3._4.ctor === 'RBNode_elm_builtin') && (_p26._3._4._0.ctor === 'Red')) { + break _v34_1; + } else { + break _v34_6; + } + } + case 'NBlack': + if (((_p26._0.ctor === 'BBlack') && (_p26._3._4.ctor === 'RBNode_elm_builtin')) && (_p26._3._4._0.ctor === 'Black')) { + break _v34_5; + } else { + break _v34_6; + } + default: + break _v34_6; + } + } + } else { + if (_p26._4.ctor === 'RBNode_elm_builtin') { + switch (_p26._4._0.ctor) { + case 'Red': + if ((_p26._4._3.ctor === 'RBNode_elm_builtin') && (_p26._4._3._0.ctor === 'Red')) { + break _v34_2; + } else { + if ((_p26._4._4.ctor === 'RBNode_elm_builtin') && (_p26._4._4._0.ctor === 'Red')) { + break _v34_3; + } else { + break _v34_6; + } + } + case 'NBlack': + if (((_p26._0.ctor === 'BBlack') && (_p26._4._3.ctor === 'RBNode_elm_builtin')) && (_p26._4._3._0.ctor === 'Black')) { + break _v34_4; + } else { + break _v34_6; + } + default: + break _v34_6; + } + } else { + break _v34_6; + } + } + } else { + break _v34_6; + } + } while(false); + return assemble(_p26._0)(_p26._3._3._1)(_p26._3._3._2)(_p26._3._1)(_p26._3._2)(_p26._1)(_p26._2)(_p26._3._3._3)(_p26._3._3._4)(_p26._3._4)(_p26._4); + } while(false); + return assemble(_p26._0)(_p26._3._1)(_p26._3._2)(_p26._3._4._1)(_p26._3._4._2)(_p26._1)(_p26._2)(_p26._3._3)(_p26._3._4._3)(_p26._3._4._4)(_p26._4); + } while(false); + return assemble(_p26._0)(_p26._1)(_p26._2)(_p26._4._3._1)(_p26._4._3._2)(_p26._4._1)(_p26._4._2)(_p26._3)(_p26._4._3._3)(_p26._4._3._4)(_p26._4._4); + } while(false); + return assemble(_p26._0)(_p26._1)(_p26._2)(_p26._4._1)(_p26._4._2)(_p26._4._4._1)(_p26._4._4._2)(_p26._3)(_p26._4._3)(_p26._4._4._3)(_p26._4._4._4); + } while(false); + var _p28 = _p26._4._4; + var _p27 = _p28; + if ((_p27.ctor === 'RBNode_elm_builtin') && (_p27._0.ctor === 'Black')) { + return A5( + _eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, + _eeue56$elm_all_dict$EveryDict$Black, + _p26._4._3._1, + _p26._4._3._2, + A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, _p26._1, _p26._2, _p26._3, _p26._4._3._3), + A5( + _eeue56$elm_all_dict$EveryDict$balance, + _eeue56$elm_all_dict$EveryDict$Black, + _p26._4._1, + _p26._4._2, + _p26._4._3._4, + _eeue56$elm_all_dict$EveryDict$redden(_p28))); + } else { + return t; + } + } while(false); + var _p30 = _p26._3._3; + var _p29 = _p30; + if ((_p29.ctor === 'RBNode_elm_builtin') && (_p29._0.ctor === 'Black')) { + return A5( + _eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, + _eeue56$elm_all_dict$EveryDict$Black, + _p26._3._4._1, + _p26._3._4._2, + A5( + _eeue56$elm_all_dict$EveryDict$balance, + _eeue56$elm_all_dict$EveryDict$Black, + _p26._3._1, + _p26._3._2, + _eeue56$elm_all_dict$EveryDict$redden(_p30), + _p26._3._4._3), + A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, _p26._1, _p26._2, _p26._3._4._4, _p26._4)); + } else { + return t; + } + } while(false); + return t; + } else { + return t; + } +}; +var _eeue56$elm_all_dict$EveryDict$balance = F5( + function (c, k, v, l, r) { + return _eeue56$elm_all_dict$EveryDict$balance_node( + A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, c, k, v, l, r)); + }); +var _eeue56$elm_all_dict$EveryDict$bubble = F5( + function (c, k, v, l, r) { + return (_eeue56$elm_all_dict$EveryDict$isBBlack(l) || _eeue56$elm_all_dict$EveryDict$isBBlack(r)) ? A5( + _eeue56$elm_all_dict$EveryDict$balance, + _eeue56$elm_all_dict$EveryDict$moreBlack(c), + k, + v, + _eeue56$elm_all_dict$EveryDict$lessBlackTree(l), + _eeue56$elm_all_dict$EveryDict$lessBlackTree(r)) : A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, c, k, v, l, r); + }); +var _eeue56$elm_all_dict$EveryDict$remove_max = F5( + function (c, k, v, l, r) { + var _p31 = r; + if (_p31.ctor === 'RBEmpty_elm_builtin') { + return A3(_eeue56$elm_all_dict$EveryDict$rem, c, l, r); + } else { + return A5( + _eeue56$elm_all_dict$EveryDict$bubble, + c, + k, + v, + l, + A5(_eeue56$elm_all_dict$EveryDict$remove_max, _p31._0, _p31._1, _p31._2, _p31._3, _p31._4)); + } + }); +var _eeue56$elm_all_dict$EveryDict$rem = F3( + function (c, l, r) { + var _p32 = {ctor: '_Tuple2', _0: l, _1: r}; + if (_p32._0.ctor === 'RBEmpty_elm_builtin') { + if (_p32._1.ctor === 'RBEmpty_elm_builtin') { + var _p33 = c; + switch (_p33.ctor) { + case 'Red': + return _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin(_eeue56$elm_all_dict$EveryDict$LBlack); + case 'Black': + return _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin(_eeue56$elm_all_dict$EveryDict$LBBlack); + default: + return _eeue56$elm_all_dict$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); + } + } else { + var _p36 = _p32._1._0; + var _p35 = _p32._0._0; + var _p34 = {ctor: '_Tuple3', _0: c, _1: _p35, _2: _p36}; + if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'LBlack')) && (_p34._2.ctor === 'Red')) { + return A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, _p32._1._1, _p32._1._2, _p32._1._3, _p32._1._4); + } else { + return A4( + _eeue56$elm_all_dict$EveryDict$reportRemBug, + 'Black/LBlack/Red', + c, + _eeue56$elm_all_dict$EveryDict$showLColor(_p35), + _eeue56$elm_all_dict$EveryDict$showNColor(_p36)); + } + } + } else { + if (_p32._1.ctor === 'RBEmpty_elm_builtin') { + var _p39 = _p32._1._0; + var _p38 = _p32._0._0; + var _p37 = {ctor: '_Tuple3', _0: c, _1: _p38, _2: _p39}; + if ((((_p37.ctor === '_Tuple3') && (_p37._0.ctor === 'Black')) && (_p37._1.ctor === 'Red')) && (_p37._2.ctor === 'LBlack')) { + return A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, _p32._0._1, _p32._0._2, _p32._0._3, _p32._0._4); + } else { + return A4( + _eeue56$elm_all_dict$EveryDict$reportRemBug, + 'Black/Red/LBlack', + c, + _eeue56$elm_all_dict$EveryDict$showNColor(_p38), + _eeue56$elm_all_dict$EveryDict$showLColor(_p39)); + } + } else { + var _p45 = _p32._0._2; + var _p44 = _p32._0._4; + var _p43 = _p32._0._3; + var _p42 = _p32._0._1; + var _p41 = _p32._0._0; + var l_ = A5(_eeue56$elm_all_dict$EveryDict$remove_max, _p41, _p42, _p45, _p43, _p44); + var r = A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _p32._1._0, _p32._1._1, _p32._1._2, _p32._1._3, _p32._1._4); + var l = A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _p41, _p42, _p45, _p43, _p44); + var _p40 = _eeue56$elm_all_dict$EveryDict$max(l); + var k = _p40._0; + var v = _p40._1; + return A5(_eeue56$elm_all_dict$EveryDict$bubble, c, k, v, l_, r); + } + } + }); +var _eeue56$elm_all_dict$EveryDict$map = F2( + function (f, dict) { + var _p46 = dict; + if (_p46.ctor === 'RBEmpty_elm_builtin') { + return _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin(_p46._0); + } else { + var _p47 = _p46._1; + return A5( + _eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, + _p46._0, + _p47, + A2(f, _p47, _p46._2), + A2(_eeue56$elm_all_dict$EveryDict$map, f, _p46._3), + A2(_eeue56$elm_all_dict$EveryDict$map, f, _p46._4)); + } + }); +var _eeue56$elm_all_dict$EveryDict$Same = {ctor: 'Same'}; +var _eeue56$elm_all_dict$EveryDict$Remove = {ctor: 'Remove'}; +var _eeue56$elm_all_dict$EveryDict$Insert = {ctor: 'Insert'}; +var _eeue56$elm_all_dict$EveryDict$update = F3( + function (k, alter, dict) { + var up = function (dict) { + var _p48 = dict; + if (_p48.ctor === 'RBEmpty_elm_builtin') { + var _p49 = alter(_elm_lang$core$Maybe$Nothing); + if (_p49.ctor === 'Nothing') { + return {ctor: '_Tuple2', _0: _eeue56$elm_all_dict$EveryDict$Same, _1: _eeue56$elm_all_dict$EveryDict$empty}; + } else { + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Insert, + _1: A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Red, k, _p49._0, _eeue56$elm_all_dict$EveryDict$empty, _eeue56$elm_all_dict$EveryDict$empty) + }; + } + } else { + var _p60 = _p48._2; + var _p59 = _p48._4; + var _p58 = _p48._3; + var _p57 = _p48._1; + var _p56 = _p48._0; + var _p50 = A2( + _elm_lang$core$Basics$compare, + _eeue56$elm_all_dict$EveryDict$ord(k), + _eeue56$elm_all_dict$EveryDict$ord(_p57)); + switch (_p50.ctor) { + case 'EQ': + var _p51 = alter( + _elm_lang$core$Maybe$Just(_p60)); + if (_p51.ctor === 'Nothing') { + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Remove, + _1: A3(_eeue56$elm_all_dict$EveryDict$rem, _p56, _p58, _p59) + }; + } else { + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Same, + _1: A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _p56, _p57, _p51._0, _p58, _p59) + }; + } + case 'LT': + var _p52 = up(_p58); + var flag = _p52._0; + var newLeft = _p52._1; + var _p53 = flag; + switch (_p53.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Same, + _1: A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _p56, _p57, _p60, newLeft, _p59) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Insert, + _1: A5(_eeue56$elm_all_dict$EveryDict$balance, _p56, _p57, _p60, newLeft, _p59) + }; + default: + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Remove, + _1: A5(_eeue56$elm_all_dict$EveryDict$bubble, _p56, _p57, _p60, newLeft, _p59) + }; + } + default: + var _p54 = up(_p59); + var flag = _p54._0; + var newRight = _p54._1; + var _p55 = flag; + switch (_p55.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Same, + _1: A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _p56, _p57, _p60, _p58, newRight) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Insert, + _1: A5(_eeue56$elm_all_dict$EveryDict$balance, _p56, _p57, _p60, _p58, newRight) + }; + default: + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Remove, + _1: A5(_eeue56$elm_all_dict$EveryDict$bubble, _p56, _p57, _p60, _p58, newRight) + }; + } + } + } + }; + var _p61 = up(dict); + var flag = _p61._0; + var updatedDict = _p61._1; + var _p62 = flag; + switch (_p62.ctor) { + case 'Same': + return updatedDict; + case 'Insert': + return _eeue56$elm_all_dict$EveryDict$ensureBlackRoot(updatedDict); + default: + return _eeue56$elm_all_dict$EveryDict$blacken(updatedDict); + } + }); +var _eeue56$elm_all_dict$EveryDict$insert = F3( + function (key, value, dict) { + return A3( + _eeue56$elm_all_dict$EveryDict$update, + key, + _elm_lang$core$Basics$always( + _elm_lang$core$Maybe$Just(value)), + dict); + }); +var _eeue56$elm_all_dict$EveryDict$singleton = F2( + function (key, value) { + return A3(_eeue56$elm_all_dict$EveryDict$insert, key, value, _eeue56$elm_all_dict$EveryDict$empty); + }); +var _eeue56$elm_all_dict$EveryDict$union = F2( + function (t1, t2) { + return A3(_eeue56$elm_all_dict$EveryDict$foldl, _eeue56$elm_all_dict$EveryDict$insert, t2, t1); + }); +var _eeue56$elm_all_dict$EveryDict$fromList = function (assocs) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p63, dict) { + var _p64 = _p63; + return A3(_eeue56$elm_all_dict$EveryDict$insert, _p64._0, _p64._1, dict); + }), + _eeue56$elm_all_dict$EveryDict$empty, + assocs); +}; +var _eeue56$elm_all_dict$EveryDict$filter = F2( + function (predicate, dictionary) { + var add = F3( + function (key, value, dict) { + return A2(predicate, key, value) ? A3(_eeue56$elm_all_dict$EveryDict$insert, key, value, dict) : dict; + }); + return A3(_eeue56$elm_all_dict$EveryDict$foldl, add, _eeue56$elm_all_dict$EveryDict$empty, dictionary); + }); +var _eeue56$elm_all_dict$EveryDict$intersect = F2( + function (t1, t2) { + return A2( + _eeue56$elm_all_dict$EveryDict$filter, + F2( + function (k, _p65) { + return A2(_eeue56$elm_all_dict$EveryDict$member, k, t2); + }), + t1); + }); +var _eeue56$elm_all_dict$EveryDict$partition = F2( + function (predicate, dict) { + var add = F3( + function (key, value, _p66) { + var _p67 = _p66; + var _p69 = _p67._1; + var _p68 = _p67._0; + return A2(predicate, key, value) ? { + ctor: '_Tuple2', + _0: A3(_eeue56$elm_all_dict$EveryDict$insert, key, value, _p68), + _1: _p69 + } : { + ctor: '_Tuple2', + _0: _p68, + _1: A3(_eeue56$elm_all_dict$EveryDict$insert, key, value, _p69) + }; + }); + return A3( + _eeue56$elm_all_dict$EveryDict$foldl, + add, + {ctor: '_Tuple2', _0: _eeue56$elm_all_dict$EveryDict$empty, _1: _eeue56$elm_all_dict$EveryDict$empty}, + dict); + }); +var _eeue56$elm_all_dict$EveryDict$remove = F2( + function (key, dict) { + return A3( + _eeue56$elm_all_dict$EveryDict$update, + key, + _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), + dict); + }); +var _eeue56$elm_all_dict$EveryDict$diff = F2( + function (t1, t2) { + return A3( + _eeue56$elm_all_dict$EveryDict$foldl, + F3( + function (k, v, t) { + return A2(_eeue56$elm_all_dict$EveryDict$remove, k, t); + }), + t1, + t2); + }); + + +/* + * Copyright (c) 2010 Mozilla Corporation + * Copyright (c) 2010 Vladimir Vukicevic + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * File: mjs + * + * Vector and Matrix math utilities for JavaScript, optimized for WebGL. + * Edited to work with the Elm Programming Language + */ + +var _elm_community$linear_algebra$Native_Math_Vector2 = function() { + + var MJS_FLOAT_ARRAY_TYPE = Float32Array; + + var V2 = { }; + + if (MJS_FLOAT_ARRAY_TYPE == Array) { + V2.$ = function V2_$(x, y) { + return [x, y]; + }; + } else { + V2.$ = function V2_$(x, y) { + return new MJS_FLOAT_ARRAY_TYPE([x, y]); + }; + } + + V2.getX = function V2_getX(a) { + return a[0]; + } + V2.getY = function V2_getY(a) { + return a[1]; + } + V2.setX = function V2_setX(x, a) { + return new MJS_FLOAT_ARRAY_TYPE([x, a[1]]); + } + V2.setY = function V2_setY(y, a) { + return new MJS_FLOAT_ARRAY_TYPE([a[0], y]); + } + + V2.toTuple = function V2_toTuple(a) { + return { + ctor:"_Tuple2", + _0:a[0], + _1:a[1] + }; + }; + V2.fromTuple = function V2_fromTuple(t) { + return new MJS_FLOAT_ARRAY_TYPE([t._0, t._1]); + }; + + V2.toRecord = function V2_toRecord(a) { + return { + _:{}, + x:a[0], + y:a[1] + }; + }; + V2.fromRecord = function V2_fromRecord(r) { + return new MJS_FLOAT_ARRAY_TYPE([r.x, r.y]); + }; + + V2.add = function V2_add(a, b) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = a[0] + b[0]; + r[1] = a[1] + b[1]; + return r; + }; + + V2.sub = function V2_sub(a, b) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = a[0] - b[0]; + r[1] = a[1] - b[1]; + return r; + }; + + V2.neg = function V2_neg(a) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = - a[0]; + r[1] = - a[1]; + return r; + }; + + V2.direction = function V2_direction(a, b) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = a[0] - b[0]; + r[1] = a[1] - b[1]; + var im = 1.0 / V2.length(r); + r[0] = r[0] * im; + r[1] = r[1] * im; + return r; + }; + + V2.length = function V2_length(a) { + return Math.sqrt(a[0]*a[0] + a[1]*a[1]); + }; + + V2.lengthSquared = function V2_lengthSquared(a) { + return a[0]*a[0] + a[1]*a[1]; + }; + + V2.distance = function V2_distance(a, b) { + var dx = a[0] - b[0]; + var dy = a[1] - b[1]; + return Math.sqrt(dx * dx + dy * dy); + }; + + V2.distanceSquared = function V2_distanceSquared(a, b) { + var dx = a[0] - b[0]; + var dy = a[1] - b[1]; + return dx * dx + dy * dy; + }; + + V2.normalize = function V2_normalize(a) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + var im = 1.0 / V2.length(a); + r[0] = a[0] * im; + r[1] = a[1] * im; + return r; + }; + + V2.scale = function V2_scale(k, a) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = a[0] * k; + r[1] = a[1] * k; + return r; + }; + + V2.dot = function V2_dot(a, b) { + return a[0] * b[0] + a[1] * b[1]; + }; + + return { + vec2: F2(V2.$), + getX: V2.getX, + getY: V2.getY, + setX: F2(V2.setX), + setY: F2(V2.setY), + toTuple: V2.toTuple, + toRecord: V2.toRecord, + fromTuple: V2.fromTuple, + fromRecord: V2.fromRecord, + add: F2(V2.add), + sub: F2(V2.sub), + neg: V2.neg, + direction: F2(V2.direction), + length: V2.length, + lengthSquared: V2.lengthSquared, + distance: F2(V2.distance), + distanceSquared: F2(V2.distanceSquared), + normalize: V2.normalize, + scale: F2(V2.scale), + dot: F2(V2.dot) + }; + +}(); + +var _elm_community$linear_algebra$Math_Vector2$dot = _elm_community$linear_algebra$Native_Math_Vector2.dot; +var _elm_community$linear_algebra$Math_Vector2$scale = _elm_community$linear_algebra$Native_Math_Vector2.scale; +var _elm_community$linear_algebra$Math_Vector2$normalize = _elm_community$linear_algebra$Native_Math_Vector2.normalize; +var _elm_community$linear_algebra$Math_Vector2$distanceSquared = _elm_community$linear_algebra$Native_Math_Vector2.distanceSquared; +var _elm_community$linear_algebra$Math_Vector2$distance = _elm_community$linear_algebra$Native_Math_Vector2.distance; +var _elm_community$linear_algebra$Math_Vector2$lengthSquared = _elm_community$linear_algebra$Native_Math_Vector2.lengthSquared; +var _elm_community$linear_algebra$Math_Vector2$length = _elm_community$linear_algebra$Native_Math_Vector2.length; +var _elm_community$linear_algebra$Math_Vector2$direction = _elm_community$linear_algebra$Native_Math_Vector2.direction; +var _elm_community$linear_algebra$Math_Vector2$negate = _elm_community$linear_algebra$Native_Math_Vector2.neg; +var _elm_community$linear_algebra$Math_Vector2$sub = _elm_community$linear_algebra$Native_Math_Vector2.sub; +var _elm_community$linear_algebra$Math_Vector2$add = _elm_community$linear_algebra$Native_Math_Vector2.add; +var _elm_community$linear_algebra$Math_Vector2$fromRecord = _elm_community$linear_algebra$Native_Math_Vector2.fromRecord; +var _elm_community$linear_algebra$Math_Vector2$fromTuple = _elm_community$linear_algebra$Native_Math_Vector2.fromTuple; +var _elm_community$linear_algebra$Math_Vector2$toRecord = _elm_community$linear_algebra$Native_Math_Vector2.toRecord; +var _elm_community$linear_algebra$Math_Vector2$toTuple = _elm_community$linear_algebra$Native_Math_Vector2.toTuple; +var _elm_community$linear_algebra$Math_Vector2$setY = _elm_community$linear_algebra$Native_Math_Vector2.setY; +var _elm_community$linear_algebra$Math_Vector2$setX = _elm_community$linear_algebra$Native_Math_Vector2.setX; +var _elm_community$linear_algebra$Math_Vector2$getY = _elm_community$linear_algebra$Native_Math_Vector2.getY; +var _elm_community$linear_algebra$Math_Vector2$getX = _elm_community$linear_algebra$Native_Math_Vector2.getX; +var _elm_community$linear_algebra$Math_Vector2$vec2 = _elm_community$linear_algebra$Native_Math_Vector2.vec2; +var _elm_community$linear_algebra$Math_Vector2$Vec2 = {ctor: 'Vec2'}; + +var _elm_lang$core$Set$foldr = F3( + function (f, b, _p0) { + var _p1 = _p0; + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (k, _p2, b) { + return A2(f, k, b); + }), + b, + _p1._0); + }); +var _elm_lang$core$Set$foldl = F3( + function (f, b, _p3) { + var _p4 = _p3; + return A3( + _elm_lang$core$Dict$foldl, + F3( + function (k, _p5, b) { + return A2(f, k, b); + }), + b, + _p4._0); + }); +var _elm_lang$core$Set$toList = function (_p6) { + var _p7 = _p6; + return _elm_lang$core$Dict$keys(_p7._0); +}; +var _elm_lang$core$Set$size = function (_p8) { + var _p9 = _p8; + return _elm_lang$core$Dict$size(_p9._0); +}; +var _elm_lang$core$Set$member = F2( + function (k, _p10) { + var _p11 = _p10; + return A2(_elm_lang$core$Dict$member, k, _p11._0); + }); +var _elm_lang$core$Set$isEmpty = function (_p12) { + var _p13 = _p12; + return _elm_lang$core$Dict$isEmpty(_p13._0); +}; +var _elm_lang$core$Set$Set_elm_builtin = function (a) { + return {ctor: 'Set_elm_builtin', _0: a}; +}; +var _elm_lang$core$Set$empty = _elm_lang$core$Set$Set_elm_builtin(_elm_lang$core$Dict$empty); +var _elm_lang$core$Set$singleton = function (k) { + return _elm_lang$core$Set$Set_elm_builtin( + A2( + _elm_lang$core$Dict$singleton, + k, + {ctor: '_Tuple0'})); +}; +var _elm_lang$core$Set$insert = F2( + function (k, _p14) { + var _p15 = _p14; + return _elm_lang$core$Set$Set_elm_builtin( + A3( + _elm_lang$core$Dict$insert, + k, + {ctor: '_Tuple0'}, + _p15._0)); + }); +var _elm_lang$core$Set$fromList = function (xs) { + return A3(_elm_lang$core$List$foldl, _elm_lang$core$Set$insert, _elm_lang$core$Set$empty, xs); +}; +var _elm_lang$core$Set$map = F2( + function (f, s) { + return _elm_lang$core$Set$fromList( + A2( + _elm_lang$core$List$map, + f, + _elm_lang$core$Set$toList(s))); + }); +var _elm_lang$core$Set$remove = F2( + function (k, _p16) { + var _p17 = _p16; + return _elm_lang$core$Set$Set_elm_builtin( + A2(_elm_lang$core$Dict$remove, k, _p17._0)); + }); +var _elm_lang$core$Set$union = F2( + function (_p19, _p18) { + var _p20 = _p19; + var _p21 = _p18; + return _elm_lang$core$Set$Set_elm_builtin( + A2(_elm_lang$core$Dict$union, _p20._0, _p21._0)); + }); +var _elm_lang$core$Set$intersect = F2( + function (_p23, _p22) { + var _p24 = _p23; + var _p25 = _p22; + return _elm_lang$core$Set$Set_elm_builtin( + A2(_elm_lang$core$Dict$intersect, _p24._0, _p25._0)); + }); +var _elm_lang$core$Set$diff = F2( + function (_p27, _p26) { + var _p28 = _p27; + var _p29 = _p26; + return _elm_lang$core$Set$Set_elm_builtin( + A2(_elm_lang$core$Dict$diff, _p28._0, _p29._0)); + }); +var _elm_lang$core$Set$filter = F2( + function (p, _p30) { + var _p31 = _p30; + return _elm_lang$core$Set$Set_elm_builtin( + A2( + _elm_lang$core$Dict$filter, + F2( + function (k, _p32) { + return p(k); + }), + _p31._0)); + }); +var _elm_lang$core$Set$partition = F2( + function (p, _p33) { + var _p34 = _p33; + var _p35 = A2( + _elm_lang$core$Dict$partition, + F2( + function (k, _p36) { + return p(k); + }), + _p34._0); + var p1 = _p35._0; + var p2 = _p35._1; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Set$Set_elm_builtin(p1), + _1: _elm_lang$core$Set$Set_elm_builtin(p2) + }; + }); + +var _elm_community$list_extra$List_Extra$greedyGroupsOfWithStep = F3( + function (size, step, xs) { + var okayXs = _elm_lang$core$Native_Utils.cmp( + _elm_lang$core$List$length(xs), + 0) > 0; + var okayArgs = (_elm_lang$core$Native_Utils.cmp(size, 0) > 0) && (_elm_lang$core$Native_Utils.cmp(step, 0) > 0); + var xs_ = A2(_elm_lang$core$List$drop, step, xs); + var group = A2(_elm_lang$core$List$take, size, xs); + return (okayArgs && okayXs) ? { + ctor: '::', + _0: group, + _1: A3(_elm_community$list_extra$List_Extra$greedyGroupsOfWithStep, size, step, xs_) + } : {ctor: '[]'}; + }); +var _elm_community$list_extra$List_Extra$greedyGroupsOf = F2( + function (size, xs) { + return A3(_elm_community$list_extra$List_Extra$greedyGroupsOfWithStep, size, size, xs); + }); +var _elm_community$list_extra$List_Extra$groupsOfWithStep = F3( + function (size, step, xs) { + var okayArgs = (_elm_lang$core$Native_Utils.cmp(size, 0) > 0) && (_elm_lang$core$Native_Utils.cmp(step, 0) > 0); + var xs_ = A2(_elm_lang$core$List$drop, step, xs); + var group = A2(_elm_lang$core$List$take, size, xs); + var okayLength = _elm_lang$core$Native_Utils.eq( + size, + _elm_lang$core$List$length(group)); + return (okayArgs && okayLength) ? { + ctor: '::', + _0: group, + _1: A3(_elm_community$list_extra$List_Extra$groupsOfWithStep, size, step, xs_) + } : {ctor: '[]'}; + }); +var _elm_community$list_extra$List_Extra$groupsOf = F2( + function (size, xs) { + return A3(_elm_community$list_extra$List_Extra$groupsOfWithStep, size, size, xs); + }); +var _elm_community$list_extra$List_Extra$zip5 = _elm_lang$core$List$map5( + F5( + function (v0, v1, v2, v3, v4) { + return {ctor: '_Tuple5', _0: v0, _1: v1, _2: v2, _3: v3, _4: v4}; + })); +var _elm_community$list_extra$List_Extra$zip4 = _elm_lang$core$List$map4( + F4( + function (v0, v1, v2, v3) { + return {ctor: '_Tuple4', _0: v0, _1: v1, _2: v2, _3: v3}; + })); +var _elm_community$list_extra$List_Extra$zip3 = _elm_lang$core$List$map3( + F3( + function (v0, v1, v2) { + return {ctor: '_Tuple3', _0: v0, _1: v1, _2: v2}; + })); +var _elm_community$list_extra$List_Extra$zip = _elm_lang$core$List$map2( + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + })); +var _elm_community$list_extra$List_Extra$isPrefixOf = F2( + function (prefix, xs) { + var _p0 = {ctor: '_Tuple2', _0: prefix, _1: xs}; + if (_p0._0.ctor === '[]') { + return true; + } else { + if (_p0._1.ctor === '[]') { + return false; + } else { + return _elm_lang$core$Native_Utils.eq(_p0._0._0, _p0._1._0) && A2(_elm_community$list_extra$List_Extra$isPrefixOf, _p0._0._1, _p0._1._1); + } + } + }); +var _elm_community$list_extra$List_Extra$isSuffixOf = F2( + function (suffix, xs) { + return A2( + _elm_community$list_extra$List_Extra$isPrefixOf, + _elm_lang$core$List$reverse(suffix), + _elm_lang$core$List$reverse(xs)); + }); +var _elm_community$list_extra$List_Extra$selectSplit = function (xs) { + var _p1 = xs; + if (_p1.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p5 = _p1._1; + var _p4 = _p1._0; + return { + ctor: '::', + _0: { + ctor: '_Tuple3', + _0: {ctor: '[]'}, + _1: _p4, + _2: _p5 + }, + _1: A2( + _elm_lang$core$List$map, + function (_p2) { + var _p3 = _p2; + return { + ctor: '_Tuple3', + _0: {ctor: '::', _0: _p4, _1: _p3._0}, + _1: _p3._1, + _2: _p3._2 + }; + }, + _elm_community$list_extra$List_Extra$selectSplit(_p5)) + }; + } +}; +var _elm_community$list_extra$List_Extra$select = function (xs) { + var _p6 = xs; + if (_p6.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p10 = _p6._1; + var _p9 = _p6._0; + return { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _p9, _1: _p10}, + _1: A2( + _elm_lang$core$List$map, + function (_p7) { + var _p8 = _p7; + return { + ctor: '_Tuple2', + _0: _p8._0, + _1: {ctor: '::', _0: _p9, _1: _p8._1} + }; + }, + _elm_community$list_extra$List_Extra$select(_p10)) + }; + } +}; +var _elm_community$list_extra$List_Extra$tailsHelp = F2( + function (e, list) { + var _p11 = list; + if (_p11.ctor === '::') { + var _p12 = _p11._0; + return { + ctor: '::', + _0: {ctor: '::', _0: e, _1: _p12}, + _1: {ctor: '::', _0: _p12, _1: _p11._1} + }; + } else { + return {ctor: '[]'}; + } + }); +var _elm_community$list_extra$List_Extra$tails = A2( + _elm_lang$core$List$foldr, + _elm_community$list_extra$List_Extra$tailsHelp, + { + ctor: '::', + _0: {ctor: '[]'}, + _1: {ctor: '[]'} + }); +var _elm_community$list_extra$List_Extra$isInfixOf = F2( + function (infix, xs) { + return A2( + _elm_lang$core$List$any, + _elm_community$list_extra$List_Extra$isPrefixOf(infix), + _elm_community$list_extra$List_Extra$tails(xs)); + }); +var _elm_community$list_extra$List_Extra$inits = A2( + _elm_lang$core$List$foldr, + F2( + function (e, acc) { + return { + ctor: '::', + _0: {ctor: '[]'}, + _1: A2( + _elm_lang$core$List$map, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + })(e), + acc) + }; + }), + { + ctor: '::', + _0: {ctor: '[]'}, + _1: {ctor: '[]'} + }); +var _elm_community$list_extra$List_Extra$groupWhileTransitively = F2( + function (cmp, xs_) { + var _p13 = xs_; + if (_p13.ctor === '[]') { + return {ctor: '[]'}; + } else { + if (_p13._1.ctor === '[]') { + return { + ctor: '::', + _0: { + ctor: '::', + _0: _p13._0, + _1: {ctor: '[]'} + }, + _1: {ctor: '[]'} + }; + } else { + var _p15 = _p13._0; + var _p14 = A2(_elm_community$list_extra$List_Extra$groupWhileTransitively, cmp, _p13._1); + if (_p14.ctor === '::') { + return A2(cmp, _p15, _p13._1._0) ? { + ctor: '::', + _0: {ctor: '::', _0: _p15, _1: _p14._0}, + _1: _p14._1 + } : { + ctor: '::', + _0: { + ctor: '::', + _0: _p15, + _1: {ctor: '[]'} + }, + _1: _p14 + }; + } else { + return {ctor: '[]'}; + } + } + } + }); +var _elm_community$list_extra$List_Extra$stripPrefix = F2( + function (prefix, xs) { + var step = F2( + function (e, m) { + var _p16 = m; + if (_p16.ctor === 'Nothing') { + return _elm_lang$core$Maybe$Nothing; + } else { + if (_p16._0.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Native_Utils.eq(e, _p16._0._0) ? _elm_lang$core$Maybe$Just(_p16._0._1) : _elm_lang$core$Maybe$Nothing; + } + } + }); + return A3( + _elm_lang$core$List$foldl, + step, + _elm_lang$core$Maybe$Just(xs), + prefix); + }); +var _elm_community$list_extra$List_Extra$dropWhileRight = function (p) { + return A2( + _elm_lang$core$List$foldr, + F2( + function (x, xs) { + return (p(x) && _elm_lang$core$List$isEmpty(xs)) ? {ctor: '[]'} : {ctor: '::', _0: x, _1: xs}; + }), + {ctor: '[]'}); +}; +var _elm_community$list_extra$List_Extra$takeWhileRight = function (p) { + var step = F2( + function (x, _p17) { + var _p18 = _p17; + var _p19 = _p18._0; + return (p(x) && _p18._1) ? { + ctor: '_Tuple2', + _0: {ctor: '::', _0: x, _1: _p19}, + _1: true + } : {ctor: '_Tuple2', _0: _p19, _1: false}; + }); + return function (_p20) { + return _elm_lang$core$Tuple$first( + A3( + _elm_lang$core$List$foldr, + step, + { + ctor: '_Tuple2', + _0: {ctor: '[]'}, + _1: true + }, + _p20)); + }; +}; +var _elm_community$list_extra$List_Extra$splitAt = F2( + function (n, xs) { + return { + ctor: '_Tuple2', + _0: A2(_elm_lang$core$List$take, n, xs), + _1: A2(_elm_lang$core$List$drop, n, xs) + }; + }); +var _elm_community$list_extra$List_Extra$groupsOfVarying_ = F3( + function (listOflengths, list, accu) { + groupsOfVarying_: + while (true) { + var _p21 = {ctor: '_Tuple2', _0: listOflengths, _1: list}; + if (((_p21.ctor === '_Tuple2') && (_p21._0.ctor === '::')) && (_p21._1.ctor === '::')) { + var _p22 = A2(_elm_community$list_extra$List_Extra$splitAt, _p21._0._0, list); + var head = _p22._0; + var tail = _p22._1; + var _v11 = _p21._0._1, + _v12 = tail, + _v13 = {ctor: '::', _0: head, _1: accu}; + listOflengths = _v11; + list = _v12; + accu = _v13; + continue groupsOfVarying_; + } else { + return _elm_lang$core$List$reverse(accu); + } + } + }); +var _elm_community$list_extra$List_Extra$groupsOfVarying = F2( + function (listOflengths, list) { + return A3( + _elm_community$list_extra$List_Extra$groupsOfVarying_, + listOflengths, + list, + {ctor: '[]'}); + }); +var _elm_community$list_extra$List_Extra$unfoldr = F2( + function (f, seed) { + var _p23 = f(seed); + if (_p23.ctor === 'Nothing') { + return {ctor: '[]'}; + } else { + return { + ctor: '::', + _0: _p23._0._0, + _1: A2(_elm_community$list_extra$List_Extra$unfoldr, f, _p23._0._1) + }; + } + }); +var _elm_community$list_extra$List_Extra$scanr1 = F2( + function (f, xs_) { + var _p24 = xs_; + if (_p24.ctor === '[]') { + return {ctor: '[]'}; + } else { + if (_p24._1.ctor === '[]') { + return { + ctor: '::', + _0: _p24._0, + _1: {ctor: '[]'} + }; + } else { + var _p25 = A2(_elm_community$list_extra$List_Extra$scanr1, f, _p24._1); + if (_p25.ctor === '::') { + return { + ctor: '::', + _0: A2(f, _p24._0, _p25._0), + _1: _p25 + }; + } else { + return {ctor: '[]'}; + } + } + } + }); +var _elm_community$list_extra$List_Extra$scanr = F3( + function (f, acc, xs_) { + var _p26 = xs_; + if (_p26.ctor === '[]') { + return { + ctor: '::', + _0: acc, + _1: {ctor: '[]'} + }; + } else { + var _p27 = A3(_elm_community$list_extra$List_Extra$scanr, f, acc, _p26._1); + if (_p27.ctor === '::') { + return { + ctor: '::', + _0: A2(f, _p26._0, _p27._0), + _1: _p27 + }; + } else { + return {ctor: '[]'}; + } + } + }); +var _elm_community$list_extra$List_Extra$scanl1 = F2( + function (f, xs_) { + var _p28 = xs_; + if (_p28.ctor === '[]') { + return {ctor: '[]'}; + } else { + return A3(_elm_lang$core$List$scanl, f, _p28._0, _p28._1); + } + }); +var _elm_community$list_extra$List_Extra$indexedFoldr = F3( + function (func, acc, list) { + var step = F2( + function (x, _p29) { + var _p30 = _p29; + var _p31 = _p30._0; + return { + ctor: '_Tuple2', + _0: _p31 - 1, + _1: A3(func, _p31, x, _p30._1) + }; + }); + return _elm_lang$core$Tuple$second( + A3( + _elm_lang$core$List$foldr, + step, + { + ctor: '_Tuple2', + _0: _elm_lang$core$List$length(list) - 1, + _1: acc + }, + list)); + }); +var _elm_community$list_extra$List_Extra$indexedFoldl = F3( + function (func, acc, list) { + var step = F2( + function (x, _p32) { + var _p33 = _p32; + var _p34 = _p33._0; + return { + ctor: '_Tuple2', + _0: _p34 + 1, + _1: A3(func, _p34, x, _p33._1) + }; + }); + return _elm_lang$core$Tuple$second( + A3( + _elm_lang$core$List$foldl, + step, + {ctor: '_Tuple2', _0: 0, _1: acc}, + list)); + }); +var _elm_community$list_extra$List_Extra$foldr1 = F2( + function (f, xs) { + var mf = F2( + function (x, m) { + return _elm_lang$core$Maybe$Just( + function () { + var _p35 = m; + if (_p35.ctor === 'Nothing') { + return x; + } else { + return A2(f, x, _p35._0); + } + }()); + }); + return A3(_elm_lang$core$List$foldr, mf, _elm_lang$core$Maybe$Nothing, xs); + }); +var _elm_community$list_extra$List_Extra$foldl1 = F2( + function (f, xs) { + var mf = F2( + function (x, m) { + return _elm_lang$core$Maybe$Just( + function () { + var _p36 = m; + if (_p36.ctor === 'Nothing') { + return x; + } else { + return A2(f, _p36._0, x); + } + }()); + }); + return A3(_elm_lang$core$List$foldl, mf, _elm_lang$core$Maybe$Nothing, xs); + }); +var _elm_community$list_extra$List_Extra$interweaveHelp = F3( + function (l1, l2, acc) { + interweaveHelp: + while (true) { + var _p37 = {ctor: '_Tuple2', _0: l1, _1: l2}; + _v24_1: + do { + if (_p37._0.ctor === '::') { + if (_p37._1.ctor === '::') { + var _v25 = _p37._0._1, + _v26 = _p37._1._1, + _v27 = A2( + _elm_lang$core$Basics_ops['++'], + acc, + { + ctor: '::', + _0: _p37._0._0, + _1: { + ctor: '::', + _0: _p37._1._0, + _1: {ctor: '[]'} + } + }); + l1 = _v25; + l2 = _v26; + acc = _v27; + continue interweaveHelp; + } else { + break _v24_1; + } + } else { + if (_p37._1.ctor === '[]') { + break _v24_1; + } else { + return A2(_elm_lang$core$Basics_ops['++'], acc, _p37._1); + } + } + } while(false); + return A2(_elm_lang$core$Basics_ops['++'], acc, _p37._0); + } + }); +var _elm_community$list_extra$List_Extra$interweave = F2( + function (l1, l2) { + return A3( + _elm_community$list_extra$List_Extra$interweaveHelp, + l1, + l2, + {ctor: '[]'}); + }); +var _elm_community$list_extra$List_Extra$permutations = function (xs_) { + var _p38 = xs_; + if (_p38.ctor === '[]') { + return { + ctor: '::', + _0: {ctor: '[]'}, + _1: {ctor: '[]'} + }; + } else { + var f = function (_p39) { + var _p40 = _p39; + return A2( + _elm_lang$core$List$map, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + })(_p40._0), + _elm_community$list_extra$List_Extra$permutations(_p40._1)); + }; + return A2( + _elm_lang$core$List$concatMap, + f, + _elm_community$list_extra$List_Extra$select(_p38)); + } +}; +var _elm_community$list_extra$List_Extra$isPermutationOf = F2( + function (permut, xs) { + return A2( + _elm_lang$core$List$member, + permut, + _elm_community$list_extra$List_Extra$permutations(xs)); + }); +var _elm_community$list_extra$List_Extra$subsequencesNonEmpty = function (xs) { + var _p41 = xs; + if (_p41.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p42 = _p41._0; + var f = F2( + function (ys, r) { + return { + ctor: '::', + _0: ys, + _1: { + ctor: '::', + _0: {ctor: '::', _0: _p42, _1: ys}, + _1: r + } + }; + }); + return { + ctor: '::', + _0: { + ctor: '::', + _0: _p42, + _1: {ctor: '[]'} + }, + _1: A3( + _elm_lang$core$List$foldr, + f, + {ctor: '[]'}, + _elm_community$list_extra$List_Extra$subsequencesNonEmpty(_p41._1)) + }; + } +}; +var _elm_community$list_extra$List_Extra$subsequences = function (xs) { + return { + ctor: '::', + _0: {ctor: '[]'}, + _1: _elm_community$list_extra$List_Extra$subsequencesNonEmpty(xs) + }; +}; +var _elm_community$list_extra$List_Extra$isSubsequenceOf = F2( + function (subseq, xs) { + return A2( + _elm_lang$core$List$member, + subseq, + _elm_community$list_extra$List_Extra$subsequences(xs)); + }); +var _elm_community$list_extra$List_Extra$transpose = function (ll) { + transpose: + while (true) { + var _p43 = ll; + if (_p43.ctor === '[]') { + return {ctor: '[]'}; + } else { + if (_p43._0.ctor === '[]') { + var _v32 = _p43._1; + ll = _v32; + continue transpose; + } else { + var _p44 = _p43._1; + var tails = A2(_elm_lang$core$List$filterMap, _elm_lang$core$List$tail, _p44); + var heads = A2(_elm_lang$core$List$filterMap, _elm_lang$core$List$head, _p44); + return { + ctor: '::', + _0: {ctor: '::', _0: _p43._0._0, _1: heads}, + _1: _elm_community$list_extra$List_Extra$transpose( + {ctor: '::', _0: _p43._0._1, _1: tails}) + }; + } + } + } +}; +var _elm_community$list_extra$List_Extra$intercalate = function (xs) { + return function (_p45) { + return _elm_lang$core$List$concat( + A2(_elm_lang$core$List$intersperse, xs, _p45)); + }; +}; +var _elm_community$list_extra$List_Extra$filterNot = F2( + function (pred, list) { + return A2( + _elm_lang$core$List$filter, + function (_p46) { + return !pred(_p46); + }, + list); + }); +var _elm_community$list_extra$List_Extra$removeAt = F2( + function (index, l) { + if (_elm_lang$core$Native_Utils.cmp(index, 0) < 0) { + return l; + } else { + var tail = _elm_lang$core$List$tail( + A2(_elm_lang$core$List$drop, index, l)); + var head = A2(_elm_lang$core$List$take, index, l); + var _p47 = tail; + if (_p47.ctor === 'Nothing') { + return l; + } else { + return A2(_elm_lang$core$List$append, head, _p47._0); + } + } + }); +var _elm_community$list_extra$List_Extra$stableSortWith = F2( + function (pred, list) { + var predWithIndex = F2( + function (_p49, _p48) { + var _p50 = _p49; + var _p51 = _p48; + var result = A2(pred, _p50._0, _p51._0); + var _p52 = result; + if (_p52.ctor === 'EQ') { + return A2(_elm_lang$core$Basics$compare, _p50._1, _p51._1); + } else { + return result; + } + }); + var listWithIndex = A2( + _elm_lang$core$List$indexedMap, + F2( + function (i, a) { + return {ctor: '_Tuple2', _0: a, _1: i}; + }), + list); + return A2( + _elm_lang$core$List$map, + _elm_lang$core$Tuple$first, + A2(_elm_lang$core$List$sortWith, predWithIndex, listWithIndex)); + }); +var _elm_community$list_extra$List_Extra$setAt = F3( + function (index, value, l) { + if (_elm_lang$core$Native_Utils.cmp(index, 0) < 0) { + return _elm_lang$core$Maybe$Nothing; + } else { + var tail = _elm_lang$core$List$tail( + A2(_elm_lang$core$List$drop, index, l)); + var head = A2(_elm_lang$core$List$take, index, l); + var _p53 = tail; + if (_p53.ctor === 'Nothing') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just( + A2( + _elm_lang$core$List$append, + head, + {ctor: '::', _0: value, _1: _p53._0})); + } + } + }); +var _elm_community$list_extra$List_Extra$remove = F2( + function (x, xs) { + var _p54 = xs; + if (_p54.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p56 = _p54._1; + var _p55 = _p54._0; + return _elm_lang$core$Native_Utils.eq(x, _p55) ? _p56 : { + ctor: '::', + _0: _p55, + _1: A2(_elm_community$list_extra$List_Extra$remove, x, _p56) + }; + } + }); +var _elm_community$list_extra$List_Extra$updateIfIndex = F3( + function (predicate, update, list) { + return A2( + _elm_lang$core$List$indexedMap, + F2( + function (i, x) { + return predicate(i) ? update(x) : x; + }), + list); + }); +var _elm_community$list_extra$List_Extra$updateAt = F3( + function (index, update, list) { + return ((_elm_lang$core$Native_Utils.cmp(index, 0) < 0) || (_elm_lang$core$Native_Utils.cmp( + index, + _elm_lang$core$List$length(list)) > -1)) ? _elm_lang$core$Maybe$Nothing : _elm_lang$core$Maybe$Just( + A3( + _elm_community$list_extra$List_Extra$updateIfIndex, + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + })(index), + update, + list)); + }); +var _elm_community$list_extra$List_Extra$updateIf = F3( + function (predicate, update, list) { + return A2( + _elm_lang$core$List$map, + function (item) { + return predicate(item) ? update(item) : item; + }, + list); + }); +var _elm_community$list_extra$List_Extra$replaceIf = F3( + function (predicate, replacement, list) { + return A3( + _elm_community$list_extra$List_Extra$updateIf, + predicate, + _elm_lang$core$Basics$always(replacement), + list); + }); +var _elm_community$list_extra$List_Extra$findIndices = function (p) { + return function (_p57) { + return A2( + _elm_lang$core$List$map, + _elm_lang$core$Tuple$first, + A2( + _elm_lang$core$List$filter, + function (_p58) { + var _p59 = _p58; + return p(_p59._1); + }, + A2( + _elm_lang$core$List$indexedMap, + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }), + _p57))); + }; +}; +var _elm_community$list_extra$List_Extra$findIndex = function (p) { + return function (_p60) { + return _elm_lang$core$List$head( + A2(_elm_community$list_extra$List_Extra$findIndices, p, _p60)); + }; +}; +var _elm_community$list_extra$List_Extra$splitWhen = F2( + function (predicate, list) { + return A2( + _elm_lang$core$Maybe$map, + function (i) { + return A2(_elm_community$list_extra$List_Extra$splitAt, i, list); + }, + A2(_elm_community$list_extra$List_Extra$findIndex, predicate, list)); + }); +var _elm_community$list_extra$List_Extra$elemIndices = function (x) { + return _elm_community$list_extra$List_Extra$findIndices( + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + })(x)); +}; +var _elm_community$list_extra$List_Extra$elemIndex = function (x) { + return _elm_community$list_extra$List_Extra$findIndex( + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + })(x)); +}; +var _elm_community$list_extra$List_Extra$find = F2( + function (predicate, list) { + find: + while (true) { + var _p61 = list; + if (_p61.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + var _p62 = _p61._0; + if (predicate(_p62)) { + return _elm_lang$core$Maybe$Just(_p62); + } else { + var _v41 = predicate, + _v42 = _p61._1; + predicate = _v41; + list = _v42; + continue find; + } + } + } + }); +var _elm_community$list_extra$List_Extra$notMember = function (x) { + return function (_p63) { + return !A2(_elm_lang$core$List$member, x, _p63); + }; +}; +var _elm_community$list_extra$List_Extra$andThen = _elm_lang$core$List$concatMap; +var _elm_community$list_extra$List_Extra$lift2 = F3( + function (f, la, lb) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (a) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (b) { + return { + ctor: '::', + _0: A2(f, a, b), + _1: {ctor: '[]'} + }; + }, + lb); + }, + la); + }); +var _elm_community$list_extra$List_Extra$lift3 = F4( + function (f, la, lb, lc) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (a) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (b) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (c) { + return { + ctor: '::', + _0: A3(f, a, b, c), + _1: {ctor: '[]'} + }; + }, + lc); + }, + lb); + }, + la); + }); +var _elm_community$list_extra$List_Extra$lift4 = F5( + function (f, la, lb, lc, ld) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (a) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (b) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (c) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (d) { + return { + ctor: '::', + _0: A4(f, a, b, c, d), + _1: {ctor: '[]'} + }; + }, + ld); + }, + lc); + }, + lb); + }, + la); + }); +var _elm_community$list_extra$List_Extra$andMap = F2( + function (l, fl) { + return A3( + _elm_lang$core$List$map2, + F2( + function (x, y) { + return x(y); + }), + fl, + l); + }); +var _elm_community$list_extra$List_Extra$uniqueHelp = F3( + function (f, existing, remaining) { + uniqueHelp: + while (true) { + var _p64 = remaining; + if (_p64.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p66 = _p64._1; + var _p65 = _p64._0; + var computedFirst = f(_p65); + if (A2(_elm_lang$core$Set$member, computedFirst, existing)) { + var _v44 = f, + _v45 = existing, + _v46 = _p66; + f = _v44; + existing = _v45; + remaining = _v46; + continue uniqueHelp; + } else { + return { + ctor: '::', + _0: _p65, + _1: A3( + _elm_community$list_extra$List_Extra$uniqueHelp, + f, + A2(_elm_lang$core$Set$insert, computedFirst, existing), + _p66) + }; + } + } + } + }); +var _elm_community$list_extra$List_Extra$uniqueBy = F2( + function (f, list) { + return A3(_elm_community$list_extra$List_Extra$uniqueHelp, f, _elm_lang$core$Set$empty, list); + }); +var _elm_community$list_extra$List_Extra$allDifferentBy = F2( + function (f, list) { + return _elm_lang$core$Native_Utils.eq( + _elm_lang$core$List$length(list), + _elm_lang$core$List$length( + A2(_elm_community$list_extra$List_Extra$uniqueBy, f, list))); + }); +var _elm_community$list_extra$List_Extra$allDifferent = function (list) { + return A2(_elm_community$list_extra$List_Extra$allDifferentBy, _elm_lang$core$Basics$identity, list); +}; +var _elm_community$list_extra$List_Extra$unique = function (list) { + return A3(_elm_community$list_extra$List_Extra$uniqueHelp, _elm_lang$core$Basics$identity, _elm_lang$core$Set$empty, list); +}; +var _elm_community$list_extra$List_Extra$dropWhile = F2( + function (predicate, list) { + dropWhile: + while (true) { + var _p67 = list; + if (_p67.ctor === '[]') { + return {ctor: '[]'}; + } else { + if (predicate(_p67._0)) { + var _v48 = predicate, + _v49 = _p67._1; + predicate = _v48; + list = _v49; + continue dropWhile; + } else { + return list; + } + } + } + }); +var _elm_community$list_extra$List_Extra$takeWhile = function (predicate) { + var takeWhileMemo = F2( + function (memo, list) { + takeWhileMemo: + while (true) { + var _p68 = list; + if (_p68.ctor === '[]') { + return _elm_lang$core$List$reverse(memo); + } else { + var _p69 = _p68._0; + if (predicate(_p69)) { + var _v51 = {ctor: '::', _0: _p69, _1: memo}, + _v52 = _p68._1; + memo = _v51; + list = _v52; + continue takeWhileMemo; + } else { + return _elm_lang$core$List$reverse(memo); + } + } + } + }); + return takeWhileMemo( + {ctor: '[]'}); +}; +var _elm_community$list_extra$List_Extra$span = F2( + function (p, xs) { + return { + ctor: '_Tuple2', + _0: A2(_elm_community$list_extra$List_Extra$takeWhile, p, xs), + _1: A2(_elm_community$list_extra$List_Extra$dropWhile, p, xs) + }; + }); +var _elm_community$list_extra$List_Extra$break = function (p) { + return _elm_community$list_extra$List_Extra$span( + function (_p70) { + return !p(_p70); + }); +}; +var _elm_community$list_extra$List_Extra$groupWhile = F2( + function (eq, xs_) { + var _p71 = xs_; + if (_p71.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p73 = _p71._0; + var _p72 = A2( + _elm_community$list_extra$List_Extra$span, + eq(_p73), + _p71._1); + var ys = _p72._0; + var zs = _p72._1; + return { + ctor: '::', + _0: {ctor: '::', _0: _p73, _1: ys}, + _1: A2(_elm_community$list_extra$List_Extra$groupWhile, eq, zs) + }; + } + }); +var _elm_community$list_extra$List_Extra$group = _elm_community$list_extra$List_Extra$groupWhile( + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + })); +var _elm_community$list_extra$List_Extra$minimumBy = F2( + function (f, ls) { + var minBy = F2( + function (x, _p74) { + var _p75 = _p74; + var _p76 = _p75._1; + var fx = f(x); + return (_elm_lang$core$Native_Utils.cmp(fx, _p76) < 0) ? {ctor: '_Tuple2', _0: x, _1: fx} : {ctor: '_Tuple2', _0: _p75._0, _1: _p76}; + }); + var _p77 = ls; + if (_p77.ctor === '::') { + if (_p77._1.ctor === '[]') { + return _elm_lang$core$Maybe$Just(_p77._0); + } else { + var _p78 = _p77._0; + return _elm_lang$core$Maybe$Just( + _elm_lang$core$Tuple$first( + A3( + _elm_lang$core$List$foldl, + minBy, + { + ctor: '_Tuple2', + _0: _p78, + _1: f(_p78) + }, + _p77._1))); + } + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_community$list_extra$List_Extra$maximumBy = F2( + function (f, ls) { + var maxBy = F2( + function (x, _p79) { + var _p80 = _p79; + var _p81 = _p80._1; + var fx = f(x); + return (_elm_lang$core$Native_Utils.cmp(fx, _p81) > 0) ? {ctor: '_Tuple2', _0: x, _1: fx} : {ctor: '_Tuple2', _0: _p80._0, _1: _p81}; + }); + var _p82 = ls; + if (_p82.ctor === '::') { + if (_p82._1.ctor === '[]') { + return _elm_lang$core$Maybe$Just(_p82._0); + } else { + var _p83 = _p82._0; + return _elm_lang$core$Maybe$Just( + _elm_lang$core$Tuple$first( + A3( + _elm_lang$core$List$foldl, + maxBy, + { + ctor: '_Tuple2', + _0: _p83, + _1: f(_p83) + }, + _p82._1))); + } + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_community$list_extra$List_Extra$uncons = function (xs) { + var _p84 = xs; + if (_p84.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just( + {ctor: '_Tuple2', _0: _p84._0, _1: _p84._1}); + } +}; +var _elm_community$list_extra$List_Extra$swapAt = F3( + function (index1, index2, l) { + swapAt: + while (true) { + if (_elm_lang$core$Native_Utils.eq(index1, index2)) { + return _elm_lang$core$Maybe$Just(l); + } else { + if (_elm_lang$core$Native_Utils.cmp(index1, index2) > 0) { + var _v59 = index2, + _v60 = index1, + _v61 = l; + index1 = _v59; + index2 = _v60; + l = _v61; + continue swapAt; + } else { + if (_elm_lang$core$Native_Utils.cmp(index1, 0) < 0) { + return _elm_lang$core$Maybe$Nothing; + } else { + var _p85 = A2(_elm_community$list_extra$List_Extra$splitAt, index1, l); + var part1 = _p85._0; + var tail1 = _p85._1; + var _p86 = A2(_elm_community$list_extra$List_Extra$splitAt, index2 - index1, tail1); + var head2 = _p86._0; + var tail2 = _p86._1; + return A3( + _elm_lang$core$Maybe$map2, + F2( + function (_p88, _p87) { + var _p89 = _p88; + var _p90 = _p87; + return _elm_lang$core$List$concat( + { + ctor: '::', + _0: part1, + _1: { + ctor: '::', + _0: {ctor: '::', _0: _p90._0, _1: _p89._1}, + _1: { + ctor: '::', + _0: {ctor: '::', _0: _p89._0, _1: _p90._1}, + _1: {ctor: '[]'} + } + } + }); + }), + _elm_community$list_extra$List_Extra$uncons(head2), + _elm_community$list_extra$List_Extra$uncons(tail2)); + } + } + } + } + }); +var _elm_community$list_extra$List_Extra$iterate = F2( + function (f, x) { + var _p91 = f(x); + if (_p91.ctor === 'Just') { + return { + ctor: '::', + _0: x, + _1: A2(_elm_community$list_extra$List_Extra$iterate, f, _p91._0) + }; + } else { + return { + ctor: '::', + _0: x, + _1: {ctor: '[]'} + }; + } + }); +var _elm_community$list_extra$List_Extra$getAt = F2( + function (idx, xs) { + return (_elm_lang$core$Native_Utils.cmp(idx, 0) < 0) ? _elm_lang$core$Maybe$Nothing : _elm_lang$core$List$head( + A2(_elm_lang$core$List$drop, idx, xs)); + }); +var _elm_community$list_extra$List_Extra_ops = _elm_community$list_extra$List_Extra_ops || {}; +_elm_community$list_extra$List_Extra_ops['!!'] = _elm_lang$core$Basics$flip(_elm_community$list_extra$List_Extra$getAt); +var _elm_community$list_extra$List_Extra$init = function () { + var maybe = F2( + function (d, f) { + return function (_p92) { + return A2( + _elm_lang$core$Maybe$withDefault, + d, + A2(_elm_lang$core$Maybe$map, f, _p92)); + }; + }); + return A2( + _elm_lang$core$List$foldr, + function (x) { + return function (_p93) { + return _elm_lang$core$Maybe$Just( + A3( + maybe, + {ctor: '[]'}, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + })(x), + _p93)); + }; + }, + _elm_lang$core$Maybe$Nothing); +}(); +var _elm_community$list_extra$List_Extra$last = _elm_community$list_extra$List_Extra$foldl1( + _elm_lang$core$Basics$flip(_elm_lang$core$Basics$always)); + +//import Native.List // + +var _elm_lang$core$Native_Array = function() { + +// A RRB-Tree has two distinct data types. +// Leaf -> "height" is always 0 +// "table" is an array of elements +// Node -> "height" is always greater than 0 +// "table" is an array of child nodes +// "lengths" is an array of accumulated lengths of the child nodes + +// M is the maximal table size. 32 seems fast. E is the allowed increase +// of search steps when concatting to find an index. Lower values will +// decrease balancing, but will increase search steps. +var M = 32; +var E = 2; + +// An empty array. +var empty = { + ctor: '_Array', + height: 0, + table: [] +}; + + +function get(i, array) +{ + if (i < 0 || i >= length(array)) + { + throw new Error( + 'Index ' + i + ' is out of range. Check the length of ' + + 'your array first or use getMaybe or getWithDefault.'); + } + return unsafeGet(i, array); +} + + +function unsafeGet(i, array) +{ + for (var x = array.height; x > 0; x--) + { + var slot = i >> (x * 5); + while (array.lengths[slot] <= i) + { + slot++; + } + if (slot > 0) + { + i -= array.lengths[slot - 1]; + } + array = array.table[slot]; + } + return array.table[i]; +} + + +// Sets the value at the index i. Only the nodes leading to i will get +// copied and updated. +function set(i, item, array) +{ + if (i < 0 || length(array) <= i) + { + return array; + } + return unsafeSet(i, item, array); +} + + +function unsafeSet(i, item, array) +{ + array = nodeCopy(array); + + if (array.height === 0) + { + array.table[i] = item; + } + else + { + var slot = getSlot(i, array); + if (slot > 0) + { + i -= array.lengths[slot - 1]; + } + array.table[slot] = unsafeSet(i, item, array.table[slot]); + } + return array; +} + + +function initialize(len, f) +{ + if (len <= 0) + { + return empty; + } + var h = Math.floor( Math.log(len) / Math.log(M) ); + return initialize_(f, h, 0, len); +} + +function initialize_(f, h, from, to) +{ + if (h === 0) + { + var table = new Array((to - from) % (M + 1)); + for (var i = 0; i < table.length; i++) + { + table[i] = f(from + i); + } + return { + ctor: '_Array', + height: 0, + table: table + }; + } + + var step = Math.pow(M, h); + var table = new Array(Math.ceil((to - from) / step)); + var lengths = new Array(table.length); + for (var i = 0; i < table.length; i++) + { + table[i] = initialize_(f, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to)); + lengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0); + } + return { + ctor: '_Array', + height: h, + table: table, + lengths: lengths + }; +} + +function fromList(list) +{ + if (list.ctor === '[]') + { + return empty; + } + + // Allocate M sized blocks (table) and write list elements to it. + var table = new Array(M); + var nodes = []; + var i = 0; + + while (list.ctor !== '[]') + { + table[i] = list._0; + list = list._1; + i++; + + // table is full, so we can push a leaf containing it into the + // next node. + if (i === M) + { + var leaf = { + ctor: '_Array', + height: 0, + table: table + }; + fromListPush(leaf, nodes); + table = new Array(M); + i = 0; + } + } + + // Maybe there is something left on the table. + if (i > 0) + { + var leaf = { + ctor: '_Array', + height: 0, + table: table.splice(0, i) + }; + fromListPush(leaf, nodes); + } + + // Go through all of the nodes and eventually push them into higher nodes. + for (var h = 0; h < nodes.length - 1; h++) + { + if (nodes[h].table.length > 0) + { + fromListPush(nodes[h], nodes); + } + } + + var head = nodes[nodes.length - 1]; + if (head.height > 0 && head.table.length === 1) + { + return head.table[0]; + } + else + { + return head; + } +} + +// Push a node into a higher node as a child. +function fromListPush(toPush, nodes) +{ + var h = toPush.height; + + // Maybe the node on this height does not exist. + if (nodes.length === h) + { + var node = { + ctor: '_Array', + height: h + 1, + table: [], + lengths: [] + }; + nodes.push(node); + } + + nodes[h].table.push(toPush); + var len = length(toPush); + if (nodes[h].lengths.length > 0) + { + len += nodes[h].lengths[nodes[h].lengths.length - 1]; + } + nodes[h].lengths.push(len); + + if (nodes[h].table.length === M) + { + fromListPush(nodes[h], nodes); + nodes[h] = { + ctor: '_Array', + height: h + 1, + table: [], + lengths: [] + }; + } +} + +// Pushes an item via push_ to the bottom right of a tree. +function push(item, a) +{ + var pushed = push_(item, a); + if (pushed !== null) + { + return pushed; + } + + var newTree = create(item, a.height); + return siblise(a, newTree); +} + +// Recursively tries to push an item to the bottom-right most +// tree possible. If there is no space left for the item, +// null will be returned. +function push_(item, a) +{ + // Handle resursion stop at leaf level. + if (a.height === 0) + { + if (a.table.length < M) + { + var newA = { + ctor: '_Array', + height: 0, + table: a.table.slice() + }; + newA.table.push(item); + return newA; + } + else + { + return null; + } + } + + // Recursively push + var pushed = push_(item, botRight(a)); + + // There was space in the bottom right tree, so the slot will + // be updated. + if (pushed !== null) + { + var newA = nodeCopy(a); + newA.table[newA.table.length - 1] = pushed; + newA.lengths[newA.lengths.length - 1]++; + return newA; + } + + // When there was no space left, check if there is space left + // for a new slot with a tree which contains only the item + // at the bottom. + if (a.table.length < M) + { + var newSlot = create(item, a.height - 1); + var newA = nodeCopy(a); + newA.table.push(newSlot); + newA.lengths.push(newA.lengths[newA.lengths.length - 1] + length(newSlot)); + return newA; + } + else + { + return null; + } +} + +// Converts an array into a list of elements. +function toList(a) +{ + return toList_(_elm_lang$core$Native_List.Nil, a); +} + +function toList_(list, a) +{ + for (var i = a.table.length - 1; i >= 0; i--) + { + list = + a.height === 0 + ? _elm_lang$core$Native_List.Cons(a.table[i], list) + : toList_(list, a.table[i]); + } + return list; +} + +// Maps a function over the elements of an array. +function map(f, a) +{ + var newA = { + ctor: '_Array', + height: a.height, + table: new Array(a.table.length) + }; + if (a.height > 0) + { + newA.lengths = a.lengths; + } + for (var i = 0; i < a.table.length; i++) + { + newA.table[i] = + a.height === 0 + ? f(a.table[i]) + : map(f, a.table[i]); + } + return newA; +} + +// Maps a function over the elements with their index as first argument. +function indexedMap(f, a) +{ + return indexedMap_(f, a, 0); +} + +function indexedMap_(f, a, from) +{ + var newA = { + ctor: '_Array', + height: a.height, + table: new Array(a.table.length) + }; + if (a.height > 0) + { + newA.lengths = a.lengths; + } + for (var i = 0; i < a.table.length; i++) + { + newA.table[i] = + a.height === 0 + ? A2(f, from + i, a.table[i]) + : indexedMap_(f, a.table[i], i == 0 ? from : from + a.lengths[i - 1]); + } + return newA; +} + +function foldl(f, b, a) +{ + if (a.height === 0) + { + for (var i = 0; i < a.table.length; i++) + { + b = A2(f, a.table[i], b); + } + } + else + { + for (var i = 0; i < a.table.length; i++) + { + b = foldl(f, b, a.table[i]); + } + } + return b; +} + +function foldr(f, b, a) +{ + if (a.height === 0) + { + for (var i = a.table.length; i--; ) + { + b = A2(f, a.table[i], b); + } + } + else + { + for (var i = a.table.length; i--; ) + { + b = foldr(f, b, a.table[i]); + } + } + return b; +} + +// TODO: currently, it slices the right, then the left. This can be +// optimized. +function slice(from, to, a) +{ + if (from < 0) + { + from += length(a); + } + if (to < 0) + { + to += length(a); + } + return sliceLeft(from, sliceRight(to, a)); +} + +function sliceRight(to, a) +{ + if (to === length(a)) + { + return a; + } + + // Handle leaf level. + if (a.height === 0) + { + var newA = { ctor:'_Array', height:0 }; + newA.table = a.table.slice(0, to); + return newA; + } + + // Slice the right recursively. + var right = getSlot(to, a); + var sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]); + + // Maybe the a node is not even needed, as sliced contains the whole slice. + if (right === 0) + { + return sliced; + } + + // Create new node. + var newA = { + ctor: '_Array', + height: a.height, + table: a.table.slice(0, right), + lengths: a.lengths.slice(0, right) + }; + if (sliced.table.length > 0) + { + newA.table[right] = sliced; + newA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0); + } + return newA; +} + +function sliceLeft(from, a) +{ + if (from === 0) + { + return a; + } + + // Handle leaf level. + if (a.height === 0) + { + var newA = { ctor:'_Array', height:0 }; + newA.table = a.table.slice(from, a.table.length + 1); + return newA; + } + + // Slice the left recursively. + var left = getSlot(from, a); + var sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]); + + // Maybe the a node is not even needed, as sliced contains the whole slice. + if (left === a.table.length - 1) + { + return sliced; + } + + // Create new node. + var newA = { + ctor: '_Array', + height: a.height, + table: a.table.slice(left, a.table.length + 1), + lengths: new Array(a.table.length - left) + }; + newA.table[0] = sliced; + var len = 0; + for (var i = 0; i < newA.table.length; i++) + { + len += length(newA.table[i]); + newA.lengths[i] = len; + } + + return newA; +} + +// Appends two trees. +function append(a,b) +{ + if (a.table.length === 0) + { + return b; + } + if (b.table.length === 0) + { + return a; + } + + var c = append_(a, b); + + // Check if both nodes can be crunshed together. + if (c[0].table.length + c[1].table.length <= M) + { + if (c[0].table.length === 0) + { + return c[1]; + } + if (c[1].table.length === 0) + { + return c[0]; + } + + // Adjust .table and .lengths + c[0].table = c[0].table.concat(c[1].table); + if (c[0].height > 0) + { + var len = length(c[0]); + for (var i = 0; i < c[1].lengths.length; i++) + { + c[1].lengths[i] += len; + } + c[0].lengths = c[0].lengths.concat(c[1].lengths); + } + + return c[0]; + } + + if (c[0].height > 0) + { + var toRemove = calcToRemove(a, b); + if (toRemove > E) + { + c = shuffle(c[0], c[1], toRemove); + } + } + + return siblise(c[0], c[1]); +} + +// Returns an array of two nodes; right and left. One node _may_ be empty. +function append_(a, b) +{ + if (a.height === 0 && b.height === 0) + { + return [a, b]; + } + + if (a.height !== 1 || b.height !== 1) + { + if (a.height === b.height) + { + a = nodeCopy(a); + b = nodeCopy(b); + var appended = append_(botRight(a), botLeft(b)); + + insertRight(a, appended[1]); + insertLeft(b, appended[0]); + } + else if (a.height > b.height) + { + a = nodeCopy(a); + var appended = append_(botRight(a), b); + + insertRight(a, appended[0]); + b = parentise(appended[1], appended[1].height + 1); + } + else + { + b = nodeCopy(b); + var appended = append_(a, botLeft(b)); + + var left = appended[0].table.length === 0 ? 0 : 1; + var right = left === 0 ? 1 : 0; + insertLeft(b, appended[left]); + a = parentise(appended[right], appended[right].height + 1); + } + } + + // Check if balancing is needed and return based on that. + if (a.table.length === 0 || b.table.length === 0) + { + return [a, b]; + } + + var toRemove = calcToRemove(a, b); + if (toRemove <= E) + { + return [a, b]; + } + return shuffle(a, b, toRemove); +} + +// Helperfunctions for append_. Replaces a child node at the side of the parent. +function insertRight(parent, node) +{ + var index = parent.table.length - 1; + parent.table[index] = node; + parent.lengths[index] = length(node); + parent.lengths[index] += index > 0 ? parent.lengths[index - 1] : 0; +} + +function insertLeft(parent, node) +{ + if (node.table.length > 0) + { + parent.table[0] = node; + parent.lengths[0] = length(node); + + var len = length(parent.table[0]); + for (var i = 1; i < parent.lengths.length; i++) + { + len += length(parent.table[i]); + parent.lengths[i] = len; + } + } + else + { + parent.table.shift(); + for (var i = 1; i < parent.lengths.length; i++) + { + parent.lengths[i] = parent.lengths[i] - parent.lengths[0]; + } + parent.lengths.shift(); + } +} + +// Returns the extra search steps for E. Refer to the paper. +function calcToRemove(a, b) +{ + var subLengths = 0; + for (var i = 0; i < a.table.length; i++) + { + subLengths += a.table[i].table.length; + } + for (var i = 0; i < b.table.length; i++) + { + subLengths += b.table[i].table.length; + } + + var toRemove = a.table.length + b.table.length; + return toRemove - (Math.floor((subLengths - 1) / M) + 1); +} + +// get2, set2 and saveSlot are helpers for accessing elements over two arrays. +function get2(a, b, index) +{ + return index < a.length + ? a[index] + : b[index - a.length]; +} + +function set2(a, b, index, value) +{ + if (index < a.length) + { + a[index] = value; + } + else + { + b[index - a.length] = value; + } +} + +function saveSlot(a, b, index, slot) +{ + set2(a.table, b.table, index, slot); + + var l = (index === 0 || index === a.lengths.length) + ? 0 + : get2(a.lengths, a.lengths, index - 1); + + set2(a.lengths, b.lengths, index, l + length(slot)); +} + +// Creates a node or leaf with a given length at their arrays for perfomance. +// Is only used by shuffle. +function createNode(h, length) +{ + if (length < 0) + { + length = 0; + } + var a = { + ctor: '_Array', + height: h, + table: new Array(length) + }; + if (h > 0) + { + a.lengths = new Array(length); + } + return a; +} + +// Returns an array of two balanced nodes. +function shuffle(a, b, toRemove) +{ + var newA = createNode(a.height, Math.min(M, a.table.length + b.table.length - toRemove)); + var newB = createNode(a.height, newA.table.length - (a.table.length + b.table.length - toRemove)); + + // Skip the slots with size M. More precise: copy the slot references + // to the new node + var read = 0; + while (get2(a.table, b.table, read).table.length % M === 0) + { + set2(newA.table, newB.table, read, get2(a.table, b.table, read)); + set2(newA.lengths, newB.lengths, read, get2(a.lengths, b.lengths, read)); + read++; + } + + // Pulling items from left to right, caching in a slot before writing + // it into the new nodes. + var write = read; + var slot = new createNode(a.height - 1, 0); + var from = 0; + + // If the current slot is still containing data, then there will be at + // least one more write, so we do not break this loop yet. + while (read - write - (slot.table.length > 0 ? 1 : 0) < toRemove) + { + // Find out the max possible items for copying. + var source = get2(a.table, b.table, read); + var to = Math.min(M - slot.table.length, source.table.length); + + // Copy and adjust size table. + slot.table = slot.table.concat(source.table.slice(from, to)); + if (slot.height > 0) + { + var len = slot.lengths.length; + for (var i = len; i < len + to - from; i++) + { + slot.lengths[i] = length(slot.table[i]); + slot.lengths[i] += (i > 0 ? slot.lengths[i - 1] : 0); + } + } + + from += to; + + // Only proceed to next slots[i] if the current one was + // fully copied. + if (source.table.length <= to) + { + read++; from = 0; + } + + // Only create a new slot if the current one is filled up. + if (slot.table.length === M) + { + saveSlot(newA, newB, write, slot); + slot = createNode(a.height - 1, 0); + write++; + } + } + + // Cleanup after the loop. Copy the last slot into the new nodes. + if (slot.table.length > 0) + { + saveSlot(newA, newB, write, slot); + write++; + } + + // Shift the untouched slots to the left + while (read < a.table.length + b.table.length ) + { + saveSlot(newA, newB, write, get2(a.table, b.table, read)); + read++; + write++; + } + + return [newA, newB]; +} + +// Navigation functions +function botRight(a) +{ + return a.table[a.table.length - 1]; +} +function botLeft(a) +{ + return a.table[0]; +} + +// Copies a node for updating. Note that you should not use this if +// only updating only one of "table" or "lengths" for performance reasons. +function nodeCopy(a) +{ + var newA = { + ctor: '_Array', + height: a.height, + table: a.table.slice() + }; + if (a.height > 0) + { + newA.lengths = a.lengths.slice(); + } + return newA; +} + +// Returns how many items are in the tree. +function length(array) +{ + if (array.height === 0) + { + return array.table.length; + } + else + { + return array.lengths[array.lengths.length - 1]; + } +} + +// Calculates in which slot of "table" the item probably is, then +// find the exact slot via forward searching in "lengths". Returns the index. +function getSlot(i, a) +{ + var slot = i >> (5 * a.height); + while (a.lengths[slot] <= i) + { + slot++; + } + return slot; +} + +// Recursively creates a tree with a given height containing +// only the given item. +function create(item, h) +{ + if (h === 0) + { + return { + ctor: '_Array', + height: 0, + table: [item] + }; + } + return { + ctor: '_Array', + height: h, + table: [create(item, h - 1)], + lengths: [1] + }; +} + +// Recursively creates a tree that contains the given tree. +function parentise(tree, h) +{ + if (h === tree.height) + { + return tree; + } + + return { + ctor: '_Array', + height: h, + table: [parentise(tree, h - 1)], + lengths: [length(tree)] + }; +} + +// Emphasizes blood brotherhood beneath two trees. +function siblise(a, b) +{ + return { + ctor: '_Array', + height: a.height + 1, + table: [a, b], + lengths: [length(a), length(a) + length(b)] + }; +} + +function toJSArray(a) +{ + var jsArray = new Array(length(a)); + toJSArray_(jsArray, 0, a); + return jsArray; +} + +function toJSArray_(jsArray, i, a) +{ + for (var t = 0; t < a.table.length; t++) + { + if (a.height === 0) + { + jsArray[i + t] = a.table[t]; + } + else + { + var inc = t === 0 ? 0 : a.lengths[t - 1]; + toJSArray_(jsArray, i + inc, a.table[t]); + } + } +} + +function fromJSArray(jsArray) +{ + if (jsArray.length === 0) + { + return empty; + } + var h = Math.floor(Math.log(jsArray.length) / Math.log(M)); + return fromJSArray_(jsArray, h, 0, jsArray.length); +} + +function fromJSArray_(jsArray, h, from, to) +{ + if (h === 0) + { + return { + ctor: '_Array', + height: 0, + table: jsArray.slice(from, to) + }; + } + + var step = Math.pow(M, h); + var table = new Array(Math.ceil((to - from) / step)); + var lengths = new Array(table.length); + for (var i = 0; i < table.length; i++) + { + table[i] = fromJSArray_(jsArray, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to)); + lengths[i] = length(table[i]) + (i > 0 ? lengths[i - 1] : 0); + } + return { + ctor: '_Array', + height: h, + table: table, + lengths: lengths + }; +} + +return { + empty: empty, + fromList: fromList, + toList: toList, + initialize: F2(initialize), + append: F2(append), + push: F2(push), + slice: F3(slice), + get: F2(get), + set: F3(set), + map: F2(map), + indexedMap: F2(indexedMap), + foldl: F3(foldl), + foldr: F3(foldr), + length: length, + + toJSArray: toJSArray, + fromJSArray: fromJSArray +}; + +}(); +var _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append; +var _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length; +var _elm_lang$core$Array$isEmpty = function (array) { + return _elm_lang$core$Native_Utils.eq( + _elm_lang$core$Array$length(array), + 0); +}; +var _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice; +var _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set; +var _elm_lang$core$Array$get = F2( + function (i, array) { + return ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp( + i, + _elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just( + A2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing; + }); +var _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push; +var _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty; +var _elm_lang$core$Array$filter = F2( + function (isOkay, arr) { + var update = F2( + function (x, xs) { + return isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs; + }); + return A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr); + }); +var _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr; +var _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl; +var _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap; +var _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map; +var _elm_lang$core$Array$toIndexedList = function (array) { + return A3( + _elm_lang$core$List$map2, + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }), + A2( + _elm_lang$core$List$range, + 0, + _elm_lang$core$Native_Array.length(array) - 1), + _elm_lang$core$Native_Array.toList(array)); +}; +var _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList; +var _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList; +var _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize; +var _elm_lang$core$Array$repeat = F2( + function (n, e) { + return A2( + _elm_lang$core$Array$initialize, + n, + _elm_lang$core$Basics$always(e)); + }); +var _elm_lang$core$Array$Array = {ctor: 'Array'}; + +var _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError; +var _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen; +var _elm_lang$core$Task$spawnCmd = F2( + function (router, _p0) { + var _p1 = _p0; + return _elm_lang$core$Native_Scheduler.spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToApp(router), + _p1._0)); + }); +var _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail; +var _elm_lang$core$Task$mapError = F2( + function (convert, task) { + return A2( + _elm_lang$core$Task$onError, + function (_p2) { + return _elm_lang$core$Task$fail( + convert(_p2)); + }, + task); + }); +var _elm_lang$core$Task$succeed = _elm_lang$core$Native_Scheduler.succeed; +var _elm_lang$core$Task$map = F2( + function (func, taskA) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return _elm_lang$core$Task$succeed( + func(a)); + }, + taskA); + }); +var _elm_lang$core$Task$map2 = F3( + function (func, taskA, taskB) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return _elm_lang$core$Task$succeed( + A2(func, a, b)); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$map3 = F4( + function (func, taskA, taskB, taskC) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + function (c) { + return _elm_lang$core$Task$succeed( + A3(func, a, b, c)); + }, + taskC); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$map4 = F5( + function (func, taskA, taskB, taskC, taskD) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + function (c) { + return A2( + _elm_lang$core$Task$andThen, + function (d) { + return _elm_lang$core$Task$succeed( + A4(func, a, b, c, d)); + }, + taskD); + }, + taskC); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$map5 = F6( + function (func, taskA, taskB, taskC, taskD, taskE) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + function (c) { + return A2( + _elm_lang$core$Task$andThen, + function (d) { + return A2( + _elm_lang$core$Task$andThen, + function (e) { + return _elm_lang$core$Task$succeed( + A5(func, a, b, c, d, e)); + }, + taskE); + }, + taskD); + }, + taskC); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$sequence = function (tasks) { + var _p3 = tasks; + if (_p3.ctor === '[]') { + return _elm_lang$core$Task$succeed( + {ctor: '[]'}); + } else { + return A3( + _elm_lang$core$Task$map2, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + }), + _p3._0, + _elm_lang$core$Task$sequence(_p3._1)); + } +}; +var _elm_lang$core$Task$onEffects = F3( + function (router, commands, state) { + return A2( + _elm_lang$core$Task$map, + function (_p4) { + return {ctor: '_Tuple0'}; + }, + _elm_lang$core$Task$sequence( + A2( + _elm_lang$core$List$map, + _elm_lang$core$Task$spawnCmd(router), + commands))); + }); +var _elm_lang$core$Task$init = _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}); +var _elm_lang$core$Task$onSelfMsg = F3( + function (_p7, _p6, _p5) { + return _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}); + }); +var _elm_lang$core$Task$command = _elm_lang$core$Native_Platform.leaf('Task'); +var _elm_lang$core$Task$Perform = function (a) { + return {ctor: 'Perform', _0: a}; +}; +var _elm_lang$core$Task$perform = F2( + function (toMessage, task) { + return _elm_lang$core$Task$command( + _elm_lang$core$Task$Perform( + A2(_elm_lang$core$Task$map, toMessage, task))); + }); +var _elm_lang$core$Task$attempt = F2( + function (resultToMessage, task) { + return _elm_lang$core$Task$command( + _elm_lang$core$Task$Perform( + A2( + _elm_lang$core$Task$onError, + function (_p8) { + return _elm_lang$core$Task$succeed( + resultToMessage( + _elm_lang$core$Result$Err(_p8))); + }, + A2( + _elm_lang$core$Task$andThen, + function (_p9) { + return _elm_lang$core$Task$succeed( + resultToMessage( + _elm_lang$core$Result$Ok(_p9))); + }, + task)))); + }); +var _elm_lang$core$Task$cmdMap = F2( + function (tagger, _p10) { + var _p11 = _p10; + return _elm_lang$core$Task$Perform( + A2(_elm_lang$core$Task$map, tagger, _p11._0)); + }); +_elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap}; + +//import Native.Scheduler // + +var _elm_lang$core$Native_Time = function() { + +var now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) +{ + callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); +}); + +function setInterval_(interval, task) +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + var id = setInterval(function() { + _elm_lang$core$Native_Scheduler.rawSpawn(task); + }, interval); + + return function() { clearInterval(id); }; + }); +} + +return { + now: now, + setInterval_: F2(setInterval_) +}; + +}(); +var _elm_lang$core$Time$setInterval = _elm_lang$core$Native_Time.setInterval_; +var _elm_lang$core$Time$spawnHelp = F3( + function (router, intervals, processes) { + var _p0 = intervals; + if (_p0.ctor === '[]') { + return _elm_lang$core$Task$succeed(processes); + } else { + var _p1 = _p0._0; + var spawnRest = function (id) { + return A3( + _elm_lang$core$Time$spawnHelp, + router, + _p0._1, + A3(_elm_lang$core$Dict$insert, _p1, id, processes)); + }; + var spawnTimer = _elm_lang$core$Native_Scheduler.spawn( + A2( + _elm_lang$core$Time$setInterval, + _p1, + A2(_elm_lang$core$Platform$sendToSelf, router, _p1))); + return A2(_elm_lang$core$Task$andThen, spawnRest, spawnTimer); + } + }); +var _elm_lang$core$Time$addMySub = F2( + function (_p2, state) { + var _p3 = _p2; + var _p6 = _p3._1; + var _p5 = _p3._0; + var _p4 = A2(_elm_lang$core$Dict$get, _p5, state); + if (_p4.ctor === 'Nothing') { + return A3( + _elm_lang$core$Dict$insert, + _p5, + { + ctor: '::', + _0: _p6, + _1: {ctor: '[]'} + }, + state); + } else { + return A3( + _elm_lang$core$Dict$insert, + _p5, + {ctor: '::', _0: _p6, _1: _p4._0}, + state); + } + }); +var _elm_lang$core$Time$inMilliseconds = function (t) { + return t; +}; +var _elm_lang$core$Time$millisecond = 1; +var _elm_lang$core$Time$second = 1000 * _elm_lang$core$Time$millisecond; +var _elm_lang$core$Time$minute = 60 * _elm_lang$core$Time$second; +var _elm_lang$core$Time$hour = 60 * _elm_lang$core$Time$minute; +var _elm_lang$core$Time$inHours = function (t) { + return t / _elm_lang$core$Time$hour; +}; +var _elm_lang$core$Time$inMinutes = function (t) { + return t / _elm_lang$core$Time$minute; +}; +var _elm_lang$core$Time$inSeconds = function (t) { + return t / _elm_lang$core$Time$second; +}; +var _elm_lang$core$Time$now = _elm_lang$core$Native_Time.now; +var _elm_lang$core$Time$onSelfMsg = F3( + function (router, interval, state) { + var _p7 = A2(_elm_lang$core$Dict$get, interval, state.taggers); + if (_p7.ctor === 'Nothing') { + return _elm_lang$core$Task$succeed(state); + } else { + var tellTaggers = function (time) { + return _elm_lang$core$Task$sequence( + A2( + _elm_lang$core$List$map, + function (tagger) { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + tagger(time)); + }, + _p7._0)); + }; + return A2( + _elm_lang$core$Task$andThen, + function (_p8) { + return _elm_lang$core$Task$succeed(state); + }, + A2(_elm_lang$core$Task$andThen, tellTaggers, _elm_lang$core$Time$now)); + } + }); +var _elm_lang$core$Time$subscription = _elm_lang$core$Native_Platform.leaf('Time'); +var _elm_lang$core$Time$State = F2( + function (a, b) { + return {taggers: a, processes: b}; + }); +var _elm_lang$core$Time$init = _elm_lang$core$Task$succeed( + A2(_elm_lang$core$Time$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty)); +var _elm_lang$core$Time$onEffects = F3( + function (router, subs, _p9) { + var _p10 = _p9; + var rightStep = F3( + function (_p12, id, _p11) { + var _p13 = _p11; + return { + ctor: '_Tuple3', + _0: _p13._0, + _1: _p13._1, + _2: A2( + _elm_lang$core$Task$andThen, + function (_p14) { + return _p13._2; + }, + _elm_lang$core$Native_Scheduler.kill(id)) + }; + }); + var bothStep = F4( + function (interval, taggers, id, _p15) { + var _p16 = _p15; + return { + ctor: '_Tuple3', + _0: _p16._0, + _1: A3(_elm_lang$core$Dict$insert, interval, id, _p16._1), + _2: _p16._2 + }; + }); + var leftStep = F3( + function (interval, taggers, _p17) { + var _p18 = _p17; + return { + ctor: '_Tuple3', + _0: {ctor: '::', _0: interval, _1: _p18._0}, + _1: _p18._1, + _2: _p18._2 + }; + }); + var newTaggers = A3(_elm_lang$core$List$foldl, _elm_lang$core$Time$addMySub, _elm_lang$core$Dict$empty, subs); + var _p19 = A6( + _elm_lang$core$Dict$merge, + leftStep, + bothStep, + rightStep, + newTaggers, + _p10.processes, + { + ctor: '_Tuple3', + _0: {ctor: '[]'}, + _1: _elm_lang$core$Dict$empty, + _2: _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}) + }); + var spawnList = _p19._0; + var existingDict = _p19._1; + var killTask = _p19._2; + return A2( + _elm_lang$core$Task$andThen, + function (newProcesses) { + return _elm_lang$core$Task$succeed( + A2(_elm_lang$core$Time$State, newTaggers, newProcesses)); + }, + A2( + _elm_lang$core$Task$andThen, + function (_p20) { + return A3(_elm_lang$core$Time$spawnHelp, router, spawnList, existingDict); + }, + killTask)); + }); +var _elm_lang$core$Time$Every = F2( + function (a, b) { + return {ctor: 'Every', _0: a, _1: b}; + }); +var _elm_lang$core$Time$every = F2( + function (interval, tagger) { + return _elm_lang$core$Time$subscription( + A2(_elm_lang$core$Time$Every, interval, tagger)); + }); +var _elm_lang$core$Time$subMap = F2( + function (f, _p21) { + var _p22 = _p21; + return A2( + _elm_lang$core$Time$Every, + _p22._0, + function (_p23) { + return f( + _p22._1(_p23)); + }); + }); +_elm_lang$core$Native_Platform.effectManagers['Time'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Time$init, onEffects: _elm_lang$core$Time$onEffects, onSelfMsg: _elm_lang$core$Time$onSelfMsg, tag: 'sub', subMap: _elm_lang$core$Time$subMap}; + +var _elm_lang$core$Random$onSelfMsg = F3( + function (_p1, _p0, seed) { + return _elm_lang$core$Task$succeed(seed); + }); +var _elm_lang$core$Random$magicNum8 = 2147483562; +var _elm_lang$core$Random$range = function (_p2) { + return {ctor: '_Tuple2', _0: 0, _1: _elm_lang$core$Random$magicNum8}; +}; +var _elm_lang$core$Random$magicNum7 = 2147483399; +var _elm_lang$core$Random$magicNum6 = 2147483563; +var _elm_lang$core$Random$magicNum5 = 3791; +var _elm_lang$core$Random$magicNum4 = 40692; +var _elm_lang$core$Random$magicNum3 = 52774; +var _elm_lang$core$Random$magicNum2 = 12211; +var _elm_lang$core$Random$magicNum1 = 53668; +var _elm_lang$core$Random$magicNum0 = 40014; +var _elm_lang$core$Random$step = F2( + function (_p3, seed) { + var _p4 = _p3; + return _p4._0(seed); + }); +var _elm_lang$core$Random$onEffects = F3( + function (router, commands, seed) { + var _p5 = commands; + if (_p5.ctor === '[]') { + return _elm_lang$core$Task$succeed(seed); + } else { + var _p6 = A2(_elm_lang$core$Random$step, _p5._0._0, seed); + var value = _p6._0; + var newSeed = _p6._1; + return A2( + _elm_lang$core$Task$andThen, + function (_p7) { + return A3(_elm_lang$core$Random$onEffects, router, _p5._1, newSeed); + }, + A2(_elm_lang$core$Platform$sendToApp, router, value)); + } + }); +var _elm_lang$core$Random$listHelp = F4( + function (list, n, generate, seed) { + listHelp: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(n, 1) < 0) { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$List$reverse(list), + _1: seed + }; + } else { + var _p8 = generate(seed); + var value = _p8._0; + var newSeed = _p8._1; + var _v2 = {ctor: '::', _0: value, _1: list}, + _v3 = n - 1, + _v4 = generate, + _v5 = newSeed; + list = _v2; + n = _v3; + generate = _v4; + seed = _v5; + continue listHelp; + } + } + }); +var _elm_lang$core$Random$minInt = -2147483648; +var _elm_lang$core$Random$maxInt = 2147483647; +var _elm_lang$core$Random$iLogBase = F2( + function (b, i) { + return (_elm_lang$core$Native_Utils.cmp(i, b) < 0) ? 1 : (1 + A2(_elm_lang$core$Random$iLogBase, b, (i / b) | 0)); + }); +var _elm_lang$core$Random$command = _elm_lang$core$Native_Platform.leaf('Random'); +var _elm_lang$core$Random$Generator = function (a) { + return {ctor: 'Generator', _0: a}; +}; +var _elm_lang$core$Random$list = F2( + function (n, _p9) { + var _p10 = _p9; + return _elm_lang$core$Random$Generator( + function (seed) { + return A4( + _elm_lang$core$Random$listHelp, + {ctor: '[]'}, + n, + _p10._0, + seed); + }); + }); +var _elm_lang$core$Random$map = F2( + function (func, _p11) { + var _p12 = _p11; + return _elm_lang$core$Random$Generator( + function (seed0) { + var _p13 = _p12._0(seed0); + var a = _p13._0; + var seed1 = _p13._1; + return { + ctor: '_Tuple2', + _0: func(a), + _1: seed1 + }; + }); + }); +var _elm_lang$core$Random$map2 = F3( + function (func, _p15, _p14) { + var _p16 = _p15; + var _p17 = _p14; + return _elm_lang$core$Random$Generator( + function (seed0) { + var _p18 = _p16._0(seed0); + var a = _p18._0; + var seed1 = _p18._1; + var _p19 = _p17._0(seed1); + var b = _p19._0; + var seed2 = _p19._1; + return { + ctor: '_Tuple2', + _0: A2(func, a, b), + _1: seed2 + }; + }); + }); +var _elm_lang$core$Random$pair = F2( + function (genA, genB) { + return A3( + _elm_lang$core$Random$map2, + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }), + genA, + genB); + }); +var _elm_lang$core$Random$map3 = F4( + function (func, _p22, _p21, _p20) { + var _p23 = _p22; + var _p24 = _p21; + var _p25 = _p20; + return _elm_lang$core$Random$Generator( + function (seed0) { + var _p26 = _p23._0(seed0); + var a = _p26._0; + var seed1 = _p26._1; + var _p27 = _p24._0(seed1); + var b = _p27._0; + var seed2 = _p27._1; + var _p28 = _p25._0(seed2); + var c = _p28._0; + var seed3 = _p28._1; + return { + ctor: '_Tuple2', + _0: A3(func, a, b, c), + _1: seed3 + }; + }); + }); +var _elm_lang$core$Random$map4 = F5( + function (func, _p32, _p31, _p30, _p29) { + var _p33 = _p32; + var _p34 = _p31; + var _p35 = _p30; + var _p36 = _p29; + return _elm_lang$core$Random$Generator( + function (seed0) { + var _p37 = _p33._0(seed0); + var a = _p37._0; + var seed1 = _p37._1; + var _p38 = _p34._0(seed1); + var b = _p38._0; + var seed2 = _p38._1; + var _p39 = _p35._0(seed2); + var c = _p39._0; + var seed3 = _p39._1; + var _p40 = _p36._0(seed3); + var d = _p40._0; + var seed4 = _p40._1; + return { + ctor: '_Tuple2', + _0: A4(func, a, b, c, d), + _1: seed4 + }; + }); + }); +var _elm_lang$core$Random$map5 = F6( + function (func, _p45, _p44, _p43, _p42, _p41) { + var _p46 = _p45; + var _p47 = _p44; + var _p48 = _p43; + var _p49 = _p42; + var _p50 = _p41; + return _elm_lang$core$Random$Generator( + function (seed0) { + var _p51 = _p46._0(seed0); + var a = _p51._0; + var seed1 = _p51._1; + var _p52 = _p47._0(seed1); + var b = _p52._0; + var seed2 = _p52._1; + var _p53 = _p48._0(seed2); + var c = _p53._0; + var seed3 = _p53._1; + var _p54 = _p49._0(seed3); + var d = _p54._0; + var seed4 = _p54._1; + var _p55 = _p50._0(seed4); + var e = _p55._0; + var seed5 = _p55._1; + return { + ctor: '_Tuple2', + _0: A5(func, a, b, c, d, e), + _1: seed5 + }; + }); + }); +var _elm_lang$core$Random$andThen = F2( + function (callback, _p56) { + var _p57 = _p56; + return _elm_lang$core$Random$Generator( + function (seed) { + var _p58 = _p57._0(seed); + var result = _p58._0; + var newSeed = _p58._1; + var _p59 = callback(result); + var genB = _p59._0; + return genB(newSeed); + }); + }); +var _elm_lang$core$Random$State = F2( + function (a, b) { + return {ctor: 'State', _0: a, _1: b}; + }); +var _elm_lang$core$Random$initState = function (seed) { + var s = A2(_elm_lang$core$Basics$max, seed, 0 - seed); + var q = (s / (_elm_lang$core$Random$magicNum6 - 1)) | 0; + var s2 = A2(_elm_lang$core$Basics_ops['%'], q, _elm_lang$core$Random$magicNum7 - 1); + var s1 = A2(_elm_lang$core$Basics_ops['%'], s, _elm_lang$core$Random$magicNum6 - 1); + return A2(_elm_lang$core$Random$State, s1 + 1, s2 + 1); +}; +var _elm_lang$core$Random$next = function (_p60) { + var _p61 = _p60; + var _p63 = _p61._1; + var _p62 = _p61._0; + var k2 = (_p63 / _elm_lang$core$Random$magicNum3) | 0; + var rawState2 = (_elm_lang$core$Random$magicNum4 * (_p63 - (k2 * _elm_lang$core$Random$magicNum3))) - (k2 * _elm_lang$core$Random$magicNum5); + var newState2 = (_elm_lang$core$Native_Utils.cmp(rawState2, 0) < 0) ? (rawState2 + _elm_lang$core$Random$magicNum7) : rawState2; + var k1 = (_p62 / _elm_lang$core$Random$magicNum1) | 0; + var rawState1 = (_elm_lang$core$Random$magicNum0 * (_p62 - (k1 * _elm_lang$core$Random$magicNum1))) - (k1 * _elm_lang$core$Random$magicNum2); + var newState1 = (_elm_lang$core$Native_Utils.cmp(rawState1, 0) < 0) ? (rawState1 + _elm_lang$core$Random$magicNum6) : rawState1; + var z = newState1 - newState2; + var newZ = (_elm_lang$core$Native_Utils.cmp(z, 1) < 0) ? (z + _elm_lang$core$Random$magicNum8) : z; + return { + ctor: '_Tuple2', + _0: newZ, + _1: A2(_elm_lang$core$Random$State, newState1, newState2) + }; +}; +var _elm_lang$core$Random$split = function (_p64) { + var _p65 = _p64; + var _p68 = _p65._1; + var _p67 = _p65._0; + var _p66 = _elm_lang$core$Tuple$second( + _elm_lang$core$Random$next(_p65)); + var t1 = _p66._0; + var t2 = _p66._1; + var new_s2 = _elm_lang$core$Native_Utils.eq(_p68, 1) ? (_elm_lang$core$Random$magicNum7 - 1) : (_p68 - 1); + var new_s1 = _elm_lang$core$Native_Utils.eq(_p67, _elm_lang$core$Random$magicNum6 - 1) ? 1 : (_p67 + 1); + return { + ctor: '_Tuple2', + _0: A2(_elm_lang$core$Random$State, new_s1, t2), + _1: A2(_elm_lang$core$Random$State, t1, new_s2) + }; +}; +var _elm_lang$core$Random$Seed = function (a) { + return {ctor: 'Seed', _0: a}; +}; +var _elm_lang$core$Random$int = F2( + function (a, b) { + return _elm_lang$core$Random$Generator( + function (_p69) { + var _p70 = _p69; + var _p75 = _p70._0; + var base = 2147483561; + var f = F3( + function (n, acc, state) { + f: + while (true) { + var _p71 = n; + if (_p71 === 0) { + return {ctor: '_Tuple2', _0: acc, _1: state}; + } else { + var _p72 = _p75.next(state); + var x = _p72._0; + var nextState = _p72._1; + var _v27 = n - 1, + _v28 = x + (acc * base), + _v29 = nextState; + n = _v27; + acc = _v28; + state = _v29; + continue f; + } + } + }); + var _p73 = (_elm_lang$core$Native_Utils.cmp(a, b) < 0) ? {ctor: '_Tuple2', _0: a, _1: b} : {ctor: '_Tuple2', _0: b, _1: a}; + var lo = _p73._0; + var hi = _p73._1; + var k = (hi - lo) + 1; + var n = A2(_elm_lang$core$Random$iLogBase, base, k); + var _p74 = A3(f, n, 1, _p75.state); + var v = _p74._0; + var nextState = _p74._1; + return { + ctor: '_Tuple2', + _0: lo + A2(_elm_lang$core$Basics_ops['%'], v, k), + _1: _elm_lang$core$Random$Seed( + _elm_lang$core$Native_Utils.update( + _p75, + {state: nextState})) + }; + }); + }); +var _elm_lang$core$Random$bool = A2( + _elm_lang$core$Random$map, + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + })(1), + A2(_elm_lang$core$Random$int, 0, 1)); +var _elm_lang$core$Random$float = F2( + function (a, b) { + return _elm_lang$core$Random$Generator( + function (seed) { + var _p76 = A2( + _elm_lang$core$Random$step, + A2(_elm_lang$core$Random$int, _elm_lang$core$Random$minInt, _elm_lang$core$Random$maxInt), + seed); + var number = _p76._0; + var newSeed = _p76._1; + var negativeOneToOne = _elm_lang$core$Basics$toFloat(number) / _elm_lang$core$Basics$toFloat(_elm_lang$core$Random$maxInt - _elm_lang$core$Random$minInt); + var _p77 = (_elm_lang$core$Native_Utils.cmp(a, b) < 0) ? {ctor: '_Tuple2', _0: a, _1: b} : {ctor: '_Tuple2', _0: b, _1: a}; + var lo = _p77._0; + var hi = _p77._1; + var scaled = ((lo + hi) / 2) + ((hi - lo) * negativeOneToOne); + return {ctor: '_Tuple2', _0: scaled, _1: newSeed}; + }); + }); +var _elm_lang$core$Random$initialSeed = function (n) { + return _elm_lang$core$Random$Seed( + { + state: _elm_lang$core$Random$initState(n), + next: _elm_lang$core$Random$next, + split: _elm_lang$core$Random$split, + range: _elm_lang$core$Random$range + }); +}; +var _elm_lang$core$Random$init = A2( + _elm_lang$core$Task$andThen, + function (t) { + return _elm_lang$core$Task$succeed( + _elm_lang$core$Random$initialSeed( + _elm_lang$core$Basics$round(t))); + }, + _elm_lang$core$Time$now); +var _elm_lang$core$Random$Generate = function (a) { + return {ctor: 'Generate', _0: a}; +}; +var _elm_lang$core$Random$generate = F2( + function (tagger, generator) { + return _elm_lang$core$Random$command( + _elm_lang$core$Random$Generate( + A2(_elm_lang$core$Random$map, tagger, generator))); + }); +var _elm_lang$core$Random$cmdMap = F2( + function (func, _p78) { + var _p79 = _p78; + return _elm_lang$core$Random$Generate( + A2(_elm_lang$core$Random$map, func, _p79._0)); + }); +_elm_lang$core$Native_Platform.effectManagers['Random'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Random$init, onEffects: _elm_lang$core$Random$onEffects, onSelfMsg: _elm_lang$core$Random$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Random$cmdMap}; + +var _elm_community$random_extra$Random_Extra$andThen6 = F7( + function (constructor, generatorA, generatorB, generatorC, generatorD, generatorE, generatorF) { + return A2( + _elm_lang$core$Random$andThen, + function (a) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return A2( + _elm_lang$core$Random$andThen, + function (c) { + return A2( + _elm_lang$core$Random$andThen, + function (d) { + return A2( + _elm_lang$core$Random$andThen, + function (e) { + return A2( + _elm_lang$core$Random$andThen, + function (f) { + return A6(constructor, a, b, c, d, e, f); + }, + generatorF); + }, + generatorE); + }, + generatorD); + }, + generatorC); + }, + generatorB); + }, + generatorA); + }); +var _elm_community$random_extra$Random_Extra$andThen5 = F6( + function (constructor, generatorA, generatorB, generatorC, generatorD, generatorE) { + return A2( + _elm_lang$core$Random$andThen, + function (a) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return A2( + _elm_lang$core$Random$andThen, + function (c) { + return A2( + _elm_lang$core$Random$andThen, + function (d) { + return A2( + _elm_lang$core$Random$andThen, + function (e) { + return A5(constructor, a, b, c, d, e); + }, + generatorE); + }, + generatorD); + }, + generatorC); + }, + generatorB); + }, + generatorA); + }); +var _elm_community$random_extra$Random_Extra$andThen4 = F5( + function (constructor, generatorA, generatorB, generatorC, generatorD) { + return A2( + _elm_lang$core$Random$andThen, + function (a) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return A2( + _elm_lang$core$Random$andThen, + function (c) { + return A2( + _elm_lang$core$Random$andThen, + function (d) { + return A4(constructor, a, b, c, d); + }, + generatorD); + }, + generatorC); + }, + generatorB); + }, + generatorA); + }); +var _elm_community$random_extra$Random_Extra$andThen3 = F4( + function (constructor, generatorA, generatorB, generatorC) { + return A2( + _elm_lang$core$Random$andThen, + function (a) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return A2( + _elm_lang$core$Random$andThen, + function (c) { + return A3(constructor, a, b, c); + }, + generatorC); + }, + generatorB); + }, + generatorA); + }); +var _elm_community$random_extra$Random_Extra$andThen2 = F3( + function (constructor, generatorA, generatorB) { + return A2( + _elm_lang$core$Random$andThen, + function (a) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return A2(constructor, a, b); + }, + generatorB); + }, + generatorA); + }); +var _elm_community$random_extra$Random_Extra$rangeLengthList = F3( + function (minLength, maxLength, generator) { + return A2( + _elm_lang$core$Random$andThen, + function (len) { + return A2(_elm_lang$core$Random$list, len, generator); + }, + A2(_elm_lang$core$Random$int, minLength, maxLength)); + }); +var _elm_community$random_extra$Random_Extra$result = F3( + function (genBool, genErr, genVal) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return b ? A2(_elm_lang$core$Random$map, _elm_lang$core$Result$Ok, genVal) : A2(_elm_lang$core$Random$map, _elm_lang$core$Result$Err, genErr); + }, + genBool); + }); +var _elm_community$random_extra$Random_Extra$sample = function () { + var find = F2( + function (k, ys) { + find: + while (true) { + var _p0 = ys; + if (_p0.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + if (_elm_lang$core$Native_Utils.eq(k, 0)) { + return _elm_lang$core$Maybe$Just(_p0._0); + } else { + var _v1 = k - 1, + _v2 = _p0._1; + k = _v1; + ys = _v2; + continue find; + } + } + } + }); + return function (xs) { + return A2( + _elm_lang$core$Random$map, + function (i) { + return A2(find, i, xs); + }, + A2( + _elm_lang$core$Random$int, + 0, + _elm_lang$core$List$length(xs) - 1)); + }; +}(); +var _elm_community$random_extra$Random_Extra$frequency = function (pairs) { + var pick = F2( + function (choices, n) { + pick: + while (true) { + var _p1 = choices; + if ((_p1.ctor === '::') && (_p1._0.ctor === '_Tuple2')) { + var _p2 = _p1._0._0; + if (_elm_lang$core$Native_Utils.cmp(n, _p2) < 1) { + return _p1._0._1; + } else { + var _v4 = _p1._1, + _v5 = n - _p2; + choices = _v4; + n = _v5; + continue pick; + } + } else { + return _elm_lang$core$Native_Utils.crashCase( + 'Random.Extra', + { + start: {line: 154, column: 13}, + end: {line: 162, column: 79} + }, + _p1)('Empty list passed to Random.Extra.frequency!'); + } + } + }); + var total = _elm_lang$core$List$sum( + A2( + _elm_lang$core$List$map, + function (_p4) { + return _elm_lang$core$Basics$abs( + _elm_lang$core$Tuple$first(_p4)); + }, + pairs)); + return A2( + _elm_lang$core$Random$andThen, + pick(pairs), + A2(_elm_lang$core$Random$float, 0, total)); +}; +var _elm_community$random_extra$Random_Extra$choices = function (gens) { + return _elm_community$random_extra$Random_Extra$frequency( + A2( + _elm_lang$core$List$map, + function (g) { + return {ctor: '_Tuple2', _0: 1, _1: g}; + }, + gens)); +}; +var _elm_community$random_extra$Random_Extra$choice = F2( + function (x, y) { + return A2( + _elm_lang$core$Random$map, + function (b) { + return b ? x : y; + }, + _elm_lang$core$Random$bool); + }); +var _elm_community$random_extra$Random_Extra$oneIn = function (n) { + return A2( + _elm_lang$core$Random$map, + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + })(1), + A2(_elm_lang$core$Random$int, 1, n)); +}; +var _elm_community$random_extra$Random_Extra$andMap = F2( + function (generator, funcGenerator) { + return A3( + _elm_lang$core$Random$map2, + F2( + function (x, y) { + return x(y); + }), + funcGenerator, + generator); + }); +var _elm_community$random_extra$Random_Extra$map6 = F7( + function (f, generatorA, generatorB, generatorC, generatorD, generatorE, generatorF) { + return A2( + _elm_community$random_extra$Random_Extra$andMap, + generatorF, + A6(_elm_lang$core$Random$map5, f, generatorA, generatorB, generatorC, generatorD, generatorE)); + }); +var _elm_community$random_extra$Random_Extra$constant = function (value) { + return A2( + _elm_lang$core$Random$map, + function (_p5) { + return value; + }, + _elm_lang$core$Random$bool); +}; +var _elm_community$random_extra$Random_Extra$filter = F2( + function (predicate, generator) { + return A2( + _elm_lang$core$Random$andThen, + function (a) { + return predicate(a) ? _elm_community$random_extra$Random_Extra$constant(a) : A2(_elm_community$random_extra$Random_Extra$filter, predicate, generator); + }, + generator); + }); +var _elm_community$random_extra$Random_Extra$combine = function (generators) { + var _p6 = generators; + if (_p6.ctor === '[]') { + return _elm_community$random_extra$Random_Extra$constant( + {ctor: '[]'}); + } else { + return A3( + _elm_lang$core$Random$map2, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + }), + _p6._0, + _elm_community$random_extra$Random_Extra$combine(_p6._1)); + } +}; +var _elm_community$random_extra$Random_Extra$maybe = F2( + function (genBool, genA) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return b ? A2(_elm_lang$core$Random$map, _elm_lang$core$Maybe$Just, genA) : _elm_community$random_extra$Random_Extra$constant(_elm_lang$core$Maybe$Nothing); + }, + genBool); + }); + +var _elm_community$random_extra$Random_List$get = F2( + function (index, list) { + return _elm_lang$core$List$head( + A2(_elm_lang$core$List$drop, index, list)); + }); +var _elm_community$random_extra$Random_List$choose = function (list) { + if (_elm_lang$core$List$isEmpty(list)) { + return _elm_community$random_extra$Random_Extra$constant( + {ctor: '_Tuple2', _0: _elm_lang$core$Maybe$Nothing, _1: list}); + } else { + var back = function (i) { + return A2(_elm_lang$core$List$drop, i + 1, list); + }; + var front = function (i) { + return A2(_elm_lang$core$List$take, i, list); + }; + var lastIndex = _elm_lang$core$List$length(list) - 1; + var gen = A2(_elm_lang$core$Random$int, 0, lastIndex); + return A2( + _elm_lang$core$Random$map, + function (index) { + return { + ctor: '_Tuple2', + _0: A2(_elm_community$random_extra$Random_List$get, index, list), + _1: A2( + _elm_lang$core$List$append, + front(index), + back(index)) + }; + }, + gen); + } +}; +var _elm_community$random_extra$Random_List$shuffle = function (list) { + if (_elm_lang$core$List$isEmpty(list)) { + return _elm_community$random_extra$Random_Extra$constant(list); + } else { + var helper = function (_p0) { + var _p1 = _p0; + var _p6 = _p1._0; + return A2( + _elm_lang$core$Random$andThen, + function (_p2) { + var _p3 = _p2; + var _p5 = _p3._1; + var _p4 = _p3._0; + if (_p4.ctor === 'Nothing') { + return _elm_community$random_extra$Random_Extra$constant( + {ctor: '_Tuple2', _0: _p6, _1: _p5}); + } else { + return helper( + { + ctor: '_Tuple2', + _0: {ctor: '::', _0: _p4._0, _1: _p6}, + _1: _p5 + }); + } + }, + _elm_community$random_extra$Random_List$choose(_p1._1)); + }; + return A2( + _elm_lang$core$Random$map, + _elm_lang$core$Tuple$first, + helper( + { + ctor: '_Tuple2', + _0: {ctor: '[]'}, + _1: list + })); + } +}; + +//import Maybe, Native.List // + +var _elm_lang$core$Native_Regex = function() { + +function escape(str) +{ + return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); +} +function caseInsensitive(re) +{ + return new RegExp(re.source, 'gi'); +} +function regex(raw) +{ + return new RegExp(raw, 'g'); +} + +function contains(re, string) +{ + return string.match(re) !== null; +} + +function find(n, re, str) +{ + n = n.ctor === 'All' ? Infinity : n._0; + var out = []; + var number = 0; + var string = str; + var lastIndex = re.lastIndex; + var prevLastIndex = -1; + var result; + while (number++ < n && (result = re.exec(string))) + { + if (prevLastIndex === re.lastIndex) break; + var i = result.length - 1; + var subs = new Array(i); + while (i > 0) + { + var submatch = result[i]; + subs[--i] = submatch === undefined + ? _elm_lang$core$Maybe$Nothing + : _elm_lang$core$Maybe$Just(submatch); + } + out.push({ + match: result[0], + submatches: _elm_lang$core$Native_List.fromArray(subs), + index: result.index, + number: number + }); + prevLastIndex = re.lastIndex; + } + re.lastIndex = lastIndex; + return _elm_lang$core$Native_List.fromArray(out); +} + +function replace(n, re, replacer, string) +{ + n = n.ctor === 'All' ? Infinity : n._0; + var count = 0; + function jsReplacer(match) + { + if (count++ >= n) + { + return match; + } + var i = arguments.length - 3; + var submatches = new Array(i); + while (i > 0) + { + var submatch = arguments[i]; + submatches[--i] = submatch === undefined + ? _elm_lang$core$Maybe$Nothing + : _elm_lang$core$Maybe$Just(submatch); + } + return replacer({ + match: match, + submatches: _elm_lang$core$Native_List.fromArray(submatches), + index: arguments[arguments.length - 2], + number: count + }); + } + return string.replace(re, jsReplacer); +} + +function split(n, re, str) +{ + n = n.ctor === 'All' ? Infinity : n._0; + if (n === Infinity) + { + return _elm_lang$core$Native_List.fromArray(str.split(re)); + } + var string = str; + var result; + var out = []; + var start = re.lastIndex; + var restoreLastIndex = re.lastIndex; + while (n--) + { + if (!(result = re.exec(string))) break; + out.push(string.slice(start, result.index)); + start = re.lastIndex; + } + out.push(string.slice(start)); + re.lastIndex = restoreLastIndex; + return _elm_lang$core$Native_List.fromArray(out); +} + +return { + regex: regex, + caseInsensitive: caseInsensitive, + escape: escape, + + contains: F2(contains), + find: F3(find), + replace: F4(replace), + split: F3(split) +}; + +}(); + +var _elm_lang$core$Regex$split = _elm_lang$core$Native_Regex.split; +var _elm_lang$core$Regex$replace = _elm_lang$core$Native_Regex.replace; +var _elm_lang$core$Regex$find = _elm_lang$core$Native_Regex.find; +var _elm_lang$core$Regex$contains = _elm_lang$core$Native_Regex.contains; +var _elm_lang$core$Regex$caseInsensitive = _elm_lang$core$Native_Regex.caseInsensitive; +var _elm_lang$core$Regex$regex = _elm_lang$core$Native_Regex.regex; +var _elm_lang$core$Regex$escape = _elm_lang$core$Native_Regex.escape; +var _elm_lang$core$Regex$Match = F4( + function (a, b, c, d) { + return {match: a, submatches: b, index: c, number: d}; + }); +var _elm_lang$core$Regex$Regex = {ctor: 'Regex'}; +var _elm_lang$core$Regex$AtMost = function (a) { + return {ctor: 'AtMost', _0: a}; +}; +var _elm_lang$core$Regex$All = {ctor: 'All'}; + +var _elm_lang$core$Native_Bitwise = function() { + +return { + and: F2(function and(a, b) { return a & b; }), + or: F2(function or(a, b) { return a | b; }), + xor: F2(function xor(a, b) { return a ^ b; }), + complement: function complement(a) { return ~a; }, + shiftLeftBy: F2(function(offset, a) { return a << offset; }), + shiftRightBy: F2(function(offset, a) { return a >> offset; }), + shiftRightZfBy: F2(function(offset, a) { return a >>> offset; }) +}; + +}(); + +var _elm_lang$core$Bitwise$shiftRightZfBy = _elm_lang$core$Native_Bitwise.shiftRightZfBy; +var _elm_lang$core$Bitwise$shiftRightBy = _elm_lang$core$Native_Bitwise.shiftRightBy; +var _elm_lang$core$Bitwise$shiftLeftBy = _elm_lang$core$Native_Bitwise.shiftLeftBy; +var _elm_lang$core$Bitwise$complement = _elm_lang$core$Native_Bitwise.complement; +var _elm_lang$core$Bitwise$xor = _elm_lang$core$Native_Bitwise.xor; +var _elm_lang$core$Bitwise$or = _elm_lang$core$Native_Bitwise.or; +var _elm_lang$core$Bitwise$and = _elm_lang$core$Native_Bitwise.and; + +var _elm_community$string_extra$String_Extra$nonEmpty = function (string) { + return _elm_lang$core$String$isEmpty(string) ? _elm_lang$core$Maybe$Nothing : _elm_lang$core$Maybe$Just(string); +}; +var _elm_community$string_extra$String_Extra$replacementCodePoint = 65533; +var _elm_community$string_extra$String_Extra$toCodePoints = function (string) { + var allCodeUnits = A2( + _elm_lang$core$List$map, + _elm_lang$core$Char$toCode, + _elm_lang$core$String$toList(string)); + var combineAndReverse = F2( + function (codeUnits, accumulated) { + combineAndReverse: + while (true) { + var _p0 = codeUnits; + if (_p0.ctor === '[]') { + return accumulated; + } else { + var _p4 = _p0._0; + var _p3 = _p0._1; + if ((_elm_lang$core$Native_Utils.cmp(_p4, 0) > -1) && (_elm_lang$core$Native_Utils.cmp(_p4, 55295) < 1)) { + var _v1 = _p3, + _v2 = {ctor: '::', _0: _p4, _1: accumulated}; + codeUnits = _v1; + accumulated = _v2; + continue combineAndReverse; + } else { + if ((_elm_lang$core$Native_Utils.cmp(_p4, 55296) > -1) && (_elm_lang$core$Native_Utils.cmp(_p4, 56319) < 1)) { + var _p1 = _p3; + if (_p1.ctor === '[]') { + return {ctor: '::', _0: _elm_community$string_extra$String_Extra$replacementCodePoint, _1: accumulated}; + } else { + var _p2 = _p1._0; + if ((_elm_lang$core$Native_Utils.cmp(_p2, 56320) > -1) && (_elm_lang$core$Native_Utils.cmp(_p2, 57343) < 1)) { + var codePoint = (65536 + ((_p4 - 55296) * 1024)) + (_p2 - 56320); + var _v4 = _p1._1, + _v5 = {ctor: '::', _0: codePoint, _1: accumulated}; + codeUnits = _v4; + accumulated = _v5; + continue combineAndReverse; + } else { + var _v6 = _p3, + _v7 = {ctor: '::', _0: _elm_community$string_extra$String_Extra$replacementCodePoint, _1: accumulated}; + codeUnits = _v6; + accumulated = _v7; + continue combineAndReverse; + } + } + } else { + if ((_elm_lang$core$Native_Utils.cmp(_p4, 57344) > -1) && (_elm_lang$core$Native_Utils.cmp(_p4, 65535) < 1)) { + var _v8 = _p3, + _v9 = {ctor: '::', _0: _p4, _1: accumulated}; + codeUnits = _v8; + accumulated = _v9; + continue combineAndReverse; + } else { + var _v10 = _p3, + _v11 = {ctor: '::', _0: _elm_community$string_extra$String_Extra$replacementCodePoint, _1: accumulated}; + codeUnits = _v10; + accumulated = _v11; + continue combineAndReverse; + } + } + } + } + } + }); + return _elm_lang$core$List$reverse( + A2( + combineAndReverse, + allCodeUnits, + {ctor: '[]'})); +}; +var _elm_community$string_extra$String_Extra$fromCodePoints = function (allCodePoints) { + var splitAndReverse = F2( + function (codePoints, accumulated) { + splitAndReverse: + while (true) { + var _p5 = codePoints; + if (_p5.ctor === '[]') { + return accumulated; + } else { + var _p7 = _p5._1; + var _p6 = _p5._0; + if ((_elm_lang$core$Native_Utils.cmp(_p6, 0) > -1) && (_elm_lang$core$Native_Utils.cmp(_p6, 55295) < 1)) { + var _v13 = _p7, + _v14 = {ctor: '::', _0: _p6, _1: accumulated}; + codePoints = _v13; + accumulated = _v14; + continue splitAndReverse; + } else { + if ((_elm_lang$core$Native_Utils.cmp(_p6, 65536) > -1) && (_elm_lang$core$Native_Utils.cmp(_p6, 1114111) < 1)) { + var subtracted = _p6 - 65536; + var leading = (subtracted >> 10) + 55296; + var trailing = (subtracted & 1023) + 56320; + var _v15 = _p7, + _v16 = { + ctor: '::', + _0: trailing, + _1: {ctor: '::', _0: leading, _1: accumulated} + }; + codePoints = _v15; + accumulated = _v16; + continue splitAndReverse; + } else { + if ((_elm_lang$core$Native_Utils.cmp(_p6, 57344) > -1) && (_elm_lang$core$Native_Utils.cmp(_p6, 65535) < 1)) { + var _v17 = _p7, + _v18 = {ctor: '::', _0: _p6, _1: accumulated}; + codePoints = _v17; + accumulated = _v18; + continue splitAndReverse; + } else { + var _v19 = _p7, + _v20 = {ctor: '::', _0: _elm_community$string_extra$String_Extra$replacementCodePoint, _1: accumulated}; + codePoints = _v19; + accumulated = _v20; + continue splitAndReverse; + } + } + } + } + } + }); + var allCodeUnits = _elm_lang$core$List$reverse( + A2( + splitAndReverse, + allCodePoints, + {ctor: '[]'})); + return _elm_lang$core$String$fromList( + A2(_elm_lang$core$List$map, _elm_lang$core$Char$fromCode, allCodeUnits)); +}; +var _elm_community$string_extra$String_Extra$fromFloat = _elm_lang$core$Basics$toString; +var _elm_community$string_extra$String_Extra$fromInt = _elm_lang$core$Basics$toString; +var _elm_community$string_extra$String_Extra$leftOfBack = F2( + function (pattern, string) { + return A2( + _elm_lang$core$Maybe$withDefault, + '', + A2( + _elm_lang$core$Maybe$map, + A2(_elm_lang$core$Basics$flip, _elm_lang$core$String$left, string), + _elm_lang$core$List$head( + _elm_lang$core$List$reverse( + A2(_elm_lang$core$String$indexes, pattern, string))))); + }); +var _elm_community$string_extra$String_Extra$rightOfBack = F2( + function (pattern, string) { + return A2( + _elm_lang$core$Maybe$withDefault, + '', + A2( + _elm_lang$core$Maybe$map, + function (_p8) { + return A3( + _elm_lang$core$Basics$flip, + _elm_lang$core$String$dropLeft, + string, + A2( + F2( + function (x, y) { + return x + y; + }), + _elm_lang$core$String$length(pattern), + _p8)); + }, + _elm_lang$core$List$head( + _elm_lang$core$List$reverse( + A2(_elm_lang$core$String$indexes, pattern, string))))); + }); +var _elm_community$string_extra$String_Extra$firstResultHelp = F2( + function ($default, list) { + firstResultHelp: + while (true) { + var _p9 = list; + if (_p9.ctor === '[]') { + return $default; + } else { + if (_p9._0.ctor === 'Just') { + return _p9._0._0; + } else { + var _v22 = $default, + _v23 = _p9._1; + $default = _v22; + list = _v23; + continue firstResultHelp; + } + } + } + }); +var _elm_community$string_extra$String_Extra$firstResult = function (list) { + return A2(_elm_community$string_extra$String_Extra$firstResultHelp, '', list); +}; +var _elm_community$string_extra$String_Extra$leftOf = F2( + function (pattern, string) { + return A2( + _elm_lang$core$String$join, + '', + A2( + _elm_lang$core$List$map, + function (_p10) { + return _elm_community$string_extra$String_Extra$firstResult( + function (_) { + return _.submatches; + }(_p10)); + }, + A3( + _elm_lang$core$Regex$find, + _elm_lang$core$Regex$AtMost(1), + _elm_lang$core$Regex$regex( + A2( + _elm_lang$core$Basics_ops['++'], + '^(.*?)', + _elm_lang$core$Regex$escape(pattern))), + string))); + }); +var _elm_community$string_extra$String_Extra$rightOf = F2( + function (pattern, string) { + return A2( + _elm_lang$core$String$join, + '', + A2( + _elm_lang$core$List$map, + function (_p11) { + return _elm_community$string_extra$String_Extra$firstResult( + function (_) { + return _.submatches; + }(_p11)); + }, + A3( + _elm_lang$core$Regex$find, + _elm_lang$core$Regex$AtMost(1), + _elm_lang$core$Regex$regex( + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Regex$escape(pattern), + '(.*)$')), + string))); + }); +var _elm_community$string_extra$String_Extra$pluralize = F3( + function (singular, plural, count) { + return _elm_lang$core$Native_Utils.eq(count, 1) ? A2(_elm_lang$core$Basics_ops['++'], '1 ', singular) : A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(count), + A2(_elm_lang$core$Basics_ops['++'], ' ', plural)); + }); +var _elm_community$string_extra$String_Extra$stripTags = function (string) { + return A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('<\\/?[^>]+>'), + _elm_lang$core$Basics$always(''), + string); +}; +var _elm_community$string_extra$String_Extra$toSentenceHelper = F3( + function (lastPart, sentence, list) { + toSentenceHelper: + while (true) { + var _p12 = list; + if (_p12.ctor === '[]') { + return sentence; + } else { + if (_p12._1.ctor === '[]') { + return A2( + _elm_lang$core$Basics_ops['++'], + sentence, + A2(_elm_lang$core$Basics_ops['++'], lastPart, _p12._0)); + } else { + var _v25 = lastPart, + _v26 = A2( + _elm_lang$core$Basics_ops['++'], + sentence, + A2(_elm_lang$core$Basics_ops['++'], ', ', _p12._0)), + _v27 = _p12._1; + lastPart = _v25; + sentence = _v26; + list = _v27; + continue toSentenceHelper; + } + } + } + }); +var _elm_community$string_extra$String_Extra$toSentenceBaseCase = function (list) { + var _p13 = list; + _v28_2: + do { + if (_p13.ctor === '::') { + if (_p13._1.ctor === '[]') { + return _p13._0; + } else { + if (_p13._1._1.ctor === '[]') { + return A2( + _elm_lang$core$Basics_ops['++'], + _p13._0, + A2(_elm_lang$core$Basics_ops['++'], ' and ', _p13._1._0)); + } else { + break _v28_2; + } + } + } else { + break _v28_2; + } + } while(false); + return ''; +}; +var _elm_community$string_extra$String_Extra$toSentenceOxford = function (list) { + var _p14 = list; + if (((_p14.ctor === '::') && (_p14._1.ctor === '::')) && (_p14._1._1.ctor === '::')) { + return A3( + _elm_community$string_extra$String_Extra$toSentenceHelper, + ', and ', + A2( + _elm_lang$core$Basics_ops['++'], + _p14._0, + A2(_elm_lang$core$Basics_ops['++'], ', ', _p14._1._0)), + {ctor: '::', _0: _p14._1._1._0, _1: _p14._1._1._1}); + } else { + return _elm_community$string_extra$String_Extra$toSentenceBaseCase(list); + } +}; +var _elm_community$string_extra$String_Extra$toSentence = function (list) { + var _p15 = list; + if (((_p15.ctor === '::') && (_p15._1.ctor === '::')) && (_p15._1._1.ctor === '::')) { + return A3( + _elm_community$string_extra$String_Extra$toSentenceHelper, + ' and ', + A2( + _elm_lang$core$Basics_ops['++'], + _p15._0, + A2(_elm_lang$core$Basics_ops['++'], ', ', _p15._1._0)), + {ctor: '::', _0: _p15._1._1._0, _1: _p15._1._1._1}); + } else { + return _elm_community$string_extra$String_Extra$toSentenceBaseCase(list); + } +}; +var _elm_community$string_extra$String_Extra$ellipsisWith = F3( + function (howLong, append, string) { + return (_elm_lang$core$Native_Utils.cmp( + _elm_lang$core$String$length(string), + howLong) < 1) ? string : A2( + _elm_lang$core$Basics_ops['++'], + A2( + _elm_lang$core$String$left, + howLong - _elm_lang$core$String$length(append), + string), + append); + }); +var _elm_community$string_extra$String_Extra$ellipsis = F2( + function (howLong, string) { + return A3(_elm_community$string_extra$String_Extra$ellipsisWith, howLong, '...', string); + }); +var _elm_community$string_extra$String_Extra$countOccurrences = F2( + function (needle, haystack) { + return (_elm_lang$core$Native_Utils.eq( + _elm_lang$core$String$length(needle), + 0) || _elm_lang$core$Native_Utils.eq( + _elm_lang$core$String$length(haystack), + 0)) ? 0 : _elm_lang$core$List$length( + A2(_elm_lang$core$String$indexes, needle, haystack)); + }); +var _elm_community$string_extra$String_Extra$unindent = function (multilineSting) { + var isNotWhitespace = function ($char) { + return (!_elm_lang$core$Native_Utils.eq( + $char, + _elm_lang$core$Native_Utils.chr(' '))) && (!_elm_lang$core$Native_Utils.eq( + $char, + _elm_lang$core$Native_Utils.chr('\t'))); + }; + var countLeadingWhitespace = F2( + function (count, line) { + countLeadingWhitespace: + while (true) { + var _p16 = _elm_lang$core$String$uncons(line); + if (_p16.ctor === 'Nothing') { + return count; + } else { + var _p18 = _p16._0._1; + var _p17 = _p16._0._0; + switch (_p17.valueOf()) { + case ' ': + var _v33 = count + 1, + _v34 = _p18; + count = _v33; + line = _v34; + continue countLeadingWhitespace; + case '\t': + var _v35 = count + 1, + _v36 = _p18; + count = _v35; + line = _v36; + continue countLeadingWhitespace; + default: + return count; + } + } + } + }); + var lines = _elm_lang$core$String$lines(multilineSting); + var minLead = A2( + _elm_lang$core$Maybe$withDefault, + 0, + _elm_lang$core$List$minimum( + A2( + _elm_lang$core$List$map, + countLeadingWhitespace(0), + A2( + _elm_lang$core$List$filter, + _elm_lang$core$String$any(isNotWhitespace), + lines)))); + return A2( + _elm_lang$core$String$join, + '\n', + A2( + _elm_lang$core$List$map, + _elm_lang$core$String$dropLeft(minLead), + lines)); +}; +var _elm_community$string_extra$String_Extra$dasherize = function (string) { + return _elm_lang$core$String$toLower( + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('[_-\\s]+'), + _elm_lang$core$Basics$always('-'), + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('([A-Z])'), + function (_p19) { + return A2( + _elm_lang$core$String$append, + '-', + function (_) { + return _.match; + }(_p19)); + }, + _elm_lang$core$String$trim(string)))); +}; +var _elm_community$string_extra$String_Extra$underscored = function (string) { + return _elm_lang$core$String$toLower( + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('[_-\\s]+'), + _elm_lang$core$Basics$always('_'), + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('([a-z\\d])([A-Z]+)'), + function (_p20) { + return A2( + _elm_lang$core$String$join, + '_', + A2( + _elm_lang$core$List$filterMap, + _elm_lang$core$Basics$identity, + function (_) { + return _.submatches; + }(_p20))); + }, + _elm_lang$core$String$trim(string)))); +}; +var _elm_community$string_extra$String_Extra$unsurround = F2( + function (wrap, string) { + if (A2(_elm_lang$core$String$startsWith, wrap, string) && A2(_elm_lang$core$String$endsWith, wrap, string)) { + var length = _elm_lang$core$String$length(wrap); + return A2( + _elm_lang$core$String$dropRight, + length, + A2(_elm_lang$core$String$dropLeft, length, string)); + } else { + return string; + } + }); +var _elm_community$string_extra$String_Extra$unquote = function (string) { + return A2(_elm_community$string_extra$String_Extra$unsurround, '\"', string); +}; +var _elm_community$string_extra$String_Extra$surround = F2( + function (wrap, string) { + return A2( + _elm_lang$core$Basics_ops['++'], + wrap, + A2(_elm_lang$core$Basics_ops['++'], string, wrap)); + }); +var _elm_community$string_extra$String_Extra$quote = function (string) { + return A2(_elm_community$string_extra$String_Extra$surround, '\"', string); +}; +var _elm_community$string_extra$String_Extra$camelize = function (string) { + return A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('[-_\\s]+(.)?'), + function (_p21) { + var _p22 = _p21; + var _p23 = _p22.submatches; + if ((_p23.ctor === '::') && (_p23._0.ctor === 'Just')) { + return _elm_lang$core$String$toUpper(_p23._0._0); + } else { + return ''; + } + }, + _elm_lang$core$String$trim(string)); +}; +var _elm_community$string_extra$String_Extra$isBlank = function (string) { + return A2( + _elm_lang$core$Regex$contains, + _elm_lang$core$Regex$regex('^\\s*$'), + string); +}; +var _elm_community$string_extra$String_Extra$clean = function (string) { + return _elm_lang$core$String$trim( + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('\\s\\s+'), + _elm_lang$core$Basics$always(' '), + string)); +}; +var _elm_community$string_extra$String_Extra$softBreakRegexp = function (width) { + return _elm_lang$core$Regex$regex( + A2( + _elm_lang$core$Basics_ops['++'], + '.{1,', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(width), + '}(\\s+|$)|\\S+?(\\s+|$)'))); +}; +var _elm_community$string_extra$String_Extra$softEllipsis = F2( + function (howLong, string) { + return (_elm_lang$core$Native_Utils.cmp( + _elm_lang$core$String$length(string), + howLong) < 1) ? string : A3( + _elm_lang$core$Basics$flip, + _elm_lang$core$String$append, + '...', + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('([\\.,;:\\s])+$'), + _elm_lang$core$Basics$always(''), + A2( + _elm_lang$core$String$join, + '', + A2( + _elm_lang$core$List$map, + function (_) { + return _.match; + }, + A3( + _elm_lang$core$Regex$find, + _elm_lang$core$Regex$AtMost(1), + _elm_community$string_extra$String_Extra$softBreakRegexp(howLong), + string))))); + }); +var _elm_community$string_extra$String_Extra$softBreak = F2( + function (width, string) { + return (_elm_lang$core$Native_Utils.cmp(width, 0) < 1) ? {ctor: '[]'} : A2( + _elm_lang$core$List$map, + function (_) { + return _.match; + }, + A3( + _elm_lang$core$Regex$find, + _elm_lang$core$Regex$All, + _elm_community$string_extra$String_Extra$softBreakRegexp(width), + string)); + }); +var _elm_community$string_extra$String_Extra$softWrapWith = F3( + function (width, separator, string) { + return A2( + _elm_lang$core$String$join, + separator, + A2(_elm_community$string_extra$String_Extra$softBreak, width, string)); + }); +var _elm_community$string_extra$String_Extra$softWrap = F2( + function (width, string) { + return A3(_elm_community$string_extra$String_Extra$softWrapWith, width, '\n', string); + }); +var _elm_community$string_extra$String_Extra$breaker = F3( + function (width, string, acc) { + breaker: + while (true) { + var _p24 = string; + if (_p24 === '') { + return _elm_lang$core$List$reverse(acc); + } else { + var _v40 = width, + _v41 = A2(_elm_lang$core$String$dropLeft, width, string), + _v42 = { + ctor: '::', + _0: A3(_elm_lang$core$String$slice, 0, width, string), + _1: acc + }; + width = _v40; + string = _v41; + acc = _v42; + continue breaker; + } + } + }); +var _elm_community$string_extra$String_Extra$break = F2( + function (width, string) { + return (_elm_lang$core$Native_Utils.eq(width, 0) || _elm_lang$core$Native_Utils.eq(string, '')) ? { + ctor: '::', + _0: string, + _1: {ctor: '[]'} + } : A3( + _elm_community$string_extra$String_Extra$breaker, + width, + string, + {ctor: '[]'}); + }); +var _elm_community$string_extra$String_Extra$wrapWith = F3( + function (width, separator, string) { + return A2( + _elm_lang$core$String$join, + separator, + A2(_elm_community$string_extra$String_Extra$break, width, string)); + }); +var _elm_community$string_extra$String_Extra$wrap = F2( + function (width, string) { + return A3(_elm_community$string_extra$String_Extra$wrapWith, width, '\n', string); + }); +var _elm_community$string_extra$String_Extra$replaceSlice = F4( + function (substitution, start, end, string) { + return A2( + _elm_lang$core$Basics_ops['++'], + A3(_elm_lang$core$String$slice, 0, start, string), + A2( + _elm_lang$core$Basics_ops['++'], + substitution, + A3( + _elm_lang$core$String$slice, + end, + _elm_lang$core$String$length(string), + string))); + }); +var _elm_community$string_extra$String_Extra$insertAt = F3( + function (insert, pos, string) { + return A4(_elm_community$string_extra$String_Extra$replaceSlice, insert, pos, pos, string); + }); +var _elm_community$string_extra$String_Extra$replace = F3( + function (search, substitution, string) { + return A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex( + _elm_lang$core$Regex$escape(search)), + function (_p25) { + return substitution; + }, + string); + }); +var _elm_community$string_extra$String_Extra$changeCase = F2( + function (mutator, word) { + return A2( + _elm_lang$core$Maybe$withDefault, + '', + A2( + _elm_lang$core$Maybe$map, + function (_p26) { + var _p27 = _p26; + return A2( + _elm_lang$core$String$cons, + mutator(_p27._0), + _p27._1); + }, + _elm_lang$core$String$uncons(word))); + }); +var _elm_community$string_extra$String_Extra$toSentenceCase = function (word) { + return A2(_elm_community$string_extra$String_Extra$changeCase, _elm_lang$core$Char$toUpper, word); +}; +var _elm_community$string_extra$String_Extra$toTitleCase = function (ws) { + var uppercaseMatch = A3( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('\\w+'), + function (_p28) { + return _elm_community$string_extra$String_Extra$toSentenceCase( + function (_) { + return _.match; + }(_p28)); + }); + return A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('^([a-z])|\\s+([a-z])'), + function (_p29) { + return uppercaseMatch( + function (_) { + return _.match; + }(_p29)); + }, + ws); +}; +var _elm_community$string_extra$String_Extra$classify = function (string) { + return _elm_community$string_extra$String_Extra$toSentenceCase( + A3( + _elm_community$string_extra$String_Extra$replace, + ' ', + '', + _elm_community$string_extra$String_Extra$camelize( + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('[\\W_]'), + _elm_lang$core$Basics$always(' '), + string)))); +}; +var _elm_community$string_extra$String_Extra$humanize = function (string) { + return _elm_community$string_extra$String_Extra$toSentenceCase( + _elm_lang$core$String$toLower( + _elm_lang$core$String$trim( + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('_id$|[-_\\s]+'), + _elm_lang$core$Basics$always(' '), + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('[A-Z]'), + function (_p30) { + return A2( + _elm_lang$core$String$append, + '-', + function (_) { + return _.match; + }(_p30)); + }, + string))))); +}; +var _elm_community$string_extra$String_Extra$decapitalize = function (word) { + return A2(_elm_community$string_extra$String_Extra$changeCase, _elm_lang$core$Char$toLower, word); +}; + +var _elm_lang$animation_frame$Native_AnimationFrame = function() +{ + +function create() +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + var id = requestAnimationFrame(function() { + callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); + }); + + return function() { + cancelAnimationFrame(id); + }; + }); +} + +return { + create: create +}; + +}(); + +var _elm_lang$core$Process$kill = _elm_lang$core$Native_Scheduler.kill; +var _elm_lang$core$Process$sleep = _elm_lang$core$Native_Scheduler.sleep; +var _elm_lang$core$Process$spawn = _elm_lang$core$Native_Scheduler.spawn; + +var _elm_lang$animation_frame$AnimationFrame$rAF = _elm_lang$animation_frame$Native_AnimationFrame.create( + {ctor: '_Tuple0'}); +var _elm_lang$animation_frame$AnimationFrame$subscription = _elm_lang$core$Native_Platform.leaf('AnimationFrame'); +var _elm_lang$animation_frame$AnimationFrame$State = F3( + function (a, b, c) { + return {subs: a, request: b, oldTime: c}; + }); +var _elm_lang$animation_frame$AnimationFrame$init = _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + {ctor: '[]'}, + _elm_lang$core$Maybe$Nothing, + 0)); +var _elm_lang$animation_frame$AnimationFrame$onEffects = F3( + function (router, subs, _p0) { + var _p1 = _p0; + var _p5 = _p1.request; + var _p4 = _p1.oldTime; + var _p2 = {ctor: '_Tuple2', _0: _p5, _1: subs}; + if (_p2._0.ctor === 'Nothing') { + if (_p2._1.ctor === '[]') { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + {ctor: '[]'}, + _elm_lang$core$Maybe$Nothing, + _p4)); + } else { + return A2( + _elm_lang$core$Task$andThen, + function (pid) { + return A2( + _elm_lang$core$Task$andThen, + function (time) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + subs, + _elm_lang$core$Maybe$Just(pid), + time)); + }, + _elm_lang$core$Time$now); + }, + _elm_lang$core$Process$spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToSelf(router), + _elm_lang$animation_frame$AnimationFrame$rAF))); + } + } else { + if (_p2._1.ctor === '[]') { + return A2( + _elm_lang$core$Task$andThen, + function (_p3) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + {ctor: '[]'}, + _elm_lang$core$Maybe$Nothing, + _p4)); + }, + _elm_lang$core$Process$kill(_p2._0._0)); + } else { + return _elm_lang$core$Task$succeed( + A3(_elm_lang$animation_frame$AnimationFrame$State, subs, _p5, _p4)); + } + } + }); +var _elm_lang$animation_frame$AnimationFrame$onSelfMsg = F3( + function (router, newTime, _p6) { + var _p7 = _p6; + var _p10 = _p7.subs; + var diff = newTime - _p7.oldTime; + var send = function (sub) { + var _p8 = sub; + if (_p8.ctor === 'Time') { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + _p8._0(newTime)); + } else { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + _p8._0(diff)); + } + }; + return A2( + _elm_lang$core$Task$andThen, + function (pid) { + return A2( + _elm_lang$core$Task$andThen, + function (_p9) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + _p10, + _elm_lang$core$Maybe$Just(pid), + newTime)); + }, + _elm_lang$core$Task$sequence( + A2(_elm_lang$core$List$map, send, _p10))); + }, + _elm_lang$core$Process$spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToSelf(router), + _elm_lang$animation_frame$AnimationFrame$rAF))); + }); +var _elm_lang$animation_frame$AnimationFrame$Diff = function (a) { + return {ctor: 'Diff', _0: a}; +}; +var _elm_lang$animation_frame$AnimationFrame$diffs = function (tagger) { + return _elm_lang$animation_frame$AnimationFrame$subscription( + _elm_lang$animation_frame$AnimationFrame$Diff(tagger)); +}; +var _elm_lang$animation_frame$AnimationFrame$Time = function (a) { + return {ctor: 'Time', _0: a}; +}; +var _elm_lang$animation_frame$AnimationFrame$times = function (tagger) { + return _elm_lang$animation_frame$AnimationFrame$subscription( + _elm_lang$animation_frame$AnimationFrame$Time(tagger)); +}; +var _elm_lang$animation_frame$AnimationFrame$subMap = F2( + function (func, sub) { + var _p11 = sub; + if (_p11.ctor === 'Time') { + return _elm_lang$animation_frame$AnimationFrame$Time( + function (_p12) { + return func( + _p11._0(_p12)); + }); + } else { + return _elm_lang$animation_frame$AnimationFrame$Diff( + function (_p13) { + return func( + _p11._0(_p13)); + }); + } + }); +_elm_lang$core$Native_Platform.effectManagers['AnimationFrame'] = {pkg: 'elm-lang/animation-frame', init: _elm_lang$animation_frame$AnimationFrame$init, onEffects: _elm_lang$animation_frame$AnimationFrame$onEffects, onSelfMsg: _elm_lang$animation_frame$AnimationFrame$onSelfMsg, tag: 'sub', subMap: _elm_lang$animation_frame$AnimationFrame$subMap}; + +//import Maybe, Native.Array, Native.List, Native.Utils, Result // + +var _elm_lang$core$Native_Json = function() { + + +// CORE DECODERS + +function succeed(msg) +{ + return { + ctor: '', + tag: 'succeed', + msg: msg + }; +} + +function fail(msg) +{ + return { + ctor: '', + tag: 'fail', + msg: msg + }; +} + +function decodePrimitive(tag) +{ + return { + ctor: '', + tag: tag + }; +} + +function decodeContainer(tag, decoder) +{ + return { + ctor: '', + tag: tag, + decoder: decoder + }; +} + +function decodeNull(value) +{ + return { + ctor: '', + tag: 'null', + value: value + }; +} + +function decodeField(field, decoder) +{ + return { + ctor: '', + tag: 'field', + field: field, + decoder: decoder + }; +} + +function decodeIndex(index, decoder) +{ + return { + ctor: '', + tag: 'index', + index: index, + decoder: decoder + }; +} + +function decodeKeyValuePairs(decoder) +{ + return { + ctor: '', + tag: 'key-value', + decoder: decoder + }; +} + +function mapMany(f, decoders) +{ + return { + ctor: '', + tag: 'map-many', + func: f, + decoders: decoders + }; +} + +function andThen(callback, decoder) +{ + return { + ctor: '', + tag: 'andThen', + decoder: decoder, + callback: callback + }; +} + +function oneOf(decoders) +{ + return { + ctor: '', + tag: 'oneOf', + decoders: decoders + }; +} + + +// DECODING OBJECTS + +function map1(f, d1) +{ + return mapMany(f, [d1]); +} + +function map2(f, d1, d2) +{ + return mapMany(f, [d1, d2]); +} + +function map3(f, d1, d2, d3) +{ + return mapMany(f, [d1, d2, d3]); +} + +function map4(f, d1, d2, d3, d4) +{ + return mapMany(f, [d1, d2, d3, d4]); +} + +function map5(f, d1, d2, d3, d4, d5) +{ + return mapMany(f, [d1, d2, d3, d4, d5]); +} + +function map6(f, d1, d2, d3, d4, d5, d6) +{ + return mapMany(f, [d1, d2, d3, d4, d5, d6]); +} + +function map7(f, d1, d2, d3, d4, d5, d6, d7) +{ + return mapMany(f, [d1, d2, d3, d4, d5, d6, d7]); +} + +function map8(f, d1, d2, d3, d4, d5, d6, d7, d8) +{ + return mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]); +} + + +// DECODE HELPERS + +function ok(value) +{ + return { tag: 'ok', value: value }; +} + +function badPrimitive(type, value) +{ + return { tag: 'primitive', type: type, value: value }; +} + +function badIndex(index, nestedProblems) +{ + return { tag: 'index', index: index, rest: nestedProblems }; +} + +function badField(field, nestedProblems) +{ + return { tag: 'field', field: field, rest: nestedProblems }; +} + +function badIndex(index, nestedProblems) +{ + return { tag: 'index', index: index, rest: nestedProblems }; +} + +function badOneOf(problems) +{ + return { tag: 'oneOf', problems: problems }; +} + +function bad(msg) +{ + return { tag: 'fail', msg: msg }; +} + +function badToString(problem) +{ + var context = '_'; + while (problem) + { + switch (problem.tag) + { + case 'primitive': + return 'Expecting ' + problem.type + + (context === '_' ? '' : ' at ' + context) + + ' but instead got: ' + jsToString(problem.value); + + case 'index': + context += '[' + problem.index + ']'; + problem = problem.rest; + break; + + case 'field': + context += '.' + problem.field; + problem = problem.rest; + break; + + case 'oneOf': + var problems = problem.problems; + for (var i = 0; i < problems.length; i++) + { + problems[i] = badToString(problems[i]); + } + return 'I ran into the following problems' + + (context === '_' ? '' : ' at ' + context) + + ':\n\n' + problems.join('\n'); + + case 'fail': + return 'I ran into a `fail` decoder' + + (context === '_' ? '' : ' at ' + context) + + ': ' + problem.msg; + } + } +} + +function jsToString(value) +{ + return value === undefined + ? 'undefined' + : JSON.stringify(value); +} + + +// DECODE + +function runOnString(decoder, string) +{ + var json; + try + { + json = JSON.parse(string); + } + catch (e) + { + return _elm_lang$core$Result$Err('Given an invalid JSON: ' + e.message); + } + return run(decoder, json); +} + +function run(decoder, value) +{ + var result = runHelp(decoder, value); + return (result.tag === 'ok') + ? _elm_lang$core$Result$Ok(result.value) + : _elm_lang$core$Result$Err(badToString(result)); +} + +function runHelp(decoder, value) +{ + switch (decoder.tag) + { + case 'bool': + return (typeof value === 'boolean') + ? ok(value) + : badPrimitive('a Bool', value); + + case 'int': + if (typeof value !== 'number') { + return badPrimitive('an Int', value); + } + + if (-2147483647 < value && value < 2147483647 && (value | 0) === value) { + return ok(value); + } + + if (isFinite(value) && !(value % 1)) { + return ok(value); + } + + return badPrimitive('an Int', value); + + case 'float': + return (typeof value === 'number') + ? ok(value) + : badPrimitive('a Float', value); + + case 'string': + return (typeof value === 'string') + ? ok(value) + : (value instanceof String) + ? ok(value + '') + : badPrimitive('a String', value); + + case 'null': + return (value === null) + ? ok(decoder.value) + : badPrimitive('null', value); + + case 'value': + return ok(value); + + case 'list': + if (!(value instanceof Array)) + { + return badPrimitive('a List', value); + } + + var list = _elm_lang$core$Native_List.Nil; + for (var i = value.length; i--; ) + { + var result = runHelp(decoder.decoder, value[i]); + if (result.tag !== 'ok') + { + return badIndex(i, result) + } + list = _elm_lang$core$Native_List.Cons(result.value, list); + } + return ok(list); + + case 'array': + if (!(value instanceof Array)) + { + return badPrimitive('an Array', value); + } + + var len = value.length; + var array = new Array(len); + for (var i = len; i--; ) + { + var result = runHelp(decoder.decoder, value[i]); + if (result.tag !== 'ok') + { + return badIndex(i, result); + } + array[i] = result.value; + } + return ok(_elm_lang$core$Native_Array.fromJSArray(array)); + + case 'maybe': + var result = runHelp(decoder.decoder, value); + return (result.tag === 'ok') + ? ok(_elm_lang$core$Maybe$Just(result.value)) + : ok(_elm_lang$core$Maybe$Nothing); + + case 'field': + var field = decoder.field; + if (typeof value !== 'object' || value === null || !(field in value)) + { + return badPrimitive('an object with a field named `' + field + '`', value); + } + + var result = runHelp(decoder.decoder, value[field]); + return (result.tag === 'ok') ? result : badField(field, result); + + case 'index': + var index = decoder.index; + if (!(value instanceof Array)) + { + return badPrimitive('an array', value); + } + if (index >= value.length) + { + return badPrimitive('a longer array. Need index ' + index + ' but there are only ' + value.length + ' entries', value); + } + + var result = runHelp(decoder.decoder, value[index]); + return (result.tag === 'ok') ? result : badIndex(index, result); + + case 'key-value': + if (typeof value !== 'object' || value === null || value instanceof Array) + { + return badPrimitive('an object', value); + } + + var keyValuePairs = _elm_lang$core$Native_List.Nil; + for (var key in value) + { + var result = runHelp(decoder.decoder, value[key]); + if (result.tag !== 'ok') + { + return badField(key, result); + } + var pair = _elm_lang$core$Native_Utils.Tuple2(key, result.value); + keyValuePairs = _elm_lang$core$Native_List.Cons(pair, keyValuePairs); + } + return ok(keyValuePairs); + + case 'map-many': + var answer = decoder.func; + var decoders = decoder.decoders; + for (var i = 0; i < decoders.length; i++) + { + var result = runHelp(decoders[i], value); + if (result.tag !== 'ok') + { + return result; + } + answer = answer(result.value); + } + return ok(answer); + + case 'andThen': + var result = runHelp(decoder.decoder, value); + return (result.tag !== 'ok') + ? result + : runHelp(decoder.callback(result.value), value); + + case 'oneOf': + var errors = []; + var temp = decoder.decoders; + while (temp.ctor !== '[]') + { + var result = runHelp(temp._0, value); + + if (result.tag === 'ok') + { + return result; + } + + errors.push(result); + + temp = temp._1; + } + return badOneOf(errors); + + case 'fail': + return bad(decoder.msg); + + case 'succeed': + return ok(decoder.msg); + } +} + + +// EQUALITY + +function equality(a, b) +{ + if (a === b) + { + return true; + } + + if (a.tag !== b.tag) + { + return false; + } + + switch (a.tag) + { + case 'succeed': + case 'fail': + return a.msg === b.msg; + + case 'bool': + case 'int': + case 'float': + case 'string': + case 'value': + return true; + + case 'null': + return a.value === b.value; + + case 'list': + case 'array': + case 'maybe': + case 'key-value': + return equality(a.decoder, b.decoder); + + case 'field': + return a.field === b.field && equality(a.decoder, b.decoder); + + case 'index': + return a.index === b.index && equality(a.decoder, b.decoder); + + case 'map-many': + if (a.func !== b.func) + { + return false; + } + return listEquality(a.decoders, b.decoders); + + case 'andThen': + return a.callback === b.callback && equality(a.decoder, b.decoder); + + case 'oneOf': + return listEquality(a.decoders, b.decoders); + } +} + +function listEquality(aDecoders, bDecoders) +{ + var len = aDecoders.length; + if (len !== bDecoders.length) + { + return false; + } + for (var i = 0; i < len; i++) + { + if (!equality(aDecoders[i], bDecoders[i])) + { + return false; + } + } + return true; +} + + +// ENCODE + +function encode(indentLevel, value) +{ + return JSON.stringify(value, null, indentLevel); +} + +function identity(value) +{ + return value; +} + +function encodeObject(keyValuePairs) +{ + var obj = {}; + while (keyValuePairs.ctor !== '[]') + { + var pair = keyValuePairs._0; + obj[pair._0] = pair._1; + keyValuePairs = keyValuePairs._1; + } + return obj; +} + +return { + encode: F2(encode), + runOnString: F2(runOnString), + run: F2(run), + + decodeNull: decodeNull, + decodePrimitive: decodePrimitive, + decodeContainer: F2(decodeContainer), + + decodeField: F2(decodeField), + decodeIndex: F2(decodeIndex), + + map1: F2(map1), + map2: F3(map2), + map3: F4(map3), + map4: F5(map4), + map5: F6(map5), + map6: F7(map6), + map7: F8(map7), + map8: F9(map8), + decodeKeyValuePairs: decodeKeyValuePairs, + + andThen: F2(andThen), + fail: fail, + succeed: succeed, + oneOf: oneOf, + + identity: identity, + encodeNull: null, + encodeArray: _elm_lang$core$Native_Array.toJSArray, + encodeList: _elm_lang$core$Native_List.toArray, + encodeObject: encodeObject, + + equality: equality +}; + +}(); + +var _elm_lang$core$Json_Encode$list = _elm_lang$core$Native_Json.encodeList; +var _elm_lang$core$Json_Encode$array = _elm_lang$core$Native_Json.encodeArray; +var _elm_lang$core$Json_Encode$object = _elm_lang$core$Native_Json.encodeObject; +var _elm_lang$core$Json_Encode$null = _elm_lang$core$Native_Json.encodeNull; +var _elm_lang$core$Json_Encode$bool = _elm_lang$core$Native_Json.identity; +var _elm_lang$core$Json_Encode$float = _elm_lang$core$Native_Json.identity; +var _elm_lang$core$Json_Encode$int = _elm_lang$core$Native_Json.identity; +var _elm_lang$core$Json_Encode$string = _elm_lang$core$Native_Json.identity; +var _elm_lang$core$Json_Encode$encode = _elm_lang$core$Native_Json.encode; +var _elm_lang$core$Json_Encode$Value = {ctor: 'Value'}; + +var _elm_lang$core$Json_Decode$null = _elm_lang$core$Native_Json.decodeNull; +var _elm_lang$core$Json_Decode$value = _elm_lang$core$Native_Json.decodePrimitive('value'); +var _elm_lang$core$Json_Decode$andThen = _elm_lang$core$Native_Json.andThen; +var _elm_lang$core$Json_Decode$fail = _elm_lang$core$Native_Json.fail; +var _elm_lang$core$Json_Decode$succeed = _elm_lang$core$Native_Json.succeed; +var _elm_lang$core$Json_Decode$lazy = function (thunk) { + return A2( + _elm_lang$core$Json_Decode$andThen, + thunk, + _elm_lang$core$Json_Decode$succeed( + {ctor: '_Tuple0'})); +}; +var _elm_lang$core$Json_Decode$decodeValue = _elm_lang$core$Native_Json.run; +var _elm_lang$core$Json_Decode$decodeString = _elm_lang$core$Native_Json.runOnString; +var _elm_lang$core$Json_Decode$map8 = _elm_lang$core$Native_Json.map8; +var _elm_lang$core$Json_Decode$map7 = _elm_lang$core$Native_Json.map7; +var _elm_lang$core$Json_Decode$map6 = _elm_lang$core$Native_Json.map6; +var _elm_lang$core$Json_Decode$map5 = _elm_lang$core$Native_Json.map5; +var _elm_lang$core$Json_Decode$map4 = _elm_lang$core$Native_Json.map4; +var _elm_lang$core$Json_Decode$map3 = _elm_lang$core$Native_Json.map3; +var _elm_lang$core$Json_Decode$map2 = _elm_lang$core$Native_Json.map2; +var _elm_lang$core$Json_Decode$map = _elm_lang$core$Native_Json.map1; +var _elm_lang$core$Json_Decode$oneOf = _elm_lang$core$Native_Json.oneOf; +var _elm_lang$core$Json_Decode$maybe = function (decoder) { + return A2(_elm_lang$core$Native_Json.decodeContainer, 'maybe', decoder); +}; +var _elm_lang$core$Json_Decode$index = _elm_lang$core$Native_Json.decodeIndex; +var _elm_lang$core$Json_Decode$field = _elm_lang$core$Native_Json.decodeField; +var _elm_lang$core$Json_Decode$at = F2( + function (fields, decoder) { + return A3(_elm_lang$core$List$foldr, _elm_lang$core$Json_Decode$field, decoder, fields); + }); +var _elm_lang$core$Json_Decode$keyValuePairs = _elm_lang$core$Native_Json.decodeKeyValuePairs; +var _elm_lang$core$Json_Decode$dict = function (decoder) { + return A2( + _elm_lang$core$Json_Decode$map, + _elm_lang$core$Dict$fromList, + _elm_lang$core$Json_Decode$keyValuePairs(decoder)); +}; +var _elm_lang$core$Json_Decode$array = function (decoder) { + return A2(_elm_lang$core$Native_Json.decodeContainer, 'array', decoder); +}; +var _elm_lang$core$Json_Decode$list = function (decoder) { + return A2(_elm_lang$core$Native_Json.decodeContainer, 'list', decoder); +}; +var _elm_lang$core$Json_Decode$nullable = function (decoder) { + return _elm_lang$core$Json_Decode$oneOf( + { + ctor: '::', + _0: _elm_lang$core$Json_Decode$null(_elm_lang$core$Maybe$Nothing), + _1: { + ctor: '::', + _0: A2(_elm_lang$core$Json_Decode$map, _elm_lang$core$Maybe$Just, decoder), + _1: {ctor: '[]'} + } + }); +}; +var _elm_lang$core$Json_Decode$float = _elm_lang$core$Native_Json.decodePrimitive('float'); +var _elm_lang$core$Json_Decode$int = _elm_lang$core$Native_Json.decodePrimitive('int'); +var _elm_lang$core$Json_Decode$bool = _elm_lang$core$Native_Json.decodePrimitive('bool'); +var _elm_lang$core$Json_Decode$string = _elm_lang$core$Native_Json.decodePrimitive('string'); +var _elm_lang$core$Json_Decode$Decoder = {ctor: 'Decoder'}; + +var _elm_lang$dom$Native_Dom = function() { + +var fakeNode = { + addEventListener: function() {}, + removeEventListener: function() {} +}; + +var onDocument = on(typeof document !== 'undefined' ? document : fakeNode); +var onWindow = on(typeof window !== 'undefined' ? window : fakeNode); + +function on(node) +{ + return function(eventName, decoder, toTask) + { + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + + function performTask(event) + { + var result = A2(_elm_lang$core$Json_Decode$decodeValue, decoder, event); + if (result.ctor === 'Ok') + { + _elm_lang$core$Native_Scheduler.rawSpawn(toTask(result._0)); + } + } + + node.addEventListener(eventName, performTask); + + return function() + { + node.removeEventListener(eventName, performTask); + }; + }); + }; +} + +var rAF = typeof requestAnimationFrame !== 'undefined' + ? requestAnimationFrame + : function(callback) { callback(); }; + +function withNode(id, doStuff) +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + rAF(function() + { + var node = document.getElementById(id); + if (node === null) + { + callback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'NotFound', _0: id })); + return; + } + callback(_elm_lang$core$Native_Scheduler.succeed(doStuff(node))); + }); + }); +} + + +// FOCUS + +function focus(id) +{ + return withNode(id, function(node) { + node.focus(); + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + +function blur(id) +{ + return withNode(id, function(node) { + node.blur(); + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + + +// SCROLLING + +function getScrollTop(id) +{ + return withNode(id, function(node) { + return node.scrollTop; + }); +} + +function setScrollTop(id, desiredScrollTop) +{ + return withNode(id, function(node) { + node.scrollTop = desiredScrollTop; + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + +function toBottom(id) +{ + return withNode(id, function(node) { + node.scrollTop = node.scrollHeight; + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + +function getScrollLeft(id) +{ + return withNode(id, function(node) { + return node.scrollLeft; + }); +} + +function setScrollLeft(id, desiredScrollLeft) +{ + return withNode(id, function(node) { + node.scrollLeft = desiredScrollLeft; + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + +function toRight(id) +{ + return withNode(id, function(node) { + node.scrollLeft = node.scrollWidth; + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + + +// SIZE + +function width(options, id) +{ + return withNode(id, function(node) { + switch (options.ctor) + { + case 'Content': + return node.scrollWidth; + case 'VisibleContent': + return node.clientWidth; + case 'VisibleContentWithBorders': + return node.offsetWidth; + case 'VisibleContentWithBordersAndMargins': + var rect = node.getBoundingClientRect(); + return rect.right - rect.left; + } + }); +} + +function height(options, id) +{ + return withNode(id, function(node) { + switch (options.ctor) + { + case 'Content': + return node.scrollHeight; + case 'VisibleContent': + return node.clientHeight; + case 'VisibleContentWithBorders': + return node.offsetHeight; + case 'VisibleContentWithBordersAndMargins': + var rect = node.getBoundingClientRect(); + return rect.bottom - rect.top; + } + }); +} + +return { + onDocument: F3(onDocument), + onWindow: F3(onWindow), + + focus: focus, + blur: blur, + + getScrollTop: getScrollTop, + setScrollTop: F2(setScrollTop), + getScrollLeft: getScrollLeft, + setScrollLeft: F2(setScrollLeft), + toBottom: toBottom, + toRight: toRight, + + height: F2(height), + width: F2(width) +}; + +}(); + +var _elm_lang$dom$Dom_LowLevel$onWindow = _elm_lang$dom$Native_Dom.onWindow; +var _elm_lang$dom$Dom_LowLevel$onDocument = _elm_lang$dom$Native_Dom.onDocument; + +var _elm_lang$virtual_dom$VirtualDom_Debug$wrap; +var _elm_lang$virtual_dom$VirtualDom_Debug$wrapWithFlags; + +var _elm_lang$virtual_dom$Native_VirtualDom = function() { + +var STYLE_KEY = 'STYLE'; +var EVENT_KEY = 'EVENT'; +var ATTR_KEY = 'ATTR'; +var ATTR_NS_KEY = 'ATTR_NS'; + +var localDoc = typeof document !== 'undefined' ? document : {}; + + +//////////// VIRTUAL DOM NODES //////////// + + +function text(string) +{ + return { + type: 'text', + text: string + }; +} + + +function node(tag) +{ + return F2(function(factList, kidList) { + return nodeHelp(tag, factList, kidList); + }); +} + + +function nodeHelp(tag, factList, kidList) +{ + var organized = organizeFacts(factList); + var namespace = organized.namespace; + var facts = organized.facts; + + var children = []; + var descendantsCount = 0; + while (kidList.ctor !== '[]') + { + var kid = kidList._0; + descendantsCount += (kid.descendantsCount || 0); + children.push(kid); + kidList = kidList._1; + } + descendantsCount += children.length; + + return { + type: 'node', + tag: tag, + facts: facts, + children: children, + namespace: namespace, + descendantsCount: descendantsCount + }; +} + + +function keyedNode(tag, factList, kidList) +{ + var organized = organizeFacts(factList); + var namespace = organized.namespace; + var facts = organized.facts; + + var children = []; + var descendantsCount = 0; + while (kidList.ctor !== '[]') + { + var kid = kidList._0; + descendantsCount += (kid._1.descendantsCount || 0); + children.push(kid); + kidList = kidList._1; + } + descendantsCount += children.length; + + return { + type: 'keyed-node', + tag: tag, + facts: facts, + children: children, + namespace: namespace, + descendantsCount: descendantsCount + }; +} + + +function custom(factList, model, impl) +{ + var facts = organizeFacts(factList).facts; + + return { + type: 'custom', + facts: facts, + model: model, + impl: impl + }; +} + + +function map(tagger, node) +{ + return { + type: 'tagger', + tagger: tagger, + node: node, + descendantsCount: 1 + (node.descendantsCount || 0) + }; +} + + +function thunk(func, args, thunk) +{ + return { + type: 'thunk', + func: func, + args: args, + thunk: thunk, + node: undefined + }; +} + +function lazy(fn, a) +{ + return thunk(fn, [a], function() { + return fn(a); + }); +} + +function lazy2(fn, a, b) +{ + return thunk(fn, [a,b], function() { + return A2(fn, a, b); + }); +} + +function lazy3(fn, a, b, c) +{ + return thunk(fn, [a,b,c], function() { + return A3(fn, a, b, c); + }); +} + + + +// FACTS + + +function organizeFacts(factList) +{ + var namespace, facts = {}; + + while (factList.ctor !== '[]') + { + var entry = factList._0; + var key = entry.key; + + if (key === ATTR_KEY || key === ATTR_NS_KEY || key === EVENT_KEY) + { + var subFacts = facts[key] || {}; + subFacts[entry.realKey] = entry.value; + facts[key] = subFacts; + } + else if (key === STYLE_KEY) + { + var styles = facts[key] || {}; + var styleList = entry.value; + while (styleList.ctor !== '[]') + { + var style = styleList._0; + styles[style._0] = style._1; + styleList = styleList._1; + } + facts[key] = styles; + } + else if (key === 'namespace') + { + namespace = entry.value; + } + else if (key === 'className') + { + var classes = facts[key]; + facts[key] = typeof classes === 'undefined' + ? entry.value + : classes + ' ' + entry.value; + } + else + { + facts[key] = entry.value; + } + factList = factList._1; + } + + return { + facts: facts, + namespace: namespace + }; +} + + + +//////////// PROPERTIES AND ATTRIBUTES //////////// + + +function style(value) +{ + return { + key: STYLE_KEY, + value: value + }; +} + + +function property(key, value) +{ + return { + key: key, + value: value + }; +} + + +function attribute(key, value) +{ + return { + key: ATTR_KEY, + realKey: key, + value: value + }; +} + + +function attributeNS(namespace, key, value) +{ + return { + key: ATTR_NS_KEY, + realKey: key, + value: { + value: value, + namespace: namespace + } + }; +} + + +function on(name, options, decoder) +{ + return { + key: EVENT_KEY, + realKey: name, + value: { + options: options, + decoder: decoder + } + }; +} + + +function equalEvents(a, b) +{ + if (a.options !== b.options) + { + if (a.options.stopPropagation !== b.options.stopPropagation || a.options.preventDefault !== b.options.preventDefault) + { + return false; + } + } + return _elm_lang$core$Native_Json.equality(a.decoder, b.decoder); +} + + +function mapProperty(func, property) +{ + if (property.key !== EVENT_KEY) + { + return property; + } + return on( + property.realKey, + property.value.options, + A2(_elm_lang$core$Json_Decode$map, func, property.value.decoder) + ); +} + + +//////////// RENDER //////////// + + +function render(vNode, eventNode) +{ + switch (vNode.type) + { + case 'thunk': + if (!vNode.node) + { + vNode.node = vNode.thunk(); + } + return render(vNode.node, eventNode); + + case 'tagger': + var subNode = vNode.node; + var tagger = vNode.tagger; + + while (subNode.type === 'tagger') + { + typeof tagger !== 'object' + ? tagger = [tagger, subNode.tagger] + : tagger.push(subNode.tagger); + + subNode = subNode.node; + } + + var subEventRoot = { tagger: tagger, parent: eventNode }; + var domNode = render(subNode, subEventRoot); + domNode.elm_event_node_ref = subEventRoot; + return domNode; + + case 'text': + return localDoc.createTextNode(vNode.text); + + case 'node': + var domNode = vNode.namespace + ? localDoc.createElementNS(vNode.namespace, vNode.tag) + : localDoc.createElement(vNode.tag); + + applyFacts(domNode, eventNode, vNode.facts); + + var children = vNode.children; + + for (var i = 0; i < children.length; i++) + { + domNode.appendChild(render(children[i], eventNode)); + } + + return domNode; + + case 'keyed-node': + var domNode = vNode.namespace + ? localDoc.createElementNS(vNode.namespace, vNode.tag) + : localDoc.createElement(vNode.tag); + + applyFacts(domNode, eventNode, vNode.facts); + + var children = vNode.children; + + for (var i = 0; i < children.length; i++) + { + domNode.appendChild(render(children[i]._1, eventNode)); + } + + return domNode; + + case 'custom': + var domNode = vNode.impl.render(vNode.model); + applyFacts(domNode, eventNode, vNode.facts); + return domNode; + } +} + + + +//////////// APPLY FACTS //////////// + + +function applyFacts(domNode, eventNode, facts) +{ + for (var key in facts) + { + var value = facts[key]; + + switch (key) + { + case STYLE_KEY: + applyStyles(domNode, value); + break; + + case EVENT_KEY: + applyEvents(domNode, eventNode, value); + break; + + case ATTR_KEY: + applyAttrs(domNode, value); + break; + + case ATTR_NS_KEY: + applyAttrsNS(domNode, value); + break; + + case 'value': + if (domNode[key] !== value) + { + domNode[key] = value; + } + break; + + default: + domNode[key] = value; + break; + } + } +} + +function applyStyles(domNode, styles) +{ + var domNodeStyle = domNode.style; + + for (var key in styles) + { + domNodeStyle[key] = styles[key]; + } +} + +function applyEvents(domNode, eventNode, events) +{ + var allHandlers = domNode.elm_handlers || {}; + + for (var key in events) + { + var handler = allHandlers[key]; + var value = events[key]; + + if (typeof value === 'undefined') + { + domNode.removeEventListener(key, handler); + allHandlers[key] = undefined; + } + else if (typeof handler === 'undefined') + { + var handler = makeEventHandler(eventNode, value); + domNode.addEventListener(key, handler); + allHandlers[key] = handler; + } + else + { + handler.info = value; + } + } + + domNode.elm_handlers = allHandlers; +} + +function makeEventHandler(eventNode, info) +{ + function eventHandler(event) + { + var info = eventHandler.info; + + var value = A2(_elm_lang$core$Native_Json.run, info.decoder, event); + + if (value.ctor === 'Ok') + { + var options = info.options; + if (options.stopPropagation) + { + event.stopPropagation(); + } + if (options.preventDefault) + { + event.preventDefault(); + } + + var message = value._0; + + var currentEventNode = eventNode; + while (currentEventNode) + { + var tagger = currentEventNode.tagger; + if (typeof tagger === 'function') + { + message = tagger(message); + } + else + { + for (var i = tagger.length; i--; ) + { + message = tagger[i](message); + } + } + currentEventNode = currentEventNode.parent; + } + } + }; + + eventHandler.info = info; + + return eventHandler; +} + +function applyAttrs(domNode, attrs) +{ + for (var key in attrs) + { + var value = attrs[key]; + if (typeof value === 'undefined') + { + domNode.removeAttribute(key); + } + else + { + domNode.setAttribute(key, value); + } + } +} + +function applyAttrsNS(domNode, nsAttrs) +{ + for (var key in nsAttrs) + { + var pair = nsAttrs[key]; + var namespace = pair.namespace; + var value = pair.value; + + if (typeof value === 'undefined') + { + domNode.removeAttributeNS(namespace, key); + } + else + { + domNode.setAttributeNS(namespace, key, value); + } + } +} + + + +//////////// DIFF //////////// + + +function diff(a, b) +{ + var patches = []; + diffHelp(a, b, patches, 0); + return patches; +} + + +function makePatch(type, index, data) +{ + return { + index: index, + type: type, + data: data, + domNode: undefined, + eventNode: undefined + }; +} + + +function diffHelp(a, b, patches, index) +{ + if (a === b) + { + return; + } + + var aType = a.type; + var bType = b.type; + + // Bail if you run into different types of nodes. Implies that the + // structure has changed significantly and it's not worth a diff. + if (aType !== bType) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + // Now we know that both nodes are the same type. + switch (bType) + { + case 'thunk': + var aArgs = a.args; + var bArgs = b.args; + var i = aArgs.length; + var same = a.func === b.func && i === bArgs.length; + while (same && i--) + { + same = aArgs[i] === bArgs[i]; + } + if (same) + { + b.node = a.node; + return; + } + b.node = b.thunk(); + var subPatches = []; + diffHelp(a.node, b.node, subPatches, 0); + if (subPatches.length > 0) + { + patches.push(makePatch('p-thunk', index, subPatches)); + } + return; + + case 'tagger': + // gather nested taggers + var aTaggers = a.tagger; + var bTaggers = b.tagger; + var nesting = false; + + var aSubNode = a.node; + while (aSubNode.type === 'tagger') + { + nesting = true; + + typeof aTaggers !== 'object' + ? aTaggers = [aTaggers, aSubNode.tagger] + : aTaggers.push(aSubNode.tagger); + + aSubNode = aSubNode.node; + } + + var bSubNode = b.node; + while (bSubNode.type === 'tagger') + { + nesting = true; + + typeof bTaggers !== 'object' + ? bTaggers = [bTaggers, bSubNode.tagger] + : bTaggers.push(bSubNode.tagger); + + bSubNode = bSubNode.node; + } + + // Just bail if different numbers of taggers. This implies the + // structure of the virtual DOM has changed. + if (nesting && aTaggers.length !== bTaggers.length) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + // check if taggers are "the same" + if (nesting ? !pairwiseRefEqual(aTaggers, bTaggers) : aTaggers !== bTaggers) + { + patches.push(makePatch('p-tagger', index, bTaggers)); + } + + // diff everything below the taggers + diffHelp(aSubNode, bSubNode, patches, index + 1); + return; + + case 'text': + if (a.text !== b.text) + { + patches.push(makePatch('p-text', index, b.text)); + return; + } + + return; + + case 'node': + // Bail if obvious indicators have changed. Implies more serious + // structural changes such that it's not worth it to diff. + if (a.tag !== b.tag || a.namespace !== b.namespace) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + var factsDiff = diffFacts(a.facts, b.facts); + + if (typeof factsDiff !== 'undefined') + { + patches.push(makePatch('p-facts', index, factsDiff)); + } + + diffChildren(a, b, patches, index); + return; + + case 'keyed-node': + // Bail if obvious indicators have changed. Implies more serious + // structural changes such that it's not worth it to diff. + if (a.tag !== b.tag || a.namespace !== b.namespace) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + var factsDiff = diffFacts(a.facts, b.facts); + + if (typeof factsDiff !== 'undefined') + { + patches.push(makePatch('p-facts', index, factsDiff)); + } + + diffKeyedChildren(a, b, patches, index); + return; + + case 'custom': + if (a.impl !== b.impl) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + var factsDiff = diffFacts(a.facts, b.facts); + if (typeof factsDiff !== 'undefined') + { + patches.push(makePatch('p-facts', index, factsDiff)); + } + + var patch = b.impl.diff(a,b); + if (patch) + { + patches.push(makePatch('p-custom', index, patch)); + return; + } + + return; + } +} + + +// assumes the incoming arrays are the same length +function pairwiseRefEqual(as, bs) +{ + for (var i = 0; i < as.length; i++) + { + if (as[i] !== bs[i]) + { + return false; + } + } + + return true; +} + + +// TODO Instead of creating a new diff object, it's possible to just test if +// there *is* a diff. During the actual patch, do the diff again and make the +// modifications directly. This way, there's no new allocations. Worth it? +function diffFacts(a, b, category) +{ + var diff; + + // look for changes and removals + for (var aKey in a) + { + if (aKey === STYLE_KEY || aKey === EVENT_KEY || aKey === ATTR_KEY || aKey === ATTR_NS_KEY) + { + var subDiff = diffFacts(a[aKey], b[aKey] || {}, aKey); + if (subDiff) + { + diff = diff || {}; + diff[aKey] = subDiff; + } + continue; + } + + // remove if not in the new facts + if (!(aKey in b)) + { + diff = diff || {}; + diff[aKey] = + (typeof category === 'undefined') + ? (typeof a[aKey] === 'string' ? '' : null) + : + (category === STYLE_KEY) + ? '' + : + (category === EVENT_KEY || category === ATTR_KEY) + ? undefined + : + { namespace: a[aKey].namespace, value: undefined }; + + continue; + } + + var aValue = a[aKey]; + var bValue = b[aKey]; + + // reference equal, so don't worry about it + if (aValue === bValue && aKey !== 'value' + || category === EVENT_KEY && equalEvents(aValue, bValue)) + { + continue; + } + + diff = diff || {}; + diff[aKey] = bValue; + } + + // add new stuff + for (var bKey in b) + { + if (!(bKey in a)) + { + diff = diff || {}; + diff[bKey] = b[bKey]; + } + } + + return diff; +} + + +function diffChildren(aParent, bParent, patches, rootIndex) +{ + var aChildren = aParent.children; + var bChildren = bParent.children; + + var aLen = aChildren.length; + var bLen = bChildren.length; + + // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS + + if (aLen > bLen) + { + patches.push(makePatch('p-remove-last', rootIndex, aLen - bLen)); + } + else if (aLen < bLen) + { + patches.push(makePatch('p-append', rootIndex, bChildren.slice(aLen))); + } + + // PAIRWISE DIFF EVERYTHING ELSE + + var index = rootIndex; + var minLen = aLen < bLen ? aLen : bLen; + for (var i = 0; i < minLen; i++) + { + index++; + var aChild = aChildren[i]; + diffHelp(aChild, bChildren[i], patches, index); + index += aChild.descendantsCount || 0; + } +} + + + +//////////// KEYED DIFF //////////// + + +function diffKeyedChildren(aParent, bParent, patches, rootIndex) +{ + var localPatches = []; + + var changes = {}; // Dict String Entry + var inserts = []; // Array { index : Int, entry : Entry } + // type Entry = { tag : String, vnode : VNode, index : Int, data : _ } + + var aChildren = aParent.children; + var bChildren = bParent.children; + var aLen = aChildren.length; + var bLen = bChildren.length; + var aIndex = 0; + var bIndex = 0; + + var index = rootIndex; + + while (aIndex < aLen && bIndex < bLen) + { + var a = aChildren[aIndex]; + var b = bChildren[bIndex]; + + var aKey = a._0; + var bKey = b._0; + var aNode = a._1; + var bNode = b._1; + + // check if keys match + + if (aKey === bKey) + { + index++; + diffHelp(aNode, bNode, localPatches, index); + index += aNode.descendantsCount || 0; + + aIndex++; + bIndex++; + continue; + } + + // look ahead 1 to detect insertions and removals. + + var aLookAhead = aIndex + 1 < aLen; + var bLookAhead = bIndex + 1 < bLen; + + if (aLookAhead) + { + var aNext = aChildren[aIndex + 1]; + var aNextKey = aNext._0; + var aNextNode = aNext._1; + var oldMatch = bKey === aNextKey; + } + + if (bLookAhead) + { + var bNext = bChildren[bIndex + 1]; + var bNextKey = bNext._0; + var bNextNode = bNext._1; + var newMatch = aKey === bNextKey; + } + + + // swap a and b + if (aLookAhead && bLookAhead && newMatch && oldMatch) + { + index++; + diffHelp(aNode, bNextNode, localPatches, index); + insertNode(changes, localPatches, aKey, bNode, bIndex, inserts); + index += aNode.descendantsCount || 0; + + index++; + removeNode(changes, localPatches, aKey, aNextNode, index); + index += aNextNode.descendantsCount || 0; + + aIndex += 2; + bIndex += 2; + continue; + } + + // insert b + if (bLookAhead && newMatch) + { + index++; + insertNode(changes, localPatches, bKey, bNode, bIndex, inserts); + diffHelp(aNode, bNextNode, localPatches, index); + index += aNode.descendantsCount || 0; + + aIndex += 1; + bIndex += 2; + continue; + } + + // remove a + if (aLookAhead && oldMatch) + { + index++; + removeNode(changes, localPatches, aKey, aNode, index); + index += aNode.descendantsCount || 0; + + index++; + diffHelp(aNextNode, bNode, localPatches, index); + index += aNextNode.descendantsCount || 0; + + aIndex += 2; + bIndex += 1; + continue; + } + + // remove a, insert b + if (aLookAhead && bLookAhead && aNextKey === bNextKey) + { + index++; + removeNode(changes, localPatches, aKey, aNode, index); + insertNode(changes, localPatches, bKey, bNode, bIndex, inserts); + index += aNode.descendantsCount || 0; + + index++; + diffHelp(aNextNode, bNextNode, localPatches, index); + index += aNextNode.descendantsCount || 0; + + aIndex += 2; + bIndex += 2; + continue; + } + + break; + } + + // eat up any remaining nodes with removeNode and insertNode + + while (aIndex < aLen) + { + index++; + var a = aChildren[aIndex]; + var aNode = a._1; + removeNode(changes, localPatches, a._0, aNode, index); + index += aNode.descendantsCount || 0; + aIndex++; + } + + var endInserts; + while (bIndex < bLen) + { + endInserts = endInserts || []; + var b = bChildren[bIndex]; + insertNode(changes, localPatches, b._0, b._1, undefined, endInserts); + bIndex++; + } + + if (localPatches.length > 0 || inserts.length > 0 || typeof endInserts !== 'undefined') + { + patches.push(makePatch('p-reorder', rootIndex, { + patches: localPatches, + inserts: inserts, + endInserts: endInserts + })); + } +} + + + +//////////// CHANGES FROM KEYED DIFF //////////// + + +var POSTFIX = '_elmW6BL'; + + +function insertNode(changes, localPatches, key, vnode, bIndex, inserts) +{ + var entry = changes[key]; + + // never seen this key before + if (typeof entry === 'undefined') + { + entry = { + tag: 'insert', + vnode: vnode, + index: bIndex, + data: undefined + }; + + inserts.push({ index: bIndex, entry: entry }); + changes[key] = entry; + + return; + } + + // this key was removed earlier, a match! + if (entry.tag === 'remove') + { + inserts.push({ index: bIndex, entry: entry }); + + entry.tag = 'move'; + var subPatches = []; + diffHelp(entry.vnode, vnode, subPatches, entry.index); + entry.index = bIndex; + entry.data.data = { + patches: subPatches, + entry: entry + }; + + return; + } + + // this key has already been inserted or moved, a duplicate! + insertNode(changes, localPatches, key + POSTFIX, vnode, bIndex, inserts); +} + + +function removeNode(changes, localPatches, key, vnode, index) +{ + var entry = changes[key]; + + // never seen this key before + if (typeof entry === 'undefined') + { + var patch = makePatch('p-remove', index, undefined); + localPatches.push(patch); + + changes[key] = { + tag: 'remove', + vnode: vnode, + index: index, + data: patch + }; + + return; + } + + // this key was inserted earlier, a match! + if (entry.tag === 'insert') + { + entry.tag = 'move'; + var subPatches = []; + diffHelp(vnode, entry.vnode, subPatches, index); + + var patch = makePatch('p-remove', index, { + patches: subPatches, + entry: entry + }); + localPatches.push(patch); + + return; + } + + // this key has already been removed or moved, a duplicate! + removeNode(changes, localPatches, key + POSTFIX, vnode, index); +} + + + +//////////// ADD DOM NODES //////////// +// +// Each DOM node has an "index" assigned in order of traversal. It is important +// to minimize our crawl over the actual DOM, so these indexes (along with the +// descendantsCount of virtual nodes) let us skip touching entire subtrees of +// the DOM if we know there are no patches there. + + +function addDomNodes(domNode, vNode, patches, eventNode) +{ + addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.descendantsCount, eventNode); +} + + +// assumes `patches` is non-empty and indexes increase monotonically. +function addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode) +{ + var patch = patches[i]; + var index = patch.index; + + while (index === low) + { + var patchType = patch.type; + + if (patchType === 'p-thunk') + { + addDomNodes(domNode, vNode.node, patch.data, eventNode); + } + else if (patchType === 'p-reorder') + { + patch.domNode = domNode; + patch.eventNode = eventNode; + + var subPatches = patch.data.patches; + if (subPatches.length > 0) + { + addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); + } + } + else if (patchType === 'p-remove') + { + patch.domNode = domNode; + patch.eventNode = eventNode; + + var data = patch.data; + if (typeof data !== 'undefined') + { + data.entry.data = domNode; + var subPatches = data.patches; + if (subPatches.length > 0) + { + addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); + } + } + } + else + { + patch.domNode = domNode; + patch.eventNode = eventNode; + } + + i++; + + if (!(patch = patches[i]) || (index = patch.index) > high) + { + return i; + } + } + + switch (vNode.type) + { + case 'tagger': + var subNode = vNode.node; + + while (subNode.type === "tagger") + { + subNode = subNode.node; + } + + return addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref); + + case 'node': + var vChildren = vNode.children; + var childNodes = domNode.childNodes; + for (var j = 0; j < vChildren.length; j++) + { + low++; + var vChild = vChildren[j]; + var nextLow = low + (vChild.descendantsCount || 0); + if (low <= index && index <= nextLow) + { + i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode); + if (!(patch = patches[i]) || (index = patch.index) > high) + { + return i; + } + } + low = nextLow; + } + return i; + + case 'keyed-node': + var vChildren = vNode.children; + var childNodes = domNode.childNodes; + for (var j = 0; j < vChildren.length; j++) + { + low++; + var vChild = vChildren[j]._1; + var nextLow = low + (vChild.descendantsCount || 0); + if (low <= index && index <= nextLow) + { + i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode); + if (!(patch = patches[i]) || (index = patch.index) > high) + { + return i; + } + } + low = nextLow; + } + return i; + + case 'text': + case 'thunk': + throw new Error('should never traverse `text` or `thunk` nodes like this'); + } +} + + + +//////////// APPLY PATCHES //////////// + + +function applyPatches(rootDomNode, oldVirtualNode, patches, eventNode) +{ + if (patches.length === 0) + { + return rootDomNode; + } + + addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode); + return applyPatchesHelp(rootDomNode, patches); +} + +function applyPatchesHelp(rootDomNode, patches) +{ + for (var i = 0; i < patches.length; i++) + { + var patch = patches[i]; + var localDomNode = patch.domNode + var newNode = applyPatch(localDomNode, patch); + if (localDomNode === rootDomNode) + { + rootDomNode = newNode; + } + } + return rootDomNode; +} + +function applyPatch(domNode, patch) +{ + switch (patch.type) + { + case 'p-redraw': + return applyPatchRedraw(domNode, patch.data, patch.eventNode); + + case 'p-facts': + applyFacts(domNode, patch.eventNode, patch.data); + return domNode; + + case 'p-text': + domNode.replaceData(0, domNode.length, patch.data); + return domNode; + + case 'p-thunk': + return applyPatchesHelp(domNode, patch.data); + + case 'p-tagger': + if (typeof domNode.elm_event_node_ref !== 'undefined') + { + domNode.elm_event_node_ref.tagger = patch.data; + } + else + { + domNode.elm_event_node_ref = { tagger: patch.data, parent: patch.eventNode }; + } + return domNode; + + case 'p-remove-last': + var i = patch.data; + while (i--) + { + domNode.removeChild(domNode.lastChild); + } + return domNode; + + case 'p-append': + var newNodes = patch.data; + for (var i = 0; i < newNodes.length; i++) + { + domNode.appendChild(render(newNodes[i], patch.eventNode)); + } + return domNode; + + case 'p-remove': + var data = patch.data; + if (typeof data === 'undefined') + { + domNode.parentNode.removeChild(domNode); + return domNode; + } + var entry = data.entry; + if (typeof entry.index !== 'undefined') + { + domNode.parentNode.removeChild(domNode); + } + entry.data = applyPatchesHelp(domNode, data.patches); + return domNode; + + case 'p-reorder': + return applyPatchReorder(domNode, patch); + + case 'p-custom': + var impl = patch.data; + return impl.applyPatch(domNode, impl.data); + + default: + throw new Error('Ran into an unknown patch!'); + } +} + + +function applyPatchRedraw(domNode, vNode, eventNode) +{ + var parentNode = domNode.parentNode; + var newNode = render(vNode, eventNode); + + if (typeof newNode.elm_event_node_ref === 'undefined') + { + newNode.elm_event_node_ref = domNode.elm_event_node_ref; + } + + if (parentNode && newNode !== domNode) + { + parentNode.replaceChild(newNode, domNode); + } + return newNode; +} + + +function applyPatchReorder(domNode, patch) +{ + var data = patch.data; + + // remove end inserts + var frag = applyPatchReorderEndInsertsHelp(data.endInserts, patch); + + // removals + domNode = applyPatchesHelp(domNode, data.patches); + + // inserts + var inserts = data.inserts; + for (var i = 0; i < inserts.length; i++) + { + var insert = inserts[i]; + var entry = insert.entry; + var node = entry.tag === 'move' + ? entry.data + : render(entry.vnode, patch.eventNode); + domNode.insertBefore(node, domNode.childNodes[insert.index]); + } + + // add end inserts + if (typeof frag !== 'undefined') + { + domNode.appendChild(frag); + } + + return domNode; +} + + +function applyPatchReorderEndInsertsHelp(endInserts, patch) +{ + if (typeof endInserts === 'undefined') + { + return; + } + + var frag = localDoc.createDocumentFragment(); + for (var i = 0; i < endInserts.length; i++) + { + var insert = endInserts[i]; + var entry = insert.entry; + frag.appendChild(entry.tag === 'move' + ? entry.data + : render(entry.vnode, patch.eventNode) + ); + } + return frag; +} + + +// PROGRAMS + +var program = makeProgram(checkNoFlags); +var programWithFlags = makeProgram(checkYesFlags); + +function makeProgram(flagChecker) +{ + return F2(function(debugWrap, impl) + { + return function(flagDecoder) + { + return function(object, moduleName, debugMetadata) + { + var checker = flagChecker(flagDecoder, moduleName); + if (typeof debugMetadata === 'undefined') + { + normalSetup(impl, object, moduleName, checker); + } + else + { + debugSetup(A2(debugWrap, debugMetadata, impl), object, moduleName, checker); + } + }; + }; + }); +} + +function staticProgram(vNode) +{ + var nothing = _elm_lang$core$Native_Utils.Tuple2( + _elm_lang$core$Native_Utils.Tuple0, + _elm_lang$core$Platform_Cmd$none + ); + return A2(program, _elm_lang$virtual_dom$VirtualDom_Debug$wrap, { + init: nothing, + view: function() { return vNode; }, + update: F2(function() { return nothing; }), + subscriptions: function() { return _elm_lang$core$Platform_Sub$none; } + })(); +} + + +// FLAG CHECKERS + +function checkNoFlags(flagDecoder, moduleName) +{ + return function(init, flags, domNode) + { + if (typeof flags === 'undefined') + { + return init; + } + + var errorMessage = + 'The `' + moduleName + '` module does not need flags.\n' + + 'Initialize it with no arguments and you should be all set!'; + + crash(errorMessage, domNode); + }; +} + +function checkYesFlags(flagDecoder, moduleName) +{ + return function(init, flags, domNode) + { + if (typeof flagDecoder === 'undefined') + { + var errorMessage = + 'Are you trying to sneak a Never value into Elm? Trickster!\n' + + 'It looks like ' + moduleName + '.main is defined with `programWithFlags` but has type `Program Never`.\n' + + 'Use `program` instead if you do not want flags.' + + crash(errorMessage, domNode); + } + + var result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags); + if (result.ctor === 'Ok') + { + return init(result._0); + } + + var errorMessage = + 'Trying to initialize the `' + moduleName + '` module with an unexpected flag.\n' + + 'I tried to convert it to an Elm value, but ran into this problem:\n\n' + + result._0; + + crash(errorMessage, domNode); + }; +} + +function crash(errorMessage, domNode) +{ + if (domNode) + { + domNode.innerHTML = + '
' + + '

Oops! Something went wrong when starting your Elm program.

' + + '
' + errorMessage + '
' + + '
'; + } + + throw new Error(errorMessage); +} + + +// NORMAL SETUP + +function normalSetup(impl, object, moduleName, flagChecker) +{ + object['embed'] = function embed(node, flags) + { + while (node.lastChild) + { + node.removeChild(node.lastChild); + } + + return _elm_lang$core$Native_Platform.initialize( + flagChecker(impl.init, flags, node), + impl.update, + impl.subscriptions, + normalRenderer(node, impl.view) + ); + }; + + object['fullscreen'] = function fullscreen(flags) + { + return _elm_lang$core$Native_Platform.initialize( + flagChecker(impl.init, flags, document.body), + impl.update, + impl.subscriptions, + normalRenderer(document.body, impl.view) + ); + }; +} + +function normalRenderer(parentNode, view) +{ + return function(tagger, initialModel) + { + var eventNode = { tagger: tagger, parent: undefined }; + var initialVirtualNode = view(initialModel); + var domNode = render(initialVirtualNode, eventNode); + parentNode.appendChild(domNode); + return makeStepper(domNode, view, initialVirtualNode, eventNode); + }; +} + + +// STEPPER + +var rAF = + typeof requestAnimationFrame !== 'undefined' + ? requestAnimationFrame + : function(callback) { setTimeout(callback, 1000 / 60); }; + +function makeStepper(domNode, view, initialVirtualNode, eventNode) +{ + var state = 'NO_REQUEST'; + var currNode = initialVirtualNode; + var nextModel; + + function updateIfNeeded() + { + switch (state) + { + case 'NO_REQUEST': + throw new Error( + 'Unexpected draw callback.\n' + + 'Please report this to .' + ); + + case 'PENDING_REQUEST': + rAF(updateIfNeeded); + state = 'EXTRA_REQUEST'; + + var nextNode = view(nextModel); + var patches = diff(currNode, nextNode); + domNode = applyPatches(domNode, currNode, patches, eventNode); + currNode = nextNode; + + return; + + case 'EXTRA_REQUEST': + state = 'NO_REQUEST'; + return; + } + } + + return function stepper(model) + { + if (state === 'NO_REQUEST') + { + rAF(updateIfNeeded); + } + state = 'PENDING_REQUEST'; + nextModel = model; + }; +} + + +// DEBUG SETUP + +function debugSetup(impl, object, moduleName, flagChecker) +{ + object['fullscreen'] = function fullscreen(flags) + { + var popoutRef = { doc: undefined }; + return _elm_lang$core$Native_Platform.initialize( + flagChecker(impl.init, flags, document.body), + impl.update(scrollTask(popoutRef)), + impl.subscriptions, + debugRenderer(moduleName, document.body, popoutRef, impl.view, impl.viewIn, impl.viewOut) + ); + }; + + object['embed'] = function fullscreen(node, flags) + { + var popoutRef = { doc: undefined }; + return _elm_lang$core$Native_Platform.initialize( + flagChecker(impl.init, flags, node), + impl.update(scrollTask(popoutRef)), + impl.subscriptions, + debugRenderer(moduleName, node, popoutRef, impl.view, impl.viewIn, impl.viewOut) + ); + }; +} + +function scrollTask(popoutRef) +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + var doc = popoutRef.doc; + if (doc) + { + var msgs = doc.getElementsByClassName('debugger-sidebar-messages')[0]; + if (msgs) + { + msgs.scrollTop = msgs.scrollHeight; + } + } + callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0)); + }); +} + + +function debugRenderer(moduleName, parentNode, popoutRef, view, viewIn, viewOut) +{ + return function(tagger, initialModel) + { + var appEventNode = { tagger: tagger, parent: undefined }; + var eventNode = { tagger: tagger, parent: undefined }; + + // make normal stepper + var appVirtualNode = view(initialModel); + var appNode = render(appVirtualNode, appEventNode); + parentNode.appendChild(appNode); + var appStepper = makeStepper(appNode, view, appVirtualNode, appEventNode); + + // make overlay stepper + var overVirtualNode = viewIn(initialModel)._1; + var overNode = render(overVirtualNode, eventNode); + parentNode.appendChild(overNode); + var wrappedViewIn = wrapViewIn(appEventNode, overNode, viewIn); + var overStepper = makeStepper(overNode, wrappedViewIn, overVirtualNode, eventNode); + + // make debugger stepper + var debugStepper = makeDebugStepper(initialModel, viewOut, eventNode, parentNode, moduleName, popoutRef); + + return function stepper(model) + { + appStepper(model); + overStepper(model); + debugStepper(model); + } + }; +} + +function makeDebugStepper(initialModel, view, eventNode, parentNode, moduleName, popoutRef) +{ + var curr; + var domNode; + + return function stepper(model) + { + if (!model.isDebuggerOpen) + { + return; + } + + if (!popoutRef.doc) + { + curr = view(model); + domNode = openDebugWindow(moduleName, popoutRef, curr, eventNode); + return; + } + + // switch to document of popout + localDoc = popoutRef.doc; + + var next = view(model); + var patches = diff(curr, next); + domNode = applyPatches(domNode, curr, patches, eventNode); + curr = next; + + // switch back to normal document + localDoc = document; + }; +} + +function openDebugWindow(moduleName, popoutRef, virtualNode, eventNode) +{ + var w = 900; + var h = 360; + var x = screen.width - w; + var y = screen.height - h; + var debugWindow = window.open('', '', 'width=' + w + ',height=' + h + ',left=' + x + ',top=' + y); + + // switch to window document + localDoc = debugWindow.document; + + popoutRef.doc = localDoc; + localDoc.title = 'Debugger - ' + moduleName; + localDoc.body.style.margin = '0'; + localDoc.body.style.padding = '0'; + var domNode = render(virtualNode, eventNode); + localDoc.body.appendChild(domNode); + + localDoc.addEventListener('keydown', function(event) { + if (event.metaKey && event.which === 82) + { + window.location.reload(); + } + if (event.which === 38) + { + eventNode.tagger({ ctor: 'Up' }); + event.preventDefault(); + } + if (event.which === 40) + { + eventNode.tagger({ ctor: 'Down' }); + event.preventDefault(); + } + }); + + function close() + { + popoutRef.doc = undefined; + debugWindow.close(); + } + window.addEventListener('unload', close); + debugWindow.addEventListener('unload', function() { + popoutRef.doc = undefined; + window.removeEventListener('unload', close); + eventNode.tagger({ ctor: 'Close' }); + }); + + // switch back to the normal document + localDoc = document; + + return domNode; +} + + +// BLOCK EVENTS + +function wrapViewIn(appEventNode, overlayNode, viewIn) +{ + var ignorer = makeIgnorer(overlayNode); + var blocking = 'Normal'; + var overflow; + + var normalTagger = appEventNode.tagger; + var blockTagger = function() {}; + + return function(model) + { + var tuple = viewIn(model); + var newBlocking = tuple._0.ctor; + appEventNode.tagger = newBlocking === 'Normal' ? normalTagger : blockTagger; + if (blocking !== newBlocking) + { + traverse('removeEventListener', ignorer, blocking); + traverse('addEventListener', ignorer, newBlocking); + + if (blocking === 'Normal') + { + overflow = document.body.style.overflow; + document.body.style.overflow = 'hidden'; + } + + if (newBlocking === 'Normal') + { + document.body.style.overflow = overflow; + } + + blocking = newBlocking; + } + return tuple._1; + } +} + +function traverse(verbEventListener, ignorer, blocking) +{ + switch(blocking) + { + case 'Normal': + return; + + case 'Pause': + return traverseHelp(verbEventListener, ignorer, mostEvents); + + case 'Message': + return traverseHelp(verbEventListener, ignorer, allEvents); + } +} + +function traverseHelp(verbEventListener, handler, eventNames) +{ + for (var i = 0; i < eventNames.length; i++) + { + document.body[verbEventListener](eventNames[i], handler, true); + } +} + +function makeIgnorer(overlayNode) +{ + return function(event) + { + if (event.type === 'keydown' && event.metaKey && event.which === 82) + { + return; + } + + var isScroll = event.type === 'scroll' || event.type === 'wheel'; + + var node = event.target; + while (node !== null) + { + if (node.className === 'elm-overlay-message-details' && isScroll) + { + return; + } + + if (node === overlayNode && !isScroll) + { + return; + } + node = node.parentNode; + } + + event.stopPropagation(); + event.preventDefault(); + } +} + +var mostEvents = [ + 'click', 'dblclick', 'mousemove', + 'mouseup', 'mousedown', 'mouseenter', 'mouseleave', + 'touchstart', 'touchend', 'touchcancel', 'touchmove', + 'pointerdown', 'pointerup', 'pointerover', 'pointerout', + 'pointerenter', 'pointerleave', 'pointermove', 'pointercancel', + 'dragstart', 'drag', 'dragend', 'dragenter', 'dragover', 'dragleave', 'drop', + 'keyup', 'keydown', 'keypress', + 'input', 'change', + 'focus', 'blur' +]; + +var allEvents = mostEvents.concat('wheel', 'scroll'); + + +return { + node: node, + text: text, + custom: custom, + map: F2(map), + + on: F3(on), + style: style, + property: F2(property), + attribute: F2(attribute), + attributeNS: F3(attributeNS), + mapProperty: F2(mapProperty), + + lazy: F2(lazy), + lazy2: F3(lazy2), + lazy3: F4(lazy3), + keyedNode: F3(keyedNode), + + program: program, + programWithFlags: programWithFlags, + staticProgram: staticProgram +}; + +}(); + +var _elm_lang$virtual_dom$VirtualDom$programWithFlags = function (impl) { + return A2(_elm_lang$virtual_dom$Native_VirtualDom.programWithFlags, _elm_lang$virtual_dom$VirtualDom_Debug$wrapWithFlags, impl); +}; +var _elm_lang$virtual_dom$VirtualDom$program = function (impl) { + return A2(_elm_lang$virtual_dom$Native_VirtualDom.program, _elm_lang$virtual_dom$VirtualDom_Debug$wrap, impl); +}; +var _elm_lang$virtual_dom$VirtualDom$keyedNode = _elm_lang$virtual_dom$Native_VirtualDom.keyedNode; +var _elm_lang$virtual_dom$VirtualDom$lazy3 = _elm_lang$virtual_dom$Native_VirtualDom.lazy3; +var _elm_lang$virtual_dom$VirtualDom$lazy2 = _elm_lang$virtual_dom$Native_VirtualDom.lazy2; +var _elm_lang$virtual_dom$VirtualDom$lazy = _elm_lang$virtual_dom$Native_VirtualDom.lazy; +var _elm_lang$virtual_dom$VirtualDom$defaultOptions = {stopPropagation: false, preventDefault: false}; +var _elm_lang$virtual_dom$VirtualDom$onWithOptions = _elm_lang$virtual_dom$Native_VirtualDom.on; +var _elm_lang$virtual_dom$VirtualDom$on = F2( + function (eventName, decoder) { + return A3(_elm_lang$virtual_dom$VirtualDom$onWithOptions, eventName, _elm_lang$virtual_dom$VirtualDom$defaultOptions, decoder); + }); +var _elm_lang$virtual_dom$VirtualDom$style = _elm_lang$virtual_dom$Native_VirtualDom.style; +var _elm_lang$virtual_dom$VirtualDom$mapProperty = _elm_lang$virtual_dom$Native_VirtualDom.mapProperty; +var _elm_lang$virtual_dom$VirtualDom$attributeNS = _elm_lang$virtual_dom$Native_VirtualDom.attributeNS; +var _elm_lang$virtual_dom$VirtualDom$attribute = _elm_lang$virtual_dom$Native_VirtualDom.attribute; +var _elm_lang$virtual_dom$VirtualDom$property = _elm_lang$virtual_dom$Native_VirtualDom.property; +var _elm_lang$virtual_dom$VirtualDom$map = _elm_lang$virtual_dom$Native_VirtualDom.map; +var _elm_lang$virtual_dom$VirtualDom$text = _elm_lang$virtual_dom$Native_VirtualDom.text; +var _elm_lang$virtual_dom$VirtualDom$node = _elm_lang$virtual_dom$Native_VirtualDom.node; +var _elm_lang$virtual_dom$VirtualDom$Options = F2( + function (a, b) { + return {stopPropagation: a, preventDefault: b}; + }); +var _elm_lang$virtual_dom$VirtualDom$Node = {ctor: 'Node'}; +var _elm_lang$virtual_dom$VirtualDom$Property = {ctor: 'Property'}; + +var _elm_lang$html$Html$programWithFlags = _elm_lang$virtual_dom$VirtualDom$programWithFlags; +var _elm_lang$html$Html$program = _elm_lang$virtual_dom$VirtualDom$program; +var _elm_lang$html$Html$beginnerProgram = function (_p0) { + var _p1 = _p0; + return _elm_lang$html$Html$program( + { + init: A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _p1.model, + {ctor: '[]'}), + update: F2( + function (msg, model) { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + A2(_p1.update, msg, model), + {ctor: '[]'}); + }), + view: _p1.view, + subscriptions: function (_p2) { + return _elm_lang$core$Platform_Sub$none; + } + }); +}; +var _elm_lang$html$Html$map = _elm_lang$virtual_dom$VirtualDom$map; +var _elm_lang$html$Html$text = _elm_lang$virtual_dom$VirtualDom$text; +var _elm_lang$html$Html$node = _elm_lang$virtual_dom$VirtualDom$node; +var _elm_lang$html$Html$body = _elm_lang$html$Html$node('body'); +var _elm_lang$html$Html$section = _elm_lang$html$Html$node('section'); +var _elm_lang$html$Html$nav = _elm_lang$html$Html$node('nav'); +var _elm_lang$html$Html$article = _elm_lang$html$Html$node('article'); +var _elm_lang$html$Html$aside = _elm_lang$html$Html$node('aside'); +var _elm_lang$html$Html$h1 = _elm_lang$html$Html$node('h1'); +var _elm_lang$html$Html$h2 = _elm_lang$html$Html$node('h2'); +var _elm_lang$html$Html$h3 = _elm_lang$html$Html$node('h3'); +var _elm_lang$html$Html$h4 = _elm_lang$html$Html$node('h4'); +var _elm_lang$html$Html$h5 = _elm_lang$html$Html$node('h5'); +var _elm_lang$html$Html$h6 = _elm_lang$html$Html$node('h6'); +var _elm_lang$html$Html$header = _elm_lang$html$Html$node('header'); +var _elm_lang$html$Html$footer = _elm_lang$html$Html$node('footer'); +var _elm_lang$html$Html$address = _elm_lang$html$Html$node('address'); +var _elm_lang$html$Html$main_ = _elm_lang$html$Html$node('main'); +var _elm_lang$html$Html$p = _elm_lang$html$Html$node('p'); +var _elm_lang$html$Html$hr = _elm_lang$html$Html$node('hr'); +var _elm_lang$html$Html$pre = _elm_lang$html$Html$node('pre'); +var _elm_lang$html$Html$blockquote = _elm_lang$html$Html$node('blockquote'); +var _elm_lang$html$Html$ol = _elm_lang$html$Html$node('ol'); +var _elm_lang$html$Html$ul = _elm_lang$html$Html$node('ul'); +var _elm_lang$html$Html$li = _elm_lang$html$Html$node('li'); +var _elm_lang$html$Html$dl = _elm_lang$html$Html$node('dl'); +var _elm_lang$html$Html$dt = _elm_lang$html$Html$node('dt'); +var _elm_lang$html$Html$dd = _elm_lang$html$Html$node('dd'); +var _elm_lang$html$Html$figure = _elm_lang$html$Html$node('figure'); +var _elm_lang$html$Html$figcaption = _elm_lang$html$Html$node('figcaption'); +var _elm_lang$html$Html$div = _elm_lang$html$Html$node('div'); +var _elm_lang$html$Html$a = _elm_lang$html$Html$node('a'); +var _elm_lang$html$Html$em = _elm_lang$html$Html$node('em'); +var _elm_lang$html$Html$strong = _elm_lang$html$Html$node('strong'); +var _elm_lang$html$Html$small = _elm_lang$html$Html$node('small'); +var _elm_lang$html$Html$s = _elm_lang$html$Html$node('s'); +var _elm_lang$html$Html$cite = _elm_lang$html$Html$node('cite'); +var _elm_lang$html$Html$q = _elm_lang$html$Html$node('q'); +var _elm_lang$html$Html$dfn = _elm_lang$html$Html$node('dfn'); +var _elm_lang$html$Html$abbr = _elm_lang$html$Html$node('abbr'); +var _elm_lang$html$Html$time = _elm_lang$html$Html$node('time'); +var _elm_lang$html$Html$code = _elm_lang$html$Html$node('code'); +var _elm_lang$html$Html$var = _elm_lang$html$Html$node('var'); +var _elm_lang$html$Html$samp = _elm_lang$html$Html$node('samp'); +var _elm_lang$html$Html$kbd = _elm_lang$html$Html$node('kbd'); +var _elm_lang$html$Html$sub = _elm_lang$html$Html$node('sub'); +var _elm_lang$html$Html$sup = _elm_lang$html$Html$node('sup'); +var _elm_lang$html$Html$i = _elm_lang$html$Html$node('i'); +var _elm_lang$html$Html$b = _elm_lang$html$Html$node('b'); +var _elm_lang$html$Html$u = _elm_lang$html$Html$node('u'); +var _elm_lang$html$Html$mark = _elm_lang$html$Html$node('mark'); +var _elm_lang$html$Html$ruby = _elm_lang$html$Html$node('ruby'); +var _elm_lang$html$Html$rt = _elm_lang$html$Html$node('rt'); +var _elm_lang$html$Html$rp = _elm_lang$html$Html$node('rp'); +var _elm_lang$html$Html$bdi = _elm_lang$html$Html$node('bdi'); +var _elm_lang$html$Html$bdo = _elm_lang$html$Html$node('bdo'); +var _elm_lang$html$Html$span = _elm_lang$html$Html$node('span'); +var _elm_lang$html$Html$br = _elm_lang$html$Html$node('br'); +var _elm_lang$html$Html$wbr = _elm_lang$html$Html$node('wbr'); +var _elm_lang$html$Html$ins = _elm_lang$html$Html$node('ins'); +var _elm_lang$html$Html$del = _elm_lang$html$Html$node('del'); +var _elm_lang$html$Html$img = _elm_lang$html$Html$node('img'); +var _elm_lang$html$Html$iframe = _elm_lang$html$Html$node('iframe'); +var _elm_lang$html$Html$embed = _elm_lang$html$Html$node('embed'); +var _elm_lang$html$Html$object = _elm_lang$html$Html$node('object'); +var _elm_lang$html$Html$param = _elm_lang$html$Html$node('param'); +var _elm_lang$html$Html$video = _elm_lang$html$Html$node('video'); +var _elm_lang$html$Html$audio = _elm_lang$html$Html$node('audio'); +var _elm_lang$html$Html$source = _elm_lang$html$Html$node('source'); +var _elm_lang$html$Html$track = _elm_lang$html$Html$node('track'); +var _elm_lang$html$Html$canvas = _elm_lang$html$Html$node('canvas'); +var _elm_lang$html$Html$math = _elm_lang$html$Html$node('math'); +var _elm_lang$html$Html$table = _elm_lang$html$Html$node('table'); +var _elm_lang$html$Html$caption = _elm_lang$html$Html$node('caption'); +var _elm_lang$html$Html$colgroup = _elm_lang$html$Html$node('colgroup'); +var _elm_lang$html$Html$col = _elm_lang$html$Html$node('col'); +var _elm_lang$html$Html$tbody = _elm_lang$html$Html$node('tbody'); +var _elm_lang$html$Html$thead = _elm_lang$html$Html$node('thead'); +var _elm_lang$html$Html$tfoot = _elm_lang$html$Html$node('tfoot'); +var _elm_lang$html$Html$tr = _elm_lang$html$Html$node('tr'); +var _elm_lang$html$Html$td = _elm_lang$html$Html$node('td'); +var _elm_lang$html$Html$th = _elm_lang$html$Html$node('th'); +var _elm_lang$html$Html$form = _elm_lang$html$Html$node('form'); +var _elm_lang$html$Html$fieldset = _elm_lang$html$Html$node('fieldset'); +var _elm_lang$html$Html$legend = _elm_lang$html$Html$node('legend'); +var _elm_lang$html$Html$label = _elm_lang$html$Html$node('label'); +var _elm_lang$html$Html$input = _elm_lang$html$Html$node('input'); +var _elm_lang$html$Html$button = _elm_lang$html$Html$node('button'); +var _elm_lang$html$Html$select = _elm_lang$html$Html$node('select'); +var _elm_lang$html$Html$datalist = _elm_lang$html$Html$node('datalist'); +var _elm_lang$html$Html$optgroup = _elm_lang$html$Html$node('optgroup'); +var _elm_lang$html$Html$option = _elm_lang$html$Html$node('option'); +var _elm_lang$html$Html$textarea = _elm_lang$html$Html$node('textarea'); +var _elm_lang$html$Html$keygen = _elm_lang$html$Html$node('keygen'); +var _elm_lang$html$Html$output = _elm_lang$html$Html$node('output'); +var _elm_lang$html$Html$progress = _elm_lang$html$Html$node('progress'); +var _elm_lang$html$Html$meter = _elm_lang$html$Html$node('meter'); +var _elm_lang$html$Html$details = _elm_lang$html$Html$node('details'); +var _elm_lang$html$Html$summary = _elm_lang$html$Html$node('summary'); +var _elm_lang$html$Html$menuitem = _elm_lang$html$Html$node('menuitem'); +var _elm_lang$html$Html$menu = _elm_lang$html$Html$node('menu'); + +var _elm_lang$html$Html_Attributes$map = _elm_lang$virtual_dom$VirtualDom$mapProperty; +var _elm_lang$html$Html_Attributes$attribute = _elm_lang$virtual_dom$VirtualDom$attribute; +var _elm_lang$html$Html_Attributes$contextmenu = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'contextmenu', value); +}; +var _elm_lang$html$Html_Attributes$draggable = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'draggable', value); +}; +var _elm_lang$html$Html_Attributes$itemprop = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'itemprop', value); +}; +var _elm_lang$html$Html_Attributes$tabindex = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'tabIndex', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$charset = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'charset', value); +}; +var _elm_lang$html$Html_Attributes$height = function (value) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'height', + _elm_lang$core$Basics$toString(value)); +}; +var _elm_lang$html$Html_Attributes$width = function (value) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'width', + _elm_lang$core$Basics$toString(value)); +}; +var _elm_lang$html$Html_Attributes$formaction = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'formAction', value); +}; +var _elm_lang$html$Html_Attributes$list = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'list', value); +}; +var _elm_lang$html$Html_Attributes$minlength = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'minLength', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$maxlength = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'maxlength', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$size = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'size', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$form = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'form', value); +}; +var _elm_lang$html$Html_Attributes$cols = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'cols', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$rows = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'rows', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$challenge = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'challenge', value); +}; +var _elm_lang$html$Html_Attributes$media = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'media', value); +}; +var _elm_lang$html$Html_Attributes$rel = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'rel', value); +}; +var _elm_lang$html$Html_Attributes$datetime = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'datetime', value); +}; +var _elm_lang$html$Html_Attributes$pubdate = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'pubdate', value); +}; +var _elm_lang$html$Html_Attributes$colspan = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'colspan', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$rowspan = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'rowspan', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$manifest = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'manifest', value); +}; +var _elm_lang$html$Html_Attributes$property = _elm_lang$virtual_dom$VirtualDom$property; +var _elm_lang$html$Html_Attributes$stringProperty = F2( + function (name, string) { + return A2( + _elm_lang$html$Html_Attributes$property, + name, + _elm_lang$core$Json_Encode$string(string)); + }); +var _elm_lang$html$Html_Attributes$class = function (name) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'className', name); +}; +var _elm_lang$html$Html_Attributes$id = function (name) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'id', name); +}; +var _elm_lang$html$Html_Attributes$title = function (name) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'title', name); +}; +var _elm_lang$html$Html_Attributes$accesskey = function ($char) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'accessKey', + _elm_lang$core$String$fromChar($char)); +}; +var _elm_lang$html$Html_Attributes$dir = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'dir', value); +}; +var _elm_lang$html$Html_Attributes$dropzone = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'dropzone', value); +}; +var _elm_lang$html$Html_Attributes$lang = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'lang', value); +}; +var _elm_lang$html$Html_Attributes$content = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'content', value); +}; +var _elm_lang$html$Html_Attributes$httpEquiv = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'httpEquiv', value); +}; +var _elm_lang$html$Html_Attributes$language = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'language', value); +}; +var _elm_lang$html$Html_Attributes$src = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'src', value); +}; +var _elm_lang$html$Html_Attributes$alt = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'alt', value); +}; +var _elm_lang$html$Html_Attributes$preload = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'preload', value); +}; +var _elm_lang$html$Html_Attributes$poster = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'poster', value); +}; +var _elm_lang$html$Html_Attributes$kind = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'kind', value); +}; +var _elm_lang$html$Html_Attributes$srclang = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'srclang', value); +}; +var _elm_lang$html$Html_Attributes$sandbox = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'sandbox', value); +}; +var _elm_lang$html$Html_Attributes$srcdoc = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'srcdoc', value); +}; +var _elm_lang$html$Html_Attributes$type_ = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'type', value); +}; +var _elm_lang$html$Html_Attributes$value = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'value', value); +}; +var _elm_lang$html$Html_Attributes$defaultValue = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'defaultValue', value); +}; +var _elm_lang$html$Html_Attributes$placeholder = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'placeholder', value); +}; +var _elm_lang$html$Html_Attributes$accept = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'accept', value); +}; +var _elm_lang$html$Html_Attributes$acceptCharset = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'acceptCharset', value); +}; +var _elm_lang$html$Html_Attributes$action = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'action', value); +}; +var _elm_lang$html$Html_Attributes$autocomplete = function (bool) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'autocomplete', + bool ? 'on' : 'off'); +}; +var _elm_lang$html$Html_Attributes$enctype = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'enctype', value); +}; +var _elm_lang$html$Html_Attributes$method = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'method', value); +}; +var _elm_lang$html$Html_Attributes$name = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'name', value); +}; +var _elm_lang$html$Html_Attributes$pattern = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'pattern', value); +}; +var _elm_lang$html$Html_Attributes$for = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'htmlFor', value); +}; +var _elm_lang$html$Html_Attributes$max = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'max', value); +}; +var _elm_lang$html$Html_Attributes$min = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'min', value); +}; +var _elm_lang$html$Html_Attributes$step = function (n) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'step', n); +}; +var _elm_lang$html$Html_Attributes$wrap = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'wrap', value); +}; +var _elm_lang$html$Html_Attributes$usemap = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'useMap', value); +}; +var _elm_lang$html$Html_Attributes$shape = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'shape', value); +}; +var _elm_lang$html$Html_Attributes$coords = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'coords', value); +}; +var _elm_lang$html$Html_Attributes$keytype = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'keytype', value); +}; +var _elm_lang$html$Html_Attributes$align = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'align', value); +}; +var _elm_lang$html$Html_Attributes$cite = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'cite', value); +}; +var _elm_lang$html$Html_Attributes$href = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'href', value); +}; +var _elm_lang$html$Html_Attributes$target = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'target', value); +}; +var _elm_lang$html$Html_Attributes$downloadAs = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'download', value); +}; +var _elm_lang$html$Html_Attributes$hreflang = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'hreflang', value); +}; +var _elm_lang$html$Html_Attributes$ping = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'ping', value); +}; +var _elm_lang$html$Html_Attributes$start = function (n) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'start', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$headers = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'headers', value); +}; +var _elm_lang$html$Html_Attributes$scope = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'scope', value); +}; +var _elm_lang$html$Html_Attributes$boolProperty = F2( + function (name, bool) { + return A2( + _elm_lang$html$Html_Attributes$property, + name, + _elm_lang$core$Json_Encode$bool(bool)); + }); +var _elm_lang$html$Html_Attributes$hidden = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'hidden', bool); +}; +var _elm_lang$html$Html_Attributes$contenteditable = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'contentEditable', bool); +}; +var _elm_lang$html$Html_Attributes$spellcheck = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'spellcheck', bool); +}; +var _elm_lang$html$Html_Attributes$async = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'async', bool); +}; +var _elm_lang$html$Html_Attributes$defer = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'defer', bool); +}; +var _elm_lang$html$Html_Attributes$scoped = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'scoped', bool); +}; +var _elm_lang$html$Html_Attributes$autoplay = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'autoplay', bool); +}; +var _elm_lang$html$Html_Attributes$controls = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'controls', bool); +}; +var _elm_lang$html$Html_Attributes$loop = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'loop', bool); +}; +var _elm_lang$html$Html_Attributes$default = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'default', bool); +}; +var _elm_lang$html$Html_Attributes$seamless = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'seamless', bool); +}; +var _elm_lang$html$Html_Attributes$checked = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'checked', bool); +}; +var _elm_lang$html$Html_Attributes$selected = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'selected', bool); +}; +var _elm_lang$html$Html_Attributes$autofocus = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'autofocus', bool); +}; +var _elm_lang$html$Html_Attributes$disabled = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'disabled', bool); +}; +var _elm_lang$html$Html_Attributes$multiple = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'multiple', bool); +}; +var _elm_lang$html$Html_Attributes$novalidate = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'noValidate', bool); +}; +var _elm_lang$html$Html_Attributes$readonly = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'readOnly', bool); +}; +var _elm_lang$html$Html_Attributes$required = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'required', bool); +}; +var _elm_lang$html$Html_Attributes$ismap = function (value) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'isMap', value); +}; +var _elm_lang$html$Html_Attributes$download = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'download', bool); +}; +var _elm_lang$html$Html_Attributes$reversed = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'reversed', bool); +}; +var _elm_lang$html$Html_Attributes$classList = function (list) { + return _elm_lang$html$Html_Attributes$class( + A2( + _elm_lang$core$String$join, + ' ', + A2( + _elm_lang$core$List$map, + _elm_lang$core$Tuple$first, + A2(_elm_lang$core$List$filter, _elm_lang$core$Tuple$second, list)))); +}; +var _elm_lang$html$Html_Attributes$style = _elm_lang$virtual_dom$VirtualDom$style; + +var _elm_lang$html$Html_Events$keyCode = A2(_elm_lang$core$Json_Decode$field, 'keyCode', _elm_lang$core$Json_Decode$int); +var _elm_lang$html$Html_Events$targetChecked = A2( + _elm_lang$core$Json_Decode$at, + { + ctor: '::', + _0: 'target', + _1: { + ctor: '::', + _0: 'checked', + _1: {ctor: '[]'} + } + }, + _elm_lang$core$Json_Decode$bool); +var _elm_lang$html$Html_Events$targetValue = A2( + _elm_lang$core$Json_Decode$at, + { + ctor: '::', + _0: 'target', + _1: { + ctor: '::', + _0: 'value', + _1: {ctor: '[]'} + } + }, + _elm_lang$core$Json_Decode$string); +var _elm_lang$html$Html_Events$defaultOptions = _elm_lang$virtual_dom$VirtualDom$defaultOptions; +var _elm_lang$html$Html_Events$onWithOptions = _elm_lang$virtual_dom$VirtualDom$onWithOptions; +var _elm_lang$html$Html_Events$on = _elm_lang$virtual_dom$VirtualDom$on; +var _elm_lang$html$Html_Events$onFocus = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'focus', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onBlur = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'blur', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onSubmitOptions = _elm_lang$core$Native_Utils.update( + _elm_lang$html$Html_Events$defaultOptions, + {preventDefault: true}); +var _elm_lang$html$Html_Events$onSubmit = function (msg) { + return A3( + _elm_lang$html$Html_Events$onWithOptions, + 'submit', + _elm_lang$html$Html_Events$onSubmitOptions, + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onCheck = function (tagger) { + return A2( + _elm_lang$html$Html_Events$on, + 'change', + A2(_elm_lang$core$Json_Decode$map, tagger, _elm_lang$html$Html_Events$targetChecked)); +}; +var _elm_lang$html$Html_Events$onInput = function (tagger) { + return A2( + _elm_lang$html$Html_Events$on, + 'input', + A2(_elm_lang$core$Json_Decode$map, tagger, _elm_lang$html$Html_Events$targetValue)); +}; +var _elm_lang$html$Html_Events$onMouseOut = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'mouseout', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onMouseOver = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'mouseover', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onMouseLeave = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'mouseleave', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onMouseEnter = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'mouseenter', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onMouseUp = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'mouseup', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onMouseDown = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'mousedown', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onDoubleClick = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'dblclick', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onClick = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'click', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$Options = F2( + function (a, b) { + return {stopPropagation: a, preventDefault: b}; + }); + +var _elm_lang$mouse$Mouse_ops = _elm_lang$mouse$Mouse_ops || {}; +_elm_lang$mouse$Mouse_ops['&>'] = F2( + function (t1, t2) { + return A2( + _elm_lang$core$Task$andThen, + function (_p0) { + return t2; + }, + t1); + }); +var _elm_lang$mouse$Mouse$onSelfMsg = F3( + function (router, _p1, state) { + var _p2 = _p1; + var _p3 = A2(_elm_lang$core$Dict$get, _p2.category, state); + if (_p3.ctor === 'Nothing') { + return _elm_lang$core$Task$succeed(state); + } else { + var send = function (tagger) { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + tagger(_p2.position)); + }; + return A2( + _elm_lang$mouse$Mouse_ops['&>'], + _elm_lang$core$Task$sequence( + A2(_elm_lang$core$List$map, send, _p3._0.taggers)), + _elm_lang$core$Task$succeed(state)); + } + }); +var _elm_lang$mouse$Mouse$init = _elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty); +var _elm_lang$mouse$Mouse$categorizeHelpHelp = F2( + function (value, maybeValues) { + var _p4 = maybeValues; + if (_p4.ctor === 'Nothing') { + return _elm_lang$core$Maybe$Just( + { + ctor: '::', + _0: value, + _1: {ctor: '[]'} + }); + } else { + return _elm_lang$core$Maybe$Just( + {ctor: '::', _0: value, _1: _p4._0}); + } + }); +var _elm_lang$mouse$Mouse$categorizeHelp = F2( + function (subs, subDict) { + categorizeHelp: + while (true) { + var _p5 = subs; + if (_p5.ctor === '[]') { + return subDict; + } else { + var _v4 = _p5._1, + _v5 = A3( + _elm_lang$core$Dict$update, + _p5._0._0, + _elm_lang$mouse$Mouse$categorizeHelpHelp(_p5._0._1), + subDict); + subs = _v4; + subDict = _v5; + continue categorizeHelp; + } + } + }); +var _elm_lang$mouse$Mouse$categorize = function (subs) { + return A2(_elm_lang$mouse$Mouse$categorizeHelp, subs, _elm_lang$core$Dict$empty); +}; +var _elm_lang$mouse$Mouse$subscription = _elm_lang$core$Native_Platform.leaf('Mouse'); +var _elm_lang$mouse$Mouse$Position = F2( + function (a, b) { + return {x: a, y: b}; + }); +var _elm_lang$mouse$Mouse$position = A3( + _elm_lang$core$Json_Decode$map2, + _elm_lang$mouse$Mouse$Position, + A2(_elm_lang$core$Json_Decode$field, 'pageX', _elm_lang$core$Json_Decode$int), + A2(_elm_lang$core$Json_Decode$field, 'pageY', _elm_lang$core$Json_Decode$int)); +var _elm_lang$mouse$Mouse$Watcher = F2( + function (a, b) { + return {taggers: a, pid: b}; + }); +var _elm_lang$mouse$Mouse$Msg = F2( + function (a, b) { + return {category: a, position: b}; + }); +var _elm_lang$mouse$Mouse$onEffects = F3( + function (router, newSubs, oldState) { + var rightStep = F3( + function (category, taggers, task) { + var tracker = A3( + _elm_lang$dom$Dom_LowLevel$onDocument, + category, + _elm_lang$mouse$Mouse$position, + function (_p6) { + return A2( + _elm_lang$core$Platform$sendToSelf, + router, + A2(_elm_lang$mouse$Mouse$Msg, category, _p6)); + }); + return A2( + _elm_lang$core$Task$andThen, + function (state) { + return A2( + _elm_lang$core$Task$andThen, + function (pid) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$core$Dict$insert, + category, + A2(_elm_lang$mouse$Mouse$Watcher, taggers, pid), + state)); + }, + _elm_lang$core$Process$spawn(tracker)); + }, + task); + }); + var bothStep = F4( + function (category, _p7, taggers, task) { + var _p8 = _p7; + return A2( + _elm_lang$core$Task$andThen, + function (state) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$core$Dict$insert, + category, + A2(_elm_lang$mouse$Mouse$Watcher, taggers, _p8.pid), + state)); + }, + task); + }); + var leftStep = F3( + function (category, _p9, task) { + var _p10 = _p9; + return A2( + _elm_lang$mouse$Mouse_ops['&>'], + _elm_lang$core$Process$kill(_p10.pid), + task); + }); + return A6( + _elm_lang$core$Dict$merge, + leftStep, + bothStep, + rightStep, + oldState, + _elm_lang$mouse$Mouse$categorize(newSubs), + _elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty)); + }); +var _elm_lang$mouse$Mouse$MySub = F2( + function (a, b) { + return {ctor: 'MySub', _0: a, _1: b}; + }); +var _elm_lang$mouse$Mouse$clicks = function (tagger) { + return _elm_lang$mouse$Mouse$subscription( + A2(_elm_lang$mouse$Mouse$MySub, 'click', tagger)); +}; +var _elm_lang$mouse$Mouse$moves = function (tagger) { + return _elm_lang$mouse$Mouse$subscription( + A2(_elm_lang$mouse$Mouse$MySub, 'mousemove', tagger)); +}; +var _elm_lang$mouse$Mouse$downs = function (tagger) { + return _elm_lang$mouse$Mouse$subscription( + A2(_elm_lang$mouse$Mouse$MySub, 'mousedown', tagger)); +}; +var _elm_lang$mouse$Mouse$ups = function (tagger) { + return _elm_lang$mouse$Mouse$subscription( + A2(_elm_lang$mouse$Mouse$MySub, 'mouseup', tagger)); +}; +var _elm_lang$mouse$Mouse$subMap = F2( + function (func, _p11) { + var _p12 = _p11; + return A2( + _elm_lang$mouse$Mouse$MySub, + _p12._0, + function (_p13) { + return func( + _p12._1(_p13)); + }); + }); +_elm_lang$core$Native_Platform.effectManagers['Mouse'] = {pkg: 'elm-lang/mouse', init: _elm_lang$mouse$Mouse$init, onEffects: _elm_lang$mouse$Mouse$onEffects, onSelfMsg: _elm_lang$mouse$Mouse$onSelfMsg, tag: 'sub', subMap: _elm_lang$mouse$Mouse$subMap}; + +var _elm_lang$window$Native_Window = function() +{ + +var size = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + callback(_elm_lang$core$Native_Scheduler.succeed({ + width: window.innerWidth, + height: window.innerHeight + })); +}); + +return { + size: size +}; + +}(); +var _elm_lang$window$Window_ops = _elm_lang$window$Window_ops || {}; +_elm_lang$window$Window_ops['&>'] = F2( + function (task1, task2) { + return A2( + _elm_lang$core$Task$andThen, + function (_p0) { + return task2; + }, + task1); + }); +var _elm_lang$window$Window$onSelfMsg = F3( + function (router, dimensions, state) { + var _p1 = state; + if (_p1.ctor === 'Nothing') { + return _elm_lang$core$Task$succeed(state); + } else { + var send = function (_p2) { + var _p3 = _p2; + return A2( + _elm_lang$core$Platform$sendToApp, + router, + _p3._0(dimensions)); + }; + return A2( + _elm_lang$window$Window_ops['&>'], + _elm_lang$core$Task$sequence( + A2(_elm_lang$core$List$map, send, _p1._0.subs)), + _elm_lang$core$Task$succeed(state)); + } + }); +var _elm_lang$window$Window$init = _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing); +var _elm_lang$window$Window$size = _elm_lang$window$Native_Window.size; +var _elm_lang$window$Window$width = A2( + _elm_lang$core$Task$map, + function (_) { + return _.width; + }, + _elm_lang$window$Window$size); +var _elm_lang$window$Window$height = A2( + _elm_lang$core$Task$map, + function (_) { + return _.height; + }, + _elm_lang$window$Window$size); +var _elm_lang$window$Window$onEffects = F3( + function (router, newSubs, oldState) { + var _p4 = {ctor: '_Tuple2', _0: oldState, _1: newSubs}; + if (_p4._0.ctor === 'Nothing') { + if (_p4._1.ctor === '[]') { + return _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing); + } else { + return A2( + _elm_lang$core$Task$andThen, + function (pid) { + return _elm_lang$core$Task$succeed( + _elm_lang$core$Maybe$Just( + {subs: newSubs, pid: pid})); + }, + _elm_lang$core$Process$spawn( + A3( + _elm_lang$dom$Dom_LowLevel$onWindow, + 'resize', + _elm_lang$core$Json_Decode$succeed( + {ctor: '_Tuple0'}), + function (_p5) { + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToSelf(router), + _elm_lang$window$Window$size); + }))); + } + } else { + if (_p4._1.ctor === '[]') { + return A2( + _elm_lang$window$Window_ops['&>'], + _elm_lang$core$Process$kill(_p4._0._0.pid), + _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing)); + } else { + return _elm_lang$core$Task$succeed( + _elm_lang$core$Maybe$Just( + {subs: newSubs, pid: _p4._0._0.pid})); + } + } + }); +var _elm_lang$window$Window$subscription = _elm_lang$core$Native_Platform.leaf('Window'); +var _elm_lang$window$Window$Size = F2( + function (a, b) { + return {width: a, height: b}; + }); +var _elm_lang$window$Window$MySub = function (a) { + return {ctor: 'MySub', _0: a}; +}; +var _elm_lang$window$Window$resizes = function (tagger) { + return _elm_lang$window$Window$subscription( + _elm_lang$window$Window$MySub(tagger)); +}; +var _elm_lang$window$Window$subMap = F2( + function (func, _p6) { + var _p7 = _p6; + return _elm_lang$window$Window$MySub( + function (_p8) { + return func( + _p7._0(_p8)); + }); + }); +_elm_lang$core$Native_Platform.effectManagers['Window'] = {pkg: 'elm-lang/window', init: _elm_lang$window$Window$init, onEffects: _elm_lang$window$Window$onEffects, onSelfMsg: _elm_lang$window$Window$onSelfMsg, tag: 'sub', subMap: _elm_lang$window$Window$subMap}; + +var _mgold$elm_animation$Animation$isStatic = function (_p0) { + var _p1 = _p0; + return _elm_lang$core$Native_Utils.eq(_p1._0.from, _p1._0.to); +}; +var _mgold$elm_animation$Animation$isScheduled = F2( + function (t, _p2) { + var _p3 = _p2; + return (_elm_lang$core$Native_Utils.cmp(t, _p3._0.start + _p3._0.delay) < 1) && (!_mgold$elm_animation$Animation$isStatic(_p3)); + }); +var _mgold$elm_animation$Animation$getTo = function (_p4) { + var _p5 = _p4; + return _p5._0.to; +}; +var _mgold$elm_animation$Animation$getFrom = function (_p6) { + var _p7 = _p6; + return _p7._0.from; +}; +var _mgold$elm_animation$Animation$getEase = function (_p8) { + var _p9 = _p8; + return _p9._0.ease; +}; +var _mgold$elm_animation$Animation$getDelay = function (_p10) { + var _p11 = _p10; + return _p11._0.delay; +}; +var _mgold$elm_animation$Animation$getStart = function (_p12) { + var _p13 = _p12; + return _p13._0.start; +}; +var _mgold$elm_animation$Animation$timeElapsed = F2( + function (t, _p14) { + var _p15 = _p14; + return A2(_elm_lang$core$Basics$max, 0, t - (_p15._0.start + _p15._0.delay)); + }); +var _mgold$elm_animation$Animation$defaultEase = function (x) { + return (1 - _elm_lang$core$Basics$cos(_elm_lang$core$Basics$pi * x)) / 2; +}; +var _mgold$elm_animation$Animation$spd = F3( + function (dos, from, to) { + var _p16 = dos; + if (_p16.ctor === 'Duration') { + return _elm_lang$core$Basics$abs(to - from) / _p16._0; + } else { + return _p16._0; + } + }); +var _mgold$elm_animation$Animation$getSpeed = function (_p17) { + var _p18 = _p17; + return A3(_mgold$elm_animation$Animation$spd, _p18._0.dos, _p18._0.from, _p18._0.to); +}; +var _mgold$elm_animation$Animation$dur = F3( + function (dos, from, to) { + var _p19 = dos; + if (_p19.ctor === 'Duration') { + return _p19._0; + } else { + return _elm_lang$core$Basics$abs(to - from) / _p19._0; + } + }); +var _mgold$elm_animation$Animation$animate = F2( + function (t, _p20) { + var _p21 = _p20; + var _p25 = _p21._0.to; + var _p24 = _p21._0.start; + var _p23 = _p21._0.from; + var duration = A3(_mgold$elm_animation$Animation$dur, _p21._0.dos, _p23, _p25); + var fr = A3(_elm_lang$core$Basics$clamp, 0, 1, ((t - _p24) - _p21._0.delay) / duration); + var eased = _p21._0.ease(fr); + var correction = function () { + var _p22 = _p21._0.ramp; + if (_p22.ctor === 'Nothing') { + return 0; + } else { + var from_ = _p22._0 * (t - _p24); + var eased_ = _mgold$elm_animation$Animation$defaultEase(fr); + return from_ - (from_ * eased_); + } + }(); + return (_p23 + ((_p25 - _p23) * eased)) + correction; + }); +var _mgold$elm_animation$Animation$velocity = F2( + function (t, u) { + var forwDiff = A2(_mgold$elm_animation$Animation$animate, t + 10, u); + var backDiff = A2(_mgold$elm_animation$Animation$animate, t - 10, u); + return (forwDiff - backDiff) / 20; + }); +var _mgold$elm_animation$Animation$timeRemaining = F2( + function (t, _p26) { + var _p27 = _p26; + var duration = A3(_mgold$elm_animation$Animation$dur, _p27._0.dos, _p27._0.from, _p27._0.to); + return A2(_elm_lang$core$Basics$max, 0, ((_p27._0.start + _p27._0.delay) + duration) - t); + }); +var _mgold$elm_animation$Animation$getDuration = function (_p28) { + var _p29 = _p28; + return A3(_mgold$elm_animation$Animation$dur, _p29._0.dos, _p29._0.from, _p29._0.to); +}; +var _mgold$elm_animation$Animation$equals = F2( + function (_p31, _p30) { + var _p32 = _p31; + var _p35 = _p32._0; + var _p33 = _p30; + var _p34 = _p33._0; + return _elm_lang$core$Native_Utils.eq(_p35.start + _p35.delay, _p34.start + _p34.delay) && (_elm_lang$core$Native_Utils.eq(_p35.from, _p34.from) && (_elm_lang$core$Native_Utils.eq(_p35.to, _p34.to) && (_elm_lang$core$Native_Utils.eq(_p35.ramp, _p34.ramp) && ((_elm_lang$core$Native_Utils.eq(_p35.dos, _p34.dos) || (_elm_lang$core$Native_Utils.cmp( + 1.0e-3, + _elm_lang$core$Basics$abs( + A3(_mgold$elm_animation$Animation$dur, _p35.dos, _p35.from, _p35.to) - A3(_mgold$elm_animation$Animation$dur, _p34.dos, _p34.from, _p34.to))) > -1)) && A2( + _elm_lang$core$List$all, + function (t) { + return _elm_lang$core$Native_Utils.eq( + _p35.ease(t), + _p34.ease(t)); + }, + { + ctor: '::', + _0: 0.1, + _1: { + ctor: '::', + _0: 0.3, + _1: { + ctor: '::', + _0: 0.7, + _1: { + ctor: '::', + _0: 0.9, + _1: {ctor: '[]'} + } + } + } + }))))); + }); +var _mgold$elm_animation$Animation$isRunning = F2( + function (t, _p36) { + var _p37 = _p36; + var _p39 = _p37._0.start; + var _p38 = _p37._0.delay; + var duration = A3(_mgold$elm_animation$Animation$dur, _p37._0.dos, _p37._0.from, _p37._0.to); + return (_elm_lang$core$Native_Utils.cmp(t, _p39 + _p38) > 0) && ((_elm_lang$core$Native_Utils.cmp(t, (_p39 + _p38) + duration) < 0) && (!_mgold$elm_animation$Animation$isStatic(_p37))); + }); +var _mgold$elm_animation$Animation$isDone = F2( + function (t, _p40) { + var _p41 = _p40; + var duration = A3(_mgold$elm_animation$Animation$dur, _p41._0.dos, _p41._0.from, _p41._0.to); + return _mgold$elm_animation$Animation$isStatic(_p41) || (_elm_lang$core$Native_Utils.cmp(t, (_p41._0.start + _p41._0.delay) + duration) > -1); + }); +var _mgold$elm_animation$Animation$AnimRecord = F7( + function (a, b, c, d, e, f, g) { + return {start: a, delay: b, dos: c, ramp: d, ease: e, from: f, to: g}; + }); +var _mgold$elm_animation$Animation$Speed = function (a) { + return {ctor: 'Speed', _0: a}; +}; +var _mgold$elm_animation$Animation$Duration = function (a) { + return {ctor: 'Duration', _0: a}; +}; +var _mgold$elm_animation$Animation$defaultDuration = _mgold$elm_animation$Animation$Duration(750 * _elm_lang$core$Time$millisecond); +var _mgold$elm_animation$Animation$A = function (a) { + return {ctor: 'A', _0: a}; +}; +var _mgold$elm_animation$Animation$animation = function (t) { + return _mgold$elm_animation$Animation$A( + A7(_mgold$elm_animation$Animation$AnimRecord, t, 0, _mgold$elm_animation$Animation$defaultDuration, _elm_lang$core$Maybe$Nothing, _mgold$elm_animation$Animation$defaultEase, 0, 1)); +}; +var _mgold$elm_animation$Animation$static = function (x) { + return _mgold$elm_animation$Animation$A( + A7(_mgold$elm_animation$Animation$AnimRecord, 0, 0, _mgold$elm_animation$Animation$defaultDuration, _elm_lang$core$Maybe$Nothing, _mgold$elm_animation$Animation$defaultEase, x, x)); +}; +var _mgold$elm_animation$Animation$undo = F2( + function (t, _p42) { + var _p43 = _p42; + var _p44 = _p43._0; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p44, + { + from: _p44.to, + to: _p44.from, + start: t, + delay: 0 - A2(_mgold$elm_animation$Animation$timeRemaining, t, _p43), + ramp: _elm_lang$core$Maybe$Nothing, + ease: function (t) { + return 1 - _p44.ease(1 - t); + } + })); + }); +var _mgold$elm_animation$Animation$retarget = F3( + function (t, newTo, _p45) { + var _p46 = _p45; + var _p49 = _p46; + var _p48 = _p46._0; + if (_elm_lang$core$Native_Utils.eq(newTo, _p48.to)) { + return _p49; + } else { + if (_mgold$elm_animation$Animation$isStatic(_p49)) { + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p48, + {start: t, to: newTo, ramp: _elm_lang$core$Maybe$Nothing})); + } else { + if (A2(_mgold$elm_animation$Animation$isScheduled, t, _p49)) { + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p48, + {to: newTo, ramp: _elm_lang$core$Maybe$Nothing})); + } else { + if (A2(_mgold$elm_animation$Animation$isDone, t, _p49)) { + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p48, + {start: t, delay: 0, from: _p48.to, to: newTo, ramp: _elm_lang$core$Maybe$Nothing})); + } else { + var newSpeed = function () { + var _p47 = _p48.dos; + if (_p47.ctor === 'Speed') { + return _p48.dos; + } else { + return _mgold$elm_animation$Animation$Speed( + A3(_mgold$elm_animation$Animation$spd, _p48.dos, _p48.from, _p48.to)); + } + }(); + var pos = A2(_mgold$elm_animation$Animation$animate, t, _p49); + var vel = A2(_mgold$elm_animation$Animation$velocity, t, _p49); + return _mgold$elm_animation$Animation$A( + A7( + _mgold$elm_animation$Animation$AnimRecord, + t, + 0, + newSpeed, + _elm_lang$core$Maybe$Just(vel), + _p48.ease, + pos, + newTo)); + } + } + } + } + }); +var _mgold$elm_animation$Animation$duration = F2( + function (x, _p50) { + var _p51 = _p50; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p51._0, + { + dos: _mgold$elm_animation$Animation$Duration(x) + })); + }); +var _mgold$elm_animation$Animation$speed = F2( + function (x, _p52) { + var _p53 = _p52; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p53._0, + { + dos: _mgold$elm_animation$Animation$Speed( + _elm_lang$core$Basics$abs(x)) + })); + }); +var _mgold$elm_animation$Animation$delay = F2( + function (x, _p54) { + var _p55 = _p54; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p55._0, + {delay: x})); + }); +var _mgold$elm_animation$Animation$ease = F2( + function (x, _p56) { + var _p57 = _p56; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p57._0, + {ease: x})); + }); +var _mgold$elm_animation$Animation$from = F2( + function (x, _p58) { + var _p59 = _p58; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p59._0, + {from: x, ramp: _elm_lang$core$Maybe$Nothing})); + }); +var _mgold$elm_animation$Animation$to = F2( + function (x, _p60) { + var _p61 = _p60; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p61._0, + {to: x, ramp: _elm_lang$core$Maybe$Nothing})); + }); + +var _user$project$Audio$play = _elm_lang$core$Native_Platform.outgoingPort( + 'play', + function (v) { + return v; + }); + +var _user$project$Dictionary_Translator$Translator = F2( + function (a, b) { + return {translate: a, audio: b}; + }); + +var _user$project$Bee$scaleBee = function (dimension) { + return _elm_lang$core$Basics$round(dimension / 8); +}; +var _user$project$Bee$_p0 = {ctor: '_Tuple2', _0: 456, _1: 640}; +var _user$project$Bee$beeHeight = _user$project$Bee$_p0._0; +var _user$project$Bee$beeWidth = _user$project$Bee$_p0._1; +var _user$project$Bee$retarget = F3( + function (time, toPosition, bee) { + var animY = A3( + _mgold$elm_animation$Animation$retarget, + time, + _elm_lang$core$Basics$toFloat(toPosition.y), + bee.animY); + var animX = A3( + _mgold$elm_animation$Animation$retarget, + time, + _elm_lang$core$Basics$toFloat(toPosition.x), + bee.animX); + return _elm_lang$core$Native_Utils.update( + bee, + {animX: animX, animY: animY}); + }); +var _user$project$Bee$animate = F2( + function (time, bee) { + var newY = A2(_mgold$elm_animation$Animation$animate, time, bee.animY); + var newX = A2(_mgold$elm_animation$Animation$animate, time, bee.animX); + return _elm_lang$core$Native_Utils.update( + bee, + { + x: _elm_lang$core$Basics$round(newX), + y: _elm_lang$core$Basics$round(newY) + }); + }); +var _user$project$Bee$beeVelocity = 0.5; +var _user$project$Bee$animateStart = F3( + function (startTime, toPosition, bee) { + var animY = A2( + _mgold$elm_animation$Animation$speed, + _user$project$Bee$beeVelocity, + A2( + _mgold$elm_animation$Animation$to, + _elm_lang$core$Basics$toFloat(toPosition.y), + A2( + _mgold$elm_animation$Animation$from, + _elm_lang$core$Basics$toFloat(bee.y), + _mgold$elm_animation$Animation$animation(startTime)))); + var animX = A2( + _mgold$elm_animation$Animation$speed, + _user$project$Bee$beeVelocity, + A2( + _mgold$elm_animation$Animation$to, + _elm_lang$core$Basics$toFloat(toPosition.x), + A2( + _mgold$elm_animation$Animation$from, + _elm_lang$core$Basics$toFloat(bee.x), + _mgold$elm_animation$Animation$animation(startTime)))); + return _elm_lang$core$Native_Utils.update( + bee, + {animX: animX, animY: animY}); + }); +var _user$project$Bee$papa = function (translator) { + return { + x: 600, + y: 100, + animX: _mgold$elm_animation$Animation$animation(0), + animY: _mgold$elm_animation$Animation$animation(0), + src: 'imgs/papa-bee.png', + audio: _elm_lang$core$Maybe$Just( + translator.audio('dad')) + }; +}; +var _user$project$Bee$mama = function (translator) { + return { + x: 100, + y: 100, + animX: _mgold$elm_animation$Animation$animation(0), + animY: _mgold$elm_animation$Animation$animation(0), + src: 'imgs/mama-bee.png', + audio: _elm_lang$core$Maybe$Just( + translator.audio('mom')) + }; +}; +var _user$project$Bee$player = { + x: 0, + y: 0, + animX: _mgold$elm_animation$Animation$animation(0), + animY: _mgold$elm_animation$Animation$animation(0), + src: 'imgs/bee-left.png', + audio: _elm_lang$core$Maybe$Nothing +}; +var _user$project$Bee$view = F2( + function (clickAction, bee) { + var wrapper = _elm_lang$html$Html$div( + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'user-select', _1: 'none'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(bee.x), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(bee.y), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + }); + var attributes = { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src(bee.src), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$height( + _user$project$Bee$scaleBee(_user$project$Bee$beeHeight)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$width( + _user$project$Bee$scaleBee(_user$project$Bee$beeWidth)), + _1: {ctor: '[]'} + } + } + }; + var attributesWithEvents = function () { + var _p1 = {ctor: '_Tuple2', _0: clickAction, _1: bee.audio}; + if (((_p1.ctor === '_Tuple2') && (_p1._0.ctor === 'Just')) && (_p1._1.ctor === 'Just')) { + return { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _p1._0._0(_p1._1._0)), + _1: attributes + }; + } else { + return attributes; + } + }(); + return wrapper( + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$img, + attributesWithEvents, + {ctor: '[]'}), + _1: {ctor: '[]'} + }); + }); +var _user$project$Bee$Bee = F6( + function (a, b, c, d, e, f) { + return {x: a, y: b, animX: c, animY: d, src: e, audio: f}; + }); +var _user$project$Bee$Position = F2( + function (a, b) { + return {x: a, y: b}; + }); + +var _user$project$Dictionary_French$audioDir = 'audio/french/'; +var _user$project$Dictionary_French$audioFile = function (file) { + return A2( + _elm_lang$core$Basics_ops['++'], + _user$project$Dictionary_French$audioDir, + A2(_elm_lang$core$Basics_ops['++'], file, '.mp3')); +}; +var _user$project$Dictionary_French$wordAudio = function (str) { + return _user$project$Dictionary_French$audioFile( + A3(_elm_community$string_extra$String_Extra$replace, 'ú', 'u', str)); +}; +var _user$project$Dictionary_French$wordToString = function (str) { + return str; +}; +var _user$project$Dictionary_French$places = _elm_lang$core$Dict$fromList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'art store', _1: 'magasin d\'art'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'grocery store', _1: 'épicerie'}, + _1: {ctor: '[]'} + } + }); +var _user$project$Dictionary_French$colors = _elm_lang$core$Dict$fromList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'red', _1: 'pula'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'orange', _1: 'kahel'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'yellow', _1: 'dilaw'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'green', _1: 'berde'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'blue', _1: 'asul'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'purple', _1: 'lila'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'black', _1: 'itim'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'white', _1: 'puti'}, + _1: {ctor: '[]'} + } + } + } + } + } + } + } + }); +var _user$project$Dictionary_French$family = _elm_lang$core$Dict$fromList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'mom', _1: 'maman'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'dad', _1: 'papa'}, + _1: {ctor: '[]'} + } + }); +var _user$project$Dictionary_French$dictionary = A3( + _elm_lang$core$List$foldl, + _elm_lang$core$Dict$union, + _elm_lang$core$Dict$empty, + { + ctor: '::', + _0: _user$project$Dictionary_French$family, + _1: { + ctor: '::', + _0: _user$project$Dictionary_French$colors, + _1: { + ctor: '::', + _0: _user$project$Dictionary_French$places, + _1: {ctor: '[]'} + } + } + }); +var _user$project$Dictionary_French$findWord = function (original) { + return A2( + _elm_lang$core$Maybe$withDefault, + original, + A2( + _elm_lang$core$Dict$get, + _elm_lang$core$String$toLower(original), + _user$project$Dictionary_French$dictionary)); +}; +var _user$project$Dictionary_French$translate = function (word) { + return _user$project$Dictionary_French$wordToString( + _user$project$Dictionary_French$findWord(word)); +}; +var _user$project$Dictionary_French$audio = function (word) { + return _user$project$Dictionary_French$wordAudio( + _user$project$Dictionary_French$findWord(word)); +}; + +var _user$project$Dictionary_Spanish$audioDir = 'audio/spanish/'; +var _user$project$Dictionary_Spanish$audioFile = function (file) { + return A2( + _elm_lang$core$Basics_ops['++'], + _user$project$Dictionary_Spanish$audioDir, + A2(_elm_lang$core$Basics_ops['++'], file, '.mp3')); +}; +var _user$project$Dictionary_Spanish$wordAudio = function (str) { + return _user$project$Dictionary_Spanish$audioFile(str); +}; +var _user$project$Dictionary_Spanish$wordToString = function (str) { + return str; +}; +var _user$project$Dictionary_Spanish$places = _elm_lang$core$Dict$fromList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'art store', _1: 'tienda de arte'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'grocery store', _1: 'el mercado'}, + _1: {ctor: '[]'} + } + }); +var _user$project$Dictionary_Spanish$colors = _elm_lang$core$Dict$fromList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'red', _1: 'rojo'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'orange', _1: 'naranja'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'yellow', _1: 'amarillo'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'green', _1: 'verde'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'blue', _1: 'azul'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'purple', _1: 'púrpura'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'black', _1: 'negro'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'white', _1: 'blanco'}, + _1: {ctor: '[]'} + } + } + } + } + } + } + } + }); +var _user$project$Dictionary_Spanish$family = _elm_lang$core$Dict$fromList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'mom', _1: 'mamá'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'dad', _1: 'papá'}, + _1: {ctor: '[]'} + } + }); +var _user$project$Dictionary_Spanish$dictionary = A3( + _elm_lang$core$List$foldl, + _elm_lang$core$Dict$union, + _elm_lang$core$Dict$empty, + { + ctor: '::', + _0: _user$project$Dictionary_Spanish$family, + _1: { + ctor: '::', + _0: _user$project$Dictionary_Spanish$colors, + _1: { + ctor: '::', + _0: _user$project$Dictionary_Spanish$places, + _1: {ctor: '[]'} + } + } + }); +var _user$project$Dictionary_Spanish$findWord = function (original) { + return A2( + _elm_lang$core$Maybe$withDefault, + original, + A2( + _elm_lang$core$Dict$get, + _elm_lang$core$String$toLower(original), + _user$project$Dictionary_Spanish$dictionary)); +}; +var _user$project$Dictionary_Spanish$translate = function (word) { + return _user$project$Dictionary_Spanish$wordToString( + _user$project$Dictionary_Spanish$findWord(word)); +}; +var _user$project$Dictionary_Spanish$audio = function (word) { + return _user$project$Dictionary_Spanish$wordAudio( + _user$project$Dictionary_Spanish$findWord(word)); +}; + +var _wernerdegroot$listzipper$List_Zipper$after = function (_p0) { + var _p1 = _p0; + return _p1._2; +}; +var _wernerdegroot$listzipper$List_Zipper$current = function (_p2) { + var _p3 = _p2; + return _p3._1; +}; +var _wernerdegroot$listzipper$List_Zipper$before = function (_p4) { + var _p5 = _p4; + return _elm_lang$core$List$reverse(_p5._0); +}; +var _wernerdegroot$listzipper$List_Zipper$toList = function (z) { + return A2( + _elm_lang$core$Basics_ops['++'], + _wernerdegroot$listzipper$List_Zipper$before(z), + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: _wernerdegroot$listzipper$List_Zipper$current(z), + _1: {ctor: '[]'} + }, + _wernerdegroot$listzipper$List_Zipper$after(z))); +}; +var _wernerdegroot$listzipper$List_Zipper$Zipper = F3( + function (a, b, c) { + return {ctor: 'Zipper', _0: a, _1: b, _2: c}; + }); +var _wernerdegroot$listzipper$List_Zipper$singleton = function (x) { + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + {ctor: '[]'}, + x, + {ctor: '[]'}); +}; +var _wernerdegroot$listzipper$List_Zipper$withDefault = function (x) { + return _elm_lang$core$Maybe$withDefault( + _wernerdegroot$listzipper$List_Zipper$singleton(x)); +}; +var _wernerdegroot$listzipper$List_Zipper$fromList = function (xs) { + var _p6 = xs; + if (_p6.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just( + A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + {ctor: '[]'}, + _p6._0, + _p6._1)); + } +}; +var _wernerdegroot$listzipper$List_Zipper$map = F2( + function (f, _p7) { + var _p8 = _p7; + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + A2(_elm_lang$core$List$map, f, _p8._0), + f(_p8._1), + A2(_elm_lang$core$List$map, f, _p8._2)); + }); +var _wernerdegroot$listzipper$List_Zipper$mapBefore = F2( + function (f, _p9) { + var _p10 = _p9; + var elementsBefore = _wernerdegroot$listzipper$List_Zipper$before(_p10); + var mappedElementsBefore = f(elementsBefore); + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + _elm_lang$core$List$reverse(mappedElementsBefore), + _p10._1, + _p10._2); + }); +var _wernerdegroot$listzipper$List_Zipper$mapCurrent = F2( + function (f, _p11) { + var _p12 = _p11; + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + _p12._0, + f(_p12._1), + _p12._2); + }); +var _wernerdegroot$listzipper$List_Zipper$mapAfter = F2( + function (f, _p13) { + var _p14 = _p13; + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + _p14._0, + _p14._1, + f(_p14._2)); + }); +var _wernerdegroot$listzipper$List_Zipper$first = function (_p15) { + var _p16 = _p15; + var _p17 = _elm_lang$core$List$reverse(_p16._0); + if (_p17.ctor === '[]') { + return _p16; + } else { + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + {ctor: '[]'}, + _p17._0, + A2( + _elm_lang$core$Basics_ops['++'], + _p17._1, + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: _p16._1, + _1: {ctor: '[]'} + }, + _p16._2))); + } +}; +var _wernerdegroot$listzipper$List_Zipper$previous = function (_p18) { + var _p19 = _p18; + var _p20 = _p19._0; + if (_p20.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just( + A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + _p20._1, + _p20._0, + {ctor: '::', _0: _p19._1, _1: _p19._2})); + } +}; +var _wernerdegroot$listzipper$List_Zipper$next = function (_p21) { + var _p22 = _p21; + var _p23 = _p22._2; + if (_p23.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just( + A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + {ctor: '::', _0: _p22._1, _1: _p22._0}, + _p23._0, + _p23._1)); + } +}; +var _wernerdegroot$listzipper$List_Zipper$find = F2( + function (predicate, _p24) { + find: + while (true) { + var _p25 = _p24; + var _p27 = _p25; + if (predicate(_p25._1)) { + return _elm_lang$core$Maybe$Just(_p27); + } else { + var _p26 = _wernerdegroot$listzipper$List_Zipper$next(_p27); + if (_p26.ctor === 'Just') { + var _v16 = predicate, + _v17 = _p26._0; + predicate = _v16; + _p24 = _v17; + continue find; + } else { + return _elm_lang$core$Maybe$Nothing; + } + } + } + }); +var _wernerdegroot$listzipper$List_Zipper$last = function (_p28) { + var _p29 = _p28; + var _p30 = _elm_lang$core$List$reverse(_p29._2); + if (_p30.ctor === '[]') { + return _p29; + } else { + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + A2( + _elm_lang$core$Basics_ops['++'], + _p30._1, + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: _p29._1, + _1: {ctor: '[]'} + }, + _p29._0)), + _p30._0, + {ctor: '[]'}); + } +}; + +var _user$project$Location_ArtStore$tile = function (_p0) { + var _p1 = _p0; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/map-tileset.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'clip', _1: 'rect(32px 64px 64px 32px)'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._0 - 32), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._1 - 32), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + } + }, + {ctor: '[]'}); +}; +var _user$project$Location_ArtStore$exit = function (exitMsg) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(exitMsg), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Location_ArtStore$tile( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Location_ArtStore$tile( + {ctor: '_Tuple2', _0: 0, _1: 32}), + _1: { + ctor: '::', + _0: _user$project$Location_ArtStore$tile( + {ctor: '_Tuple2', _0: 32, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Location_ArtStore$tile( + {ctor: '_Tuple2', _0: 32, _1: 32}), + _1: {ctor: '[]'} + } + } + } + }); +}; +var _user$project$Location_ArtStore$splatBackgroundSize = '80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%;'; +var _user$project$Location_ArtStore$splatBackground = A2( + _elm_lang$core$Basics_ops['++'], + '-webkit-radial-gradient(red 0, red 30%, rgba(255,255,255,0) 30%) 0 0,', + A2( + _elm_lang$core$Basics_ops['++'], + '-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0,', + A2( + _elm_lang$core$Basics_ops['++'], + '-webkit-radial-gradient(red 0, red 20%, rgba(255,255,255,0) 20%) -9px 37px,', + A2( + _elm_lang$core$Basics_ops['++'], + '-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 55px 9px,', + A2(_elm_lang$core$Basics_ops['++'], '-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 8px 46px,', '-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0;'))))); +var _user$project$Location_ArtStore$deadBall = function (ball) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getX(ball.pos)), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getY(ball.pos)), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'width', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'height', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$class('poof'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$class( + A2( + _elm_lang$core$Basics_ops['++'], + 'poof', + _elm_lang$core$Basics$toString(ball.color))), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}); +}; +var _user$project$Location_ArtStore$colorSwapTime = 2000; +var _user$project$Location_ArtStore$slowdown = 1 / 10; +var _user$project$Location_ArtStore$initBottomWall = F2( + function (windowWidth, windowHeight) { + return { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth / 2, windowHeight), + halfHeight: 1, + halfWidth: windowWidth / 2 + }; + }); +var _user$project$Location_ArtStore$initTopWall = function (windowWidth) { + return { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth / 2, 0), + halfHeight: 1, + halfWidth: windowWidth / 2 + }; +}; +var _user$project$Location_ArtStore$initRightWall = F2( + function (windowWidth, windowHeight) { + return A2( + _elm_lang$core$Debug$log, + 'rightWall', + { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth, windowHeight / 2), + halfHeight: windowHeight / 2, + halfWidth: 1 + }); + }); +var _user$project$Location_ArtStore$initLeftWall = function (windowHeight) { + return { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, 0, windowHeight / 2), + halfHeight: windowHeight / 2, + halfWidth: 1 + }; +}; +var _user$project$Location_ArtStore$resolveCollision = F3( + function (_p2, b0, b1) { + var _p3 = _p2; + var _p4 = _p3.normal; + var relativeVelocity = A2(_elm_community$linear_algebra$Math_Vector2$sub, b1.velocity, b0.velocity); + var velocityAlongNormal = A2(_elm_community$linear_algebra$Math_Vector2$dot, relativeVelocity, _p4); + if (_elm_lang$core$Native_Utils.eq(_p3.penetration, 0) || (_elm_lang$core$Native_Utils.cmp(velocityAlongNormal, 0) > 0)) { + return {ctor: '_Tuple2', _0: b0, _1: b1}; + } else { + var impulse = _p4; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + b0, + { + velocity: A2(_elm_community$linear_algebra$Math_Vector2$sub, b0.velocity, impulse) + }), + _1: _elm_lang$core$Native_Utils.update( + b1, + { + velocity: A2(_elm_community$linear_algebra$Math_Vector2$add, b1.velocity, impulse) + }) + }; + } + }); +var _user$project$Location_ArtStore$removeBall = F3( + function (id, balls, deadBalls) { + var _p5 = A2( + _elm_lang$core$List$partition, + function (ball) { + return _elm_lang$core$Native_Utils.eq(ball.id, id); + }, + balls); + if (((_p5.ctor === '_Tuple2') && (_p5._0.ctor === '::')) && (_p5._0._1.ctor === '[]')) { + return { + ctor: '_Tuple2', + _0: _p5._1, + _1: A2( + _elm_lang$core$Basics_ops['++'], + deadBalls, + { + ctor: '::', + _0: _p5._0._0, + _1: {ctor: '[]'} + }) + }; + } else { + return {ctor: '_Tuple2', _0: balls, _1: deadBalls}; + } + }); +var _user$project$Location_ArtStore$initMovingBall = F5( + function (id, color, _p7, _p6, image) { + var _p8 = _p7; + var _p9 = _p6; + return { + id: id, + color: color, + radius: 32, + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p8._0, _p8._1), + velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p9._0, _p9._1), + img: image, + poof: false + }; + }); +var _user$project$Location_ArtStore$ballsPerRound = 10; +var _user$project$Location_ArtStore$nonZeroFloat = A2( + _elm_lang$core$Random$map, + _elm_lang$core$Basics$toFloat, + A2( + _elm_lang$core$Random$map, + function (i) { + return _elm_lang$core$Native_Utils.eq(i, 0) ? 1 : i; + }, + A2(_elm_lang$core$Random$int, -1, 1))); +var _user$project$Location_ArtStore$randomVelocity = A2(_elm_lang$core$Random$pair, _user$project$Location_ArtStore$nonZeroFloat, _user$project$Location_ArtStore$nonZeroFloat); +var _user$project$Location_ArtStore$randomPosition = function (window) { + return A2( + _elm_lang$core$Random$pair, + A2( + _elm_lang$core$Random$map, + _elm_lang$core$Basics$toFloat, + A2(_elm_lang$core$Random$int, 30, window.width)), + A2( + _elm_lang$core$Random$map, + _elm_lang$core$Basics$toFloat, + A2(_elm_lang$core$Random$int, 30, window.height))); +}; +var _user$project$Location_ArtStore$alwaysGen = function (x) { + return A2( + _elm_lang$core$Random$map, + function (_p10) { + return x; + }, + _elm_lang$core$Random$bool); +}; +var _user$project$Location_ArtStore$imageDir = 'imgs/colors/'; +var _user$project$Location_ArtStore$get = F2( + function (index, list) { + return _elm_lang$core$List$head( + A2(_elm_lang$core$List$drop, index, list)); + }); +var _user$project$Location_ArtStore$randItem = function (list) { + return A2( + _elm_lang$core$Random$map, + function (i) { + return A2(_user$project$Location_ArtStore$get, i, list); + }, + A2( + _elm_lang$core$Random$int, + 0, + _elm_lang$core$List$length(list) - 1)); +}; +var _user$project$Location_ArtStore$nextColor = function (colors) { + return A2( + _elm_lang$core$Maybe$withDefault, + colors, + _wernerdegroot$listzipper$List_Zipper$next(colors)); +}; +var _user$project$Location_ArtStore$unknownColors = function (colors) { + return _wernerdegroot$listzipper$List_Zipper$after(colors); +}; +var _user$project$Location_ArtStore$knownColors = function (colors) { + return { + ctor: '::', + _0: _wernerdegroot$listzipper$List_Zipper$current(colors), + _1: _wernerdegroot$listzipper$List_Zipper$before(colors) + }; +}; +var _user$project$Location_ArtStore$Model = F3( + function (a, b, c) { + return {playing: a, game: b, seed: c}; + }); +var _user$project$Location_ArtStore$ArtGame = F9( + function (a, b, c, d, e, f, g, h, i) { + return {color: a, balls: b, deadBalls: c, time: d, seed: e, finishRound: f, win: g, points: h, knownUnknownColors: i}; + }); +var _user$project$Location_ArtStore$MovingBall = F7( + function (a, b, c, d, e, f, g) { + return {id: a, color: b, pos: c, radius: d, velocity: e, img: f, poof: g}; + }); +var _user$project$Location_ArtStore$CollisionResult = F2( + function (a, b) { + return {normal: a, penetration: b}; + }); +var _user$project$Location_ArtStore$collisionBubbleBubble = F3( + function (b0b1, radius0, radius1) { + var distanceSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(b0b1); + var radiusb0b1 = radius0 + radius1; + if (_elm_lang$core$Native_Utils.eq(distanceSq, 0)) { + return A2( + _user$project$Location_ArtStore$CollisionResult, + A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), + radius0); + } else { + if (_elm_lang$core$Native_Utils.cmp(distanceSq, radiusb0b1 * radiusb0b1) > -1) { + return A2( + _user$project$Location_ArtStore$CollisionResult, + A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), + 0); + } else { + var d = _elm_lang$core$Basics$sqrt(distanceSq); + return A2( + _user$project$Location_ArtStore$CollisionResult, + A2(_elm_community$linear_algebra$Math_Vector2$scale, 1 / d, b0b1), + radiusb0b1 - d); + } + } + }); +var _user$project$Location_ArtStore$collision = F2( + function (body0, body1) { + var b0b1 = A2(_elm_community$linear_algebra$Math_Vector2$sub, body1.pos, body0.pos); + return A3(_user$project$Location_ArtStore$collisionBubbleBubble, b0b1, body0.radius, body1.radius); + }); +var _user$project$Location_ArtStore$collideWith = F3( + function (a0, bodies, acc) { + collideWith: + while (true) { + var _p11 = bodies; + if (_p11.ctor === '[]') { + return {ctor: '::', _0: a0, _1: acc}; + } else { + var _p13 = _p11._0; + var collisionResult = A2(_user$project$Location_ArtStore$collision, a0, _p13); + var _p12 = A3(_user$project$Location_ArtStore$resolveCollision, collisionResult, a0, _p13); + var a1 = _p12._0; + var b1 = _p12._1; + var _v6 = a1, + _v7 = _p11._1, + _v8 = {ctor: '::', _0: b1, _1: acc}; + a0 = _v6; + bodies = _v7; + acc = _v8; + continue collideWith; + } + } + }); +var _user$project$Location_ArtStore$collide = F2( + function (acc, bodies) { + collide: + while (true) { + var _p14 = bodies; + if (_p14.ctor === '[]') { + return acc; + } else { + var _p15 = A3( + _user$project$Location_ArtStore$collideWith, + _p14._0, + _p14._1, + {ctor: '[]'}); + if (_p15.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _v11 = A2( + _elm_lang$core$Basics_ops['++'], + acc, + { + ctor: '::', + _0: _p15._0, + _1: {ctor: '[]'} + }), + _v12 = _p15._1; + acc = _v11; + bodies = _v12; + continue collide; + } + } + } + }); +var _user$project$Location_ArtStore$collisions = function (balls) { + return A2( + _user$project$Location_ArtStore$collide, + {ctor: '[]'}, + balls); +}; +var _user$project$Location_ArtStore$collisionBoxBubble = F2( + function (_p17, _p16) { + var _p18 = _p17; + var _p25 = _p18._1; + var _p19 = _p16; + var _p24 = _p19._1; + var _p20 = { + ctor: '_Tuple2', + _0: _elm_community$linear_algebra$Math_Vector2$getX(_p25), + _1: _elm_community$linear_algebra$Math_Vector2$getY(_p25) + }; + var boxX = _p20._0; + var boxY = _p20._1; + var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p19._0, _p18._0); + var _p21 = { + ctor: '_Tuple2', + _0: _elm_community$linear_algebra$Math_Vector2$getX(dist), + _1: _elm_community$linear_algebra$Math_Vector2$getY(dist) + }; + var dx = _p21._0; + var dy = _p21._1; + var c = A2( + _elm_community$linear_algebra$Math_Vector2$vec2, + A3(_elm_lang$core$Basics$clamp, 0 - boxX, boxX, dx), + A3(_elm_lang$core$Basics$clamp, 0 - boxY, boxY, dy)); + var _p22 = { + ctor: '_Tuple2', + _0: _elm_community$linear_algebra$Math_Vector2$getX(c), + _1: _elm_community$linear_algebra$Math_Vector2$getY(c) + }; + var cx = _p22._0; + var cy = _p22._1; + var _p23 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( + _elm_lang$core$Basics$abs(dx), + _elm_lang$core$Basics$abs(dy)) > 0) ? ((_elm_lang$core$Native_Utils.cmp(cx, 0) > 0) ? { + ctor: '_Tuple2', + _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, boxX, cy), + _1: true + } : { + ctor: '_Tuple2', + _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, 0 - boxX, cy), + _1: true + }) : ((_elm_lang$core$Native_Utils.cmp(cy, 0) > 0) ? { + ctor: '_Tuple2', + _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, cx, boxY), + _1: true + } : { + ctor: '_Tuple2', + _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, cx, 0 - boxY), + _1: true + })); + var closest = _p23._0; + var inside = _p23._1; + var normal = A2(_elm_community$linear_algebra$Math_Vector2$sub, dist, closest); + var normalLenSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(normal); + if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p24 * _p24) > 0) && (!inside)) { + return A2( + _user$project$Location_ArtStore$CollisionResult, + A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), + 0); + } else { + var penetration = _p24 + _elm_lang$core$Basics$sqrt(normalLenSq); + return inside ? A2( + _user$project$Location_ArtStore$CollisionResult, + A2( + _elm_community$linear_algebra$Math_Vector2$scale, + -1, + _elm_community$linear_algebra$Math_Vector2$normalize(normal)), + penetration) : A2( + _user$project$Location_ArtStore$CollisionResult, + _elm_community$linear_algebra$Math_Vector2$normalize(normal), + penetration); + } + }); +var _user$project$Location_ArtStore$animateBall = F3( + function (timeDiff, window, ball) { + var y = _elm_community$linear_algebra$Math_Vector2$getY(ball.pos); + var x = _elm_community$linear_algebra$Math_Vector2$getX(ball.pos); + var _p26 = { + ctor: '_Tuple2', + _0: _elm_lang$core$Basics$toFloat(window.width), + _1: _elm_lang$core$Basics$toFloat(window.height) + }; + var width = _p26._0; + var height = _p26._1; + var _p27 = { + ctor: '_Tuple4', + _0: _user$project$Location_ArtStore$initLeftWall(height), + _1: A2(_user$project$Location_ArtStore$initRightWall, width - (ball.radius * 2), height), + _2: _user$project$Location_ArtStore$initTopWall(width), + _3: A2(_user$project$Location_ArtStore$initBottomWall, width, height - (ball.radius * 2)) + }; + var leftWall = _p27._0; + var rightWall = _p27._1; + var topWall = _p27._2; + var bottomWall = _p27._3; + var leftCol = A2( + _user$project$Location_ArtStore$collisionBoxBubble, + { + ctor: '_Tuple2', + _0: leftWall.pos, + _1: A2(_elm_community$linear_algebra$Math_Vector2$vec2, leftWall.halfWidth, leftWall.halfHeight) + }, + {ctor: '_Tuple2', _0: ball.pos, _1: ball.radius}); + var newX = A3( + _elm_lang$core$Basics$clamp, + _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos), + _elm_community$linear_algebra$Math_Vector2$getX(rightWall.pos), + x + ((_elm_community$linear_algebra$Math_Vector2$getX(ball.velocity) * timeDiff) * _user$project$Location_ArtStore$slowdown)); + var newY = A3( + _elm_lang$core$Basics$clamp, + _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos), + _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos), + y + ((_elm_community$linear_algebra$Math_Vector2$getY(ball.velocity) * timeDiff) * _user$project$Location_ArtStore$slowdown)); + var newXVelocity = (_elm_lang$core$Native_Utils.eq( + newX, + _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos)) || _elm_lang$core$Native_Utils.eq( + newX, + _elm_community$linear_algebra$Math_Vector2$getX(rightWall.pos))) ? (0 - _elm_community$linear_algebra$Math_Vector2$getX(ball.velocity)) : _elm_community$linear_algebra$Math_Vector2$getX(ball.velocity); + var newYVelocity = (_elm_lang$core$Native_Utils.eq( + newY, + _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos)) || _elm_lang$core$Native_Utils.eq( + newY, + _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos))) ? (0 - _elm_community$linear_algebra$Math_Vector2$getY(ball.velocity)) : _elm_community$linear_algebra$Math_Vector2$getY(ball.velocity); + return _elm_lang$core$Native_Utils.update( + ball, + { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, newX, newY), + velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, newXVelocity, newYVelocity) + }); + }); +var _user$project$Location_ArtStore$Purple = {ctor: 'Purple'}; +var _user$project$Location_ArtStore$Blue = {ctor: 'Blue'}; +var _user$project$Location_ArtStore$Green = {ctor: 'Green'}; +var _user$project$Location_ArtStore$Yellow = {ctor: 'Yellow'}; +var _user$project$Location_ArtStore$Orange = {ctor: 'Orange'}; +var _user$project$Location_ArtStore$Red = {ctor: 'Red'}; +var _user$project$Location_ArtStore$initialColors = A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + {ctor: '[]'}, + _user$project$Location_ArtStore$Red, + { + ctor: '::', + _0: _user$project$Location_ArtStore$Orange, + _1: { + ctor: '::', + _0: _user$project$Location_ArtStore$Yellow, + _1: { + ctor: '::', + _0: _user$project$Location_ArtStore$Green, + _1: { + ctor: '::', + _0: _user$project$Location_ArtStore$Blue, + _1: { + ctor: '::', + _0: _user$project$Location_ArtStore$Purple, + _1: {ctor: '[]'} + } + } + } + } + }); +var _user$project$Location_ArtStore$randomColor = F2( + function (seed, balls) { + return A2( + _elm_lang$core$Tuple$mapFirst, + _elm_lang$core$Maybe$withDefault(_user$project$Location_ArtStore$Red), + A2( + _elm_lang$core$Tuple$mapFirst, + _elm_lang$core$Maybe$map( + function (ball) { + return ball.color; + }), + A2( + _elm_lang$core$Random$step, + _user$project$Location_ArtStore$randItem(balls), + seed))); + }); +var _user$project$Location_ArtStore$animateArtGame = F4( + function (timeDiff, window, translator, artGame) { + var newTime = artGame.time + timeDiff; + var _p28 = function () { + if (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Location_ArtStore$colorSwapTime) > 0) { + var _p29 = A2(_user$project$Location_ArtStore$randomColor, artGame.seed, artGame.balls); + var randColor = _p29._0; + var seed = _p29._1; + return { + ctor: '_Tuple3', + _0: {ctor: '_Tuple2', _0: randColor, _1: seed}, + _1: 0, + _2: _user$project$Audio$play( + translator.audio( + _elm_lang$core$Basics$toString(randColor))) + }; + } else { + return { + ctor: '_Tuple3', + _0: {ctor: '_Tuple2', _0: artGame.color, _1: artGame.seed}, + _1: newTime, + _2: _elm_lang$core$Platform_Cmd$none + }; + } + }(); + var newColor = _p28._0._0; + var newSeed = _p28._0._1; + var timeReset = _p28._1; + var cmd = _p28._2; + var _p30 = A2(_elm_lang$core$Debug$log, 'animate art game', ''); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + artGame, + { + time: timeReset, + color: newColor, + seed: newSeed, + balls: _user$project$Location_ArtStore$collisions( + A2( + _elm_lang$core$List$map, + A2(_user$project$Location_ArtStore$animateBall, timeDiff, window), + artGame.balls)) + }), + _1: cmd + }; + }); +var _user$project$Location_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromList( + { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: _user$project$Location_ArtStore$Red, + _1: { + ctor: '::', + _0: 'red-cherry.png', + _1: { + ctor: '::', + _0: 'red-umbrella.png', + _1: {ctor: '[]'} + } + } + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: _user$project$Location_ArtStore$Orange, + _1: { + ctor: '::', + _0: 'orange-tangerine.png', + _1: {ctor: '[]'} + } + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: _user$project$Location_ArtStore$Yellow, + _1: { + ctor: '::', + _0: 'yellow-banana.png', + _1: { + ctor: '::', + _0: 'yellow-car.png', + _1: { + ctor: '::', + _0: 'yellow-cheese.png', + _1: {ctor: '[]'} + } + } + } + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: _user$project$Location_ArtStore$Green, + _1: { + ctor: '::', + _0: 'green-frog.png', + _1: { + ctor: '::', + _0: 'green-turtle.png', + _1: {ctor: '[]'} + } + } + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: _user$project$Location_ArtStore$Blue, + _1: { + ctor: '::', + _0: 'blue-bird.png', + _1: { + ctor: '::', + _0: 'blue-fish.png', + _1: {ctor: '[]'} + } + } + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: _user$project$Location_ArtStore$Purple, + _1: { + ctor: '::', + _0: 'purple-octopus.png', + _1: {ctor: '[]'} + } + }, + _1: {ctor: '[]'} + } + } + } + } + } + }); +var _user$project$Location_ArtStore$randomImage = function (color) { + var options = A2(_eeue56$elm_all_dict$EveryDict$get, color, _user$project$Location_ArtStore$images); + var _p31 = options; + if (_p31.ctor === 'Nothing') { + return _user$project$Location_ArtStore$alwaysGen(''); + } else { + if (_p31._0.ctor === '[]') { + return _user$project$Location_ArtStore$alwaysGen(''); + } else { + return A2( + _elm_lang$core$Random$map, + _elm_lang$core$Maybe$withDefault(''), + _user$project$Location_ArtStore$randItem(_p31._0)); + } + } +}; +var _user$project$Location_ArtStore$randomMovingBallWithColor = F3( + function (window, color, id) { + return A4( + _elm_lang$core$Random$map3, + A2(_user$project$Location_ArtStore$initMovingBall, id, color), + _user$project$Location_ArtStore$randomPosition(window), + _user$project$Location_ArtStore$randomVelocity, + _user$project$Location_ArtStore$randomImage(color)); + }); +var _user$project$Location_ArtStore$colorGen = function (colors) { + return A2( + _elm_lang$core$Random$map, + _elm_lang$core$Maybe$withDefault(_user$project$Location_ArtStore$Red), + _user$project$Location_ArtStore$randItem(colors)); +}; +var _user$project$Location_ArtStore$randomMovingBall = F3( + function (window, colors, id) { + return A2( + _elm_lang$core$Random$andThen, + function (color) { + return A4( + _elm_lang$core$Random$map3, + A2(_user$project$Location_ArtStore$initMovingBall, id, color), + _user$project$Location_ArtStore$randomPosition(window), + _user$project$Location_ArtStore$randomVelocity, + _user$project$Location_ArtStore$randomImage(color)); + }, + _user$project$Location_ArtStore$colorGen(colors)); + }); +var _user$project$Location_ArtStore$initialBalls = F2( + function (window, colors) { + var initialLength = _elm_lang$core$List$length(colors); + var oneOfEach = A2( + _elm_lang$core$List$map, + function (_p32) { + var _p33 = _p32; + return A3(_user$project$Location_ArtStore$randomMovingBallWithColor, window, _p33._0, _p33._1); + }, + A2( + _elm_community$list_extra$List_Extra$zip, + colors, + A2(_elm_lang$core$List$range, 0, initialLength - 1))); + var random = A2( + _elm_lang$core$List$map, + A2(_user$project$Location_ArtStore$randomMovingBall, window, colors), + A2(_elm_lang$core$List$range, initialLength, _user$project$Location_ArtStore$ballsPerRound - 1)); + var _p34 = A2( + _elm_lang$core$Debug$log, + '(oneOfEach, random)', + { + ctor: '_Tuple2', + _0: _elm_lang$core$List$length(oneOfEach), + _1: _elm_lang$core$List$length(random) + }); + var _p35 = A2( + _elm_lang$core$Debug$log, + '(initialLength, remainder)', + {ctor: '_Tuple2', _0: initialLength, _1: _user$project$Location_ArtStore$ballsPerRound - initialLength}); + return _elm_community$random_extra$Random_Extra$combine( + A2(_elm_lang$core$Basics_ops['++'], oneOfEach, random)); + }); +var _user$project$Location_ArtStore$initArtGame = F3( + function (window, colors, seed) { + var _p36 = A2( + _elm_lang$core$Random$step, + A2( + _user$project$Location_ArtStore$initialBalls, + window, + { + ctor: '::', + _0: _wernerdegroot$listzipper$List_Zipper$current(colors), + _1: _wernerdegroot$listzipper$List_Zipper$before(colors) + }), + seed); + var balls = _p36._0; + var newSeed = _p36._1; + return { + ctor: '_Tuple2', + _0: { + time: 0, + seed: newSeed, + points: 0, + color: _wernerdegroot$listzipper$List_Zipper$current(colors), + balls: balls, + deadBalls: {ctor: '[]'}, + win: false, + finishRound: false, + knownUnknownColors: colors + }, + _1: newSeed + }; + }); +var _user$project$Location_ArtStore$init = F2( + function (window, seed) { + var _p37 = A3(_user$project$Location_ArtStore$initArtGame, window, _user$project$Location_ArtStore$initialColors, seed); + var game = _p37._0; + var newSeed = _p37._1; + return { + ctor: '_Tuple2', + _0: {game: game, playing: false, seed: newSeed}, + _1: newSeed + }; + }); +var _user$project$Location_ArtStore$Tick = function (a) { + return {ctor: 'Tick', _0: a}; +}; +var _user$project$Location_ArtStore$ExitStore = {ctor: 'ExitStore'}; +var _user$project$Location_ArtStore$PlayAudio = function (a) { + return {ctor: 'PlayAudio', _0: a}; +}; +var _user$project$Location_ArtStore$colorCircle = F3( + function (_p38, color, audio) { + var _p39 = _p38; + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border-radius', _1: '50%'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'background-color', _1: color}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p39._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p39._1), + 'px') + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} + } + } + } + } + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Location_ArtStore$PlayAudio(audio)), + _1: {ctor: '[]'} + } + }, + {ctor: '[]'}); + }); +var _user$project$Location_ArtStore$NextRound = {ctor: 'NextRound'}; +var _user$project$Location_ArtStore$FinishGame = {ctor: 'FinishGame'}; +var _user$project$Location_ArtStore$backButton = function (_p40) { + var _p41 = _p40; + return A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p41._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p41._1), + 'px') + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} + } + } + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Location_ArtStore$FinishGame), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Back'), + _1: {ctor: '[]'} + }); +}; +var _user$project$Location_ArtStore$Play = {ctor: 'Play'}; +var _user$project$Location_ArtStore$playButton = function (_p42) { + var _p43 = _p42; + return A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p43._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p43._1), + 'px') + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} + } + } + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Location_ArtStore$Play), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Play!'), + _1: {ctor: '[]'} + }); +}; +var _user$project$Location_ArtStore$ColorClicked = F3( + function (a, b, c) { + return {ctor: 'ColorClicked', _0: a, _1: b, _2: c}; + }); +var _user$project$Location_ArtStore$colorBall = F2( + function (gameColor, ball) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border-radius', _1: '50%'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'background-image', + _1: A2( + _elm_lang$core$Basics_ops['++'], + 'url(', + A2( + _elm_lang$core$Basics_ops['++'], + _user$project$Location_ArtStore$imageDir, + A2(_elm_lang$core$Basics_ops['++'], ball.img, ')'))) + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'background-size', _1: 'contain'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'background-repeat', _1: 'no-repeat'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getX(ball.pos)), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getY(ball.pos)), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'width', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'height', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + } + } + } + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onMouseDown( + A3(_user$project$Location_ArtStore$ColorClicked, ball.id, gameColor, ball.color)), + _1: {ctor: '[]'} + } + }, + {ctor: '[]'}); + }); +var _user$project$Location_ArtStore$colorGame = F2( + function (translator, game) { + var balls = A2( + _elm_lang$core$Basics_ops['++'], + A2(_elm_lang$core$List$map, _user$project$Location_ArtStore$deadBall, game.deadBalls), + A2( + _elm_lang$core$List$map, + _user$project$Location_ArtStore$colorBall(game.color), + game.balls)); + var content = (game.finishRound || game.win) ? { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Location_ArtStore$NextRound), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Next Round'), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Location_ArtStore$FinishGame), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Finish'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }), + _1: {ctor: '[]'} + } : { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + {ctor: '[]'}), + _1: {ctor: '[]'} + }; + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: _elm_lang$html$Html$text( + A2( + _elm_lang$core$Basics_ops['++'], + 'Color: ', + translator.translate( + _elm_lang$core$Basics$toString(game.color)))), + _1: {ctor: '[]'} + }, + A2(_elm_lang$core$Basics_ops['++'], content, balls))); + }); +var _user$project$Location_ArtStore$view = F2( + function (translator, model) { + var _p44 = model.playing; + if (_p44 === true) { + return A2(_user$project$Location_ArtStore$colorGame, translator, model.game); + } else { + var showCircle = F2( + function (n, _p45) { + var _p46 = _p45; + return A3( + _user$project$Location_ArtStore$colorCircle, + {ctor: '_Tuple2', _0: 96 * n, _1: 96}, + _p46._0, + _p46._1); + }); + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Location_ArtStore$exit(_user$project$Location_ArtStore$ExitStore), + _1: { + ctor: '::', + _0: _user$project$Location_ArtStore$playButton( + {ctor: '_Tuple2', _0: 192, _1: 10}), + _1: A2( + _elm_lang$core$List$indexedMap, + showCircle, + { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'black', + _1: translator.audio('black') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'white', + _1: translator.audio('white') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'red', + _1: translator.audio('red') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'blue', + _1: translator.audio('blue') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'yellow', + _1: translator.audio('yellow') + }, + _1: {ctor: '[]'} + } + } + } + } + }) + } + }); + } + }); +var _user$project$Location_ArtStore$NoOp = {ctor: 'NoOp'}; +var _user$project$Location_ArtStore$tick = F4( + function (timeDelta, window, translator, model) { + var _p47 = A4(_user$project$Location_ArtStore$animateArtGame, timeDelta, window, translator, model.game); + var newArtGame = _p47._0; + var cmd = _p47._1; + return { + ctor: '_Tuple3', + _0: _elm_lang$core$Native_Utils.update( + model, + {game: newArtGame}), + _1: _user$project$Location_ArtStore$NoOp, + _2: cmd + }; + }); +var _user$project$Location_ArtStore$Exit = {ctor: 'Exit'}; +var _user$project$Location_ArtStore$AddPoints = function (a) { + return {ctor: 'AddPoints', _0: a}; +}; +var _user$project$Location_ArtStore$colorClicked = F2( + function (_p48, model) { + var _p49 = _p48; + if (!_elm_lang$core$Native_Utils.eq(_p49._1, _p49._2)) { + return {ctor: '_Tuple3', _0: model, _1: _user$project$Location_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + } else { + var artGame = model.game; + var _p50 = A3(_user$project$Location_ArtStore$removeBall, _p49._0, artGame.balls, artGame.deadBalls); + var newBalls = _p50._0; + var deadBalls = _p50._1; + var finishRound = _elm_lang$core$Native_Utils.eq( + _elm_lang$core$List$length(newBalls), + 0); + var win = finishRound && _elm_lang$core$Native_Utils.eq( + _elm_lang$core$List$length( + _user$project$Location_ArtStore$unknownColors(artGame.knownUnknownColors)), + 0); + var newArtGame = _elm_lang$core$Native_Utils.update( + artGame, + {balls: newBalls, deadBalls: deadBalls, finishRound: finishRound, win: win}); + return { + ctor: '_Tuple3', + _0: _elm_lang$core$Native_Utils.update( + model, + {game: newArtGame}), + _1: _user$project$Location_ArtStore$AddPoints(10), + _2: _user$project$Audio$play('audio/puff.mp3') + }; + } + }); +var _user$project$Location_ArtStore$update = F4( + function (window, translator, msg, model) { + update: + while (true) { + var _p51 = msg; + switch (_p51.ctor) { + case 'ColorClicked': + return A2( + _user$project$Location_ArtStore$colorClicked, + {ctor: '_Tuple3', _0: _p51._0, _1: _p51._1, _2: _p51._2}, + model); + case 'Play': + var _v24 = window, + _v25 = translator, + _v26 = _user$project$Location_ArtStore$PlayAudio( + translator.audio( + _elm_lang$core$Basics$toString(model.game.color))), + _v27 = _elm_lang$core$Native_Utils.update( + model, + {playing: true}); + window = _v24; + translator = _v25; + msg = _v26; + model = _v27; + continue update; + case 'NextRound': + var _p52 = A3( + _user$project$Location_ArtStore$initArtGame, + window, + _user$project$Location_ArtStore$nextColor(model.game.knownUnknownColors), + model.seed); + var nextArtGame = _p52._0; + var newSeed = _p52._1; + var _v28 = window, + _v29 = translator, + _v30 = _user$project$Location_ArtStore$Play, + _v31 = _elm_lang$core$Native_Utils.update( + model, + {game: nextArtGame, seed: newSeed}); + window = _v28; + translator = _v29; + msg = _v30; + model = _v31; + continue update; + case 'FinishGame': + return { + ctor: '_Tuple3', + _0: _elm_lang$core$Native_Utils.update( + model, + {playing: false}), + _1: _user$project$Location_ArtStore$NoOp, + _2: _elm_lang$core$Platform_Cmd$none + }; + case 'PlayAudio': + return { + ctor: '_Tuple3', + _0: model, + _1: _user$project$Location_ArtStore$NoOp, + _2: _user$project$Audio$play(_p51._0) + }; + case 'ExitStore': + return {ctor: '_Tuple3', _0: model, _1: _user$project$Location_ArtStore$Exit, _2: _elm_lang$core$Platform_Cmd$none}; + default: + return (model.playing && (!(model.game.win || model.game.finishRound))) ? A4(_user$project$Location_ArtStore$tick, _p51._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Location_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + } + } + }); + +var _user$project$Location_GroceryStore$tile = function (_p0) { + var _p1 = _p0; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/map-tileset.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'clip', _1: 'rect(32px 64px 64px 32px)'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._0 - 32), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._1 - 32), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + } + }, + {ctor: '[]'}); +}; +var _user$project$Location_GroceryStore$exit = function (exitMsg) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(exitMsg), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Location_GroceryStore$tile( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Location_GroceryStore$tile( + {ctor: '_Tuple2', _0: 0, _1: 32}), + _1: { + ctor: '::', + _0: _user$project$Location_GroceryStore$tile( + {ctor: '_Tuple2', _0: 32, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Location_GroceryStore$tile( + {ctor: '_Tuple2', _0: 32, _1: 32}), + _1: {ctor: '[]'} + } + } + } + }); +}; +var _user$project$Location_GroceryStore$init = {}; +var _user$project$Location_GroceryStore$Model = {}; +var _user$project$Location_GroceryStore$ExitStore = {ctor: 'ExitStore'}; +var _user$project$Location_GroceryStore$PlayAudio = function (a) { + return {ctor: 'PlayAudio', _0: a}; +}; +var _user$project$Location_GroceryStore$groceryItem = F3( + function (_p2, image, audio) { + var _p3 = _p2; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src(image), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p3._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p3._1), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Location_GroceryStore$PlayAudio(audio)), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}); + }); +var _user$project$Location_GroceryStore$view = F3( + function (mapSize, translator, model) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Location_GroceryStore$exit(_user$project$Location_GroceryStore$ExitStore), + _1: { + ctor: '::', + _0: A3( + _user$project$Location_GroceryStore$groceryItem, + {ctor: '_Tuple2', _0: 64, _1: 96}, + 'imgs/banana.png', + 'audio/el_platano.mp3'), + _1: { + ctor: '::', + _0: A3( + _user$project$Location_GroceryStore$groceryItem, + {ctor: '_Tuple2', _0: 192, _1: 96}, + 'imgs/milk.png', + 'audio/leche.mp3'), + _1: {ctor: '[]'} + } + } + }); + }); +var _user$project$Location_GroceryStore$NoOp = {ctor: 'NoOp'}; +var _user$project$Location_GroceryStore$Exit = {ctor: 'Exit'}; +var _user$project$Location_GroceryStore$update = F4( + function (window, translator, msg, model) { + var _p4 = msg; + if (_p4.ctor === 'ExitStore') { + return {ctor: '_Tuple3', _0: model, _1: _user$project$Location_GroceryStore$Exit, _2: _elm_lang$core$Platform_Cmd$none}; + } else { + return { + ctor: '_Tuple3', + _0: model, + _1: _user$project$Location_GroceryStore$NoOp, + _2: _user$project$Audio$play(_p4._0) + }; + } + }); +var _user$project$Location_GroceryStore$AddPoints = function (a) { + return {ctor: 'AddPoints', _0: a}; +}; + +var _user$project$Location_Home$tile = function (_p0) { + var _p1 = _p0; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/map-tileset.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'clip', _1: 'rect(32px 64px 64px 32px)'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._0 - 32), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._1 - 32), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + } + }, + {ctor: '[]'}); +}; +var _user$project$Location_Home$exit = function (exitMsg) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(exitMsg), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Location_Home$tile( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Location_Home$tile( + {ctor: '_Tuple2', _0: 0, _1: 32}), + _1: { + ctor: '::', + _0: _user$project$Location_Home$tile( + {ctor: '_Tuple2', _0: 32, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Location_Home$tile( + {ctor: '_Tuple2', _0: 32, _1: 32}), + _1: {ctor: '[]'} + } + } + } + }); +}; +var _user$project$Location_Home$init = {}; +var _user$project$Location_Home$Model = {}; +var _user$project$Location_Home$ExitHome = {ctor: 'ExitHome'}; +var _user$project$Location_Home$PlayAudio = function (a) { + return {ctor: 'PlayAudio', _0: a}; +}; +var _user$project$Location_Home$view = F2( + function (mapSize, translator) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Location_Home$exit(_user$project$Location_Home$ExitHome), + _1: { + ctor: '::', + _0: A2( + _user$project$Bee$view, + _elm_lang$core$Maybe$Just(_user$project$Location_Home$PlayAudio), + _user$project$Bee$mama(translator)), + _1: { + ctor: '::', + _0: A2( + _user$project$Bee$view, + _elm_lang$core$Maybe$Just(_user$project$Location_Home$PlayAudio), + _user$project$Bee$papa(translator)), + _1: {ctor: '[]'} + } + } + }); + }); +var _user$project$Location_Home$NoOp = {ctor: 'NoOp'}; +var _user$project$Location_Home$Exit = {ctor: 'Exit'}; +var _user$project$Location_Home$update = F4( + function (window, translator, msg, model) { + var _p2 = msg; + if (_p2.ctor === 'PlayAudio') { + return { + ctor: '_Tuple3', + _0: model, + _1: _user$project$Location_Home$NoOp, + _2: _user$project$Audio$play(_p2._0) + }; + } else { + return {ctor: '_Tuple3', _0: model, _1: _user$project$Location_Home$Exit, _2: _elm_lang$core$Platform_Cmd$none}; + } + }); +var _user$project$Location_Home$AddPoints = function (a) { + return {ctor: 'AddPoints', _0: a}; +}; + +var _user$project$Map$tile = function (_p0) { + var _p1 = _p0; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/map-tileset.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'clip', _1: 'rect(32px 64px 64px 32px)'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._0 - 32), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._1 - 32), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + } + }, + {ctor: '[]'}); +}; +var _user$project$Map$row = F2( + function (width, y) { + return A2( + _elm_lang$core$List$map, + function (i) { + return _user$project$Map$tile( + {ctor: '_Tuple2', _0: i * 32, _1: y}); + }, + A2(_elm_lang$core$List$range, 0, width)); + }); +var _user$project$Map$tileCountFromPixels = function (pixels) { + return _elm_lang$core$Basics$round( + _elm_lang$core$Basics$toFloat(pixels) / 32); +}; +var _user$project$Map$px = function (x) { + return A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(x), + 'px'); +}; +var _user$project$Map$body = function (level) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: _user$project$Map$px(100) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'bottom', + _1: _user$project$Map$px(0) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'height', + _1: _user$project$Map$px(100) + }, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: level, + _1: {ctor: '[]'} + }); +}; +var _user$project$Map_ops = _user$project$Map_ops || {}; +_user$project$Map_ops['=>'] = F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }); +var _user$project$Map$init = function (level) { + return { + level: level, + points: 0, + seed: _elm_lang$core$Random$initialSeed(0) + }; +}; +var _user$project$Map$Map = F3( + function (a, b, c) { + return {level: a, points: b, seed: c}; + }); +var _user$project$Map$ArtStore = function (a) { + return {ctor: 'ArtStore', _0: a}; +}; +var _user$project$Map$GroceryStore = function (a) { + return {ctor: 'GroceryStore', _0: a}; +}; +var _user$project$Map$Home = function (a) { + return {ctor: 'Home', _0: a}; +}; +var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; +var _user$project$Map$newLevel = F3( + function (window, route, map) { + var _p2 = function () { + var _p3 = route; + switch (_p3.ctor) { + case 'HomeRoute': + return A2( + _user$project$Map_ops['=>'], + _user$project$Map$Home(_user$project$Location_Home$init), + map.seed); + case 'HomeTownRoute': + return A2(_user$project$Map_ops['=>'], _user$project$Map$HomeTown, map.seed); + case 'GroceryStoreRoute': + return A2( + _user$project$Map_ops['=>'], + _user$project$Map$GroceryStore(_user$project$Location_GroceryStore$init), + map.seed); + default: + var _p4 = A2(_user$project$Location_ArtStore$init, window, map.seed); + var store = _p4._0; + var newSeed = _p4._1; + return A2( + _user$project$Map_ops['=>'], + _user$project$Map$ArtStore(store), + newSeed); + } + }(); + var newLevel = _p2._0; + var newSeed = _p2._1; + return A2( + _user$project$Map_ops['=>'], + _elm_lang$core$Native_Utils.update( + map, + {level: newLevel, seed: newSeed}), + _elm_lang$core$Platform_Cmd$none); + }); +var _user$project$Map$Purple = {ctor: 'Purple'}; +var _user$project$Map$Blue = {ctor: 'Blue'}; +var _user$project$Map$Green = {ctor: 'Green'}; +var _user$project$Map$Yellow = {ctor: 'Yellow'}; +var _user$project$Map$Orange = {ctor: 'Orange'}; +var _user$project$Map$Red = {ctor: 'Red'}; +var _user$project$Map$GroceryStoreMsg = function (a) { + return {ctor: 'GroceryStoreMsg', _0: a}; +}; +var _user$project$Map$ArtStoreMsg = function (a) { + return {ctor: 'ArtStoreMsg', _0: a}; +}; +var _user$project$Map$tick = F4( + function (timeDelta, window, translator, map) { + var _p5 = map.level; + if (_p5.ctor === 'ArtStore') { + var _p6 = A4( + _user$project$Location_ArtStore$update, + window, + translator, + _user$project$Location_ArtStore$Tick(timeDelta), + _p5._0); + var newArtStore = _p6._0; + var msgFromPage = _p6._1; + var cmd = _p6._2; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + { + level: _user$project$Map$ArtStore(newArtStore) + }), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$ArtStoreMsg, cmd) + }; + } else { + return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; + } + }); +var _user$project$Map$HomeMsg = function (a) { + return {ctor: 'HomeMsg', _0: a}; +}; +var _user$project$Map$update = F4( + function (translator, window, msg, map) { + var _p7 = {ctor: '_Tuple2', _0: msg, _1: map.level}; + _v3_6: + do { + switch (_p7._0.ctor) { + case 'NewLevel': + return A3(_user$project$Map$newLevel, window, _p7._0._0, map); + case 'PlayAudio': + return A2( + _user$project$Map_ops['=>'], + map, + _user$project$Audio$play(_p7._0._0)); + case 'Tick': + return A4(_user$project$Map$tick, _p7._0._0, window, translator, map); + case 'HomeMsg': + if (_p7._1.ctor === 'Home') { + var _p11 = _p7._1._0; + var _p8 = A4(_user$project$Location_Home$update, window, translator, _p7._0._0, _p11); + var newHome = _p8._0; + var msgFromPage = _p8._1; + var cmd = _p8._2; + var points = function () { + var _p9 = msgFromPage; + if (_p9.ctor === 'AddPoints') { + return map.points + _p9._0; + } else { + return map.points; + } + }(); + var level = function () { + var _p10 = msgFromPage; + if (_p10.ctor === 'Exit') { + return _user$project$Map$HomeTown; + } else { + return _user$project$Map$Home(_p11); + } + }(); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {level: level, points: points}), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$HomeMsg, cmd) + }; + } else { + break _v3_6; + } + case 'ArtStoreMsg': + if (_p7._1.ctor === 'ArtStore') { + var _p12 = A4(_user$project$Location_ArtStore$update, window, translator, _p7._0._0, _p7._1._0); + var newArtStore = _p12._0; + var msgFromPage = _p12._1; + var cmd = _p12._2; + var points = function () { + var _p13 = msgFromPage; + if (_p13.ctor === 'AddPoints') { + return map.points + _p13._0; + } else { + return map.points; + } + }(); + var level = function () { + var _p14 = msgFromPage; + if (_p14.ctor === 'Exit') { + return _user$project$Map$HomeTown; + } else { + return _user$project$Map$ArtStore(newArtStore); + } + }(); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {level: level, points: points}), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$ArtStoreMsg, cmd) + }; + } else { + break _v3_6; + } + case 'GroceryStoreMsg': + if (_p7._1.ctor === 'GroceryStore') { + var _p15 = A4(_user$project$Location_GroceryStore$update, window, translator, _p7._0._0, _p7._1._0); + var newGroceryStore = _p15._0; + var msgFromPage = _p15._1; + var cmd = _p15._2; + var points = function () { + var _p16 = msgFromPage; + if (_p16.ctor === 'AddPoints') { + return map.points + _p16._0; + } else { + return map.points; + } + }(); + var level = function () { + var _p17 = msgFromPage; + if (_p17.ctor === 'Exit') { + return _user$project$Map$HomeTown; + } else { + return _user$project$Map$GroceryStore(newGroceryStore); + } + }(); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {level: level, points: points}), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$GroceryStoreMsg, cmd) + }; + } else { + break _v3_6; + } + default: + break _v3_6; + } + } while(false); + return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; + }); +var _user$project$Map$NoOp = {ctor: 'NoOp'}; +var _user$project$Map$Tick = function (a) { + return {ctor: 'Tick', _0: a}; +}; +var _user$project$Map$PlayAudio = function (a) { + return {ctor: 'PlayAudio', _0: a}; +}; +var _user$project$Map$NewLevel = function (a) { + return {ctor: 'NewLevel', _0: a}; +}; +var _user$project$Map$playButton = F2( + function (_p18, level) { + var _p19 = _p18; + return A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p19._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p19._1), + 'px') + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} + } + } + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(level)), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Play!'), + _1: {ctor: '[]'} + }); + }); +var _user$project$Map$backButton = F2( + function (_p20, level) { + var _p21 = _p20; + return A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p21._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p21._1), + 'px') + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} + } + } + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(level)), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Back'), + _1: {ctor: '[]'} + }); + }); +var _user$project$Map$exit = function (level) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(level)), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 0, _1: 32}), + _1: { + ctor: '::', + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 32, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 32, _1: 32}), + _1: {ctor: '[]'} + } + } + } + }); +}; +var _user$project$Map$ArtStoreRoute = {ctor: 'ArtStoreRoute'}; +var _user$project$Map$artStoreBuilding = F2( + function (_p22, translator) { + var _p23 = _p22; + var _p25 = _p23._1; + var _p24 = _p23._0; + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(_user$project$Map$ArtStoreRoute)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p24), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p25), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + }), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p24 + 7), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p25 + 10), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + } + } + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text( + translator.translate('art store')), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }); + }); +var _user$project$Map$GroceryStoreRoute = {ctor: 'GroceryStoreRoute'}; +var _user$project$Map$storeBuilding = F3( + function (_p26, translator, locked) { + var _p27 = _p26; + var _p30 = _p27._1; + var _p29 = _p27._0; + var _p28 = locked ? { + ctor: '_Tuple2', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Map$NoOp), + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'filter', _1: 'grayscale(100%)'}, + _1: {ctor: '[]'} + } + } : { + ctor: '_Tuple2', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(_user$project$Map$GroceryStoreRoute)), + _1: {ctor: '[]'} + }; + var click = _p28._0; + var extraAttrs = _p28._1; + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), + _1: { + ctor: '::', + _0: click, + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p29), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p30), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + }, + extraAttrs)), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p29 + 7), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p30 + 10), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + } + } + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text( + translator.translate('grocery store')), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }); + }); +var _user$project$Map$HomeTownRoute = {ctor: 'HomeTownRoute'}; +var _user$project$Map$HomeRoute = {ctor: 'HomeRoute'}; +var _user$project$Map$house = function (_p31) { + var _p32 = _p31; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/home.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(_user$project$Map$HomeRoute)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p32._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p32._1), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + }), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}); +}; +var _user$project$Map$hometown = F2( + function (mapSize, translator) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Map$house( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: A3( + _user$project$Map$storeBuilding, + {ctor: '_Tuple2', _0: 160, _1: 0}, + translator, + true), + _1: { + ctor: '::', + _0: A2( + _user$project$Map$artStoreBuilding, + {ctor: '_Tuple2', _0: 320, _1: 0}, + translator), + _1: {ctor: '[]'} + } + } + }); + }); +var _user$project$Map$view = F3( + function (mapSize, translator, map) { + var _p33 = map.level; + switch (_p33.ctor) { + case 'HomeTown': + return A2(_user$project$Map$hometown, mapSize, translator); + case 'Home': + return A2( + _elm_lang$html$Html$map, + _user$project$Map$HomeMsg, + A2(_user$project$Location_Home$view, mapSize, translator)); + case 'GroceryStore': + return A2( + _elm_lang$html$Html$map, + _user$project$Map$GroceryStoreMsg, + A3(_user$project$Location_GroceryStore$view, mapSize, translator, _p33._0)); + default: + return A2( + _elm_lang$html$Html$map, + _user$project$Map$ArtStoreMsg, + A2(_user$project$Location_ArtStore$view, translator, _p33._0)); + } + }); + +var _user$project$Main$frenchTranslator = {translate: _user$project$Dictionary_French$translate, audio: _user$project$Dictionary_French$audio}; +var _user$project$Main$translator = _user$project$Main$frenchTranslator; +var _user$project$Main$spanishTranslator = {translate: _user$project$Dictionary_Spanish$translate, audio: _user$project$Dictionary_Spanish$audio}; +var _user$project$Main$px = function (x) { + return A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(x), + 'px'); +}; +var _user$project$Main$viewPoints = function (count) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$class('points'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text( + A2( + _elm_lang$core$Basics_ops['++'], + 'Points: ', + _elm_lang$core$Basics$toString(count))), + _1: {ctor: '[]'} + }); +}; +var _user$project$Main$headerHeight = 100; +var _user$project$Main$Model = F6( + function (a, b, c, d, e, f) { + return {user: a, mouse: b, time: c, window: d, map: e, pause: f}; + }); +var _user$project$Main$Up = {ctor: 'Up'}; +var _user$project$Main$init = { + user: _user$project$Bee$player, + mouse: _user$project$Main$Up, + time: 0, + window: {width: 100, height: 100}, + pause: false, + map: _user$project$Map$init( + _user$project$Map$Home(_user$project$Location_Home$init)) +}; +var _user$project$Main$Down = function (a) { + return {ctor: 'Down', _0: a}; +}; +var _user$project$Main$Pause = {ctor: 'Pause'}; +var _user$project$Main$pauseButton = function (model) { + return model.pause ? A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Pause), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'float', _1: 'right'}, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('play'), + _1: {ctor: '[]'} + }) : A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Pause), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'float', _1: 'right'}, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('pause'), + _1: {ctor: '[]'} + }); +}; +var _user$project$Main$header = function (model) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: _user$project$Main$px(0) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'bottom', + _1: _user$project$Main$px(0) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'height', + _1: _user$project$Main$px(_user$project$Main$headerHeight) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'width', + _1: _user$project$Main$px(model.window.width) + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border-bottom', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'hsl(189, 100%, 50%)'}, + _1: {ctor: '[]'} + } + } + } + } + } + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$h1, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Lingua'), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _user$project$Main$viewPoints(model.map.points), + _1: { + ctor: '::', + _0: _user$project$Main$pauseButton(model), + _1: {ctor: '[]'} + } + } + }); +}; +var _user$project$Main$Tick = function (a) { + return {ctor: 'Tick', _0: a}; +}; +var _user$project$Main$MapMsg = function (a) { + return {ctor: 'MapMsg', _0: a}; +}; +var _user$project$Main$updateMap = F3( + function (translator, mapMsg, model) { + var window = model.window; + var mapScreen = _elm_lang$core$Native_Utils.update( + window, + {height: window.height - _user$project$Main$headerHeight}); + var _p0 = A4(_user$project$Map$update, translator, mapScreen, mapMsg, model.map); + var map = _p0._0; + var cmd = _p0._1; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + {map: map}), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$MapMsg, cmd) + }; + }); +var _user$project$Main$update = F3( + function (translator, msg, model) { + var _p1 = msg; + switch (_p1.ctor) { + case 'Pause': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + {pause: !model.pause}), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'WindowResize': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + {window: _p1._0}), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'MouseUp': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + {mouse: _user$project$Main$Up}), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'MouseDown': + var _p2 = _p1._0; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + { + mouse: _user$project$Main$Down(_p2), + user: A3(_user$project$Bee$animateStart, model.time, _p2, model.user) + }), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'Move': + var _p4 = _p1._0; + var _p3 = model.mouse; + if (_p3.ctor === 'Up') { + return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + { + mouse: _user$project$Main$Down(_p4), + user: A3(_user$project$Bee$retarget, model.time, _p4, model.user) + }), + _1: _elm_lang$core$Platform_Cmd$none + }; + } + case 'Tick': + var _p5 = _p1._0; + return A3( + _user$project$Main$updateMap, + translator, + _user$project$Map$Tick(_p5), + _elm_lang$core$Native_Utils.update( + model, + { + user: A2(_user$project$Bee$animate, model.time, model.user), + time: model.time + _p5 + })); + default: + return A3(_user$project$Main$updateMap, translator, _p1._0, model); + } + }); +var _user$project$Main$mapView = F3( + function (window, translator, map) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: _user$project$Main$px(110) + }, + _1: {ctor: '[]'} + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$map, + _user$project$Main$MapMsg, + A3( + _user$project$Map$view, + _elm_lang$core$Native_Utils.update( + window, + {height: window.height - _user$project$Main$headerHeight}), + translator, + map)), + _1: {ctor: '[]'} + }); + }); +var _user$project$Main$view = F2( + function (translator, model) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'user-select', _1: 'none'}, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Main$header(model), + _1: { + ctor: '::', + _0: A3(_user$project$Main$mapView, model.window, translator, model.map), + _1: {ctor: '[]'} + } + }); + }); +var _user$project$Main$MouseUp = function (a) { + return {ctor: 'MouseUp', _0: a}; +}; +var _user$project$Main$MouseDown = function (a) { + return {ctor: 'MouseDown', _0: a}; +}; +var _user$project$Main$WindowResize = function (a) { + return {ctor: 'WindowResize', _0: a}; +}; +var _user$project$Main$Move = function (a) { + return {ctor: 'Move', _0: a}; +}; +var _user$project$Main$subscriptions = function (model) { + if (model.pause) { + return _elm_lang$core$Platform_Sub$none; + } else { + var _p6 = model.mouse; + if (_p6.ctor === 'Up') { + return _elm_lang$core$Platform_Sub$batch( + { + ctor: '::', + _0: _elm_lang$mouse$Mouse$downs(_user$project$Main$MouseDown), + _1: { + ctor: '::', + _0: _elm_lang$animation_frame$AnimationFrame$diffs(_user$project$Main$Tick), + _1: { + ctor: '::', + _0: _elm_lang$window$Window$resizes(_user$project$Main$WindowResize), + _1: {ctor: '[]'} + } + } + }); + } else { + return _elm_lang$core$Platform_Sub$batch( + { + ctor: '::', + _0: _elm_lang$mouse$Mouse$moves(_user$project$Main$Move), + _1: { + ctor: '::', + _0: _elm_lang$mouse$Mouse$ups(_user$project$Main$MouseUp), + _1: { + ctor: '::', + _0: _elm_lang$animation_frame$AnimationFrame$diffs(_user$project$Main$Tick), + _1: { + ctor: '::', + _0: _elm_lang$window$Window$resizes(_user$project$Main$WindowResize), + _1: {ctor: '[]'} + } + } + } + }); + } + } +}; +var _user$project$Main$main = _elm_lang$html$Html$program( + { + init: { + ctor: '_Tuple2', + _0: _user$project$Main$init, + _1: A2(_elm_lang$core$Task$perform, _user$project$Main$WindowResize, _elm_lang$window$Window$size) + }, + view: _user$project$Main$view(_user$project$Main$translator), + update: _user$project$Main$update(_user$project$Main$translator), + subscriptions: _user$project$Main$subscriptions + })(); + +var Elm = {}; +Elm['Main'] = Elm['Main'] || {}; +if (typeof _user$project$Main$main !== 'undefined') { + _user$project$Main$main(Elm['Main'], 'Main', undefined); +} + +if (typeof define === "function" && define['amd']) +{ + define([], function() { return Elm; }); + return; +} + +if (typeof module === "object") +{ + module['exports'] = Elm; + return; +} + +var globalElm = this['Elm']; +if (typeof globalElm === "undefined") +{ + this['Elm'] = Elm; + return; +} + +for (var publicModule in Elm) +{ + if (publicModule in globalElm) + { + throw new Error('There are two Elm modules called `' + publicModule + '` on this page! Rename one of them.'); + } + globalElm[publicModule] = Elm[publicModule]; +} + +}).call(this); + diff --git a/empty.png b/empty.png deleted file mode 100644 index c60fa42..0000000 Binary files a/empty.png and /dev/null differ diff --git a/imgs/banana.png b/imgs/banana.png new file mode 100644 index 0000000..1479006 Binary files /dev/null and b/imgs/banana.png differ diff --git a/imgs/bee-left.png b/imgs/bee-left.png new file mode 100644 index 0000000..415792c Binary files /dev/null and b/imgs/bee-left.png differ diff --git a/imgs/colors/blue-bird.png b/imgs/colors/blue-bird.png new file mode 100644 index 0000000..a6a5a42 Binary files /dev/null and b/imgs/colors/blue-bird.png differ diff --git a/imgs/colors/blue-fish.png b/imgs/colors/blue-fish.png new file mode 100644 index 0000000..4288548 Binary files /dev/null and b/imgs/colors/blue-fish.png differ diff --git a/imgs/colors/green-frog.png b/imgs/colors/green-frog.png new file mode 100644 index 0000000..4c975a7 Binary files /dev/null and b/imgs/colors/green-frog.png differ diff --git a/imgs/colors/green-turtle.png b/imgs/colors/green-turtle.png new file mode 100644 index 0000000..439aac5 Binary files /dev/null and b/imgs/colors/green-turtle.png differ diff --git a/imgs/colors/orange-tangerine.png b/imgs/colors/orange-tangerine.png new file mode 100644 index 0000000..e163564 Binary files /dev/null and b/imgs/colors/orange-tangerine.png differ diff --git a/imgs/colors/purple-octopus.png b/imgs/colors/purple-octopus.png new file mode 100644 index 0000000..d486643 Binary files /dev/null and b/imgs/colors/purple-octopus.png differ diff --git a/imgs/colors/red-cherry.png b/imgs/colors/red-cherry.png new file mode 100644 index 0000000..6c1d240 Binary files /dev/null and b/imgs/colors/red-cherry.png differ diff --git a/imgs/colors/red-umbrella.png b/imgs/colors/red-umbrella.png new file mode 100644 index 0000000..70cd6d8 Binary files /dev/null and b/imgs/colors/red-umbrella.png differ diff --git a/imgs/colors/yellow-banana.png b/imgs/colors/yellow-banana.png new file mode 100644 index 0000000..be58f61 Binary files /dev/null and b/imgs/colors/yellow-banana.png differ diff --git a/imgs/colors/yellow-car.png b/imgs/colors/yellow-car.png new file mode 100644 index 0000000..cba4a71 Binary files /dev/null and b/imgs/colors/yellow-car.png differ diff --git a/imgs/colors/yellow-cheese.png b/imgs/colors/yellow-cheese.png new file mode 100644 index 0000000..5ff04e2 Binary files /dev/null and b/imgs/colors/yellow-cheese.png differ diff --git a/imgs/home.png b/imgs/home.png new file mode 100644 index 0000000..2ab3107 Binary files /dev/null and b/imgs/home.png differ diff --git a/imgs/mama-bee.png b/imgs/mama-bee.png new file mode 100644 index 0000000..04eb479 Binary files /dev/null and b/imgs/mama-bee.png differ diff --git a/imgs/map-tileset.png b/imgs/map-tileset.png new file mode 100644 index 0000000..36d789c Binary files /dev/null and b/imgs/map-tileset.png differ diff --git a/imgs/milk.png b/imgs/milk.png new file mode 100644 index 0000000..f74add1 Binary files /dev/null and b/imgs/milk.png differ diff --git a/imgs/papa-bee.png b/imgs/papa-bee.png new file mode 100644 index 0000000..e57fbad Binary files /dev/null and b/imgs/papa-bee.png differ diff --git a/imgs/store.png b/imgs/store.png new file mode 100644 index 0000000..6ddfc48 Binary files /dev/null and b/imgs/store.png differ diff --git a/index.html b/index.html index 83d1b71..27551b3 100644 --- a/index.html +++ b/index.html @@ -1,30 +1,21 @@ + - Sample Elm RPG - - - + Bee + - - -
- - Fork me on GitHub - - + +
+ + - diff --git a/location/ArtStore.elm b/location/ArtStore.elm new file mode 100644 index 0000000..97cdbc7 --- /dev/null +++ b/location/ArtStore.elm @@ -0,0 +1,873 @@ +module Location.ArtStore exposing (..) + +import Audio +import Dictionary.Translator exposing (Translator) +import EveryDict exposing (EveryDict) +import Html exposing (Html, button, div, img, text) +import Html.Attributes exposing (class, src, style) +import Html.Events exposing (onClick, onMouseDown) +import List.Extra +import List.Zipper as Zipper exposing (Zipper(..)) +import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) +import Random +import Random.Extra +import Time exposing (Time) +import Window + + +-- MODEL + + +type alias Model = + { playing : Bool + + -- TODO: change to maybe game instead of using 'playing' + , game : ArtGame + , seed : Random.Seed + } + + +type alias ArtGame = + { color : Color + , balls : List MovingBall + , deadBalls : List MovingBall + , time : Time + , seed : Random.Seed + , finishRound : Bool + , win : Bool + , points : Int + + -- TODO: use these to add one color at a time to the game + -- A list of known and a list of unknown colors + -- we will introduce one color at a time in the game + -- TODO: use zipper + , knownUnknownColors : Zipper Color + } + + + +{- + State + = PlayingGame (playing == true) + | SplashScreen (win == true | finishRound == true) & playing == true + | NotPlaying (playing == false) +-} + + +type alias MovingBall = + { id : Int + , color : Color + , pos : Vec2 + , radius : Float + , velocity : Vec2 + , img : String + , poof : Bool + } + + +type Color + = Red + | Orange + | Yellow + | Green + | Blue + | Purple + + +initialColors : Zipper Color +initialColors = + Zipper [] Red [ Orange, Yellow, Green, Blue, Purple ] + + +init : Window.Size -> Random.Seed -> ( Model, Random.Seed ) +init window seed = + let + ( game, newSeed ) = + initArtGame window initialColors seed + in + ( { game = game, playing = False, seed = newSeed }, newSeed ) + + +initArtGame : Window.Size -> Zipper Color -> Random.Seed -> ( ArtGame, Random.Seed ) +initArtGame window colors seed = + let + ( balls, newSeed ) = + Random.step (initialBalls window (Zipper.current colors :: Zipper.before colors)) seed + in + ( { time = 0 + , seed = newSeed + , points = 0 + , color = Zipper.current colors + , balls = balls + , deadBalls = [] + , win = False + , finishRound = False + , knownUnknownColors = colors + } + , newSeed + ) + + + +-- UPDATE + + +type Msg + = ColorClicked Int Color Color + | Play + | FinishGame + | NextRound + | PlayAudio String + | ExitStore + | Tick Time + + +type MsgFromPage + = AddPoints Int + | Exit + | NoOp + + +update : Window.Size -> Translator -> Msg -> Model -> ( Model, MsgFromPage, Cmd Msg ) +update window translator msg model = + case msg of + ColorClicked id gameColor color -> + colorClicked ( id, gameColor, color ) model + + Play -> + { model | playing = True } + |> update window translator (PlayAudio (translator.audio <| toString model.game.color)) + + NextRound -> + let + ( nextArtGame, newSeed ) = + initArtGame window (nextColor model.game.knownUnknownColors) model.seed + in + { model | game = nextArtGame, seed = newSeed } + |> update window translator Play + + FinishGame -> + ( { model | playing = False }, NoOp, Cmd.none ) + + PlayAudio file -> + ( model, NoOp, Audio.play file ) + + ExitStore -> + ( model, Exit, Cmd.none ) + + Tick timeDelta -> + if model.playing && not (model.game.win || model.game.finishRound) then + tick timeDelta window translator model + else + ( model, NoOp, Cmd.none ) + + +colorClicked : ( Int, Color, Color ) -> Model -> ( Model, MsgFromPage, Cmd Msg ) +colorClicked ( id, gameColor, colorClicked ) model = + if gameColor /= colorClicked then + ( model, NoOp, Cmd.none ) + else + let + artGame = + model.game + + ( newBalls, deadBalls ) = + removeBall id artGame.balls artGame.deadBalls + + finishRound = + List.length newBalls == 0 + + win = + finishRound + && (List.length (unknownColors artGame.knownUnknownColors) == 0) + + newArtGame = + { artGame | balls = newBalls, deadBalls = deadBalls, finishRound = finishRound, win = win } + in + ( { model + | game = newArtGame + } + , AddPoints 10 + , Audio.play "audio/puff.mp3" + ) + + +knownColors : Zipper a -> List a +knownColors colors = + Zipper.current colors :: Zipper.before colors + + +unknownColors : Zipper a -> List a +unknownColors colors = + Zipper.after colors + + +nextColor : Zipper a -> Zipper a +nextColor colors = + Zipper.next colors + |> Maybe.withDefault colors + + +tick : Time -> Window.Size -> Translator -> Model -> ( Model, MsgFromPage, Cmd Msg ) +tick timeDelta window translator model = + let + ( newArtGame, cmd ) = + animateArtGame timeDelta window translator model.game + in + ( { model + | game = newArtGame + } + , NoOp + , cmd + ) + + + +-- RANDOM + + +get : Int -> List a -> Maybe a +get index list = + list + |> List.drop index + |> List.head + + +randItem : List a -> Random.Generator (Maybe a) +randItem list = + Random.int 0 (List.length list - 1) + |> Random.map (\i -> get i list) + + +randomColor : Random.Seed -> List MovingBall -> ( Color, Random.Seed ) +randomColor seed balls = + Random.step (randItem balls) seed + |> Tuple.mapFirst (Maybe.map (\ball -> ball.color)) + |> Tuple.mapFirst (Maybe.withDefault Red) + + +imageDir = + "imgs/colors/" + + +images : EveryDict Color (List String) +images = + EveryDict.fromList + [ ( Red, [ "red-cherry.png", "red-umbrella.png" ] ) + , ( Orange, [ "orange-tangerine.png" ] ) + , ( Yellow, [ "yellow-banana.png", "yellow-car.png", "yellow-cheese.png" ] ) + , ( Green, [ "green-frog.png", "green-turtle.png" ] ) + , ( Blue, [ "blue-bird.png", "blue-fish.png" ] ) + , ( Purple, [ "purple-octopus.png" ] ) + ] + + +alwaysGen : a -> Random.Generator a +alwaysGen x = + Random.map (\_ -> x) Random.bool + + +randomImage : Color -> Random.Generator String +randomImage color = + let + options = + EveryDict.get color images + in + case options of + Nothing -> + -- should never happen + alwaysGen "" + + Just [] -> + -- should never happen + alwaysGen "" + + Just imageList -> + randItem imageList + |> Random.map (Maybe.withDefault "") + + +randomPosition : Window.Size -> Random.Generator ( Float, Float ) +randomPosition window = + Random.pair + (Random.map toFloat (Random.int 30 window.width)) + (Random.map toFloat (Random.int 30 window.height)) + + +randomVelocity : Random.Generator ( Float, Float ) +randomVelocity = + Random.pair + nonZeroFloat + nonZeroFloat + + +nonZeroFloat : Random.Generator Float +nonZeroFloat = + Random.int -1 1 + |> Random.map + (\i -> + if i == 0 then + 1 + else + i + ) + |> Random.map toFloat + + +colorGen : List Color -> Random.Generator Color +colorGen colors = + randItem colors + |> Random.map (Maybe.withDefault Red) + + +randomMovingBall : Window.Size -> List Color -> Int -> Random.Generator MovingBall +randomMovingBall window colors id = + colorGen colors + |> Random.andThen + (\color -> + Random.map3 + (initMovingBall id color) + (randomPosition window) + randomVelocity + (randomImage color) + ) + + +randomMovingBallWithColor : Window.Size -> Color -> Int -> Random.Generator MovingBall +randomMovingBallWithColor window color id = + Random.map3 + (initMovingBall id color) + (randomPosition window) + randomVelocity + (randomImage color) + + +ballsPerRound = + 10 + + +{-| TODO: ensure there is at least one of each color +-} +initialBalls : Window.Size -> List Color -> Random.Generator (List MovingBall) +initialBalls window colors = + let + initialLength = + List.length colors + + oneOfEach = + List.range 0 (initialLength - 1) + |> List.Extra.zip colors + |> List.map (\( color, id ) -> randomMovingBallWithColor window color id) + + random = + List.range initialLength (ballsPerRound - 1) + |> List.map (randomMovingBall window colors) + + _ = + Debug.log "(initialLength, remainder)" ( initialLength, ballsPerRound - initialLength ) + + _ = + Debug.log "(oneOfEach, random)" ( List.length oneOfEach, List.length random ) + in + (oneOfEach ++ random) + |> Random.Extra.combine + + +initMovingBall : Int -> Color -> ( Float, Float ) -> ( Float, Float ) -> String -> MovingBall +initMovingBall id color ( x, y ) ( vx, vy ) image = + { id = id + , color = color + , radius = 32 + , pos = vec2 x y + , velocity = vec2 vx vy + , img = image + , poof = False + } + + +removeBall : Int -> List MovingBall -> List MovingBall -> ( List MovingBall, List MovingBall ) +removeBall id balls deadBalls = + case + List.partition (\ball -> ball.id == id) balls + of + ( [ ball ], balls ) -> + ( balls, deadBalls ++ [ ball ] ) + + _ -> + ( balls, deadBalls ) + + +collisions : List MovingBall -> List MovingBall +collisions balls = + collide [] balls + + +collide : List MovingBall -> List MovingBall -> List MovingBall +collide acc bodies = + case bodies of + [] -> + acc + + h :: t -> + case collideWith h t [] of + [] -> + [] + + h1 :: t1 -> + collide (acc ++ [ h1 ]) t1 + + +collideWith : MovingBall -> List MovingBall -> List MovingBall -> List MovingBall +collideWith a0 bodies acc = + case bodies of + [] -> + a0 :: acc + + b0 :: bs -> + let + collisionResult = + collision a0 b0 + + ( a1, b1 ) = + resolveCollision collisionResult a0 b0 + in + collideWith a1 bs (b1 :: acc) + + +{-| figure out what collision resolution to use +(currently only colliding bubbles) +-} +collision : MovingBall -> MovingBall -> CollisionResult +collision body0 body1 = + let + b0b1 = + Vec2.sub body1.pos body0.pos + in + collisionBubbleBubble b0b1 body0.radius body1.radius + + +{-| calculate collision normal, penetration depth of a collision among bubbles +-- takes distance vector b0b1 and the bubble radii as argument +-} +collisionBubbleBubble : Vec2 -> Float -> Float -> CollisionResult +collisionBubbleBubble b0b1 radius0 radius1 = + let + radiusb0b1 = + radius0 + radius1 + + distanceSq = + Vec2.lengthSquared b0b1 + + -- simple optimization: doesn't compute sqrt unless necessary + in + if distanceSq == 0 then + CollisionResult (vec2 1 0) radius0 + -- same position, arbitrary normal + else if distanceSq >= radiusb0b1 * radiusb0b1 then + CollisionResult (vec2 1 0) 0 + -- no intersection, arbitrary normal + else + let + d = + sqrt distanceSq + in + CollisionResult (Vec2.scale (1 / d) b0b1) (radiusb0b1 - d) + + +resolveCollision : CollisionResult -> MovingBall -> MovingBall -> ( MovingBall, MovingBall ) +resolveCollision { normal, penetration } b0 b1 = + let + relativeVelocity = + Vec2.sub b1.velocity b0.velocity + + velocityAlongNormal = + Vec2.dot relativeVelocity normal + in + if penetration == 0 || velocityAlongNormal > 0 then + -- no collision or velocities separating + ( b0, b1 ) + else + let + impulse = + normal + in + ( { b0 | velocity = Vec2.sub b0.velocity impulse } + , { b1 | velocity = Vec2.add b1.velocity impulse } + ) + + +initLeftWall windowHeight = + { pos = vec2 0 <| windowHeight / 2 + , halfHeight = windowHeight / 2 + , halfWidth = 1 + } + + +initRightWall windowWidth windowHeight = + Debug.log "rightWall" + { pos = vec2 windowWidth (windowHeight / 2) + , halfHeight = windowHeight / 2 + , halfWidth = 1 + } + + +initTopWall windowWidth = + { pos = vec2 (windowWidth / 2) 0 + , halfHeight = 1 + , halfWidth = windowWidth / 2 + } + + +initBottomWall windowWidth windowHeight = + { pos = vec2 (windowWidth / 2) windowHeight + , halfHeight = 1 + , halfWidth = windowWidth / 2 + } + + +slowdown = + 1 / 10 + + +animateBall : Time -> Window.Size -> MovingBall -> MovingBall +animateBall timeDiff window ball = + let + ( width, height ) = + ( toFloat window.width, toFloat window.height ) + + ( leftWall, rightWall, topWall, bottomWall ) = + ( initLeftWall height + , initRightWall (width - ball.radius * 2) height + , initTopWall width + , initBottomWall width (height - ball.radius * 2) + ) + + leftCol = + collisionBoxBubble + ( leftWall.pos, vec2 leftWall.halfWidth leftWall.halfHeight ) + ( ball.pos, ball.radius ) + + x = + getX ball.pos + + y = + getY ball.pos + + newX = + (x + getX ball.velocity * timeDiff * slowdown) + |> clamp (getX leftWall.pos) (getX rightWall.pos) + + newY = + (y + getY ball.velocity * timeDiff * slowdown) + |> clamp (getY topWall.pos) (getY bottomWall.pos) + + newXVelocity = + if newX == getX leftWall.pos || newX == getX rightWall.pos then + -(getX ball.velocity) + else + getX ball.velocity + + newYVelocity = + if newY == getY topWall.pos || newY == getY bottomWall.pos then + -(getY ball.velocity) + else + getY ball.velocity + in + { ball + | pos = vec2 newX newY + , velocity = vec2 newXVelocity newYVelocity + } + + +type alias CollisionResult = + { normal : Vec2, penetration : Float } + + +{-| collide a box with a bubble + + - takes position and half-length of box, position and radius of bubble + +-} +collisionBoxBubble : ( Vec2, Vec2 ) -> ( Vec2, Float ) -> CollisionResult +collisionBoxBubble ( posBox, boxExtents ) ( posBubble, bubbleRadius ) = + let + dist = + Vec2.sub posBubble posBox + + ( dx, dy ) = + ( Vec2.getX dist, Vec2.getY dist ) + + ( boxX, boxY ) = + ( Vec2.getX boxExtents, Vec2.getY boxExtents ) + + c = + vec2 (clamp -boxX boxX dx) (clamp -boxY boxY dy) + + -- closest point on box to center of bubble + ( cx, cy ) = + ( Vec2.getX c, Vec2.getY c ) + + ( closest, inside ) = + if + --circle is outside + dist /= c + then + ( c, False ) + else if + -- circle is inside + abs dx > abs dy + then + -- clamp center to closest edge + if cx > 0 then + ( vec2 boxX cy, True ) + else + ( vec2 -boxX cy, True ) + else if cy > 0 then + ( vec2 cx boxY, True ) + else + ( vec2 cx -boxY, True ) + + normal = + Vec2.sub dist closest + + normalLenSq = + Vec2.lengthSquared normal + in + if normalLenSq > bubbleRadius * bubbleRadius && not inside then + CollisionResult (vec2 1 0) 0 + else + let + penetration = + bubbleRadius + sqrt normalLenSq + in + if inside then + CollisionResult (Vec2.scale -1 (Vec2.normalize normal)) penetration + else + CollisionResult (Vec2.normalize normal) penetration + + +{-| This is the number of milliseconds we wait +before changing colors +-} +colorSwapTime : Time +colorSwapTime = + 2000 + + +animateArtGame : Time -> Window.Size -> Translator -> ArtGame -> ( ArtGame, Cmd Msg ) +animateArtGame timeDiff window translator artGame = + let + _ = + Debug.log "animate art game" "" + + newTime = + artGame.time + timeDiff + + ( ( newColor, newSeed ), timeReset, cmd ) = + if newTime > colorSwapTime then + let + ( randColor, seed ) = + randomColor artGame.seed artGame.balls + in + ( ( randColor, seed ), 0, Audio.play (translator.audio <| toString randColor) ) + else + ( ( artGame.color, artGame.seed ), newTime, Cmd.none ) + in + ( { artGame + | time = timeReset + , color = newColor + , seed = newSeed + , balls = + artGame.balls + |> List.map (animateBall timeDiff window) + |> collisions + } + , cmd + ) + + + +-- VIEW + + +{-| artStore : PlayGame -> Map -> Html Msg +artStore play map = +-} +view : Translator -> Model -> Html Msg +view translator model = + case model.playing of + True -> + colorGame translator model.game + + False -> + let + showCircle n ( color, audio ) = + colorCircle ( 96 * n, 96 ) color audio + in + div [] <| + exit ExitStore + :: playButton ( 192, 10 ) + -- :: backButton ( 130, 0 ) + :: List.indexedMap showCircle + [ ( "black", translator.audio "black" ) + , ( "white", translator.audio "white" ) + , ( "red", translator.audio "red" ) + , ( "blue", translator.audio "blue" ) + , ( "yellow", translator.audio "yellow" ) + ] + + +colorCircle : ( Int, Int ) -> String -> String -> Html Msg +colorCircle ( x, y ) color audio = + div + [ style + [ ( "border-radius", "50%" ) + , ( "background-color", color ) + , ( "border", "1px solid black" ) + , ( "position", "absolute" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + , ( "width", "64px" ) + , ( "height", "64px" ) + ] + , onClick (PlayAudio audio) + ] + [] + + +colorGame : Translator -> ArtGame -> Html Msg +colorGame translator game = + let + content = + if game.finishRound || game.win then + [ div [] + [ button [ onClick NextRound ] [ text "Next Round" ] + , button [ onClick FinishGame ] [ text "Finish" ] + ] + ] + else + [ div [] [] ] + + balls = + List.map deadBall game.deadBalls + ++ List.map (colorBall game.color) game.balls + in + div [] + ([ text ("Color: " ++ translator.translate (toString game.color)) + ] + ++ content + ++ balls + ) + + +colorBall : Color -> MovingBall -> Html Msg +colorBall gameColor ball = + div + [ style + [ ( "border-radius", "50%" ) + , ( "background-color", "white" ) + , ( "background-image", "url(" ++ imageDir ++ ball.img ++ ")" ) + , ( "background-size", "contain" ) + , ( "background-repeat", "no-repeat" ) + , ( "border", "1px solid black" ) + , ( "position", "absolute" ) + , ( "left", (toString <| getX ball.pos) ++ "px" ) + , ( "top", (toString <| getY ball.pos) ++ "px" ) + , ( "width", toString (ball.radius * 2) ++ "px" ) + , ( "height", toString (ball.radius * 2) ++ "px" ) + ] + , onMouseDown (ColorClicked ball.id gameColor ball.color) + ] + [] + + +deadBall : MovingBall -> Html Msg +deadBall ball = + div + [ style + [ ( "position", "absolute" ) + , ( "left", (toString <| getX ball.pos) ++ "px" ) + , ( "top", (toString <| getY ball.pos) ++ "px" ) + , ( "width", toString (ball.radius * 2) ++ "px" ) + , ( "height", toString (ball.radius * 2) ++ "px" ) + + -- Using external CSS sheet until I can get these working in elm + -- , ( "background", splatBackground ) + -- , ( "background-repeat", "no-repeat" ) + -- , ( "background-size", splatBackgroundSize ) + ] + , class "poof" + , class <| "poof" ++ toString ball.color + ] + [] + + +splatBackground : String +splatBackground = + "-webkit-radial-gradient(red 0, red 30%, rgba(255,255,255,0) 30%) 0 0," + ++ "-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0," + ++ "-webkit-radial-gradient(red 0, red 20%, rgba(255,255,255,0) 20%) -9px 37px," + ++ "-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 55px 9px," + ++ "-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 8px 46px," + ++ "-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0;" + + +splatBackgroundSize : String +splatBackgroundSize = + "80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%;" + + +playButton : ( Int, Int ) -> Html Msg +playButton ( x, y ) = + button + [ style + [ ( "border", "1px solid black" ) + , ( "position", "absolute" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + , ( "width", "128px" ) + , ( "height", "64px" ) + ] + , onClick Play + ] + [ text "Play!" ] + + +backButton : ( Int, Int ) -> Html Msg +backButton ( x, y ) = + button + [ style + [ ( "border", "1px solid black" ) + , ( "position", "absolute" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + , ( "width", "128px" ) + , ( "height", "64px" ) + ] + , onClick FinishGame + ] + [ text "Back" ] + + +exit : Msg -> Html Msg +exit exitMsg = + div [ onClick exitMsg ] + [ tile ( 0, 0 ) + , tile ( 0, 32 ) + , tile ( 32, 0 ) + , tile ( 32, 32 ) + ] + + +tile : ( Int, Int ) -> Html msg +tile ( x, y ) = + img + [ src "imgs/map-tileset.png" + , style + [ ( "position", "absolute" ) + , ( "clip", "rect(32px 64px 64px 32px)" ) + , ( "left", toString (x - 32) ++ "px" ) + , ( "top", toString (y - 32) ++ "px" ) + ] + ] + [] diff --git a/location/GroceryStore.elm b/location/GroceryStore.elm new file mode 100644 index 0000000..357f49c --- /dev/null +++ b/location/GroceryStore.elm @@ -0,0 +1,101 @@ +module Location.GroceryStore exposing (..) + +import Audio +import Bee exposing (Bee) +import Dictionary.Translator exposing (Translator) +import Html exposing (Html, button, div, h1, img, text) +import Html.Attributes exposing (class, src, style) +import Html.Events exposing (onClick, onMouseDown) +import Window + + +-- MODEL + + +type alias Model = + {} + + +init : Model +init = + {} + + + +-- UPDATE + + +type Msg + = PlayAudio String + | ExitStore + + +type MsgFromPage + = AddPoints Int + | Exit + | NoOp + + +update : Window.Size -> Translator -> Msg -> Model -> ( Model, MsgFromPage, Cmd Msg ) +update window translator msg model = + case msg of + ExitStore -> + ( model, Exit, Cmd.none ) + + PlayAudio file -> + ( model, NoOp, Audio.play file ) + + + +-- VIEW + + +view : Window.Size -> Translator -> Model -> Html Msg +view mapSize translator model = + div [] + [ exit ExitStore + + -- , playButton ( 192, 10 ) GroceryStoreRoute + , groceryItem ( 64, 96 ) "imgs/banana.png" "audio/el_platano.mp3" + , groceryItem ( 192, 96 ) "imgs/milk.png" "audio/leche.mp3" + ] + + +groceryItem : ( Int, Int ) -> String -> String -> Html Msg +groceryItem ( x, y ) image audio = + img + [ src image + , style + [ ( "width", "64px" ) + , ( "height", "64px" ) + , ( "position", "absolute" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + ] + , onClick (PlayAudio audio) + ] + [] + + +exit : Msg -> Html Msg +exit exitMsg = + div [ onClick exitMsg ] + [ tile ( 0, 0 ) + , tile ( 0, 32 ) + , tile ( 32, 0 ) + , tile ( 32, 32 ) + ] + + +tile : ( Int, Int ) -> Html msg +tile ( x, y ) = + img + [ src "imgs/map-tileset.png" + , style + [ ( "position", "absolute" ) + , ( "clip", "rect(32px 64px 64px 32px)" ) + , ( "left", toString (x - 32) ++ "px" ) + , ( "top", toString (y - 32) ++ "px" ) + ] + ] + [] diff --git a/location/Home.elm b/location/Home.elm new file mode 100644 index 0000000..34f2a68 --- /dev/null +++ b/location/Home.elm @@ -0,0 +1,83 @@ +module Location.Home exposing (..) + +import Audio +import Bee exposing (Bee) +import Dictionary.Translator exposing (Translator) +import Html exposing (Html, button, div, h1, img, text) +import Html.Attributes exposing (class, src, style) +import Html.Events exposing (onClick, onMouseDown) +import Window + + +-- MODEL + + +type alias Model = + {} + + +init : Model +init = + {} + + + +-- UPDATE + + +type Msg + = PlayAudio String + | ExitHome + + +type MsgFromPage + = AddPoints Int + | Exit + | NoOp + + +update : Window.Size -> Translator -> Msg -> Model -> ( Model, MsgFromPage, Cmd Msg ) +update window translator msg model = + case msg of + PlayAudio file -> + ( model, NoOp, Audio.play file ) + + ExitHome -> + ( model, Exit, Cmd.none ) + + + +-- VIEW + + +view : Window.Size -> Translator -> Html Msg +view mapSize translator = + div [] + [ exit ExitHome + , Bee.view (Just PlayAudio) (Bee.mama translator) + , Bee.view (Just PlayAudio) (Bee.papa translator) + ] + + +exit : Msg -> Html Msg +exit exitMsg = + div [ onClick exitMsg ] + [ tile ( 0, 0 ) + , tile ( 0, 32 ) + , tile ( 32, 0 ) + , tile ( 32, 32 ) + ] + + +tile : ( Int, Int ) -> Html msg +tile ( x, y ) = + img + [ src "imgs/map-tileset.png" + , style + [ ( "position", "absolute" ) + , ( "clip", "rect(32px 64px 64px 32px)" ) + , ( "left", toString (x - 32) ++ "px" ) + , ( "top", toString (y - 32) ++ "px" ) + ] + ] + [] diff --git a/main.elm b/main.elm deleted file mode 100644 index d5d4b92..0000000 --- a/main.elm +++ /dev/null @@ -1,183 +0,0 @@ -module Main exposing (..) - -import Keyboard.Extra as Keyboard -import Time exposing (Time) -import Html exposing (Html, div) -import Html.Attributes exposing (style) -import Html.App exposing (program) -import Sprite exposing (..) -import Map -import AnimationFrame - - --- MODEL - - -{-| Model contains the x,y coordinates of the sprite - as well as the velocity and direction. --} -type alias Model = - { sprite : Sprite.Model - , map : Map.Model - , keyboard : Keyboard.Model - } - - -initialModel : Keyboard.Model -> Model -initialModel keyboard = - Model Sprite.init Map.init keyboard - - - --- UPDATE - - -type Msg - = Tick Time - | KeyPress Keyboard.Msg - | Nothing - - -update : Msg -> Model -> ( Model, Cmd Msg ) -update msg model = - case msg of - Tick timeDelta -> - ( model - |> updateMap timeDelta - |> updateSprite (Sprite.Tick timeDelta) - , Cmd.none - ) - - KeyPress key -> - let - ( keyboard, _ ) = - Keyboard.update key model.keyboard - - direction = - Keyboard.arrows keyboard - in - ( { model | keyboard = keyboard } - |> updateSprite (Sprite.Direction direction) - , Cmd.none - ) - - Nothing -> - ( model, Cmd.none ) - - -updateSprite : Sprite.Msg -> Model -> Model -updateSprite msg model = - let - sprite' = - Sprite.update msg model.sprite - in - { model | sprite = sprite' } - - -updateMap : Time -> Model -> Model -updateMap dt model = - let - ( x, y, vx, vy, map ) = - ( model.sprite.x, model.sprite.y, model.sprite.vx, model.sprite.vy, model.map ) - - ( bottomWall, leftWall, rightWall, topWall ) = - ( 0, 0, Map.width, Map.height ) - - ( movingUp, movingDown, movingRight, movingLeft ) = - ( vy > 0, vy < 0, vx > 0, vx < 0 ) - - action : Map.Action - action = - if x == leftWall && movingLeft then - Map.HorizontalScroll (round (dt * vx)) - else if (x + 32) == rightWall && movingRight then - Map.HorizontalScroll (round (dt * vx)) - else if y == topWall && movingUp then - Map.VerticalScroll (round (dt * vy)) - else if (y - 32) == bottomWall && movingDown then - Map.VerticalScroll (round (dt * vy)) - else - Map.HorizontalScroll 0 - in - { model - | map = Map.update action map - } - - - --- VIEW - - -view : Model -> Html Msg -view model = - let - bee = - Html.App.map (\_ -> Nothing) (Sprite.view model.sprite) - - -- outer, middle, inner is for vertical & horizontal centering - outer = - div - [ style - [ ( "display", "table" ) - , ( "position", "absolute" ) - , ( "height", "100%" ) - , ( "width", "100%" ) - ] - ] - [ middle ] - - middle = - div - [ style - [ ( "display", "table-cell" ) - , ( "vertical-align", "middle" ) - ] - ] - [ inner ] - - inner = - div - [ style - [ ( "margin-left", "auto" ) - , ( "margin-right", "auto" ) - , ( "width", (toString Map.width) ++ "px" ) - ] - ] - [ Html.App.map (\_ -> Nothing) (Map.view model.map) - , bee - ] - in - outer - - - --- SUBSCRIPTIONS - - -subs : Sub Msg -subs = - Sub.batch - [ Sub.map KeyPress Keyboard.subscriptions - , AnimationFrame.diffs Tick - ] - - - --- MAIN - - -main : Program Never -main = - let - ( initialKeyboard, keyboardCmd ) = - Keyboard.init - in - program - { init = - ( (initialModel initialKeyboard) - , Cmd.map KeyPress keyboardCmd - ) - , update = update - , subscriptions = always subs - , view = view - } diff --git a/map.elm b/map.elm deleted file mode 100644 index 5699a02..0000000 --- a/map.elm +++ /dev/null @@ -1,111 +0,0 @@ -module Map exposing (..) - -import Html exposing (Html, div) -import Html.Attributes exposing (style) -import Tiles exposing (..) - - --- Model - - -{-| Model contains the offsets of the full map. --- We only see a part of the map at a time. --} -type alias Model = - { top : Int - , left : Int - } - - -( fullMapWidth, fullMapHeight ) = - ( 288, 288 ) -{-| This is the width and height of - the visible portion of the map --} -( width, height ) = - ( 224, 224 ) -( halfWidth, halfHeight ) = - ( width / 2, height / 2 ) -{-| overflow width and height are the - unseen dimensions of the map --} -( overflowWidth, overflowHeight ) = - ( fullMapWidth - width, fullMapHeight - height ) -{-| We initialize the map to start in approxamitely the center --} -init : Model -init = - { top = round -(overflowHeight / 2) - , left = round -(overflowWidth / 2) - } - - - --- Update - - -type Action - = VerticalScroll Int - | HorizontalScroll Int - - -update : Action -> Model -> Model -update action model = - case action of - VerticalScroll i -> - { model | top = clamp -overflowHeight 0 (model.top + i) } - - HorizontalScroll i -> - { model | left = clamp -overflowWidth 0 (model.left - i) } - - - --- View - - -view : Model -> Html msg -view model = - div - [ style - [ ( "width", (toString width) ++ "px" ) - , ( "height", (toString height) ++ "px" ) - , ( "overflow", "hidden" ) - , ( "border", "2px solid black" ) - ] - ] - [ fullMap model ] - - -fullMap : Model -> Html msg -fullMap model = - div - [ style - [ ( "width", (toString fullMapWidth) ++ "px" ) - , ( "height", (toString fullMapHeight) ++ "px" ) - , ( "position", "relative" ) - , ( "top", (toString model.top) ++ "px" ) - , ( "left", (toString model.left) ++ "px" ) - ] - ] - [ column - [ (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ horzPath, horzPath, horzPath, horzPath, horzPath, horzPath, crossPath, horzPath, horzPath ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - ] - ] - - -row : List (Html msg) -> Html msg -row divs = - div [ style [ ( "height", "32px" ) ] ] divs - - -column : List (Html msg) -> Html msg -column divs = - div [] divs diff --git a/sprite.elm b/sprite.elm deleted file mode 100644 index 902da41..0000000 --- a/sprite.elm +++ /dev/null @@ -1,216 +0,0 @@ -module Sprite exposing (..) - -import Html exposing (Html, div, img) -import Html.Attributes exposing (src, style) -import Time exposing (Time) -import Map - - --- MODEL - - -type alias Model = - { x : Float - , y : Float - , vx : Float - , vy : Float - , dir : Direction - , orientation : Orientation - , frame : Int - } - - -type Direction - = Left - | Right - - -type Orientation - = Toward - | Away - - -init = - Model Map.halfWidth Map.halfHeight 0 0 Left Toward 0 - - - --- UPDATE - - -type Msg - = Tick Time - | Direction { x : Int, y : Int } - | Nothing - - -update : Msg -> Model -> Model -update msg model = - case msg of - Nothing -> - model - - Direction direction -> - model - |> newVelocity direction - |> setDirection direction - - Tick timeDelta -> - model - |> updatePosition timeDelta - |> updateFrame - - -newVelocity : { x : Int, y : Int } -> Model -> Model -newVelocity { x, y } model = - let - scale = - 0.2 - - newVel n = - if x == 0 || y == 0 then - scale * toFloat n - else - scale * toFloat n / sqrt 2 - in - { model - | vx = newVel x - , vy = newVel y - } - - -setDirection : { x : Int, y : Int } -> Model -> Model -setDirection { x, y } model = - { model - | orientation = - if y < 0 then - Toward - else if y > 0 then - Away - else - model.orientation - , dir = - if x > 0 then - Right - else if x < 0 then - Left - else - model.dir - } - - -updatePosition : Time -> Model -> Model -updatePosition dt ({ x, y, vx, vy } as model) = - { model - | x = clamp 0 (Map.width - 32) (x + dt * vx) - , y = clamp 32 Map.height (y + dt * vy) - } - - -updateFrame : Model -> Model -updateFrame model = - { model | frame = (model.frame + 1) % 2 } - - - --- VIEW - - -view : Model -> Html Msg -view { x, y, vx, vy, dir, orientation, frame } = - let - beeImage = - case ( dir, orientation, frame ) of - ( Left, Toward, 0 ) -> - southWestBee1 - - ( Left, Toward, 1 ) -> - southWestBee2 - - ( Left, Away, 0 ) -> - northWestBee1 - - ( Left, Away, 1 ) -> - northWestBee2 - - ( Right, Toward, 0 ) -> - southEastBee1 - - ( Right, Toward, 1 ) -> - southEastBee2 - - ( Right, Away, 0 ) -> - northEastBee1 - - ( Right, Away, 1 ) -> - northEastBee2 - - ( _, _, _ ) -> - southWestBee1 - in - div - [ style - [ ( "width", "32px" ) - , ( "height", "32px" ) - , ( "position", "relative" ) - , ( "top", "-" ++ (toString y) ++ "px" ) - , ( "left", (toString x) ++ "px" ) - ] - ] - [ beeImage ] - - -imgFromSpriteSheet : String -> ( Int, Int ) -> Html Msg -imgFromSpriteSheet spriteSheet ( x, y ) = - img - [ src "empty.png" - , style - [ ( "width", "32px" ) - , ( "height", "32px" ) - , ( "background-image", "url(" ++ spriteSheet ++ ")" ) - , ( "background-position" - , "-" ++ (toString x) ++ "px -" ++ (toString y) ++ "px" - ) - ] - ] - [] - - - --- Bee Sprite - - -beeFromSpriteSheet = - imgFromSpriteSheet "bee.png" - - -northWestBee1 = - beeFromSpriteSheet ( 64, 0 ) - - -northWestBee2 = - beeFromSpriteSheet ( 0, 32 ) - - -northEastBee1 = - beeFromSpriteSheet ( 0, 0 ) - - -northEastBee2 = - beeFromSpriteSheet ( 32, 0 ) - - -southWestBee1 = - beeFromSpriteSheet ( 32, 32 ) - - -southWestBee2 = - beeFromSpriteSheet ( 64, 32 ) - - -southEastBee1 = - beeFromSpriteSheet ( 0, 64 ) - - -southEastBee2 = - beeFromSpriteSheet ( 32, 64 ) diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..f159d2c --- /dev/null +++ b/styles.css @@ -0,0 +1,76 @@ +body { + border: 0px; + margin: 0px; +} + +.poofRed { +background: +-webkit-radial-gradient(red 0, red 30%, rgba(255,255,255,0) 30%) 0 0, +-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0, +-webkit-radial-gradient(red 0, red 20%, rgba(255,255,255,0) 20%) 38px 37px, +-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 55px 9px, +-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 8px 46px, +-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0; +background-repeat: no-repeat; +-webkit-background-size: 80px 68px, 10px 8px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +} + +.poofOrange { +background: +-webkit-radial-gradient(orange 0, orange 30%, rgba(255,255,255,0) 30%) 0 0, +-webkit-radial-gradient(orange 0, orange 11%, rgba(255,255,255,0) 11%) 0 0, +-webkit-radial-gradient(orange 0, orange 20%, rgba(255,255,255,0) 20%) 38px 37px, +-webkit-radial-gradient(orange 0, orange 11%, rgba(255,255,255,0) 11%) 55px 9px, +-webkit-radial-gradient(orange 0, orange 11%, rgba(255,255,255,0) 11%) 8px 46px, +-webkit-radial-gradient(orange 0, orange 11%, rgba(255,255,255,0) 11%) 0 0; +background-repeat: no-repeat; +-webkit-background-size: 80px 68px, 10px 8px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +} + +.poofYellow { +background: +-webkit-radial-gradient(yellow 0, yellow 30%, rgba(255,255,255,0) 30%) 0 0, +-webkit-radial-gradient(yellow 0, yellow 11%, rgba(255,255,255,0) 11%) 0 0, +-webkit-radial-gradient(yellow 0, yellow 20%, rgba(255,255,255,0) 20%) 38px 37px, +-webkit-radial-gradient(yellow 0, yellow 11%, rgba(255,255,255,0) 11%) 55px 9px, +-webkit-radial-gradient(yellow 0, yellow 11%, rgba(255,255,255,0) 11%) 8px 46px, +-webkit-radial-gradient(yellow 0, yellow 11%, rgba(255,255,255,0) 11%) 0 0; +background-repeat: no-repeat; +-webkit-background-size: 80px 68px, 10px 8px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +} + +.poofGreen { +background: +-webkit-radial-gradient(green 0, green 30%, rgba(255,255,255,0) 30%) 0 0, +-webkit-radial-gradient(green 0, green 11%, rgba(255,255,255,0) 11%) 0 0, +-webkit-radial-gradient(green 0, green 20%, rgba(255,255,255,0) 20%) 38px 37px, +-webkit-radial-gradient(green 0, green 11%, rgba(255,255,255,0) 11%) 55px 9px, +-webkit-radial-gradient(green 0, green 11%, rgba(255,255,255,0) 11%) 8px 46px, +-webkit-radial-gradient(green 0, green 11%, rgba(255,255,255,0) 11%) 0 0; +background-repeat: no-repeat; +-webkit-background-size: 80px 68px, 10px 8px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +} + +.poofBlue { +background: +-webkit-radial-gradient(blue 0, blue 30%, rgba(255,255,255,0) 30%) 0 0, +-webkit-radial-gradient(blue 0, blue 11%, rgba(255,255,255,0) 11%) 0 0, +-webkit-radial-gradient(blue 0, blue 20%, rgba(255,255,255,0) 20%) 38px 37px, +-webkit-radial-gradient(blue 0, blue 11%, rgba(255,255,255,0) 11%) 55px 9px, +-webkit-radial-gradient(blue 0, blue 11%, rgba(255,255,255,0) 11%) 8px 46px, +-webkit-radial-gradient(blue 0, blue 11%, rgba(255,255,255,0) 11%) 0 0; +background-repeat: no-repeat; +-webkit-background-size: 80px 68px, 10px 8px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +} + +.poofPurple { +background: +-webkit-radial-gradient(purple 0, purple 30%, rgba(255,255,255,0) 30%) 0 0, +-webkit-radial-gradient(purple 0, purple 11%, rgba(255,255,255,0) 11%) 0 0, +-webkit-radial-gradient(purple 0, purple 20%, rgba(255,255,255,0) 20%) 38px 37px, +-webkit-radial-gradient(purple 0, purple 11%, rgba(255,255,255,0) 11%) 55px 9px, +-webkit-radial-gradient(purple 0, purple 11%, rgba(255,255,255,0) 11%) 8px 46px, +-webkit-radial-gradient(purple 0, purple 11%, rgba(255,255,255,0) 11%) 0 0; +background-repeat: no-repeat; +-webkit-background-size: 80px 68px, 10px 8px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +} diff --git a/terrain.png b/terrain.png deleted file mode 100644 index 693213d..0000000 Binary files a/terrain.png and /dev/null differ diff --git a/tiles.elm b/tiles.elm deleted file mode 100644 index cdafc80..0000000 --- a/tiles.elm +++ /dev/null @@ -1,48 +0,0 @@ -module Tiles exposing (..) - -import Html exposing (Html, div, img) -import Html.Attributes exposing (src, style) - - --- Path Sprite - - -tileFromSpriteSheet : ( Int, Int ) -> Html msg -tileFromSpriteSheet = - imgFromSpriteSheet "terrain.png" - - -grass = - tileFromSpriteSheet ( 0, 0 ) - - -vertPath = - tileFromSpriteSheet ( 32, 0 ) - - -crossPath = - tileFromSpriteSheet ( 64, 0 ) - - -horzPath = - tileFromSpriteSheet ( 0, 32 ) - - -tPath = - tileFromSpriteSheet ( 32, 32 ) - - -imgFromSpriteSheet : String -> ( Int, Int ) -> Html msg -imgFromSpriteSheet spriteSheet ( x, y ) = - img - [ src "empty.png" - , style - [ ( "width", "32px" ) - , ( "height", "32px" ) - , ( "background-image", "url(" ++ spriteSheet ++ ")" ) - , ( "background-position" - , "-" ++ (toString x) ++ "px -" ++ (toString y) ++ "px" - ) - ] - ] - []