diff options
author | Joris | 2015-12-30 00:28:41 +0100 |
---|---|---|
committer | Joris | 2015-12-30 00:32:44 +0100 |
commit | e32a9126ae7fd7f9596dd08b64ecab8644d994bd (patch) | |
tree | 8680faa00c624b81052f3617e6baf7ff8ea9645d | |
parent | a7db22556b91bc7c499e010b4c051f4442ad8ce2 (diff) |
Upgrade to elm 0.16.0
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | README.md | 4 | ||||
-rw-r--r-- | elm-package.json | 8 | ||||
-rw-r--r-- | package.json | 6 | ||||
-rw-r--r-- | public/javascripts/client.js | 17024 | ||||
-rw-r--r-- | src/client/elm/Model/Payer.elm | 4 | ||||
-rw-r--r-- | src/client/elm/Model/Translations.elm | 2 | ||||
-rw-r--r-- | src/client/elm/Model/View/LoggedIn/Account.elm | 2 | ||||
-rw-r--r-- | src/client/elm/Update.elm | 14 | ||||
-rw-r--r-- | src/client/elm/Update/LoggedIn.elm | 34 | ||||
-rw-r--r-- | src/client/elm/Update/LoggedIn/Account.elm | 16 | ||||
-rw-r--r-- | src/client/elm/Update/LoggedIn/Add.elm | 10 | ||||
-rw-r--r-- | src/client/elm/Update/LoggedIn/Monthly.elm | 8 | ||||
-rw-r--r-- | src/client/elm/Update/SignIn.elm | 2 | ||||
-rw-r--r-- | src/client/elm/View/Events.elm | 2 | ||||
-rw-r--r-- | src/client/elm/View/LoggedIn/Paging.elm | 12 |
16 files changed, 65 insertions, 17084 deletions
@@ -5,6 +5,7 @@ database database-shm database-wal elm-stuff/ +public/javascripts/*.js ./public/javascripts/*.js sessionKey deploy @@ -7,9 +7,9 @@ Share costs with a group of people. ``` cabal sandbox init cabal install --only-dependencies -elm package install npm install -npm run watch +npm run install-elm +npm start ``` ## Configuration diff --git a/elm-package.json b/elm-package.json index b433fb2..b645876 100644 --- a/elm-package.json +++ b/elm-package.json @@ -1,15 +1,15 @@ { "version": "0.0.1", "summary": "SharedCost", - "repository": "https://github.com/guyonvarch/sharedCost.git", + "repository": "https://github.com/guyonvarch/sharedcost.git", "license": "BSD3", "source-directories": ["src/client/elm"], "exposed-modules": [], "elm-version": "0.15.1 <= v < 0.16.0", "dependencies": { - "elm-lang/core": "2.1.0 <= v < 3.0.0", - "evancz/elm-html": "4.0.1 <= v < 5.0.0", - "evancz/elm-http": "1.0.0 <= v < 2.0.0" + "elm-lang/core": "3.0.0 <= v < 4.0.0", + "evancz/elm-html": "4.0.2 <= v < 5.0.0", + "evancz/elm-http": "3.0.0 <= v < 4.0.0" }, "native-modules": true } diff --git a/package.json b/package.json index cf98877..64e37a0 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,12 @@ { "devDependencies": { - "watch": "0.17.1" + "watch": "0.17.1", + "elm": "0.16.0" }, "scripts": { + "install-elm": "elm package install", + "start": "npm run watch", + "watch": "npm run watch-server & npm run watch-elm & npm run watch-js", "watch-server": "watch 'npm run build-and-launch-server --silent' src/server", "watch-elm": "watch 'npm run build-elm --silent' src/client/elm", diff --git a/public/javascripts/client.js b/public/javascripts/client.js deleted file mode 100644 index 59f8d69..0000000 --- a/public/javascripts/client.js +++ /dev/null @@ -1,17024 +0,0 @@ -var Elm = Elm || { Native: {} }; -Elm.Array = Elm.Array || {}; -Elm.Array.make = function (_elm) { - "use strict"; - _elm.Array = _elm.Array || {}; - if (_elm.Array.values) - return _elm.Array.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Array", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Native$Array = Elm.Native.Array.make(_elm); - var append = $Native$Array.append; - var length = $Native$Array.length; - var isEmpty = function (array) { - return _U.eq(length(array), - 0); - }; - var slice = $Native$Array.slice; - var set = $Native$Array.set; - var get = F2(function (i, - array) { - return _U.cmp(0, - i) < 1 && _U.cmp(i, - $Native$Array.length(array)) < 0 ? $Maybe.Just(A2($Native$Array.get, - i, - array)) : $Maybe.Nothing; - }); - var push = $Native$Array.push; - var empty = $Native$Array.empty; - var filter = F2(function (isOkay, - arr) { - var update = F2(function (x, - xs) { - return isOkay(x) ? A2($Native$Array.push, - x, - xs) : xs; - }); - return A3($Native$Array.foldl, - update, - $Native$Array.empty, - arr); - }); - var foldr = $Native$Array.foldr; - var foldl = $Native$Array.foldl; - var indexedMap = $Native$Array.indexedMap; - var map = $Native$Array.map; - var toIndexedList = function (array) { - return A3($List.map2, - F2(function (v0,v1) { - return {ctor: "_Tuple2" - ,_0: v0 - ,_1: v1}; - }), - _L.range(0, - $Native$Array.length(array) - 1), - $Native$Array.toList(array)); - }; - var toList = $Native$Array.toList; - var fromList = $Native$Array.fromList; - var initialize = $Native$Array.initialize; - var repeat = F2(function (n,e) { - return A2(initialize, - n, - $Basics.always(e)); - }); - var Array = {ctor: "Array"}; - _elm.Array.values = {_op: _op - ,empty: empty - ,repeat: repeat - ,initialize: initialize - ,fromList: fromList - ,isEmpty: isEmpty - ,length: length - ,push: push - ,append: append - ,get: get - ,set: set - ,slice: slice - ,toList: toList - ,toIndexedList: toIndexedList - ,map: map - ,indexedMap: indexedMap - ,filter: filter - ,foldl: foldl - ,foldr: foldr}; - return _elm.Array.values; -}; -Elm.Basics = Elm.Basics || {}; -Elm.Basics.make = function (_elm) { - "use strict"; - _elm.Basics = _elm.Basics || {}; - if (_elm.Basics.values) - return _elm.Basics.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Basics", - $Native$Basics = Elm.Native.Basics.make(_elm), - $Native$Show = Elm.Native.Show.make(_elm), - $Native$Utils = Elm.Native.Utils.make(_elm); - var uncurry = F2(function (f, - _v0) { - var $ = _v0, - a = $._0, - b = $._1; - return A2(f,a,b); - }); - var curry = F3(function (f, - a, - b) { - return f({ctor: "_Tuple2" - ,_0: a - ,_1: b}); - }); - var flip = F3(function (f,b,a) { - return A2(f,a,b); - }); - var snd = function (_v1) { - var _ = _v1; - var b = function () { - switch (_.ctor) - {case "_Tuple2": return _._1;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }(); - return b; - }; - var fst = function (_v5) { - var _ = _v5; - var a = function () { - switch (_.ctor) - {case "_Tuple2": return _._0;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }(); - return a; - }; - var always = F2(function (a, - _v9) { - var _ = _v9; - return a; - }); - var identity = function (x) { - return x; - }; - _op["<|"] = F2(function (f,x) { - return f(x); - }); - _op["|>"] = F2(function (x,f) { - return f(x); - }); - _op[">>"] = F3(function (f, - g, - x) { - return g(f(x)); - }); - _op["<<"] = F3(function (g, - f, - x) { - return g(f(x)); - }); - _op["++"] = $Native$Utils.append; - var toString = $Native$Show.toString; - var isInfinite = $Native$Basics.isInfinite; - var isNaN = $Native$Basics.isNaN; - var toFloat = $Native$Basics.toFloat; - var ceiling = $Native$Basics.ceiling; - var floor = $Native$Basics.floor; - var truncate = $Native$Basics.truncate; - var round = $Native$Basics.round; - var otherwise = true; - var not = $Native$Basics.not; - var xor = $Native$Basics.xor; - _op["||"] = $Native$Basics.or; - _op["&&"] = $Native$Basics.and; - var max = $Native$Basics.max; - var min = $Native$Basics.min; - var GT = {ctor: "GT"}; - var EQ = {ctor: "EQ"}; - var LT = {ctor: "LT"}; - var compare = $Native$Basics.compare; - _op[">="] = $Native$Basics.ge; - _op["<="] = $Native$Basics.le; - _op[">"] = $Native$Basics.gt; - _op["<"] = $Native$Basics.lt; - _op["/="] = $Native$Basics.neq; - _op["=="] = $Native$Basics.eq; - var e = $Native$Basics.e; - var pi = $Native$Basics.pi; - var clamp = $Native$Basics.clamp; - var logBase = $Native$Basics.logBase; - var abs = $Native$Basics.abs; - var negate = $Native$Basics.negate; - var sqrt = $Native$Basics.sqrt; - var atan2 = $Native$Basics.atan2; - var atan = $Native$Basics.atan; - var asin = $Native$Basics.asin; - var acos = $Native$Basics.acos; - var tan = $Native$Basics.tan; - var sin = $Native$Basics.sin; - var cos = $Native$Basics.cos; - _op["^"] = $Native$Basics.exp; - _op["%"] = $Native$Basics.mod; - var rem = $Native$Basics.rem; - _op["//"] = $Native$Basics.div; - _op["/"] = $Native$Basics.floatDiv; - _op["*"] = $Native$Basics.mul; - _op["-"] = $Native$Basics.sub; - _op["+"] = $Native$Basics.add; - var toPolar = $Native$Basics.toPolar; - var fromPolar = $Native$Basics.fromPolar; - var turns = $Native$Basics.turns; - var degrees = $Native$Basics.degrees; - var radians = function (t) { - return t; - }; - _elm.Basics.values = {_op: _op - ,max: max - ,min: min - ,compare: compare - ,not: not - ,xor: xor - ,otherwise: otherwise - ,rem: rem - ,negate: negate - ,abs: abs - ,sqrt: sqrt - ,clamp: clamp - ,logBase: logBase - ,e: e - ,pi: pi - ,cos: cos - ,sin: sin - ,tan: tan - ,acos: acos - ,asin: asin - ,atan: atan - ,atan2: atan2 - ,round: round - ,floor: floor - ,ceiling: ceiling - ,truncate: truncate - ,toFloat: toFloat - ,degrees: degrees - ,radians: radians - ,turns: turns - ,toPolar: toPolar - ,fromPolar: fromPolar - ,isNaN: isNaN - ,isInfinite: isInfinite - ,toString: toString - ,fst: fst - ,snd: snd - ,identity: identity - ,always: always - ,flip: flip - ,curry: curry - ,uncurry: uncurry - ,LT: LT - ,EQ: EQ - ,GT: GT}; - return _elm.Basics.values; -}; -Elm.Char = Elm.Char || {}; -Elm.Char.make = function (_elm) { - "use strict"; - _elm.Char = _elm.Char || {}; - if (_elm.Char.values) - return _elm.Char.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Char", - $Basics = Elm.Basics.make(_elm), - $Native$Char = Elm.Native.Char.make(_elm); - var fromCode = $Native$Char.fromCode; - var toCode = $Native$Char.toCode; - var toLocaleLower = $Native$Char.toLocaleLower; - var toLocaleUpper = $Native$Char.toLocaleUpper; - var toLower = $Native$Char.toLower; - var toUpper = $Native$Char.toUpper; - var isBetween = F3(function (low, - high, - $char) { - var code = toCode($char); - return _U.cmp(code, - toCode(low)) > -1 && _U.cmp(code, - toCode(high)) < 1; - }); - var isUpper = A2(isBetween, - _U.chr("A"), - _U.chr("Z")); - var isLower = A2(isBetween, - _U.chr("a"), - _U.chr("z")); - var isDigit = A2(isBetween, - _U.chr("0"), - _U.chr("9")); - var isOctDigit = A2(isBetween, - _U.chr("0"), - _U.chr("7")); - var isHexDigit = function ($char) { - return isDigit($char) || (A3(isBetween, - _U.chr("a"), - _U.chr("f"), - $char) || A3(isBetween, - _U.chr("A"), - _U.chr("F"), - $char)); - }; - _elm.Char.values = {_op: _op - ,isUpper: isUpper - ,isLower: isLower - ,isDigit: isDigit - ,isOctDigit: isOctDigit - ,isHexDigit: isHexDigit - ,toUpper: toUpper - ,toLower: toLower - ,toLocaleUpper: toLocaleUpper - ,toLocaleLower: toLocaleLower - ,toCode: toCode - ,fromCode: fromCode}; - return _elm.Char.values; -}; -Elm.Color = Elm.Color || {}; -Elm.Color.make = function (_elm) { - "use strict"; - _elm.Color = _elm.Color || {}; - if (_elm.Color.values) - return _elm.Color.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Color", - $Basics = Elm.Basics.make(_elm); - var Radial = F5(function (a, - b, - c, - d, - e) { - return {ctor: "Radial" - ,_0: a - ,_1: b - ,_2: c - ,_3: d - ,_4: e}; - }); - var radial = Radial; - var Linear = F3(function (a, - b, - c) { - return {ctor: "Linear" - ,_0: a - ,_1: b - ,_2: c}; - }); - var linear = Linear; - var fmod = F2(function (f,n) { - var integer = $Basics.floor(f); - return $Basics.toFloat(A2($Basics._op["%"], - integer, - n)) + f - $Basics.toFloat(integer); - }); - var rgbToHsl = F3(function (red, - green, - blue) { - var b = $Basics.toFloat(blue) / 255; - var g = $Basics.toFloat(green) / 255; - var r = $Basics.toFloat(red) / 255; - var cMax = A2($Basics.max, - A2($Basics.max,r,g), - b); - var cMin = A2($Basics.min, - A2($Basics.min,r,g), - b); - var c = cMax - cMin; - var lightness = (cMax + cMin) / 2; - var saturation = _U.eq(lightness, - 0) ? 0 : c / (1 - $Basics.abs(2 * lightness - 1)); - var hue = $Basics.degrees(60) * (_U.eq(cMax, - r) ? A2(fmod, - (g - b) / c, - 6) : _U.eq(cMax, - g) ? (b - r) / c + 2 : _U.eq(cMax, - b) ? (r - g) / c + 4 : _U.badIf($moduleName, - "between lines 150 and 152")); - return {ctor: "_Tuple3" - ,_0: hue - ,_1: saturation - ,_2: lightness}; - }); - var hslToRgb = F3(function (hue, - saturation, - lightness) { - var hue$ = hue / $Basics.degrees(60); - var chroma = (1 - $Basics.abs(2 * lightness - 1)) * saturation; - var x = chroma * (1 - $Basics.abs(A2(fmod, - hue$, - 2) - 1)); - var $ = _U.cmp(hue$, - 0) < 0 ? {ctor: "_Tuple3" - ,_0: 0 - ,_1: 0 - ,_2: 0} : _U.cmp(hue$, - 1) < 0 ? {ctor: "_Tuple3" - ,_0: chroma - ,_1: x - ,_2: 0} : _U.cmp(hue$, - 2) < 0 ? {ctor: "_Tuple3" - ,_0: x - ,_1: chroma - ,_2: 0} : _U.cmp(hue$, - 3) < 0 ? {ctor: "_Tuple3" - ,_0: 0 - ,_1: chroma - ,_2: x} : _U.cmp(hue$, - 4) < 0 ? {ctor: "_Tuple3" - ,_0: 0 - ,_1: x - ,_2: chroma} : _U.cmp(hue$, - 5) < 0 ? {ctor: "_Tuple3" - ,_0: x - ,_1: 0 - ,_2: chroma} : _U.cmp(hue$, - 6) < 0 ? {ctor: "_Tuple3" - ,_0: chroma - ,_1: 0 - ,_2: x} : {ctor: "_Tuple3" - ,_0: 0 - ,_1: 0 - ,_2: 0}, - r = $._0, - g = $._1, - b = $._2; - var m = lightness - chroma / 2; - return {ctor: "_Tuple3" - ,_0: r + m - ,_1: g + m - ,_2: b + m}; - }); - var toRgb = function (color) { - switch (color.ctor) - {case "HSLA": - var $ = A3(hslToRgb, - color._0, - color._1, - color._2), - r = $._0, - g = $._1, - b = $._2; - return {_: {} - ,alpha: color._3 - ,blue: $Basics.round(255 * b) - ,green: $Basics.round(255 * g) - ,red: $Basics.round(255 * r)}; - case "RGBA": return {_: {} - ,alpha: color._3 - ,blue: color._2 - ,green: color._1 - ,red: color._0};} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var toHsl = function (color) { - switch (color.ctor) - {case "HSLA": return {_: {} - ,alpha: color._3 - ,hue: color._0 - ,lightness: color._2 - ,saturation: color._1}; - case "RGBA": - var $ = A3(rgbToHsl, - color._0, - color._1, - color._2), - h = $._0, - s = $._1, - l = $._2; - return {_: {} - ,alpha: color._3 - ,hue: h - ,lightness: l - ,saturation: s};} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var HSLA = F4(function (a, - b, - c, - d) { - return {ctor: "HSLA" - ,_0: a - ,_1: b - ,_2: c - ,_3: d}; - }); - var hsla = F4(function (hue, - saturation, - lightness, - alpha) { - return A4(HSLA, - hue - $Basics.turns($Basics.toFloat($Basics.floor(hue / (2 * $Basics.pi)))), - saturation, - lightness, - alpha); - }); - var hsl = F3(function (hue, - saturation, - lightness) { - return A4(hsla, - hue, - saturation, - lightness, - 1); - }); - var complement = function (color) { - switch (color.ctor) - {case "HSLA": return A4(hsla, - color._0 + $Basics.degrees(180), - color._1, - color._2, - color._3); - case "RGBA": - var $ = A3(rgbToHsl, - color._0, - color._1, - color._2), - h = $._0, - s = $._1, - l = $._2; - return A4(hsla, - h + $Basics.degrees(180), - s, - l, - color._3);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var grayscale = function (p) { - return A4(HSLA,0,0,1 - p,1); - }; - var greyscale = function (p) { - return A4(HSLA,0,0,1 - p,1); - }; - var RGBA = F4(function (a, - b, - c, - d) { - return {ctor: "RGBA" - ,_0: a - ,_1: b - ,_2: c - ,_3: d}; - }); - var rgba = RGBA; - var rgb = F3(function (r,g,b) { - return A4(RGBA,r,g,b,1); - }); - var lightRed = A4(RGBA, - 239, - 41, - 41, - 1); - var red = A4(RGBA,204,0,0,1); - var darkRed = A4(RGBA, - 164, - 0, - 0, - 1); - var lightOrange = A4(RGBA, - 252, - 175, - 62, - 1); - var orange = A4(RGBA, - 245, - 121, - 0, - 1); - var darkOrange = A4(RGBA, - 206, - 92, - 0, - 1); - var lightYellow = A4(RGBA, - 255, - 233, - 79, - 1); - var yellow = A4(RGBA, - 237, - 212, - 0, - 1); - var darkYellow = A4(RGBA, - 196, - 160, - 0, - 1); - var lightGreen = A4(RGBA, - 138, - 226, - 52, - 1); - var green = A4(RGBA, - 115, - 210, - 22, - 1); - var darkGreen = A4(RGBA, - 78, - 154, - 6, - 1); - var lightBlue = A4(RGBA, - 114, - 159, - 207, - 1); - var blue = A4(RGBA, - 52, - 101, - 164, - 1); - var darkBlue = A4(RGBA, - 32, - 74, - 135, - 1); - var lightPurple = A4(RGBA, - 173, - 127, - 168, - 1); - var purple = A4(RGBA, - 117, - 80, - 123, - 1); - var darkPurple = A4(RGBA, - 92, - 53, - 102, - 1); - var lightBrown = A4(RGBA, - 233, - 185, - 110, - 1); - var brown = A4(RGBA, - 193, - 125, - 17, - 1); - var darkBrown = A4(RGBA, - 143, - 89, - 2, - 1); - var black = A4(RGBA,0,0,0,1); - var white = A4(RGBA, - 255, - 255, - 255, - 1); - var lightGrey = A4(RGBA, - 238, - 238, - 236, - 1); - var grey = A4(RGBA, - 211, - 215, - 207, - 1); - var darkGrey = A4(RGBA, - 186, - 189, - 182, - 1); - var lightGray = A4(RGBA, - 238, - 238, - 236, - 1); - var gray = A4(RGBA, - 211, - 215, - 207, - 1); - var darkGray = A4(RGBA, - 186, - 189, - 182, - 1); - var lightCharcoal = A4(RGBA, - 136, - 138, - 133, - 1); - var charcoal = A4(RGBA, - 85, - 87, - 83, - 1); - var darkCharcoal = A4(RGBA, - 46, - 52, - 54, - 1); - _elm.Color.values = {_op: _op - ,rgb: rgb - ,rgba: rgba - ,hsl: hsl - ,hsla: hsla - ,greyscale: greyscale - ,grayscale: grayscale - ,complement: complement - ,linear: linear - ,radial: radial - ,toRgb: toRgb - ,toHsl: toHsl - ,red: red - ,orange: orange - ,yellow: yellow - ,green: green - ,blue: blue - ,purple: purple - ,brown: brown - ,lightRed: lightRed - ,lightOrange: lightOrange - ,lightYellow: lightYellow - ,lightGreen: lightGreen - ,lightBlue: lightBlue - ,lightPurple: lightPurple - ,lightBrown: lightBrown - ,darkRed: darkRed - ,darkOrange: darkOrange - ,darkYellow: darkYellow - ,darkGreen: darkGreen - ,darkBlue: darkBlue - ,darkPurple: darkPurple - ,darkBrown: darkBrown - ,white: white - ,lightGrey: lightGrey - ,grey: grey - ,darkGrey: darkGrey - ,lightCharcoal: lightCharcoal - ,charcoal: charcoal - ,darkCharcoal: darkCharcoal - ,black: black - ,lightGray: lightGray - ,gray: gray - ,darkGray: darkGray}; - return _elm.Color.values; -}; -Elm.Date = Elm.Date || {}; -Elm.Date.make = function (_elm) { - "use strict"; - _elm.Date = _elm.Date || {}; - if (_elm.Date.values) - return _elm.Date.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Date", - $Native$Date = Elm.Native.Date.make(_elm), - $Result = Elm.Result.make(_elm), - $Time = Elm.Time.make(_elm); - var millisecond = $Native$Date.millisecond; - var second = $Native$Date.second; - var minute = $Native$Date.minute; - var hour = $Native$Date.hour; - var dayOfWeek = $Native$Date.dayOfWeek; - var day = $Native$Date.day; - var month = $Native$Date.month; - var year = $Native$Date.year; - var fromTime = $Native$Date.fromTime; - var toTime = $Native$Date.toTime; - var fromString = $Native$Date.read; - var Dec = {ctor: "Dec"}; - var Nov = {ctor: "Nov"}; - var Oct = {ctor: "Oct"}; - var Sep = {ctor: "Sep"}; - var Aug = {ctor: "Aug"}; - var Jul = {ctor: "Jul"}; - var Jun = {ctor: "Jun"}; - var May = {ctor: "May"}; - var Apr = {ctor: "Apr"}; - var Mar = {ctor: "Mar"}; - var Feb = {ctor: "Feb"}; - var Jan = {ctor: "Jan"}; - var Sun = {ctor: "Sun"}; - var Sat = {ctor: "Sat"}; - var Fri = {ctor: "Fri"}; - var Thu = {ctor: "Thu"}; - var Wed = {ctor: "Wed"}; - var Tue = {ctor: "Tue"}; - var Mon = {ctor: "Mon"}; - var Date = {ctor: "Date"}; - _elm.Date.values = {_op: _op - ,fromString: fromString - ,toTime: toTime - ,fromTime: fromTime - ,year: year - ,month: month - ,day: day - ,dayOfWeek: dayOfWeek - ,hour: hour - ,minute: minute - ,second: second - ,millisecond: millisecond - ,Jan: Jan - ,Feb: Feb - ,Mar: Mar - ,Apr: Apr - ,May: May - ,Jun: Jun - ,Jul: Jul - ,Aug: Aug - ,Sep: Sep - ,Oct: Oct - ,Nov: Nov - ,Dec: Dec - ,Mon: Mon - ,Tue: Tue - ,Wed: Wed - ,Thu: Thu - ,Fri: Fri - ,Sat: Sat - ,Sun: Sun}; - return _elm.Date.values; -}; -Elm.Debug = Elm.Debug || {}; -Elm.Debug.make = function (_elm) { - "use strict"; - _elm.Debug = _elm.Debug || {}; - if (_elm.Debug.values) - return _elm.Debug.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Debug", - $Graphics$Collage = Elm.Graphics.Collage.make(_elm), - $Native$Debug = Elm.Native.Debug.make(_elm); - var trace = $Native$Debug.tracePath; - var watchSummary = $Native$Debug.watchSummary; - var watch = $Native$Debug.watch; - var crash = $Native$Debug.crash; - var log = $Native$Debug.log; - _elm.Debug.values = {_op: _op - ,log: log - ,crash: crash - ,watch: watch - ,watchSummary: watchSummary - ,trace: trace}; - return _elm.Debug.values; -}; -Elm.Dict = Elm.Dict || {}; -Elm.Dict.make = function (_elm) { - "use strict"; - _elm.Dict = _elm.Dict || {}; - if (_elm.Dict.values) - return _elm.Dict.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Dict", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Native$Debug = Elm.Native.Debug.make(_elm), - $String = Elm.String.make(_elm); - var foldr = F3(function (f, - acc, - t) { - _v0: while (true) { - switch (t.ctor) - {case "RBEmpty": - switch (t._0.ctor) - {case "LBlack": return acc;} - break; - case "RBNode": var _v8 = f, - _v9 = A3(f, - t._1, - t._2, - A3(foldr,f,acc,t._4)), - _v10 = t._3; - f = _v8; - acc = _v9; - t = _v10; - continue _v0;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - } - }); - var keys = function (dict) { - return A3(foldr, - F3(function (key, - value, - keyList) { - return A2($List._op["::"], - key, - keyList); - }), - _L.fromArray([]), - dict); - }; - var values = function (dict) { - return A3(foldr, - F3(function (key, - value, - valueList) { - return A2($List._op["::"], - value, - valueList); - }), - _L.fromArray([]), - dict); - }; - var toList = function (dict) { - return A3(foldr, - F3(function (key,value,list) { - return A2($List._op["::"], - {ctor: "_Tuple2" - ,_0: key - ,_1: value}, - list); - }), - _L.fromArray([]), - dict); - }; - var foldl = F3(function (f, - acc, - dict) { - _v11: while (true) { - switch (dict.ctor) - {case "RBEmpty": - switch (dict._0.ctor) - {case "LBlack": return acc;} - break; - case "RBNode": var _v19 = f, - _v20 = A3(f, - dict._1, - dict._2, - A3(foldl,f,acc,dict._3)), - _v21 = dict._4; - f = _v19; - acc = _v20; - dict = _v21; - continue _v11;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - } - }); - var isBBlack = function (dict) { - switch (dict.ctor) - {case "RBEmpty": - switch (dict._0.ctor) - {case "LBBlack": return true;} - break; - case "RBNode": - switch (dict._0.ctor) - {case "BBlack": return true;} - break;} - return false; - }; - var showFlag = function (f) { - switch (f.ctor) - {case "Insert": return "Insert"; - case "Remove": return "Remove"; - case "Same": return "Same";} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var Same = {ctor: "Same"}; - var Remove = {ctor: "Remove"}; - var Insert = {ctor: "Insert"}; - var get = F2(function (targetKey, - dict) { - _v30: while (true) { - switch (dict.ctor) - {case "RBEmpty": - switch (dict._0.ctor) - {case "LBlack": - return $Maybe.Nothing;} - break; - case "RBNode": - var _v38 = A2($Basics.compare, - targetKey, - dict._1); - switch (_v38.ctor) - {case "EQ": - return $Maybe.Just(dict._2); - case "GT": var _v39 = targetKey, - _v40 = dict._4; - targetKey = _v39; - dict = _v40; - continue _v30; - case "LT": var _v41 = targetKey, - _v42 = dict._3; - targetKey = _v41; - dict = _v42; - continue _v30;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now");} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - } - }); - var member = F2(function (key, - dict) { - var _v43 = A2(get,key,dict); - switch (_v43.ctor) - {case "Just": return true; - case "Nothing": return false;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var max = function (dict) { - _v45: while (true) { - switch (dict.ctor) - {case "RBEmpty": - return $Native$Debug.crash("(max Empty) is not defined"); - case "RBNode": - switch (dict._4.ctor) - {case "RBEmpty": - return {ctor: "_Tuple2" - ,_0: dict._1 - ,_1: dict._2};} - var _v54 = dict._4; - dict = _v54; - continue _v45;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - } - }; - var min = function (dict) { - _v55: while (true) { - switch (dict.ctor) - {case "RBEmpty": - switch (dict._0.ctor) - {case "LBlack": - return $Native$Debug.crash("(min Empty) is not defined");} - break; - case "RBNode": - switch (dict._3.ctor) - {case "RBEmpty": - switch (dict._3._0.ctor) - {case "LBlack": - return {ctor: "_Tuple2" - ,_0: dict._1 - ,_1: dict._2};} - break;} - var _v64 = dict._3; - dict = _v64; - continue _v55;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - } - }; - var RBEmpty = function (a) { - return {ctor: "RBEmpty" - ,_0: a}; - }; - var RBNode = F5(function (a, - b, - c, - d, - e) { - return {ctor: "RBNode" - ,_0: a - ,_1: b - ,_2: c - ,_3: d - ,_4: e}; - }); - var showLColor = function (color) { - switch (color.ctor) - {case "LBBlack": - return "LBBlack"; - case "LBlack": return "LBlack";} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var LBBlack = {ctor: "LBBlack"}; - var LBlack = {ctor: "LBlack"}; - var empty = RBEmpty(LBlack); - var isEmpty = function (dict) { - return _U.eq(dict,empty); - }; - var map = F2(function (f,dict) { - switch (dict.ctor) - {case "RBEmpty": - switch (dict._0.ctor) - {case "LBlack": - return RBEmpty(LBlack);} - break; - case "RBNode": return A5(RBNode, - dict._0, - dict._1, - A2(f,dict._1,dict._2), - A2(map,f,dict._3), - A2(map,f,dict._4));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var showNColor = function (c) { - switch (c.ctor) - {case "BBlack": return "BBlack"; - case "Black": return "Black"; - case "NBlack": return "NBlack"; - case "Red": return "Red";} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var reportRemBug = F4(function (msg, - c, - lgot, - rgot) { - return $Native$Debug.crash($String.concat(_L.fromArray(["Internal red-black tree invariant violated, expected " - ,msg - ," and got " - ,showNColor(c) - ,"/" - ,lgot - ,"/" - ,rgot - ,"\nPlease report this bug to <https://github.com/elm-lang/Elm/issues>"]))); - }); - var NBlack = {ctor: "NBlack"}; - var BBlack = {ctor: "BBlack"}; - var Black = {ctor: "Black"}; - var ensureBlackRoot = function (dict) { - switch (dict.ctor) - {case "RBEmpty": - switch (dict._0.ctor) - {case "LBlack": return dict;} - break; - case "RBNode": - switch (dict._0.ctor) - {case "Black": return dict; - case "Red": return A5(RBNode, - Black, - dict._1, - dict._2, - dict._3, - dict._4);} - break;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var blackish = function (t) { - switch (t.ctor) - {case "RBEmpty": return true; - case "RBNode": - return _U.eq(t._0, - Black) || _U.eq(t._0,BBlack);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var blacken = function (t) { - switch (t.ctor) - {case "RBEmpty": - return RBEmpty(LBlack); - case "RBNode": return A5(RBNode, - Black, - t._1, - t._2, - t._3, - t._4);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var Red = {ctor: "Red"}; - var moreBlack = function (color) { - switch (color.ctor) - {case "BBlack": - return $Native$Debug.crash("Can\'t make a double black node more black!"); - case "Black": return BBlack; - case "NBlack": return Red; - case "Red": return Black;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var lessBlack = function (color) { - switch (color.ctor) - {case "BBlack": return Black; - case "Black": return Red; - case "NBlack": - return $Native$Debug.crash("Can\'t make a negative black node less black!"); - case "Red": return NBlack;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var lessBlackTree = function (dict) { - switch (dict.ctor) - {case "RBEmpty": - switch (dict._0.ctor) - {case "LBBlack": - return RBEmpty(LBlack);} - break; - case "RBNode": return A5(RBNode, - lessBlack(dict._0), - dict._1, - dict._2, - dict._3, - dict._4);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var redden = function (t) { - switch (t.ctor) - {case "RBEmpty": - return $Native$Debug.crash("can\'t make a Leaf red"); - case "RBNode": return A5(RBNode, - Red, - t._1, - t._2, - t._3, - t._4);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var 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(RBNode, - lessBlack(col), - yk, - yv, - A5(RBNode,Black,xk,xv,a,b), - A5(RBNode,Black,zk,zv,c,d)); - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; - if (blackish(t)) { - switch (t.ctor) - {case "RBNode": - switch (t._3.ctor) - {case "RBNode": - switch (t._3._0.ctor) - {case "Red": - switch (t._3._3.ctor) - {case "RBNode": - switch (t._3._3._0.ctor) - {case "Red": - return assemble(t._0)(t._3._3._1)(t._3._3._2)(t._3._1)(t._3._2)(t._1)(t._2)(t._3._3._3)(t._3._3._4)(t._3._4)(t._4);} - break;} - switch (t._3._4.ctor) - {case "RBNode": - switch (t._3._4._0.ctor) - {case "Red": - return assemble(t._0)(t._3._1)(t._3._2)(t._3._4._1)(t._3._4._2)(t._1)(t._2)(t._3._3)(t._3._4._3)(t._3._4._4)(t._4);} - break;} - break;} - break;} - switch (t._4.ctor) - {case "RBNode": - switch (t._4._0.ctor) - {case "Red": - switch (t._4._3.ctor) - {case "RBNode": - switch (t._4._3._0.ctor) - {case "Red": - return assemble(t._0)(t._1)(t._2)(t._4._3._1)(t._4._3._2)(t._4._1)(t._4._2)(t._3)(t._4._3._3)(t._4._3._4)(t._4._4);} - break;} - switch (t._4._4.ctor) - {case "RBNode": - switch (t._4._4._0.ctor) - {case "Red": - return assemble(t._0)(t._1)(t._2)(t._4._1)(t._4._2)(t._4._4._1)(t._4._4._2)(t._3)(t._4._3)(t._4._4._3)(t._4._4._4);} - break;} - break;} - break;} - switch (t._0.ctor) - {case "BBlack": - switch (t._4.ctor) - {case "RBNode": - switch (t._4._0.ctor) - {case "NBlack": - switch (t._4._3.ctor) - {case "RBNode": - switch (t._4._3._0.ctor) - {case "Black": - switch (t._4._4.ctor) - {case "RBNode": - switch (t._4._4._0.ctor) - {case "Black": return A5(RBNode, - Black, - t._4._3._1, - t._4._3._2, - A5(RBNode, - Black, - t._1, - t._2, - t._3, - t._4._3._3), - A5(balance, - Black, - t._4._1, - t._4._2, - t._4._3._4, - redden(t._4._4)));} - break;} - return t;} - break;} - break;} - break;} - switch (t._3.ctor) - {case "RBNode": - switch (t._3._0.ctor) - {case "NBlack": - switch (t._3._4.ctor) - {case "RBNode": - switch (t._3._4._0.ctor) - {case "Black": - switch (t._3._3.ctor) - {case "RBNode": - switch (t._3._3._0.ctor) - {case "Black": return A5(RBNode, - Black, - t._3._4._1, - t._3._4._2, - A5(balance, - Black, - t._3._1, - t._3._2, - redden(t._3._3), - t._3._4._3), - A5(RBNode, - Black, - t._1, - t._2, - t._3._4._4, - t._4));} - break;} - return t;} - break;} - break;} - break;} - break;} - break;} - return t; - } else return t; - }; - var balance = F5(function (c, - k, - v, - l, - r) { - return balance_node(A5(RBNode, - c, - k, - v, - l, - r)); - }); - var bubble = F5(function (c, - k, - v, - l, - r) { - return isBBlack(l) || isBBlack(r) ? A5(balance, - moreBlack(c), - k, - v, - lessBlackTree(l), - lessBlackTree(r)) : A5(RBNode, - c, - k, - v, - l, - r); - }); - var remove_max = F5(function (c, - k, - v, - l, - r) { - switch (r.ctor) - {case "RBEmpty": return A3(rem, - c, - l, - r); - case "RBNode": return A5(bubble, - c, - k, - v, - l, - A5(remove_max, - r._0, - r._1, - r._2, - r._3, - r._4));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var rem = F3(function (c,l,r) { - var _v186 = {ctor: "_Tuple2" - ,_0: l - ,_1: r}; - switch (_v186.ctor) - {case "_Tuple2": - switch (_v186._0.ctor) - {case "RBEmpty": - switch (_v186._1.ctor) - {case "RBEmpty": switch (c.ctor) - {case "Black": - return RBEmpty(LBBlack); - case "Red": - return RBEmpty(LBlack);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - case "RBNode": - var _v208 = {ctor: "_Tuple3" - ,_0: c - ,_1: _v186._0._0 - ,_2: _v186._1._0}; - switch (_v208.ctor) - {case "_Tuple3": - switch (_v208._0.ctor) - {case "Black": - switch (_v208._1.ctor) - {case "LBlack": - switch (_v208._2.ctor) - {case "Red": return A5(RBNode, - Black, - _v186._1._1, - _v186._1._2, - _v186._1._3, - _v186._1._4);} - break;} - break;} - break;} - return A4(reportRemBug, - "Black/LBlack/Red", - c, - showLColor(_v186._0._0), - showNColor(_v186._1._0));} - break; - case "RBNode": - switch (_v186._1.ctor) - {case "RBEmpty": - var _v212 = {ctor: "_Tuple3" - ,_0: c - ,_1: _v186._0._0 - ,_2: _v186._1._0}; - switch (_v212.ctor) - {case "_Tuple3": - switch (_v212._0.ctor) - {case "Black": - switch (_v212._1.ctor) - {case "Red": - switch (_v212._2.ctor) - {case "LBlack": - return A5(RBNode, - Black, - _v186._0._1, - _v186._0._2, - _v186._0._3, - _v186._0._4);} - break;} - break;} - break;} - return A4(reportRemBug, - "Black/Red/LBlack", - c, - showNColor(_v186._0._0), - showLColor(_v186._1._0)); - case "RBNode": - var l$ = A5(remove_max, - _v186._0._0, - _v186._0._1, - _v186._0._2, - _v186._0._3, - _v186._0._4); - var r = A5(RBNode, - _v186._1._0, - _v186._1._1, - _v186._1._2, - _v186._1._3, - _v186._1._4); - var l = A5(RBNode, - _v186._0._0, - _v186._0._1, - _v186._0._2, - _v186._0._3, - _v186._0._4); - var $ = max(l), - k = $._0, - v = $._1; - return A5(bubble,c,k,v,l$,r);} - break;} - break;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var update = F3(function (k, - alter, - dict) { - var up = function (dict) { - switch (dict.ctor) - {case "RBEmpty": - switch (dict._0.ctor) - {case "LBlack": - var _v223 = alter($Maybe.Nothing); - switch (_v223.ctor) - {case "Just": - return {ctor: "_Tuple2" - ,_0: Insert - ,_1: A5(RBNode, - Red, - k, - _v223._0, - empty, - empty)}; - case "Nothing": - return {ctor: "_Tuple2" - ,_0: Same - ,_1: empty};} - _U.badCase($moduleName, - "bugs in reporting the exact location right now");} - break; - case "RBNode": - var _v225 = A2($Basics.compare, - k, - dict._1); - switch (_v225.ctor) - {case "EQ": - var _v226 = alter($Maybe.Just(dict._2)); - switch (_v226.ctor) - {case "Just": - return {ctor: "_Tuple2" - ,_0: Same - ,_1: A5(RBNode, - dict._0, - dict._1, - _v226._0, - dict._3, - dict._4)}; - case "Nothing": - return {ctor: "_Tuple2" - ,_0: Remove - ,_1: A3(rem, - dict._0, - dict._3, - dict._4)};} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - case "GT": var $ = up(dict._4), - flag = $._0, - newRight = $._1; - switch (flag.ctor) - {case "Insert": - return {ctor: "_Tuple2" - ,_0: Insert - ,_1: A5(balance, - dict._0, - dict._1, - dict._2, - dict._3, - newRight)}; - case "Remove": - return {ctor: "_Tuple2" - ,_0: Remove - ,_1: A5(bubble, - dict._0, - dict._1, - dict._2, - dict._3, - newRight)}; - case "Same": - return {ctor: "_Tuple2" - ,_0: Same - ,_1: A5(RBNode, - dict._0, - dict._1, - dict._2, - dict._3, - newRight)};} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - case "LT": var $ = up(dict._3), - flag = $._0, - newLeft = $._1; - switch (flag.ctor) - {case "Insert": - return {ctor: "_Tuple2" - ,_0: Insert - ,_1: A5(balance, - dict._0, - dict._1, - dict._2, - newLeft, - dict._4)}; - case "Remove": - return {ctor: "_Tuple2" - ,_0: Remove - ,_1: A5(bubble, - dict._0, - dict._1, - dict._2, - newLeft, - dict._4)}; - case "Same": - return {ctor: "_Tuple2" - ,_0: Same - ,_1: A5(RBNode, - dict._0, - dict._1, - dict._2, - newLeft, - dict._4)};} - _U.badCase($moduleName, - "bugs in reporting the exact location right now");} - _U.badCase($moduleName, - "bugs in reporting the exact location right now");} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var $ = up(dict), - flag = $._0, - updatedDict = $._1; - switch (flag.ctor) - {case "Insert": - return ensureBlackRoot(updatedDict); - case "Remove": - return blacken(updatedDict); - case "Same": - return updatedDict;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var insert = F3(function (key, - value, - dict) { - return A3(update, - key, - $Basics.always($Maybe.Just(value)), - dict); - }); - var singleton = F2(function (key, - value) { - return A3(insert, - key, - value, - empty); - }); - var union = F2(function (t1, - t2) { - return A3(foldl, - insert, - t2, - t1); - }); - var fromList = function (assocs) { - return A3($List.foldl, - F2(function (_v231,dict) { - var $ = _v231, - key = $._0, - value = $._1; - return A3(insert, - key, - value, - dict); - }), - empty, - assocs); - }; - var filter = F2(function (predicate, - dictionary) { - var add = F3(function (key, - value, - dict) { - return A2(predicate, - key, - value) ? A3(insert, - key, - value, - dict) : dict; - }); - return A3(foldl, - add, - empty, - dictionary); - }); - var intersect = F2(function (t1, - t2) { - return A2(filter, - F2(function (k,_v232) { - var _ = _v232; - return A2(member,k,t2); - }), - t1); - }); - var partition = F2(function (predicate, - dict) { - var add = F3(function (key, - value, - _v233) { - var $ = _v233, - t1 = $._0, - t2 = $._1; - return A2(predicate, - key, - value) ? {ctor: "_Tuple2" - ,_0: A3(insert,key,value,t1) - ,_1: t2} : {ctor: "_Tuple2" - ,_0: t1 - ,_1: A3(insert,key,value,t2)}; - }); - return A3(foldl, - add, - {ctor: "_Tuple2" - ,_0: empty - ,_1: empty}, - dict); - }); - var remove = F2(function (key, - dict) { - return A3(update, - key, - $Basics.always($Maybe.Nothing), - dict); - }); - var diff = F2(function (t1,t2) { - return A3(foldl, - F3(function (k,v,t) { - return A2(remove,k,t); - }), - t1, - t2); - }); - _elm.Dict.values = {_op: _op - ,empty: empty - ,singleton: singleton - ,insert: insert - ,update: update - ,isEmpty: isEmpty - ,get: get - ,remove: remove - ,member: member - ,filter: filter - ,partition: partition - ,foldl: foldl - ,foldr: foldr - ,map: map - ,union: union - ,intersect: intersect - ,diff: diff - ,keys: keys - ,values: values - ,toList: toList - ,fromList: fromList}; - return _elm.Dict.values; -}; -Elm.Graphics = Elm.Graphics || {}; -Elm.Graphics.Collage = Elm.Graphics.Collage || {}; -Elm.Graphics.Collage.make = function (_elm) { - "use strict"; - _elm.Graphics = _elm.Graphics || {}; - _elm.Graphics.Collage = _elm.Graphics.Collage || {}; - if (_elm.Graphics.Collage.values) - return _elm.Graphics.Collage.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Graphics.Collage", - $Basics = Elm.Basics.make(_elm), - $Color = Elm.Color.make(_elm), - $Graphics$Element = Elm.Graphics.Element.make(_elm), - $List = Elm.List.make(_elm), - $Native$Graphics$Collage = Elm.Native.Graphics.Collage.make(_elm), - $Text = Elm.Text.make(_elm), - $Transform2D = Elm.Transform2D.make(_elm); - var ngon = F2(function (n,r) { - var m = $Basics.toFloat(n); - var t = 2 * $Basics.pi / m; - var f = function (i) { - return {ctor: "_Tuple2" - ,_0: r * $Basics.cos(t * i) - ,_1: r * $Basics.sin(t * i)}; - }; - return A2($List.map, - f, - _L.range(0,m - 1)); - }); - var oval = F2(function (w,h) { - var hh = h / 2; - var hw = w / 2; - var n = 50; - var t = 2 * $Basics.pi / n; - var f = function (i) { - return {ctor: "_Tuple2" - ,_0: hw * $Basics.cos(t * i) - ,_1: hh * $Basics.sin(t * i)}; - }; - return A2($List.map, - f, - _L.range(0,n - 1)); - }); - var circle = function (r) { - return A2(oval,2 * r,2 * r); - }; - var rect = F2(function (w,h) { - var hh = h / 2; - var hw = w / 2; - return _L.fromArray([{ctor: "_Tuple2" - ,_0: 0 - hw - ,_1: 0 - hh} - ,{ctor: "_Tuple2" - ,_0: 0 - hw - ,_1: hh} - ,{ctor: "_Tuple2",_0: hw,_1: hh} - ,{ctor: "_Tuple2" - ,_0: hw - ,_1: 0 - hh}]); - }); - var square = function (n) { - return A2(rect,n,n); - }; - var polygon = function (points) { - return points; - }; - var segment = F2(function (p1, - p2) { - return _L.fromArray([p1,p2]); - }); - var path = function (ps) { - return ps; - }; - var collage = $Native$Graphics$Collage.collage; - var alpha = F2(function (a,f) { - return _U.replace([["alpha" - ,a]], - f); - }); - var rotate = F2(function (t,f) { - return _U.replace([["theta" - ,f.theta + t]], - f); - }); - var scale = F2(function (s,f) { - return _U.replace([["scale" - ,f.scale * s]], - f); - }); - var moveY = F2(function (y,f) { - return _U.replace([["y" - ,f.y + y]], - f); - }); - var moveX = F2(function (x,f) { - return _U.replace([["x" - ,f.x + x]], - f); - }); - var move = F2(function (_v0,f) { - var $ = _v0, - x = $._0, - y = $._1; - return _U.replace([["x",f.x + x] - ,["y",f.y + y]], - f); - }); - var form = function (f) { - return {_: {} - ,alpha: 1 - ,form: f - ,scale: 1 - ,theta: 0 - ,x: 0 - ,y: 0}; - }; - var Fill = function (a) { - return {ctor: "Fill",_0: a}; - }; - var Line = function (a) { - return {ctor: "Line",_0: a}; - }; - var FGroup = F2(function (a,b) { - return {ctor: "FGroup" - ,_0: a - ,_1: b}; - }); - var group = function (fs) { - return form(A2(FGroup, - $Transform2D.identity, - fs)); - }; - var groupTransform = F2(function (matrix, - fs) { - return form(A2(FGroup, - matrix, - fs)); - }); - var FElement = function (a) { - return {ctor: "FElement" - ,_0: a}; - }; - var toForm = function (e) { - return form(FElement(e)); - }; - var FImage = F4(function (a, - b, - c, - d) { - return {ctor: "FImage" - ,_0: a - ,_1: b - ,_2: c - ,_3: d}; - }); - var sprite = F4(function (w, - h, - pos, - src) { - return form(A4(FImage, - w, - h, - pos, - src)); - }); - var FText = function (a) { - return {ctor: "FText",_0: a}; - }; - var text = function (t) { - return form(FText(t)); - }; - var FOutlinedText = F2(function (a, - b) { - return {ctor: "FOutlinedText" - ,_0: a - ,_1: b}; - }); - var outlinedText = F2(function (ls, - t) { - return form(A2(FOutlinedText, - ls, - t)); - }); - var FShape = F2(function (a,b) { - return {ctor: "FShape" - ,_0: a - ,_1: b}; - }); - var fill = F2(function (style, - shape) { - return form(A2(FShape, - Fill(style), - shape)); - }); - var outlined = F2(function (style, - shape) { - return form(A2(FShape, - Line(style), - shape)); - }); - var FPath = F2(function (a,b) { - return {ctor: "FPath" - ,_0: a - ,_1: b}; - }); - var traced = F2(function (style, - path) { - return form(A2(FPath, - style, - path)); - }); - var LineStyle = F6(function (a, - b, - c, - d, - e, - f) { - return {_: {} - ,cap: c - ,color: a - ,dashOffset: f - ,dashing: e - ,join: d - ,width: b}; - }); - var Clipped = {ctor: "Clipped"}; - var Sharp = function (a) { - return {ctor: "Sharp",_0: a}; - }; - var Smooth = {ctor: "Smooth"}; - var Padded = {ctor: "Padded"}; - var Round = {ctor: "Round"}; - var Flat = {ctor: "Flat"}; - var defaultLine = {_: {} - ,cap: Flat - ,color: $Color.black - ,dashOffset: 0 - ,dashing: _L.fromArray([]) - ,join: Sharp(10) - ,width: 1}; - var solid = function (clr) { - return _U.replace([["color" - ,clr]], - defaultLine); - }; - var dashed = function (clr) { - return _U.replace([["color" - ,clr] - ,["dashing" - ,_L.fromArray([8,4])]], - defaultLine); - }; - var dotted = function (clr) { - return _U.replace([["color" - ,clr] - ,["dashing" - ,_L.fromArray([3,3])]], - defaultLine); - }; - var Grad = function (a) { - return {ctor: "Grad",_0: a}; - }; - var gradient = F2(function (grad, - shape) { - return A2(fill, - Grad(grad), - shape); - }); - var Texture = function (a) { - return {ctor: "Texture" - ,_0: a}; - }; - var textured = F2(function (src, - shape) { - return A2(fill, - Texture(src), - shape); - }); - var Solid = function (a) { - return {ctor: "Solid",_0: a}; - }; - var filled = F2(function (color, - shape) { - return A2(fill, - Solid(color), - shape); - }); - var Form = F6(function (a, - b, - c, - d, - e, - f) { - return {_: {} - ,alpha: e - ,form: f - ,scale: b - ,theta: a - ,x: c - ,y: d}; - }); - _elm.Graphics.Collage.values = {_op: _op - ,collage: collage - ,toForm: toForm - ,filled: filled - ,textured: textured - ,gradient: gradient - ,outlined: outlined - ,traced: traced - ,text: text - ,outlinedText: outlinedText - ,move: move - ,moveX: moveX - ,moveY: moveY - ,scale: scale - ,rotate: rotate - ,alpha: alpha - ,group: group - ,groupTransform: groupTransform - ,rect: rect - ,oval: oval - ,square: square - ,circle: circle - ,ngon: ngon - ,polygon: polygon - ,segment: segment - ,path: path - ,solid: solid - ,dashed: dashed - ,dotted: dotted - ,defaultLine: defaultLine - ,Form: Form - ,LineStyle: LineStyle - ,Flat: Flat - ,Round: Round - ,Padded: Padded - ,Smooth: Smooth - ,Sharp: Sharp - ,Clipped: Clipped}; - return _elm.Graphics.Collage.values; -}; -Elm.Graphics = Elm.Graphics || {}; -Elm.Graphics.Element = Elm.Graphics.Element || {}; -Elm.Graphics.Element.make = function (_elm) { - "use strict"; - _elm.Graphics = _elm.Graphics || {}; - _elm.Graphics.Element = _elm.Graphics.Element || {}; - if (_elm.Graphics.Element.values) - return _elm.Graphics.Element.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Graphics.Element", - $Basics = Elm.Basics.make(_elm), - $Color = Elm.Color.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Native$Graphics$Element = Elm.Native.Graphics.Element.make(_elm), - $Text = Elm.Text.make(_elm); - var DOut = {ctor: "DOut"}; - var outward = DOut; - var DIn = {ctor: "DIn"}; - var inward = DIn; - var DRight = {ctor: "DRight"}; - var right = DRight; - var DLeft = {ctor: "DLeft"}; - var left = DLeft; - var DDown = {ctor: "DDown"}; - var down = DDown; - var DUp = {ctor: "DUp"}; - var up = DUp; - var Position = F4(function (a, - b, - c, - d) { - return {_: {} - ,horizontal: a - ,vertical: b - ,x: c - ,y: d}; - }); - var Relative = function (a) { - return {ctor: "Relative" - ,_0: a}; - }; - var relative = Relative; - var Absolute = function (a) { - return {ctor: "Absolute" - ,_0: a}; - }; - var absolute = Absolute; - var N = {ctor: "N"}; - var bottomLeftAt = F2(function (x, - y) { - return {_: {} - ,horizontal: N - ,vertical: N - ,x: x - ,y: y}; - }); - var Z = {ctor: "Z"}; - var middle = {_: {} - ,horizontal: Z - ,vertical: Z - ,x: Relative(0.5) - ,y: Relative(0.5)}; - var midLeft = _U.replace([["horizontal" - ,N] - ,["x",Absolute(0)]], - middle); - var middleAt = F2(function (x, - y) { - return {_: {} - ,horizontal: Z - ,vertical: Z - ,x: x - ,y: y}; - }); - var midLeftAt = F2(function (x, - y) { - return {_: {} - ,horizontal: N - ,vertical: Z - ,x: x - ,y: y}; - }); - var midBottomAt = F2(function (x, - y) { - return {_: {} - ,horizontal: Z - ,vertical: N - ,x: x - ,y: y}; - }); - var P = {ctor: "P"}; - var topLeft = {_: {} - ,horizontal: N - ,vertical: P - ,x: Absolute(0) - ,y: Absolute(0)}; - var bottomLeft = _U.replace([["vertical" - ,N]], - topLeft); - var topRight = _U.replace([["horizontal" - ,P]], - topLeft); - var bottomRight = _U.replace([["horizontal" - ,P]], - bottomLeft); - var midRight = _U.replace([["horizontal" - ,P]], - midLeft); - var midTop = _U.replace([["vertical" - ,P] - ,["y",Absolute(0)]], - middle); - var midBottom = _U.replace([["vertical" - ,N]], - midTop); - var topLeftAt = F2(function (x, - y) { - return {_: {} - ,horizontal: N - ,vertical: P - ,x: x - ,y: y}; - }); - var topRightAt = F2(function (x, - y) { - return {_: {} - ,horizontal: P - ,vertical: P - ,x: x - ,y: y}; - }); - var bottomRightAt = F2(function (x, - y) { - return {_: {} - ,horizontal: P - ,vertical: N - ,x: x - ,y: y}; - }); - var midRightAt = F2(function (x, - y) { - return {_: {} - ,horizontal: P - ,vertical: Z - ,x: x - ,y: y}; - }); - var midTopAt = F2(function (x, - y) { - return {_: {} - ,horizontal: Z - ,vertical: P - ,x: x - ,y: y}; - }); - var justified = $Native$Graphics$Element.block("justify"); - var centered = $Native$Graphics$Element.block("center"); - var rightAligned = $Native$Graphics$Element.block("right"); - var leftAligned = $Native$Graphics$Element.block("left"); - var show = function (value) { - return leftAligned($Text.monospace($Text.fromString($Basics.toString(value)))); - }; - var Tiled = {ctor: "Tiled"}; - var Cropped = function (a) { - return {ctor: "Cropped" - ,_0: a}; - }; - var Fitted = {ctor: "Fitted"}; - var Plain = {ctor: "Plain"}; - var Custom = {ctor: "Custom"}; - var RawHtml = {ctor: "RawHtml"}; - var Spacer = {ctor: "Spacer"}; - var Flow = F2(function (a,b) { - return {ctor: "Flow" - ,_0: a - ,_1: b}; - }); - var Container = F2(function (a, - b) { - return {ctor: "Container" - ,_0: a - ,_1: b}; - }); - var Image = F4(function (a, - b, - c, - d) { - return {ctor: "Image" - ,_0: a - ,_1: b - ,_2: c - ,_3: d}; - }); - var newElement = $Native$Graphics$Element.newElement; - var image = F3(function (w, - h, - src) { - return A3(newElement, - w, - h, - A4(Image,Plain,w,h,src)); - }); - var fittedImage = F3(function (w, - h, - src) { - return A3(newElement, - w, - h, - A4(Image,Fitted,w,h,src)); - }); - var croppedImage = F4(function (pos, - w, - h, - src) { - return A3(newElement, - w, - h, - A4(Image,Cropped(pos),w,h,src)); - }); - var tiledImage = F3(function (w, - h, - src) { - return A3(newElement, - w, - h, - A4(Image,Tiled,w,h,src)); - }); - var container = F4(function (w, - h, - pos, - e) { - return A3(newElement, - w, - h, - A2(Container,pos,e)); - }); - var spacer = F2(function (w,h) { - return A3(newElement, - w, - h, - Spacer); - }); - var link = F2(function (href, - e) { - var p = e.props; - return {_: {} - ,element: e.element - ,props: _U.replace([["href" - ,href]], - p)}; - }); - var tag = F2(function (name,e) { - var p = e.props; - return {_: {} - ,element: e.element - ,props: _U.replace([["tag" - ,name]], - p)}; - }); - var color = F2(function (c,e) { - var p = e.props; - return {_: {} - ,element: e.element - ,props: _U.replace([["color" - ,$Maybe.Just(c)]], - p)}; - }); - var opacity = F2(function (o, - e) { - var p = e.props; - return {_: {} - ,element: e.element - ,props: _U.replace([["opacity" - ,o]], - p)}; - }); - var height = F2(function (nh, - e) { - var p = e.props; - var props = function () { - var _v0 = e.element; - switch (_v0.ctor) - {case "Image": - return _U.replace([["width" - ,$Basics.round($Basics.toFloat(_v0._1) / $Basics.toFloat(_v0._2) * $Basics.toFloat(nh))]], - p);} - return p; - }(); - return {_: {} - ,element: e.element - ,props: _U.replace([["height" - ,nh]], - p)}; - }); - var width = F2(function (nw,e) { - var p = e.props; - var props = function () { - var _v5 = e.element; - switch (_v5.ctor) - {case "Image": - return _U.replace([["height" - ,$Basics.round($Basics.toFloat(_v5._2) / $Basics.toFloat(_v5._1) * $Basics.toFloat(nw))]], - p); - case "RawHtml": - return _U.replace([["height" - ,$Basics.snd(A2($Native$Graphics$Element.htmlHeight, - nw, - e.element))]], - p);} - return p; - }(); - return {_: {} - ,element: e.element - ,props: _U.replace([["width" - ,nw]], - props)}; - }); - var size = F3(function (w,h,e) { - return A2(height, - h, - A2(width,w,e)); - }); - var sizeOf = function (e) { - return {ctor: "_Tuple2" - ,_0: e.props.width - ,_1: e.props.height}; - }; - var heightOf = function (e) { - return e.props.height; - }; - var widthOf = function (e) { - return e.props.width; - }; - var above = F2(function (hi, - lo) { - return A3(newElement, - A2($Basics.max, - widthOf(hi), - widthOf(lo)), - heightOf(hi) + heightOf(lo), - A2(Flow, - DDown, - _L.fromArray([hi,lo]))); - }); - var below = F2(function (lo, - hi) { - return A3(newElement, - A2($Basics.max, - widthOf(hi), - widthOf(lo)), - heightOf(hi) + heightOf(lo), - A2(Flow, - DDown, - _L.fromArray([hi,lo]))); - }); - var beside = F2(function (lft, - rht) { - return A3(newElement, - widthOf(lft) + widthOf(rht), - A2($Basics.max, - heightOf(lft), - heightOf(rht)), - A2(Flow, - right, - _L.fromArray([lft,rht]))); - }); - var layers = function (es) { - var hs = A2($List.map, - heightOf, - es); - var ws = A2($List.map, - widthOf, - es); - return A3(newElement, - A2($Maybe.withDefault, - 0, - $List.maximum(ws)), - A2($Maybe.withDefault, - 0, - $List.maximum(hs)), - A2(Flow,DOut,es)); - }; - var empty = A2(spacer,0,0); - var flow = F2(function (dir, - es) { - var newFlow = F2(function (w, - h) { - return A3(newElement, - w, - h, - A2(Flow,dir,es)); - }); - var maxOrZero = function (list) { - return A2($Maybe.withDefault, - 0, - $List.maximum(list)); - }; - var hs = A2($List.map, - heightOf, - es); - var ws = A2($List.map, - widthOf, - es); - if (_U.eq(es,_L.fromArray([]))) - return empty; else { - switch (dir.ctor) - {case "DDown": - return A2(newFlow, - maxOrZero(ws), - $List.sum(hs)); - case "DIn": return A2(newFlow, - maxOrZero(ws), - maxOrZero(hs)); - case "DLeft": return A2(newFlow, - $List.sum(ws), - maxOrZero(hs)); - case "DOut": return A2(newFlow, - maxOrZero(ws), - maxOrZero(hs)); - case "DRight": - return A2(newFlow, - $List.sum(ws), - maxOrZero(hs)); - case "DUp": return A2(newFlow, - maxOrZero(ws), - $List.sum(hs));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - } - }); - var Properties = F9(function (a, - b, - c, - d, - e, - f, - g, - h, - i) { - return {_: {} - ,click: i - ,color: e - ,height: c - ,hover: h - ,href: f - ,id: a - ,opacity: d - ,tag: g - ,width: b}; - }); - var Element = F2(function (a, - b) { - return {_: {} - ,element: b - ,props: a}; - }); - _elm.Graphics.Element.values = {_op: _op - ,image: image - ,fittedImage: fittedImage - ,croppedImage: croppedImage - ,tiledImage: tiledImage - ,leftAligned: leftAligned - ,rightAligned: rightAligned - ,centered: centered - ,justified: justified - ,show: show - ,width: width - ,height: height - ,size: size - ,color: color - ,opacity: opacity - ,link: link - ,tag: tag - ,widthOf: widthOf - ,heightOf: heightOf - ,sizeOf: sizeOf - ,flow: flow - ,up: up - ,down: down - ,left: left - ,right: right - ,inward: inward - ,outward: outward - ,layers: layers - ,above: above - ,below: below - ,beside: beside - ,empty: empty - ,spacer: spacer - ,container: container - ,middle: middle - ,midTop: midTop - ,midBottom: midBottom - ,midLeft: midLeft - ,midRight: midRight - ,topLeft: topLeft - ,topRight: topRight - ,bottomLeft: bottomLeft - ,bottomRight: bottomRight - ,absolute: absolute - ,relative: relative - ,middleAt: middleAt - ,midTopAt: midTopAt - ,midBottomAt: midBottomAt - ,midLeftAt: midLeftAt - ,midRightAt: midRightAt - ,topLeftAt: topLeftAt - ,topRightAt: topRightAt - ,bottomLeftAt: bottomLeftAt - ,bottomRightAt: bottomRightAt - ,Element: Element - ,Position: Position}; - return _elm.Graphics.Element.values; -}; -Elm.Html = Elm.Html || {}; -Elm.Html.make = function (_elm) { - "use strict"; - _elm.Html = _elm.Html || {}; - if (_elm.Html.values) - return _elm.Html.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Html", - $Basics = Elm.Basics.make(_elm), - $Graphics$Element = Elm.Graphics.Element.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $VirtualDom = Elm.VirtualDom.make(_elm); - var fromElement = $VirtualDom.fromElement; - var toElement = $VirtualDom.toElement; - var text = $VirtualDom.text; - var node = $VirtualDom.node; - var body = node("body"); - var section = node("section"); - var nav = node("nav"); - var article = node("article"); - var aside = node("aside"); - var h1 = node("h1"); - var h2 = node("h2"); - var h3 = node("h3"); - var h4 = node("h4"); - var h5 = node("h5"); - var h6 = node("h6"); - var header = node("header"); - var footer = node("footer"); - var address = node("address"); - var main$ = node("main"); - var p = node("p"); - var hr = node("hr"); - var pre = node("pre"); - var blockquote = node("blockquote"); - var ol = node("ol"); - var ul = node("ul"); - var li = node("li"); - var dl = node("dl"); - var dt = node("dt"); - var dd = node("dd"); - var figure = node("figure"); - var figcaption = node("figcaption"); - var div = node("div"); - var a = node("a"); - var em = node("em"); - var strong = node("strong"); - var small = node("small"); - var s = node("s"); - var cite = node("cite"); - var q = node("q"); - var dfn = node("dfn"); - var abbr = node("abbr"); - var time = node("time"); - var code = node("code"); - var $var = node("var"); - var samp = node("samp"); - var kbd = node("kbd"); - var sub = node("sub"); - var sup = node("sup"); - var i = node("i"); - var b = node("b"); - var u = node("u"); - var mark = node("mark"); - var ruby = node("ruby"); - var rt = node("rt"); - var rp = node("rp"); - var bdi = node("bdi"); - var bdo = node("bdo"); - var span = node("span"); - var br = node("br"); - var wbr = node("wbr"); - var ins = node("ins"); - var del = node("del"); - var img = node("img"); - var iframe = node("iframe"); - var embed = node("embed"); - var object = node("object"); - var param = node("param"); - var video = node("video"); - var audio = node("audio"); - var source = node("source"); - var track = node("track"); - var canvas = node("canvas"); - var svg = node("svg"); - var math = node("math"); - var table = node("table"); - var caption = node("caption"); - var colgroup = node("colgroup"); - var col = node("col"); - var tbody = node("tbody"); - var thead = node("thead"); - var tfoot = node("tfoot"); - var tr = node("tr"); - var td = node("td"); - var th = node("th"); - var form = node("form"); - var fieldset = node("fieldset"); - var legend = node("legend"); - var label = node("label"); - var input = node("input"); - var button = node("button"); - var select = node("select"); - var datalist = node("datalist"); - var optgroup = node("optgroup"); - var option = node("option"); - var textarea = node("textarea"); - var keygen = node("keygen"); - var output = node("output"); - var progress = node("progress"); - var meter = node("meter"); - var details = node("details"); - var summary = node("summary"); - var menuitem = node("menuitem"); - var menu = node("menu"); - _elm.Html.values = {_op: _op - ,node: node - ,text: text - ,toElement: toElement - ,fromElement: fromElement - ,body: body - ,section: section - ,nav: nav - ,article: article - ,aside: aside - ,h1: h1 - ,h2: h2 - ,h3: h3 - ,h4: h4 - ,h5: h5 - ,h6: h6 - ,header: header - ,footer: footer - ,address: address - ,main$: main$ - ,p: p - ,hr: hr - ,pre: pre - ,blockquote: blockquote - ,ol: ol - ,ul: ul - ,li: li - ,dl: dl - ,dt: dt - ,dd: dd - ,figure: figure - ,figcaption: figcaption - ,div: div - ,a: a - ,em: em - ,strong: strong - ,small: small - ,s: s - ,cite: cite - ,q: q - ,dfn: dfn - ,abbr: abbr - ,time: time - ,code: code - ,$var: $var - ,samp: samp - ,kbd: kbd - ,sub: sub - ,sup: sup - ,i: i - ,b: b - ,u: u - ,mark: mark - ,ruby: ruby - ,rt: rt - ,rp: rp - ,bdi: bdi - ,bdo: bdo - ,span: span - ,br: br - ,wbr: wbr - ,ins: ins - ,del: del - ,img: img - ,iframe: iframe - ,embed: embed - ,object: object - ,param: param - ,video: video - ,audio: audio - ,source: source - ,track: track - ,canvas: canvas - ,svg: svg - ,math: math - ,table: table - ,caption: caption - ,colgroup: colgroup - ,col: col - ,tbody: tbody - ,thead: thead - ,tfoot: tfoot - ,tr: tr - ,td: td - ,th: th - ,form: form - ,fieldset: fieldset - ,legend: legend - ,label: label - ,input: input - ,button: button - ,select: select - ,datalist: datalist - ,optgroup: optgroup - ,option: option - ,textarea: textarea - ,keygen: keygen - ,output: output - ,progress: progress - ,meter: meter - ,details: details - ,summary: summary - ,menuitem: menuitem - ,menu: menu}; - return _elm.Html.values; -}; -Elm.Html = Elm.Html || {}; -Elm.Html.Attributes = Elm.Html.Attributes || {}; -Elm.Html.Attributes.make = function (_elm) { - "use strict"; - _elm.Html = _elm.Html || {}; - _elm.Html.Attributes = _elm.Html.Attributes || {}; - if (_elm.Html.Attributes.values) - return _elm.Html.Attributes.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Html.Attributes", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Json$Encode = Elm.Json.Encode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $String = Elm.String.make(_elm), - $VirtualDom = Elm.VirtualDom.make(_elm); - var attribute = $VirtualDom.attribute; - var property = $VirtualDom.property; - var stringProperty = F2(function (name, - string) { - return A2(property, - name, - $Json$Encode.string(string)); - }); - var $class = function (name) { - return A2(stringProperty, - "className", - name); - }; - var id = function (name) { - return A2(stringProperty, - "id", - name); - }; - var title = function (name) { - return A2(stringProperty, - "title", - name); - }; - var accesskey = function ($char) { - return A2(stringProperty, - "accesskey", - $String.fromList(_L.fromArray([$char]))); - }; - var contextmenu = function (value) { - return A2(stringProperty, - "contextmenu", - value); - }; - var dir = function (value) { - return A2(stringProperty, - "dir", - value); - }; - var draggable = function (value) { - return A2(stringProperty, - "draggable", - value); - }; - var dropzone = function (value) { - return A2(stringProperty, - "dropzone", - value); - }; - var itemprop = function (value) { - return A2(stringProperty, - "itemprop", - value); - }; - var lang = function (value) { - return A2(stringProperty, - "lang", - value); - }; - var tabindex = function (n) { - return A2(stringProperty, - "tabIndex", - $Basics.toString(n)); - }; - var charset = function (value) { - return A2(stringProperty, - "charset", - value); - }; - var content = function (value) { - return A2(stringProperty, - "content", - value); - }; - var httpEquiv = function (value) { - return A2(stringProperty, - "httpEquiv", - value); - }; - var language = function (value) { - return A2(stringProperty, - "language", - value); - }; - var src = function (value) { - return A2(stringProperty, - "src", - value); - }; - var height = function (value) { - return A2(stringProperty, - "height", - $Basics.toString(value)); - }; - var width = function (value) { - return A2(stringProperty, - "width", - $Basics.toString(value)); - }; - var alt = function (value) { - return A2(stringProperty, - "alt", - value); - }; - var preload = function (value) { - return A2(stringProperty, - "preload", - value); - }; - var poster = function (value) { - return A2(stringProperty, - "poster", - value); - }; - var kind = function (value) { - return A2(stringProperty, - "kind", - value); - }; - var srclang = function (value) { - return A2(stringProperty, - "srclang", - value); - }; - var sandbox = function (value) { - return A2(stringProperty, - "sandbox", - value); - }; - var srcdoc = function (value) { - return A2(stringProperty, - "srcdoc", - value); - }; - var type$ = function (value) { - return A2(stringProperty, - "type", - value); - }; - var value = function (value) { - return A2(stringProperty, - "value", - value); - }; - var placeholder = function (value) { - return A2(stringProperty, - "placeholder", - value); - }; - var accept = function (value) { - return A2(stringProperty, - "accept", - value); - }; - var acceptCharset = function (value) { - return A2(stringProperty, - "acceptCharset", - value); - }; - var action = function (value) { - return A2(stringProperty, - "action", - value); - }; - var autocomplete = function (bool) { - return A2(stringProperty, - "autocomplete", - bool ? "on" : "off"); - }; - var autosave = function (value) { - return A2(stringProperty, - "autosave", - value); - }; - var enctype = function (value) { - return A2(stringProperty, - "enctype", - value); - }; - var formaction = function (value) { - return A2(stringProperty, - "formaction", - value); - }; - var list = function (value) { - return A2(stringProperty, - "list", - value); - }; - var minlength = function (n) { - return A2(stringProperty, - "minLength", - $Basics.toString(n)); - }; - var maxlength = function (n) { - return A2(stringProperty, - "maxLength", - $Basics.toString(n)); - }; - var method = function (value) { - return A2(stringProperty, - "method", - value); - }; - var name = function (value) { - return A2(stringProperty, - "name", - value); - }; - var pattern = function (value) { - return A2(stringProperty, - "pattern", - value); - }; - var size = function (n) { - return A2(stringProperty, - "size", - $Basics.toString(n)); - }; - var $for = function (value) { - return A2(stringProperty, - "htmlFor", - value); - }; - var form = function (value) { - return A2(stringProperty, - "form", - value); - }; - var max = function (value) { - return A2(stringProperty, - "max", - value); - }; - var min = function (value) { - return A2(stringProperty, - "min", - value); - }; - var step = function (n) { - return A2(stringProperty, - "step", - n); - }; - var cols = function (n) { - return A2(stringProperty, - "cols", - $Basics.toString(n)); - }; - var rows = function (n) { - return A2(stringProperty, - "rows", - $Basics.toString(n)); - }; - var wrap = function (value) { - return A2(stringProperty, - "wrap", - value); - }; - var usemap = function (value) { - return A2(stringProperty, - "useMap", - value); - }; - var shape = function (value) { - return A2(stringProperty, - "shape", - value); - }; - var coords = function (value) { - return A2(stringProperty, - "coords", - value); - }; - var challenge = function (value) { - return A2(stringProperty, - "challenge", - value); - }; - var keytype = function (value) { - return A2(stringProperty, - "keytype", - value); - }; - var align = function (value) { - return A2(stringProperty, - "align", - value); - }; - var cite = function (value) { - return A2(stringProperty, - "cite", - value); - }; - var href = function (value) { - return A2(stringProperty, - "href", - value); - }; - var target = function (value) { - return A2(stringProperty, - "target", - value); - }; - var downloadAs = function (value) { - return A2(stringProperty, - "download", - value); - }; - var hreflang = function (value) { - return A2(stringProperty, - "hreflang", - value); - }; - var media = function (value) { - return A2(stringProperty, - "media", - value); - }; - var ping = function (value) { - return A2(stringProperty, - "ping", - value); - }; - var rel = function (value) { - return A2(stringProperty, - "rel", - value); - }; - var datetime = function (value) { - return A2(stringProperty, - "datetime", - value); - }; - var pubdate = function (value) { - return A2(stringProperty, - "pubdate", - value); - }; - var start = function (n) { - return A2(stringProperty, - "start", - $Basics.toString(n)); - }; - var colspan = function (n) { - return A2(stringProperty, - "colSpan", - $Basics.toString(n)); - }; - var headers = function (value) { - return A2(stringProperty, - "headers", - value); - }; - var rowspan = function (n) { - return A2(stringProperty, - "rowSpan", - $Basics.toString(n)); - }; - var scope = function (value) { - return A2(stringProperty, - "scope", - value); - }; - var manifest = function (value) { - return A2(stringProperty, - "manifest", - value); - }; - var boolProperty = F2(function (name, - bool) { - return A2(property, - name, - $Json$Encode.bool(bool)); - }); - var hidden = function (bool) { - return A2(boolProperty, - "hidden", - bool); - }; - var contenteditable = function (bool) { - return A2(boolProperty, - "contentEditable", - bool); - }; - var spellcheck = function (bool) { - return A2(boolProperty, - "spellcheck", - bool); - }; - var async = function (bool) { - return A2(boolProperty, - "async", - bool); - }; - var defer = function (bool) { - return A2(boolProperty, - "defer", - bool); - }; - var scoped = function (bool) { - return A2(boolProperty, - "scoped", - bool); - }; - var autoplay = function (bool) { - return A2(boolProperty, - "autoplay", - bool); - }; - var controls = function (bool) { - return A2(boolProperty, - "controls", - bool); - }; - var loop = function (bool) { - return A2(boolProperty, - "loop", - bool); - }; - var $default = function (bool) { - return A2(boolProperty, - "default", - bool); - }; - var seamless = function (bool) { - return A2(boolProperty, - "seamless", - bool); - }; - var checked = function (bool) { - return A2(boolProperty, - "checked", - bool); - }; - var selected = function (bool) { - return A2(boolProperty, - "selected", - bool); - }; - var autofocus = function (bool) { - return A2(boolProperty, - "autofocus", - bool); - }; - var disabled = function (bool) { - return A2(boolProperty, - "disabled", - bool); - }; - var multiple = function (bool) { - return A2(boolProperty, - "multiple", - bool); - }; - var novalidate = function (bool) { - return A2(boolProperty, - "noValidate", - bool); - }; - var readonly = function (bool) { - return A2(boolProperty, - "readOnly", - bool); - }; - var required = function (bool) { - return A2(boolProperty, - "required", - bool); - }; - var ismap = function (value) { - return A2(boolProperty, - "isMap", - value); - }; - var download = function (bool) { - return A2(boolProperty, - "download", - bool); - }; - var reversed = function (bool) { - return A2(boolProperty, - "reversed", - bool); - }; - var classList = function (list) { - return $class($String.join(" ")($List.map($Basics.fst)($List.filter($Basics.snd)(list)))); - }; - var style = function (props) { - return property("style")($Json$Encode.object($List.map(function (_v0) { - var $ = _v0, - key = $._0, - value = $._1; - return {ctor: "_Tuple2" - ,_0: key - ,_1: $Json$Encode.string(value)}; - })(props))); - }; - var key = function (k) { - return A2(stringProperty, - "key", - k); - }; - _elm.Html.Attributes.values = {_op: _op - ,key: key - ,style: style - ,$class: $class - ,classList: classList - ,id: id - ,title: title - ,hidden: hidden - ,type$: type$ - ,value: value - ,checked: checked - ,placeholder: placeholder - ,selected: selected - ,accept: accept - ,acceptCharset: acceptCharset - ,action: action - ,autocomplete: autocomplete - ,autofocus: autofocus - ,autosave: autosave - ,disabled: disabled - ,enctype: enctype - ,formaction: formaction - ,list: list - ,maxlength: maxlength - ,minlength: minlength - ,method: method - ,multiple: multiple - ,name: name - ,novalidate: novalidate - ,pattern: pattern - ,readonly: readonly - ,required: required - ,size: size - ,$for: $for - ,form: form - ,max: max - ,min: min - ,step: step - ,cols: cols - ,rows: rows - ,wrap: wrap - ,href: href - ,target: target - ,download: download - ,downloadAs: downloadAs - ,hreflang: hreflang - ,media: media - ,ping: ping - ,rel: rel - ,ismap: ismap - ,usemap: usemap - ,shape: shape - ,coords: coords - ,src: src - ,height: height - ,width: width - ,alt: alt - ,autoplay: autoplay - ,controls: controls - ,loop: loop - ,preload: preload - ,poster: poster - ,$default: $default - ,kind: kind - ,srclang: srclang - ,sandbox: sandbox - ,seamless: seamless - ,srcdoc: srcdoc - ,reversed: reversed - ,start: start - ,align: align - ,colspan: colspan - ,rowspan: rowspan - ,headers: headers - ,scope: scope - ,async: async - ,charset: charset - ,content: content - ,defer: defer - ,httpEquiv: httpEquiv - ,language: language - ,scoped: scoped - ,accesskey: accesskey - ,contenteditable: contenteditable - ,contextmenu: contextmenu - ,dir: dir - ,draggable: draggable - ,dropzone: dropzone - ,itemprop: itemprop - ,lang: lang - ,spellcheck: spellcheck - ,tabindex: tabindex - ,challenge: challenge - ,keytype: keytype - ,cite: cite - ,datetime: datetime - ,pubdate: pubdate - ,manifest: manifest - ,property: property - ,attribute: attribute}; - return _elm.Html.Attributes.values; -}; -Elm.Html = Elm.Html || {}; -Elm.Html.Events = Elm.Html.Events || {}; -Elm.Html.Events.make = function (_elm) { - "use strict"; - _elm.Html = _elm.Html || {}; - _elm.Html.Events = _elm.Html.Events || {}; - if (_elm.Html.Events.values) - return _elm.Html.Events.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Html.Events", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $VirtualDom = Elm.VirtualDom.make(_elm); - var keyCode = A2($Json$Decode._op[":="], - "keyCode", - $Json$Decode.$int); - var targetChecked = A2($Json$Decode.at, - _L.fromArray(["target" - ,"checked"]), - $Json$Decode.bool); - var targetValue = A2($Json$Decode.at, - _L.fromArray(["target" - ,"value"]), - $Json$Decode.string); - var defaultOptions = $VirtualDom.defaultOptions; - var Options = F2(function (a, - b) { - return {_: {} - ,preventDefault: b - ,stopPropagation: a}; - }); - var onWithOptions = $VirtualDom.onWithOptions; - var on = $VirtualDom.on; - var messageOn = F3(function (name, - addr, - msg) { - return A3(on, - name, - $Json$Decode.value, - function (_v0) { - var _ = _v0; - return A2($Signal.message, - addr, - msg); - }); - }); - var onClick = messageOn("click"); - var onDoubleClick = messageOn("dblclick"); - var onMouseMove = messageOn("mousemove"); - var onMouseDown = messageOn("mousedown"); - var onMouseUp = messageOn("mouseup"); - var onMouseEnter = messageOn("mouseenter"); - var onMouseLeave = messageOn("mouseleave"); - var onMouseOver = messageOn("mouseover"); - var onMouseOut = messageOn("mouseout"); - var onBlur = messageOn("blur"); - var onFocus = messageOn("focus"); - var onSubmit = messageOn("submit"); - var onKey = F3(function (name, - addr, - handler) { - return A3(on, - name, - keyCode, - function (code) { - return A2($Signal.message, - addr, - handler(code)); - }); - }); - var onKeyUp = onKey("keyup"); - var onKeyDown = onKey("keydown"); - var onKeyPress = onKey("keypress"); - _elm.Html.Events.values = {_op: _op - ,onBlur: onBlur - ,onFocus: onFocus - ,onSubmit: onSubmit - ,onKeyUp: onKeyUp - ,onKeyDown: onKeyDown - ,onKeyPress: onKeyPress - ,onClick: onClick - ,onDoubleClick: onDoubleClick - ,onMouseMove: onMouseMove - ,onMouseDown: onMouseDown - ,onMouseUp: onMouseUp - ,onMouseEnter: onMouseEnter - ,onMouseLeave: onMouseLeave - ,onMouseOver: onMouseOver - ,onMouseOut: onMouseOut - ,on: on - ,onWithOptions: onWithOptions - ,defaultOptions: defaultOptions - ,targetValue: targetValue - ,targetChecked: targetChecked - ,keyCode: keyCode - ,Options: Options}; - return _elm.Html.Events.values; -}; -Elm.Http = Elm.Http || {}; -Elm.Http.make = function (_elm) { - "use strict"; - _elm.Http = _elm.Http || {}; - if (_elm.Http.values) - return _elm.Http.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Http", - $Basics = Elm.Basics.make(_elm), - $Dict = Elm.Dict.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Native$Http = Elm.Native.Http.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $String = Elm.String.make(_elm), - $Task = Elm.Task.make(_elm), - $Time = Elm.Time.make(_elm); - var send = $Native$Http.send; - var BadResponse = F2(function (a, - b) { - return {ctor: "BadResponse" - ,_0: a - ,_1: b}; - }); - var UnexpectedPayload = function (a) { - return {ctor: "UnexpectedPayload" - ,_0: a}; - }; - var handleResponse = F2(function (handle, - response) { - var _v0 = _U.cmp(200, - response.status) < 1 && _U.cmp(response.status, - 300) < 0; - switch (_v0) - {case false: - return $Task.fail(A2(BadResponse, - response.status, - response.statusText)); - case true: - var _v1 = response.value; - switch (_v1.ctor) - {case "Text": - return handle(_v1._0);} - return $Task.fail(UnexpectedPayload("Response body is a blob, expecting a string."));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var NetworkError = {ctor: "NetworkError"}; - var Timeout = {ctor: "Timeout"}; - var promoteError = function (rawError) { - switch (rawError.ctor) - {case "RawNetworkError": - return NetworkError; - case "RawTimeout": - return Timeout;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var fromJson = F2(function (decoder, - response) { - var decode = function (str) { - var _v4 = A2($Json$Decode.decodeString, - decoder, - str); - switch (_v4.ctor) - {case "Err": - return $Task.fail(UnexpectedPayload(_v4._0)); - case "Ok": - return $Task.succeed(_v4._0);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - return A2($Task.andThen, - A2($Task.mapError, - promoteError, - response), - handleResponse(decode)); - }); - var RawNetworkError = {ctor: "RawNetworkError"}; - var RawTimeout = {ctor: "RawTimeout"}; - var Blob = function (a) { - return {ctor: "Blob",_0: a}; - }; - var Text = function (a) { - return {ctor: "Text",_0: a}; - }; - var Response = F5(function (a, - b, - c, - d, - e) { - return {_: {} - ,headers: c - ,status: a - ,statusText: b - ,url: d - ,value: e}; - }); - var defaultSettings = {_: {} - ,desiredResponseType: $Maybe.Nothing - ,onProgress: $Maybe.Nothing - ,onStart: $Maybe.Nothing - ,timeout: 0}; - var post = F3(function (decoder, - url, - body) { - var request = {_: {} - ,body: body - ,headers: _L.fromArray([]) - ,url: url - ,verb: "POST"}; - return A2(fromJson, - decoder, - A2(send, - defaultSettings, - request)); - }); - var Settings = F4(function (a, - b, - c, - d) { - return {_: {} - ,desiredResponseType: d - ,onProgress: c - ,onStart: b - ,timeout: a}; - }); - var multipart = $Native$Http.multipart; - var FileData = F3(function (a, - b, - c) { - return {ctor: "FileData" - ,_0: a - ,_1: b - ,_2: c}; - }); - var BlobData = F3(function (a, - b, - c) { - return {ctor: "BlobData" - ,_0: a - ,_1: b - ,_2: c}; - }); - var blobData = BlobData; - var StringData = F2(function (a, - b) { - return {ctor: "StringData" - ,_0: a - ,_1: b}; - }); - var stringData = StringData; - var BodyBlob = function (a) { - return {ctor: "BodyBlob" - ,_0: a}; - }; - var BodyFormData = {ctor: "BodyFormData"}; - var ArrayBuffer = {ctor: "ArrayBuffer"}; - var BodyString = function (a) { - return {ctor: "BodyString" - ,_0: a}; - }; - var string = BodyString; - var Empty = {ctor: "Empty"}; - var empty = Empty; - var getString = function (url) { - var request = {_: {} - ,body: empty - ,headers: _L.fromArray([]) - ,url: url - ,verb: "GET"}; - return A2($Task.andThen, - A2($Task.mapError, - promoteError, - A2(send, - defaultSettings, - request)), - handleResponse($Task.succeed)); - }; - var get = F2(function (decoder, - url) { - var request = {_: {} - ,body: empty - ,headers: _L.fromArray([]) - ,url: url - ,verb: "GET"}; - return A2(fromJson, - decoder, - A2(send, - defaultSettings, - request)); - }); - var Request = F4(function (a, - b, - c, - d) { - return {_: {} - ,body: d - ,headers: b - ,url: c - ,verb: a}; - }); - var uriDecode = $Native$Http.uriDecode; - var uriEncode = $Native$Http.uriEncode; - var queryEscape = function (string) { - return A2($String.join, - "+", - A2($String.split, - "%20", - uriEncode(string))); - }; - var queryPair = function (_v7) { - var $ = _v7, - key = $._0, - value = $._1; - return A2($Basics._op["++"], - queryEscape(key), - A2($Basics._op["++"], - "=", - queryEscape(value))); - }; - var url = F2(function (domain, - args) { - switch (args.ctor) - {case "[]": return domain;} - return A2($Basics._op["++"], - domain, - A2($Basics._op["++"], - "?", - A2($String.join, - "&", - A2($List.map,queryPair,args)))); - }); - var TODO_implement_file_in_another_library = {ctor: "TODO_implement_file_in_another_library"}; - var TODO_implement_blob_in_another_library = {ctor: "TODO_implement_blob_in_another_library"}; - _elm.Http.values = {_op: _op - ,getString: getString - ,get: get - ,post: post - ,send: send - ,url: url - ,uriEncode: uriEncode - ,uriDecode: uriDecode - ,empty: empty - ,string: string - ,multipart: multipart - ,stringData: stringData - ,blobData: blobData - ,defaultSettings: defaultSettings - ,fromJson: fromJson - ,Request: Request - ,Settings: Settings - ,Response: Response - ,Text: Text - ,Blob: Blob - ,Timeout: Timeout - ,NetworkError: NetworkError - ,UnexpectedPayload: UnexpectedPayload - ,BadResponse: BadResponse - ,RawTimeout: RawTimeout - ,RawNetworkError: RawNetworkError}; - return _elm.Http.values; -}; -Elm.InitViewAction = Elm.InitViewAction || {}; -Elm.InitViewAction.make = function (_elm) { - "use strict"; - _elm.InitViewAction = _elm.InitViewAction || {}; - if (_elm.InitViewAction.values) - return _elm.InitViewAction.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "InitViewAction", - $Basics = Elm.Basics.make(_elm), - $Http = Elm.Http.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Payer = Elm.Model.Payer.make(_elm), - $Model$Payment = Elm.Model.Payment.make(_elm), - $Model$User = Elm.Model.User.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Task = Elm.Task.make(_elm), - $Update = Elm.Update.make(_elm); - var loggedInView = A2($Task.andMap, - A2($Task.andMap, - A2($Task.andMap, - A2($Task.andMap, - A2($Task.andMap, - A2($Task.map, - $Update.GoLoggedInView, - A2($Http.get, - $Model$User.usersDecoder, - "/users")), - A2($Http.get, - A2($Json$Decode._op[":="], - "id", - $Model$User.userIdDecoder), - "/whoAmI")), - A2($Http.get, - $Model$Payment.paymentsDecoder, - "/monthlyPayments")), - A2($Http.get, - $Model$Payment.paymentsDecoder, - A2($Basics._op["++"], - "/payments?page=1&perPage=", - $Basics.toString($Model$Payment.perPage)))), - A2($Http.get, - A2($Json$Decode._op[":="], - "number", - $Json$Decode.$int), - "/payments/count")), - A2($Http.get, - $Model$Payer.payersDecoder, - "/payers")); - var initViewAction = A2($Task.onError, - loggedInView, - $Basics.always($Task.succeed($Update.GoSignInView))); - _elm.InitViewAction.values = {_op: _op - ,initViewAction: initViewAction}; - return _elm.InitViewAction.values; -}; -Elm.Json = Elm.Json || {}; -Elm.Json.Decode = Elm.Json.Decode || {}; -Elm.Json.Decode.make = function (_elm) { - "use strict"; - _elm.Json = _elm.Json || {}; - _elm.Json.Decode = _elm.Json.Decode || {}; - if (_elm.Json.Decode.values) - return _elm.Json.Decode.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Json.Decode", - $Array = Elm.Array.make(_elm), - $Dict = Elm.Dict.make(_elm), - $Json$Encode = Elm.Json.Encode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Native$Json = Elm.Native.Json.make(_elm), - $Result = Elm.Result.make(_elm); - var tuple8 = $Native$Json.decodeTuple8; - var tuple7 = $Native$Json.decodeTuple7; - var tuple6 = $Native$Json.decodeTuple6; - var tuple5 = $Native$Json.decodeTuple5; - var tuple4 = $Native$Json.decodeTuple4; - var tuple3 = $Native$Json.decodeTuple3; - var tuple2 = $Native$Json.decodeTuple2; - var tuple1 = $Native$Json.decodeTuple1; - var succeed = $Native$Json.succeed; - var fail = $Native$Json.fail; - var andThen = $Native$Json.andThen; - var customDecoder = $Native$Json.customDecoder; - var decodeValue = $Native$Json.runDecoderValue; - var value = $Native$Json.decodeValue; - var maybe = $Native$Json.decodeMaybe; - var $null = $Native$Json.decodeNull; - var array = $Native$Json.decodeArray; - var list = $Native$Json.decodeList; - var bool = $Native$Json.decodeBool; - var $int = $Native$Json.decodeInt; - var $float = $Native$Json.decodeFloat; - var string = $Native$Json.decodeString; - var oneOf = $Native$Json.oneOf; - var keyValuePairs = $Native$Json.decodeKeyValuePairs; - var object8 = $Native$Json.decodeObject8; - var object7 = $Native$Json.decodeObject7; - var object6 = $Native$Json.decodeObject6; - var object5 = $Native$Json.decodeObject5; - var object4 = $Native$Json.decodeObject4; - var object3 = $Native$Json.decodeObject3; - var object2 = $Native$Json.decodeObject2; - var object1 = $Native$Json.decodeObject1; - _op[":="] = $Native$Json.decodeField; - var at = F2(function (fields, - decoder) { - return A3($List.foldr, - F2(function (x,y) { - return A2(_op[":="],x,y); - }), - decoder, - fields); - }); - var decodeString = $Native$Json.runDecoderString; - var map = $Native$Json.decodeObject1; - var dict = function (decoder) { - return A2(map, - $Dict.fromList, - keyValuePairs(decoder)); - }; - var Decoder = {ctor: "Decoder"}; - _elm.Json.Decode.values = {_op: _op - ,decodeString: decodeString - ,decodeValue: decodeValue - ,string: string - ,$int: $int - ,$float: $float - ,bool: bool - ,$null: $null - ,list: list - ,array: array - ,tuple1: tuple1 - ,tuple2: tuple2 - ,tuple3: tuple3 - ,tuple4: tuple4 - ,tuple5: tuple5 - ,tuple6: tuple6 - ,tuple7: tuple7 - ,tuple8: tuple8 - ,at: at - ,object1: object1 - ,object2: object2 - ,object3: object3 - ,object4: object4 - ,object5: object5 - ,object6: object6 - ,object7: object7 - ,object8: object8 - ,keyValuePairs: keyValuePairs - ,dict: dict - ,maybe: maybe - ,oneOf: oneOf - ,map: map - ,fail: fail - ,succeed: succeed - ,andThen: andThen - ,value: value - ,customDecoder: customDecoder - ,Decoder: Decoder}; - return _elm.Json.Decode.values; -}; -Elm.Json = Elm.Json || {}; -Elm.Json.Encode = Elm.Json.Encode || {}; -Elm.Json.Encode.make = function (_elm) { - "use strict"; - _elm.Json = _elm.Json || {}; - _elm.Json.Encode = _elm.Json.Encode || {}; - if (_elm.Json.Encode.values) - return _elm.Json.Encode.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Json.Encode", - $Array = Elm.Array.make(_elm), - $Native$Json = Elm.Native.Json.make(_elm); - var list = $Native$Json.encodeList; - var array = $Native$Json.encodeArray; - var object = $Native$Json.encodeObject; - var $null = $Native$Json.encodeNull; - var bool = $Native$Json.identity; - var $float = $Native$Json.identity; - var $int = $Native$Json.identity; - var string = $Native$Json.identity; - var encode = $Native$Json.encode; - var Value = {ctor: "Value"}; - _elm.Json.Encode.values = {_op: _op - ,encode: encode - ,string: string - ,$int: $int - ,$float: $float - ,bool: bool - ,$null: $null - ,list: list - ,array: array - ,object: object - ,Value: Value}; - return _elm.Json.Encode.values; -}; -Elm.List = Elm.List || {}; -Elm.List.make = function (_elm) { - "use strict"; - _elm.List = _elm.List || {}; - if (_elm.List.values) - return _elm.List.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "List", - $Basics = Elm.Basics.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Native$List = Elm.Native.List.make(_elm); - var sortWith = $Native$List.sortWith; - var sortBy = $Native$List.sortBy; - var sort = function (xs) { - return A2(sortBy, - $Basics.identity, - xs); - }; - var repeat = $Native$List.repeat; - var drop = $Native$List.drop; - var take = $Native$List.take; - var map5 = $Native$List.map5; - var map4 = $Native$List.map4; - var map3 = $Native$List.map3; - var map2 = $Native$List.map2; - var any = $Native$List.any; - var all = F2(function (pred, - xs) { - return $Basics.not(A2(any, - function ($) { - return $Basics.not(pred($)); - }, - xs)); - }); - var foldr = $Native$List.foldr; - var foldl = $Native$List.foldl; - var length = function (xs) { - return A3(foldl, - F2(function (_v0,i) { - var _ = _v0; - return i + 1; - }), - 0, - xs); - }; - var sum = function (numbers) { - return A3(foldl, - F2(function (x,y) { - return x + y; - }), - 0, - numbers); - }; - var product = function (numbers) { - return A3(foldl, - F2(function (x,y) { - return x * y; - }), - 1, - numbers); - }; - var maximum = function (list) { - switch (list.ctor) - {case "::": - return $Maybe.Just(A3(foldl, - $Basics.max, - list._0, - list._1));} - return $Maybe.Nothing; - }; - var minimum = function (list) { - switch (list.ctor) - {case "::": - return $Maybe.Just(A3(foldl, - $Basics.min, - list._0, - list._1));} - return $Maybe.Nothing; - }; - var indexedMap = F2(function (f, - xs) { - return A3(map2, - f, - _L.range(0,length(xs) - 1), - xs); - }); - var member = F2(function (x, - xs) { - return A2(any, - function (a) { - return _U.eq(a,x); - }, - xs); - }); - var isEmpty = function (xs) { - switch (xs.ctor) - {case "[]": return true;} - return false; - }; - var tail = function (list) { - switch (list.ctor) - {case "::": - return $Maybe.Just(list._1); - case "[]": - return $Maybe.Nothing;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var head = function (list) { - switch (list.ctor) - {case "::": - return $Maybe.Just(list._0); - case "[]": - return $Maybe.Nothing;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - _op["::"] = $Native$List.cons; - var map = F2(function (f,xs) { - return A3(foldr, - F2(function (x,acc) { - return A2(_op["::"], - f(x), - acc); - }), - _L.fromArray([]), - xs); - }); - var filter = F2(function (pred, - xs) { - var conditionalCons = F2(function (x, - xs$) { - return pred(x) ? A2(_op["::"], - x, - xs$) : xs$; - }); - return A3(foldr, - conditionalCons, - _L.fromArray([]), - xs); - }); - var maybeCons = F3(function (f, - mx, - xs) { - var _v14 = f(mx); - switch (_v14.ctor) - {case "Just": - return A2(_op["::"],_v14._0,xs); - case "Nothing": return xs;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var filterMap = F2(function (f, - xs) { - return A3(foldr, - maybeCons(f), - _L.fromArray([]), - xs); - }); - var reverse = function (list) { - return A3(foldl, - F2(function (x,y) { - return A2(_op["::"],x,y); - }), - _L.fromArray([]), - list); - }; - var scanl = F3(function (f, - b, - xs) { - var scan1 = F2(function (x, - accAcc) { - switch (accAcc.ctor) - {case "::": return A2(_op["::"], - A2(f,x,accAcc._0), - accAcc); - case "[]": - return _L.fromArray([]);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - return reverse(A3(foldl, - scan1, - _L.fromArray([b]), - xs)); - }); - var append = F2(function (xs, - ys) { - switch (ys.ctor) - {case "[]": return xs;} - return A3(foldr, - F2(function (x,y) { - return A2(_op["::"],x,y); - }), - ys, - xs); - }); - var concat = function (lists) { - return A3(foldr, - append, - _L.fromArray([]), - lists); - }; - var concatMap = F2(function (f, - list) { - return concat(A2(map, - f, - list)); - }); - var partition = F2(function (pred, - list) { - var step = F2(function (x, - _v20) { - var $ = _v20, - trues = $._0, - falses = $._1; - return pred(x) ? {ctor: "_Tuple2" - ,_0: A2(_op["::"],x,trues) - ,_1: falses} : {ctor: "_Tuple2" - ,_0: trues - ,_1: A2(_op["::"],x,falses)}; - }); - return A3(foldr, - step, - {ctor: "_Tuple2" - ,_0: _L.fromArray([]) - ,_1: _L.fromArray([])}, - list); - }); - var unzip = function (pairs) { - var step = F2(function (_v21, - _v22) { - var $ = _v21, - x = $._0, - y = $._1; - var $ = _v22, - xs = $._0, - ys = $._1; - return {ctor: "_Tuple2" - ,_0: A2(_op["::"],x,xs) - ,_1: A2(_op["::"],y,ys)}; - }); - return A3(foldr, - step, - {ctor: "_Tuple2" - ,_0: _L.fromArray([]) - ,_1: _L.fromArray([])}, - pairs); - }; - var intersperse = F2(function (sep, - xs) { - switch (xs.ctor) - {case "::": - var step = F2(function (x, - rest) { - return A2(_op["::"], - sep, - A2(_op["::"],x,rest)); - }); - var spersed = A3(foldr, - step, - _L.fromArray([]), - xs._1); - return A2(_op["::"], - xs._0, - spersed); - case "[]": - return _L.fromArray([]);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - _elm.List.values = {_op: _op - ,isEmpty: isEmpty - ,length: length - ,reverse: reverse - ,member: member - ,head: head - ,tail: tail - ,filter: filter - ,take: take - ,drop: drop - ,repeat: repeat - ,append: append - ,concat: concat - ,intersperse: intersperse - ,partition: partition - ,unzip: unzip - ,map: map - ,map2: map2 - ,map3: map3 - ,map4: map4 - ,map5: map5 - ,filterMap: filterMap - ,concatMap: concatMap - ,indexedMap: indexedMap - ,foldr: foldr - ,foldl: foldl - ,sum: sum - ,product: product - ,maximum: maximum - ,minimum: minimum - ,all: all - ,any: any - ,scanl: scanl - ,sort: sort - ,sortBy: sortBy - ,sortWith: sortWith}; - return _elm.List.values; -}; -Elm.Main = Elm.Main || {}; -Elm.Main.make = function (_elm) { - "use strict"; - _elm.Main = _elm.Main || {}; - if (_elm.Main.values) - return _elm.Main.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Main", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Http = Elm.Http.make(_elm), - $InitViewAction = Elm.InitViewAction.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model = Elm.Model.make(_elm), - $Persona = Elm.Persona.make(_elm), - $Result = Elm.Result.make(_elm), - $ServerCommunication = Elm.ServerCommunication.make(_elm), - $Sign = Elm.Sign.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Task = Elm.Task.make(_elm), - $Time = Elm.Time.make(_elm), - $Update = Elm.Update.make(_elm), - $View$Page = Elm.View.Page.make(_elm); - var sign = Elm.Native.Port.make(_elm).inboundSignal("sign", - "Json.Decode.Value", - function (v) { - return v; - }); - var signCommunication = A2($Signal.map, - function ($) { - return $Sign.toServerCommunication($Sign.decodeOperation($)); - }, - sign); - var persona = Elm.Native.Port.make(_elm).outboundSignal("persona", - function (v) { - return v; - }, - A2($Signal.map, - $Persona.toString, - $Persona.operations.signal)); - var serverCommunicationsPort = Elm.Native.Task.make(_elm).performSignal("serverCommunicationsPort", - A2($Signal.map, - function (comm) { - return A2($Basics.flip, - $Task.andThen, - function (action) { - return A2($Signal.send, - $Update.actions.address, - action); - })($ServerCommunication.sendRequest(comm)); - }, - A2($Signal.merge, - signCommunication, - $ServerCommunication.serverCommunications.signal))); - var initView = Elm.Native.Task.make(_elm).perform(A2($Task.andThen, - $InitViewAction.initViewAction, - $Signal.send($Update.actions.address))); - var ready = Elm.Native.Port.make(_elm).outboundSignal("ready", - function (v) { - return v; - }, - $Signal.constant("ready")); - var config = Elm.Native.Port.make(_elm).inbound("config", - "String", - function (v) { - return typeof v === "string" || typeof v === "object" && v instanceof String ? v : _U.badPort("a string", - v); - }); - var translations = Elm.Native.Port.make(_elm).inbound("translations", - "String", - function (v) { - return typeof v === "string" || typeof v === "object" && v instanceof String ? v : _U.badPort("a string", - v); - }); - var initialTime = Elm.Native.Port.make(_elm).inbound("initialTime", - "Time.Time", - function (v) { - return typeof v === "number" ? v : _U.badPort("a number", - v); - }); - var update = $Signal.mergeMany(_L.fromArray([A2($Signal.map, - $Update.UpdateTime, - $Time.every(1000)) - ,$Update.actions.signal])); - var model = A3($Signal.foldp, - $Update.updateModel, - A3($Model.initialModel, - initialTime, - translations, - config), - update); - var main = A2($Signal.map, - $View$Page.renderPage, - model); - _elm.Main.values = {_op: _op - ,main: main}; - return _elm.Main.values; -}; -Elm.Maybe = Elm.Maybe || {}; -Elm.Maybe.make = function (_elm) { - "use strict"; - _elm.Maybe = _elm.Maybe || {}; - if (_elm.Maybe.values) - return _elm.Maybe.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Maybe"; - var withDefault = F2(function ($default, - maybe) { - switch (maybe.ctor) - {case "Just": return maybe._0; - case "Nothing": - return $default;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var Nothing = {ctor: "Nothing"}; - var oneOf = function (maybes) { - _v2: while (true) { - switch (maybes.ctor) - {case "::": - switch (maybes._0.ctor) - {case "Just": return maybes._0; - case "Nothing": - var _v8 = maybes._1; - maybes = _v8; - continue _v2;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - case "[]": return Nothing;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - } - }; - var andThen = F2(function (maybeValue, - callback) { - switch (maybeValue.ctor) - {case "Just": - return callback(maybeValue._0); - case "Nothing": return Nothing;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var Just = function (a) { - return {ctor: "Just",_0: a}; - }; - var map = F2(function (f, - maybe) { - switch (maybe.ctor) - {case "Just": - return Just(f(maybe._0)); - case "Nothing": return Nothing;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - _elm.Maybe.values = {_op: _op - ,andThen: andThen - ,map: map - ,withDefault: withDefault - ,oneOf: oneOf - ,Just: Just - ,Nothing: Nothing}; - return _elm.Maybe.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - if (_elm.Model.values) - return _elm.Model.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model", - $Basics = Elm.Basics.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Config = Elm.Model.Config.make(_elm), - $Model$Translations = Elm.Model.Translations.make(_elm), - $Model$View = Elm.Model.View.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Time = Elm.Time.make(_elm); - var initialModel = F3(function (initialTime, - translationsValue, - configValue) { - return {_: {} - ,config: function () { - var _v3 = A2($Json$Decode.decodeString, - $Model$Config.configDecoder, - configValue); - switch (_v3.ctor) - {case "Err": return {_: {} - ,currency: ""}; - case "Ok": return _v3._0;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }() - ,currentTime: initialTime - ,translations: function () { - var _v0 = A2($Json$Decode.decodeString, - $Model$Translations.translationsDecoder, - translationsValue); - switch (_v0.ctor) - {case "Err": - return _L.fromArray([]); - case "Ok": return _v0._0;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }() - ,view: $Model$View.LoadingView}; - }); - var Model = F4(function (a, - b, - c, - d) { - return {_: {} - ,config: d - ,currentTime: b - ,translations: c - ,view: a}; - }); - _elm.Model.values = {_op: _op - ,initialModel: initialModel - ,Model: Model}; - return _elm.Model.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.Config = Elm.Model.Config || {}; -Elm.Model.Config.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.Config = _elm.Model.Config || {}; - if (_elm.Model.Config.values) - return _elm.Model.Config.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.Config", - $Basics = Elm.Basics.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var defaultConfig = {_: {} - ,currency: "€"}; - var Config = function (a) { - return {_: {},currency: a}; - }; - var configDecoder = A2($Json$Decode.object1, - Config, - A2($Json$Decode._op[":="], - "currency", - $Json$Decode.string)); - _elm.Model.Config.values = {_op: _op - ,configDecoder: configDecoder - ,Config: Config}; - return _elm.Model.Config.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.Date = Elm.Model.Date || {}; -Elm.Model.Date.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.Date = _elm.Model.Date || {}; - if (_elm.Model.Date.values) - return _elm.Model.Date.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.Date", - $Basics = Elm.Basics.make(_elm), - $Date = Elm.Date.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Time = Elm.Time.make(_elm); - var dateDecoder = A2($Json$Decode.customDecoder, - $Json$Decode.string, - $Date.fromString); - var timeDecoder = A2($Json$Decode.map, - $Date.toTime, - dateDecoder); - _elm.Model.Date.values = {_op: _op - ,timeDecoder: timeDecoder - ,dateDecoder: dateDecoder}; - return _elm.Model.Date.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.Income = Elm.Model.Income || {}; -Elm.Model.Income.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.Income = _elm.Model.Income || {}; - if (_elm.Model.Income.values) - return _elm.Model.Income.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.Income", - $Basics = Elm.Basics.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Date = Elm.Model.Date.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Time = Elm.Time.make(_elm), - $Utils$Maybe = Elm.Utils.Maybe.make(_elm); - var durationIncome = function (_v0) { - var $ = _v0, - duration = $._0, - income = $._1; - return $Basics.truncate(duration * $Basics.toFloat(income) / ($Time.hour * 24 * 365 / 12)); - }; - var getIncomesWithDuration = function (incomes) { - switch (incomes.ctor) - {case "::": - switch (incomes._1.ctor) - {case "::": - return A2($List._op["::"], - {ctor: "_Tuple2" - ,_0: incomes._1._0.creation - incomes._0.creation - ,_1: incomes._0.amount}, - getIncomesWithDuration(A2($List._op["::"], - incomes._1._0, - incomes._1._1)));} - break;} - return _L.fromArray([]); - }; - var cumulativeIncome = F2(function (currentTime, - incomes) { - return $List.sum($List.map(durationIncome)(getIncomesWithDuration(A2($Basics._op["++"], - incomes, - _L.fromArray([{_: {} - ,amount: 0 - ,creation: currentTime}]))))); - }); - var getIncomesAt = F2(function (time, - incomes) { - _v6: while (true) { - switch (incomes.ctor) - {case "::": - switch (incomes._1.ctor) - {case "::": - if (_U.cmp(incomes._0.creation, - time) < 0 && _U.cmp(incomes._1._0.creation, - time) > 0) - return $Maybe.Just({_: {} - ,amount: incomes._1._0.amount - ,creation: time}); else { - var _v12 = time, - _v13 = A2($List._op["::"], - incomes._1._0, - incomes._1._1); - time = _v12; - incomes = _v13; - continue _v6; - } - case "[]": - return _U.cmp(incomes._0.creation, - time) < 0 ? $Maybe.Just({_: {} - ,amount: incomes._0.amount - ,creation: time}) : $Maybe.Nothing;} - break; - case "[]": - return $Maybe.Nothing;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - } - }); - var getOrderedIncomesSince = F2(function (time, - incomes) { - var orderedIncomesSince = A2($List.filter, - function (income) { - return _U.cmp(income.creation, - time) > -1; - }, - incomes); - var mbStarterIncome = A2(getIncomesAt, - time, - incomes); - return A2($Basics._op["++"], - $Utils$Maybe.maybeToList(mbStarterIncome), - orderedIncomesSince); - }); - var cumulativeIncomesSince = F3(function (currentTime, - since, - incomes) { - return A2(cumulativeIncome, - currentTime, - A2(getOrderedIncomesSince, - since, - incomes)); - }); - var incomeDefinedForAll = function (usersIncomes) { - var firstIncomes = A2($List.map, - function ($) { - return $List.head($List.sortBy(function (_) { - return _.creation; - })($)); - }, - usersIncomes); - return A2($List.all, - $Utils$Maybe.isJust, - firstIncomes) ? function ($) { - return $List.head($List.reverse($List.sort($List.map(function (_) { - return _.creation; - })($Utils$Maybe.catMaybes($))))); - }(firstIncomes) : $Maybe.Nothing; - }; - var Income = F2(function (a,b) { - return {_: {} - ,amount: b - ,creation: a}; - }); - var incomeDecoder = A3($Json$Decode.object2, - Income, - A2($Json$Decode._op[":="], - "creation", - $Model$Date.timeDecoder), - A2($Json$Decode._op[":="], - "amount", - $Json$Decode.$int)); - _elm.Model.Income.values = {_op: _op - ,incomeDecoder: incomeDecoder - ,incomeDefinedForAll: incomeDefinedForAll - ,cumulativeIncomesSince: cumulativeIncomesSince - ,Income: Income}; - return _elm.Model.Income.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.Payer = Elm.Model.Payer || {}; -Elm.Model.Payer.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.Payer = _elm.Model.Payer || {}; - if (_elm.Model.Payer.values) - return _elm.Model.Payer.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.Payer", - $Basics = Elm.Basics.make(_elm), - $Dict = Elm.Dict.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Income = Elm.Model.Income.make(_elm), - $Model$User = Elm.Model.User.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Time = Elm.Time.make(_elm), - $Utils$Dict = Elm.Utils.Dict.make(_elm); - var getFinalDiff = F2(function (maxRatio, - payer) { - var postIncomeDiff = $Basics.truncate(-1 * (maxRatio - payer.ratio) * $Basics.toFloat(payer.cumulativeIncome)); - return postIncomeDiff + payer.preIncomePaymentSum; - }); - var getPostPaymentPayer = F3(function (currentTime, - since, - payer) { - var cumulativeIncome = A3($Model$Income.cumulativeIncomesSince, - currentTime, - since, - payer.incomes); - return {_: {} - ,cumulativeIncome: cumulativeIncome - ,preIncomePaymentSum: payer.preIncomePaymentSum - ,ratio: $Basics.toFloat(payer.postIncomePaymentSum) / $Basics.toFloat(cumulativeIncome)}; - }); - var PostPaymentPayer = F3(function (a, - b, - c) { - return {_: {} - ,cumulativeIncome: b - ,preIncomePaymentSum: a - ,ratio: c}; - }); - var exceedingPayersFromAmounts = function (userAmounts) { - var mbMinAmount = function ($) { - return $List.minimum($List.map($Basics.snd)($)); - }(userAmounts); - switch (mbMinAmount.ctor) - {case "Just": - return $List.filter(function (payer) { - return _U.cmp(payer.amount, - 0) > 0; - })($List.map(function (userAmount) { - return {_: {} - ,amount: $Basics.snd(userAmount) - mbMinAmount._0 - ,userId: $Basics.fst(userAmount)}; - })(userAmounts)); - case "Nothing": - return _L.fromArray([]);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var payersIncomeDefinedForAll = function (payers) { - return $Model$Income.incomeDefinedForAll(function ($) { - return $List.map(function ($) { - return function (_) { - return _.incomes; - }($Basics.snd($)); - })($Dict.toList($)); - }(payers)); - }; - var getOrderedExceedingPayers = F2(function (currentTime, - payers) { - var exceedingPayersOnPreIncome = exceedingPayersFromAmounts($Dict.toList($Utils$Dict.mapValues(function (_) { - return _.preIncomePaymentSum; - })(payers))); - var _v2 = payersIncomeDefinedForAll(payers); - switch (_v2.ctor) - {case "Just": - var postPaymentPayers = $Utils$Dict.mapValues(A2(getPostPaymentPayer, - currentTime, - _v2._0))(payers); - var mbMaxRatio = $List.maximum($List.map(function ($) { - return function (_) { - return _.ratio; - }($Basics.snd($)); - })($Dict.toList(postPaymentPayers))); - switch (mbMaxRatio.ctor) - {case "Just": - return exceedingPayersFromAmounts($Dict.toList($Utils$Dict.mapValues(getFinalDiff(mbMaxRatio._0))(postPaymentPayers))); - case "Nothing": - return exceedingPayersOnPreIncome;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - case "Nothing": - return exceedingPayersOnPreIncome;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var ExceedingPayer = F2(function (a, - b) { - return {_: {} - ,amount: b - ,userId: a}; - }); - var updatePayers = F4(function (payers, - userId, - creation, - amountDiff) { - return A2($Dict.update, - userId, - function (mbPayer) { - switch (mbPayer.ctor) - {case "Just": - var postIncome = $Maybe.withDefault(false)($Maybe.map(function (date) { - return _U.cmp(creation, - date) > 0; - })(payersIncomeDefinedForAll(payers))); - return postIncome ? $Maybe.Just(_U.replace([["postIncomePaymentSum" - ,mbPayer._0.postIncomePaymentSum + amountDiff]], - mbPayer._0)) : $Maybe.Just(_U.replace([["preIncomePaymentSum" - ,mbPayer._0.preIncomePaymentSum + amountDiff]], - mbPayer._0)); - case "Nothing": - return $Maybe.Nothing;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - })(payers); - }); - var Payer = F3(function (a, - b, - c) { - return {_: {} - ,incomes: c - ,postIncomePaymentSum: b - ,preIncomePaymentSum: a}; - }); - var payerDecoder = A3($Json$Decode.object2, - F2(function (v0,v1) { - return {ctor: "_Tuple2" - ,_0: v0 - ,_1: v1}; - }), - A2($Json$Decode._op[":="], - "userId", - $Model$User.userIdDecoder), - A4($Json$Decode.object3, - Payer, - A2($Json$Decode._op[":="], - "preIncomePaymentSum", - $Json$Decode.$int), - A2($Json$Decode._op[":="], - "postIncomePaymentSum", - $Json$Decode.$int), - A2($Json$Decode._op[":="], - "incomes", - $Json$Decode.list($Model$Income.incomeDecoder)))); - var payersDecoder = A2($Json$Decode.map, - $Dict.fromList, - $Json$Decode.list(payerDecoder)); - _elm.Model.Payer.values = {_op: _op - ,payersDecoder: payersDecoder - ,updatePayers: updatePayers - ,getOrderedExceedingPayers: getOrderedExceedingPayers - ,Payer: Payer - ,ExceedingPayer: ExceedingPayer}; - return _elm.Model.Payer.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.Payment = Elm.Model.Payment || {}; -Elm.Model.Payment.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.Payment = _elm.Model.Payment || {}; - if (_elm.Model.Payment.values) - return _elm.Model.Payment.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.Payment", - $Basics = Elm.Basics.make(_elm), - $Date = Elm.Date.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Date = Elm.Model.Date.make(_elm), - $Model$User = Elm.Model.User.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var paymentIdDecoder = $Json$Decode.$int; - var Payment = F5(function (a, - b, - c, - d, - e) { - return {_: {} - ,cost: d - ,creation: b - ,id: a - ,name: c - ,userId: e}; - }); - var paymentDecoder = A6($Json$Decode.object5, - Payment, - A2($Json$Decode._op[":="], - "id", - paymentIdDecoder), - A2($Json$Decode._op[":="], - "creation", - $Model$Date.dateDecoder), - A2($Json$Decode._op[":="], - "name", - $Json$Decode.string), - A2($Json$Decode._op[":="], - "cost", - $Json$Decode.$int), - A2($Json$Decode._op[":="], - "userId", - $Model$User.userIdDecoder)); - var paymentsDecoder = $Json$Decode.list(paymentDecoder); - var perPage = 8; - _elm.Model.Payment.values = {_op: _op - ,perPage: perPage - ,paymentsDecoder: paymentsDecoder - ,paymentIdDecoder: paymentIdDecoder - ,Payment: Payment}; - return _elm.Model.Payment.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.Translations = Elm.Model.Translations || {}; -Elm.Model.Translations.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.Translations = _elm.Model.Translations || {}; - if (_elm.Model.Translations.values) - return _elm.Model.Translations.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.Translations", - $Basics = Elm.Basics.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $String = Elm.String.make(_elm); - var replacePart = F2(function (values, - part) { - switch (part.ctor) - {case "Order": - return $Maybe.withDefault(A2($Basics._op["++"], - "{", - A2($Basics._op["++"], - $Basics.toString(part._0), - "}")))($List.head($List.drop(part._0 - 1)(values))); - case "Str": return part._0;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var Str = function (a) { - return {ctor: "Str",_0: a}; - }; - var Order = function (a) { - return {ctor: "Order",_0: a}; - }; - var partDecoderWithTag = function (tag) { - switch (tag) - {case "Order": - return A2($Json$Decode.object1, - Order, - A2($Json$Decode._op[":="], - "contents", - $Json$Decode.$int)); - case "Str": - return A2($Json$Decode.object1, - Str, - A2($Json$Decode._op[":="], - "contents", - $Json$Decode.string));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var partDecoder = A2($Json$Decode.andThen, - A2($Json$Decode._op[":="], - "tag", - $Json$Decode.string), - partDecoderWithTag); - var getTranslation = F2(function (key, - translations) { - return $Maybe.map(function (_) { - return _.message; - })($List.head($List.filter(function (translation) { - return _U.eq(translation.key, - key); - })(translations))); - }); - var getParamMessage = F3(function (values, - key, - translations) { - return $Maybe.withDefault(key)($Maybe.map(function (parts) { - return $String.concat(A2($List.map, - replacePart(values), - parts)); - })(A2(getTranslation, - key, - translations))); - }); - var getMessage = getParamMessage(_L.fromArray([])); - var Translation = F2(function (a, - b) { - return {_: {} - ,key: a - ,message: b}; - }); - var translationDecoder = A3($Json$Decode.object2, - Translation, - A2($Json$Decode._op[":="], - "key", - $Json$Decode.string), - A2($Json$Decode._op[":="], - "message", - $Json$Decode.list(partDecoder))); - var translationsDecoder = $Json$Decode.list(translationDecoder); - _elm.Model.Translations.values = {_op: _op - ,translationsDecoder: translationsDecoder - ,getMessage: getMessage - ,getParamMessage: getParamMessage - ,Translation: Translation}; - return _elm.Model.Translations.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.User = Elm.Model.User || {}; -Elm.Model.User.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.User = _elm.Model.User || {}; - if (_elm.Model.User.values) - return _elm.Model.User.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.User", - $Basics = Elm.Basics.make(_elm), - $Dict = Elm.Dict.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var getUserName = F2(function (users, - userId) { - return $Maybe.map(function (_) { - return _.name; - })(A2($Dict.get,userId,users)); - }); - var userIdDecoder = $Json$Decode.$int; - var User = F2(function (a,b) { - return {_: {} - ,email: b - ,name: a}; - }); - var userDecoder = A3($Json$Decode.object2, - User, - A2($Json$Decode._op[":="], - "name", - $Json$Decode.string), - A2($Json$Decode._op[":="], - "email", - $Json$Decode.string)); - var userWithIdDecoder = A3($Json$Decode.object2, - F2(function (v0,v1) { - return {ctor: "_Tuple2" - ,_0: v0 - ,_1: v1}; - }), - A2($Json$Decode._op[":="], - "id", - userIdDecoder), - userDecoder); - var usersDecoder = A2($Json$Decode.map, - $Dict.fromList, - $Json$Decode.list(userWithIdDecoder)); - _elm.Model.User.values = {_op: _op - ,usersDecoder: usersDecoder - ,userDecoder: userDecoder - ,userIdDecoder: userIdDecoder - ,getUserName: getUserName - ,User: User}; - return _elm.Model.User.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.View = Elm.Model.View || {}; -Elm.Model.View.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.View = _elm.Model.View || {}; - if (_elm.Model.View.values) - return _elm.Model.View.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.View", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$View$LoggedInView = Elm.Model.View.LoggedInView.make(_elm), - $Model$View$SignInView = Elm.Model.View.SignInView.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var LoggedInView = function (a) { - return {ctor: "LoggedInView" - ,_0: a}; - }; - var SignInView = function (a) { - return {ctor: "SignInView" - ,_0: a}; - }; - var LoadingView = {ctor: "LoadingView"}; - _elm.Model.View.values = {_op: _op - ,LoadingView: LoadingView - ,SignInView: SignInView - ,LoggedInView: LoggedInView}; - return _elm.Model.View.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.View = Elm.Model.View || {}; -Elm.Model.View.LoggedIn = Elm.Model.View.LoggedIn || {}; -Elm.Model.View.LoggedIn.Account = Elm.Model.View.LoggedIn.Account || {}; -Elm.Model.View.LoggedIn.Account.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.View = _elm.Model.View || {}; - _elm.Model.View.LoggedIn = _elm.Model.View.LoggedIn || {}; - _elm.Model.View.LoggedIn.Account = _elm.Model.View.LoggedIn.Account || {}; - if (_elm.Model.View.LoggedIn.Account.values) - return _elm.Model.View.LoggedIn.Account.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.View.LoggedIn.Account", - $Basics = Elm.Basics.make(_elm), - $Dict = Elm.Dict.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Payer = Elm.Model.Payer.make(_elm), - $Model$Translations = Elm.Model.Translations.make(_elm), - $Model$User = Elm.Model.User.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Utils$Dict = Elm.Utils.Dict.make(_elm), - $Utils$Validation = Elm.Utils.Validation.make(_elm); - var validateIncome = F2(function (amount, - translations) { - return A2($Basics.flip, - $Result.andThen, - A2($Utils$Validation.validateNumber, - A2($Model$Translations.getMessage, - "IncomeMustBePositiveNumber", - translations), - function (number) { - return _U.cmp(number,0) > 0; - }))($Utils$Validation.validateNonEmpty(A2($Model$Translations.getMessage, - "IncomeRequired", - translations))(amount)); - }); - var initIncomeEdition = function (income) { - return {_: {} - ,error: $Maybe.Nothing - ,income: $Basics.toString(income)}; - }; - var IncomeEdition = F2(function (a, - b) { - return {_: {} - ,error: b - ,income: a}; - }); - var getCurrentIncome = function (account) { - var _v0 = A2($Dict.get, - account.me, - account.payers); - switch (_v0.ctor) - {case "Just": - return $Maybe.map(function (_) { - return _.amount; - })($List.head($List.reverse($List.sortBy(function (_) { - return _.creation; - })(_v0._0.incomes)))); - case "Nothing": - return $Maybe.Nothing;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var initAccount = F2(function (me, - payers) { - return {_: {} - ,incomeEdition: $Maybe.Nothing - ,me: me - ,payers: $Utils$Dict.mapValues(function (payer) { - return _U.replace([["incomes" - ,A2($List.sortBy, - function (_) { - return _.creation; - }, - payer.incomes)]], - payer); - })(payers) - ,visibleDetail: false}; - }); - var Account = F4(function (a, - b, - c, - d) { - return {_: {} - ,incomeEdition: d - ,me: a - ,payers: b - ,visibleDetail: c}; - }); - _elm.Model.View.LoggedIn.Account.values = {_op: _op - ,initAccount: initAccount - ,initIncomeEdition: initIncomeEdition - ,getCurrentIncome: getCurrentIncome - ,validateIncome: validateIncome - ,Account: Account - ,IncomeEdition: IncomeEdition}; - return _elm.Model.View.LoggedIn.Account.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.View = Elm.Model.View || {}; -Elm.Model.View.LoggedIn = Elm.Model.View.LoggedIn || {}; -Elm.Model.View.LoggedIn.Add = Elm.Model.View.LoggedIn.Add || {}; -Elm.Model.View.LoggedIn.Add.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.View = _elm.Model.View || {}; - _elm.Model.View.LoggedIn = _elm.Model.View.LoggedIn || {}; - _elm.Model.View.LoggedIn.Add = _elm.Model.View.LoggedIn.Add || {}; - if (_elm.Model.View.LoggedIn.Add.values) - return _elm.Model.View.LoggedIn.Add.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.View.LoggedIn.Add", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Translations = Elm.Model.Translations.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Utils$Validation = Elm.Utils.Validation.make(_elm); - var Monthly = {ctor: "Monthly"}; - var Punctual = {ctor: "Punctual"}; - var validateCost = F2(function (cost, - translations) { - return A2($Basics.flip, - $Result.andThen, - A2($Utils$Validation.validateNumber, - A2($Model$Translations.getMessage, - "CostMustBeNonNullNumber", - translations), - F2(function (x,y) { - return !_U.eq(x,y); - })(0)))($Utils$Validation.validateNonEmpty(A2($Model$Translations.getMessage, - "CostRequired", - translations))(cost)); - }); - var validateName = F2(function (name, - translations) { - return $Utils$Validation.validateNonEmpty(A2($Model$Translations.getMessage, - "CategoryRequired", - translations))(name); - }); - var initAddPayment = function (frequency) { - return {_: {} - ,cost: "" - ,costError: $Maybe.Nothing - ,frequency: frequency - ,name: "" - ,nameError: $Maybe.Nothing}; - }; - var AddPayment = F5(function (a, - b, - c, - d, - e) { - return {_: {} - ,cost: c - ,costError: d - ,frequency: e - ,name: a - ,nameError: b}; - }); - _elm.Model.View.LoggedIn.Add.values = {_op: _op - ,initAddPayment: initAddPayment - ,validateName: validateName - ,validateCost: validateCost - ,AddPayment: AddPayment - ,Punctual: Punctual - ,Monthly: Monthly}; - return _elm.Model.View.LoggedIn.Add.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.View = Elm.Model.View || {}; -Elm.Model.View.LoggedIn = Elm.Model.View.LoggedIn || {}; -Elm.Model.View.LoggedIn.Edition = Elm.Model.View.LoggedIn.Edition || {}; -Elm.Model.View.LoggedIn.Edition.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.View = _elm.Model.View || {}; - _elm.Model.View.LoggedIn = _elm.Model.View.LoggedIn || {}; - _elm.Model.View.LoggedIn.Edition = _elm.Model.View.LoggedIn.Edition || {}; - if (_elm.Model.View.LoggedIn.Edition.values) - return _elm.Model.View.LoggedIn.Edition.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.View.LoggedIn.Edition", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Payment = Elm.Model.Payment.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - _elm.Model.View.LoggedIn.Edition.values = {_op: _op}; - return _elm.Model.View.LoggedIn.Edition.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.View = Elm.Model.View || {}; -Elm.Model.View.LoggedIn = Elm.Model.View.LoggedIn || {}; -Elm.Model.View.LoggedIn.Monthly = Elm.Model.View.LoggedIn.Monthly || {}; -Elm.Model.View.LoggedIn.Monthly.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.View = _elm.Model.View || {}; - _elm.Model.View.LoggedIn = _elm.Model.View.LoggedIn || {}; - _elm.Model.View.LoggedIn.Monthly = _elm.Model.View.LoggedIn.Monthly || {}; - if (_elm.Model.View.LoggedIn.Monthly.values) - return _elm.Model.View.LoggedIn.Monthly.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.View.LoggedIn.Monthly", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Payment = Elm.Model.Payment.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var initMonthly = function (payments) { - return {_: {} - ,payments: payments - ,visibleDetail: false}; - }; - var Monthly = F2(function (a, - b) { - return {_: {} - ,payments: a - ,visibleDetail: b}; - }); - _elm.Model.View.LoggedIn.Monthly.values = {_op: _op - ,initMonthly: initMonthly - ,Monthly: Monthly}; - return _elm.Model.View.LoggedIn.Monthly.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.View = Elm.Model.View || {}; -Elm.Model.View.LoggedInView = Elm.Model.View.LoggedInView || {}; -Elm.Model.View.LoggedInView.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.View = _elm.Model.View || {}; - _elm.Model.View.LoggedInView = _elm.Model.View.LoggedInView || {}; - if (_elm.Model.View.LoggedInView.values) - return _elm.Model.View.LoggedInView.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.View.LoggedInView", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Payer = Elm.Model.Payer.make(_elm), - $Model$Payment = Elm.Model.Payment.make(_elm), - $Model$User = Elm.Model.User.make(_elm), - $Model$View$LoggedIn$Account = Elm.Model.View.LoggedIn.Account.make(_elm), - $Model$View$LoggedIn$Add = Elm.Model.View.LoggedIn.Add.make(_elm), - $Model$View$LoggedIn$Edition = Elm.Model.View.LoggedIn.Edition.make(_elm), - $Model$View$LoggedIn$Monthly = Elm.Model.View.LoggedIn.Monthly.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var initLoggedInView = F6(function (users, - me, - monthlyPayments, - payments, - paymentsCount, - payers) { - return {_: {} - ,account: A2($Model$View$LoggedIn$Account.initAccount, - me, - payers) - ,add: $Model$View$LoggedIn$Add.initAddPayment($Model$View$LoggedIn$Add.Punctual) - ,currentPage: 1 - ,monthly: $Model$View$LoggedIn$Monthly.initMonthly(monthlyPayments) - ,paymentEdition: $Maybe.Nothing - ,payments: payments - ,paymentsCount: paymentsCount - ,users: users}; - }); - var LoggedInView = F8(function (a, - b, - c, - d, - e, - f, - g, - h) { - return {_: {} - ,account: d - ,add: b - ,currentPage: h - ,monthly: c - ,paymentEdition: g - ,payments: e - ,paymentsCount: f - ,users: a}; - }); - _elm.Model.View.LoggedInView.values = {_op: _op - ,initLoggedInView: initLoggedInView - ,LoggedInView: LoggedInView}; - return _elm.Model.View.LoggedInView.values; -}; -Elm.Model = Elm.Model || {}; -Elm.Model.View = Elm.Model.View || {}; -Elm.Model.View.SignInView = Elm.Model.View.SignInView || {}; -Elm.Model.View.SignInView.make = function (_elm) { - "use strict"; - _elm.Model = _elm.Model || {}; - _elm.Model.View = _elm.Model.View || {}; - _elm.Model.View.SignInView = _elm.Model.View.SignInView || {}; - if (_elm.Model.View.SignInView.values) - return _elm.Model.View.SignInView.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Model.View.SignInView", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var initSignInView = {_: {} - ,login: "" - ,result: $Maybe.Nothing}; - var SignInView = F2(function (a, - b) { - return {_: {} - ,login: a - ,result: b}; - }); - _elm.Model.View.SignInView.values = {_op: _op - ,initSignInView: initSignInView - ,SignInView: SignInView}; - return _elm.Model.View.SignInView.values; -}; -Elm.Native.Array = {}; -Elm.Native.Array.make = function(localRuntime) { - - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Array = localRuntime.Native.Array || {}; - if (localRuntime.Native.Array.values) - { - return localRuntime.Native.Array.values; - } - if ('values' in Elm.Native.Array) - { - return localRuntime.Native.Array.values = Elm.Native.Array.values; - } - - var List = Elm.Native.List.make(localRuntime); - - // 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: new Array() - }; - - - 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 == List.Nil) - { - return empty; - } - - // Allocate M sized blocks (table) and write list elements to it. - var table = new Array(M); - var nodes = new Array(); - 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: new Array(), - lengths: new Array() - }; - 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: new Array(), - lengths: new Array() - }; - } - } - - // 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_(List.Nil, a); - } - - function toList_(list, a) - { - for (var i = a.table.length - 1; i >= 0; i--) - { - list = - a.height == 0 - ? 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 ? 0 : 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 - }; - } - - Elm.Native.Array.values = { - 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 - }; - - return localRuntime.Native.Array.values = Elm.Native.Array.values; - -} - -Elm.Native.Basics = {}; -Elm.Native.Basics.make = function(localRuntime) { - - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Basics = localRuntime.Native.Basics || {}; - if (localRuntime.Native.Basics.values) - { - return localRuntime.Native.Basics.values; - } - - var Utils = Elm.Native.Utils.make(localRuntime); - - 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 Utils.cmp(a,b) < 0 ? a : b; - } - function max(a, b) - { - return Utils.cmp(a,b) > 0 ? a : b; - } - function clamp(lo, hi, n) - { - return Utils.cmp(n,lo) < 0 ? lo : Utils.cmp(n,hi) > 0 ? hi : n; - } - - 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 Utils.Tuple2(r * Math.cos(t), r * Math.sin(t)); - } - function toPolar(point) - { - var x = point._0; - var y = point._1; - return Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y,x)); - } - - return localRuntime.Native.Basics.values = { - 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: Utils.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 - }; -}; - -Elm.Native.Char = {}; -Elm.Native.Char.make = function(localRuntime) { - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Char = localRuntime.Native.Char || {}; - if (localRuntime.Native.Char.values) - { - return localRuntime.Native.Char.values; - } - - var Utils = Elm.Native.Utils.make(localRuntime); - - return localRuntime.Native.Char.values = { - fromCode : function(c) { return Utils.chr(String.fromCharCode(c)); }, - toCode : function(c) { return c.charCodeAt(0); }, - toUpper : function(c) { return Utils.chr(c.toUpperCase()); }, - toLower : function(c) { return Utils.chr(c.toLowerCase()); }, - toLocaleUpper : function(c) { return Utils.chr(c.toLocaleUpperCase()); }, - toLocaleLower : function(c) { return Utils.chr(c.toLocaleLowerCase()); }, - }; -}; - -Elm.Native.Color = {}; -Elm.Native.Color.make = function(localRuntime) { - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Color = localRuntime.Native.Color || {}; - if (localRuntime.Native.Color.values) - { - return localRuntime.Native.Color.values; - } - - function toCss(c) - { - var format = ''; - var colors = ''; - if (c.ctor === 'RGBA') - { - format = 'rgb'; - colors = c._0 + ', ' + c._1 + ', ' + c._2; - } - else - { - format = 'hsl'; - colors = (c._0 * 180 / Math.PI) + ', ' + - (c._1 * 100) + '%, ' + - (c._2 * 100) + '%'; - } - if (c._3 === 1) - { - return format + '(' + colors + ')'; - } - else - { - return format + 'a(' + colors + ', ' + c._3 + ')'; - } - } - - return localRuntime.Native.Color.values = { - toCss: toCss - }; - -}; - -Elm.Native.Date = {}; -Elm.Native.Date.make = function(localRuntime) { - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Date = localRuntime.Native.Date || {}; - if (localRuntime.Native.Date.values) - { - return localRuntime.Native.Date.values; - } - - var Result = Elm.Result.make(localRuntime); - - function dateNow() - { - return new window.Date; - } - - function readDate(str) - { - var date = new window.Date(str); - return isNaN(date.getTime()) - ? Result.Err("unable to parse '" + str + "' as a date") - : Result.Ok(date); - } - - var dayTable = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; - var monthTable = - ["Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; - - - return localRuntime.Native.Date.values = { - read : readDate, - year : function(d) { return d.getFullYear(); }, - month : function(d) { return { ctor:monthTable[d.getMonth()] }; }, - day : function(d) { return d.getDate(); }, - hour : function(d) { return d.getHours(); }, - minute : function(d) { return d.getMinutes(); }, - second : function(d) { return d.getSeconds(); }, - millisecond: function (d) { return d.getMilliseconds(); }, - toTime : function(d) { return d.getTime(); }, - fromTime: function(t) { return new window.Date(t); }, - dayOfWeek : function(d) { return { ctor:dayTable[d.getDay()] }; } - }; - -}; - -Elm.Native.Debug = {}; -Elm.Native.Debug.make = function(localRuntime) { - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Debug = localRuntime.Native.Debug || {}; - if (localRuntime.Native.Debug.values) - { - return localRuntime.Native.Debug.values; - } - - var toString = Elm.Native.Show.make(localRuntime).toString; - - function log(tag, value) - { - var msg = tag + ': ' + 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); - } - - function tracePath(tag, form) - { - if (localRuntime.debug) - { - return localRuntime.debug.trace(tag, form); - } - return form; - } - - function watch(tag, value) - { - if (localRuntime.debug) - { - localRuntime.debug.watch(tag, value); - } - return value; - } - - function watchSummary(tag, summarize, value) - { - if (localRuntime.debug) - { - localRuntime.debug.watch(tag, summarize(value)); - } - return value; - } - - return localRuntime.Native.Debug.values = { - crash: crash, - tracePath: F2(tracePath), - log: F2(log), - watch: F2(watch), - watchSummary:F3(watchSummary), - }; -}; - - -// setup -Elm.Native = Elm.Native || {}; -Elm.Native.Graphics = Elm.Native.Graphics || {}; -Elm.Native.Graphics.Collage = Elm.Native.Graphics.Collage || {}; - -// definition -Elm.Native.Graphics.Collage.make = function(localRuntime) { - 'use strict'; - - // attempt to short-circuit - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Graphics = localRuntime.Native.Graphics || {}; - localRuntime.Native.Graphics.Collage = localRuntime.Native.Graphics.Collage || {}; - if ('values' in localRuntime.Native.Graphics.Collage) - { - return localRuntime.Native.Graphics.Collage.values; - } - - // okay, we cannot short-ciruit, so now we define everything - var Color = Elm.Native.Color.make(localRuntime); - var List = Elm.Native.List.make(localRuntime); - var NativeElement = Elm.Native.Graphics.Element.make(localRuntime); - var Transform = Elm.Transform2D.make(localRuntime); - var Utils = Elm.Native.Utils.make(localRuntime); - - function setStrokeStyle(ctx, style) - { - ctx.lineWidth = style.width; - - var cap = style.cap.ctor; - ctx.lineCap = cap === 'Flat' - ? 'butt' - : cap === 'Round' - ? 'round' - : 'square'; - - var join = style.join.ctor; - ctx.lineJoin = join === 'Smooth' - ? 'round' - : join === 'Sharp' - ? 'miter' - : 'bevel'; - - ctx.miterLimit = style.join._0 || 10; - ctx.strokeStyle = Color.toCss(style.color); - } - - function setFillStyle(ctx, style) - { - var sty = style.ctor; - ctx.fillStyle = sty === 'Solid' - ? Color.toCss(style._0) - : sty === 'Texture' - ? texture(redo, ctx, style._0) - : gradient(ctx, style._0); - } - - function trace(ctx, path) - { - var points = List.toArray(path); - var i = points.length - 1; - if (i <= 0) - { - return; - } - ctx.moveTo(points[i]._0, points[i]._1); - while (i--) - { - ctx.lineTo(points[i]._0, points[i]._1); - } - if (path.closed) - { - i = points.length - 1; - ctx.lineTo(points[i]._0, points[i]._1); - } - } - - function line(ctx,style,path) - { - (style.dashing.ctor === '[]') - ? trace(ctx, path) - : customLineHelp(ctx, style, path); - ctx.scale(1,-1); - ctx.stroke(); - } - - function customLineHelp(ctx, style, path) - { - var points = List.toArray(path); - if (path.closed) - { - points.push(points[0]); - } - var pattern = List.toArray(style.dashing); - var i = points.length - 1; - if (i <= 0) - { - return; - } - var x0 = points[i]._0, y0 = points[i]._1; - var x1=0, y1=0, dx=0, dy=0, remaining=0, nx=0, ny=0; - var pindex = 0, plen = pattern.length; - var draw = true, segmentLength = pattern[0]; - ctx.moveTo(x0,y0); - while (i--) - { - x1 = points[i]._0; - y1 = points[i]._1; - dx = x1 - x0; - dy = y1 - y0; - remaining = Math.sqrt(dx * dx + dy * dy); - while (segmentLength <= remaining) - { - x0 += dx * segmentLength / remaining; - y0 += dy * segmentLength / remaining; - ctx[draw ? 'lineTo' : 'moveTo'](x0, y0); - // update starting position - dx = x1 - x0; - dy = y1 - y0; - remaining = Math.sqrt(dx * dx + dy * dy); - // update pattern - draw = !draw; - pindex = (pindex + 1) % plen; - segmentLength = pattern[pindex]; - } - if (remaining > 0) - { - ctx[draw ? 'lineTo' : 'moveTo'](x1, y1); - segmentLength -= remaining; - } - x0 = x1; - y0 = y1; - } - } - - function drawLine(ctx, style, path) - { - setStrokeStyle(ctx, style); - return line(ctx, style, path); - } - - function texture(redo, ctx, src) - { - var img = new Image(); - img.src = src; - img.onload = redo; - return ctx.createPattern(img, 'repeat'); - } - - function gradient(ctx, grad) - { - var g; - var stops = []; - if (grad.ctor === 'Linear') - { - var p0 = grad._0, p1 = grad._1; - g = ctx.createLinearGradient(p0._0, -p0._1, p1._0, -p1._1); - stops = List.toArray(grad._2); - } - else - { - var p0 = grad._0, p2 = grad._2; - g = ctx.createRadialGradient(p0._0, -p0._1, grad._1, p2._0, -p2._1, grad._3); - stops = List.toArray(grad._4); - } - var len = stops.length; - for (var i = 0; i < len; ++i) - { - var stop = stops[i]; - g.addColorStop(stop._0, Color.toCss(stop._1)); - } - return g; - } - - function drawShape(redo, ctx, style, path) - { - trace(ctx, path); - setFillStyle(ctx, style); - ctx.scale(1,-1); - ctx.fill(); - } - - - // TEXT RENDERING - - function fillText(redo, ctx, text) - { - drawText(ctx, text, ctx.fillText); - } - - function strokeText(redo, ctx, style, text) - { - setStrokeStyle(ctx, style); - // Use native canvas API for dashes only for text for now - // Degrades to non-dashed on IE 9 + 10 - if (style.dashing.ctor !== '[]' && ctx.setLineDash) - { - var pattern = List.toArray(style.dashing); - ctx.setLineDash(pattern); - } - drawText(ctx, text, ctx.strokeText); - } - - function drawText(ctx, text, canvasDrawFn) - { - var textChunks = chunkText(defaultContext, text); - - var totalWidth = 0; - var maxHeight = 0; - var numChunks = textChunks.length; - - ctx.scale(1,-1); - - for (var i = numChunks; i--; ) - { - var chunk = textChunks[i]; - ctx.font = chunk.font; - var metrics = ctx.measureText(chunk.text); - chunk.width = metrics.width; - totalWidth += chunk.width; - if (chunk.height > maxHeight) - { - maxHeight = chunk.height; - } - } - - var x = -totalWidth / 2.0; - for (var i = 0; i < numChunks; ++i) - { - var chunk = textChunks[i]; - ctx.font = chunk.font; - ctx.fillStyle = chunk.color; - canvasDrawFn.call(ctx, chunk.text, x, maxHeight / 2); - x += chunk.width; - } - } - - function toFont(props) - { - return [ - props['font-style'], - props['font-variant'], - props['font-weight'], - props['font-size'], - props['font-family'] - ].join(' '); - } - - - // Convert the object returned by the text module - // into something we can use for styling canvas text - function chunkText(context, text) - { - var tag = text.ctor; - if (tag === 'Text:Append') - { - var leftChunks = chunkText(context, text._0); - var rightChunks = chunkText(context, text._1); - return leftChunks.concat(rightChunks); - } - if (tag === 'Text:Text') - { - return [{ - text: text._0, - color: context.color, - height: context['font-size'].slice(0,-2) | 0, - font: toFont(context) - }]; - } - if (tag === 'Text:Meta') - { - var newContext = freshContext(text._0, context); - return chunkText(newContext, text._1); - } - } - - function freshContext(props, ctx) - { - return { - 'font-style': props['font-style'] || ctx['font-style'], - 'font-variant': props['font-variant'] || ctx['font-variant'], - 'font-weight': props['font-weight'] || ctx['font-weight'], - 'font-size': props['font-size'] || ctx['font-size'], - 'font-family': props['font-family'] || ctx['font-family'], - 'color': props['color'] || ctx['color'] - }; - } - - var defaultContext = { - 'font-style': 'normal', - 'font-variant': 'normal', - 'font-weight': 'normal', - 'font-size': '12px', - 'font-family': 'sans-serif', - 'color': 'black' - }; - - - // IMAGES - - function drawImage(redo, ctx, form) - { - var img = new Image(); - img.onload = redo; - img.src = form._3; - var w = form._0, - h = form._1, - pos = form._2, - srcX = pos._0, - srcY = pos._1, - srcW = w, - srcH = h, - destX = -w/2, - destY = -h/2, - destW = w, - destH = h; - - ctx.scale(1,-1); - ctx.drawImage(img, srcX, srcY, srcW, srcH, destX, destY, destW, destH); - } - - function renderForm(redo, ctx, form) - { - ctx.save(); - - var x = form.x, - y = form.y, - theta = form.theta, - scale = form.scale; - - if (x !== 0 || y !== 0) - { - ctx.translate(x, y); - } - if (theta !== 0) - { - ctx.rotate(theta); - } - if (scale !== 1) - { - ctx.scale(scale,scale); - } - if (form.alpha !== 1) - { - ctx.globalAlpha = ctx.globalAlpha * form.alpha; - } - - ctx.beginPath(); - var f = form.form; - switch (f.ctor) - { - case 'FPath': - drawLine(ctx, f._0, f._1); - break; - - case 'FImage': - drawImage(redo, ctx, f); - break; - - case 'FShape': - if (f._0.ctor === 'Line') - { - f._1.closed = true; - drawLine(ctx, f._0._0, f._1); - } - else - { - drawShape(redo, ctx, f._0._0, f._1); - } - break; - - case 'FText': - fillText(redo, ctx, f._0); - break; - - case 'FOutlinedText': - strokeText(redo, ctx, f._0, f._1); - break; - } - ctx.restore(); - } - - function formToMatrix(form) - { - var scale = form.scale; - var matrix = A6( Transform.matrix, scale, 0, 0, scale, form.x, form.y ); - - var theta = form.theta - if (theta !== 0) - { - matrix = A2( Transform.multiply, matrix, Transform.rotation(theta) ); - } - - return matrix; - } - - function str(n) - { - if (n < 0.00001 && n > -0.00001) - { - return 0; - } - return n; - } - - function makeTransform(w, h, form, matrices) - { - var props = form.form._0.props; - var m = A6( Transform.matrix, 1, 0, 0, -1, - (w - props.width ) / 2, - (h - props.height) / 2 ); - var len = matrices.length; - for (var i = 0; i < len; ++i) - { - m = A2( Transform.multiply, m, matrices[i] ); - } - m = A2( Transform.multiply, m, formToMatrix(form) ); - - return 'matrix(' + - str( m[0]) + ', ' + str( m[3]) + ', ' + - str(-m[1]) + ', ' + str(-m[4]) + ', ' + - str( m[2]) + ', ' + str( m[5]) + ')'; - } - - function stepperHelp(list) - { - var arr = List.toArray(list); - var i = 0; - function peekNext() - { - return i < arr.length ? arr[i].form.ctor : ''; - } - // assumes that there is a next element - function next() - { - var out = arr[i]; - ++i; - return out; - } - return { - peekNext: peekNext, - next: next - }; - } - - function formStepper(forms) - { - var ps = [stepperHelp(forms)]; - var matrices = []; - var alphas = []; - function peekNext() - { - var len = ps.length; - var formType = ''; - for (var i = 0; i < len; ++i ) - { - if (formType = ps[i].peekNext()) return formType; - } - return ''; - } - // assumes that there is a next element - function next(ctx) - { - while (!ps[0].peekNext()) - { - ps.shift(); - matrices.pop(); - alphas.shift(); - if (ctx) - { - ctx.restore(); - } - } - var out = ps[0].next(); - var f = out.form; - if (f.ctor === 'FGroup') - { - ps.unshift(stepperHelp(f._1)); - var m = A2(Transform.multiply, f._0, formToMatrix(out)); - ctx.save(); - ctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]); - matrices.push(m); - - var alpha = (alphas[0] || 1) * out.alpha; - alphas.unshift(alpha); - ctx.globalAlpha = alpha; - } - return out; - } - function transforms() - { - return matrices; - } - function alpha() - { - return alphas[0] || 1; - } - return { - peekNext: peekNext, - next: next, - transforms: transforms, - alpha: alpha - }; - } - - function makeCanvas(w,h) - { - var canvas = NativeElement.createNode('canvas'); - canvas.style.width = w + 'px'; - canvas.style.height = h + 'px'; - canvas.style.display = "block"; - canvas.style.position = "absolute"; - var ratio = window.devicePixelRatio || 1; - canvas.width = w * ratio; - canvas.height = h * ratio; - return canvas; - } - - function render(model) - { - var div = NativeElement.createNode('div'); - div.style.overflow = 'hidden'; - div.style.position = 'relative'; - update(div, model, model); - return div; - } - - function nodeStepper(w,h,div) - { - var kids = div.childNodes; - var i = 0; - var ratio = window.devicePixelRatio || 1; - - function transform(transforms, ctx) - { - ctx.translate( w / 2 * ratio, h / 2 * ratio ); - ctx.scale( ratio, -ratio ); - var len = transforms.length; - for (var i = 0; i < len; ++i) - { - var m = transforms[i]; - ctx.save(); - ctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]); - } - return ctx; - } - function nextContext(transforms) - { - while (i < kids.length) - { - var node = kids[i]; - if (node.getContext) - { - node.width = w * ratio; - node.height = h * ratio; - node.style.width = w + 'px'; - node.style.height = h + 'px'; - ++i; - return transform(transforms, node.getContext('2d')); - } - div.removeChild(node); - } - var canvas = makeCanvas(w,h); - div.appendChild(canvas); - // we have added a new node, so we must step our position - ++i; - return transform(transforms, canvas.getContext('2d')); - } - function addElement(matrices, alpha, form) - { - var kid = kids[i]; - var elem = form.form._0; - - var node = (!kid || kid.getContext) - ? NativeElement.render(elem) - : NativeElement.update(kid, kid.oldElement, elem); - - node.style.position = 'absolute'; - node.style.opacity = alpha * form.alpha * elem.props.opacity; - NativeElement.addTransform(node.style, makeTransform(w, h, form, matrices)); - node.oldElement = elem; - ++i; - if (!kid) - { - div.appendChild(node); - } - else - { - div.insertBefore(node, kid); - } - } - function clearRest() - { - while (i < kids.length) - { - div.removeChild(kids[i]); - } - } - return { - nextContext: nextContext, - addElement: addElement, - clearRest: clearRest - }; - } - - - function update(div, _, model) - { - var w = model.w; - var h = model.h; - - var forms = formStepper(model.forms); - var nodes = nodeStepper(w,h,div); - var ctx = null; - var formType = ''; - - while (formType = forms.peekNext()) - { - // make sure we have context if we need it - if (ctx === null && formType !== 'FElement') - { - ctx = nodes.nextContext(forms.transforms()); - ctx.globalAlpha = forms.alpha(); - } - - var form = forms.next(ctx); - // if it is FGroup, all updates are made within formStepper when next is called. - if (formType === 'FElement') - { - // update or insert an element, get a new context - nodes.addElement(forms.transforms(), forms.alpha(), form); - ctx = null; - } - else if (formType !== 'FGroup') - { - renderForm(function() { update(div, model, model); }, ctx, form); - } - } - nodes.clearRest(); - return div; - } - - - function collage(w,h,forms) - { - return A3(NativeElement.newElement, w, h, { - ctor: 'Custom', - type: 'Collage', - render: render, - update: update, - model: {w:w, h:h, forms:forms} - }); - } - - return localRuntime.Native.Graphics.Collage.values = { - collage: F3(collage) - }; - -}; - - -// setup -Elm.Native = Elm.Native || {}; -Elm.Native.Graphics = Elm.Native.Graphics || {}; -Elm.Native.Graphics.Element = Elm.Native.Graphics.Element || {}; - -// definition -Elm.Native.Graphics.Element.make = function(localRuntime) { - 'use strict'; - - // attempt to short-circuit - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Graphics = localRuntime.Native.Graphics || {}; - localRuntime.Native.Graphics.Element = localRuntime.Native.Graphics.Element || {}; - if ('values' in localRuntime.Native.Graphics.Element) - { - return localRuntime.Native.Graphics.Element.values; - } - - var Color = Elm.Native.Color.make(localRuntime); - var List = Elm.Native.List.make(localRuntime); - var Maybe = Elm.Maybe.make(localRuntime); - var Text = Elm.Native.Text.make(localRuntime); - var Utils = Elm.Native.Utils.make(localRuntime); - - - // CREATION - - function createNode(elementType) - { - var node = document.createElement(elementType); - node.style.padding = "0"; - node.style.margin = "0"; - return node; - } - - - function newElement(width, height, elementPrim) - { - return { - _: {}, - element: elementPrim, - props: { - _: {}, - id: Utils.guid(), - width: width, - height: height, - opacity: 1, - color: Maybe.Nothing, - href: "", - tag: "", - hover: Utils.Tuple0, - click: Utils.Tuple0 - } - }; - } - - - // PROPERTIES - - function setProps(elem, node) - { - var props = elem.props; - - var element = elem.element; - var width = props.width - (element.adjustWidth || 0); - var height = props.height - (element.adjustHeight || 0); - node.style.width = (width |0) + 'px'; - node.style.height = (height|0) + 'px'; - - if (props.opacity !== 1) - { - node.style.opacity = props.opacity; - } - - if (props.color.ctor === 'Just') - { - node.style.backgroundColor = Color.toCss(props.color._0); - } - - if (props.tag !== '') - { - node.id = props.tag; - } - - if (props.hover.ctor !== '_Tuple0') - { - addHover(node, props.hover); - } - - if (props.click.ctor !== '_Tuple0') - { - addClick(node, props.click); - } - - if (props.href !== '') - { - var anchor = createNode('a'); - anchor.href = props.href; - anchor.style.display = 'block'; - anchor.style.pointerEvents = 'auto'; - anchor.appendChild(node); - node = anchor; - } - - return node; - } - - function addClick(e, handler) - { - e.style.pointerEvents = 'auto'; - e.elm_click_handler = handler; - function trigger(ev) - { - e.elm_click_handler(Utils.Tuple0); - ev.stopPropagation(); - } - e.elm_click_trigger = trigger; - e.addEventListener('click', trigger); - } - - function removeClick(e, handler) - { - if (e.elm_click_trigger) - { - e.removeEventListener('click', e.elm_click_trigger); - e.elm_click_trigger = null; - e.elm_click_handler = null; - } - } - - function addHover(e, handler) - { - e.style.pointerEvents = 'auto'; - e.elm_hover_handler = handler; - e.elm_hover_count = 0; - - function over(evt) - { - if (e.elm_hover_count++ > 0) return; - e.elm_hover_handler(true); - evt.stopPropagation(); - } - function out(evt) - { - if (e.contains(evt.toElement || evt.relatedTarget)) return; - e.elm_hover_count = 0; - e.elm_hover_handler(false); - evt.stopPropagation(); - } - e.elm_hover_over = over; - e.elm_hover_out = out; - e.addEventListener('mouseover', over); - e.addEventListener('mouseout', out); - } - - function removeHover(e) - { - e.elm_hover_handler = null; - if (e.elm_hover_over) - { - e.removeEventListener('mouseover', e.elm_hover_over); - e.elm_hover_over = null; - } - if (e.elm_hover_out) - { - e.removeEventListener('mouseout', e.elm_hover_out); - e.elm_hover_out = null; - } - } - - - // IMAGES - - function image(props, img) - { - switch (img._0.ctor) - { - case 'Plain': - return plainImage(img._3); - - case 'Fitted': - return fittedImage(props.width, props.height, img._3); - - case 'Cropped': - return croppedImage(img,props.width,props.height,img._3); - - case 'Tiled': - return tiledImage(img._3); - } - } - - function plainImage(src) - { - var img = createNode('img'); - img.src = src; - img.name = src; - img.style.display = "block"; - return img; - } - - function tiledImage(src) - { - var div = createNode('div'); - div.style.backgroundImage = 'url(' + src + ')'; - return div; - } - - function fittedImage(w, h, src) - { - var div = createNode('div'); - div.style.background = 'url(' + src + ') no-repeat center'; - div.style.webkitBackgroundSize = 'cover'; - div.style.MozBackgroundSize = 'cover'; - div.style.OBackgroundSize = 'cover'; - div.style.backgroundSize = 'cover'; - return div; - } - - function croppedImage(elem, w, h, src) - { - var pos = elem._0._0; - var e = createNode('div'); - e.style.overflow = "hidden"; - - var img = createNode('img'); - img.onload = function() { - var sw = w / elem._1, sh = h / elem._2; - img.style.width = ((this.width * sw)|0) + 'px'; - img.style.height = ((this.height * sh)|0) + 'px'; - img.style.marginLeft = ((- pos._0 * sw)|0) + 'px'; - img.style.marginTop = ((- pos._1 * sh)|0) + 'px'; - }; - img.src = src; - img.name = src; - e.appendChild(img); - return e; - } - - - // FLOW - - function goOut(node) - { - node.style.position = 'absolute'; - return node; - } - function goDown(node) - { - return node; - } - function goRight(node) - { - node.style.styleFloat = 'left'; - node.style.cssFloat = 'left'; - return node; - } - - var directionTable = { - DUp : goDown, - DDown : goDown, - DLeft : goRight, - DRight : goRight, - DIn : goOut, - DOut : goOut - }; - function needsReversal(dir) - { - return dir == 'DUp' || dir == 'DLeft' || dir == 'DIn'; - } - - function flow(dir,elist) - { - var array = List.toArray(elist); - var container = createNode('div'); - var goDir = directionTable[dir]; - if (goDir == goOut) - { - container.style.pointerEvents = 'none'; - } - if (needsReversal(dir)) - { - array.reverse(); - } - var len = array.length; - for (var i = 0; i < len; ++i) - { - container.appendChild(goDir(render(array[i]))); - } - return container; - } - - - // CONTAINER - - function toPos(pos) - { - return pos.ctor === "Absolute" - ? pos._0 + "px" - : (pos._0 * 100) + "%"; - } - - // must clear right, left, top, bottom, and transform - // before calling this function - function setPos(pos,elem,e) - { - var element = elem.element; - var props = elem.props; - var w = props.width + (element.adjustWidth ? element.adjustWidth : 0); - var h = props.height + (element.adjustHeight ? element.adjustHeight : 0); - - e.style.position = 'absolute'; - e.style.margin = 'auto'; - var transform = ''; - - switch (pos.horizontal.ctor) - { - case 'P': - e.style.right = toPos(pos.x); - e.style.removeProperty('left'); - break; - - case 'Z': - transform = 'translateX(' + ((-w/2)|0) + 'px) '; - - case 'N': - e.style.left = toPos(pos.x); - e.style.removeProperty('right'); - break; - } - switch (pos.vertical.ctor) - { - case 'N': - e.style.bottom = toPos(pos.y); - e.style.removeProperty('top'); - break; - - case 'Z': - transform += 'translateY(' + ((-h/2)|0) + 'px)'; - - case 'P': - e.style.top = toPos(pos.y); - e.style.removeProperty('bottom'); - break; - } - if (transform !== '') - { - addTransform(e.style, transform); - } - return e; - } - - function addTransform(style, transform) - { - style.transform = transform; - style.msTransform = transform; - style.MozTransform = transform; - style.webkitTransform = transform; - style.OTransform = transform; - } - - function container(pos,elem) - { - var e = render(elem); - setPos(pos, elem, e); - var div = createNode('div'); - div.style.position = 'relative'; - div.style.overflow = 'hidden'; - div.appendChild(e); - return div; - } - - - function rawHtml(elem) - { - var html = elem.html; - var guid = elem.guid; - var align = elem.align; - - var div = createNode('div'); - div.innerHTML = html; - div.style.visibility = "hidden"; - if (align) - { - div.style.textAlign = align; - } - div.style.visibility = 'visible'; - div.style.pointerEvents = 'auto'; - return div; - } - - - // RENDER - - function render(elem) - { - return setProps(elem, makeElement(elem)); - } - function makeElement(e) - { - var elem = e.element; - switch(elem.ctor) - { - case 'Image': - return image(e.props, elem); - - case 'Flow': - return flow(elem._0.ctor, elem._1); - - case 'Container': - return container(elem._0, elem._1); - - case 'Spacer': - return createNode('div'); - - case 'RawHtml': - return rawHtml(elem); - - case 'Custom': - return elem.render(elem.model); - } - } - - function updateAndReplace(node, curr, next) - { - var newNode = update(node, curr, next); - if (newNode !== node) - { - node.parentNode.replaceChild(newNode, node); - } - return newNode; - } - - - // UPDATE - - function update(node, curr, next) - { - var rootNode = node; - if (node.tagName === 'A') - { - node = node.firstChild; - } - if (curr.props.id === next.props.id) - { - updateProps(node, curr, next); - return rootNode; - } - if (curr.element.ctor !== next.element.ctor) - { - return render(next); - } - var nextE = next.element; - var currE = curr.element; - switch(nextE.ctor) - { - case "Spacer": - updateProps(node, curr, next); - return rootNode; - - case "RawHtml": - if(currE.html.valueOf() !== nextE.html.valueOf()) - { - node.innerHTML = nextE.html; - } - updateProps(node, curr, next); - return rootNode; - - case "Image": - if (nextE._0.ctor === 'Plain') - { - if (nextE._3 !== currE._3) - { - node.src = nextE._3; - } - } - else if (!Utils.eq(nextE,currE) - || next.props.width !== curr.props.width - || next.props.height !== curr.props.height) - { - return render(next); - } - updateProps(node, curr, next); - return rootNode; - - case "Flow": - var arr = List.toArray(nextE._1); - for (var i = arr.length; i--; ) - { - arr[i] = arr[i].element.ctor; - } - if (nextE._0.ctor !== currE._0.ctor) - { - return render(next); - } - var nexts = List.toArray(nextE._1); - var kids = node.childNodes; - if (nexts.length !== kids.length) - { - return render(next); - } - var currs = List.toArray(currE._1); - var dir = nextE._0.ctor; - var goDir = directionTable[dir]; - var toReverse = needsReversal(dir); - var len = kids.length; - for (var i = len; i-- ;) - { - var subNode = kids[toReverse ? len - i - 1 : i]; - goDir(updateAndReplace(subNode, currs[i], nexts[i])); - } - updateProps(node, curr, next); - return rootNode; - - case "Container": - var subNode = node.firstChild; - var newSubNode = updateAndReplace(subNode, currE._1, nextE._1); - setPos(nextE._0, nextE._1, newSubNode); - updateProps(node, curr, next); - return rootNode; - - case "Custom": - if (currE.type === nextE.type) - { - var updatedNode = nextE.update(node, currE.model, nextE.model); - updateProps(updatedNode, curr, next); - return updatedNode; - } - return render(next); - } - } - - function updateProps(node, curr, next) - { - var nextProps = next.props; - var currProps = curr.props; - - var element = next.element; - var width = nextProps.width - (element.adjustWidth || 0); - var height = nextProps.height - (element.adjustHeight || 0); - if (width !== currProps.width) - { - node.style.width = (width|0) + 'px'; - } - if (height !== currProps.height) - { - node.style.height = (height|0) + 'px'; - } - - if (nextProps.opacity !== currProps.opacity) - { - node.style.opacity = nextProps.opacity; - } - - var nextColor = nextProps.color.ctor === 'Just' - ? Color.toCss(nextProps.color._0) - : ''; - if (node.style.backgroundColor !== nextColor) - { - node.style.backgroundColor = nextColor; - } - - if (nextProps.tag !== currProps.tag) - { - node.id = nextProps.tag; - } - - if (nextProps.href !== currProps.href) - { - if (currProps.href === '') - { - // add a surrounding href - var anchor = createNode('a'); - anchor.href = nextProps.href; - anchor.style.display = 'block'; - anchor.style.pointerEvents = 'auto'; - - node.parentNode.replaceChild(anchor, node); - anchor.appendChild(node); - } - else if (nextProps.href === '') - { - // remove the surrounding href - var anchor = node.parentNode; - anchor.parentNode.replaceChild(node, anchor); - } - else - { - // just update the link - node.parentNode.href = nextProps.href; - } - } - - // update click and hover handlers - var removed = false; - - // update hover handlers - if (currProps.hover.ctor === '_Tuple0') - { - if (nextProps.hover.ctor !== '_Tuple0') - { - addHover(node, nextProps.hover); - } - } - else - { - if (nextProps.hover.ctor === '_Tuple0') - { - removed = true; - removeHover(node); - } - else - { - node.elm_hover_handler = nextProps.hover; - } - } - - // update click handlers - if (currProps.click.ctor === '_Tuple0') - { - if (nextProps.click.ctor !== '_Tuple0') - { - addClick(node, nextProps.click); - } - } - else - { - if (nextProps.click.ctor === '_Tuple0') - { - removed = true; - removeClick(node); - } - else - { - node.elm_click_handler = nextProps.click; - } - } - - // stop capturing clicks if - if (removed - && nextProps.hover.ctor === '_Tuple0' - && nextProps.click.ctor === '_Tuple0') - { - node.style.pointerEvents = 'none'; - } - } - - - // TEXT - - function block(align) - { - return function(text) - { - var raw = { - ctor :'RawHtml', - html : Text.renderHtml(text), - align: align - }; - var pos = htmlHeight(0, raw); - return newElement(pos._0, pos._1, raw); - } - } - - function markdown(text) - { - var raw = { - ctor:'RawHtml', - html: text, - align: null - }; - var pos = htmlHeight(0, raw); - return newElement(pos._0, pos._1, raw); - } - - function htmlHeight(width, rawHtml) - { - // create dummy node - var temp = document.createElement('div'); - temp.innerHTML = rawHtml.html; - if (width > 0) - { - temp.style.width = width + "px"; - } - temp.style.visibility = "hidden"; - temp.style.styleFloat = "left"; - temp.style.cssFloat = "left"; - - document.body.appendChild(temp); - - // get dimensions - var style = window.getComputedStyle(temp, null); - var w = Math.ceil(style.getPropertyValue("width").slice(0,-2) - 0); - var h = Math.ceil(style.getPropertyValue("height").slice(0,-2) - 0); - document.body.removeChild(temp); - return Utils.Tuple2(w,h); - } - - - return localRuntime.Native.Graphics.Element.values = { - render: render, - update: update, - updateAndReplace: updateAndReplace, - - createNode: createNode, - newElement: F3(newElement), - addTransform: addTransform, - htmlHeight: F2(htmlHeight), - guid: Utils.guid, - - block: block, - markdown: markdown - }; - -}; - -Elm.Native.Http = {}; -Elm.Native.Http.make = function(localRuntime) { - - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Http = localRuntime.Native.Http || {}; - if (localRuntime.Native.Http.values) - { - return localRuntime.Native.Http.values; - } - - var Dict = Elm.Dict.make(localRuntime); - var List = Elm.List.make(localRuntime); - var Maybe = Elm.Maybe.make(localRuntime); - var Task = Elm.Native.Task.make(localRuntime); - - - function send(settings, request) - { - return Task.asyncFunction(function(callback) { - var req = new XMLHttpRequest(); - - // start - if (settings.onStart.ctor === 'Just') - { - req.addEventListener('loadStart', function() { - var task = settings.onStart._0; - Task.spawn(task); - }); - } - - // progress - if (settings.onProgress.ctor === 'Just') - { - req.addEventListener('progress', function(event) { - var progress = !event.lengthComputable - ? Maybe.Nothing - : Maybe.Just({ - _: {}, - loaded: event.loaded, - total: event.total - }); - var task = settings.onProgress._0(progress); - Task.spawn(task); - }); - } - - // end - req.addEventListener('error', function() { - return callback(Task.fail({ ctor: 'RawNetworkError' })); - }); - - req.addEventListener('timeout', function() { - return callback(Task.fail({ ctor: 'RawTimeout' })); - }); - - req.addEventListener('load', function() { - return callback(Task.succeed(toResponse(req))); - }); - - req.open(request.verb, request.url, true); - - // set all the headers - function setHeader(pair) { - req.setRequestHeader(pair._0, pair._1); - } - A2(List.map, setHeader, request.headers); - - // set the timeout - req.timeout = settings.timeout; - - // ask for a specific MIME type for the response - if (settings.desiredResponseType.ctor === 'Just') - { - req.overrideMimeType(settings.desiredResponseType._0); - } - - req.send(request.body._0); - }); - } - - - // deal with responses - - function toResponse(req) - { - var tag = typeof req.response === 'string' ? 'Text' : 'Blob'; - return { - _: {}, - status: req.status, - statusText: req.statusText, - headers: parseHeaders(req.getAllResponseHeaders()), - url: req.responseURL, - value: { ctor: tag, _0: req.response } - }; - } - - - function parseHeaders(rawHeaders) - { - var headers = Dict.empty; - - if (!rawHeaders) - { - return headers; - } - - var headerPairs = rawHeaders.split('\u000d\u000a'); - for (var i = headerPairs.length; i--; ) - { - var headerPair = headerPairs[i]; - var index = headerPair.indexOf('\u003a\u0020'); - if (index > 0) - { - var key = headerPair.substring(0, index); - var value = headerPair.substring(index + 2); - - headers = A3(Dict.update, key, function(oldValue) { - if (oldValue.ctor === 'Just') - { - return Maybe.Just(value + ', ' + oldValue._0); - } - return Maybe.Just(value); - }, headers); - } - } - - return headers; - } - - - function multipart(dataList) - { - var formData = new FormData(); - - while (dataList.ctor !== '[]') - { - var data = dataList._0; - if (type === 'StringData') - { - formData.append(data._0, data._1); - } - else - { - var fileName = data._1.ctor === 'Nothing' - ? undefined - : data._1._0; - formData.append(data._0, data._2, fileName); - } - dataList = dataList._1; - } - - return { ctor: 'FormData', formData: formData }; - } - - - function uriEncode(string) - { - return encodeURIComponent(string); - } - - function uriDecode(string) - { - return decodeURIComponent(string); - } - - return localRuntime.Native.Http.values = { - send: F2(send), - multipart: multipart, - uriEncode: uriEncode, - uriDecode: uriDecode - }; -}; - -Elm.Native.Json = {}; -Elm.Native.Json.make = function(localRuntime) { - - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Json = localRuntime.Native.Json || {}; - if (localRuntime.Native.Json.values) { - return localRuntime.Native.Json.values; - } - - var ElmArray = Elm.Native.Array.make(localRuntime); - var List = Elm.Native.List.make(localRuntime); - var Maybe = Elm.Maybe.make(localRuntime); - var Result = Elm.Result.make(localRuntime); - var Utils = Elm.Native.Utils.make(localRuntime); - - - function crash(expected, actual) { - throw new Error( - 'expecting ' + expected + ' but got ' + JSON.stringify(actual) - ); - } - - - // PRIMITIVE VALUES - - function decodeNull(successValue) { - return function(value) { - if (value === null) { - return successValue; - } - crash('null', value); - }; - } - - - function decodeString(value) { - if (typeof value === 'string' || value instanceof String) { - return value; - } - crash('a String', value); - } - - - function decodeFloat(value) { - if (typeof value === 'number') { - return value; - } - crash('a Float', value); - } - - - function decodeInt(value) { - if (typeof value === 'number' && (value|0) === value) { - return value; - } - crash('an Int', value); - } - - - function decodeBool(value) { - if (typeof value === 'boolean') { - return value; - } - crash('a Bool', value); - } - - - // ARRAY - - function decodeArray(decoder) { - return function(value) { - if (value instanceof Array) { - var len = value.length; - var array = new Array(len); - for (var i = len; i-- ; ) { - array[i] = decoder(value[i]); - } - return ElmArray.fromJSArray(array); - } - crash('an Array', value); - }; - } - - - // LIST - - function decodeList(decoder) { - return function(value) { - if (value instanceof Array) { - var len = value.length; - var list = List.Nil; - for (var i = len; i-- ; ) { - list = List.Cons( decoder(value[i]), list ); - } - return list; - } - crash('a List', value); - }; - } - - - // MAYBE - - function decodeMaybe(decoder) { - return function(value) { - try { - return Maybe.Just(decoder(value)); - } catch(e) { - return Maybe.Nothing; - } - }; - } - - - // FIELDS - - function decodeField(field, decoder) { - return function(value) { - var subValue = value[field]; - if (subValue !== undefined) { - return decoder(subValue); - } - crash("an object with field '" + field + "'", value); - }; - } - - - // OBJECTS - - function decodeKeyValuePairs(decoder) { - return function(value) { - var isObject = - typeof value === 'object' - && value !== null - && !(value instanceof Array); - - if (isObject) { - var keyValuePairs = List.Nil; - for (var key in value) { - var elmValue = decoder(value[key]); - var pair = Utils.Tuple2(key, elmValue); - keyValuePairs = List.Cons(pair, keyValuePairs); - } - return keyValuePairs; - } - - crash("an object", value); - }; - } - - function decodeObject1(f, d1) { - return function(value) { - return f(d1(value)); - }; - } - - function decodeObject2(f, d1, d2) { - return function(value) { - return A2( f, d1(value), d2(value) ); - }; - } - - function decodeObject3(f, d1, d2, d3) { - return function(value) { - return A3( f, d1(value), d2(value), d3(value) ); - }; - } - - function decodeObject4(f, d1, d2, d3, d4) { - return function(value) { - return A4( f, d1(value), d2(value), d3(value), d4(value) ); - }; - } - - function decodeObject5(f, d1, d2, d3, d4, d5) { - return function(value) { - return A5( f, d1(value), d2(value), d3(value), d4(value), d5(value) ); - }; - } - - function decodeObject6(f, d1, d2, d3, d4, d5, d6) { - return function(value) { - return A6( f, - d1(value), - d2(value), - d3(value), - d4(value), - d5(value), - d6(value) - ); - }; - } - - function decodeObject7(f, d1, d2, d3, d4, d5, d6, d7) { - return function(value) { - return A7( f, - d1(value), - d2(value), - d3(value), - d4(value), - d5(value), - d6(value), - d7(value) - ); - }; - } - - function decodeObject8(f, d1, d2, d3, d4, d5, d6, d7, d8) { - return function(value) { - return A8( f, - d1(value), - d2(value), - d3(value), - d4(value), - d5(value), - d6(value), - d7(value), - d8(value) - ); - }; - } - - - // TUPLES - - function decodeTuple1(f, d1) { - return function(value) { - if ( !(value instanceof Array) || value.length !== 1 ) { - crash('a Tuple of length 1', value); - } - return f( d1(value[0]) ); - }; - } - - function decodeTuple2(f, d1, d2) { - return function(value) { - if ( !(value instanceof Array) || value.length !== 2 ) { - crash('a Tuple of length 2', value); - } - return A2( f, d1(value[0]), d2(value[1]) ); - }; - } - - function decodeTuple3(f, d1, d2, d3) { - return function(value) { - if ( !(value instanceof Array) || value.length !== 3 ) { - crash('a Tuple of length 3', value); - } - return A3( f, d1(value[0]), d2(value[1]), d3(value[2]) ); - }; - } - - - function decodeTuple4(f, d1, d2, d3, d4) { - return function(value) { - if ( !(value instanceof Array) || value.length !== 4 ) { - crash('a Tuple of length 4', value); - } - return A4( f, d1(value[0]), d2(value[1]), d3(value[2]), d4(value[3]) ); - }; - } - - - function decodeTuple5(f, d1, d2, d3, d4, d5) { - return function(value) { - if ( !(value instanceof Array) || value.length !== 5 ) { - crash('a Tuple of length 5', value); - } - return A5( f, - d1(value[0]), - d2(value[1]), - d3(value[2]), - d4(value[3]), - d5(value[4]) - ); - }; - } - - - function decodeTuple6(f, d1, d2, d3, d4, d5, d6) { - return function(value) { - if ( !(value instanceof Array) || value.length !== 6 ) { - crash('a Tuple of length 6', value); - } - return A6( f, - d1(value[0]), - d2(value[1]), - d3(value[2]), - d4(value[3]), - d5(value[4]), - d6(value[5]) - ); - }; - } - - function decodeTuple7(f, d1, d2, d3, d4, d5, d6, d7) { - return function(value) { - if ( !(value instanceof Array) || value.length !== 7 ) { - crash('a Tuple of length 7', value); - } - return A7( f, - d1(value[0]), - d2(value[1]), - d3(value[2]), - d4(value[3]), - d5(value[4]), - d6(value[5]), - d7(value[6]) - ); - }; - } - - - function decodeTuple8(f, d1, d2, d3, d4, d5, d6, d7, d8) { - return function(value) { - if ( !(value instanceof Array) || value.length !== 8 ) { - crash('a Tuple of length 8', value); - } - return A8( f, - d1(value[0]), - d2(value[1]), - d3(value[2]), - d4(value[3]), - d5(value[4]), - d6(value[5]), - d7(value[6]), - d8(value[7]) - ); - }; - } - - - // CUSTOM DECODERS - - function decodeValue(value) { - return value; - } - - function runDecoderValue(decoder, value) { - try { - return Result.Ok(decoder(value)); - } catch(e) { - return Result.Err(e.message); - } - } - - function customDecoder(decoder, callback) { - return function(value) { - var result = callback(decoder(value)); - if (result.ctor === 'Err') { - throw new Error('custom decoder failed: ' + result._0); - } - return result._0; - } - } - - function andThen(decode, callback) { - return function(value) { - var result = decode(value); - return callback(result)(value); - } - } - - function fail(msg) { - return function(value) { - throw new Error(msg); - } - } - - function succeed(successValue) { - return function(value) { - return successValue; - } - } - - - // ONE OF MANY - - function oneOf(decoders) { - return function(value) { - var errors = []; - var temp = decoders; - while (temp.ctor !== '[]') { - try { - return temp._0(value); - } catch(e) { - errors.push(e.message); - } - temp = temp._1; - } - throw new Error('expecting one of the following:\n ' + errors.join('\n ')); - } - } - - function get(decoder, value) { - try { - return Result.Ok(decoder(value)); - } catch(e) { - return Result.Err(e.message); - } - } - - - // ENCODE / DECODE - - function runDecoderString(decoder, string) { - try { - return Result.Ok(decoder(JSON.parse(string))); - } catch(e) { - return Result.Err(e.message); - } - } - - 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 localRuntime.Native.Json.values = { - encode: F2(encode), - runDecoderString: F2(runDecoderString), - runDecoderValue: F2(runDecoderValue), - - get: F2(get), - oneOf: oneOf, - - decodeNull: decodeNull, - decodeInt: decodeInt, - decodeFloat: decodeFloat, - decodeString: decodeString, - decodeBool: decodeBool, - - decodeMaybe: decodeMaybe, - - decodeList: decodeList, - decodeArray: decodeArray, - - 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), - decodeValue: decodeValue, - customDecoder: F2(customDecoder), - fail: fail, - succeed: succeed, - - identity: identity, - encodeNull: null, - encodeArray: ElmArray.toJSArray, - encodeList: List.toArray, - encodeObject: encodeObject - - }; - -}; - -Elm.Native.List = {}; -Elm.Native.List.make = function(localRuntime) { - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.List = localRuntime.Native.List || {}; - if (localRuntime.Native.List.values) - { - return localRuntime.Native.List.values; - } - if ('values' in Elm.Native.List) - { - return localRuntime.Native.List.values = Elm.Native.List.values; - } - - var Utils = Elm.Native.Utils.make(localRuntime); - - var Nil = Utils.Nil; - var Cons = Utils.Cons; - - function toArray(xs) - { - var out = []; - while (xs.ctor !== '[]') - { - out.push(xs._0); - xs = xs._1; - } - return out; - } - - function fromArray(arr) - { - var out = Nil; - for (var i = arr.length; i--; ) - { - out = Cons(arr[i], out); - } - return out; - } - - function range(lo,hi) - { - var lst = Nil; - if (lo <= hi) - { - do { lst = Cons(hi,lst) } while (hi-->lo); - } - return lst - } - - // f defined similarly for both foldl and foldr (NB: different from Haskell) - // ie, foldl : (a -> b -> b) -> b -> [a] -> b - function foldl(f, b, xs) - { - var acc = b; - while (xs.ctor !== '[]') - { - acc = A2(f, xs._0, acc); - xs = xs._1; - } - return acc; - } - - 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 any(pred, xs) - { - while (xs.ctor !== '[]') - { - if (pred(xs._0)) - { - return true; - } - xs = xs._1; - } - return false; - } - - 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 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; - })); - } - - function take(n, xs) - { - var arr = []; - while (xs.ctor !== '[]' && n > 0) - { - arr.push(xs._0); - xs = xs._1; - --n; - } - return fromArray(arr); - } - - function drop(n, xs) - { - while (xs.ctor !== '[]' && n > 0) - { - xs = xs._1; - --n; - } - return xs; - } - - function repeat(n, x) - { - var arr = []; - var pattern = [x]; - while (n > 0) - { - if (n & 1) - { - arr = arr.concat(pattern); - } - n >>= 1, pattern = pattern.concat(pattern); - } - return fromArray(arr); - } - - - Elm.Native.List.values = { - Nil:Nil, - Cons:Cons, - cons:F2(Cons), - toArray:toArray, - fromArray:fromArray, - range:range, - - foldl:F3(foldl), - foldr:F3(foldr), - - any:F2(any), - map2:F3(map2), - map3:F4(map3), - map4:F5(map4), - map5:F6(map5), - sortBy:F2(sortBy), - sortWith:F2(sortWith), - take:F2(take), - drop:F2(drop), - repeat:F2(repeat) - }; - return localRuntime.Native.List.values = Elm.Native.List.values; - -}; - -Elm.Native.Port = {}; -Elm.Native.Port.make = function(localRuntime) { - - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Port = localRuntime.Native.Port || {}; - if (localRuntime.Native.Port.values) - { - return localRuntime.Native.Port.values; - } - - var NS; - var Utils = Elm.Native.Utils.make(localRuntime); - - - // INBOUND - - function inbound(name, type, converter) - { - if (!localRuntime.argsTracker[name]) - { - throw new Error( - "Port Error:\n" + - "No argument was given for the port named '" + name + "' with type:\n\n" + - " " + type.split('\n').join('\n ') + "\n\n" + - "You need to provide an initial value!\n\n" + - "Find out more about ports here <http://elm-lang.org/learn/Ports.elm>" - ); - } - var arg = localRuntime.argsTracker[name]; - arg.used = true; - - return jsToElm(name, type, converter, arg.value); - } - - - function inboundSignal(name, type, converter) - { - var initialValue = inbound(name, type, converter); - - if (!NS) - { - NS = Elm.Native.Signal.make(localRuntime); - } - var signal = NS.input('inbound-port-' + name, initialValue); - - function send(jsValue) - { - var elmValue = jsToElm(name, type, converter, jsValue); - setTimeout(function() { - localRuntime.notify(signal.id, elmValue); - }, 0); - } - - localRuntime.ports[name] = { send: send }; - - return signal; - } - - - function jsToElm(name, type, converter, value) - { - try - { - return converter(value); - } - catch(e) - { - throw new Error( - "Port Error:\n" + - "Regarding the port named '" + name + "' with type:\n\n" + - " " + type.split('\n').join('\n ') + "\n\n" + - "You just sent the value:\n\n" + - " " + JSON.stringify(value) + "\n\n" + - "but it cannot be converted to the necessary type.\n" + - e.message - ); - } - } - - - // OUTBOUND - - function outbound(name, converter, elmValue) - { - localRuntime.ports[name] = converter(elmValue); - } - - - function outboundSignal(name, converter, signal) - { - var subscribers = []; - - function subscribe(handler) - { - subscribers.push(handler); - } - function unsubscribe(handler) - { - subscribers.pop(subscribers.indexOf(handler)); - } - - function notify(elmValue) - { - var jsValue = converter(elmValue); - var len = subscribers.length; - for (var i = 0; i < len; ++i) - { - subscribers[i](jsValue); - } - } - - if (!NS) - { - NS = Elm.Native.Signal.make(localRuntime); - } - NS.output('outbound-port-' + name, notify, signal); - - localRuntime.ports[name] = { - subscribe: subscribe, - unsubscribe: unsubscribe - }; - - return signal; - } - - - return localRuntime.Native.Port.values = { - inbound: inbound, - outbound: outbound, - inboundSignal: inboundSignal, - outboundSignal: outboundSignal - }; -}; - -Elm.Native.Reads = {}; -Elm.Native.Reads.make = function(localRuntime) { - - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Reads = localRuntime.Native.Reads || {}; - if(localRuntime.Native.Reads.values) { - return localRuntime.Native.Reads.values; - } - - var Maybe = Elm.Maybe.make(localRuntime); - - function readInt(str) { - var number = Number(str); - return isNaN(number) || str === '' - ? Maybe.Nothing - : Maybe.Just(number); - } - - return localRuntime.Native.Reads.values = { - readInt: readInt - }; -}; - - -if (!Elm.fullscreen) { - - (function() { - 'use strict'; - - var Display = { - FULLSCREEN: 0, - COMPONENT: 1, - NONE: 2 - }; - - Elm.fullscreen = function(module, args) - { - var container = document.createElement('div'); - document.body.appendChild(container); - return init(Display.FULLSCREEN, container, module, args || {}); - }; - - Elm.embed = function(module, container, args) - { - var tag = container.tagName; - if (tag !== 'DIV') - { - throw new Error('Elm.node must be given a DIV, not a ' + tag + '.'); - } - return init(Display.COMPONENT, container, module, args || {}); - }; - - Elm.worker = function(module, args) - { - return init(Display.NONE, {}, module, args || {}); - }; - - function init(display, container, module, args, moduleToReplace) - { - // defining state needed for an instance of the Elm RTS - var inputs = []; - - /* OFFSET - * Elm's time traveling debugger lets you pause time. This means - * "now" may be shifted a bit into the past. By wrapping Date.now() - * we can manage this. - */ - var timer = { - programStart: Date.now(), - now: function() - { - return Date.now(); - } - }; - - var updateInProgress = false; - function notify(id, v) - { - if (updateInProgress) - { - throw new Error( - 'The notify function has been called synchronously!\n' + - 'This can lead to frames being dropped.\n' + - 'Definitely report this to <https://github.com/elm-lang/Elm/issues>\n'); - } - updateInProgress = true; - var timestep = timer.now(); - for (var i = inputs.length; i--; ) - { - inputs[i].notify(timestep, id, v); - } - updateInProgress = false; - } - function setTimeout(func, delay) - { - return window.setTimeout(func, delay); - } - - var listeners = []; - function addListener(relevantInputs, domNode, eventName, func) - { - domNode.addEventListener(eventName, func); - var listener = { - relevantInputs: relevantInputs, - domNode: domNode, - eventName: eventName, - func: func - }; - listeners.push(listener); - } - - var argsTracker = {}; - for (var name in args) - { - argsTracker[name] = { - value: args[name], - used: false - }; - } - - // create the actual RTS. Any impure modules will attach themselves to this - // object. This permits many Elm programs to be embedded per document. - var elm = { - notify: notify, - setTimeout: setTimeout, - node: container, - addListener: addListener, - inputs: inputs, - timer: timer, - argsTracker: argsTracker, - ports: {}, - - isFullscreen: function() { return display === Display.FULLSCREEN; }, - isEmbed: function() { return display === Display.COMPONENT; }, - isWorker: function() { return display === Display.NONE; } - }; - - function swap(newModule) - { - removeListeners(listeners); - var div = document.createElement('div'); - var newElm = init(display, div, newModule, args, elm); - inputs = []; - // elm.swap = newElm.swap; - return newElm; - } - - function dispose() - { - removeListeners(listeners); - inputs = []; - } - - var Module = {}; - try - { - Module = module.make(elm); - checkInputs(elm); - } - catch (error) - { - if (typeof container.appendChild == 'undefined') - { - console.log(error.message); - } - else - { - container.appendChild(errorNode(error.message)); - } - throw error; - } - - if (display !== Display.NONE) - { - var graphicsNode = initGraphics(elm, Module); - } - - var rootNode = { kids: inputs }; - trimDeadNodes(rootNode); - inputs = rootNode.kids; - filterListeners(inputs, listeners); - - addReceivers(elm.ports); - - if (typeof moduleToReplace !== 'undefined') - { - hotSwap(moduleToReplace, elm); - - // rerender scene if graphics are enabled. - if (typeof graphicsNode !== 'undefined') - { - graphicsNode.notify(0, true, 0); - } - } - - return { - swap: swap, - ports: elm.ports, - dispose: dispose - }; - }; - - function checkInputs(elm) - { - var argsTracker = elm.argsTracker; - for (var name in argsTracker) - { - if (!argsTracker[name].used) - { - throw new Error( - "Port Error:\nYou provided an argument named '" + name + - "' but there is no corresponding port!\n\n" + - "Maybe add a port '" + name + "' to your Elm module?\n" + - "Maybe remove the '" + name + "' argument from your initialization code in JS?" - ); - } - } - } - - function errorNode(message) - { - var code = document.createElement('code'); - - var lines = message.split('\n'); - code.appendChild(document.createTextNode(lines[0])); - code.appendChild(document.createElement('br')); - code.appendChild(document.createElement('br')); - for (var i = 1; i < lines.length; ++i) - { - code.appendChild(document.createTextNode('\u00A0 \u00A0 ' + lines[i].replace(/ /g, '\u00A0 '))); - code.appendChild(document.createElement('br')); - } - code.appendChild(document.createElement('br')); - code.appendChild(document.createTextNode("Open the developer console for more details.")); - return code; - } - - - //// FILTER SIGNALS //// - - // TODO: move this code into the signal module and create a function - // Signal.initializeGraph that actually instantiates everything. - - function filterListeners(inputs, listeners) - { - loop: - for (var i = listeners.length; i--; ) - { - var listener = listeners[i]; - for (var j = inputs.length; j--; ) - { - if (listener.relevantInputs.indexOf(inputs[j].id) >= 0) - { - continue loop; - } - } - listener.domNode.removeEventListener(listener.eventName, listener.func); - } - } - - function removeListeners(listeners) - { - for (var i = listeners.length; i--; ) - { - var listener = listeners[i]; - listener.domNode.removeEventListener(listener.eventName, listener.func); - } - } - - // add receivers for built-in ports if they are defined - function addReceivers(ports) - { - if ('title' in ports) - { - if (typeof ports.title === 'string') - { - document.title = ports.title; - } - else - { - ports.title.subscribe(function(v) { document.title = v; }); - } - } - if ('redirect' in ports) - { - ports.redirect.subscribe(function(v) { - if (v.length > 0) - { - window.location = v; - } - }); - } - } - - - // returns a boolean representing whether the node is alive or not. - function trimDeadNodes(node) - { - if (node.isOutput) - { - return true; - } - - var liveKids = []; - for (var i = node.kids.length; i--; ) - { - var kid = node.kids[i]; - if (trimDeadNodes(kid)) - { - liveKids.push(kid); - } - } - node.kids = liveKids; - - return liveKids.length > 0; - } - - - //// RENDERING //// - - function initGraphics(elm, Module) - { - if (!('main' in Module)) - { - throw new Error("'main' is missing! What do I display?!"); - } - - var signalGraph = Module.main; - - // make sure the signal graph is actually a signal & extract the visual model - if (!('notify' in signalGraph)) - { - signalGraph = Elm.Signal.make(elm).constant(signalGraph); - } - var initialScene = signalGraph.value; - - // Figure out what the render functions should be - var render; - var update; - if (initialScene.props) - { - var Element = Elm.Native.Graphics.Element.make(elm); - render = Element.render; - update = Element.updateAndReplace; - } - else - { - var VirtualDom = Elm.Native.VirtualDom.make(elm); - render = VirtualDom.render; - update = VirtualDom.updateAndReplace; - } - - // Add the initialScene to the DOM - var container = elm.node; - var node = render(initialScene); - while (container.firstChild) - { - container.removeChild(container.firstChild); - } - container.appendChild(node); - - var _requestAnimationFrame = - typeof requestAnimationFrame !== 'undefined' - ? requestAnimationFrame - : function(cb) { setTimeout(cb, 1000/60); } - ; - - // domUpdate is called whenever the main Signal changes. - // - // domUpdate and drawCallback implement a small state machine in order - // to schedule only 1 draw per animation frame. This enforces that - // once draw has been called, it will not be called again until the - // next frame. - // - // drawCallback is scheduled whenever - // 1. The state transitions from PENDING_REQUEST to EXTRA_REQUEST, or - // 2. The state transitions from NO_REQUEST to PENDING_REQUEST - // - // Invariants: - // 1. In the NO_REQUEST state, there is never a scheduled drawCallback. - // 2. In the PENDING_REQUEST and EXTRA_REQUEST states, there is always exactly 1 - // scheduled drawCallback. - var NO_REQUEST = 0; - var PENDING_REQUEST = 1; - var EXTRA_REQUEST = 2; - var state = NO_REQUEST; - var savedScene = initialScene; - var scheduledScene = initialScene; - - function domUpdate(newScene) - { - scheduledScene = newScene; - - switch (state) - { - case NO_REQUEST: - _requestAnimationFrame(drawCallback); - state = PENDING_REQUEST; - return; - case PENDING_REQUEST: - state = PENDING_REQUEST; - return; - case EXTRA_REQUEST: - state = PENDING_REQUEST; - return; - } - } - - function drawCallback() - { - switch (state) - { - case NO_REQUEST: - // This state should not be possible. How can there be no - // request, yet somehow we are actively fulfilling a - // request? - throw new Error( - "Unexpected draw callback.\n" + - "Please report this to <https://github.com/elm-lang/core/issues>." - ); - - case PENDING_REQUEST: - // At this point, we do not *know* that another frame is - // needed, but we make an extra request to rAF just in - // case. It's possible to drop a frame if rAF is called - // too late, so we just do it preemptively. - _requestAnimationFrame(drawCallback); - state = EXTRA_REQUEST; - - // There's also stuff we definitely need to draw. - draw(); - return; - - case EXTRA_REQUEST: - // Turns out the extra request was not needed, so we will - // stop calling rAF. No reason to call it all the time if - // no one needs it. - state = NO_REQUEST; - return; - } - } - - function draw() - { - update(elm.node.firstChild, savedScene, scheduledScene); - if (elm.Native.Window) - { - elm.Native.Window.values.resizeIfNeeded(); - } - savedScene = scheduledScene; - } - - var renderer = Elm.Native.Signal.make(elm).output('main', domUpdate, signalGraph); - - // must check for resize after 'renderer' is created so - // that changes show up. - if (elm.Native.Window) - { - elm.Native.Window.values.resizeIfNeeded(); - } - - return renderer; - } - - //// HOT SWAPPING //// - - // Returns boolean indicating if the swap was successful. - // Requires that the two signal graphs have exactly the same - // structure. - function hotSwap(from, to) - { - function similar(nodeOld,nodeNew) - { - if (nodeOld.id !== nodeNew.id) - { - return false; - } - if (nodeOld.isOutput) - { - return nodeNew.isOutput; - } - return nodeOld.kids.length === nodeNew.kids.length; - } - function swap(nodeOld,nodeNew) - { - nodeNew.value = nodeOld.value; - return true; - } - var canSwap = depthFirstTraversals(similar, from.inputs, to.inputs); - if (canSwap) - { - depthFirstTraversals(swap, from.inputs, to.inputs); - } - from.node.parentNode.replaceChild(to.node, from.node); - - return canSwap; - } - - // Returns false if the node operation f ever fails. - function depthFirstTraversals(f, queueOld, queueNew) - { - if (queueOld.length !== queueNew.length) - { - return false; - } - queueOld = queueOld.slice(0); - queueNew = queueNew.slice(0); - - var seen = []; - while (queueOld.length > 0 && queueNew.length > 0) - { - var nodeOld = queueOld.pop(); - var nodeNew = queueNew.pop(); - if (seen.indexOf(nodeOld.id) < 0) - { - if (!f(nodeOld, nodeNew)) - { - return false; - } - queueOld = queueOld.concat(nodeOld.kids || []); - queueNew = queueNew.concat(nodeNew.kids || []); - seen.push(nodeOld.id); - } - } - return true; - } - }()); - - 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); - } -} - -Elm.Native.Show = {}; -Elm.Native.Show.make = function(localRuntime) { - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Show = localRuntime.Native.Show || {}; - if (localRuntime.Native.Show.values) - { - return localRuntime.Native.Show.values; - } - - var _Array; - var Dict; - var List; - var Utils = Elm.Native.Utils.make(localRuntime); - - var toString = function(v) - { - var type = typeof v; - if (type === "function") - { - var name = v.func ? v.func.name : v.name; - return '<function' + (name === '' ? '' : ': ') + name + '>'; - } - else if (type === "boolean") - { - return v ? "True" : "False"; - } - else if (type === "number") - { - return v + ""; - } - else if ((v instanceof String) && v.isChar) - { - return "'" + addSlashes(v, true) + "'"; - } - else if (type === "string") - { - return '"' + addSlashes(v, false) + '"'; - } - else if (type === "object" && '_' in v && probablyPublic(v)) - { - var output = []; - for (var k in v._) - { - for (var i = v._[k].length; i--; ) - { - output.push(k + " = " + toString(v._[k][i])); - } - } - for (var k in v) - { - if (k === '_') continue; - output.push(k + " = " + toString(v[k])); - } - if (output.length === 0) - { - return "{}"; - } - return "{ " + output.join(", ") + " }"; - } - else if (type === "object" && 'ctor' in v) - { - if (v.ctor.substring(0,6) === "_Tuple") - { - var output = []; - for (var k in v) - { - if (k === 'ctor') continue; - output.push(toString(v[k])); - } - return "(" + output.join(",") + ")"; - } - else if (v.ctor === "_Array") - { - if (!_Array) - { - _Array = Elm.Array.make(localRuntime); - } - var list = _Array.toList(v); - return "Array.fromList " + toString(list); - } - else if (v.ctor === "::") - { - var output = '[' + toString(v._0); - v = v._1; - while (v.ctor === "::") - { - output += "," + toString(v._0); - v = v._1; - } - return output + ']'; - } - else if (v.ctor === "[]") - { - return "[]"; - } - else if (v.ctor === "RBNode" || v.ctor === "RBEmpty") - { - if (!Dict) - { - Dict = Elm.Dict.make(localRuntime); - } - if (!List) - { - List = Elm.List.make(localRuntime); - } - var list = Dict.toList(v); - var name = "Dict"; - if (list.ctor === "::" && list._0._1.ctor === "_Tuple0") - { - name = "Set"; - list = A2(List.map, function(x){return x._0}, list); - } - return name + ".fromList " + toString(list); - } - else if (v.ctor.slice(0,5) === "Text:") - { - return '<text>' - } - else - { - var output = ""; - for (var i in v) - { - if (i === 'ctor') continue; - var str = toString(v[i]); - var parenless = str[0] === '{' || str[0] === '<' || str.indexOf(' ') < 0; - output += ' ' + (parenless ? str : '(' + str + ')'); - } - return v.ctor + output; - } - } - if (type === 'object' && 'notify' in v && 'id' in v) - { - return '<Signal>'; - } - return "<internal structure>"; - }; - - 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, '\\"'); - } - } - - function probablyPublic(v) - { - var keys = Object.keys(v); - var len = keys.length; - if (len === 3 - && 'props' in v - && 'element' in v) - { - return false; - } - else if (len === 5 - && 'horizontal' in v - && 'vertical' in v - && 'x' in v - && 'y' in v) - { - return false; - } - else if (len === 7 - && 'theta' in v - && 'scale' in v - && 'x' in v - && 'y' in v - && 'alpha' in v - && 'form' in v) - { - return false; - } - return true; - } - - return localRuntime.Native.Show.values = { - toString: toString - }; -}; - -Elm.Native.Signal = {}; -Elm.Native.Signal.make = function(localRuntime) { - - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Signal = localRuntime.Native.Signal || {}; - if (localRuntime.Native.Signal.values) - { - return localRuntime.Native.Signal.values; - } - - - var Task = Elm.Native.Task.make(localRuntime); - var Utils = Elm.Native.Utils.make(localRuntime); - - - function broadcastToKids(node, timestamp, update) - { - var kids = node.kids; - for (var i = kids.length; i--; ) - { - kids[i].notify(timestamp, update, node.id); - } - } - - - // INPUT - - function input(name, base) - { - var node = { - id: Utils.guid(), - name: 'input-' + name, - value: base, - parents: [], - kids: [] - }; - - node.notify = function(timestamp, targetId, value) { - var update = targetId === node.id; - if (update) - { - node.value = value; - } - broadcastToKids(node, timestamp, update); - return update; - }; - - localRuntime.inputs.push(node); - - return node; - } - - function constant(value) - { - return input('constant', value); - } - - - // MAILBOX - - function mailbox(base) - { - var signal = input('mailbox', base); - - function send(value) { - return Task.asyncFunction(function(callback) { - localRuntime.setTimeout(function() { - localRuntime.notify(signal.id, value); - }, 0); - callback(Task.succeed(Utils.Tuple0)); - }); - } - - return { - _: {}, - signal: signal, - address: { - ctor: 'Address', - _0: send - } - }; - } - - function sendMessage(message) - { - Task.perform(message._0); - } - - - // OUTPUT - - function output(name, handler, parent) - { - var node = { - id: Utils.guid(), - name: 'output-' + name, - parents: [parent], - isOutput: true - }; - - node.notify = function(timestamp, parentUpdate, parentID) - { - if (parentUpdate) - { - handler(parent.value); - } - }; - - parent.kids.push(node); - - return node; - } - - - // MAP - - function mapMany(refreshValue, args) - { - var node = { - id: Utils.guid(), - name: 'map' + args.length, - value: refreshValue(), - parents: args, - kids: [] - }; - - var numberOfParents = args.length; - var count = 0; - var update = false; - - node.notify = function(timestamp, parentUpdate, parentID) - { - ++count; - - update = update || parentUpdate; - - if (count === numberOfParents) - { - if (update) - { - node.value = refreshValue(); - } - broadcastToKids(node, timestamp, update); - update = false; - count = 0; - } - }; - - for (var i = numberOfParents; i--; ) - { - args[i].kids.push(node); - } - - return node; - } - - - function map(func, a) - { - function refreshValue() - { - return func(a.value); - } - return mapMany(refreshValue, [a]); - } - - - function map2(func, a, b) - { - function refreshValue() - { - return A2( func, a.value, b.value ); - } - return mapMany(refreshValue, [a,b]); - } - - - function map3(func, a, b, c) - { - function refreshValue() - { - return A3( func, a.value, b.value, c.value ); - } - return mapMany(refreshValue, [a,b,c]); - } - - - function map4(func, a, b, c, d) - { - function refreshValue() - { - return A4( func, a.value, b.value, c.value, d.value ); - } - return mapMany(refreshValue, [a,b,c,d]); - } - - - function map5(func, a, b, c, d, e) - { - function refreshValue() - { - return A5( func, a.value, b.value, c.value, d.value, e.value ); - } - return mapMany(refreshValue, [a,b,c,d,e]); - } - - - - // FOLD - - function foldp(update, state, signal) - { - var node = { - id: Utils.guid(), - name: 'foldp', - parents: [signal], - kids: [], - value: state - }; - - node.notify = function(timestamp, parentUpdate, parentID) - { - if (parentUpdate) - { - node.value = A2( update, signal.value, node.value ); - } - broadcastToKids(node, timestamp, parentUpdate); - }; - - signal.kids.push(node); - - return node; - } - - - // TIME - - function timestamp(signal) - { - var node = { - id: Utils.guid(), - name: 'timestamp', - value: Utils.Tuple2(localRuntime.timer.programStart, signal.value), - parents: [signal], - kids: [] - }; - - node.notify = function(timestamp, parentUpdate, parentID) - { - if (parentUpdate) - { - node.value = Utils.Tuple2(timestamp, signal.value); - } - broadcastToKids(node, timestamp, parentUpdate); - }; - - signal.kids.push(node); - - return node; - } - - - function delay(time, signal) - { - var delayed = input('delay-input-' + time, signal.value); - - function handler(value) - { - setTimeout(function() { - localRuntime.notify(delayed.id, value); - }, time); - } - - output('delay-output-' + time, handler, signal); - - return delayed; - } - - - // MERGING - - function genericMerge(tieBreaker, leftStream, rightStream) - { - var node = { - id: Utils.guid(), - name: 'merge', - value: A2(tieBreaker, leftStream.value, rightStream.value), - parents: [leftStream, rightStream], - kids: [] - }; - - var left = { touched: false, update: false, value: null }; - var right = { touched: false, update: false, value: null }; - - node.notify = function(timestamp, parentUpdate, parentID) - { - if (parentID === leftStream.id) - { - left.touched = true; - left.update = parentUpdate; - left.value = leftStream.value; - } - if (parentID === rightStream.id) - { - right.touched = true; - right.update = parentUpdate; - right.value = rightStream.value; - } - - if (left.touched && right.touched) - { - var update = false; - if (left.update && right.update) - { - node.value = A2(tieBreaker, left.value, right.value); - update = true; - } - else if (left.update) - { - node.value = left.value; - update = true; - } - else if (right.update) - { - node.value = right.value; - update = true; - } - left.touched = false; - right.touched = false; - - broadcastToKids(node, timestamp, update); - } - }; - - leftStream.kids.push(node); - rightStream.kids.push(node); - - return node; - } - - - // FILTERING - - function filterMap(toMaybe, base, signal) - { - var maybe = toMaybe(signal.value); - var node = { - id: Utils.guid(), - name: 'filterMap', - value: maybe.ctor === 'Nothing' ? base : maybe._0, - parents: [signal], - kids: [] - }; - - node.notify = function(timestamp, parentUpdate, parentID) - { - var update = false; - if (parentUpdate) - { - var maybe = toMaybe(signal.value); - if (maybe.ctor === 'Just') - { - update = true; - node.value = maybe._0; - } - } - broadcastToKids(node, timestamp, update); - }; - - signal.kids.push(node); - - return node; - } - - - // SAMPLING - - function sampleOn(ticker, signal) - { - var node = { - id: Utils.guid(), - name: 'sampleOn', - value: signal.value, - parents: [ticker, signal], - kids: [] - }; - - var signalTouch = false; - var tickerTouch = false; - var tickerUpdate = false; - - node.notify = function(timestamp, parentUpdate, parentID) - { - if (parentID === ticker.id) - { - tickerTouch = true; - tickerUpdate = parentUpdate; - } - if (parentID === signal.id) - { - signalTouch = true; - } - - if (tickerTouch && signalTouch) - { - if (tickerUpdate) - { - node.value = signal.value; - } - tickerTouch = false; - signalTouch = false; - - broadcastToKids(node, timestamp, tickerUpdate); - } - }; - - ticker.kids.push(node); - signal.kids.push(node); - - return node; - } - - - // DROP REPEATS - - function dropRepeats(signal) - { - var node = { - id: Utils.guid(), - name: 'dropRepeats', - value: signal.value, - parents: [signal], - kids: [] - }; - - node.notify = function(timestamp, parentUpdate, parentID) - { - var update = false; - if (parentUpdate && !Utils.eq(node.value, signal.value)) - { - node.value = signal.value; - update = true; - } - broadcastToKids(node, timestamp, update); - }; - - signal.kids.push(node); - - return node; - } - - - return localRuntime.Native.Signal.values = { - input: input, - constant: constant, - mailbox: mailbox, - sendMessage: sendMessage, - output: output, - map: F2(map), - map2: F3(map2), - map3: F4(map3), - map4: F5(map4), - map5: F6(map5), - foldp: F3(foldp), - genericMerge: F3(genericMerge), - filterMap: F3(filterMap), - sampleOn: F2(sampleOn), - dropRepeats: dropRepeats, - timestamp: timestamp, - delay: F2(delay) - }; -}; - -Elm.Native.String = {}; -Elm.Native.String.make = function(localRuntime) { - - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.String = localRuntime.Native.String || {}; - if (localRuntime.Native.String.values) - { - return localRuntime.Native.String.values; - } - if ('values' in Elm.Native.String) - { - return localRuntime.Native.String.values = Elm.Native.String.values; - } - - - var Char = Elm.Char.make(localRuntime); - var List = Elm.Native.List.make(localRuntime); - var Maybe = Elm.Maybe.make(localRuntime); - var Result = Elm.Result.make(localRuntime); - var Utils = Elm.Native.Utils.make(localRuntime); - - function isEmpty(str) - { - return str.length === 0; - } - function cons(chr,str) - { - return chr + str; - } - function uncons(str) - { - var hd; - return (hd = str[0]) - ? Maybe.Just(Utils.Tuple2(Utils.chr(hd), str.slice(1))) - : Maybe.Nothing; - } - function append(a,b) - { - return a + b; - } - function concat(strs) - { - return 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(Utils.chr(out[i])); - } - return out.join(''); - } - function filter(pred,str) - { - return str.split('').map(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, Utils.chr(str[i]), b); - } - return b; - } - function foldr(f,b,str) - { - for (var i = str.length; i--; ) - { - b = A2(f, Utils.chr(str[i]), b); - } - return b; - } - - function split(sep, str) - { - return List.fromArray(str.split(sep)); - } - function join(sep, strs) - { - return 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.trimLeft(); - } - function trimRight(str) - { - return str.trimRight(); - } - - function words(str) - { - return List.fromArray(str.trim().split(/\s+/g)); - } - function lines(str) - { - return 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(Utils.chr(str[i]))) - { - return true; - } - } - return false; - } - function all(pred, str) - { - for (var i = str.length; i--; ) - { - if (!pred(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; - var i = 0; - var is = []; - while ((i = str.indexOf(sub, i)) > -1) - { - is.push(i); - i = i + subLen; - } - return List.fromArray(is); - } - - function toInt(s) - { - var len = s.length; - if (len === 0) - { - return Result.Err("could not convert string '" + s + "' to an Int" ); - } - var start = 0; - if (s[0] == '-') - { - if (len === 1) - { - return Result.Err("could not convert string '" + s + "' to an Int" ); - } - start = 1; - } - for (var i = start; i < len; ++i) - { - if (!Char.isDigit(s[i])) - { - return Result.Err("could not convert string '" + s + "' to an Int" ); - } - } - return Result.Ok(parseInt(s, 10)); - } - - function toFloat(s) - { - var len = s.length; - if (len === 0) - { - return Result.Err("could not convert string '" + s + "' to a Float" ); - } - var start = 0; - if (s[0] == '-') - { - if (len === 1) - { - return Result.Err("could not convert string '" + s + "' to a Float" ); - } - start = 1; - } - var dotCount = 0; - for (var i = start; i < len; ++i) - { - if (Char.isDigit(s[i])) - { - continue; - } - if (s[i] === '.') - { - dotCount += 1; - if (dotCount <= 1) - { - continue; - } - } - return Result.Err("could not convert string '" + s + "' to a Float" ); - } - return Result.Ok(parseFloat(s)); - } - - function toList(str) - { - return List.fromArray(str.split('').map(Utils.chr)); - } - function fromList(chars) - { - return List.toArray(chars).join(''); - } - - return Elm.Native.String.values = { - 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 - }; -}; - -Elm.Native.Task = {}; -Elm.Native.Task.make = function(localRuntime) { - - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Task = localRuntime.Native.Task || {}; - if (localRuntime.Native.Task.values) - { - return localRuntime.Native.Task.values; - } - - var Result = Elm.Result.make(localRuntime); - var Signal; - var Utils = Elm.Native.Utils.make(localRuntime); - - - // CONSTRUCTORS - - function succeed(value) - { - return { - tag: 'Succeed', - value: value - }; - } - - function fail(error) - { - return { - tag: 'Fail', - value: error - }; - } - - function asyncFunction(func) - { - return { - tag: 'Async', - asyncFunction: func - }; - } - - function andThen(task, callback) - { - return { - tag: 'AndThen', - task: task, - callback: callback - }; - } - - function catch_(task, callback) - { - return { - tag: 'Catch', - task: task, - callback: callback - }; - } - - - // RUNNER - - function perform(task) { - runTask({ task: task }, function() {}); - } - - function performSignal(name, signal) - { - var workQueue = []; - - function onComplete() - { - workQueue.shift(); - - setTimeout(function() { - if (workQueue.length > 0) - { - runTask(workQueue[0], onComplete); - } - }, 0); - } - - function register(task) - { - var root = { task: task }; - workQueue.push(root); - if (workQueue.length === 1) - { - runTask(root, onComplete); - } - } - - if (!Signal) - { - Signal = Elm.Native.Signal.make(localRuntime); - } - Signal.output('perform-tasks-' + name, register, signal); - - register(signal.value); - - return signal; - } - - function mark(status, task) - { - return { status: status, task: task }; - } - - function runTask(root, onComplete) - { - var result = mark('runnable', root.task); - while (result.status === 'runnable') - { - result = stepTask(onComplete, root, result.task); - } - - if (result.status === 'done') - { - root.task = result.task; - onComplete(); - } - - if (result.status === 'blocked') - { - root.task = result.task; - } - } - - function stepTask(onComplete, root, task) - { - var tag = task.tag; - - if (tag === 'Succeed' || tag === 'Fail') - { - return mark('done', task); - } - - if (tag === 'Async') - { - var placeHolder = {}; - var couldBeSync = true; - var wasSync = false; - - task.asyncFunction(function(result) { - placeHolder.tag = result.tag; - placeHolder.value = result.value; - if (couldBeSync) - { - wasSync = true; - } - else - { - runTask(root, onComplete); - } - }); - couldBeSync = false; - return mark(wasSync ? 'done' : 'blocked', placeHolder); - } - - if (tag === 'AndThen' || tag === 'Catch') - { - var result = mark('runnable', task.task); - while (result.status === 'runnable') - { - result = stepTask(onComplete, root, result.task); - } - - if (result.status === 'done') - { - var activeTask = result.task; - var activeTag = activeTask.tag; - - var succeedChain = activeTag === 'Succeed' && tag === 'AndThen'; - var failChain = activeTag === 'Fail' && tag === 'Catch'; - - return (succeedChain || failChain) - ? mark('runnable', task.callback(activeTask.value)) - : mark('runnable', activeTask); - } - if (result.status === 'blocked') - { - return mark('blocked', { - tag: tag, - task: result.task, - callback: task.callback - }); - } - } - } - - - // THREADS - - function sleep(time) { - return asyncFunction(function(callback) { - setTimeout(function() { - callback(succeed(Utils.Tuple0)); - }, time); - }); - } - - function spawn(task) { - return asyncFunction(function(callback) { - var id = setTimeout(function() { - perform(task); - }, 0); - callback(succeed(id)); - }); - } - - - return localRuntime.Native.Task.values = { - succeed: succeed, - fail: fail, - asyncFunction: asyncFunction, - andThen: F2(andThen), - catch_: F2(catch_), - perform: perform, - performSignal: performSignal, - spawn: spawn, - sleep: sleep - }; -}; - -Elm.Native.Text = {}; -Elm.Native.Text.make = function(localRuntime) { - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Text = localRuntime.Native.Text || {}; - if (localRuntime.Native.Text.values) - { - return localRuntime.Native.Text.values; - } - - var toCss = Elm.Native.Color.make(localRuntime).toCss; - var List = Elm.Native.List.make(localRuntime); - - - // CONSTRUCTORS - - function fromString(str) - { - return { - ctor: 'Text:Text', - _0: str - }; - } - - function append(a, b) - { - return { - ctor: 'Text:Append', - _0: a, - _1: b - }; - } - - function addMeta(field, value, text) - { - var newProps = {}; - var newText = { - ctor: 'Text:Meta', - _0: newProps, - _1: text - }; - - if (text.ctor === 'Text:Meta') - { - newText._1 = text._1; - var props = text._0; - for (var i = metaKeys.length; i--; ) - { - var key = metaKeys[i]; - var val = props[key]; - if (val) - { - newProps[key] = val; - } - } - } - newProps[field] = value; - return newText; - } - - var metaKeys = [ - 'font-size', - 'font-family', - 'font-style', - 'font-weight', - 'href', - 'text-decoration', - 'color' - ]; - - - // conversions from Elm values to CSS - - function toTypefaces(list) - { - var typefaces = List.toArray(list); - for (var i = typefaces.length; i--; ) - { - var typeface = typefaces[i]; - if (typeface.indexOf(' ') > -1) - { - typefaces[i] = "'" + typeface + "'"; - } - } - return typefaces.join(','); - } - - function toLine(line) - { - var ctor = line.ctor; - return ctor === 'Under' - ? 'underline' - : ctor === 'Over' - ? 'overline' - : 'line-through'; - } - - // setting styles of Text - - function style(style, text) - { - var newText = addMeta('color', toCss(style.color), text); - var props = newText._0; - - if (style.typeface.ctor !== '[]') - { - props['font-family'] = toTypefaces(style.typeface); - } - if (style.height.ctor !== "Nothing") - { - props['font-size'] = style.height._0 + 'px'; - } - if (style.bold) - { - props['font-weight'] = 'bold'; - } - if (style.italic) - { - props['font-style'] = 'italic'; - } - if (style.line.ctor !== 'Nothing') - { - props['text-decoration'] = toLine(style.line._0); - } - return newText; - } - - function height(px, text) - { - return addMeta('font-size', px + 'px', text); - } - - function typeface(names, text) - { - return addMeta('font-family', toTypefaces(names), text); - } - - function monospace(text) - { - return addMeta('font-family', 'monospace', text); - } - - function italic(text) - { - return addMeta('font-style', 'italic', text); - } - - function bold(text) - { - return addMeta('font-weight', 'bold', text); - } - - function link(href, text) - { - return addMeta('href', href, text); - } - - function line(line, text) - { - return addMeta('text-decoration', toLine(line), text); - } - - function color(color, text) - { - return addMeta('color', toCss(color), text);; - } - - - // RENDER - - function renderHtml(text) - { - var tag = text.ctor; - if (tag === 'Text:Append') - { - return renderHtml(text._0) + renderHtml(text._1); - } - if (tag === 'Text:Text') - { - return properEscape(text._0); - } - if (tag === 'Text:Meta') - { - return renderMeta(text._0, renderHtml(text._1)); - } - } - - function renderMeta(metas, string) - { - var href = metas['href']; - if (href) - { - string = '<a href="' + href + '">' + string + '</a>'; - } - var styles = ''; - for (var key in metas) - { - if (key === 'href') - { - continue; - } - styles += key + ':' + metas[key] + ';'; - } - if (styles) - { - string = '<span style="' + styles + '">' + string + '</span>'; - } - return string; - } - - function properEscape(str) - { - if (str.length == 0) - { - return str; - } - str = str //.replace(/&/g, "&") - .replace(/"/g, '"') - .replace(/'/g, "'") - .replace(/</g, "<") - .replace(/>/g, ">"); - var arr = str.split('\n'); - for (var i = arr.length; i--; ) - { - arr[i] = makeSpaces(arr[i]); - } - return arr.join('<br/>'); - } - - function makeSpaces(s) - { - if (s.length == 0) - { - return s; - } - var arr = s.split(''); - if (arr[0] == ' ') - { - arr[0] = " " - } - for (var i = arr.length; --i; ) - { - if (arr[i][0] == ' ' && arr[i-1] == ' ') - { - arr[i-1] = arr[i-1] + arr[i]; - arr[i] = ''; - } - } - for (var i = arr.length; i--; ) - { - if (arr[i].length > 1 && arr[i][0] == ' ') - { - var spaces = arr[i].split(''); - for (var j = spaces.length - 2; j >= 0; j -= 2) - { - spaces[j] = ' '; - } - arr[i] = spaces.join(''); - } - } - arr = arr.join(''); - if (arr[arr.length-1] === " ") - { - return arr.slice(0,-1) + ' '; - } - return arr; - } - - - return localRuntime.Native.Text.values = { - fromString: fromString, - append: F2(append), - - height: F2(height), - italic: italic, - bold: bold, - line: F2(line), - monospace: monospace, - typeface: F2(typeface), - color: F2(color), - link: F2(link), - style: F2(style), - - toTypefaces: toTypefaces, - toLine: toLine, - renderHtml: renderHtml - }; -}; - -Elm.Native.Time = {}; -Elm.Native.Time.make = function(localRuntime) -{ - - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Time = localRuntime.Native.Time || {}; - if (localRuntime.Native.Time.values) - { - return localRuntime.Native.Time.values; - } - - var NS = Elm.Native.Signal.make(localRuntime); - var Maybe = Elm.Maybe.make(localRuntime); - - - // FRAMES PER SECOND - - function fpsWhen(desiredFPS, isOn) - { - var msPerFrame = 1000 / desiredFPS; - var ticker = NS.input('fps-' + desiredFPS, null); - - function notifyTicker() - { - localRuntime.notify(ticker.id, null); - } - - function firstArg(x, y) - { - return x; - } - - // input fires either when isOn changes, or when ticker fires. - // Its value is a tuple with the current timestamp, and the state of isOn - var input = NS.timestamp(A3(NS.map2, F2(firstArg), NS.dropRepeats(isOn), ticker)); - - var initialState = { - isOn: false, - time: localRuntime.timer.programStart, - delta: 0 - }; - - var timeoutId; - - function update(input,state) - { - var currentTime = input._0; - var isOn = input._1; - var wasOn = state.isOn; - var previousTime = state.time; - - if (isOn) - { - timeoutId = localRuntime.setTimeout(notifyTicker, msPerFrame); - } - else if (wasOn) - { - clearTimeout(timeoutId); - } - - return { - isOn: isOn, - time: currentTime, - delta: (isOn && !wasOn) ? 0 : currentTime - previousTime - }; - } - - return A2( - NS.map, - function(state) { return state.delta; }, - A3(NS.foldp, F2(update), update(input.value,initialState), input) - ); - } - - - // EVERY - - function every(t) - { - var ticker = NS.input('every-' + t, null); - function tellTime() - { - localRuntime.notify(ticker.id, null); - } - var clock = A2( NS.map, fst, NS.timestamp(ticker) ); - setInterval(tellTime, t); - return clock; - } - - - function fst(pair) - { - return pair._0; - } - - - function read(s) - { - var t = Date.parse(s); - return isNaN(t) ? Maybe.Nothing : Maybe.Just(t); - } - - return localRuntime.Native.Time.values = { - fpsWhen: F2(fpsWhen), - every: every, - toDate: function(t) { return new window.Date(t); }, - read: read - }; - -}; - -Elm.Native.Transform2D = {}; -Elm.Native.Transform2D.make = function(localRuntime) { - - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Transform2D = localRuntime.Native.Transform2D || {}; - if (localRuntime.Native.Transform2D.values) - { - return localRuntime.Native.Transform2D.values; - } - - var A; - if (typeof Float32Array === 'undefined') - { - A = function(arr) - { - this.length = arr.length; - this[0] = arr[0]; - this[1] = arr[1]; - this[2] = arr[2]; - this[3] = arr[3]; - this[4] = arr[4]; - this[5] = arr[5]; - }; - } - else - { - A = Float32Array; - } - - // layout of matrix in an array is - // - // | m11 m12 dx | - // | m21 m22 dy | - // | 0 0 1 | - // - // new A([ m11, m12, dx, m21, m22, dy ]) - - var identity = new A([1,0,0,0,1,0]); - function matrix(m11, m12, m21, m22, dx, dy) - { - return new A([m11, m12, dx, m21, m22, dy]); - } - - function rotation(t) - { - var c = Math.cos(t); - var s = Math.sin(t); - return new A([c, -s, 0, s, c, 0]); - } - - function rotate(t,m) - { - var c = Math.cos(t); - var s = Math.sin(t); - var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4]; - return new A([m11*c + m12*s, -m11*s + m12*c, m[2], - m21*c + m22*s, -m21*s + m22*c, m[5]]); - } - /* - function move(xy,m) { - var x = xy._0; - var y = xy._1; - var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4]; - return new A([m11, m12, m11*x + m12*y + m[2], - m21, m22, m21*x + m22*y + m[5]]); - } - function scale(s,m) { return new A([m[0]*s, m[1]*s, m[2], m[3]*s, m[4]*s, m[5]]); } - function scaleX(x,m) { return new A([m[0]*x, m[1], m[2], m[3]*x, m[4], m[5]]); } - function scaleY(y,m) { return new A([m[0], m[1]*y, m[2], m[3], m[4]*y, m[5]]); } - function reflectX(m) { return new A([-m[0], m[1], m[2], -m[3], m[4], m[5]]); } - function reflectY(m) { return new A([m[0], -m[1], m[2], m[3], -m[4], m[5]]); } - - function transform(m11, m21, m12, m22, mdx, mdy, n) { - var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5]; - return new A([m11*n11 + m12*n21, - m11*n12 + m12*n22, - m11*ndx + m12*ndy + mdx, - m21*n11 + m22*n21, - m21*n12 + m22*n22, - m21*ndx + m22*ndy + mdy]); - } - */ - function multiply(m, n) - { - var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4], mdx = m[2], mdy = m[5]; - var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5]; - return new A([m11*n11 + m12*n21, - m11*n12 + m12*n22, - m11*ndx + m12*ndy + mdx, - m21*n11 + m22*n21, - m21*n12 + m22*n22, - m21*ndx + m22*ndy + mdy]); - } - - return localRuntime.Native.Transform2D.values = { - identity:identity, - matrix:F6(matrix), - rotation:rotation, - multiply:F2(multiply) - /* - transform:F7(transform), - rotate:F2(rotate), - move:F2(move), - scale:F2(scale), - scaleX:F2(scaleX), - scaleY:F2(scaleY), - reflectX:reflectX, - reflectY:reflectY - */ - }; - -}; - -Elm.Native = Elm.Native || {}; -Elm.Native.Utils = {}; -Elm.Native.Utils.make = function(localRuntime) { - - localRuntime.Native = localRuntime.Native || {}; - localRuntime.Native.Utils = localRuntime.Native.Utils || {}; - if (localRuntime.Native.Utils.values) - { - return localRuntime.Native.Utils.values; - } - - function eq(l,r) - { - var stack = [{'x': l, 'y': r}] - while (stack.length > 0) - { - var front = stack.pop(); - var x = front.x; - var y = front.y; - if (x === y) - { - continue; - } - if (typeof x === "object") - { - var c = 0; - for (var i in x) - { - ++c; - if (i in y) - { - if (i !== 'ctor') - { - stack.push({ 'x': x[i], 'y': y[i] }); - } - } - else - { - return false; - } - } - if ('ctor' in x) - { - stack.push({'x': x.ctor, 'y': y.ctor}); - } - if (c !== Object.keys(y).length) - { - return false; - } - } - else if (typeof x === 'function') - { - throw new Error('Equality error: general function equality is ' + - 'undecidable, and therefore, unsupported'); - } - else - { - return false; - } - } - return true; - } - - // code in Generate/JavaScript.hs depends on the particular - // integer values assigned to LT, EQ, and GT - var LT = -1, EQ = 0, GT = 1, ord = ['LT','EQ','GT']; - - function compare(x,y) - { - return { - ctor: ord[cmp(x,y)+1] - }; - } - - function cmp(x,y) { - var ord; - if (typeof x !== 'object') - { - return x === y ? EQ : x < y ? LT : GT; - } - else if (x.isChar) - { - var a = x.toString(); - var b = y.toString(); - return a === b - ? EQ - : a < b - ? LT - : GT; - } - else if (x.ctor === "::" || x.ctor === "[]") - { - while (true) - { - if (x.ctor === "[]" && y.ctor === "[]") - { - return EQ; - } - if (x.ctor !== y.ctor) - { - return x.ctor === '[]' ? LT : GT; - } - ord = cmp(x._0, y._0); - if (ord !== EQ) - { - return ord; - } - x = x._1; - y = y._1; - } - } - else if (x.ctor.slice(0,6) === '_Tuple') - { - 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; - } - else - { - throw new Error('Comparison error: comparison is only defined on ints, ' + - 'floats, times, chars, strings, lists of comparable values, ' + - 'and tuples of comparable values.'); - } - } - - - var Tuple0 = { - ctor: "_Tuple0" - }; - - function Tuple2(x,y) - { - return { - ctor: "_Tuple2", - _0: x, - _1: y - }; - } - - function chr(c) - { - var x = new String(c); - x.isChar = true; - return x; - } - - function txt(str) - { - var t = new String(str); - t.text = true; - return t; - } - - var count = 0; - function guid(_) - { - return count++ - } - - function copy(oldRecord) - { - var newRecord = {}; - for (var key in oldRecord) - { - var value = key === '_' - ? copy(oldRecord._) - : oldRecord[key]; - newRecord[key] = value; - } - return newRecord; - } - - function remove(key, oldRecord) - { - var record = copy(oldRecord); - if (key in record._) - { - record[key] = record._[key][0]; - record._[key] = record._[key].slice(1); - if (record._[key].length === 0) - { - delete record._[key]; - } - } - else - { - delete record[key]; - } - return record; - } - - function replace(keyValuePairs, oldRecord) - { - var record = copy(oldRecord); - for (var i = keyValuePairs.length; i--; ) - { - var pair = keyValuePairs[i]; - record[pair[0]] = pair[1]; - } - return record; - } - - function insert(key, value, oldRecord) - { - var newRecord = copy(oldRecord); - if (key in newRecord) - { - var values = newRecord._[key]; - var copiedValues = values ? values.slice(0) : []; - newRecord._[key] = [newRecord[key]].concat(copiedValues); - } - newRecord[key] = value; - return newRecord; - } - - function getXY(e) - { - var posx = 0; - var posy = 0; - if (e.pageX || e.pageY) - { - posx = e.pageX; - posy = e.pageY; - } - else if (e.clientX || e.clientY) - { - posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; - posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; - } - - if (localRuntime.isEmbed()) - { - var rect = localRuntime.node.getBoundingClientRect(); - var relx = rect.left + document.body.scrollLeft + document.documentElement.scrollLeft; - var rely = rect.top + document.body.scrollTop + document.documentElement.scrollTop; - // TODO: figure out if there is a way to avoid rounding here - posx = posx - Math.round(relx) - localRuntime.node.clientLeft; - posy = posy - Math.round(rely) - localRuntime.node.clientTop; - } - return Tuple2(posx, posy); - } - - - //// 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 Text - if (xs.ctor.slice(0,5) === 'Text:') - { - return { - ctor: 'Text:Append', - _0: xs, - _1: 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; - } - - //// RUNTIME ERRORS //// - - function indent(lines) - { - return '\n' + lines.join('\n'); - } - - function badCase(moduleName, span) - { - var msg = indent([ - 'Non-exhaustive pattern match in case-expression.', - 'Make sure your patterns cover every case!' - ]); - throw new Error('Runtime error in module ' + moduleName + ' (' + span + ')' + msg); - } - - function badIf(moduleName, span) - { - var msg = indent([ - 'Non-exhaustive pattern match in multi-way-if expression.', - 'It is best to use \'otherwise\' as the last branch of multi-way-if.' - ]); - throw new Error('Runtime error in module ' + moduleName + ' (' + span + ')' + msg); - } - - - function badPort(expected, received) - { - var msg = indent([ - 'Expecting ' + expected + ' but was given ', - JSON.stringify(received) - ]); - throw new Error('Runtime error when sending values through a port.' + msg); - } - - - return localRuntime.Native.Utils.values = { - eq: eq, - cmp: cmp, - compare: F2(compare), - Tuple0: Tuple0, - Tuple2: Tuple2, - chr: chr, - txt: txt, - copy: copy, - remove: remove, - replace: replace, - insert: insert, - guid: guid, - getXY: getXY, - - Nil: Nil, - Cons: Cons, - append: F2(append), - - badCase: badCase, - badIf: badIf, - badPort: badPort - }; -}; - -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ -var createElement = require("./vdom/create-element.js") - -module.exports = createElement - -},{"./vdom/create-element.js":6}],2:[function(require,module,exports){ -(function (global){ -var topLevel = typeof global !== 'undefined' ? global : - typeof window !== 'undefined' ? window : {} -var minDoc = require('min-document'); - -if (typeof document !== 'undefined') { - module.exports = document; -} else { - var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4']; - - if (!doccy) { - doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc; - } - - module.exports = doccy; -} - -}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"min-document":24}],3:[function(require,module,exports){ -"use strict"; - -module.exports = function isObject(x) { - return typeof x === "object" && x !== null; -}; - -},{}],4:[function(require,module,exports){ -var nativeIsArray = Array.isArray -var toString = Object.prototype.toString - -module.exports = nativeIsArray || isArray - -function isArray(obj) { - return toString.call(obj) === "[object Array]" -} - -},{}],5:[function(require,module,exports){ -var isObject = require("is-object") -var isHook = require("../vnode/is-vhook.js") - -module.exports = applyProperties - -function applyProperties(node, props, previous) { - for (var propName in props) { - var propValue = props[propName] - - if (propValue === undefined) { - removeProperty(node, propName, propValue, previous); - } else if (isHook(propValue)) { - removeProperty(node, propName, propValue, previous) - if (propValue.hook) { - propValue.hook(node, - propName, - previous ? previous[propName] : undefined) - } - } else { - if (isObject(propValue)) { - patchObject(node, props, previous, propName, propValue); - } else { - node[propName] = propValue - } - } - } -} - -function removeProperty(node, propName, propValue, previous) { - if (previous) { - var previousValue = previous[propName] - - if (!isHook(previousValue)) { - if (propName === "attributes") { - for (var attrName in previousValue) { - node.removeAttribute(attrName) - } - } else if (propName === "style") { - for (var i in previousValue) { - node.style[i] = "" - } - } else if (typeof previousValue === "string") { - node[propName] = "" - } else { - node[propName] = null - } - } else if (previousValue.unhook) { - previousValue.unhook(node, propName, propValue) - } - } -} - -function patchObject(node, props, previous, propName, propValue) { - var previousValue = previous ? previous[propName] : undefined - - // Set attributes - if (propName === "attributes") { - for (var attrName in propValue) { - var attrValue = propValue[attrName] - - if (attrValue === undefined) { - node.removeAttribute(attrName) - } else { - node.setAttribute(attrName, attrValue) - } - } - - return - } - - if(previousValue && isObject(previousValue) && - getPrototype(previousValue) !== getPrototype(propValue)) { - node[propName] = propValue - return - } - - if (!isObject(node[propName])) { - node[propName] = {} - } - - var replacer = propName === "style" ? "" : undefined - - for (var k in propValue) { - var value = propValue[k] - node[propName][k] = (value === undefined) ? replacer : value - } -} - -function getPrototype(value) { - if (Object.getPrototypeOf) { - return Object.getPrototypeOf(value) - } else if (value.__proto__) { - return value.__proto__ - } else if (value.constructor) { - return value.constructor.prototype - } -} - -},{"../vnode/is-vhook.js":13,"is-object":3}],6:[function(require,module,exports){ -var document = require("global/document") - -var applyProperties = require("./apply-properties") - -var isVNode = require("../vnode/is-vnode.js") -var isVText = require("../vnode/is-vtext.js") -var isWidget = require("../vnode/is-widget.js") -var handleThunk = require("../vnode/handle-thunk.js") - -module.exports = createElement - -function createElement(vnode, opts) { - var doc = opts ? opts.document || document : document - var warn = opts ? opts.warn : null - - vnode = handleThunk(vnode).a - - if (isWidget(vnode)) { - return vnode.init() - } else if (isVText(vnode)) { - return doc.createTextNode(vnode.text) - } else if (!isVNode(vnode)) { - if (warn) { - warn("Item is not a valid virtual dom node", vnode) - } - return null - } - - var node = (vnode.namespace === null) ? - doc.createElement(vnode.tagName) : - doc.createElementNS(vnode.namespace, vnode.tagName) - - var props = vnode.properties - applyProperties(node, props) - - var children = vnode.children - - for (var i = 0; i < children.length; i++) { - var childNode = createElement(children[i], opts) - if (childNode) { - node.appendChild(childNode) - } - } - - return node -} - -},{"../vnode/handle-thunk.js":11,"../vnode/is-vnode.js":14,"../vnode/is-vtext.js":15,"../vnode/is-widget.js":16,"./apply-properties":5,"global/document":2}],7:[function(require,module,exports){ -// Maps a virtual DOM tree onto a real DOM tree in an efficient manner. -// We don't want to read all of the DOM nodes in the tree so we use -// the in-order tree indexing to eliminate recursion down certain branches. -// We only recurse into a DOM node if we know that it contains a child of -// interest. - -var noChild = {} - -module.exports = domIndex - -function domIndex(rootNode, tree, indices, nodes) { - if (!indices || indices.length === 0) { - return {} - } else { - indices.sort(ascending) - return recurse(rootNode, tree, indices, nodes, 0) - } -} - -function recurse(rootNode, tree, indices, nodes, rootIndex) { - nodes = nodes || {} - - - if (rootNode) { - if (indexInRange(indices, rootIndex, rootIndex)) { - nodes[rootIndex] = rootNode - } - - var vChildren = tree.children - - if (vChildren) { - - var childNodes = rootNode.childNodes - - for (var i = 0; i < tree.children.length; i++) { - rootIndex += 1 - - var vChild = vChildren[i] || noChild - var nextIndex = rootIndex + (vChild.count || 0) - - // skip recursion down the tree if there are no nodes down here - if (indexInRange(indices, rootIndex, nextIndex)) { - recurse(childNodes[i], vChild, indices, nodes, rootIndex) - } - - rootIndex = nextIndex - } - } - } - - return nodes -} - -// Binary search for an index in the interval [left, right] -function indexInRange(indices, left, right) { - if (indices.length === 0) { - return false - } - - var minIndex = 0 - var maxIndex = indices.length - 1 - var currentIndex - var currentItem - - while (minIndex <= maxIndex) { - currentIndex = ((maxIndex + minIndex) / 2) >> 0 - currentItem = indices[currentIndex] - - if (minIndex === maxIndex) { - return currentItem >= left && currentItem <= right - } else if (currentItem < left) { - minIndex = currentIndex + 1 - } else if (currentItem > right) { - maxIndex = currentIndex - 1 - } else { - return true - } - } - - return false; -} - -function ascending(a, b) { - return a > b ? 1 : -1 -} - -},{}],8:[function(require,module,exports){ -var applyProperties = require("./apply-properties") - -var isWidget = require("../vnode/is-widget.js") -var VPatch = require("../vnode/vpatch.js") - -var render = require("./create-element") -var updateWidget = require("./update-widget") - -module.exports = applyPatch - -function applyPatch(vpatch, domNode, renderOptions) { - var type = vpatch.type - var vNode = vpatch.vNode - var patch = vpatch.patch - - switch (type) { - case VPatch.REMOVE: - return removeNode(domNode, vNode) - case VPatch.INSERT: - return insertNode(domNode, patch, renderOptions) - case VPatch.VTEXT: - return stringPatch(domNode, vNode, patch, renderOptions) - case VPatch.WIDGET: - return widgetPatch(domNode, vNode, patch, renderOptions) - case VPatch.VNODE: - return vNodePatch(domNode, vNode, patch, renderOptions) - case VPatch.ORDER: - reorderChildren(domNode, patch) - return domNode - case VPatch.PROPS: - applyProperties(domNode, patch, vNode.properties) - return domNode - case VPatch.THUNK: - return replaceRoot(domNode, - renderOptions.patch(domNode, patch, renderOptions)) - default: - return domNode - } -} - -function removeNode(domNode, vNode) { - var parentNode = domNode.parentNode - - if (parentNode) { - parentNode.removeChild(domNode) - } - - destroyWidget(domNode, vNode); - - return null -} - -function insertNode(parentNode, vNode, renderOptions) { - var newNode = render(vNode, renderOptions) - - if (parentNode) { - parentNode.appendChild(newNode) - } - - return parentNode -} - -function stringPatch(domNode, leftVNode, vText, renderOptions) { - var newNode - - if (domNode.nodeType === 3) { - domNode.replaceData(0, domNode.length, vText.text) - newNode = domNode - } else { - var parentNode = domNode.parentNode - newNode = render(vText, renderOptions) - - if (parentNode && newNode !== domNode) { - parentNode.replaceChild(newNode, domNode) - } - } - - return newNode -} - -function widgetPatch(domNode, leftVNode, widget, renderOptions) { - var updating = updateWidget(leftVNode, widget) - var newNode - - if (updating) { - newNode = widget.update(leftVNode, domNode) || domNode - } else { - newNode = render(widget, renderOptions) - } - - var parentNode = domNode.parentNode - - if (parentNode && newNode !== domNode) { - parentNode.replaceChild(newNode, domNode) - } - - if (!updating) { - destroyWidget(domNode, leftVNode) - } - - return newNode -} - -function vNodePatch(domNode, leftVNode, vNode, renderOptions) { - var parentNode = domNode.parentNode - var newNode = render(vNode, renderOptions) - - if (parentNode && newNode !== domNode) { - parentNode.replaceChild(newNode, domNode) - } - - return newNode -} - -function destroyWidget(domNode, w) { - if (typeof w.destroy === "function" && isWidget(w)) { - w.destroy(domNode) - } -} - -function reorderChildren(domNode, moves) { - var childNodes = domNode.childNodes - var keyMap = {} - var node - var remove - var insert - - for (var i = 0; i < moves.removes.length; i++) { - remove = moves.removes[i] - node = childNodes[remove.from] - if (remove.key) { - keyMap[remove.key] = node - } - domNode.removeChild(node) - } - - var length = childNodes.length - for (var j = 0; j < moves.inserts.length; j++) { - insert = moves.inserts[j] - node = keyMap[insert.key] - // this is the weirdest bug i've ever seen in webkit - domNode.insertBefore(node, insert.to >= length++ ? null : childNodes[insert.to]) - } -} - -function replaceRoot(oldRoot, newRoot) { - if (oldRoot && newRoot && oldRoot !== newRoot && oldRoot.parentNode) { - oldRoot.parentNode.replaceChild(newRoot, oldRoot) - } - - return newRoot; -} - -},{"../vnode/is-widget.js":16,"../vnode/vpatch.js":19,"./apply-properties":5,"./create-element":6,"./update-widget":10}],9:[function(require,module,exports){ -var document = require("global/document") -var isArray = require("x-is-array") - -var domIndex = require("./dom-index") -var patchOp = require("./patch-op") -module.exports = patch - -function patch(rootNode, patches) { - return patchRecursive(rootNode, patches) -} - -function patchRecursive(rootNode, patches, renderOptions) { - var indices = patchIndices(patches) - - if (indices.length === 0) { - return rootNode - } - - var index = domIndex(rootNode, patches.a, indices) - var ownerDocument = rootNode.ownerDocument - - if (!renderOptions) { - renderOptions = { patch: patchRecursive } - if (ownerDocument !== document) { - renderOptions.document = ownerDocument - } - } - - for (var i = 0; i < indices.length; i++) { - var nodeIndex = indices[i] - rootNode = applyPatch(rootNode, - index[nodeIndex], - patches[nodeIndex], - renderOptions) - } - - return rootNode -} - -function applyPatch(rootNode, domNode, patchList, renderOptions) { - if (!domNode) { - return rootNode - } - - var newNode - - if (isArray(patchList)) { - for (var i = 0; i < patchList.length; i++) { - newNode = patchOp(patchList[i], domNode, renderOptions) - - if (domNode === rootNode) { - rootNode = newNode - } - } - } else { - newNode = patchOp(patchList, domNode, renderOptions) - - if (domNode === rootNode) { - rootNode = newNode - } - } - - return rootNode -} - -function patchIndices(patches) { - var indices = [] - - for (var key in patches) { - if (key !== "a") { - indices.push(Number(key)) - } - } - - return indices -} - -},{"./dom-index":7,"./patch-op":8,"global/document":2,"x-is-array":4}],10:[function(require,module,exports){ -var isWidget = require("../vnode/is-widget.js") - -module.exports = updateWidget - -function updateWidget(a, b) { - if (isWidget(a) && isWidget(b)) { - if ("name" in a && "name" in b) { - return a.id === b.id - } else { - return a.init === b.init - } - } - - return false -} - -},{"../vnode/is-widget.js":16}],11:[function(require,module,exports){ -var isVNode = require("./is-vnode") -var isVText = require("./is-vtext") -var isWidget = require("./is-widget") -var isThunk = require("./is-thunk") - -module.exports = handleThunk - -function handleThunk(a, b) { - var renderedA = a - var renderedB = b - - if (isThunk(b)) { - renderedB = renderThunk(b, a) - } - - if (isThunk(a)) { - renderedA = renderThunk(a, null) - } - - return { - a: renderedA, - b: renderedB - } -} - -function renderThunk(thunk, previous) { - var renderedThunk = thunk.vnode - - if (!renderedThunk) { - renderedThunk = thunk.vnode = thunk.render(previous) - } - - if (!(isVNode(renderedThunk) || - isVText(renderedThunk) || - isWidget(renderedThunk))) { - throw new Error("thunk did not return a valid node"); - } - - return renderedThunk -} - -},{"./is-thunk":12,"./is-vnode":14,"./is-vtext":15,"./is-widget":16}],12:[function(require,module,exports){ -module.exports = isThunk
-
-function isThunk(t) {
- return t && t.type === "Thunk"
-}
- -},{}],13:[function(require,module,exports){ -module.exports = isHook - -function isHook(hook) { - return hook && - (typeof hook.hook === "function" && !hook.hasOwnProperty("hook") || - typeof hook.unhook === "function" && !hook.hasOwnProperty("unhook")) -} - -},{}],14:[function(require,module,exports){ -var version = require("./version") - -module.exports = isVirtualNode - -function isVirtualNode(x) { - return x && x.type === "VirtualNode" && x.version === version -} - -},{"./version":17}],15:[function(require,module,exports){ -var version = require("./version") - -module.exports = isVirtualText - -function isVirtualText(x) { - return x && x.type === "VirtualText" && x.version === version -} - -},{"./version":17}],16:[function(require,module,exports){ -module.exports = isWidget - -function isWidget(w) { - return w && w.type === "Widget" -} - -},{}],17:[function(require,module,exports){ -module.exports = "2" - -},{}],18:[function(require,module,exports){ -var version = require("./version") -var isVNode = require("./is-vnode") -var isWidget = require("./is-widget") -var isThunk = require("./is-thunk") -var isVHook = require("./is-vhook") - -module.exports = VirtualNode - -var noProperties = {} -var noChildren = [] - -function VirtualNode(tagName, properties, children, key, namespace) { - this.tagName = tagName - this.properties = properties || noProperties - this.children = children || noChildren - this.key = key != null ? String(key) : undefined - this.namespace = (typeof namespace === "string") ? namespace : null - - var count = (children && children.length) || 0 - var descendants = 0 - var hasWidgets = false - var hasThunks = false - var descendantHooks = false - var hooks - - for (var propName in properties) { - if (properties.hasOwnProperty(propName)) { - var property = properties[propName] - if (isVHook(property) && property.unhook) { - if (!hooks) { - hooks = {} - } - - hooks[propName] = property - } - } - } - - for (var i = 0; i < count; i++) { - var child = children[i] - if (isVNode(child)) { - descendants += child.count || 0 - - if (!hasWidgets && child.hasWidgets) { - hasWidgets = true - } - - if (!hasThunks && child.hasThunks) { - hasThunks = true - } - - if (!descendantHooks && (child.hooks || child.descendantHooks)) { - descendantHooks = true - } - } else if (!hasWidgets && isWidget(child)) { - if (typeof child.destroy === "function") { - hasWidgets = true - } - } else if (!hasThunks && isThunk(child)) { - hasThunks = true; - } - } - - this.count = count + descendants - this.hasWidgets = hasWidgets - this.hasThunks = hasThunks - this.hooks = hooks - this.descendantHooks = descendantHooks -} - -VirtualNode.prototype.version = version -VirtualNode.prototype.type = "VirtualNode" - -},{"./is-thunk":12,"./is-vhook":13,"./is-vnode":14,"./is-widget":16,"./version":17}],19:[function(require,module,exports){ -var version = require("./version") - -VirtualPatch.NONE = 0 -VirtualPatch.VTEXT = 1 -VirtualPatch.VNODE = 2 -VirtualPatch.WIDGET = 3 -VirtualPatch.PROPS = 4 -VirtualPatch.ORDER = 5 -VirtualPatch.INSERT = 6 -VirtualPatch.REMOVE = 7 -VirtualPatch.THUNK = 8 - -module.exports = VirtualPatch - -function VirtualPatch(type, vNode, patch) { - this.type = Number(type) - this.vNode = vNode - this.patch = patch -} - -VirtualPatch.prototype.version = version -VirtualPatch.prototype.type = "VirtualPatch" - -},{"./version":17}],20:[function(require,module,exports){ -var version = require("./version") - -module.exports = VirtualText - -function VirtualText(text) { - this.text = String(text) -} - -VirtualText.prototype.version = version -VirtualText.prototype.type = "VirtualText" - -},{"./version":17}],21:[function(require,module,exports){ -var isObject = require("is-object") -var isHook = require("../vnode/is-vhook") - -module.exports = diffProps - -function diffProps(a, b) { - var diff - - for (var aKey in a) { - if (!(aKey in b)) { - diff = diff || {} - diff[aKey] = undefined - } - - var aValue = a[aKey] - var bValue = b[aKey] - - if (aValue === bValue) { - continue - } else if (isObject(aValue) && isObject(bValue)) { - if (getPrototype(bValue) !== getPrototype(aValue)) { - diff = diff || {} - diff[aKey] = bValue - } else if (isHook(bValue)) { - diff = diff || {} - diff[aKey] = bValue - } else { - var objectDiff = diffProps(aValue, bValue) - if (objectDiff) { - diff = diff || {} - diff[aKey] = objectDiff - } - } - } else { - diff = diff || {} - diff[aKey] = bValue - } - } - - for (var bKey in b) { - if (!(bKey in a)) { - diff = diff || {} - diff[bKey] = b[bKey] - } - } - - return diff -} - -function getPrototype(value) { - if (Object.getPrototypeOf) { - return Object.getPrototypeOf(value) - } else if (value.__proto__) { - return value.__proto__ - } else if (value.constructor) { - return value.constructor.prototype - } -} - -},{"../vnode/is-vhook":13,"is-object":3}],22:[function(require,module,exports){ -var isArray = require("x-is-array") - -var VPatch = require("../vnode/vpatch") -var isVNode = require("../vnode/is-vnode") -var isVText = require("../vnode/is-vtext") -var isWidget = require("../vnode/is-widget") -var isThunk = require("../vnode/is-thunk") -var handleThunk = require("../vnode/handle-thunk") - -var diffProps = require("./diff-props") - -module.exports = diff - -function diff(a, b) { - var patch = { a: a } - walk(a, b, patch, 0) - return patch -} - -function walk(a, b, patch, index) { - if (a === b) { - return - } - - var apply = patch[index] - var applyClear = false - - if (isThunk(a) || isThunk(b)) { - thunks(a, b, patch, index) - } else if (b == null) { - - // If a is a widget we will add a remove patch for it - // Otherwise any child widgets/hooks must be destroyed. - // This prevents adding two remove patches for a widget. - if (!isWidget(a)) { - clearState(a, patch, index) - apply = patch[index] - } - - apply = appendPatch(apply, new VPatch(VPatch.REMOVE, a, b)) - } else if (isVNode(b)) { - if (isVNode(a)) { - if (a.tagName === b.tagName && - a.namespace === b.namespace && - a.key === b.key) { - var propsPatch = diffProps(a.properties, b.properties) - if (propsPatch) { - apply = appendPatch(apply, - new VPatch(VPatch.PROPS, a, propsPatch)) - } - apply = diffChildren(a, b, patch, apply, index) - } else { - apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b)) - applyClear = true - } - } else { - apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b)) - applyClear = true - } - } else if (isVText(b)) { - if (!isVText(a)) { - apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b)) - applyClear = true - } else if (a.text !== b.text) { - apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b)) - } - } else if (isWidget(b)) { - if (!isWidget(a)) { - applyClear = true - } - - apply = appendPatch(apply, new VPatch(VPatch.WIDGET, a, b)) - } - - if (apply) { - patch[index] = apply - } - - if (applyClear) { - clearState(a, patch, index) - } -} - -function diffChildren(a, b, patch, apply, index) { - var aChildren = a.children - var orderedSet = reorder(aChildren, b.children) - var bChildren = orderedSet.children - - var aLen = aChildren.length - var bLen = bChildren.length - var len = aLen > bLen ? aLen : bLen - - for (var i = 0; i < len; i++) { - var leftNode = aChildren[i] - var rightNode = bChildren[i] - index += 1 - - if (!leftNode) { - if (rightNode) { - // Excess nodes in b need to be added - apply = appendPatch(apply, - new VPatch(VPatch.INSERT, null, rightNode)) - } - } else { - walk(leftNode, rightNode, patch, index) - } - - if (isVNode(leftNode) && leftNode.count) { - index += leftNode.count - } - } - - if (orderedSet.moves) { - // Reorder nodes last - apply = appendPatch(apply, new VPatch( - VPatch.ORDER, - a, - orderedSet.moves - )) - } - - return apply -} - -function clearState(vNode, patch, index) { - // TODO: Make this a single walk, not two - unhook(vNode, patch, index) - destroyWidgets(vNode, patch, index) -} - -// Patch records for all destroyed widgets must be added because we need -// a DOM node reference for the destroy function -function destroyWidgets(vNode, patch, index) { - if (isWidget(vNode)) { - if (typeof vNode.destroy === "function") { - patch[index] = appendPatch( - patch[index], - new VPatch(VPatch.REMOVE, vNode, null) - ) - } - } else if (isVNode(vNode) && (vNode.hasWidgets || vNode.hasThunks)) { - var children = vNode.children - var len = children.length - for (var i = 0; i < len; i++) { - var child = children[i] - index += 1 - - destroyWidgets(child, patch, index) - - if (isVNode(child) && child.count) { - index += child.count - } - } - } else if (isThunk(vNode)) { - thunks(vNode, null, patch, index) - } -} - -// Create a sub-patch for thunks -function thunks(a, b, patch, index) { - var nodes = handleThunk(a, b) - var thunkPatch = diff(nodes.a, nodes.b) - if (hasPatches(thunkPatch)) { - patch[index] = new VPatch(VPatch.THUNK, null, thunkPatch) - } -} - -function hasPatches(patch) { - for (var index in patch) { - if (index !== "a") { - return true - } - } - - return false -} - -// Execute hooks when two nodes are identical -function unhook(vNode, patch, index) { - if (isVNode(vNode)) { - if (vNode.hooks) { - patch[index] = appendPatch( - patch[index], - new VPatch( - VPatch.PROPS, - vNode, - undefinedKeys(vNode.hooks) - ) - ) - } - - if (vNode.descendantHooks || vNode.hasThunks) { - var children = vNode.children - var len = children.length - for (var i = 0; i < len; i++) { - var child = children[i] - index += 1 - - unhook(child, patch, index) - - if (isVNode(child) && child.count) { - index += child.count - } - } - } - } else if (isThunk(vNode)) { - thunks(vNode, null, patch, index) - } -} - -function undefinedKeys(obj) { - var result = {} - - for (var key in obj) { - result[key] = undefined - } - - return result -} - -// List diff, naive left to right reordering -function reorder(aChildren, bChildren) { - // O(M) time, O(M) memory - var bChildIndex = keyIndex(bChildren) - var bKeys = bChildIndex.keys - var bFree = bChildIndex.free - - if (bFree.length === bChildren.length) { - return { - children: bChildren, - moves: null - } - } - - // O(N) time, O(N) memory - var aChildIndex = keyIndex(aChildren) - var aKeys = aChildIndex.keys - var aFree = aChildIndex.free - - if (aFree.length === aChildren.length) { - return { - children: bChildren, - moves: null - } - } - - // O(MAX(N, M)) memory - var newChildren = [] - - var freeIndex = 0 - var freeCount = bFree.length - var deletedItems = 0 - - // Iterate through a and match a node in b - // O(N) time, - for (var i = 0 ; i < aChildren.length; i++) { - var aItem = aChildren[i] - var itemIndex - - if (aItem.key) { - if (bKeys.hasOwnProperty(aItem.key)) { - // Match up the old keys - itemIndex = bKeys[aItem.key] - newChildren.push(bChildren[itemIndex]) - - } else { - // Remove old keyed items - itemIndex = i - deletedItems++ - newChildren.push(null) - } - } else { - // Match the item in a with the next free item in b - if (freeIndex < freeCount) { - itemIndex = bFree[freeIndex++] - newChildren.push(bChildren[itemIndex]) - } else { - // There are no free items in b to match with - // the free items in a, so the extra free nodes - // are deleted. - itemIndex = i - deletedItems++ - newChildren.push(null) - } - } - } - - var lastFreeIndex = freeIndex >= bFree.length ? - bChildren.length : - bFree[freeIndex] - - // Iterate through b and append any new keys - // O(M) time - for (var j = 0; j < bChildren.length; j++) { - var newItem = bChildren[j] - - if (newItem.key) { - if (!aKeys.hasOwnProperty(newItem.key)) { - // Add any new keyed items - // We are adding new items to the end and then sorting them - // in place. In future we should insert new items in place. - newChildren.push(newItem) - } - } else if (j >= lastFreeIndex) { - // Add any leftover non-keyed items - newChildren.push(newItem) - } - } - - var simulate = newChildren.slice() - var simulateIndex = 0 - var removes = [] - var inserts = [] - var simulateItem - - for (var k = 0; k < bChildren.length;) { - var wantedItem = bChildren[k] - simulateItem = simulate[simulateIndex] - - // remove items - while (simulateItem === null && simulate.length) { - removes.push(remove(simulate, simulateIndex, null)) - simulateItem = simulate[simulateIndex] - } - - if (!simulateItem || simulateItem.key !== wantedItem.key) { - // if we need a key in this position... - if (wantedItem.key) { - if (simulateItem && simulateItem.key) { - // if an insert doesn't put this key in place, it needs to move - if (bKeys[simulateItem.key] !== k + 1) { - removes.push(remove(simulate, simulateIndex, simulateItem.key)) - simulateItem = simulate[simulateIndex] - // if the remove didn't put the wanted item in place, we need to insert it - if (!simulateItem || simulateItem.key !== wantedItem.key) { - inserts.push({key: wantedItem.key, to: k}) - } - // items are matching, so skip ahead - else { - simulateIndex++ - } - } - else { - inserts.push({key: wantedItem.key, to: k}) - } - } - else { - inserts.push({key: wantedItem.key, to: k}) - } - k++ - } - // a key in simulate has no matching wanted key, remove it - else if (simulateItem && simulateItem.key) { - removes.push(remove(simulate, simulateIndex, simulateItem.key)) - } - } - else { - simulateIndex++ - k++ - } - } - - // remove all the remaining nodes from simulate - while(simulateIndex < simulate.length) { - simulateItem = simulate[simulateIndex] - removes.push(remove(simulate, simulateIndex, simulateItem && simulateItem.key)) - } - - // If the only moves we have are deletes then we can just - // let the delete patch remove these items. - if (removes.length === deletedItems && !inserts.length) { - return { - children: newChildren, - moves: null - } - } - - return { - children: newChildren, - moves: { - removes: removes, - inserts: inserts - } - } -} - -function remove(arr, index, key) { - arr.splice(index, 1) - - return { - from: index, - key: key - } -} - -function keyIndex(children) { - var keys = {} - var free = [] - var length = children.length - - for (var i = 0; i < length; i++) { - var child = children[i] - - if (child.key) { - keys[child.key] = i - } else { - free.push(i) - } - } - - return { - keys: keys, // A hash of key name to index - free: free, // An array of unkeyed item indices - } -} - -function appendPatch(apply, patch) { - if (apply) { - if (isArray(apply)) { - apply.push(patch) - } else { - apply = [apply, patch] - } - - return apply - } else { - return patch - } -} - -},{"../vnode/handle-thunk":11,"../vnode/is-thunk":12,"../vnode/is-vnode":14,"../vnode/is-vtext":15,"../vnode/is-widget":16,"../vnode/vpatch":19,"./diff-props":21,"x-is-array":4}],23:[function(require,module,exports){ -var VNode = require('virtual-dom/vnode/vnode'); -var VText = require('virtual-dom/vnode/vtext'); -var diff = require('virtual-dom/vtree/diff'); -var patch = require('virtual-dom/vdom/patch'); -var createElement = require('virtual-dom/create-element'); -var isHook = require("virtual-dom/vnode/is-vhook"); - - -Elm.Native.VirtualDom = {}; -Elm.Native.VirtualDom.make = function(elm) -{ - elm.Native = elm.Native || {}; - elm.Native.VirtualDom = elm.Native.VirtualDom || {}; - if (elm.Native.VirtualDom.values) - { - return elm.Native.VirtualDom.values; - } - - var Element = Elm.Native.Graphics.Element.make(elm); - var Json = Elm.Native.Json.make(elm); - var List = Elm.Native.List.make(elm); - var Signal = Elm.Native.Signal.make(elm); - var Utils = Elm.Native.Utils.make(elm); - - var ATTRIBUTE_KEY = 'UniqueNameThatOthersAreVeryUnlikelyToUse'; - - function listToProperties(list) - { - var object = {}; - while (list.ctor !== '[]') - { - var entry = list._0; - if (entry.key === ATTRIBUTE_KEY) - { - object.attributes = object.attributes || {}; - object.attributes[entry.value.attrKey] = entry.value.attrValue; - } - else - { - object[entry.key] = entry.value; - } - list = list._1; - } - return object; - } - - function node(name) - { - return F2(function(propertyList, contents) { - return makeNode(name, propertyList, contents); - }); - } - - function makeNode(name, propertyList, contents) - { - var props = listToProperties(propertyList); - - var key, namespace; - // support keys - if (props.key !== undefined) - { - key = props.key; - props.key = undefined; - } - - // support namespace - if (props.namespace !== undefined) - { - namespace = props.namespace; - props.namespace = undefined; - } - - // ensure that setting text of an input does not move the cursor - var useSoftSet = - name === 'input' - && props.value !== undefined - && !isHook(props.value); - - if (useSoftSet) - { - props.value = SoftSetHook(props.value); - } - - return new VNode(name, props, List.toArray(contents), key, namespace); - } - - function property(key, value) - { - return { - key: key, - value: value - }; - } - - function attribute(key, value) - { - return { - key: ATTRIBUTE_KEY, - value: { - attrKey: key, - attrValue: value - } - }; - } - - function on(name, options, decoder, createMessage) - { - function eventHandler(event) - { - var value = A2(Json.runDecoderValue, decoder, event); - if (value.ctor === 'Ok') - { - if (options.stopPropagation) - { - event.stopPropagation(); - } - if (options.preventDefault) - { - event.preventDefault(); - } - Signal.sendMessage(createMessage(value._0)); - } - } - return property('on' + name, eventHandler); - } - - function SoftSetHook(value) - { - if (!(this instanceof SoftSetHook)) - { - return new SoftSetHook(value); - } - - this.value = value; - } - - SoftSetHook.prototype.hook = function (node, propertyName) - { - if (node[propertyName] !== this.value) - { - node[propertyName] = this.value; - } - }; - - function text(string) - { - return new VText(string); - } - - function ElementWidget(element) - { - this.element = element; - } - - ElementWidget.prototype.type = "Widget"; - - ElementWidget.prototype.init = function init() - { - return Element.render(this.element); - }; - - ElementWidget.prototype.update = function update(previous, node) - { - return Element.update(node, previous.element, this.element); - }; - - function fromElement(element) - { - return new ElementWidget(element); - } - - function toElement(width, height, html) - { - return A3(Element.newElement, width, height, { - ctor: 'Custom', - type: 'evancz/elm-html', - render: render, - update: update, - model: html - }); - } - - function render(model) - { - var element = Element.createNode('div'); - element.appendChild(createElement(model)); - return element; - } - - function update(node, oldModel, newModel) - { - updateAndReplace(node.firstChild, oldModel, newModel); - return node; - } - - function updateAndReplace(node, oldModel, newModel) - { - var patches = diff(oldModel, newModel); - var newNode = patch(node, patches); - return newNode; - } - - function lazyRef(fn, a) - { - function thunk() - { - return fn(a); - } - return new Thunk(fn, [a], thunk); - } - - function lazyRef2(fn, a, b) - { - function thunk() - { - return A2(fn, a, b); - } - return new Thunk(fn, [a,b], thunk); - } - - function lazyRef3(fn, a, b, c) - { - function thunk() - { - return A3(fn, a, b, c); - } - return new Thunk(fn, [a,b,c], thunk); - } - - function Thunk(fn, args, thunk) - { - this.fn = fn; - this.args = args; - this.vnode = null; - this.key = undefined; - this.thunk = thunk; - } - - Thunk.prototype.type = "Thunk"; - Thunk.prototype.update = updateThunk; - Thunk.prototype.render = renderThunk; - - function shouldUpdate(current, previous) - { - if (current.fn !== previous.fn) - { - return true; - } - - // if it's the same function, we know the number of args must match - var cargs = current.args; - var pargs = previous.args; - - for (var i = cargs.length; i--; ) - { - if (cargs[i] !== pargs[i]) - { - return true; - } - } - - return false; - } - - function updateThunk(previous, domNode) - { - if (!shouldUpdate(this, previous)) - { - this.vnode = previous.vnode; - return; - } - - if (!this.vnode) - { - this.vnode = this.thunk(); - } - - var patches = diff(previous.vnode, this.vnode); - patch(domNode, patches); - } - - function renderThunk() - { - return this.thunk(); - } - - return Elm.Native.VirtualDom.values = { - node: node, - text: text, - on: F4(on), - - property: F2(property), - attribute: F2(attribute), - - lazy: F2(lazyRef), - lazy2: F3(lazyRef2), - lazy3: F4(lazyRef3), - - toElement: F3(toElement), - fromElement: fromElement, - - render: createElement, - updateAndReplace: updateAndReplace - }; -}; - -},{"virtual-dom/create-element":1,"virtual-dom/vdom/patch":9,"virtual-dom/vnode/is-vhook":13,"virtual-dom/vnode/vnode":18,"virtual-dom/vnode/vtext":20,"virtual-dom/vtree/diff":22}],24:[function(require,module,exports){ - -},{}]},{},[23]); - -Elm.Persona = Elm.Persona || {}; -Elm.Persona.make = function (_elm) { - "use strict"; - _elm.Persona = _elm.Persona || {}; - if (_elm.Persona.values) - return _elm.Persona.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Persona", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var toString = function (operation) { - switch (operation.ctor) - {case "SignIn": return "SignIn"; - case "SignOut": - return "SignOut";} - return "NoOp"; - }; - var SignOut = {ctor: "SignOut"}; - var SignIn = {ctor: "SignIn"}; - var NoOp = {ctor: "NoOp"}; - var operations = $Signal.mailbox(NoOp); - var fromString = function (str) { - switch (str) - {case "SignIn": return SignIn; - case "SignOut": return SignOut;} - return NoOp; - }; - _elm.Persona.values = {_op: _op - ,operations: operations - ,fromString: fromString - ,toString: toString - ,NoOp: NoOp - ,SignIn: SignIn - ,SignOut: SignOut}; - return _elm.Persona.values; -}; -Elm.Reads = Elm.Reads || {}; -Elm.Reads.make = function (_elm) { - "use strict"; - _elm.Reads = _elm.Reads || {}; - if (_elm.Reads.values) - return _elm.Reads.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Reads", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Native$Reads = Elm.Native.Reads.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var readInt = $Native$Reads.readInt; - _elm.Reads.values = {_op: _op - ,readInt: readInt}; - return _elm.Reads.values; -}; -Elm.Result = Elm.Result || {}; -Elm.Result.make = function (_elm) { - "use strict"; - _elm.Result = _elm.Result || {}; - if (_elm.Result.values) - return _elm.Result.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Result", - $Maybe = Elm.Maybe.make(_elm); - var toMaybe = function (result) { - switch (result.ctor) - {case "Err": - return $Maybe.Nothing; - case "Ok": - return $Maybe.Just(result._0);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var Err = function (a) { - return {ctor: "Err",_0: a}; - }; - var andThen = F2(function (result, - callback) { - switch (result.ctor) - {case "Err": - return Err(result._0); - case "Ok": - return callback(result._0);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var Ok = function (a) { - return {ctor: "Ok",_0: a}; - }; - var map = F2(function (func, - ra) { - switch (ra.ctor) - {case "Err": return Err(ra._0); - case "Ok": - return Ok(func(ra._0));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var map2 = F3(function (func, - ra, - rb) { - var _v9 = {ctor: "_Tuple2" - ,_0: ra - ,_1: rb}; - switch (_v9.ctor) - {case "_Tuple2": - switch (_v9._0.ctor) - {case "Err": - return Err(_v9._0._0); - case "Ok": switch (_v9._1.ctor) - {case "Ok": return Ok(A2(func, - _v9._0._0, - _v9._1._0));} - break;} - switch (_v9._1.ctor) - {case "Err": - return Err(_v9._1._0);} - break;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var map3 = F4(function (func, - ra, - rb, - rc) { - var _v16 = {ctor: "_Tuple3" - ,_0: ra - ,_1: rb - ,_2: rc}; - switch (_v16.ctor) - {case "_Tuple3": - switch (_v16._0.ctor) - {case "Err": - return Err(_v16._0._0); - case "Ok": switch (_v16._1.ctor) - {case "Ok": - switch (_v16._2.ctor) - {case "Ok": return Ok(A3(func, - _v16._0._0, - _v16._1._0, - _v16._2._0));} - break;} - break;} - switch (_v16._1.ctor) - {case "Err": - return Err(_v16._1._0);} - switch (_v16._2.ctor) - {case "Err": - return Err(_v16._2._0);} - break;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var map4 = F5(function (func, - ra, - rb, - rc, - rd) { - var _v26 = {ctor: "_Tuple4" - ,_0: ra - ,_1: rb - ,_2: rc - ,_3: rd}; - switch (_v26.ctor) - {case "_Tuple4": - switch (_v26._0.ctor) - {case "Err": - return Err(_v26._0._0); - case "Ok": switch (_v26._1.ctor) - {case "Ok": - switch (_v26._2.ctor) - {case "Ok": - switch (_v26._3.ctor) - {case "Ok": return Ok(A4(func, - _v26._0._0, - _v26._1._0, - _v26._2._0, - _v26._3._0));} - break;} - break;} - break;} - switch (_v26._1.ctor) - {case "Err": - return Err(_v26._1._0);} - switch (_v26._2.ctor) - {case "Err": - return Err(_v26._2._0);} - switch (_v26._3.ctor) - {case "Err": - return Err(_v26._3._0);} - break;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var map5 = F6(function (func, - ra, - rb, - rc, - rd, - re) { - var _v39 = {ctor: "_Tuple5" - ,_0: ra - ,_1: rb - ,_2: rc - ,_3: rd - ,_4: re}; - switch (_v39.ctor) - {case "_Tuple5": - switch (_v39._0.ctor) - {case "Err": - return Err(_v39._0._0); - case "Ok": switch (_v39._1.ctor) - {case "Ok": - switch (_v39._2.ctor) - {case "Ok": - switch (_v39._3.ctor) - {case "Ok": - switch (_v39._4.ctor) - {case "Ok": return Ok(A5(func, - _v39._0._0, - _v39._1._0, - _v39._2._0, - _v39._3._0, - _v39._4._0));} - break;} - break;} - break;} - break;} - switch (_v39._1.ctor) - {case "Err": - return Err(_v39._1._0);} - switch (_v39._2.ctor) - {case "Err": - return Err(_v39._2._0);} - switch (_v39._3.ctor) - {case "Err": - return Err(_v39._3._0);} - switch (_v39._4.ctor) - {case "Err": - return Err(_v39._4._0);} - break;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var formatError = F2(function (f, - result) { - switch (result.ctor) - {case "Err": - return Err(f(result._0)); - case "Ok": - return Ok(result._0);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var fromMaybe = F2(function (err, - maybe) { - switch (maybe.ctor) - {case "Just": - return Ok(maybe._0); - case "Nothing": - return Err(err);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - _elm.Result.values = {_op: _op - ,map: map - ,map2: map2 - ,map3: map3 - ,map4: map4 - ,map5: map5 - ,andThen: andThen - ,toMaybe: toMaybe - ,fromMaybe: fromMaybe - ,formatError: formatError - ,Ok: Ok - ,Err: Err}; - return _elm.Result.values; -}; -Elm.ServerCommunication = Elm.ServerCommunication || {}; -Elm.ServerCommunication.make = function (_elm) { - "use strict"; - _elm.ServerCommunication = _elm.ServerCommunication || {}; - if (_elm.ServerCommunication.values) - return _elm.ServerCommunication.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "ServerCommunication", - $Basics = Elm.Basics.make(_elm), - $Http = Elm.Http.make(_elm), - $InitViewAction = Elm.InitViewAction.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Payment = Elm.Model.Payment.make(_elm), - $Model$User = Elm.Model.User.make(_elm), - $Model$View$LoggedIn$Add = Elm.Model.View.LoggedIn.Add.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $SimpleHTTP = Elm.SimpleHTTP.make(_elm), - $Task = Elm.Task.make(_elm), - $Time = Elm.Time.make(_elm), - $Update = Elm.Update.make(_elm), - $Update$LoggedIn = Elm.Update.LoggedIn.make(_elm), - $Update$LoggedIn$Account = Elm.Update.LoggedIn.Account.make(_elm), - $Update$LoggedIn$Monthly = Elm.Update.LoggedIn.Monthly.make(_elm); - var deletePaymentURL = function (id) { - return A2($Basics._op["++"], - "payment/delete?id=", - $Basics.toString(id)); - }; - var addPaymentURL = F3(function (name, - cost, - frequency) { - return A2($Basics._op["++"], - "/payment/add?name=", - A2($Basics._op["++"], - name, - A2($Basics._op["++"], - "&cost=", - A2($Basics._op["++"], - $Basics.toString(cost), - A2($Basics._op["++"], - "&frequency=", - $Basics.toString(frequency)))))); - }); - var getPaymentsAtPage = function (page) { - return A2($Http.get, - $Model$Payment.paymentsDecoder, - A2($Basics._op["++"], - "payments?page=", - A2($Basics._op["++"], - $Basics.toString(page), - A2($Basics._op["++"], - "&perPage=", - $Basics.toString($Model$Payment.perPage))))); - }; - var sendRequest = function (communication) { - switch (communication.ctor) - {case "AddMonthlyPayment": - return $Task.map(function (id) { - return $Update.UpdateLoggedIn(A3($Update$LoggedIn.AddMonthlyPayment, - id, - communication._0, - communication._1)); - })(A2($Basics.flip, - $Task.andThen, - $SimpleHTTP.decodeHttpValue(A2($Json$Decode._op[":="], - "id", - $Model$Payment.paymentIdDecoder)))($SimpleHTTP.post(A3(addPaymentURL, - communication._0, - communication._1, - $Model$View$LoggedIn$Add.Monthly)))); - case "AddPayment": - return $Task.map(function (payments) { - return $Update.UpdateLoggedIn(A4($Update$LoggedIn.AddPayment, - communication._0, - communication._1, - communication._2, - payments)); - })(A2($Basics.flip, - $Task.andThen, - $Basics.always(getPaymentsAtPage(1)))($SimpleHTTP.post(A3(addPaymentURL, - communication._1, - communication._2, - $Model$View$LoggedIn$Add.Punctual)))); - case "DeleteMonthlyPayment": - return $Task.map($Basics.always($Update.UpdateLoggedIn($Update$LoggedIn.UpdateMonthly($Update$LoggedIn$Monthly.DeletePayment(communication._0)))))($SimpleHTTP.post(deletePaymentURL(communication._0))); - case "DeletePayment": - return $Task.map(function (payments) { - return $Update.UpdateLoggedIn(A2($Update$LoggedIn.DeletePayment, - communication._0, - payments)); - })(A2($Basics.flip, - $Task.andThen, - $Basics.always(getPaymentsAtPage(communication._1)))($SimpleHTTP.post(deletePaymentURL(communication._0.id)))); - case "NoCommunication": - return $Task.succeed($Update.NoOp); - case "SetIncome": - return $Task.map($Basics.always($Update.UpdateLoggedIn($Update$LoggedIn.UpdateAccount(A2($Update$LoggedIn$Account.UpdateIncome, - communication._0, - communication._1)))))($SimpleHTTP.post(A2($Basics._op["++"], - "/income?amount=", - $Basics.toString(communication._1)))); - case "SignIn": - return A2($Basics.flip, - $Task.andThen, - $Basics.always($InitViewAction.initViewAction))($SimpleHTTP.post(A2($Basics._op["++"], - "/signIn?assertion=", - communication._0))); - case "SignOut": - return $Task.map($Basics.always($Update.GoSignInView))($SimpleHTTP.post("/signOut")); - case "UpdatePage": - return A2($Basics.flip, - $Task.andThen, - function ($) { - return $Task.succeed($Update.UpdateLoggedIn($Update$LoggedIn.UpdatePage(communication._0)($))); - })(getPaymentsAtPage(communication._0));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var SignOut = {ctor: "SignOut"}; - var UpdatePage = function (a) { - return {ctor: "UpdatePage" - ,_0: a}; - }; - var DeleteMonthlyPayment = function (a) { - return {ctor: "DeleteMonthlyPayment" - ,_0: a}; - }; - var DeletePayment = F2(function (a, - b) { - return {ctor: "DeletePayment" - ,_0: a - ,_1: b}; - }); - var SetIncome = F2(function (a, - b) { - return {ctor: "SetIncome" - ,_0: a - ,_1: b}; - }); - var AddMonthlyPayment = F2(function (a, - b) { - return {ctor: "AddMonthlyPayment" - ,_0: a - ,_1: b}; - }); - var AddPayment = F3(function (a, - b, - c) { - return {ctor: "AddPayment" - ,_0: a - ,_1: b - ,_2: c}; - }); - var SignIn = function (a) { - return {ctor: "SignIn" - ,_0: a}; - }; - var NoCommunication = {ctor: "NoCommunication"}; - var serverCommunications = $Signal.mailbox(NoCommunication); - _elm.ServerCommunication.values = {_op: _op - ,sendRequest: sendRequest - ,serverCommunications: serverCommunications - ,NoCommunication: NoCommunication - ,SignIn: SignIn - ,AddPayment: AddPayment - ,AddMonthlyPayment: AddMonthlyPayment - ,SetIncome: SetIncome - ,DeletePayment: DeletePayment - ,DeleteMonthlyPayment: DeleteMonthlyPayment - ,UpdatePage: UpdatePage - ,SignOut: SignOut}; - return _elm.ServerCommunication.values; -}; -Elm.Sign = Elm.Sign || {}; -Elm.Sign.make = function (_elm) { - "use strict"; - _elm.Sign = _elm.Sign || {}; - if (_elm.Sign.values) - return _elm.Sign.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Sign", - $Basics = Elm.Basics.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $ServerCommunication = Elm.ServerCommunication.make(_elm), - $Signal = Elm.Signal.make(_elm); - var toServerCommunication = function (operation) { - switch (operation.ctor) - {case "NoOp": - return $ServerCommunication.NoCommunication; - case "SignIn": - return $ServerCommunication.SignIn(operation._0); - case "SignOut": - return $ServerCommunication.SignOut;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var SignOut = {ctor: "SignOut"}; - var SignIn = function (a) { - return {ctor: "SignIn" - ,_0: a}; - }; - var NoOp = {ctor: "NoOp"}; - var operationDecoderWithTag = function (operation) { - switch (operation) - {case "SignIn": - return A2($Json$Decode.map, - SignIn, - A2($Json$Decode._op[":="], - "assertion", - $Json$Decode.string)); - case "SignOut": - return $Json$Decode.succeed(SignOut);} - return $Json$Decode.succeed(NoOp); - }; - var operationDecoder = A2($Json$Decode.andThen, - A2($Json$Decode._op[":="], - "operation", - $Json$Decode.string), - operationDecoderWithTag); - var decodeOperation = function (value) { - return $Maybe.withDefault(NoOp)($Result.toMaybe(A2($Json$Decode.decodeValue, - operationDecoder, - value))); - }; - _elm.Sign.values = {_op: _op - ,decodeOperation: decodeOperation - ,toServerCommunication: toServerCommunication - ,NoOp: NoOp - ,SignIn: SignIn - ,SignOut: SignOut}; - return _elm.Sign.values; -}; -Elm.Signal = Elm.Signal || {}; -Elm.Signal.make = function (_elm) { - "use strict"; - _elm.Signal = _elm.Signal || {}; - if (_elm.Signal.values) - return _elm.Signal.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Signal", - $Basics = Elm.Basics.make(_elm), - $Debug = Elm.Debug.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Native$Signal = Elm.Native.Signal.make(_elm), - $Task = Elm.Task.make(_elm); - var send = F2(function (_v0, - value) { - var _raw = _v0, - $ = _raw.ctor === "Address" ? _raw : _U.badCase($moduleName, - "bugs in reporting the exact location right now"), - actuallySend = $._0; - return A2($Task.onError, - actuallySend(value), - function (_v1) { - var _ = _v1; - return $Task.succeed({ctor: "_Tuple0"}); - }); - }); - var Message = function (a) { - return {ctor: "Message" - ,_0: a}; - }; - var message = F2(function (_v2, - value) { - var _raw = _v2, - $ = _raw.ctor === "Address" ? _raw : _U.badCase($moduleName, - "bugs in reporting the exact location right now"), - send = $._0; - return Message(send(value)); - }); - var mailbox = $Native$Signal.mailbox; - var Address = function (a) { - return {ctor: "Address" - ,_0: a}; - }; - var forwardTo = F2(function (_v3, - f) { - var _raw = _v3, - $ = _raw.ctor === "Address" ? _raw : _U.badCase($moduleName, - "bugs in reporting the exact location right now"), - send = $._0; - return Address(function (x) { - return send(f(x)); - }); - }); - var Mailbox = F2(function (a, - b) { - return {_: {} - ,address: a - ,signal: b}; - }); - var sampleOn = $Native$Signal.sampleOn; - var dropRepeats = $Native$Signal.dropRepeats; - var filterMap = $Native$Signal.filterMap; - var filter = F3(function (isOk, - base, - signal) { - return A3(filterMap, - function (value) { - return isOk(value) ? $Maybe.Just(value) : $Maybe.Nothing; - }, - base, - signal); - }); - var merge = F2(function (left, - right) { - return A3($Native$Signal.genericMerge, - $Basics.always, - left, - right); - }); - var mergeMany = function (signalList) { - var _v4 = $List.reverse(signalList); - switch (_v4.ctor) - {case "::": - return A3($List.foldl, - merge, - _v4._0, - _v4._1); - case "[]": - return $Debug.crash("mergeMany was given an empty list!");} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var foldp = $Native$Signal.foldp; - var map5 = $Native$Signal.map5; - var map4 = $Native$Signal.map4; - var map3 = $Native$Signal.map3; - var map2 = $Native$Signal.map2; - _op["~"] = F2(function (funcs, - args) { - return A3(map2, - F2(function (f,v) { - return f(v); - }), - funcs, - args); - }); - var map = $Native$Signal.map; - _op["<~"] = map; - var constant = $Native$Signal.constant; - var Signal = {ctor: "Signal"}; - _elm.Signal.values = {_op: _op - ,merge: merge - ,mergeMany: mergeMany - ,map: map - ,map2: map2 - ,map3: map3 - ,map4: map4 - ,map5: map5 - ,constant: constant - ,dropRepeats: dropRepeats - ,filter: filter - ,filterMap: filterMap - ,sampleOn: sampleOn - ,foldp: foldp - ,mailbox: mailbox - ,send: send - ,message: message - ,forwardTo: forwardTo - ,Mailbox: Mailbox}; - return _elm.Signal.values; -}; -Elm.SimpleHTTP = Elm.SimpleHTTP || {}; -Elm.SimpleHTTP.make = function (_elm) { - "use strict"; - _elm.SimpleHTTP = _elm.SimpleHTTP || {}; - if (_elm.SimpleHTTP.values) - return _elm.SimpleHTTP.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "SimpleHTTP", - $Basics = Elm.Basics.make(_elm), - $Http = Elm.Http.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Task = Elm.Task.make(_elm); - var decodeHttpValue = F2(function (decoder, - value) { - switch (value.ctor) - {case "Text": - var _v2 = A2($Json$Decode.decodeString, - decoder, - value._0); - switch (_v2.ctor) - {case "Err": - return $Task.fail($Http.UnexpectedPayload(_v2._0)); - case "Ok": - return $Task.succeed(_v2._0);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now");} - return $Task.fail($Http.UnexpectedPayload("Response body is a blob, expecting a string.")); - }); - var promoteError = function (rawError) { - switch (rawError.ctor) - {case "RawNetworkError": - return $Http.NetworkError; - case "RawTimeout": - return $Http.Timeout;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var handleResponse = function (response) { - return _U.cmp(200, - response.status) < 1 && _U.cmp(response.status, - 300) < 0 ? $Task.succeed(response.value) : $Task.fail(A2($Http.BadResponse, - response.status, - response.statusText)); - }; - var post = function (url) { - return A2($Basics.flip, - $Task.andThen, - handleResponse)($Task.mapError(promoteError)($Http.send($Http.defaultSettings)({_: {} - ,body: $Http.empty - ,headers: _L.fromArray([]) - ,url: url - ,verb: "POST"}))); - }; - _elm.SimpleHTTP.values = {_op: _op - ,post: post - ,decodeHttpValue: decodeHttpValue}; - return _elm.SimpleHTTP.values; -}; -Elm.String = Elm.String || {}; -Elm.String.make = function (_elm) { - "use strict"; - _elm.String = _elm.String || {}; - if (_elm.String.values) - return _elm.String.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "String", - $Maybe = Elm.Maybe.make(_elm), - $Native$String = Elm.Native.String.make(_elm), - $Result = Elm.Result.make(_elm); - var fromList = $Native$String.fromList; - var toList = $Native$String.toList; - var toFloat = $Native$String.toFloat; - var toInt = $Native$String.toInt; - var indices = $Native$String.indexes; - var indexes = $Native$String.indexes; - var endsWith = $Native$String.endsWith; - var startsWith = $Native$String.startsWith; - var contains = $Native$String.contains; - var all = $Native$String.all; - var any = $Native$String.any; - var toLower = $Native$String.toLower; - var toUpper = $Native$String.toUpper; - var lines = $Native$String.lines; - var words = $Native$String.words; - var trimRight = $Native$String.trimRight; - var trimLeft = $Native$String.trimLeft; - var trim = $Native$String.trim; - var padRight = $Native$String.padRight; - var padLeft = $Native$String.padLeft; - var pad = $Native$String.pad; - var dropRight = $Native$String.dropRight; - var dropLeft = $Native$String.dropLeft; - var right = $Native$String.right; - var left = $Native$String.left; - var slice = $Native$String.slice; - var repeat = $Native$String.repeat; - var join = $Native$String.join; - var split = $Native$String.split; - var foldr = $Native$String.foldr; - var foldl = $Native$String.foldl; - var reverse = $Native$String.reverse; - var filter = $Native$String.filter; - var map = $Native$String.map; - var length = $Native$String.length; - var concat = $Native$String.concat; - var append = $Native$String.append; - var uncons = $Native$String.uncons; - var cons = $Native$String.cons; - var fromChar = function ($char) { - return A2(cons,$char,""); - }; - var isEmpty = $Native$String.isEmpty; - _elm.String.values = {_op: _op - ,isEmpty: isEmpty - ,length: length - ,reverse: reverse - ,repeat: repeat - ,cons: cons - ,uncons: uncons - ,fromChar: fromChar - ,append: append - ,concat: concat - ,split: split - ,join: join - ,words: words - ,lines: lines - ,slice: slice - ,left: left - ,right: right - ,dropLeft: dropLeft - ,dropRight: dropRight - ,contains: contains - ,startsWith: startsWith - ,endsWith: endsWith - ,indexes: indexes - ,indices: indices - ,toInt: toInt - ,toFloat: toFloat - ,toList: toList - ,fromList: fromList - ,toUpper: toUpper - ,toLower: toLower - ,pad: pad - ,padLeft: padLeft - ,padRight: padRight - ,trim: trim - ,trimLeft: trimLeft - ,trimRight: trimRight - ,map: map - ,filter: filter - ,foldl: foldl - ,foldr: foldr - ,any: any - ,all: all}; - return _elm.String.values; -}; -Elm.Task = Elm.Task || {}; -Elm.Task.make = function (_elm) { - "use strict"; - _elm.Task = _elm.Task || {}; - if (_elm.Task.values) - return _elm.Task.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Task", - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Native$Task = Elm.Native.Task.make(_elm), - $Result = Elm.Result.make(_elm); - var sleep = $Native$Task.sleep; - var spawn = $Native$Task.spawn; - var ThreadID = function (a) { - return {ctor: "ThreadID" - ,_0: a}; - }; - var onError = $Native$Task.catch_; - var andThen = $Native$Task.andThen; - var fail = $Native$Task.fail; - var mapError = F2(function (f, - promise) { - return A2(onError, - promise, - function (err) { - return fail(f(err)); - }); - }); - var succeed = $Native$Task.succeed; - var map = F2(function (func, - promiseA) { - return A2(andThen, - promiseA, - function (a) { - return succeed(func(a)); - }); - }); - var map2 = F3(function (func, - promiseA, - promiseB) { - return A2(andThen, - promiseA, - function (a) { - return A2(andThen, - promiseB, - function (b) { - return succeed(A2(func,a,b)); - }); - }); - }); - var map3 = F4(function (func, - promiseA, - promiseB, - promiseC) { - return A2(andThen, - promiseA, - function (a) { - return A2(andThen, - promiseB, - function (b) { - return A2(andThen, - promiseC, - function (c) { - return succeed(A3(func, - a, - b, - c)); - }); - }); - }); - }); - var map4 = F5(function (func, - promiseA, - promiseB, - promiseC, - promiseD) { - return A2(andThen, - promiseA, - function (a) { - return A2(andThen, - promiseB, - function (b) { - return A2(andThen, - promiseC, - function (c) { - return A2(andThen, - promiseD, - function (d) { - return succeed(A4(func, - a, - b, - c, - d)); - }); - }); - }); - }); - }); - var map5 = F6(function (func, - promiseA, - promiseB, - promiseC, - promiseD, - promiseE) { - return A2(andThen, - promiseA, - function (a) { - return A2(andThen, - promiseB, - function (b) { - return A2(andThen, - promiseC, - function (c) { - return A2(andThen, - promiseD, - function (d) { - return A2(andThen, - promiseE, - function (e) { - return succeed(A5(func, - a, - b, - c, - d, - e)); - }); - }); - }); - }); - }); - }); - var andMap = F2(function (promiseFunc, - promiseValue) { - return A2(andThen, - promiseFunc, - function (func) { - return A2(andThen, - promiseValue, - function (value) { - return succeed(func(value)); - }); - }); - }); - var sequence = function (promises) { - switch (promises.ctor) - {case "::": return A3(map2, - F2(function (x,y) { - return A2($List._op["::"], - x, - y); - }), - promises._0, - sequence(promises._1)); - case "[]": - return succeed(_L.fromArray([]));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var toMaybe = function (task) { - return A2(onError, - A2(map,$Maybe.Just,task), - function (_v3) { - var _ = _v3; - return succeed($Maybe.Nothing); - }); - }; - var fromMaybe = F2(function ($default, - maybe) { - switch (maybe.ctor) - {case "Just": - return succeed(maybe._0); - case "Nothing": - return fail($default);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var toResult = function (task) { - return A2(onError, - A2(map,$Result.Ok,task), - function (msg) { - return succeed($Result.Err(msg)); - }); - }; - var fromResult = function (result) { - switch (result.ctor) - {case "Err": - return fail(result._0); - case "Ok": - return succeed(result._0);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var Task = {ctor: "Task"}; - _elm.Task.values = {_op: _op - ,succeed: succeed - ,fail: fail - ,map: map - ,map2: map2 - ,map3: map3 - ,map4: map4 - ,map5: map5 - ,andMap: andMap - ,sequence: sequence - ,andThen: andThen - ,onError: onError - ,mapError: mapError - ,toMaybe: toMaybe - ,fromMaybe: fromMaybe - ,toResult: toResult - ,fromResult: fromResult - ,spawn: spawn - ,sleep: sleep}; - return _elm.Task.values; -}; -Elm.Text = Elm.Text || {}; -Elm.Text.make = function (_elm) { - "use strict"; - _elm.Text = _elm.Text || {}; - if (_elm.Text.values) - return _elm.Text.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Text", - $Color = Elm.Color.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Native$Text = Elm.Native.Text.make(_elm); - var line = $Native$Text.line; - var italic = $Native$Text.italic; - var bold = $Native$Text.bold; - var color = $Native$Text.color; - var height = $Native$Text.height; - var link = $Native$Text.link; - var monospace = $Native$Text.monospace; - var typeface = $Native$Text.typeface; - var style = $Native$Text.style; - var append = $Native$Text.append; - var fromString = $Native$Text.fromString; - var empty = fromString(""); - var concat = function (texts) { - return A3($List.foldr, - append, - empty, - texts); - }; - var join = F2(function (seperator, - texts) { - return concat(A2($List.intersperse, - seperator, - texts)); - }); - var defaultStyle = {_: {} - ,bold: false - ,color: $Color.black - ,height: $Maybe.Nothing - ,italic: false - ,line: $Maybe.Nothing - ,typeface: _L.fromArray([])}; - var Style = F6(function (a, - b, - c, - d, - e, - f) { - return {_: {} - ,bold: d - ,color: c - ,height: b - ,italic: e - ,line: f - ,typeface: a}; - }); - var Through = {ctor: "Through"}; - var Over = {ctor: "Over"}; - var Under = {ctor: "Under"}; - var Text = {ctor: "Text"}; - _elm.Text.values = {_op: _op - ,fromString: fromString - ,empty: empty - ,append: append - ,concat: concat - ,join: join - ,link: link - ,style: style - ,defaultStyle: defaultStyle - ,typeface: typeface - ,monospace: monospace - ,height: height - ,color: color - ,bold: bold - ,italic: italic - ,line: line - ,Style: Style - ,Under: Under - ,Over: Over - ,Through: Through}; - return _elm.Text.values; -}; -Elm.Time = Elm.Time || {}; -Elm.Time.make = function (_elm) { - "use strict"; - _elm.Time = _elm.Time || {}; - if (_elm.Time.values) - return _elm.Time.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Time", - $Basics = Elm.Basics.make(_elm), - $Native$Signal = Elm.Native.Signal.make(_elm), - $Native$Time = Elm.Native.Time.make(_elm), - $Signal = Elm.Signal.make(_elm); - var delay = $Native$Signal.delay; - var since = F2(function (time, - signal) { - var stop = A2($Signal.map, - $Basics.always(-1), - A2(delay,time,signal)); - var start = A2($Signal.map, - $Basics.always(1), - signal); - var delaydiff = A3($Signal.foldp, - F2(function (x,y) { - return x + y; - }), - 0, - A2($Signal.merge,start,stop)); - return A2($Signal.map, - F2(function (x,y) { - return !_U.eq(x,y); - })(0), - delaydiff); - }); - var timestamp = $Native$Signal.timestamp; - var every = $Native$Time.every; - var fpsWhen = $Native$Time.fpsWhen; - var fps = function (targetFrames) { - return A2(fpsWhen, - targetFrames, - $Signal.constant(true)); - }; - var inMilliseconds = function (t) { - return t; - }; - var millisecond = 1; - var second = 1000 * millisecond; - var minute = 60 * second; - var hour = 60 * minute; - var inHours = function (t) { - return t / hour; - }; - var inMinutes = function (t) { - return t / minute; - }; - var inSeconds = function (t) { - return t / second; - }; - _elm.Time.values = {_op: _op - ,millisecond: millisecond - ,second: second - ,minute: minute - ,hour: hour - ,inMilliseconds: inMilliseconds - ,inSeconds: inSeconds - ,inMinutes: inMinutes - ,inHours: inHours - ,fps: fps - ,fpsWhen: fpsWhen - ,every: every - ,timestamp: timestamp - ,delay: delay - ,since: since}; - return _elm.Time.values; -}; -Elm.Transform2D = Elm.Transform2D || {}; -Elm.Transform2D.make = function (_elm) { - "use strict"; - _elm.Transform2D = _elm.Transform2D || {}; - if (_elm.Transform2D.values) - return _elm.Transform2D.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Transform2D", - $Native$Transform2D = Elm.Native.Transform2D.make(_elm); - var multiply = $Native$Transform2D.multiply; - var rotation = $Native$Transform2D.rotation; - var matrix = $Native$Transform2D.matrix; - var translation = F2(function (x, - y) { - return A6(matrix, - 1, - 0, - 0, - 1, - x, - y); - }); - var scale = function (s) { - return A6(matrix, - s, - 0, - 0, - s, - 0, - 0); - }; - var scaleX = function (x) { - return A6(matrix, - x, - 0, - 0, - 1, - 0, - 0); - }; - var scaleY = function (y) { - return A6(matrix, - 1, - 0, - 0, - y, - 0, - 0); - }; - var identity = $Native$Transform2D.identity; - var Transform2D = {ctor: "Transform2D"}; - _elm.Transform2D.values = {_op: _op - ,identity: identity - ,matrix: matrix - ,multiply: multiply - ,rotation: rotation - ,translation: translation - ,scale: scale - ,scaleX: scaleX - ,scaleY: scaleY}; - return _elm.Transform2D.values; -}; -Elm.Update = Elm.Update || {}; -Elm.Update.make = function (_elm) { - "use strict"; - _elm.Update = _elm.Update || {}; - if (_elm.Update.values) - return _elm.Update.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Update", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model = Elm.Model.make(_elm), - $Model$Payer = Elm.Model.Payer.make(_elm), - $Model$Payment = Elm.Model.Payment.make(_elm), - $Model$User = Elm.Model.User.make(_elm), - $Model$View = Elm.Model.View.make(_elm), - $Model$View$LoggedInView = Elm.Model.View.LoggedInView.make(_elm), - $Model$View$SignInView = Elm.Model.View.SignInView.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Time = Elm.Time.make(_elm), - $Update$LoggedIn = Elm.Update.LoggedIn.make(_elm), - $Update$SignIn = Elm.Update.SignIn.make(_elm); - var updateModel = F2(function (action, - model) { - switch (action.ctor) - {case "GoLoggedInView": - return _U.replace([["view" - ,$Model$View.LoggedInView(A6($Model$View$LoggedInView.initLoggedInView, - action._0, - action._1, - action._2, - action._3, - action._4, - action._5))]], - model); - case "GoSignInView": - return _U.replace([["view" - ,$Model$View.SignInView($Model$View$SignInView.initSignInView)]], - model); - case "NoOp": return model; - case "SignInError": - var signInView = _U.replace([["result" - ,$Maybe.Just($Result.Err(action._0))]], - $Model$View$SignInView.initSignInView); - return _U.replace([["view" - ,$Model$View.SignInView(signInView)]], - model); - case "UpdateLoggedIn": - var _v11 = model.view; - switch (_v11.ctor) - {case "LoggedInView": - return _U.replace([["view" - ,$Model$View.LoggedInView(A3($Update$LoggedIn.updateLoggedIn, - model, - action._0, - _v11._0))]], - model);} - return model; - case "UpdateSignIn": - var _v13 = model.view; - switch (_v13.ctor) - {case "SignInView": - return _U.replace([["view" - ,$Model$View.SignInView(A2($Update$SignIn.updateSignIn, - action._0, - _v13._0))]], - model);} - return model; - case "UpdateTime": - return _U.replace([["currentTime" - ,action._0]], - model);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var UpdateLoggedIn = function (a) { - return {ctor: "UpdateLoggedIn" - ,_0: a}; - }; - var GoLoggedInView = F6(function (a, - b, - c, - d, - e, - f) { - return {ctor: "GoLoggedInView" - ,_0: a - ,_1: b - ,_2: c - ,_3: d - ,_4: e - ,_5: f}; - }); - var UpdateSignIn = function (a) { - return {ctor: "UpdateSignIn" - ,_0: a}; - }; - var SignInError = function (a) { - return {ctor: "SignInError" - ,_0: a}; - }; - var GoSignInView = {ctor: "GoSignInView"}; - var UpdateTime = function (a) { - return {ctor: "UpdateTime" - ,_0: a}; - }; - var NoOp = {ctor: "NoOp"}; - var actions = $Signal.mailbox(NoOp); - _elm.Update.values = {_op: _op - ,actions: actions - ,updateModel: updateModel - ,NoOp: NoOp - ,UpdateTime: UpdateTime - ,GoSignInView: GoSignInView - ,SignInError: SignInError - ,UpdateSignIn: UpdateSignIn - ,GoLoggedInView: GoLoggedInView - ,UpdateLoggedIn: UpdateLoggedIn}; - return _elm.Update.values; -}; -Elm.Update = Elm.Update || {}; -Elm.Update.LoggedIn = Elm.Update.LoggedIn || {}; -Elm.Update.LoggedIn.make = function (_elm) { - "use strict"; - _elm.Update = _elm.Update || {}; - _elm.Update.LoggedIn = _elm.Update.LoggedIn || {}; - if (_elm.Update.LoggedIn.values) - return _elm.Update.LoggedIn.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Update.LoggedIn", - $Basics = Elm.Basics.make(_elm), - $Date = Elm.Date.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model = Elm.Model.make(_elm), - $Model$Payment = Elm.Model.Payment.make(_elm), - $Model$User = Elm.Model.User.make(_elm), - $Model$View$LoggedIn$Add = Elm.Model.View.LoggedIn.Add.make(_elm), - $Model$View$LoggedInView = Elm.Model.View.LoggedInView.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Update$LoggedIn$Account = Elm.Update.LoggedIn.Account.make(_elm), - $Update$LoggedIn$Add = Elm.Update.LoggedIn.Add.make(_elm), - $Update$LoggedIn$Monthly = Elm.Update.LoggedIn.Monthly.make(_elm); - var updateLoggedIn = F3(function (model, - action, - loggedInView) { - switch (action.ctor) - {case "AddMonthlyPayment": - return _U.replace([["add" - ,$Model$View$LoggedIn$Add.initAddPayment($Model$View$LoggedIn$Add.Monthly)] - ,["monthly" - ,function () { - var payment = A5($Model$Payment.Payment, - action._0, - $Date.fromTime(model.currentTime), - action._1, - action._2, - loggedInView.account.me); - return A2($Update$LoggedIn$Monthly.updateMonthly, - $Update$LoggedIn$Monthly.AddPayment(payment), - loggedInView.monthly); - }()]], - loggedInView); - case "AddPayment": - return _U.replace([["payments" - ,action._3] - ,["currentPage",1] - ,["add" - ,$Model$View$LoggedIn$Add.initAddPayment($Model$View$LoggedIn$Add.Punctual)] - ,["account" - ,A2($Update$LoggedIn$Account.updateAccount, - A3($Update$LoggedIn$Account.UpdatePayer, - action._0, - model.currentTime, - action._2), - loggedInView.account)] - ,["paymentsCount" - ,loggedInView.paymentsCount + 1]], - loggedInView); - case "DeletePayment": - return _U.replace([["payments" - ,action._1] - ,["account" - ,A2($Update$LoggedIn$Account.updateAccount, - A3($Update$LoggedIn$Account.UpdatePayer, - action._0.userId, - $Date.toTime(action._0.creation), - 0 - action._0.cost), - loggedInView.account)] - ,["paymentsCount" - ,loggedInView.paymentsCount - 1]], - loggedInView); - case "ToggleEdit": - return _U.replace([["paymentEdition" - ,_U.eq(loggedInView.paymentEdition, - $Maybe.Just(action._0)) ? $Maybe.Nothing : $Maybe.Just(action._0)]], - loggedInView); - case "UpdateAccount": - return _U.replace([["account" - ,A2($Update$LoggedIn$Account.updateAccount, - action._0, - loggedInView.account)]], - loggedInView); - case "UpdateAdd": - return _U.replace([["add" - ,A2($Update$LoggedIn$Add.updateAddPayment, - action._0, - loggedInView.add)]], - loggedInView); - case "UpdateMonthly": - return _U.replace([["monthly" - ,A2($Update$LoggedIn$Monthly.updateMonthly, - action._0, - loggedInView.monthly)]], - loggedInView); - case "UpdatePage": - return _U.replace([["currentPage" - ,action._0] - ,["payments",action._1]], - loggedInView); - case "UpdatePayments": - return _U.replace([["payments" - ,action._0]], - loggedInView);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var UpdateAccount = function (a) { - return {ctor: "UpdateAccount" - ,_0: a}; - }; - var UpdateMonthly = function (a) { - return {ctor: "UpdateMonthly" - ,_0: a}; - }; - var UpdatePage = F2(function (a, - b) { - return {ctor: "UpdatePage" - ,_0: a - ,_1: b}; - }); - var DeletePayment = F2(function (a, - b) { - return {ctor: "DeletePayment" - ,_0: a - ,_1: b}; - }); - var ToggleEdit = function (a) { - return {ctor: "ToggleEdit" - ,_0: a}; - }; - var AddMonthlyPayment = F3(function (a, - b, - c) { - return {ctor: "AddMonthlyPayment" - ,_0: a - ,_1: b - ,_2: c}; - }); - var AddPayment = F4(function (a, - b, - c, - d) { - return {ctor: "AddPayment" - ,_0: a - ,_1: b - ,_2: c - ,_3: d}; - }); - var UpdatePayments = function (a) { - return {ctor: "UpdatePayments" - ,_0: a}; - }; - var UpdateAdd = function (a) { - return {ctor: "UpdateAdd" - ,_0: a}; - }; - _elm.Update.LoggedIn.values = {_op: _op - ,updateLoggedIn: updateLoggedIn - ,UpdateAdd: UpdateAdd - ,UpdatePayments: UpdatePayments - ,AddPayment: AddPayment - ,AddMonthlyPayment: AddMonthlyPayment - ,ToggleEdit: ToggleEdit - ,DeletePayment: DeletePayment - ,UpdatePage: UpdatePage - ,UpdateMonthly: UpdateMonthly - ,UpdateAccount: UpdateAccount}; - return _elm.Update.LoggedIn.values; -}; -Elm.Update = Elm.Update || {}; -Elm.Update.LoggedIn = Elm.Update.LoggedIn || {}; -Elm.Update.LoggedIn.Account = Elm.Update.LoggedIn.Account || {}; -Elm.Update.LoggedIn.Account.make = function (_elm) { - "use strict"; - _elm.Update = _elm.Update || {}; - _elm.Update.LoggedIn = _elm.Update.LoggedIn || {}; - _elm.Update.LoggedIn.Account = _elm.Update.LoggedIn.Account || {}; - if (_elm.Update.LoggedIn.Account.values) - return _elm.Update.LoggedIn.Account.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Update.LoggedIn.Account", - $Basics = Elm.Basics.make(_elm), - $Dict = Elm.Dict.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Payer = Elm.Model.Payer.make(_elm), - $Model$User = Elm.Model.User.make(_elm), - $Model$View$LoggedIn$Account = Elm.Model.View.LoggedIn.Account.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Time = Elm.Time.make(_elm), - $Utils$Maybe = Elm.Utils.Maybe.make(_elm); - var updateAccount = F2(function (action, - account) { - switch (action.ctor) - {case "ToggleDetail": - return _U.replace([["visibleDetail" - ,$Basics.not(account.visibleDetail)]], - account); - case "ToggleIncomeEdition": - return _U.replace([["incomeEdition" - ,$Utils$Maybe.isJust(account.incomeEdition) ? $Maybe.Nothing : $Maybe.Just($Model$View$LoggedIn$Account.initIncomeEdition(A2($Maybe.withDefault, - 0, - $Model$View$LoggedIn$Account.getCurrentIncome(account))))]], - account); - case "UpdateEditionError": - var _v8 = account.incomeEdition; - switch (_v8.ctor) - {case "Just": - return _U.replace([["incomeEdition" - ,$Maybe.Just(_U.replace([["error" - ,$Maybe.Just(action._0)]], - _v8._0))]], - account); - case "Nothing": return account;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - case "UpdateIncome": - return _U.replace([["payers" - ,A2($Dict.update, - account.me, - function (mbPayer) { - switch (mbPayer.ctor) - {case "Just": - return $Maybe.Just(_U.replace([["incomes" - ,A2($Basics._op["++"], - mbPayer._0.incomes, - _L.fromArray([{_: {} - ,amount: action._1 - ,creation: action._0}]))]], - mbPayer._0)); - case "Nothing": - return $Maybe.Nothing;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - })(account.payers)] - ,["incomeEdition" - ,$Maybe.Nothing]], - account); - case "UpdateIncomeEdition": - var _v12 = account.incomeEdition; - switch (_v12.ctor) - {case "Just": - return _U.replace([["incomeEdition" - ,$Maybe.Just(_U.replace([["income" - ,action._0]], - _v12._0))]], - account); - case "Nothing": return account;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - case "UpdatePayer": - return _U.replace([["payers" - ,A4($Model$Payer.updatePayers, - account.payers, - action._0, - action._1, - action._2)]], - account);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var UpdateIncome = F2(function (a, - b) { - return {ctor: "UpdateIncome" - ,_0: a - ,_1: b}; - }); - var UpdateEditionError = function (a) { - return {ctor: "UpdateEditionError" - ,_0: a}; - }; - var UpdateIncomeEdition = function (a) { - return {ctor: "UpdateIncomeEdition" - ,_0: a}; - }; - var ToggleIncomeEdition = {ctor: "ToggleIncomeEdition"}; - var UpdatePayer = F3(function (a, - b, - c) { - return {ctor: "UpdatePayer" - ,_0: a - ,_1: b - ,_2: c}; - }); - var ToggleDetail = {ctor: "ToggleDetail"}; - _elm.Update.LoggedIn.Account.values = {_op: _op - ,updateAccount: updateAccount - ,ToggleDetail: ToggleDetail - ,UpdatePayer: UpdatePayer - ,ToggleIncomeEdition: ToggleIncomeEdition - ,UpdateIncomeEdition: UpdateIncomeEdition - ,UpdateEditionError: UpdateEditionError - ,UpdateIncome: UpdateIncome}; - return _elm.Update.LoggedIn.Account.values; -}; -Elm.Update = Elm.Update || {}; -Elm.Update.LoggedIn = Elm.Update.LoggedIn || {}; -Elm.Update.LoggedIn.Add = Elm.Update.LoggedIn.Add || {}; -Elm.Update.LoggedIn.Add.make = function (_elm) { - "use strict"; - _elm.Update = _elm.Update || {}; - _elm.Update.LoggedIn = _elm.Update.LoggedIn || {}; - _elm.Update.LoggedIn.Add = _elm.Update.LoggedIn.Add || {}; - if (_elm.Update.LoggedIn.Add.values) - return _elm.Update.LoggedIn.Add.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Update.LoggedIn.Add", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$View$LoggedIn$Add = Elm.Model.View.LoggedIn.Add.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var updateAddPayment = F2(function (action, - addPayment) { - switch (action.ctor) - {case "AddError": - return _U.replace([["nameError" - ,action._0] - ,["costError",action._1]], - addPayment); - case "ToggleFrequency": - return _U.replace([["frequency" - ,_U.eq(addPayment.frequency, - $Model$View$LoggedIn$Add.Punctual) ? $Model$View$LoggedIn$Add.Monthly : $Model$View$LoggedIn$Add.Punctual]], - addPayment); - case "UpdateCost": - return _U.replace([["cost" - ,action._0]], - addPayment); - case "UpdateName": - return _U.replace([["name" - ,action._0]], - addPayment);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var ToggleFrequency = {ctor: "ToggleFrequency"}; - var AddError = F2(function (a, - b) { - return {ctor: "AddError" - ,_0: a - ,_1: b}; - }); - var UpdateCost = function (a) { - return {ctor: "UpdateCost" - ,_0: a}; - }; - var UpdateName = function (a) { - return {ctor: "UpdateName" - ,_0: a}; - }; - _elm.Update.LoggedIn.Add.values = {_op: _op - ,updateAddPayment: updateAddPayment - ,UpdateName: UpdateName - ,UpdateCost: UpdateCost - ,AddError: AddError - ,ToggleFrequency: ToggleFrequency}; - return _elm.Update.LoggedIn.Add.values; -}; -Elm.Update = Elm.Update || {}; -Elm.Update.LoggedIn = Elm.Update.LoggedIn || {}; -Elm.Update.LoggedIn.Monthly = Elm.Update.LoggedIn.Monthly || {}; -Elm.Update.LoggedIn.Monthly.make = function (_elm) { - "use strict"; - _elm.Update = _elm.Update || {}; - _elm.Update.LoggedIn = _elm.Update.LoggedIn || {}; - _elm.Update.LoggedIn.Monthly = _elm.Update.LoggedIn.Monthly || {}; - if (_elm.Update.LoggedIn.Monthly.values) - return _elm.Update.LoggedIn.Monthly.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Update.LoggedIn.Monthly", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Payment = Elm.Model.Payment.make(_elm), - $Model$View$LoggedIn$Monthly = Elm.Model.View.LoggedIn.Monthly.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var updateMonthly = F2(function (action, - monthly) { - switch (action.ctor) - {case "AddPayment": - return _U.replace([["payments" - ,A2($List._op["::"], - action._0, - monthly.payments)] - ,["visibleDetail",true]], - monthly); - case "DeletePayment": - return _U.replace([["payments" - ,A2($List.filter, - function (payment) { - return !_U.eq(payment.id, - action._0); - }, - monthly.payments)]], - monthly); - case "ToggleDetail": - return _U.replace([["visibleDetail" - ,$Basics.not(monthly.visibleDetail)]], - monthly);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var DeletePayment = function (a) { - return {ctor: "DeletePayment" - ,_0: a}; - }; - var AddPayment = function (a) { - return {ctor: "AddPayment" - ,_0: a}; - }; - var ToggleDetail = {ctor: "ToggleDetail"}; - _elm.Update.LoggedIn.Monthly.values = {_op: _op - ,updateMonthly: updateMonthly - ,ToggleDetail: ToggleDetail - ,AddPayment: AddPayment - ,DeletePayment: DeletePayment}; - return _elm.Update.LoggedIn.Monthly.values; -}; -Elm.Update = Elm.Update || {}; -Elm.Update.SignIn = Elm.Update.SignIn || {}; -Elm.Update.SignIn.make = function (_elm) { - "use strict"; - _elm.Update = _elm.Update || {}; - _elm.Update.SignIn = _elm.Update.SignIn || {}; - if (_elm.Update.SignIn.values) - return _elm.Update.SignIn.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Update.SignIn", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$View$SignInView = Elm.Model.View.SignInView.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var updateSignIn = F2(function (action, - signInView) { - switch (action.ctor) - {case "ErrorLogin": - return _U.replace([["result" - ,$Maybe.Just($Result.Err(action._0))]], - signInView);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var ErrorLogin = function (a) { - return {ctor: "ErrorLogin" - ,_0: a}; - }; - _elm.Update.SignIn.values = {_op: _op - ,updateSignIn: updateSignIn - ,ErrorLogin: ErrorLogin}; - return _elm.Update.SignIn.values; -}; -Elm.Utils = Elm.Utils || {}; -Elm.Utils.Dict = Elm.Utils.Dict || {}; -Elm.Utils.Dict.make = function (_elm) { - "use strict"; - _elm.Utils = _elm.Utils || {}; - _elm.Utils.Dict = _elm.Utils.Dict || {}; - if (_elm.Utils.Dict.values) - return _elm.Utils.Dict.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Utils.Dict", - $Basics = Elm.Basics.make(_elm), - $Dict = Elm.Dict.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var onSecond = F2(function (f, - tuple) { - switch (tuple.ctor) - {case "_Tuple2": - return {ctor: "_Tuple2" - ,_0: tuple._0 - ,_1: f(tuple._1)};} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var mapValues = function (f) { - return function ($) { - return $Dict.fromList($List.map(onSecond(f))($Dict.toList($))); - }; - }; - _elm.Utils.Dict.values = {_op: _op - ,mapValues: mapValues}; - return _elm.Utils.Dict.values; -}; -Elm.Utils = Elm.Utils || {}; -Elm.Utils.Either = Elm.Utils.Either || {}; -Elm.Utils.Either.make = function (_elm) { - "use strict"; - _elm.Utils = _elm.Utils || {}; - _elm.Utils.Either = _elm.Utils.Either || {}; - if (_elm.Utils.Either.values) - return _elm.Utils.Either.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Utils.Either", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var toMaybeError = function (result) { - switch (result.ctor) - {case "Err": - return $Maybe.Just(result._0); - case "Ok": - return $Maybe.Nothing;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - _elm.Utils.Either.values = {_op: _op - ,toMaybeError: toMaybeError}; - return _elm.Utils.Either.values; -}; -Elm.Utils = Elm.Utils || {}; -Elm.Utils.Maybe = Elm.Utils.Maybe || {}; -Elm.Utils.Maybe.make = function (_elm) { - "use strict"; - _elm.Utils = _elm.Utils || {}; - _elm.Utils.Maybe = _elm.Utils.Maybe || {}; - if (_elm.Utils.Maybe.values) - return _elm.Utils.Maybe.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Utils.Maybe", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var maybeToList = function (mb) { - switch (mb.ctor) - {case "Just": - return _L.fromArray([mb._0]); - case "Nothing": - return _L.fromArray([]);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var catMaybes = A2($List.foldr, - F2(function (mb,xs) { - switch (mb.ctor) - {case "Just": - return A2($List._op["::"], - mb._0, - xs); - case "Nothing": return xs;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }), - _L.fromArray([])); - var isJust = function (maybe) { - switch (maybe.ctor) - {case "Just": return true; - case "Nothing": return false;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - _elm.Utils.Maybe.values = {_op: _op - ,isJust: isJust - ,catMaybes: catMaybes - ,maybeToList: maybeToList}; - return _elm.Utils.Maybe.values; -}; -Elm.Utils = Elm.Utils || {}; -Elm.Utils.Validation = Elm.Utils.Validation || {}; -Elm.Utils.Validation.make = function (_elm) { - "use strict"; - _elm.Utils = _elm.Utils || {}; - _elm.Utils.Validation = _elm.Utils.Validation || {}; - if (_elm.Utils.Validation.values) - return _elm.Utils.Validation.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "Utils.Validation", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Reads = Elm.Reads.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $String = Elm.String.make(_elm); - var validateNumber = F3(function (message, - numberForm, - str) { - var _v0 = $Reads.readInt(str); - switch (_v0.ctor) - {case "Just": - return numberForm(_v0._0) ? $Result.Ok(_v0._0) : $Result.Err(message); - case "Nothing": - return $Result.Err(message);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var validateNonEmpty = F2(function (message, - str) { - return $String.isEmpty(str) ? $Result.Err(message) : $Result.Ok(str); - }); - _elm.Utils.Validation.values = {_op: _op - ,validateNonEmpty: validateNonEmpty - ,validateNumber: validateNumber}; - return _elm.Utils.Validation.values; -}; -Elm.View = Elm.View || {}; -Elm.View.Date = Elm.View.Date || {}; -Elm.View.Date.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.Date = _elm.View.Date || {}; - if (_elm.View.Date.values) - return _elm.View.Date.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.Date", - $Basics = Elm.Basics.make(_elm), - $Date = Elm.Date.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Translations = Elm.Model.Translations.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $String = Elm.String.make(_elm); - var getMonthKey = function (month) { - switch (month.ctor) - {case "Apr": return "April"; - case "Aug": return "August"; - case "Dec": return "December"; - case "Feb": return "February"; - case "Jan": return "January"; - case "Jul": return "July"; - case "Jun": return "June"; - case "Mar": return "March"; - case "May": return "May"; - case "Nov": return "November"; - case "Oct": return "October"; - case "Sep": return "September";} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var getMonthNumber = function (month) { - switch (month.ctor) - {case "Apr": return 4; - case "Aug": return 8; - case "Dec": return 12; - case "Feb": return 2; - case "Jan": return 1; - case "Jul": return 7; - case "Jun": return 6; - case "Mar": return 3; - case "May": return 5; - case "Nov": return 11; - case "Oct": return 10; - case "Sep": return 9;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var renderLongDate = F2(function (date, - translations) { - var params = _L.fromArray([$Basics.toString($Date.day(date)) - ,A2($Model$Translations.getMessage, - getMonthKey($Date.month(date)), - translations) - ,$Basics.toString($Date.year(date))]); - return A3($Model$Translations.getParamMessage, - params, - "LongDate", - translations); - }); - var renderShortDate = F2(function (date, - translations) { - var params = _L.fromArray([A3($String.pad, - 2, - _U.chr("0"), - $Basics.toString($Date.day(date))) - ,A3($String.pad, - 2, - _U.chr("0"), - $Basics.toString(getMonthNumber($Date.month(date)))) - ,$Basics.toString($Date.year(date))]); - return A3($Model$Translations.getParamMessage, - params, - "ShortDate", - translations); - }); - _elm.View.Date.values = {_op: _op - ,renderShortDate: renderShortDate - ,renderLongDate: renderLongDate}; - return _elm.View.Date.values; -}; -Elm.View = Elm.View || {}; -Elm.View.Events = Elm.View.Events || {}; -Elm.View.Events.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.Events = _elm.View.Events || {}; - if (_elm.View.Events.values) - return _elm.View.Events.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.Events", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Html$Events = Elm.Html.Events.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var onSubmitPrevDefault = F2(function (address, - value) { - return A4($Html$Events.onWithOptions, - "submit", - _U.replace([["preventDefault" - ,true]], - $Html$Events.defaultOptions), - $Json$Decode.value, - function (_v0) { - var _ = _v0; - return A2($Signal.message, - address, - value); - }); - }); - _elm.View.Events.values = {_op: _op - ,onSubmitPrevDefault: onSubmitPrevDefault}; - return _elm.View.Events.values; -}; -Elm.View = Elm.View || {}; -Elm.View.Expand = Elm.View.Expand || {}; -Elm.View.Expand.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.Expand = _elm.View.Expand || {}; - if (_elm.View.Expand.values) - return _elm.View.Expand.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.Expand", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Html$Attributes = Elm.Html.Attributes.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $View$Icon = Elm.View.Icon.make(_elm); - var chevronIcon = F2(function (expandType, - isExpanded) { - var _v0 = {ctor: "_Tuple2" - ,_0: expandType - ,_1: isExpanded}; - switch (_v0.ctor) - {case "_Tuple2": - switch (_v0._0.ctor) - {case "ExpandDown": - switch (_v0._1) - {case false: - return "chevron-down"; - case true: return "chevron-up";} - break; - case "ExpandUp": switch (_v0._1) - {case false: - return "chevron-up"; - case true: - return "chevron-down";} - break;} - break;} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var expand = F2(function (expandType, - isExpanded) { - return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("expand")]), - _L.fromArray([$View$Icon.renderIcon(A2(chevronIcon, - expandType, - isExpanded))])); - }); - var ExpandDown = {ctor: "ExpandDown"}; - var ExpandUp = {ctor: "ExpandUp"}; - _elm.View.Expand.values = {_op: _op - ,expand: expand - ,ExpandUp: ExpandUp - ,ExpandDown: ExpandDown}; - return _elm.View.Expand.values; -}; -Elm.View = Elm.View || {}; -Elm.View.Header = Elm.View.Header || {}; -Elm.View.Header.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.Header = _elm.View.Header || {}; - if (_elm.View.Header.values) - return _elm.View.Header.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.Header", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Html$Attributes = Elm.Html.Attributes.make(_elm), - $Html$Events = Elm.Html.Events.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model = Elm.Model.make(_elm), - $Model$Translations = Elm.Model.Translations.make(_elm), - $Model$View = Elm.Model.View.make(_elm), - $Persona = Elm.Persona.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $View$Icon = Elm.View.Icon.make(_elm); - var renderHeader = function (model) { - return A2($Html.header, - _L.fromArray([]), - _L.fromArray([A2($Html.h1, - _L.fromArray([]), - _L.fromArray([$Html.text(A2($Model$Translations.getMessage, - "SharedCost", - model.translations))])) - ,function () { - var _v0 = model.view; - switch (_v0.ctor) - {case "LoadingView": - return $Html.text(""); - case "LoggedInView": - return A2($Html.button, - _L.fromArray([$Html$Attributes.$class("icon") - ,A2($Html$Events.onClick, - $Persona.operations.address, - $Persona.SignOut)]), - _L.fromArray([$View$Icon.renderIcon("sign-out")])); - case "SignInView": - return A2($Html.button, - _L.fromArray([$Html$Attributes.$class("icon") - ,A2($Html$Events.onClick, - $Persona.operations.address, - $Persona.SignIn)]), - _L.fromArray([$View$Icon.renderIcon("sign-in")]));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }()])); - }; - _elm.View.Header.values = {_op: _op - ,renderHeader: renderHeader}; - return _elm.View.Header.values; -}; -Elm.View = Elm.View || {}; -Elm.View.Icon = Elm.View.Icon || {}; -Elm.View.Icon.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.Icon = _elm.View.Icon || {}; - if (_elm.View.Icon.values) - return _elm.View.Icon.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.Icon", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Html$Attributes = Elm.Html.Attributes.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var renderIcon = function (iconClass) { - return A2($Html.i, - _L.fromArray([$Html$Attributes.$class(A2($Basics._op["++"], - "fa fa-fw fa-", - iconClass))]), - _L.fromArray([])); - }; - _elm.View.Icon.values = {_op: _op - ,renderIcon: renderIcon}; - return _elm.View.Icon.values; -}; -Elm.View = Elm.View || {}; -Elm.View.Loading = Elm.View.Loading || {}; -Elm.View.Loading.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.Loading = _elm.View.Loading || {}; - if (_elm.View.Loading.values) - return _elm.View.Loading.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.Loading", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var renderLoading = $Html.text(""); - _elm.View.Loading.values = {_op: _op - ,renderLoading: renderLoading}; - return _elm.View.Loading.values; -}; -Elm.View = Elm.View || {}; -Elm.View.LoggedIn = Elm.View.LoggedIn || {}; -Elm.View.LoggedIn.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.LoggedIn = _elm.View.LoggedIn || {}; - if (_elm.View.LoggedIn.values) - return _elm.View.LoggedIn.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.LoggedIn", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Html$Attributes = Elm.Html.Attributes.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model = Elm.Model.make(_elm), - $Model$View$LoggedInView = Elm.Model.View.LoggedInView.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $View$LoggedIn$Account = Elm.View.LoggedIn.Account.make(_elm), - $View$LoggedIn$Add = Elm.View.LoggedIn.Add.make(_elm), - $View$LoggedIn$Monthly = Elm.View.LoggedIn.Monthly.make(_elm), - $View$LoggedIn$Paging = Elm.View.LoggedIn.Paging.make(_elm), - $View$LoggedIn$Table = Elm.View.LoggedIn.Table.make(_elm); - var renderLoggedIn = F2(function (model, - loggedInView) { - return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("loggedIn")]), - _L.fromArray([A2($View$LoggedIn$Add.addPayment, - model, - loggedInView) - ,A2($Html.div, - _L.fromArray([$Html$Attributes.$class("expandables")]), - _L.fromArray([A2($View$LoggedIn$Account.account, - model, - loggedInView) - ,A2($View$LoggedIn$Monthly.monthlyPayments, - model, - loggedInView)])) - ,A2($View$LoggedIn$Table.paymentsTable, - model, - loggedInView) - ,$View$LoggedIn$Paging.paymentsPaging(loggedInView)])); - }); - _elm.View.LoggedIn.values = {_op: _op - ,renderLoggedIn: renderLoggedIn}; - return _elm.View.LoggedIn.values; -}; -Elm.View = Elm.View || {}; -Elm.View.LoggedIn = Elm.View.LoggedIn || {}; -Elm.View.LoggedIn.Account = Elm.View.LoggedIn.Account || {}; -Elm.View.LoggedIn.Account.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.LoggedIn = _elm.View.LoggedIn || {}; - _elm.View.LoggedIn.Account = _elm.View.LoggedIn.Account || {}; - if (_elm.View.LoggedIn.Account.values) - return _elm.View.LoggedIn.Account.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.LoggedIn.Account", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Html$Attributes = Elm.Html.Attributes.make(_elm), - $Html$Events = Elm.Html.Events.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model = Elm.Model.make(_elm), - $Model$Payer = Elm.Model.Payer.make(_elm), - $Model$Translations = Elm.Model.Translations.make(_elm), - $Model$User = Elm.Model.User.make(_elm), - $Model$View$LoggedIn$Account = Elm.Model.View.LoggedIn.Account.make(_elm), - $Model$View$LoggedInView = Elm.Model.View.LoggedInView.make(_elm), - $Result = Elm.Result.make(_elm), - $ServerCommunication = Elm.ServerCommunication.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Update = Elm.Update.make(_elm), - $Update$LoggedIn = Elm.Update.LoggedIn.make(_elm), - $Update$LoggedIn$Account = Elm.Update.LoggedIn.Account.make(_elm), - $View$Events = Elm.View.Events.make(_elm), - $View$Expand = Elm.View.Expand.make(_elm), - $View$Price = Elm.View.Price.make(_elm); - var toggleIncomeEdition = F2(function (className, - name) { - return A2($Html.button, - _L.fromArray([$Html$Attributes.type$("button") - ,$Html$Attributes.$class(className) - ,A2($Html$Events.onClick, - $Update.actions.address, - function ($) { - return $Update.UpdateLoggedIn($Update$LoggedIn.UpdateAccount($)); - }($Update$LoggedIn$Account.ToggleIncomeEdition))]), - _L.fromArray([$Html.text(name)])); - }); - var incomeEdition = F3(function (model, - account, - edition) { - return A2($Html.form, - _L.fromArray([function () { - var _v0 = A2($Model$View$LoggedIn$Account.validateIncome, - edition.income, - model.translations); - switch (_v0.ctor) - {case "Err": - return A2($View$Events.onSubmitPrevDefault, - $Update.actions.address, - function ($) { - return $Update.UpdateLoggedIn($Update$LoggedIn.UpdateAccount($Update$LoggedIn$Account.UpdateEditionError($))); - }(_v0._0)); - case "Ok": - return A2($View$Events.onSubmitPrevDefault, - $ServerCommunication.serverCommunications.address, - A2($ServerCommunication.SetIncome, - model.currentTime, - _v0._0));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }() - ,$Html$Attributes.$class("income")]), - _L.fromArray([A2($Html.label, - _L.fromArray([$Html$Attributes.$for("incomeInput")]), - _L.fromArray([$Html.text(A2($Model$Translations.getMessage, - "NewIncome", - model.translations))])) - ,A2($Html.input, - _L.fromArray([$Html$Attributes.id("incomeInput") - ,$Html$Attributes.value(edition.income) - ,A3($Html$Events.on, - "input", - $Html$Events.targetValue, - function ($) { - return $Signal.message($Update.actions.address)($Update.UpdateLoggedIn($Update$LoggedIn.UpdateAccount($Update$LoggedIn$Account.UpdateIncomeEdition($)))); - }) - ,$Html$Attributes.maxlength(10)]), - _L.fromArray([])) - ,A2($Html.button, - _L.fromArray([$Html$Attributes.type$("submit") - ,$Html$Attributes.$class("validateIncomeEdition")]), - _L.fromArray([$Html.text(A2($Model$Translations.getMessage, - "Validate", - model.translations))])) - ,A2(toggleIncomeEdition, - "undoIncomeEdition", - A2($Model$Translations.getMessage, - "Undo", - model.translations)) - ,function () { - var _v3 = edition.error; - switch (_v3.ctor) - {case "Just": - return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("error")]), - _L.fromArray([$Html.text(_v3._0)])); - case "Nothing": - return $Html.text("");} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }()])); - }); - var incomeRead = F2(function (model, - account) { - return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("income")]), - _L.fromArray([function () { - var _v5 = $Model$View$LoggedIn$Account.getCurrentIncome(account); - switch (_v5.ctor) - {case "Just": - return $Html.text(A3($Model$Translations.getParamMessage, - _L.fromArray([A2($View$Price.price, - model, - _v5._0)]), - "Income", - model.translations)); - case "Nothing": - return $Html.text(A2($Model$Translations.getMessage, - "NoIncome", - model.translations));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }() - ,A2(toggleIncomeEdition, - "editIncomeEdition", - A2($Model$Translations.getMessage, - "Edit", - model.translations))])); - }); - var income = F2(function (model, - account) { - var _v7 = account.incomeEdition; - switch (_v7.ctor) - {case "Just": - return A3(incomeEdition, - model, - account, - _v7._0); - case "Nothing": - return A2(incomeRead, - model, - account);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var exceedingPayer = F3(function (model, - loggedInView, - payer) { - return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("exceedingPayer")]), - _L.fromArray([A2($Html.span, - _L.fromArray([$Html$Attributes.$class("userName")]), - _L.fromArray([$Html.text($Maybe.withDefault("−")($Model$User.getUserName(loggedInView.users)(payer.userId)))])) - ,A2($Html.span, - _L.fromArray([$Html$Attributes.$class("amount")]), - _L.fromArray([$Html.text(A2($Basics._op["++"], - "+ ", - A2($View$Price.price, - model, - payer.amount)))]))])); - }); - var exceedingPayers = F2(function (model, - loggedInView) { - return A2($Html.button, - _L.fromArray([$Html$Attributes.$class("header") - ,A2($Html$Events.onClick, - $Update.actions.address, - function ($) { - return $Update.UpdateLoggedIn($Update$LoggedIn.UpdateAccount($)); - }($Update$LoggedIn$Account.ToggleDetail))]), - A2($Basics._op["++"], - A2($List.map, - A2(exceedingPayer, - model, - loggedInView), - A2($Model$Payer.getOrderedExceedingPayers, - model.currentTime, - loggedInView.account.payers)), - _L.fromArray([A2($View$Expand.expand, - $View$Expand.ExpandDown, - loggedInView.account.visibleDetail)]))); - }); - var account = F2(function (model, - loggedInView) { - var account = loggedInView.account; - return A2($Html.div, - _L.fromArray([$Html$Attributes.classList(_L.fromArray([{ctor: "_Tuple2" - ,_0: "account" - ,_1: true} - ,{ctor: "_Tuple2" - ,_0: "detail" - ,_1: account.visibleDetail}]))]), - _L.fromArray([A2(exceedingPayers, - model, - loggedInView) - ,account.visibleDetail ? A2(income, - model, - account) : $Html.text("")])); - }); - _elm.View.LoggedIn.Account.values = {_op: _op - ,account: account}; - return _elm.View.LoggedIn.Account.values; -}; -Elm.View = Elm.View || {}; -Elm.View.LoggedIn = Elm.View.LoggedIn || {}; -Elm.View.LoggedIn.Add = Elm.View.LoggedIn.Add || {}; -Elm.View.LoggedIn.Add.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.LoggedIn = _elm.View.LoggedIn || {}; - _elm.View.LoggedIn.Add = _elm.View.LoggedIn.Add || {}; - if (_elm.View.LoggedIn.Add.values) - return _elm.View.LoggedIn.Add.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.LoggedIn.Add", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Html$Attributes = Elm.Html.Attributes.make(_elm), - $Html$Events = Elm.Html.Events.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model = Elm.Model.make(_elm), - $Model$Translations = Elm.Model.Translations.make(_elm), - $Model$View$LoggedIn$Add = Elm.Model.View.LoggedIn.Add.make(_elm), - $Model$View$LoggedInView = Elm.Model.View.LoggedInView.make(_elm), - $Result = Elm.Result.make(_elm), - $ServerCommunication = Elm.ServerCommunication.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Update = Elm.Update.make(_elm), - $Update$LoggedIn = Elm.Update.LoggedIn.make(_elm), - $Update$LoggedIn$Add = Elm.Update.LoggedIn.Add.make(_elm), - $Utils$Either = Elm.Utils.Either.make(_elm), - $Utils$Maybe = Elm.Utils.Maybe.make(_elm), - $View$Events = Elm.View.Events.make(_elm), - $View$Icon = Elm.View.Icon.make(_elm); - var paymentFrequency = F2(function (model, - addPayment) { - return A2($Html.button, - _L.fromArray([$Html$Attributes.type$("button") - ,$Html$Attributes.$class("frequency") - ,A2($Html$Events.onClick, - $Update.actions.address, - function ($) { - return $Update.UpdateLoggedIn($Update$LoggedIn.UpdateAdd($)); - }($Update$LoggedIn$Add.ToggleFrequency))]), - _L.fromArray([A2($Html.div, - _L.fromArray([$Html$Attributes.classList(_L.fromArray([{ctor: "_Tuple2" - ,_0: "punctual" - ,_1: true} - ,{ctor: "_Tuple2" - ,_0: "selected" - ,_1: _U.eq(addPayment.frequency, - $Model$View$LoggedIn$Add.Punctual)}]))]), - _L.fromArray([$Html.text(A2($Model$Translations.getMessage, - "Punctual", - model.translations))])) - ,A2($Html.div, - _L.fromArray([$Html$Attributes.classList(_L.fromArray([{ctor: "_Tuple2" - ,_0: "monthly" - ,_1: true} - ,{ctor: "_Tuple2" - ,_0: "selected" - ,_1: _U.eq(addPayment.frequency, - $Model$View$LoggedIn$Add.Monthly)}]))]), - _L.fromArray([$Html.text(A2($Model$Translations.getMessage, - "Monthly", - model.translations))]))])); - }); - var addPaymentCost = F2(function (model, - addPayment) { - return A2($Html.div, - _L.fromArray([$Html$Attributes.classList(_L.fromArray([{ctor: "_Tuple2" - ,_0: "cost" - ,_1: true} - ,{ctor: "_Tuple2" - ,_0: "error" - ,_1: $Utils$Maybe.isJust(addPayment.costError)}]))]), - _L.fromArray([A2($Html.input, - _L.fromArray([$Html$Attributes.id("costInput") - ,$Html$Attributes.value(addPayment.cost) - ,A3($Html$Events.on, - "input", - $Html$Events.targetValue, - function ($) { - return $Signal.message($Update.actions.address)($Update.UpdateLoggedIn($Update$LoggedIn.UpdateAdd($Update$LoggedIn$Add.UpdateCost($)))); - }) - ,$Html$Attributes.maxlength(7)]), - _L.fromArray([])) - ,A2($Html.label, - _L.fromArray([$Html$Attributes.$for("costInput")]), - _L.fromArray([$Html.text(model.config.currency)])) - ,function () { - var _v0 = addPayment.costError; - switch (_v0.ctor) - {case "Just": - return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("errorMessage")]), - _L.fromArray([$Html.text(_v0._0)])); - case "Nothing": - return $Html.text("");} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }()])); - }); - var addPaymentName = function (addPayment) { - return A2($Html.div, - _L.fromArray([$Html$Attributes.classList(_L.fromArray([{ctor: "_Tuple2" - ,_0: "name" - ,_1: true} - ,{ctor: "_Tuple2" - ,_0: "error" - ,_1: $Utils$Maybe.isJust(addPayment.nameError)}]))]), - _L.fromArray([A2($Html.input, - _L.fromArray([$Html$Attributes.id("nameInput") - ,$Html$Attributes.value(addPayment.name) - ,A3($Html$Events.on, - "input", - $Html$Events.targetValue, - function ($) { - return $Signal.message($Update.actions.address)($Update.UpdateLoggedIn($Update$LoggedIn.UpdateAdd($Update$LoggedIn$Add.UpdateName($)))); - }) - ,$Html$Attributes.maxlength(20)]), - _L.fromArray([])) - ,A2($Html.label, - _L.fromArray([$Html$Attributes.$for("nameInput")]), - _L.fromArray([$View$Icon.renderIcon("shopping-cart")])) - ,function () { - var _v2 = addPayment.nameError; - switch (_v2.ctor) - {case "Just": - return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("errorMessage")]), - _L.fromArray([$Html.text(_v2._0)])); - case "Nothing": - return $Html.text("");} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }()])); - }; - var addPayment = F2(function (model, - loggedInView) { - return A2($Html.form, - _L.fromArray([function () { - var _v4 = {ctor: "_Tuple2" - ,_0: A2($Model$View$LoggedIn$Add.validateName, - loggedInView.add.name, - model.translations) - ,_1: A2($Model$View$LoggedIn$Add.validateCost, - loggedInView.add.cost, - model.translations)}; - switch (_v4.ctor) - {case "_Tuple2": - switch (_v4._0.ctor) - {case "Ok": switch (_v4._1.ctor) - {case "Ok": - var action = function () { - var _v9 = loggedInView.add.frequency; - switch (_v9.ctor) - {case "Monthly": - return A2($ServerCommunication.AddMonthlyPayment, - _v4._0._0, - _v4._1._0); - case "Punctual": - return A3($ServerCommunication.AddPayment, - loggedInView.account.me, - _v4._0._0, - _v4._1._0);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }(); - return A2($View$Events.onSubmitPrevDefault, - $ServerCommunication.serverCommunications.address, - action);} - break;} - return A2($View$Events.onSubmitPrevDefault, - $Update.actions.address, - $Update.UpdateLoggedIn($Update$LoggedIn.UpdateAdd(A2($Update$LoggedIn$Add.AddError, - $Utils$Either.toMaybeError(_v4._0), - $Utils$Either.toMaybeError(_v4._1)))));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }() - ,$Html$Attributes.$class("addPayment")]), - _L.fromArray([addPaymentName(loggedInView.add) - ,A2(addPaymentCost, - model, - loggedInView.add) - ,A2(paymentFrequency, - model, - loggedInView.add) - ,A2($Html.button, - _L.fromArray([$Html$Attributes.type$("submit") - ,$Html$Attributes.$class("add")]), - _L.fromArray([$Html.text(A2($Model$Translations.getMessage, - "Add", - model.translations))]))])); - }); - _elm.View.LoggedIn.Add.values = {_op: _op - ,addPayment: addPayment}; - return _elm.View.LoggedIn.Add.values; -}; -Elm.View = Elm.View || {}; -Elm.View.LoggedIn = Elm.View.LoggedIn || {}; -Elm.View.LoggedIn.Monthly = Elm.View.LoggedIn.Monthly || {}; -Elm.View.LoggedIn.Monthly.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.LoggedIn = _elm.View.LoggedIn || {}; - _elm.View.LoggedIn.Monthly = _elm.View.LoggedIn.Monthly || {}; - if (_elm.View.LoggedIn.Monthly.values) - return _elm.View.LoggedIn.Monthly.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.LoggedIn.Monthly", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Html$Attributes = Elm.Html.Attributes.make(_elm), - $Html$Events = Elm.Html.Events.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model = Elm.Model.make(_elm), - $Model$Payment = Elm.Model.Payment.make(_elm), - $Model$Translations = Elm.Model.Translations.make(_elm), - $Model$View$LoggedIn$Monthly = Elm.Model.View.LoggedIn.Monthly.make(_elm), - $Model$View$LoggedInView = Elm.Model.View.LoggedInView.make(_elm), - $Result = Elm.Result.make(_elm), - $ServerCommunication = Elm.ServerCommunication.make(_elm), - $Signal = Elm.Signal.make(_elm), - $String = Elm.String.make(_elm), - $Update = Elm.Update.make(_elm), - $Update$LoggedIn = Elm.Update.LoggedIn.make(_elm), - $Update$LoggedIn$Monthly = Elm.Update.LoggedIn.Monthly.make(_elm), - $View$Expand = Elm.View.Expand.make(_elm), - $View$Icon = Elm.View.Icon.make(_elm), - $View$Price = Elm.View.Price.make(_elm); - var paymentLine = F3(function (model, - loggedInView, - payment) { - return A2($Html.a, - _L.fromArray([$Html$Attributes.classList(_L.fromArray([{ctor: "_Tuple2" - ,_0: "row" - ,_1: true} - ,{ctor: "_Tuple2" - ,_0: "edition" - ,_1: _U.eq(loggedInView.paymentEdition, - $Maybe.Just(payment.id))}])) - ,A2($Html$Events.onClick, - $Update.actions.address, - $Update.UpdateLoggedIn($Update$LoggedIn.ToggleEdit(payment.id)))]), - _L.fromArray([A2($Html.div, - _L.fromArray([$Html$Attributes.$class("cell category")]), - _L.fromArray([$Html.text(payment.name)])) - ,A2($Html.div, - _L.fromArray([$Html$Attributes.classList(_L.fromArray([{ctor: "_Tuple2" - ,_0: "cell cost" - ,_1: true} - ,{ctor: "_Tuple2" - ,_0: "refund" - ,_1: _U.cmp(payment.cost, - 0) < 0}]))]), - _L.fromArray([$Html.text(A2($View$Price.price, - model, - payment.cost))])) - ,A2($Html.div, - _L.fromArray([$Html$Attributes.$class("cell delete") - ,A2($Html$Events.onClick, - $ServerCommunication.serverCommunications.address, - $ServerCommunication.DeleteMonthlyPayment(payment.id))]), - _L.fromArray([A2($Html.button, - _L.fromArray([]), - _L.fromArray([$View$Icon.renderIcon("times")]))]))])); - }); - var paymentsTable = F3(function (model, - loggedInView, - monthly) { - return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("table")]), - $List.map(A2(paymentLine, - model, - loggedInView))($List.sortBy(function ($) { - return $String.toLower(function (_) { - return _.name; - }($)); - })(monthly.payments))); - }); - var monthlyCount = F2(function (model, - monthly) { - var total = function ($) { - return $List.sum($List.map(function (_) { - return _.cost; - })($)); - }(monthly.payments); - var count = $List.length(monthly.payments); - var key = _U.cmp(count, - 1) > 0 ? "PluralMonthlyCount" : "SingularMonthlyCount"; - return A2($Html.button, - _L.fromArray([$Html$Attributes.$class("header") - ,A2($Html$Events.onClick, - $Update.actions.address, - function ($) { - return $Update.UpdateLoggedIn($Update$LoggedIn.UpdateMonthly($)); - }($Update$LoggedIn$Monthly.ToggleDetail))]), - _L.fromArray([$Html.text(A3($Model$Translations.getParamMessage, - _L.fromArray([$Basics.toString(count) - ,A2($View$Price.price, - model, - total)]), - key, - model.translations)) - ,A2($View$Expand.expand, - $View$Expand.ExpandDown, - monthly.visibleDetail)])); - }); - var monthlyPayments = F2(function (model, - loggedInView) { - var monthly = loggedInView.monthly; - return _U.eq($List.length(monthly.payments), - 0) ? $Html.text("") : A2($Html.div, - _L.fromArray([$Html$Attributes.classList(_L.fromArray([{ctor: "_Tuple2" - ,_0: "monthlyPayments" - ,_1: true} - ,{ctor: "_Tuple2" - ,_0: "detail" - ,_1: monthly.visibleDetail}]))]), - _L.fromArray([A2(monthlyCount, - model, - monthly) - ,monthly.visibleDetail ? A3(paymentsTable, - model, - loggedInView, - monthly) : $Html.text("")])); - }); - _elm.View.LoggedIn.Monthly.values = {_op: _op - ,monthlyPayments: monthlyPayments}; - return _elm.View.LoggedIn.Monthly.values; -}; -Elm.View = Elm.View || {}; -Elm.View.LoggedIn = Elm.View.LoggedIn || {}; -Elm.View.LoggedIn.Paging = Elm.View.LoggedIn.Paging || {}; -Elm.View.LoggedIn.Paging.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.LoggedIn = _elm.View.LoggedIn || {}; - _elm.View.LoggedIn.Paging = _elm.View.LoggedIn.Paging || {}; - if (_elm.View.LoggedIn.Paging.values) - return _elm.View.LoggedIn.Paging.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.LoggedIn.Paging", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Html$Attributes = Elm.Html.Attributes.make(_elm), - $Html$Events = Elm.Html.Events.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model$Payment = Elm.Model.Payment.make(_elm), - $Model$View$LoggedInView = Elm.Model.View.LoggedInView.make(_elm), - $Result = Elm.Result.make(_elm), - $ServerCommunication = Elm.ServerCommunication.make(_elm), - $Signal = Elm.Signal.make(_elm), - $View$Icon = Elm.View.Icon.make(_elm); - var paymentsPage = F2(function (loggedInView, - page) { - var onCurrentPage = _U.eq(page, - loggedInView.currentPage); - return A2($Html.button, - _L.fromArray([$Html$Attributes.classList(_L.fromArray([{ctor: "_Tuple2" - ,_0: "page" - ,_1: true} - ,{ctor: "_Tuple2" - ,_0: "current" - ,_1: onCurrentPage}])) - ,$Html$Events.onClick($ServerCommunication.serverCommunications.address)(onCurrentPage ? $ServerCommunication.NoCommunication : $ServerCommunication.UpdatePage(page))]), - _L.fromArray([$Html.text($Basics.toString(page))])); - }); - var lastPage = function (maxPage) { - return A2($Html.button, - _L.fromArray([$Html$Attributes.$class("page") - ,A2($Html$Events.onClick, - $ServerCommunication.serverCommunications.address, - $ServerCommunication.UpdatePage(maxPage))]), - _L.fromArray([$View$Icon.renderIcon("fast-forward")])); - }; - var nextPage = function (loggedInView) { - return A2($Html.button, - _L.fromArray([$Html$Attributes.$class("page") - ,A2($Html$Events.onClick, - $ServerCommunication.serverCommunications.address, - $ServerCommunication.UpdatePage(loggedInView.currentPage + 1))]), - _L.fromArray([$View$Icon.renderIcon("forward")])); - }; - var previousPage = function (loggedInView) { - return A2($Html.button, - _L.fromArray([$Html$Attributes.$class("page") - ,A2($Html$Events.onClick, - $ServerCommunication.serverCommunications.address, - $ServerCommunication.UpdatePage(loggedInView.currentPage - 1))]), - _L.fromArray([$View$Icon.renderIcon("backward")])); - }; - var firstPage = A2($Html.button, - _L.fromArray([$Html$Attributes.$class("page") - ,A2($Html$Events.onClick, - $ServerCommunication.serverCommunications.address, - $ServerCommunication.UpdatePage(1))]), - _L.fromArray([$View$Icon.renderIcon("fast-backward")])); - var showedPages = 5; - var truncatePages = F2(function (currentPage, - pages) { - var showedRightPages = $Basics.floor(($Basics.toFloat(showedPages) - 1) / 2); - var showedLeftPages = $Basics.ceiling(($Basics.toFloat(showedPages) - 1) / 2); - var totalPages = $List.length(pages); - var truncatedPages = _U.cmp(currentPage, - showedLeftPages) < 0 ? _L.range(1, - showedPages) : _U.cmp(currentPage, - totalPages - showedRightPages) > 0 ? _L.range(totalPages - showedPages, - totalPages) : _L.range(currentPage - showedLeftPages, - currentPage + showedRightPages); - return A2($List.filter, - A2($Basics.flip, - $List.member, - pages), - truncatedPages); - }); - var paymentsPaging = function (loggedInView) { - var maxPage = $Basics.ceiling($Basics.toFloat(loggedInView.paymentsCount) / $Basics.toFloat($Model$Payment.perPage)); - var pages = A2(truncatePages, - loggedInView.currentPage, - _L.range(1,maxPage)); - return _U.eq(maxPage, - 1) ? $Html.text("") : A2($Html.div, - _L.fromArray([$Html$Attributes.$class("pages")]), - A2($Basics._op["++"], - _U.cmp(loggedInView.currentPage, - 1) > 0 ? _L.fromArray([firstPage - ,previousPage(loggedInView)]) : _L.fromArray([]), - A2($Basics._op["++"], - A2($List.map, - paymentsPage(loggedInView), - pages), - _U.cmp(loggedInView.currentPage, - maxPage) < 0 ? _L.fromArray([nextPage(loggedInView) - ,lastPage(maxPage)]) : _L.fromArray([])))); - }; - _elm.View.LoggedIn.Paging.values = {_op: _op - ,paymentsPaging: paymentsPaging}; - return _elm.View.LoggedIn.Paging.values; -}; -Elm.View = Elm.View || {}; -Elm.View.LoggedIn = Elm.View.LoggedIn || {}; -Elm.View.LoggedIn.Table = Elm.View.LoggedIn.Table || {}; -Elm.View.LoggedIn.Table.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.LoggedIn = _elm.View.LoggedIn || {}; - _elm.View.LoggedIn.Table = _elm.View.LoggedIn.Table || {}; - if (_elm.View.LoggedIn.Table.values) - return _elm.View.LoggedIn.Table.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.LoggedIn.Table", - $Basics = Elm.Basics.make(_elm), - $Date = Elm.Date.make(_elm), - $Html = Elm.Html.make(_elm), - $Html$Attributes = Elm.Html.Attributes.make(_elm), - $Html$Events = Elm.Html.Events.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model = Elm.Model.make(_elm), - $Model$Payment = Elm.Model.Payment.make(_elm), - $Model$User = Elm.Model.User.make(_elm), - $Model$View$LoggedInView = Elm.Model.View.LoggedInView.make(_elm), - $Result = Elm.Result.make(_elm), - $ServerCommunication = Elm.ServerCommunication.make(_elm), - $Signal = Elm.Signal.make(_elm), - $Update = Elm.Update.make(_elm), - $Update$LoggedIn = Elm.Update.LoggedIn.make(_elm), - $View$Date = Elm.View.Date.make(_elm), - $View$Icon = Elm.View.Icon.make(_elm), - $View$Price = Elm.View.Price.make(_elm); - var paymentLine = F3(function (model, - loggedInView, - payment) { - return A2($Html.a, - _L.fromArray([$Html$Attributes.classList(_L.fromArray([{ctor: "_Tuple2" - ,_0: "row" - ,_1: true} - ,{ctor: "_Tuple2" - ,_0: "edition" - ,_1: _U.eq(loggedInView.paymentEdition, - $Maybe.Just(payment.id))}])) - ,A2($Html$Events.onClick, - $Update.actions.address, - $Update.UpdateLoggedIn($Update$LoggedIn.ToggleEdit(payment.id)))]), - _L.fromArray([A2($Html.div, - _L.fromArray([$Html$Attributes.$class("cell category")]), - _L.fromArray([$Html.text(payment.name)])) - ,A2($Html.div, - _L.fromArray([$Html$Attributes.classList(_L.fromArray([{ctor: "_Tuple2" - ,_0: "cell cost" - ,_1: true} - ,{ctor: "_Tuple2" - ,_0: "refund" - ,_1: _U.cmp(payment.cost, - 0) < 0}]))]), - _L.fromArray([$Html.text(A2($View$Price.price, - model, - payment.cost))])) - ,A2($Html.div, - _L.fromArray([$Html$Attributes.$class("cell user")]), - _L.fromArray([$Html.text($Maybe.withDefault("−")($Model$User.getUserName(loggedInView.users)(payment.userId)))])) - ,A2($Html.div, - _L.fromArray([$Html$Attributes.$class("cell date")]), - _L.fromArray([A2($Html.span, - _L.fromArray([$Html$Attributes.$class("shortDate")]), - _L.fromArray([$Html.text(A2($View$Date.renderShortDate, - payment.creation, - model.translations))])) - ,A2($Html.span, - _L.fromArray([$Html$Attributes.$class("longDate")]), - _L.fromArray([$Html.text(A2($View$Date.renderLongDate, - payment.creation, - model.translations))]))])) - ,_U.eq(loggedInView.account.me, - payment.userId) ? A2($Html.div, - _L.fromArray([$Html$Attributes.$class("cell delete")]), - _L.fromArray([A2($Html.button, - _L.fromArray([A2($Html$Events.onClick, - $ServerCommunication.serverCommunications.address, - A2($ServerCommunication.DeletePayment, - payment, - loggedInView.currentPage))]), - _L.fromArray([$View$Icon.renderIcon("times")]))])) : A2($Html.div, - _L.fromArray([$Html$Attributes.$class("cell")]), - _L.fromArray([]))])); - }); - var paymentLines = F2(function (model, - loggedInView) { - return $List.map(A2(paymentLine, - model, - loggedInView))($List.reverse($List.sortBy(function ($) { - return $Date.toTime(function (_) { - return _.creation; - }($)); - })(loggedInView.payments))); - }); - var headerLine = function (model) { - return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("header")]), - _L.fromArray([A2($Html.div, - _L.fromArray([$Html$Attributes.$class("cell category")]), - _L.fromArray([$View$Icon.renderIcon("shopping-cart")])) - ,A2($Html.div, - _L.fromArray([$Html$Attributes.$class("cell cost")]), - _L.fromArray([$Html.text(model.config.currency)])) - ,A2($Html.div, - _L.fromArray([$Html$Attributes.$class("cell user")]), - _L.fromArray([$View$Icon.renderIcon("user")])) - ,A2($Html.div, - _L.fromArray([$Html$Attributes.$class("cell date")]), - _L.fromArray([$View$Icon.renderIcon("calendar")])) - ,A2($Html.div, - _L.fromArray([$Html$Attributes.$class("cell")]), - _L.fromArray([]))])); - }; - var paymentsTable = F2(function (model, - loggedInView) { - return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("table")]), - A2($List._op["::"], - headerLine(model), - A2(paymentLines, - model, - loggedInView))); - }); - _elm.View.LoggedIn.Table.values = {_op: _op - ,paymentsTable: paymentsTable}; - return _elm.View.LoggedIn.Table.values; -}; -Elm.View = Elm.View || {}; -Elm.View.Page = Elm.View.Page || {}; -Elm.View.Page.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.Page = _elm.View.Page || {}; - if (_elm.View.Page.values) - return _elm.View.Page.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.Page", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model = Elm.Model.make(_elm), - $Model$View = Elm.Model.View.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $View$Header = Elm.View.Header.make(_elm), - $View$Loading = Elm.View.Loading.make(_elm), - $View$LoggedIn = Elm.View.LoggedIn.make(_elm), - $View$SignIn = Elm.View.SignIn.make(_elm); - var renderMain = function (model) { - var _v0 = model.view; - switch (_v0.ctor) - {case "LoadingView": - return $View$Loading.renderLoading; - case "LoggedInView": - return A2($View$LoggedIn.renderLoggedIn, - model, - _v0._0); - case "SignInView": - return A2($View$SignIn.renderSignIn, - model, - _v0._0);} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }; - var renderPage = function (model) { - return A2($Html.div, - _L.fromArray([]), - _L.fromArray([$View$Header.renderHeader(model) - ,renderMain(model)])); - }; - _elm.View.Page.values = {_op: _op - ,renderPage: renderPage}; - return _elm.View.Page.values; -}; -Elm.View = Elm.View || {}; -Elm.View.Price = Elm.View.Price || {}; -Elm.View.Price.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.Price = _elm.View.Price || {}; - if (_elm.View.Price.values) - return _elm.View.Price.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.Price", - $Basics = Elm.Basics.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model = Elm.Model.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm), - $String = Elm.String.make(_elm); - var group = F2(function (n,xs) { - if (_U.cmp($List.length(xs), - n) < 1) - return _L.fromArray([xs]); - else { - var drop = A2($List.drop, - n, - xs); - var take = A2($List.take,n,xs); - return A2($List._op["::"], - take, - A2(group,n,drop)); - } - }); - var formatInt = function (n) { - return $String.append(_U.cmp(n, - 0) < 0 ? "-" : "")($String.fromList($List.reverse($List.concat($List.intersperse(_L.fromArray([_U.chr(" ")]))(group(3)($List.reverse($String.toList($Basics.toString($Basics.abs(n)))))))))); - }; - var price = F2(function (model, - amount) { - return A2($Basics._op["++"], - formatInt(amount), - A2($Basics._op["++"], - " ", - model.config.currency)); - }); - _elm.View.Price.values = {_op: _op - ,price: price}; - return _elm.View.Price.values; -}; -Elm.View = Elm.View || {}; -Elm.View.SignIn = Elm.View.SignIn || {}; -Elm.View.SignIn.make = function (_elm) { - "use strict"; - _elm.View = _elm.View || {}; - _elm.View.SignIn = _elm.View.SignIn || {}; - if (_elm.View.SignIn.values) - return _elm.View.SignIn.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "View.SignIn", - $Basics = Elm.Basics.make(_elm), - $Html = Elm.Html.make(_elm), - $Html$Attributes = Elm.Html.Attributes.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Model = Elm.Model.make(_elm), - $Model$Translations = Elm.Model.Translations.make(_elm), - $Model$View$SignInView = Elm.Model.View.SignInView.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var signInResult = F2(function (model, - signInView) { - var _v0 = signInView.result; - switch (_v0.ctor) - {case "Just": - switch (_v0._0.ctor) - {case "Err": - return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("error")]), - _L.fromArray([$Html.text(_v0._0._0)])); - case "Ok": return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("success")]), - _L.fromArray([$Html.text(A2($Model$Translations.getMessage, - "SignInEmailSent", - model.translations))]));} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - case "Nothing": - return $Html.text("");} - _U.badCase($moduleName, - "bugs in reporting the exact location right now"); - }); - var renderSignIn = F2(function (model, - signInView) { - return A2($Html.div, - _L.fromArray([$Html$Attributes.$class("signIn")]), - _L.fromArray([A2($Html.div, - _L.fromArray([$Html$Attributes.$class("result")]), - _L.fromArray([A2(signInResult, - model, - signInView)]))])); - }); - _elm.View.SignIn.values = {_op: _op - ,renderSignIn: renderSignIn}; - return _elm.View.SignIn.values; -}; -Elm.VirtualDom = Elm.VirtualDom || {}; -Elm.VirtualDom.make = function (_elm) { - "use strict"; - _elm.VirtualDom = _elm.VirtualDom || {}; - if (_elm.VirtualDom.values) - return _elm.VirtualDom.values; - var _op = {}, - _N = Elm.Native, - _U = _N.Utils.make(_elm), - _L = _N.List.make(_elm), - $moduleName = "VirtualDom", - $Basics = Elm.Basics.make(_elm), - $Graphics$Element = Elm.Graphics.Element.make(_elm), - $Json$Decode = Elm.Json.Decode.make(_elm), - $List = Elm.List.make(_elm), - $Maybe = Elm.Maybe.make(_elm), - $Native$VirtualDom = Elm.Native.VirtualDom.make(_elm), - $Result = Elm.Result.make(_elm), - $Signal = Elm.Signal.make(_elm); - var lazy3 = $Native$VirtualDom.lazy3; - var lazy2 = $Native$VirtualDom.lazy2; - var lazy = $Native$VirtualDom.lazy; - var defaultOptions = {_: {} - ,preventDefault: false - ,stopPropagation: false}; - var Options = F2(function (a, - b) { - return {_: {} - ,preventDefault: b - ,stopPropagation: a}; - }); - var onWithOptions = $Native$VirtualDom.on; - var on = F3(function (eventName, - decoder, - toMessage) { - return A4($Native$VirtualDom.on, - eventName, - defaultOptions, - decoder, - toMessage); - }); - var attribute = $Native$VirtualDom.attribute; - var property = $Native$VirtualDom.property; - var Property = {ctor: "Property"}; - var fromElement = $Native$VirtualDom.fromElement; - var toElement = $Native$VirtualDom.toElement; - var text = $Native$VirtualDom.text; - var node = $Native$VirtualDom.node; - var Node = {ctor: "Node"}; - _elm.VirtualDom.values = {_op: _op - ,text: text - ,node: node - ,toElement: toElement - ,fromElement: fromElement - ,property: property - ,attribute: attribute - ,on: on - ,onWithOptions: onWithOptions - ,defaultOptions: defaultOptions - ,lazy: lazy - ,lazy2: lazy2 - ,lazy3: lazy3 - ,Options: Options}; - return _elm.VirtualDom.values; -}; diff --git a/src/client/elm/Model/Payer.elm b/src/client/elm/Model/Payer.elm index 9fd1bb5..f39a612 100644 --- a/src/client/elm/Model/Payer.elm +++ b/src/client/elm/Model/Payer.elm @@ -51,9 +51,9 @@ updatePayers payers userId creation amountDiff = |> Maybe.withDefault False in if postIncome then - Just { payer | postIncomePaymentSum <- payer.postIncomePaymentSum + amountDiff } + Just { payer | postIncomePaymentSum = payer.postIncomePaymentSum + amountDiff } else - Just { payer | preIncomePaymentSum <- payer.preIncomePaymentSum + amountDiff } + Just { payer | preIncomePaymentSum = payer.preIncomePaymentSum + amountDiff } Nothing -> Nothing ) diff --git a/src/client/elm/Model/Translations.elm b/src/client/elm/Model/Translations.elm index bec8c9b..dbf378c 100644 --- a/src/client/elm/Model/Translations.elm +++ b/src/client/elm/Model/Translations.elm @@ -45,7 +45,7 @@ partDecoderWithTag : String -> Json.Decoder MessagePart partDecoderWithTag tag = case tag of "Order" -> Json.object1 Order ("contents" := Json.int) - "Str" -> Json.object1 Str ("contents" := Json.string) + _ -> Json.object1 Str ("contents" := Json.string) ----- diff --git a/src/client/elm/Model/View/LoggedIn/Account.elm b/src/client/elm/Model/View/LoggedIn/Account.elm index 2bb3ae7..4638c8d 100644 --- a/src/client/elm/Model/View/LoggedIn/Account.elm +++ b/src/client/elm/Model/View/LoggedIn/Account.elm @@ -31,7 +31,7 @@ initAccount me payers = payers |> mapValues (\payer -> - { payer | incomes <- List.sortBy .creation payer.incomes } + { payer | incomes = List.sortBy .creation payer.incomes } ) , visibleDetail = False , incomeEdition = Nothing diff --git a/src/client/elm/Update.elm b/src/client/elm/Update.elm index 3c4614a..ed4b99d 100644 --- a/src/client/elm/Update.elm +++ b/src/client/elm/Update.elm @@ -35,23 +35,23 @@ updateModel action model = NoOp -> model UpdateTime time -> - { model | currentTime <- time } + { model | currentTime = time } GoSignInView -> - { model | view <- V.SignInView initSignInView } + { model | view = V.SignInView initSignInView } GoLoggedInView users me monthlyPayments payments paymentsCount payers -> - { model | view <- V.LoggedInView (initLoggedInView users me monthlyPayments payments paymentsCount payers) } + { model | view = V.LoggedInView (initLoggedInView users me monthlyPayments payments paymentsCount payers) } SignInError msg -> - let signInView = { initSignInView | result <- Just (Err msg) } - in { model | view <- V.SignInView signInView } + let signInView = { initSignInView | result = Just (Err msg) } + in { model | view = V.SignInView signInView } UpdateSignIn signInAction -> case model.view of V.SignInView signInView -> - { model | view <- V.SignInView (updateSignIn signInAction signInView) } + { model | view = V.SignInView (updateSignIn signInAction signInView) } _ -> model UpdateLoggedIn loggedAction -> case model.view of V.LoggedInView loggedInView -> - { model | view <- V.LoggedInView (updateLoggedIn model loggedAction loggedInView) } + { model | view = V.LoggedInView (updateLoggedIn model loggedAction loggedInView) } _ -> model diff --git a/src/client/elm/Update/LoggedIn.elm b/src/client/elm/Update/LoggedIn.elm index e477094..5292c25 100644 --- a/src/client/elm/Update/LoggedIn.elm +++ b/src/client/elm/Update/LoggedIn.elm @@ -31,38 +31,38 @@ updateLoggedIn : Model -> LoggedAction -> LoggedInView -> LoggedInView updateLoggedIn model action loggedInView = case action of UpdateAdd addPaymentAction -> - { loggedInView | add <- updateAddPayment addPaymentAction loggedInView.add } + { loggedInView | add = updateAddPayment addPaymentAction loggedInView.add } UpdatePayments payments -> - { loggedInView | payments <- payments } + { loggedInView | payments = payments } AddPayment userId name cost payments -> { loggedInView - | payments <- payments - , currentPage <- 1 - , add <- initAddPayment Punctual - , account <- UA.updateAccount (UA.UpdatePayer userId model.currentTime cost) loggedInView.account - , paymentsCount <- loggedInView.paymentsCount + 1 + | payments = payments + , currentPage = 1 + , add = initAddPayment Punctual + , account = UA.updateAccount (UA.UpdatePayer userId model.currentTime cost) loggedInView.account + , paymentsCount = loggedInView.paymentsCount + 1 } AddMonthlyPayment id name cost -> { loggedInView - | add <- initAddPayment Monthly - , monthly <- + | add = initAddPayment Monthly + , monthly = let payment = Payment id (Date.fromTime model.currentTime) name cost loggedInView.account.me in UM.updateMonthly (UM.AddPayment payment) loggedInView.monthly } ToggleEdit id -> - { loggedInView | paymentEdition <- if loggedInView.paymentEdition == Just id then Nothing else Just id } + { loggedInView | paymentEdition = if loggedInView.paymentEdition == Just id then Nothing else Just id } DeletePayment payment payments -> { loggedInView - | payments <- payments - , account <- UA.updateAccount (UA.UpdatePayer payment.userId (Date.toTime payment.creation) -payment.cost) loggedInView.account - , paymentsCount <- loggedInView.paymentsCount - 1 + | payments = payments + , account = UA.updateAccount (UA.UpdatePayer payment.userId (Date.toTime payment.creation) -payment.cost) loggedInView.account + , paymentsCount = loggedInView.paymentsCount - 1 } UpdatePage page payments -> { loggedInView - | currentPage <- page - , payments <- payments + | currentPage = page + , payments = payments } UpdateMonthly monthlyAction -> - { loggedInView | monthly <- UM.updateMonthly monthlyAction loggedInView.monthly } + { loggedInView | monthly = UM.updateMonthly monthlyAction loggedInView.monthly } UpdateAccount accountAction -> - { loggedInView | account <- UA.updateAccount accountAction loggedInView.account } + { loggedInView | account = UA.updateAccount accountAction loggedInView.account } diff --git a/src/client/elm/Update/LoggedIn/Account.elm b/src/client/elm/Update/LoggedIn/Account.elm index cf4c834..c7a66dd 100644 --- a/src/client/elm/Update/LoggedIn/Account.elm +++ b/src/client/elm/Update/LoggedIn/Account.elm @@ -25,11 +25,11 @@ updateAccount : AccountAction -> Account -> Account updateAccount action account = case action of ToggleDetail -> - { account | visibleDetail <- not account.visibleDetail } + { account | visibleDetail = not account.visibleDetail } UpdatePayer userId creation amountDiff -> - { account | payers <- updatePayers account.payers userId creation amountDiff } + { account | payers = updatePayers account.payers userId creation amountDiff } ToggleIncomeEdition -> - { account | incomeEdition <- + { account | incomeEdition = if isJust account.incomeEdition then Nothing else Just (initIncomeEdition (Maybe.withDefault 0 (getCurrentIncome account))) @@ -37,28 +37,28 @@ updateAccount action account = UpdateIncomeEdition income -> case account.incomeEdition of Just incomeEdition -> - { account | incomeEdition <- Just { incomeEdition | income <- income } } + { account | incomeEdition = Just { incomeEdition | income = income } } Nothing -> account UpdateEditionError error -> case account.incomeEdition of Just incomeEdition -> - { account | incomeEdition <- Just { incomeEdition | error <- Just error } } + { account | incomeEdition = Just { incomeEdition | error = Just error } } Nothing -> account UpdateIncome currentTime amount -> { account - | payers <- + | payers = account.payers |> Dict.update account.me (\mbPayer -> case mbPayer of Just payer -> Just { payer - | incomes <- payer.incomes ++ [{ creation = currentTime, amount = amount }] + | incomes = payer.incomes ++ [{ creation = currentTime, amount = amount }] } Nothing -> Nothing ) - , incomeEdition <- Nothing + , incomeEdition = Nothing } diff --git a/src/client/elm/Update/LoggedIn/Add.elm b/src/client/elm/Update/LoggedIn/Add.elm index 1f28997..92bdb7e 100644 --- a/src/client/elm/Update/LoggedIn/Add.elm +++ b/src/client/elm/Update/LoggedIn/Add.elm @@ -15,15 +15,15 @@ updateAddPayment : AddPaymentAction -> AddPayment -> AddPayment updateAddPayment action addPayment = case action of UpdateName name -> - { addPayment | name <- name } + { addPayment | name = name } UpdateCost cost -> - { addPayment | cost <- cost } + { addPayment | cost = cost } AddError nameError costError -> { addPayment - | nameError <- nameError - , costError <- costError + | nameError = nameError + , costError = costError } ToggleFrequency -> { addPayment - | frequency <- if addPayment.frequency == Punctual then Monthly else Punctual + | frequency = if addPayment.frequency == Punctual then Monthly else Punctual } diff --git a/src/client/elm/Update/LoggedIn/Monthly.elm b/src/client/elm/Update/LoggedIn/Monthly.elm index 1379323..275b3e8 100644 --- a/src/client/elm/Update/LoggedIn/Monthly.elm +++ b/src/client/elm/Update/LoggedIn/Monthly.elm @@ -15,13 +15,13 @@ updateMonthly : MonthlyAction -> Monthly -> Monthly updateMonthly action monthly = case action of ToggleDetail -> - { monthly | visibleDetail <- not monthly.visibleDetail } + { monthly | visibleDetail = not monthly.visibleDetail } AddPayment payment -> { monthly - | payments <- payment :: monthly.payments - , visibleDetail <- True + | payments = payment :: monthly.payments + , visibleDetail = True } DeletePayment id -> { monthly - | payments <- List.filter (\payment -> payment.id /= id) monthly.payments + | payments = List.filter (\payment -> payment.id /= id) monthly.payments } diff --git a/src/client/elm/Update/SignIn.elm b/src/client/elm/Update/SignIn.elm index cabe4cb..961fb16 100644 --- a/src/client/elm/Update/SignIn.elm +++ b/src/client/elm/Update/SignIn.elm @@ -12,4 +12,4 @@ updateSignIn : SignInAction -> SignInView -> SignInView updateSignIn action signInView = case action of ErrorLogin message -> - { signInView | result <- Just (Err message) } + { signInView | result = Just (Err message) } diff --git a/src/client/elm/View/Events.elm b/src/client/elm/View/Events.elm index 1eb9027..c9dff9f 100644 --- a/src/client/elm/View/Events.elm +++ b/src/client/elm/View/Events.elm @@ -12,7 +12,7 @@ onSubmitPrevDefault : Signal.Address a -> a -> Attribute onSubmitPrevDefault address value = onWithOptions "submit" - { defaultOptions | preventDefault <- True } + { defaultOptions | preventDefault = True } Json.value (\_ -> Signal.message address value diff --git a/src/client/elm/View/LoggedIn/Paging.elm b/src/client/elm/View/LoggedIn/Paging.elm index 93d7f1d..608113b 100644 --- a/src/client/elm/View/LoggedIn/Paging.elm +++ b/src/client/elm/View/LoggedIn/Paging.elm @@ -46,12 +46,12 @@ truncatePages currentPage pages = showedLeftPages = ceiling ((toFloat showedPages - 1) / 2) showedRightPages = floor ((toFloat showedPages - 1) / 2) truncatedPages = - if | currentPage < showedLeftPages -> - [1..showedPages] - | currentPage > totalPages - showedRightPages -> - [(totalPages - showedPages)..totalPages] - | otherwise -> - [(currentPage - showedLeftPages)..(currentPage + showedRightPages)] + if currentPage < showedLeftPages then + [1..showedPages] + else if currentPage > totalPages - showedRightPages then + [(totalPages - showedPages)..totalPages] + else + [(currentPage - showedLeftPages)..(currentPage + showedRightPages)] in List.filter (flip List.member pages) truncatedPages firstPage : Html |