(function(scope){ 'use strict'; function F(arity, fun, wrapper) { wrapper.a = arity; wrapper.f = fun; return wrapper; } function F2(fun) { return F(2, fun, function(a) { return function(b) { return fun(a,b); }; }) } function F3(fun) { return F(3, fun, function(a) { return function(b) { return function(c) { return fun(a, b, c); }; }; }); } function F4(fun) { return F(4, fun, function(a) { return function(b) { return function(c) { return function(d) { return fun(a, b, c, d); }; }; }; }); } function F5(fun) { return F(5, fun, function(a) { return function(b) { return function(c) { return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; }; }); } function F6(fun) { return F(6, fun, function(a) { return function(b) { return function(c) { return function(d) { return function(e) { return function(f) { return fun(a, b, c, d, e, f); }; }; }; }; }; }); } function F7(fun) { return F(7, fun, function(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); }; }; }; }; }; }; }); } function F8(fun) { return F(8, fun, function(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); }; }; }; }; }; }; }; }); } function F9(fun) { return F(9, fun, function(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); }; }; }; }; }; }; }; }; }); } function A2(fun, a, b) { return fun.a === 2 ? fun.f(a, b) : fun(a)(b); } function A3(fun, a, b, c) { return fun.a === 3 ? fun.f(a, b, c) : fun(a)(b)(c); } function A4(fun, a, b, c, d) { return fun.a === 4 ? fun.f(a, b, c, d) : fun(a)(b)(c)(d); } function A5(fun, a, b, c, d, e) { return fun.a === 5 ? fun.f(a, b, c, d, e) : fun(a)(b)(c)(d)(e); } function A6(fun, a, b, c, d, e, f) { return fun.a === 6 ? fun.f(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.a === 7 ? fun.f(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.a === 8 ? fun.f(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.a === 9 ? fun.f(a, b, c, d, e, f, g, h, i) : fun(a)(b)(c)(d)(e)(f)(g)(h)(i); } console.warn('Compiled in DEV mode. Follow the advice at https://elm-lang.org/0.19.1/optimize for better performance and smaller assets.'); // EQUALITY function _Utils_eq(x, y) { for ( var pair, stack = [], isEqual = _Utils_eqHelp(x, y, 0, stack); isEqual && (pair = stack.pop()); isEqual = _Utils_eqHelp(pair.a, pair.b, 0, stack) ) {} return isEqual; } function _Utils_eqHelp(x, y, depth, stack) { if (x === y) { return true; } if (typeof x !== 'object' || x === null || y === null) { typeof x === 'function' && _Debug_crash(5); return false; } if (depth > 100) { stack.push(_Utils_Tuple2(x,y)); return true; } /**/ if (x.$ === 'Set_elm_builtin') { x = $elm$core$Set$toList(x); y = $elm$core$Set$toList(y); } if (x.$ === 'RBNode_elm_builtin' || x.$ === 'RBEmpty_elm_builtin') { x = $elm$core$Dict$toList(x); y = $elm$core$Dict$toList(y); } //*/ /**_UNUSED/ if (x.$ < 0) { x = $elm$core$Dict$toList(x); y = $elm$core$Dict$toList(y); } //*/ for (var key in x) { if (!_Utils_eqHelp(x[key], y[key], depth + 1, stack)) { return false; } } return true; } var _Utils_equal = F2(_Utils_eq); var _Utils_notEqual = F2(function(a, b) { return !_Utils_eq(a,b); }); // COMPARISONS // Code in Generate/JavaScript.hs, Basics.js, and List.js depends on // the particular integer values assigned to LT, EQ, and GT. function _Utils_cmp(x, y, ord) { if (typeof x !== 'object') { return x === y ? /*EQ*/ 0 : x < y ? /*LT*/ -1 : /*GT*/ 1; } /**/ if (x instanceof String) { var a = x.valueOf(); var b = y.valueOf(); return a === b ? 0 : a < b ? -1 : 1; } //*/ /**_UNUSED/ if (typeof x.$ === 'undefined') //*/ /**/ if (x.$[0] === '#') //*/ { return (ord = _Utils_cmp(x.a, y.a)) ? ord : (ord = _Utils_cmp(x.b, y.b)) ? ord : _Utils_cmp(x.c, y.c); } // traverse conses until end of a list or a mismatch for (; x.b && y.b && !(ord = _Utils_cmp(x.a, y.a)); x = x.b, y = y.b) {} // WHILE_CONSES return ord || (x.b ? /*GT*/ 1 : y.b ? /*LT*/ -1 : /*EQ*/ 0); } var _Utils_lt = F2(function(a, b) { return _Utils_cmp(a, b) < 0; }); var _Utils_le = F2(function(a, b) { return _Utils_cmp(a, b) < 1; }); var _Utils_gt = F2(function(a, b) { return _Utils_cmp(a, b) > 0; }); var _Utils_ge = F2(function(a, b) { return _Utils_cmp(a, b) >= 0; }); var _Utils_compare = F2(function(x, y) { var n = _Utils_cmp(x, y); return n < 0 ? $elm$core$Basics$LT : n ? $elm$core$Basics$GT : $elm$core$Basics$EQ; }); // COMMON VALUES var _Utils_Tuple0_UNUSED = 0; var _Utils_Tuple0 = { $: '#0' }; function _Utils_Tuple2_UNUSED(a, b) { return { a: a, b: b }; } function _Utils_Tuple2(a, b) { return { $: '#2', a: a, b: b }; } function _Utils_Tuple3_UNUSED(a, b, c) { return { a: a, b: b, c: c }; } function _Utils_Tuple3(a, b, c) { return { $: '#3', a: a, b: b, c: c }; } function _Utils_chr_UNUSED(c) { return c; } function _Utils_chr(c) { return new String(c); } // RECORDS function _Utils_update(oldRecord, updatedFields) { var newRecord = {}; for (var key in oldRecord) { newRecord[key] = oldRecord[key]; } for (var key in updatedFields) { newRecord[key] = updatedFields[key]; } return newRecord; } // APPEND var _Utils_append = F2(_Utils_ap); function _Utils_ap(xs, ys) { // append Strings if (typeof xs === 'string') { return xs + ys; } // append Lists if (!xs.b) { return ys; } var root = _List_Cons(xs.a, ys); xs = xs.b for (var curr = root; xs.b; xs = xs.b) // WHILE_CONS { curr = curr.b = _List_Cons(xs.a, ys); } return root; } var _List_Nil_UNUSED = { $: 0 }; var _List_Nil = { $: '[]' }; function _List_Cons_UNUSED(hd, tl) { return { $: 1, a: hd, b: tl }; } function _List_Cons(hd, tl) { return { $: '::', a: hd, b: tl }; } var _List_cons = F2(_List_Cons); function _List_fromArray(arr) { var out = _List_Nil; for (var i = arr.length; i--; ) { out = _List_Cons(arr[i], out); } return out; } function _List_toArray(xs) { for (var out = []; xs.b; xs = xs.b) // WHILE_CONS { out.push(xs.a); } return out; } var _List_map2 = F3(function(f, xs, ys) { for (var arr = []; xs.b && ys.b; xs = xs.b, ys = ys.b) // WHILE_CONSES { arr.push(A2(f, xs.a, ys.a)); } return _List_fromArray(arr); }); var _List_map3 = F4(function(f, xs, ys, zs) { for (var arr = []; xs.b && ys.b && zs.b; xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES { arr.push(A3(f, xs.a, ys.a, zs.a)); } return _List_fromArray(arr); }); var _List_map4 = F5(function(f, ws, xs, ys, zs) { for (var arr = []; ws.b && xs.b && ys.b && zs.b; ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES { arr.push(A4(f, ws.a, xs.a, ys.a, zs.a)); } return _List_fromArray(arr); }); var _List_map5 = F6(function(f, vs, ws, xs, ys, zs) { for (var arr = []; vs.b && ws.b && xs.b && ys.b && zs.b; vs = vs.b, ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES { arr.push(A5(f, vs.a, ws.a, xs.a, ys.a, zs.a)); } return _List_fromArray(arr); }); var _List_sortBy = F2(function(f, xs) { return _List_fromArray(_List_toArray(xs).sort(function(a, b) { return _Utils_cmp(f(a), f(b)); })); }); var _List_sortWith = F2(function(f, xs) { return _List_fromArray(_List_toArray(xs).sort(function(a, b) { var ord = A2(f, a, b); return ord === $elm$core$Basics$EQ ? 0 : ord === $elm$core$Basics$LT ? -1 : 1; })); }); var _JsArray_empty = []; function _JsArray_singleton(value) { return [value]; } function _JsArray_length(array) { return array.length; } var _JsArray_initialize = F3(function(size, offset, func) { var result = new Array(size); for (var i = 0; i < size; i++) { result[i] = func(offset + i); } return result; }); var _JsArray_initializeFromList = F2(function (max, ls) { var result = new Array(max); for (var i = 0; i < max && ls.b; i++) { result[i] = ls.a; ls = ls.b; } result.length = i; return _Utils_Tuple2(result, ls); }); var _JsArray_unsafeGet = F2(function(index, array) { return array[index]; }); var _JsArray_unsafeSet = F3(function(index, value, array) { var length = array.length; var result = new Array(length); for (var i = 0; i < length; i++) { result[i] = array[i]; } result[index] = value; return result; }); var _JsArray_push = F2(function(value, array) { var length = array.length; var result = new Array(length + 1); for (var i = 0; i < length; i++) { result[i] = array[i]; } result[length] = value; return result; }); var _JsArray_foldl = F3(function(func, acc, array) { var length = array.length; for (var i = 0; i < length; i++) { acc = A2(func, array[i], acc); } return acc; }); var _JsArray_foldr = F3(function(func, acc, array) { for (var i = array.length - 1; i >= 0; i--) { acc = A2(func, array[i], acc); } return acc; }); var _JsArray_map = F2(function(func, array) { var length = array.length; var result = new Array(length); for (var i = 0; i < length; i++) { result[i] = func(array[i]); } return result; }); var _JsArray_indexedMap = F3(function(func, offset, array) { var length = array.length; var result = new Array(length); for (var i = 0; i < length; i++) { result[i] = A2(func, offset + i, array[i]); } return result; }); var _JsArray_slice = F3(function(from, to, array) { return array.slice(from, to); }); var _JsArray_appendN = F3(function(n, dest, source) { var destLen = dest.length; var itemsToCopy = n - destLen; if (itemsToCopy > source.length) { itemsToCopy = source.length; } var size = destLen + itemsToCopy; var result = new Array(size); for (var i = 0; i < destLen; i++) { result[i] = dest[i]; } for (var i = 0; i < itemsToCopy; i++) { result[i + destLen] = source[i]; } return result; }); // LOG var _Debug_log_UNUSED = F2(function(tag, value) { return value; }); var _Debug_log = F2(function(tag, value) { console.log(tag + ': ' + _Debug_toString(value)); return value; }); // TODOS function _Debug_todo(moduleName, region) { return function(message) { _Debug_crash(8, moduleName, region, message); }; } function _Debug_todoCase(moduleName, region, value) { return function(message) { _Debug_crash(9, moduleName, region, value, message); }; } // TO STRING function _Debug_toString_UNUSED(value) { return ''; } function _Debug_toString(value) { return _Debug_toAnsiString(false, value); } function _Debug_toAnsiString(ansi, value) { if (typeof value === 'function') { return _Debug_internalColor(ansi, ''); } if (typeof value === 'boolean') { return _Debug_ctorColor(ansi, value ? 'True' : 'False'); } if (typeof value === 'number') { return _Debug_numberColor(ansi, value + ''); } if (value instanceof String) { return _Debug_charColor(ansi, "'" + _Debug_addSlashes(value, true) + "'"); } if (typeof value === 'string') { return _Debug_stringColor(ansi, '"' + _Debug_addSlashes(value, false) + '"'); } if (typeof value === 'object' && '$' in value) { var tag = value.$; if (typeof tag === 'number') { return _Debug_internalColor(ansi, ''); } if (tag[0] === '#') { var output = []; for (var k in value) { if (k === '$') continue; output.push(_Debug_toAnsiString(ansi, value[k])); } return '(' + output.join(',') + ')'; } if (tag === 'Set_elm_builtin') { return _Debug_ctorColor(ansi, 'Set') + _Debug_fadeColor(ansi, '.fromList') + ' ' + _Debug_toAnsiString(ansi, $elm$core$Set$toList(value)); } if (tag === 'RBNode_elm_builtin' || tag === 'RBEmpty_elm_builtin') { return _Debug_ctorColor(ansi, 'Dict') + _Debug_fadeColor(ansi, '.fromList') + ' ' + _Debug_toAnsiString(ansi, $elm$core$Dict$toList(value)); } if (tag === 'Array_elm_builtin') { return _Debug_ctorColor(ansi, 'Array') + _Debug_fadeColor(ansi, '.fromList') + ' ' + _Debug_toAnsiString(ansi, $elm$core$Array$toList(value)); } if (tag === '::' || tag === '[]') { var output = '['; value.b && (output += _Debug_toAnsiString(ansi, value.a), value = value.b) for (; value.b; value = value.b) // WHILE_CONS { output += ',' + _Debug_toAnsiString(ansi, value.a); } return output + ']'; } var output = ''; for (var i in value) { if (i === '$') continue; var str = _Debug_toAnsiString(ansi, value[i]); var c0 = str[0]; var parenless = c0 === '{' || c0 === '(' || c0 === '[' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0; output += ' ' + (parenless ? str : '(' + str + ')'); } return _Debug_ctorColor(ansi, tag) + output; } if (typeof DataView === 'function' && value instanceof DataView) { return _Debug_stringColor(ansi, '<' + value.byteLength + ' bytes>'); } if (typeof File !== 'undefined' && value instanceof File) { return _Debug_internalColor(ansi, '<' + value.name + '>'); } if (typeof value === 'object') { var output = []; for (var key in value) { var field = key[0] === '_' ? key.slice(1) : key; output.push(_Debug_fadeColor(ansi, field) + ' = ' + _Debug_toAnsiString(ansi, value[key])); } if (output.length === 0) { return '{}'; } return '{ ' + output.join(', ') + ' }'; } return _Debug_internalColor(ansi, ''); } function _Debug_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 _Debug_ctorColor(ansi, string) { return ansi ? '\x1b[96m' + string + '\x1b[0m' : string; } function _Debug_numberColor(ansi, string) { return ansi ? '\x1b[95m' + string + '\x1b[0m' : string; } function _Debug_stringColor(ansi, string) { return ansi ? '\x1b[93m' + string + '\x1b[0m' : string; } function _Debug_charColor(ansi, string) { return ansi ? '\x1b[92m' + string + '\x1b[0m' : string; } function _Debug_fadeColor(ansi, string) { return ansi ? '\x1b[37m' + string + '\x1b[0m' : string; } function _Debug_internalColor(ansi, string) { return ansi ? '\x1b[36m' + string + '\x1b[0m' : string; } function _Debug_toHexDigit(n) { return String.fromCharCode(n < 10 ? 48 + n : 55 + n); } // CRASH function _Debug_crash_UNUSED(identifier) { throw new Error('https://github.com/elm/core/blob/1.0.0/hints/' + identifier + '.md'); } function _Debug_crash(identifier, fact1, fact2, fact3, fact4) { switch(identifier) { case 0: throw new Error('What node should I take over? In JavaScript I need something like:\n\n Elm.Main.init({\n node: document.getElementById("elm-node")\n })\n\nYou need to do this with any Browser.sandbox or Browser.element program.'); case 1: throw new Error('Browser.application programs cannot handle URLs like this:\n\n ' + document.location.href + '\n\nWhat is the root? The root of your file system? Try looking at this program with `elm reactor` or some other server.'); case 2: var jsonErrorString = fact1; throw new Error('Problem with the flags given to your Elm program on initialization.\n\n' + jsonErrorString); case 3: var portName = fact1; throw new Error('There can only be one port named `' + portName + '`, but your program has multiple.'); case 4: var portName = fact1; var problem = fact2; throw new Error('Trying to send an unexpected type of value through port `' + portName + '`:\n' + problem); case 5: throw new Error('Trying to use `(==)` on functions.\nThere is no way to know if functions are "the same" in the Elm sense.\nRead more about this at https://package.elm-lang.org/packages/elm/core/latest/Basics#== which describes why it is this way and what the better version will look like.'); case 6: var moduleName = fact1; throw new Error('Your page is loading multiple Elm scripts with a module named ' + moduleName + '. Maybe a duplicate script is getting loaded accidentally? If not, rename one of them so I know which is which!'); case 8: var moduleName = fact1; var region = fact2; var message = fact3; throw new Error('TODO in module `' + moduleName + '` ' + _Debug_regionToString(region) + '\n\n' + message); case 9: var moduleName = fact1; var region = fact2; var value = fact3; var message = fact4; throw new Error( 'TODO in module `' + moduleName + '` from the `case` expression ' + _Debug_regionToString(region) + '\n\nIt received the following value:\n\n ' + _Debug_toString(value).replace('\n', '\n ') + '\n\nBut the branch that handles it says:\n\n ' + message.replace('\n', '\n ') ); case 10: throw new Error('Bug in https://github.com/elm/virtual-dom/issues'); case 11: throw new Error('Cannot perform mod 0. Division by zero error.'); } } function _Debug_regionToString(region) { if (region.start.line === region.end.line) { return 'on line ' + region.start.line; } return 'on lines ' + region.start.line + ' through ' + region.end.line; } // MATH var _Basics_add = F2(function(a, b) { return a + b; }); var _Basics_sub = F2(function(a, b) { return a - b; }); var _Basics_mul = F2(function(a, b) { return a * b; }); var _Basics_fdiv = F2(function(a, b) { return a / b; }); var _Basics_idiv = F2(function(a, b) { return (a / b) | 0; }); var _Basics_pow = F2(Math.pow); var _Basics_remainderBy = F2(function(b, a) { return a % b; }); // https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf var _Basics_modBy = F2(function(modulus, x) { var answer = x % modulus; return modulus === 0 ? _Debug_crash(11) : ((answer > 0 && modulus < 0) || (answer < 0 && modulus > 0)) ? answer + modulus : answer; }); // TRIGONOMETRY var _Basics_pi = Math.PI; var _Basics_e = Math.E; var _Basics_cos = Math.cos; var _Basics_sin = Math.sin; var _Basics_tan = Math.tan; var _Basics_acos = Math.acos; var _Basics_asin = Math.asin; var _Basics_atan = Math.atan; var _Basics_atan2 = F2(Math.atan2); // MORE MATH function _Basics_toFloat(x) { return x; } function _Basics_truncate(n) { return n | 0; } function _Basics_isInfinite(n) { return n === Infinity || n === -Infinity; } var _Basics_ceiling = Math.ceil; var _Basics_floor = Math.floor; var _Basics_round = Math.round; var _Basics_sqrt = Math.sqrt; var _Basics_log = Math.log; var _Basics_isNaN = isNaN; // BOOLEANS function _Basics_not(bool) { return !bool; } var _Basics_and = F2(function(a, b) { return a && b; }); var _Basics_or = F2(function(a, b) { return a || b; }); var _Basics_xor = F2(function(a, b) { return a !== b; }); var _String_cons = F2(function(chr, str) { return chr + str; }); function _String_uncons(string) { var word = string.charCodeAt(0); return !isNaN(word) ? $elm$core$Maybe$Just( 0xD800 <= word && word <= 0xDBFF ? _Utils_Tuple2(_Utils_chr(string[0] + string[1]), string.slice(2)) : _Utils_Tuple2(_Utils_chr(string[0]), string.slice(1)) ) : $elm$core$Maybe$Nothing; } var _String_append = F2(function(a, b) { return a + b; }); function _String_length(str) { return str.length; } var _String_map = F2(function(func, string) { var len = string.length; var array = new Array(len); var i = 0; while (i < len) { var word = string.charCodeAt(i); if (0xD800 <= word && word <= 0xDBFF) { array[i] = func(_Utils_chr(string[i] + string[i+1])); i += 2; continue; } array[i] = func(_Utils_chr(string[i])); i++; } return array.join(''); }); var _String_filter = F2(function(isGood, str) { var arr = []; var len = str.length; var i = 0; while (i < len) { var char = str[i]; var word = str.charCodeAt(i); i++; if (0xD800 <= word && word <= 0xDBFF) { char += str[i]; i++; } if (isGood(_Utils_chr(char))) { arr.push(char); } } return arr.join(''); }); function _String_reverse(str) { var len = str.length; var arr = new Array(len); var i = 0; while (i < len) { var word = str.charCodeAt(i); if (0xD800 <= word && word <= 0xDBFF) { arr[len - i] = str[i + 1]; i++; arr[len - i] = str[i - 1]; i++; } else { arr[len - i] = str[i]; i++; } } return arr.join(''); } var _String_foldl = F3(function(func, state, string) { var len = string.length; var i = 0; while (i < len) { var char = string[i]; var word = string.charCodeAt(i); i++; if (0xD800 <= word && word <= 0xDBFF) { char += string[i]; i++; } state = A2(func, _Utils_chr(char), state); } return state; }); var _String_foldr = F3(function(func, state, string) { var i = string.length; while (i--) { var char = string[i]; var word = string.charCodeAt(i); if (0xDC00 <= word && word <= 0xDFFF) { i--; char = string[i] + char; } state = A2(func, _Utils_chr(char), state); } return state; }); var _String_split = F2(function(sep, str) { return str.split(sep); }); var _String_join = F2(function(sep, strs) { return strs.join(sep); }); var _String_slice = F3(function(start, end, str) { return str.slice(start, end); }); function _String_trim(str) { return str.trim(); } function _String_trimLeft(str) { return str.replace(/^\s+/, ''); } function _String_trimRight(str) { return str.replace(/\s+$/, ''); } function _String_words(str) { return _List_fromArray(str.trim().split(/\s+/g)); } function _String_lines(str) { return _List_fromArray(str.split(/\r\n|\r|\n/g)); } function _String_toUpper(str) { return str.toUpperCase(); } function _String_toLower(str) { return str.toLowerCase(); } var _String_any = F2(function(isGood, string) { var i = string.length; while (i--) { var char = string[i]; var word = string.charCodeAt(i); if (0xDC00 <= word && word <= 0xDFFF) { i--; char = string[i] + char; } if (isGood(_Utils_chr(char))) { return true; } } return false; }); var _String_all = F2(function(isGood, string) { var i = string.length; while (i--) { var char = string[i]; var word = string.charCodeAt(i); if (0xDC00 <= word && word <= 0xDFFF) { i--; char = string[i] + char; } if (!isGood(_Utils_chr(char))) { return false; } } return true; }); var _String_contains = F2(function(sub, str) { return str.indexOf(sub) > -1; }); var _String_startsWith = F2(function(sub, str) { return str.indexOf(sub) === 0; }); var _String_endsWith = F2(function(sub, str) { return str.length >= sub.length && str.lastIndexOf(sub) === str.length - sub.length; }); var _String_indexes = F2(function(sub, str) { var subLen = sub.length; if (subLen < 1) { return _List_Nil; } var i = 0; var is = []; while ((i = str.indexOf(sub, i)) > -1) { is.push(i); i = i + subLen; } return _List_fromArray(is); }); // TO STRING function _String_fromNumber(number) { return number + ''; } // INT CONVERSIONS function _String_toInt(str) { var total = 0; var code0 = str.charCodeAt(0); var start = code0 == 0x2B /* + */ || code0 == 0x2D /* - */ ? 1 : 0; for (var i = start; i < str.length; ++i) { var code = str.charCodeAt(i); if (code < 0x30 || 0x39 < code) { return $elm$core$Maybe$Nothing; } total = 10 * total + code - 0x30; } return i == start ? $elm$core$Maybe$Nothing : $elm$core$Maybe$Just(code0 == 0x2D ? -total : total); } // FLOAT CONVERSIONS function _String_toFloat(s) { // check if it is a hex, octal, or binary number if (s.length === 0 || /[\sxbo]/.test(s)) { return $elm$core$Maybe$Nothing; } var n = +s; // faster isNaN check return n === n ? $elm$core$Maybe$Just(n) : $elm$core$Maybe$Nothing; } function _String_fromList(chars) { return _List_toArray(chars).join(''); } function _Char_toCode(char) { var code = char.charCodeAt(0); if (0xD800 <= code && code <= 0xDBFF) { return (code - 0xD800) * 0x400 + char.charCodeAt(1) - 0xDC00 + 0x10000 } return code; } function _Char_fromCode(code) { return _Utils_chr( (code < 0 || 0x10FFFF < code) ? '\uFFFD' : (code <= 0xFFFF) ? String.fromCharCode(code) : (code -= 0x10000, String.fromCharCode(Math.floor(code / 0x400) + 0xD800, code % 0x400 + 0xDC00) ) ); } function _Char_toUpper(char) { return _Utils_chr(char.toUpperCase()); } function _Char_toLower(char) { return _Utils_chr(char.toLowerCase()); } function _Char_toLocaleUpper(char) { return _Utils_chr(char.toLocaleUpperCase()); } function _Char_toLocaleLower(char) { return _Utils_chr(char.toLocaleLowerCase()); } /**/ function _Json_errorToString(error) { return $elm$json$Json$Decode$errorToString(error); } //*/ // CORE DECODERS function _Json_succeed(msg) { return { $: 0, a: msg }; } function _Json_fail(msg) { return { $: 1, a: msg }; } function _Json_decodePrim(decoder) { return { $: 2, b: decoder }; } var _Json_decodeInt = _Json_decodePrim(function(value) { return (typeof value !== 'number') ? _Json_expecting('an INT', value) : (-2147483647 < value && value < 2147483647 && (value | 0) === value) ? $elm$core$Result$Ok(value) : (isFinite(value) && !(value % 1)) ? $elm$core$Result$Ok(value) : _Json_expecting('an INT', value); }); var _Json_decodeBool = _Json_decodePrim(function(value) { return (typeof value === 'boolean') ? $elm$core$Result$Ok(value) : _Json_expecting('a BOOL', value); }); var _Json_decodeFloat = _Json_decodePrim(function(value) { return (typeof value === 'number') ? $elm$core$Result$Ok(value) : _Json_expecting('a FLOAT', value); }); var _Json_decodeValue = _Json_decodePrim(function(value) { return $elm$core$Result$Ok(_Json_wrap(value)); }); var _Json_decodeString = _Json_decodePrim(function(value) { return (typeof value === 'string') ? $elm$core$Result$Ok(value) : (value instanceof String) ? $elm$core$Result$Ok(value + '') : _Json_expecting('a STRING', value); }); function _Json_decodeList(decoder) { return { $: 3, b: decoder }; } function _Json_decodeArray(decoder) { return { $: 4, b: decoder }; } function _Json_decodeNull(value) { return { $: 5, c: value }; } var _Json_decodeField = F2(function(field, decoder) { return { $: 6, d: field, b: decoder }; }); var _Json_decodeIndex = F2(function(index, decoder) { return { $: 7, e: index, b: decoder }; }); function _Json_decodeKeyValuePairs(decoder) { return { $: 8, b: decoder }; } function _Json_mapMany(f, decoders) { return { $: 9, f: f, g: decoders }; } var _Json_andThen = F2(function(callback, decoder) { return { $: 10, b: decoder, h: callback }; }); function _Json_oneOf(decoders) { return { $: 11, g: decoders }; } // DECODING OBJECTS var _Json_map1 = F2(function(f, d1) { return _Json_mapMany(f, [d1]); }); var _Json_map2 = F3(function(f, d1, d2) { return _Json_mapMany(f, [d1, d2]); }); var _Json_map3 = F4(function(f, d1, d2, d3) { return _Json_mapMany(f, [d1, d2, d3]); }); var _Json_map4 = F5(function(f, d1, d2, d3, d4) { return _Json_mapMany(f, [d1, d2, d3, d4]); }); var _Json_map5 = F6(function(f, d1, d2, d3, d4, d5) { return _Json_mapMany(f, [d1, d2, d3, d4, d5]); }); var _Json_map6 = F7(function(f, d1, d2, d3, d4, d5, d6) { return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6]); }); var _Json_map7 = F8(function(f, d1, d2, d3, d4, d5, d6, d7) { return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7]); }); var _Json_map8 = F9(function(f, d1, d2, d3, d4, d5, d6, d7, d8) { return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]); }); // DECODE var _Json_runOnString = F2(function(decoder, string) { try { var value = JSON.parse(string); return _Json_runHelp(decoder, value); } catch (e) { return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'This is not valid JSON! ' + e.message, _Json_wrap(string))); } }); var _Json_run = F2(function(decoder, value) { return _Json_runHelp(decoder, _Json_unwrap(value)); }); function _Json_runHelp(decoder, value) { switch (decoder.$) { case 2: return decoder.b(value); case 5: return (value === null) ? $elm$core$Result$Ok(decoder.c) : _Json_expecting('null', value); case 3: if (!_Json_isArray(value)) { return _Json_expecting('a LIST', value); } return _Json_runArrayDecoder(decoder.b, value, _List_fromArray); case 4: if (!_Json_isArray(value)) { return _Json_expecting('an ARRAY', value); } return _Json_runArrayDecoder(decoder.b, value, _Json_toElmArray); case 6: var field = decoder.d; if (typeof value !== 'object' || value === null || !(field in value)) { return _Json_expecting('an OBJECT with a field named `' + field + '`', value); } var result = _Json_runHelp(decoder.b, value[field]); return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, field, result.a)); case 7: var index = decoder.e; if (!_Json_isArray(value)) { return _Json_expecting('an ARRAY', value); } if (index >= value.length) { return _Json_expecting('a LONGER array. Need index ' + index + ' but only see ' + value.length + ' entries', value); } var result = _Json_runHelp(decoder.b, value[index]); return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, index, result.a)); case 8: if (typeof value !== 'object' || value === null || _Json_isArray(value)) { return _Json_expecting('an OBJECT', value); } var keyValuePairs = _List_Nil; // TODO test perf of Object.keys and switch when support is good enough for (var key in value) { if (value.hasOwnProperty(key)) { var result = _Json_runHelp(decoder.b, value[key]); if (!$elm$core$Result$isOk(result)) { return $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, key, result.a)); } keyValuePairs = _List_Cons(_Utils_Tuple2(key, result.a), keyValuePairs); } } return $elm$core$Result$Ok($elm$core$List$reverse(keyValuePairs)); case 9: var answer = decoder.f; var decoders = decoder.g; for (var i = 0; i < decoders.length; i++) { var result = _Json_runHelp(decoders[i], value); if (!$elm$core$Result$isOk(result)) { return result; } answer = answer(result.a); } return $elm$core$Result$Ok(answer); case 10: var result = _Json_runHelp(decoder.b, value); return (!$elm$core$Result$isOk(result)) ? result : _Json_runHelp(decoder.h(result.a), value); case 11: var errors = _List_Nil; for (var temp = decoder.g; temp.b; temp = temp.b) // WHILE_CONS { var result = _Json_runHelp(temp.a, value); if ($elm$core$Result$isOk(result)) { return result; } errors = _List_Cons(result.a, errors); } return $elm$core$Result$Err($elm$json$Json$Decode$OneOf($elm$core$List$reverse(errors))); case 1: return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, decoder.a, _Json_wrap(value))); case 0: return $elm$core$Result$Ok(decoder.a); } } function _Json_runArrayDecoder(decoder, value, toElmValue) { var len = value.length; var array = new Array(len); for (var i = 0; i < len; i++) { var result = _Json_runHelp(decoder, value[i]); if (!$elm$core$Result$isOk(result)) { return $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, i, result.a)); } array[i] = result.a; } return $elm$core$Result$Ok(toElmValue(array)); } function _Json_isArray(value) { return Array.isArray(value) || (typeof FileList !== 'undefined' && value instanceof FileList); } function _Json_toElmArray(array) { return A2($elm$core$Array$initialize, array.length, function(i) { return array[i]; }); } function _Json_expecting(type, value) { return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'Expecting ' + type, _Json_wrap(value))); } // EQUALITY function _Json_equality(x, y) { if (x === y) { return true; } if (x.$ !== y.$) { return false; } switch (x.$) { case 0: case 1: return x.a === y.a; case 2: return x.b === y.b; case 5: return x.c === y.c; case 3: case 4: case 8: return _Json_equality(x.b, y.b); case 6: return x.d === y.d && _Json_equality(x.b, y.b); case 7: return x.e === y.e && _Json_equality(x.b, y.b); case 9: return x.f === y.f && _Json_listEquality(x.g, y.g); case 10: return x.h === y.h && _Json_equality(x.b, y.b); case 11: return _Json_listEquality(x.g, y.g); } } function _Json_listEquality(aDecoders, bDecoders) { var len = aDecoders.length; if (len !== bDecoders.length) { return false; } for (var i = 0; i < len; i++) { if (!_Json_equality(aDecoders[i], bDecoders[i])) { return false; } } return true; } // ENCODE var _Json_encode = F2(function(indentLevel, value) { return JSON.stringify(_Json_unwrap(value), null, indentLevel) + ''; }); function _Json_wrap(value) { return { $: 0, a: value }; } function _Json_unwrap(value) { return value.a; } function _Json_wrap_UNUSED(value) { return value; } function _Json_unwrap_UNUSED(value) { return value; } function _Json_emptyArray() { return []; } function _Json_emptyObject() { return {}; } var _Json_addField = F3(function(key, value, object) { object[key] = _Json_unwrap(value); return object; }); function _Json_addEntry(func) { return F2(function(entry, array) { array.push(_Json_unwrap(func(entry))); return array; }); } var _Json_encodeNull = _Json_wrap(null); // TASKS function _Scheduler_succeed(value) { return { $: 0, a: value }; } function _Scheduler_fail(error) { return { $: 1, a: error }; } function _Scheduler_binding(callback) { return { $: 2, b: callback, c: null }; } var _Scheduler_andThen = F2(function(callback, task) { return { $: 3, b: callback, d: task }; }); var _Scheduler_onError = F2(function(callback, task) { return { $: 4, b: callback, d: task }; }); function _Scheduler_receive(callback) { return { $: 5, b: callback }; } // PROCESSES var _Scheduler_guid = 0; function _Scheduler_rawSpawn(task) { var proc = { $: 0, e: _Scheduler_guid++, f: task, g: null, h: [] }; _Scheduler_enqueue(proc); return proc; } function _Scheduler_spawn(task) { return _Scheduler_binding(function(callback) { callback(_Scheduler_succeed(_Scheduler_rawSpawn(task))); }); } function _Scheduler_rawSend(proc, msg) { proc.h.push(msg); _Scheduler_enqueue(proc); } var _Scheduler_send = F2(function(proc, msg) { return _Scheduler_binding(function(callback) { _Scheduler_rawSend(proc, msg); callback(_Scheduler_succeed(_Utils_Tuple0)); }); }); function _Scheduler_kill(proc) { return _Scheduler_binding(function(callback) { var task = proc.f; if (task.$ === 2 && task.c) { task.c(); } proc.f = null; callback(_Scheduler_succeed(_Utils_Tuple0)); }); } /* STEP PROCESSES type alias Process = { $ : tag , id : unique_id , root : Task , stack : null | { $: SUCCEED | FAIL, a: callback, b: stack } , mailbox : [msg] } */ var _Scheduler_working = false; var _Scheduler_queue = []; function _Scheduler_enqueue(proc) { _Scheduler_queue.push(proc); if (_Scheduler_working) { return; } _Scheduler_working = true; while (proc = _Scheduler_queue.shift()) { _Scheduler_step(proc); } _Scheduler_working = false; } function _Scheduler_step(proc) { while (proc.f) { var rootTag = proc.f.$; if (rootTag === 0 || rootTag === 1) { while (proc.g && proc.g.$ !== rootTag) { proc.g = proc.g.i; } if (!proc.g) { return; } proc.f = proc.g.b(proc.f.a); proc.g = proc.g.i; } else if (rootTag === 2) { proc.f.c = proc.f.b(function(newRoot) { proc.f = newRoot; _Scheduler_enqueue(proc); }); return; } else if (rootTag === 5) { if (proc.h.length === 0) { return; } proc.f = proc.f.b(proc.h.shift()); } else // if (rootTag === 3 || rootTag === 4) { proc.g = { $: rootTag === 3 ? 0 : 1, b: proc.f.b, i: proc.g }; proc.f = proc.f.d; } } } function _Process_sleep(time) { return _Scheduler_binding(function(callback) { var id = setTimeout(function() { callback(_Scheduler_succeed(_Utils_Tuple0)); }, time); return function() { clearTimeout(id); }; }); } // PROGRAMS var _Platform_worker = F4(function(impl, flagDecoder, debugMetadata, args) { return _Platform_initialize( flagDecoder, args, impl.init, impl.update, impl.subscriptions, function() { return function() {} } ); }); // INITIALIZE A PROGRAM function _Platform_initialize(flagDecoder, args, init, update, subscriptions, stepperBuilder) { var result = A2(_Json_run, flagDecoder, _Json_wrap(args ? args['flags'] : undefined)); $elm$core$Result$isOk(result) || _Debug_crash(2 /**/, _Json_errorToString(result.a) /**/); var managers = {}; var initPair = init(result.a); var model = initPair.a; var stepper = stepperBuilder(sendToApp, model); var ports = _Platform_setupEffects(managers, sendToApp); function sendToApp(msg, viewMetadata) { var pair = A2(update, msg, model); stepper(model = pair.a, viewMetadata); _Platform_enqueueEffects(managers, pair.b, subscriptions(model)); } _Platform_enqueueEffects(managers, initPair.b, subscriptions(model)); return ports ? { ports: ports } : {}; } // TRACK PRELOADS // // This is used by code in elm/browser and elm/http // to register any HTTP requests that are triggered by init. // var _Platform_preload; function _Platform_registerPreload(url) { _Platform_preload.add(url); } // EFFECT MANAGERS var _Platform_effectManagers = {}; function _Platform_setupEffects(managers, sendToApp) { var ports; // setup all necessary effect managers for (var key in _Platform_effectManagers) { var manager = _Platform_effectManagers[key]; if (manager.a) { ports = ports || {}; ports[key] = manager.a(key, sendToApp); } managers[key] = _Platform_instantiateManager(manager, sendToApp); } return ports; } function _Platform_createManager(init, onEffects, onSelfMsg, cmdMap, subMap) { return { b: init, c: onEffects, d: onSelfMsg, e: cmdMap, f: subMap }; } function _Platform_instantiateManager(info, sendToApp) { var router = { g: sendToApp, h: undefined }; var onEffects = info.c; var onSelfMsg = info.d; var cmdMap = info.e; var subMap = info.f; function loop(state) { return A2(_Scheduler_andThen, loop, _Scheduler_receive(function(msg) { var value = msg.a; if (msg.$ === 0) { return A3(onSelfMsg, router, value, state); } return cmdMap && subMap ? A4(onEffects, router, value.i, value.j, state) : A3(onEffects, router, cmdMap ? value.i : value.j, state); })); } return router.h = _Scheduler_rawSpawn(A2(_Scheduler_andThen, loop, info.b)); } // ROUTING var _Platform_sendToApp = F2(function(router, msg) { return _Scheduler_binding(function(callback) { router.g(msg); callback(_Scheduler_succeed(_Utils_Tuple0)); }); }); var _Platform_sendToSelf = F2(function(router, msg) { return A2(_Scheduler_send, router.h, { $: 0, a: msg }); }); // BAGS function _Platform_leaf(home) { return function(value) { return { $: 1, k: home, l: value }; }; } function _Platform_batch(list) { return { $: 2, m: list }; } var _Platform_map = F2(function(tagger, bag) { return { $: 3, n: tagger, o: bag } }); // PIPE BAGS INTO EFFECT MANAGERS // // Effects must be queued! // // Say your init contains a synchronous command, like Time.now or Time.here // // - This will produce a batch of effects (FX_1) // - The synchronous task triggers the subsequent `update` call // - This will produce a batch of effects (FX_2) // // If we just start dispatching FX_2, subscriptions from FX_2 can be processed // before subscriptions from FX_1. No good! Earlier versions of this code had // this problem, leading to these reports: // // https://github.com/elm/core/issues/980 // https://github.com/elm/core/pull/981 // https://github.com/elm/compiler/issues/1776 // // The queue is necessary to avoid ordering issues for synchronous commands. // Why use true/false here? Why not just check the length of the queue? // The goal is to detect "are we currently dispatching effects?" If we // are, we need to bail and let the ongoing while loop handle things. // // Now say the queue has 1 element. When we dequeue the final element, // the queue will be empty, but we are still actively dispatching effects. // So you could get queue jumping in a really tricky category of cases. // var _Platform_effectsQueue = []; var _Platform_effectsActive = false; function _Platform_enqueueEffects(managers, cmdBag, subBag) { _Platform_effectsQueue.push({ p: managers, q: cmdBag, r: subBag }); if (_Platform_effectsActive) return; _Platform_effectsActive = true; for (var fx; fx = _Platform_effectsQueue.shift(); ) { _Platform_dispatchEffects(fx.p, fx.q, fx.r); } _Platform_effectsActive = false; } function _Platform_dispatchEffects(managers, cmdBag, subBag) { var effectsDict = {}; _Platform_gatherEffects(true, cmdBag, effectsDict, null); _Platform_gatherEffects(false, subBag, effectsDict, null); for (var home in managers) { _Scheduler_rawSend(managers[home], { $: 'fx', a: effectsDict[home] || { i: _List_Nil, j: _List_Nil } }); } } function _Platform_gatherEffects(isCmd, bag, effectsDict, taggers) { switch (bag.$) { case 1: var home = bag.k; var effect = _Platform_toEffect(isCmd, home, taggers, bag.l); effectsDict[home] = _Platform_insert(isCmd, effect, effectsDict[home]); return; case 2: for (var list = bag.m; list.b; list = list.b) // WHILE_CONS { _Platform_gatherEffects(isCmd, list.a, effectsDict, taggers); } return; case 3: _Platform_gatherEffects(isCmd, bag.o, effectsDict, { s: bag.n, t: taggers }); return; } } function _Platform_toEffect(isCmd, home, taggers, value) { function applyTaggers(x) { for (var temp = taggers; temp; temp = temp.t) { x = temp.s(x); } return x; } var map = isCmd ? _Platform_effectManagers[home].e : _Platform_effectManagers[home].f; return A2(map, applyTaggers, value) } function _Platform_insert(isCmd, newEffect, effects) { effects = effects || { i: _List_Nil, j: _List_Nil }; isCmd ? (effects.i = _List_Cons(newEffect, effects.i)) : (effects.j = _List_Cons(newEffect, effects.j)); return effects; } // PORTS function _Platform_checkPortName(name) { if (_Platform_effectManagers[name]) { _Debug_crash(3, name) } } // OUTGOING PORTS function _Platform_outgoingPort(name, converter) { _Platform_checkPortName(name); _Platform_effectManagers[name] = { e: _Platform_outgoingPortMap, u: converter, a: _Platform_setupOutgoingPort }; return _Platform_leaf(name); } var _Platform_outgoingPortMap = F2(function(tagger, value) { return value; }); function _Platform_setupOutgoingPort(name) { var subs = []; var converter = _Platform_effectManagers[name].u; // CREATE MANAGER var init = _Process_sleep(0); _Platform_effectManagers[name].b = init; _Platform_effectManagers[name].c = F3(function(router, cmdList, state) { for ( ; cmdList.b; cmdList = cmdList.b) // WHILE_CONS { // grab a separate reference to subs in case unsubscribe is called var currentSubs = subs; var value = _Json_unwrap(converter(cmdList.a)); for (var i = 0; i < currentSubs.length; i++) { currentSubs[i](value); } } return init; }); // PUBLIC API function subscribe(callback) { subs.push(callback); } function unsubscribe(callback) { // copy subs into a new array in case unsubscribe is called within a // subscribed callback subs = subs.slice(); var index = subs.indexOf(callback); if (index >= 0) { subs.splice(index, 1); } } return { subscribe: subscribe, unsubscribe: unsubscribe }; } // INCOMING PORTS function _Platform_incomingPort(name, converter) { _Platform_checkPortName(name); _Platform_effectManagers[name] = { f: _Platform_incomingPortMap, u: converter, a: _Platform_setupIncomingPort }; return _Platform_leaf(name); } var _Platform_incomingPortMap = F2(function(tagger, finalTagger) { return function(value) { return tagger(finalTagger(value)); }; }); function _Platform_setupIncomingPort(name, sendToApp) { var subs = _List_Nil; var converter = _Platform_effectManagers[name].u; // CREATE MANAGER var init = _Scheduler_succeed(null); _Platform_effectManagers[name].b = init; _Platform_effectManagers[name].c = F3(function(router, subList, state) { subs = subList; return init; }); // PUBLIC API function send(incomingValue) { var result = A2(_Json_run, converter, _Json_wrap(incomingValue)); $elm$core$Result$isOk(result) || _Debug_crash(4, name, result.a); var value = result.a; for (var temp = subs; temp.b; temp = temp.b) // WHILE_CONS { sendToApp(temp.a(value)); } } return { send: send }; } // EXPORT ELM MODULES // // Have DEBUG and PROD versions so that we can (1) give nicer errors in // debug mode and (2) not pay for the bits needed for that in prod mode. // function _Platform_export_UNUSED(exports) { scope['Elm'] ? _Platform_mergeExportsProd(scope['Elm'], exports) : scope['Elm'] = exports; } function _Platform_mergeExportsProd(obj, exports) { for (var name in exports) { (name in obj) ? (name == 'init') ? _Debug_crash(6) : _Platform_mergeExportsProd(obj[name], exports[name]) : (obj[name] = exports[name]); } } function _Platform_export(exports) { scope['Elm'] ? _Platform_mergeExportsDebug('Elm', scope['Elm'], exports) : scope['Elm'] = exports; } function _Platform_mergeExportsDebug(moduleName, obj, exports) { for (var name in exports) { (name in obj) ? (name == 'init') ? _Debug_crash(6, moduleName) : _Platform_mergeExportsDebug(moduleName + '.' + name, obj[name], exports[name]) : (obj[name] = exports[name]); } } // HELPERS var _VirtualDom_divertHrefToApp; var _VirtualDom_doc = typeof document !== 'undefined' ? document : {}; function _VirtualDom_appendChild(parent, child) { parent.appendChild(child); } var _VirtualDom_init = F4(function(virtualNode, flagDecoder, debugMetadata, args) { // NOTE: this function needs _Platform_export available to work /**_UNUSED/ var node = args['node']; //*/ /**/ var node = args && args['node'] ? args['node'] : _Debug_crash(0); //*/ node.parentNode.replaceChild( _VirtualDom_render(virtualNode, function() {}), node ); return {}; }); // TEXT function _VirtualDom_text(string) { return { $: 0, a: string }; } // NODE var _VirtualDom_nodeNS = F2(function(namespace, tag) { return F2(function(factList, kidList) { for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS { var kid = kidList.a; descendantsCount += (kid.b || 0); kids.push(kid); } descendantsCount += kids.length; return { $: 1, c: tag, d: _VirtualDom_organizeFacts(factList), e: kids, f: namespace, b: descendantsCount }; }); }); var _VirtualDom_node = _VirtualDom_nodeNS(undefined); // KEYED NODE var _VirtualDom_keyedNodeNS = F2(function(namespace, tag) { return F2(function(factList, kidList) { for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS { var kid = kidList.a; descendantsCount += (kid.b.b || 0); kids.push(kid); } descendantsCount += kids.length; return { $: 2, c: tag, d: _VirtualDom_organizeFacts(factList), e: kids, f: namespace, b: descendantsCount }; }); }); var _VirtualDom_keyedNode = _VirtualDom_keyedNodeNS(undefined); // CUSTOM function _VirtualDom_custom(factList, model, render, diff) { return { $: 3, d: _VirtualDom_organizeFacts(factList), g: model, h: render, i: diff }; } // MAP var _VirtualDom_map = F2(function(tagger, node) { return { $: 4, j: tagger, k: node, b: 1 + (node.b || 0) }; }); // LAZY function _VirtualDom_thunk(refs, thunk) { return { $: 5, l: refs, m: thunk, k: undefined }; } var _VirtualDom_lazy = F2(function(func, a) { return _VirtualDom_thunk([func, a], function() { return func(a); }); }); var _VirtualDom_lazy2 = F3(function(func, a, b) { return _VirtualDom_thunk([func, a, b], function() { return A2(func, a, b); }); }); var _VirtualDom_lazy3 = F4(function(func, a, b, c) { return _VirtualDom_thunk([func, a, b, c], function() { return A3(func, a, b, c); }); }); var _VirtualDom_lazy4 = F5(function(func, a, b, c, d) { return _VirtualDom_thunk([func, a, b, c, d], function() { return A4(func, a, b, c, d); }); }); var _VirtualDom_lazy5 = F6(function(func, a, b, c, d, e) { return _VirtualDom_thunk([func, a, b, c, d, e], function() { return A5(func, a, b, c, d, e); }); }); var _VirtualDom_lazy6 = F7(function(func, a, b, c, d, e, f) { return _VirtualDom_thunk([func, a, b, c, d, e, f], function() { return A6(func, a, b, c, d, e, f); }); }); var _VirtualDom_lazy7 = F8(function(func, a, b, c, d, e, f, g) { return _VirtualDom_thunk([func, a, b, c, d, e, f, g], function() { return A7(func, a, b, c, d, e, f, g); }); }); var _VirtualDom_lazy8 = F9(function(func, a, b, c, d, e, f, g, h) { return _VirtualDom_thunk([func, a, b, c, d, e, f, g, h], function() { return A8(func, a, b, c, d, e, f, g, h); }); }); // FACTS var _VirtualDom_on = F2(function(key, handler) { return { $: 'a0', n: key, o: handler }; }); var _VirtualDom_style = F2(function(key, value) { return { $: 'a1', n: key, o: value }; }); var _VirtualDom_property = F2(function(key, value) { return { $: 'a2', n: key, o: value }; }); var _VirtualDom_attribute = F2(function(key, value) { return { $: 'a3', n: key, o: value }; }); var _VirtualDom_attributeNS = F3(function(namespace, key, value) { return { $: 'a4', n: key, o: { f: namespace, o: value } }; }); // XSS ATTACK VECTOR CHECKS function _VirtualDom_noScript(tag) { return tag == 'script' ? 'p' : tag; } function _VirtualDom_noOnOrFormAction(key) { return /^(on|formAction$)/i.test(key) ? 'data-' + key : key; } function _VirtualDom_noInnerHtmlOrFormAction(key) { return key == 'innerHTML' || key == 'formAction' ? 'data-' + key : key; } function _VirtualDom_noJavaScriptUri_UNUSED(value) { return /^javascript:/i.test(value.replace(/\s/g,'')) ? '' : value; } function _VirtualDom_noJavaScriptUri(value) { return /^javascript:/i.test(value.replace(/\s/g,'')) ? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")' : value; } function _VirtualDom_noJavaScriptOrHtmlUri_UNUSED(value) { return /^\s*(javascript:|data:text\/html)/i.test(value) ? '' : value; } function _VirtualDom_noJavaScriptOrHtmlUri(value) { return /^\s*(javascript:|data:text\/html)/i.test(value) ? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")' : value; } // MAP FACTS var _VirtualDom_mapAttribute = F2(function(func, attr) { return (attr.$ === 'a0') ? A2(_VirtualDom_on, attr.n, _VirtualDom_mapHandler(func, attr.o)) : attr; }); function _VirtualDom_mapHandler(func, handler) { var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler); // 0 = Normal // 1 = MayStopPropagation // 2 = MayPreventDefault // 3 = Custom return { $: handler.$, a: !tag ? A2($elm$json$Json$Decode$map, func, handler.a) : A3($elm$json$Json$Decode$map2, tag < 3 ? _VirtualDom_mapEventTuple : _VirtualDom_mapEventRecord, $elm$json$Json$Decode$succeed(func), handler.a ) }; } var _VirtualDom_mapEventTuple = F2(function(func, tuple) { return _Utils_Tuple2(func(tuple.a), tuple.b); }); var _VirtualDom_mapEventRecord = F2(function(func, record) { return { message: func(record.message), stopPropagation: record.stopPropagation, preventDefault: record.preventDefault } }); // ORGANIZE FACTS function _VirtualDom_organizeFacts(factList) { for (var facts = {}; factList.b; factList = factList.b) // WHILE_CONS { var entry = factList.a; var tag = entry.$; var key = entry.n; var value = entry.o; if (tag === 'a2') { (key === 'className') ? _VirtualDom_addClass(facts, key, _Json_unwrap(value)) : facts[key] = _Json_unwrap(value); continue; } var subFacts = facts[tag] || (facts[tag] = {}); (tag === 'a3' && key === 'class') ? _VirtualDom_addClass(subFacts, key, value) : subFacts[key] = value; } return facts; } function _VirtualDom_addClass(object, key, newClass) { var classes = object[key]; object[key] = classes ? classes + ' ' + newClass : newClass; } // RENDER function _VirtualDom_render(vNode, eventNode) { var tag = vNode.$; if (tag === 5) { return _VirtualDom_render(vNode.k || (vNode.k = vNode.m()), eventNode); } if (tag === 0) { return _VirtualDom_doc.createTextNode(vNode.a); } if (tag === 4) { var subNode = vNode.k; var tagger = vNode.j; while (subNode.$ === 4) { typeof tagger !== 'object' ? tagger = [tagger, subNode.j] : tagger.push(subNode.j); subNode = subNode.k; } var subEventRoot = { j: tagger, p: eventNode }; var domNode = _VirtualDom_render(subNode, subEventRoot); domNode.elm_event_node_ref = subEventRoot; return domNode; } if (tag === 3) { var domNode = vNode.h(vNode.g); _VirtualDom_applyFacts(domNode, eventNode, vNode.d); return domNode; } // at this point `tag` must be 1 or 2 var domNode = vNode.f ? _VirtualDom_doc.createElementNS(vNode.f, vNode.c) : _VirtualDom_doc.createElement(vNode.c); if (_VirtualDom_divertHrefToApp && vNode.c == 'a') { domNode.addEventListener('click', _VirtualDom_divertHrefToApp(domNode)); } _VirtualDom_applyFacts(domNode, eventNode, vNode.d); for (var kids = vNode.e, i = 0; i < kids.length; i++) { _VirtualDom_appendChild(domNode, _VirtualDom_render(tag === 1 ? kids[i] : kids[i].b, eventNode)); } return domNode; } // APPLY FACTS function _VirtualDom_applyFacts(domNode, eventNode, facts) { for (var key in facts) { var value = facts[key]; key === 'a1' ? _VirtualDom_applyStyles(domNode, value) : key === 'a0' ? _VirtualDom_applyEvents(domNode, eventNode, value) : key === 'a3' ? _VirtualDom_applyAttrs(domNode, value) : key === 'a4' ? _VirtualDom_applyAttrsNS(domNode, value) : ((key !== 'value' && key !== 'checked') || domNode[key] !== value) && (domNode[key] = value); } } // APPLY STYLES function _VirtualDom_applyStyles(domNode, styles) { var domNodeStyle = domNode.style; for (var key in styles) { domNodeStyle[key] = styles[key]; } } // APPLY ATTRS function _VirtualDom_applyAttrs(domNode, attrs) { for (var key in attrs) { var value = attrs[key]; typeof value !== 'undefined' ? domNode.setAttribute(key, value) : domNode.removeAttribute(key); } } // APPLY NAMESPACED ATTRS function _VirtualDom_applyAttrsNS(domNode, nsAttrs) { for (var key in nsAttrs) { var pair = nsAttrs[key]; var namespace = pair.f; var value = pair.o; typeof value !== 'undefined' ? domNode.setAttributeNS(namespace, key, value) : domNode.removeAttributeNS(namespace, key); } } // APPLY EVENTS function _VirtualDom_applyEvents(domNode, eventNode, events) { var allCallbacks = domNode.elmFs || (domNode.elmFs = {}); for (var key in events) { var newHandler = events[key]; var oldCallback = allCallbacks[key]; if (!newHandler) { domNode.removeEventListener(key, oldCallback); allCallbacks[key] = undefined; continue; } if (oldCallback) { var oldHandler = oldCallback.q; if (oldHandler.$ === newHandler.$) { oldCallback.q = newHandler; continue; } domNode.removeEventListener(key, oldCallback); } oldCallback = _VirtualDom_makeCallback(eventNode, newHandler); domNode.addEventListener(key, oldCallback, _VirtualDom_passiveSupported && { passive: $elm$virtual_dom$VirtualDom$toHandlerInt(newHandler) < 2 } ); allCallbacks[key] = oldCallback; } } // PASSIVE EVENTS var _VirtualDom_passiveSupported; try { window.addEventListener('t', null, Object.defineProperty({}, 'passive', { get: function() { _VirtualDom_passiveSupported = true; } })); } catch(e) {} // EVENT HANDLERS function _VirtualDom_makeCallback(eventNode, initialHandler) { function callback(event) { var handler = callback.q; var result = _Json_runHelp(handler.a, event); if (!$elm$core$Result$isOk(result)) { return; } var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler); // 0 = Normal // 1 = MayStopPropagation // 2 = MayPreventDefault // 3 = Custom var value = result.a; var message = !tag ? value : tag < 3 ? value.a : value.message; var stopPropagation = tag == 1 ? value.b : tag == 3 && value.stopPropagation; var currentEventNode = ( stopPropagation && event.stopPropagation(), (tag == 2 ? value.b : tag == 3 && value.preventDefault) && event.preventDefault(), eventNode ); var tagger; var i; while (tagger = currentEventNode.j) { if (typeof tagger == 'function') { message = tagger(message); } else { for (var i = tagger.length; i--; ) { message = tagger[i](message); } } currentEventNode = currentEventNode.p; } currentEventNode(message, stopPropagation); // stopPropagation implies isSync } callback.q = initialHandler; return callback; } function _VirtualDom_equalEvents(x, y) { return x.$ == y.$ && _Json_equality(x.a, y.a); } // DIFF // TODO: Should we do patches like in iOS? // // type Patch // = At Int Patch // | Batch (List Patch) // | Change ... // // How could it not be better? // function _VirtualDom_diff(x, y) { var patches = []; _VirtualDom_diffHelp(x, y, patches, 0); return patches; } function _VirtualDom_pushPatch(patches, type, index, data) { var patch = { $: type, r: index, s: data, t: undefined, u: undefined }; patches.push(patch); return patch; } function _VirtualDom_diffHelp(x, y, patches, index) { if (x === y) { return; } var xType = x.$; var yType = y.$; // Bail if you run into different types of nodes. Implies that the // structure has changed significantly and it's not worth a diff. if (xType !== yType) { if (xType === 1 && yType === 2) { y = _VirtualDom_dekey(y); yType = 1; } else { _VirtualDom_pushPatch(patches, 0, index, y); return; } } // Now we know that both nodes are the same $. switch (yType) { case 5: var xRefs = x.l; var yRefs = y.l; var i = xRefs.length; var same = i === yRefs.length; while (same && i--) { same = xRefs[i] === yRefs[i]; } if (same) { y.k = x.k; return; } y.k = y.m(); var subPatches = []; _VirtualDom_diffHelp(x.k, y.k, subPatches, 0); subPatches.length > 0 && _VirtualDom_pushPatch(patches, 1, index, subPatches); return; case 4: // gather nested taggers var xTaggers = x.j; var yTaggers = y.j; var nesting = false; var xSubNode = x.k; while (xSubNode.$ === 4) { nesting = true; typeof xTaggers !== 'object' ? xTaggers = [xTaggers, xSubNode.j] : xTaggers.push(xSubNode.j); xSubNode = xSubNode.k; } var ySubNode = y.k; while (ySubNode.$ === 4) { nesting = true; typeof yTaggers !== 'object' ? yTaggers = [yTaggers, ySubNode.j] : yTaggers.push(ySubNode.j); ySubNode = ySubNode.k; } // Just bail if different numbers of taggers. This implies the // structure of the virtual DOM has changed. if (nesting && xTaggers.length !== yTaggers.length) { _VirtualDom_pushPatch(patches, 0, index, y); return; } // check if taggers are "the same" if (nesting ? !_VirtualDom_pairwiseRefEqual(xTaggers, yTaggers) : xTaggers !== yTaggers) { _VirtualDom_pushPatch(patches, 2, index, yTaggers); } // diff everything below the taggers _VirtualDom_diffHelp(xSubNode, ySubNode, patches, index + 1); return; case 0: if (x.a !== y.a) { _VirtualDom_pushPatch(patches, 3, index, y.a); } return; case 1: _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKids); return; case 2: _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKeyedKids); return; case 3: if (x.h !== y.h) { _VirtualDom_pushPatch(patches, 0, index, y); return; } var factsDiff = _VirtualDom_diffFacts(x.d, y.d); factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff); var patch = y.i(x.g, y.g); patch && _VirtualDom_pushPatch(patches, 5, index, patch); return; } } // assumes the incoming arrays are the same length function _VirtualDom_pairwiseRefEqual(as, bs) { for (var i = 0; i < as.length; i++) { if (as[i] !== bs[i]) { return false; } } return true; } function _VirtualDom_diffNodes(x, y, patches, index, diffKids) { // Bail if obvious indicators have changed. Implies more serious // structural changes such that it's not worth it to diff. if (x.c !== y.c || x.f !== y.f) { _VirtualDom_pushPatch(patches, 0, index, y); return; } var factsDiff = _VirtualDom_diffFacts(x.d, y.d); factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff); diffKids(x, y, patches, index); } // DIFF FACTS // TODO Instead of creating a new diff object, it's possible to just test if // there *is* a diff. During the actual patch, do the diff again and make the // modifications directly. This way, there's no new allocations. Worth it? function _VirtualDom_diffFacts(x, y, category) { var diff; // look for changes and removals for (var xKey in x) { if (xKey === 'a1' || xKey === 'a0' || xKey === 'a3' || xKey === 'a4') { var subDiff = _VirtualDom_diffFacts(x[xKey], y[xKey] || {}, xKey); if (subDiff) { diff = diff || {}; diff[xKey] = subDiff; } continue; } // remove if not in the new facts if (!(xKey in y)) { diff = diff || {}; diff[xKey] = !category ? (typeof x[xKey] === 'string' ? '' : null) : (category === 'a1') ? '' : (category === 'a0' || category === 'a3') ? undefined : { f: x[xKey].f, o: undefined }; continue; } var xValue = x[xKey]; var yValue = y[xKey]; // reference equal, so don't worry about it if (xValue === yValue && xKey !== 'value' && xKey !== 'checked' || category === 'a0' && _VirtualDom_equalEvents(xValue, yValue)) { continue; } diff = diff || {}; diff[xKey] = yValue; } // add new stuff for (var yKey in y) { if (!(yKey in x)) { diff = diff || {}; diff[yKey] = y[yKey]; } } return diff; } // DIFF KIDS function _VirtualDom_diffKids(xParent, yParent, patches, index) { var xKids = xParent.e; var yKids = yParent.e; var xLen = xKids.length; var yLen = yKids.length; // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS if (xLen > yLen) { _VirtualDom_pushPatch(patches, 6, index, { v: yLen, i: xLen - yLen }); } else if (xLen < yLen) { _VirtualDom_pushPatch(patches, 7, index, { v: xLen, e: yKids }); } // PAIRWISE DIFF EVERYTHING ELSE for (var minLen = xLen < yLen ? xLen : yLen, i = 0; i < minLen; i++) { var xKid = xKids[i]; _VirtualDom_diffHelp(xKid, yKids[i], patches, ++index); index += xKid.b || 0; } } // KEYED DIFF function _VirtualDom_diffKeyedKids(xParent, yParent, patches, rootIndex) { var localPatches = []; var changes = {}; // Dict String Entry var inserts = []; // Array { index : Int, entry : Entry } // type Entry = { tag : String, vnode : VNode, index : Int, data : _ } var xKids = xParent.e; var yKids = yParent.e; var xLen = xKids.length; var yLen = yKids.length; var xIndex = 0; var yIndex = 0; var index = rootIndex; while (xIndex < xLen && yIndex < yLen) { var x = xKids[xIndex]; var y = yKids[yIndex]; var xKey = x.a; var yKey = y.a; var xNode = x.b; var yNode = y.b; var newMatch = undefined; var oldMatch = undefined; // check if keys match if (xKey === yKey) { index++; _VirtualDom_diffHelp(xNode, yNode, localPatches, index); index += xNode.b || 0; xIndex++; yIndex++; continue; } // look ahead 1 to detect insertions and removals. var xNext = xKids[xIndex + 1]; var yNext = yKids[yIndex + 1]; if (xNext) { var xNextKey = xNext.a; var xNextNode = xNext.b; oldMatch = yKey === xNextKey; } if (yNext) { var yNextKey = yNext.a; var yNextNode = yNext.b; newMatch = xKey === yNextKey; } // swap x and y if (newMatch && oldMatch) { index++; _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index); _VirtualDom_insertNode(changes, localPatches, xKey, yNode, yIndex, inserts); index += xNode.b || 0; index++; _VirtualDom_removeNode(changes, localPatches, xKey, xNextNode, index); index += xNextNode.b || 0; xIndex += 2; yIndex += 2; continue; } // insert y if (newMatch) { index++; _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts); _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index); index += xNode.b || 0; xIndex += 1; yIndex += 2; continue; } // remove x if (oldMatch) { index++; _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index); index += xNode.b || 0; index++; _VirtualDom_diffHelp(xNextNode, yNode, localPatches, index); index += xNextNode.b || 0; xIndex += 2; yIndex += 1; continue; } // remove x, insert y if (xNext && xNextKey === yNextKey) { index++; _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index); _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts); index += xNode.b || 0; index++; _VirtualDom_diffHelp(xNextNode, yNextNode, localPatches, index); index += xNextNode.b || 0; xIndex += 2; yIndex += 2; continue; } break; } // eat up any remaining nodes with removeNode and insertNode while (xIndex < xLen) { index++; var x = xKids[xIndex]; var xNode = x.b; _VirtualDom_removeNode(changes, localPatches, x.a, xNode, index); index += xNode.b || 0; xIndex++; } while (yIndex < yLen) { var endInserts = endInserts || []; var y = yKids[yIndex]; _VirtualDom_insertNode(changes, localPatches, y.a, y.b, undefined, endInserts); yIndex++; } if (localPatches.length > 0 || inserts.length > 0 || endInserts) { _VirtualDom_pushPatch(patches, 8, rootIndex, { w: localPatches, x: inserts, y: endInserts }); } } // CHANGES FROM KEYED DIFF var _VirtualDom_POSTFIX = '_elmW6BL'; function _VirtualDom_insertNode(changes, localPatches, key, vnode, yIndex, inserts) { var entry = changes[key]; // never seen this key before if (!entry) { entry = { c: 0, z: vnode, r: yIndex, s: undefined }; inserts.push({ r: yIndex, A: entry }); changes[key] = entry; return; } // this key was removed earlier, a match! if (entry.c === 1) { inserts.push({ r: yIndex, A: entry }); entry.c = 2; var subPatches = []; _VirtualDom_diffHelp(entry.z, vnode, subPatches, entry.r); entry.r = yIndex; entry.s.s = { w: subPatches, A: entry }; return; } // this key has already been inserted or moved, a duplicate! _VirtualDom_insertNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, yIndex, inserts); } function _VirtualDom_removeNode(changes, localPatches, key, vnode, index) { var entry = changes[key]; // never seen this key before if (!entry) { var patch = _VirtualDom_pushPatch(localPatches, 9, index, undefined); changes[key] = { c: 1, z: vnode, r: index, s: patch }; return; } // this key was inserted earlier, a match! if (entry.c === 0) { entry.c = 2; var subPatches = []; _VirtualDom_diffHelp(vnode, entry.z, subPatches, index); _VirtualDom_pushPatch(localPatches, 9, index, { w: subPatches, A: entry }); return; } // this key has already been removed or moved, a duplicate! _VirtualDom_removeNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, index); } // ADD DOM NODES // // Each DOM node has an "index" assigned in order of traversal. It is important // to minimize our crawl over the actual DOM, so these indexes (along with the // descendantsCount of virtual nodes) let us skip touching entire subtrees of // the DOM if we know there are no patches there. function _VirtualDom_addDomNodes(domNode, vNode, patches, eventNode) { _VirtualDom_addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.b, eventNode); } // assumes `patches` is non-empty and indexes increase monotonically. function _VirtualDom_addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode) { var patch = patches[i]; var index = patch.r; while (index === low) { var patchType = patch.$; if (patchType === 1) { _VirtualDom_addDomNodes(domNode, vNode.k, patch.s, eventNode); } else if (patchType === 8) { patch.t = domNode; patch.u = eventNode; var subPatches = patch.s.w; if (subPatches.length > 0) { _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); } } else if (patchType === 9) { patch.t = domNode; patch.u = eventNode; var data = patch.s; if (data) { data.A.s = domNode; var subPatches = data.w; if (subPatches.length > 0) { _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); } } } else { patch.t = domNode; patch.u = eventNode; } i++; if (!(patch = patches[i]) || (index = patch.r) > high) { return i; } } var tag = vNode.$; if (tag === 4) { var subNode = vNode.k; while (subNode.$ === 4) { subNode = subNode.k; } return _VirtualDom_addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref); } // tag must be 1 or 2 at this point var vKids = vNode.e; var childNodes = domNode.childNodes; for (var j = 0; j < vKids.length; j++) { low++; var vKid = tag === 1 ? vKids[j] : vKids[j].b; var nextLow = low + (vKid.b || 0); if (low <= index && index <= nextLow) { i = _VirtualDom_addDomNodesHelp(childNodes[j], vKid, patches, i, low, nextLow, eventNode); if (!(patch = patches[i]) || (index = patch.r) > high) { return i; } } low = nextLow; } return i; } // APPLY PATCHES function _VirtualDom_applyPatches(rootDomNode, oldVirtualNode, patches, eventNode) { if (patches.length === 0) { return rootDomNode; } _VirtualDom_addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode); return _VirtualDom_applyPatchesHelp(rootDomNode, patches); } function _VirtualDom_applyPatchesHelp(rootDomNode, patches) { for (var i = 0; i < patches.length; i++) { var patch = patches[i]; var localDomNode = patch.t var newNode = _VirtualDom_applyPatch(localDomNode, patch); if (localDomNode === rootDomNode) { rootDomNode = newNode; } } return rootDomNode; } function _VirtualDom_applyPatch(domNode, patch) { switch (patch.$) { case 0: return _VirtualDom_applyPatchRedraw(domNode, patch.s, patch.u); case 4: _VirtualDom_applyFacts(domNode, patch.u, patch.s); return domNode; case 3: domNode.replaceData(0, domNode.length, patch.s); return domNode; case 1: return _VirtualDom_applyPatchesHelp(domNode, patch.s); case 2: if (domNode.elm_event_node_ref) { domNode.elm_event_node_ref.j = patch.s; } else { domNode.elm_event_node_ref = { j: patch.s, p: patch.u }; } return domNode; case 6: var data = patch.s; for (var i = 0; i < data.i; i++) { domNode.removeChild(domNode.childNodes[data.v]); } return domNode; case 7: var data = patch.s; var kids = data.e; var i = data.v; var theEnd = domNode.childNodes[i]; for (; i < kids.length; i++) { domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd); } return domNode; case 9: var data = patch.s; if (!data) { domNode.parentNode.removeChild(domNode); return domNode; } var entry = data.A; if (typeof entry.r !== 'undefined') { domNode.parentNode.removeChild(domNode); } entry.s = _VirtualDom_applyPatchesHelp(domNode, data.w); return domNode; case 8: return _VirtualDom_applyPatchReorder(domNode, patch); case 5: return patch.s(domNode); default: _Debug_crash(10); // 'Ran into an unknown patch!' } } function _VirtualDom_applyPatchRedraw(domNode, vNode, eventNode) { var parentNode = domNode.parentNode; var newNode = _VirtualDom_render(vNode, eventNode); if (!newNode.elm_event_node_ref) { newNode.elm_event_node_ref = domNode.elm_event_node_ref; } if (parentNode && newNode !== domNode) { parentNode.replaceChild(newNode, domNode); } return newNode; } function _VirtualDom_applyPatchReorder(domNode, patch) { var data = patch.s; // remove end inserts var frag = _VirtualDom_applyPatchReorderEndInsertsHelp(data.y, patch); // removals domNode = _VirtualDom_applyPatchesHelp(domNode, data.w); // inserts var inserts = data.x; for (var i = 0; i < inserts.length; i++) { var insert = inserts[i]; var entry = insert.A; var node = entry.c === 2 ? entry.s : _VirtualDom_render(entry.z, patch.u); domNode.insertBefore(node, domNode.childNodes[insert.r]); } // add end inserts if (frag) { _VirtualDom_appendChild(domNode, frag); } return domNode; } function _VirtualDom_applyPatchReorderEndInsertsHelp(endInserts, patch) { if (!endInserts) { return; } var frag = _VirtualDom_doc.createDocumentFragment(); for (var i = 0; i < endInserts.length; i++) { var insert = endInserts[i]; var entry = insert.A; _VirtualDom_appendChild(frag, entry.c === 2 ? entry.s : _VirtualDom_render(entry.z, patch.u) ); } return frag; } function _VirtualDom_virtualize(node) { // TEXT NODES if (node.nodeType === 3) { return _VirtualDom_text(node.textContent); } // WEIRD NODES if (node.nodeType !== 1) { return _VirtualDom_text(''); } // ELEMENT NODES var attrList = _List_Nil; var attrs = node.attributes; for (var i = attrs.length; i--; ) { var attr = attrs[i]; var name = attr.name; var value = attr.value; attrList = _List_Cons( A2(_VirtualDom_attribute, name, value), attrList ); } var tag = node.tagName.toLowerCase(); var kidList = _List_Nil; var kids = node.childNodes; for (var i = kids.length; i--; ) { kidList = _List_Cons(_VirtualDom_virtualize(kids[i]), kidList); } return A3(_VirtualDom_node, tag, attrList, kidList); } function _VirtualDom_dekey(keyedNode) { var keyedKids = keyedNode.e; var len = keyedKids.length; var kids = new Array(len); for (var i = 0; i < len; i++) { kids[i] = keyedKids[i].b; } return { $: 1, c: keyedNode.c, d: keyedNode.d, e: kids, f: keyedNode.f, b: keyedNode.b }; } // ELEMENT var _Debugger_element; var _Browser_element = _Debugger_element || F4(function(impl, flagDecoder, debugMetadata, args) { return _Platform_initialize( flagDecoder, args, impl.init, impl.update, impl.subscriptions, function(sendToApp, initialModel) { var view = impl.view; /**_UNUSED/ var domNode = args['node']; //*/ /**/ var domNode = args && args['node'] ? args['node'] : _Debug_crash(0); //*/ var currNode = _VirtualDom_virtualize(domNode); return _Browser_makeAnimator(initialModel, function(model) { var nextNode = view(model); var patches = _VirtualDom_diff(currNode, nextNode); domNode = _VirtualDom_applyPatches(domNode, currNode, patches, sendToApp); currNode = nextNode; }); } ); }); // DOCUMENT var _Debugger_document; var _Browser_document = _Debugger_document || F4(function(impl, flagDecoder, debugMetadata, args) { return _Platform_initialize( flagDecoder, args, impl.init, impl.update, impl.subscriptions, function(sendToApp, initialModel) { var divertHrefToApp = impl.setup && impl.setup(sendToApp) var view = impl.view; var title = _VirtualDom_doc.title; var bodyNode = _VirtualDom_doc.body; var currNode = _VirtualDom_virtualize(bodyNode); return _Browser_makeAnimator(initialModel, function(model) { _VirtualDom_divertHrefToApp = divertHrefToApp; var doc = view(model); var nextNode = _VirtualDom_node('body')(_List_Nil)(doc.body); var patches = _VirtualDom_diff(currNode, nextNode); bodyNode = _VirtualDom_applyPatches(bodyNode, currNode, patches, sendToApp); currNode = nextNode; _VirtualDom_divertHrefToApp = 0; (title !== doc.title) && (_VirtualDom_doc.title = title = doc.title); }); } ); }); // ANIMATION var _Browser_cancelAnimationFrame = typeof cancelAnimationFrame !== 'undefined' ? cancelAnimationFrame : function(id) { clearTimeout(id); }; var _Browser_requestAnimationFrame = typeof requestAnimationFrame !== 'undefined' ? requestAnimationFrame : function(callback) { return setTimeout(callback, 1000 / 60); }; function _Browser_makeAnimator(model, draw) { draw(model); var state = 0; function updateIfNeeded() { state = state === 1 ? 0 : ( _Browser_requestAnimationFrame(updateIfNeeded), draw(model), 1 ); } return function(nextModel, isSync) { model = nextModel; isSync ? ( draw(model), state === 2 && (state = 1) ) : ( state === 0 && _Browser_requestAnimationFrame(updateIfNeeded), state = 2 ); }; } // APPLICATION function _Browser_application(impl) { var onUrlChange = impl.onUrlChange; var onUrlRequest = impl.onUrlRequest; var key = function() { key.a(onUrlChange(_Browser_getUrl())); }; return _Browser_document({ setup: function(sendToApp) { key.a = sendToApp; _Browser_window.addEventListener('popstate', key); _Browser_window.navigator.userAgent.indexOf('Trident') < 0 || _Browser_window.addEventListener('hashchange', key); return F2(function(domNode, event) { if (!event.ctrlKey && !event.metaKey && !event.shiftKey && event.button < 1 && !domNode.target && !domNode.hasAttribute('download')) { event.preventDefault(); var href = domNode.href; var curr = _Browser_getUrl(); var next = $elm$url$Url$fromString(href).a; sendToApp(onUrlRequest( (next && curr.protocol === next.protocol && curr.host === next.host && curr.port_.a === next.port_.a ) ? $elm$browser$Browser$Internal(next) : $elm$browser$Browser$External(href) )); } }); }, init: function(flags) { return A3(impl.init, flags, _Browser_getUrl(), key); }, view: impl.view, update: impl.update, subscriptions: impl.subscriptions }); } function _Browser_getUrl() { return $elm$url$Url$fromString(_VirtualDom_doc.location.href).a || _Debug_crash(1); } var _Browser_go = F2(function(key, n) { return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() { n && history.go(n); key(); })); }); var _Browser_pushUrl = F2(function(key, url) { return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() { history.pushState({}, '', url); key(); })); }); var _Browser_replaceUrl = F2(function(key, url) { return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() { history.replaceState({}, '', url); key(); })); }); // GLOBAL EVENTS var _Browser_fakeNode = { addEventListener: function() {}, removeEventListener: function() {} }; var _Browser_doc = typeof document !== 'undefined' ? document : _Browser_fakeNode; var _Browser_window = typeof window !== 'undefined' ? window : _Browser_fakeNode; var _Browser_on = F3(function(node, eventName, sendToSelf) { return _Scheduler_spawn(_Scheduler_binding(function(callback) { function handler(event) { _Scheduler_rawSpawn(sendToSelf(event)); } node.addEventListener(eventName, handler, _VirtualDom_passiveSupported && { passive: true }); return function() { node.removeEventListener(eventName, handler); }; })); }); var _Browser_decodeEvent = F2(function(decoder, event) { var result = _Json_runHelp(decoder, event); return $elm$core$Result$isOk(result) ? $elm$core$Maybe$Just(result.a) : $elm$core$Maybe$Nothing; }); // PAGE VISIBILITY function _Browser_visibilityInfo() { return (typeof _VirtualDom_doc.hidden !== 'undefined') ? { hidden: 'hidden', change: 'visibilitychange' } : (typeof _VirtualDom_doc.mozHidden !== 'undefined') ? { hidden: 'mozHidden', change: 'mozvisibilitychange' } : (typeof _VirtualDom_doc.msHidden !== 'undefined') ? { hidden: 'msHidden', change: 'msvisibilitychange' } : (typeof _VirtualDom_doc.webkitHidden !== 'undefined') ? { hidden: 'webkitHidden', change: 'webkitvisibilitychange' } : { hidden: 'hidden', change: 'visibilitychange' }; } // ANIMATION FRAMES function _Browser_rAF() { return _Scheduler_binding(function(callback) { var id = _Browser_requestAnimationFrame(function() { callback(_Scheduler_succeed(Date.now())); }); return function() { _Browser_cancelAnimationFrame(id); }; }); } function _Browser_now() { return _Scheduler_binding(function(callback) { callback(_Scheduler_succeed(Date.now())); }); } // DOM STUFF function _Browser_withNode(id, doStuff) { return _Scheduler_binding(function(callback) { _Browser_requestAnimationFrame(function() { var node = document.getElementById(id); callback(node ? _Scheduler_succeed(doStuff(node)) : _Scheduler_fail($elm$browser$Browser$Dom$NotFound(id)) ); }); }); } function _Browser_withWindow(doStuff) { return _Scheduler_binding(function(callback) { _Browser_requestAnimationFrame(function() { callback(_Scheduler_succeed(doStuff())); }); }); } // FOCUS and BLUR var _Browser_call = F2(function(functionName, id) { return _Browser_withNode(id, function(node) { node[functionName](); return _Utils_Tuple0; }); }); // WINDOW VIEWPORT function _Browser_getViewport() { return { scene: _Browser_getScene(), viewport: { x: _Browser_window.pageXOffset, y: _Browser_window.pageYOffset, width: _Browser_doc.documentElement.clientWidth, height: _Browser_doc.documentElement.clientHeight } }; } function _Browser_getScene() { var body = _Browser_doc.body; var elem = _Browser_doc.documentElement; return { width: Math.max(body.scrollWidth, body.offsetWidth, elem.scrollWidth, elem.offsetWidth, elem.clientWidth), height: Math.max(body.scrollHeight, body.offsetHeight, elem.scrollHeight, elem.offsetHeight, elem.clientHeight) }; } var _Browser_setViewport = F2(function(x, y) { return _Browser_withWindow(function() { _Browser_window.scroll(x, y); return _Utils_Tuple0; }); }); // ELEMENT VIEWPORT function _Browser_getViewportOf(id) { return _Browser_withNode(id, function(node) { return { scene: { width: node.scrollWidth, height: node.scrollHeight }, viewport: { x: node.scrollLeft, y: node.scrollTop, width: node.clientWidth, height: node.clientHeight } }; }); } var _Browser_setViewportOf = F3(function(id, x, y) { return _Browser_withNode(id, function(node) { node.scrollLeft = x; node.scrollTop = y; return _Utils_Tuple0; }); }); // ELEMENT function _Browser_getElement(id) { return _Browser_withNode(id, function(node) { var rect = node.getBoundingClientRect(); var x = _Browser_window.pageXOffset; var y = _Browser_window.pageYOffset; return { scene: _Browser_getScene(), viewport: { x: x, y: y, width: _Browser_doc.documentElement.clientWidth, height: _Browser_doc.documentElement.clientHeight }, element: { x: x + rect.left, y: y + rect.top, width: rect.width, height: rect.height } }; }); } // LOAD and RELOAD function _Browser_reload(skipCache) { return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback) { _VirtualDom_doc.location.reload(skipCache); })); } function _Browser_load(url) { return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback) { try { _Browser_window.location = url; } catch(err) { // Only Firefox can throw a NS_ERROR_MALFORMED_URI exception here. // Other browsers reload the page, so let's be consistent about that. _VirtualDom_doc.location.reload(false); } })); } // SEND REQUEST var _Http_toTask = F3(function(router, toTask, request) { return _Scheduler_binding(function(callback) { function done(response) { callback(toTask(request.expect.a(response))); } var xhr = new XMLHttpRequest(); xhr.addEventListener('error', function() { done($elm$http$Http$NetworkError_); }); xhr.addEventListener('timeout', function() { done($elm$http$Http$Timeout_); }); xhr.addEventListener('load', function() { done(_Http_toResponse(request.expect.b, xhr)); }); $elm$core$Maybe$isJust(request.tracker) && _Http_track(router, xhr, request.tracker.a); try { xhr.open(request.method, request.url, true); } catch (e) { return done($elm$http$Http$BadUrl_(request.url)); } _Http_configureRequest(xhr, request); request.body.a && xhr.setRequestHeader('Content-Type', request.body.a); xhr.send(request.body.b); return function() { xhr.c = true; xhr.abort(); }; }); }); // CONFIGURE function _Http_configureRequest(xhr, request) { for (var headers = request.headers; headers.b; headers = headers.b) // WHILE_CONS { xhr.setRequestHeader(headers.a.a, headers.a.b); } xhr.timeout = request.timeout.a || 0; xhr.responseType = request.expect.d; xhr.withCredentials = request.allowCookiesFromOtherDomains; } // RESPONSES function _Http_toResponse(toBody, xhr) { return A2( 200 <= xhr.status && xhr.status < 300 ? $elm$http$Http$GoodStatus_ : $elm$http$Http$BadStatus_, _Http_toMetadata(xhr), toBody(xhr.response) ); } // METADATA function _Http_toMetadata(xhr) { return { url: xhr.responseURL, statusCode: xhr.status, statusText: xhr.statusText, headers: _Http_parseHeaders(xhr.getAllResponseHeaders()) }; } // HEADERS function _Http_parseHeaders(rawHeaders) { if (!rawHeaders) { return $elm$core$Dict$empty; } var headers = $elm$core$Dict$empty; var headerPairs = rawHeaders.split('\r\n'); for (var i = headerPairs.length; i--; ) { var headerPair = headerPairs[i]; var index = headerPair.indexOf(': '); if (index > 0) { var key = headerPair.substring(0, index); var value = headerPair.substring(index + 2); headers = A3($elm$core$Dict$update, key, function(oldValue) { return $elm$core$Maybe$Just($elm$core$Maybe$isJust(oldValue) ? value + ', ' + oldValue.a : value ); }, headers); } } return headers; } // EXPECT var _Http_expect = F3(function(type, toBody, toValue) { return { $: 0, d: type, b: toBody, a: toValue }; }); var _Http_mapExpect = F2(function(func, expect) { return { $: 0, d: expect.d, b: expect.b, a: function(x) { return func(expect.a(x)); } }; }); function _Http_toDataView(arrayBuffer) { return new DataView(arrayBuffer); } // BODY and PARTS var _Http_emptyBody = { $: 0 }; var _Http_pair = F2(function(a, b) { return { $: 0, a: a, b: b }; }); function _Http_toFormData(parts) { for (var formData = new FormData(); parts.b; parts = parts.b) // WHILE_CONS { var part = parts.a; formData.append(part.a, part.b); } return formData; } var _Http_bytesToBlob = F2(function(mime, bytes) { return new Blob([bytes], { type: mime }); }); // PROGRESS function _Http_track(router, xhr, tracker) { // TODO check out lengthComputable on loadstart event xhr.upload.addEventListener('progress', function(event) { if (xhr.c) { return; } _Scheduler_rawSpawn(A2($elm$core$Platform$sendToSelf, router, _Utils_Tuple2(tracker, $elm$http$Http$Sending({ sent: event.loaded, size: event.total })))); }); xhr.addEventListener('progress', function(event) { if (xhr.c) { return; } _Scheduler_rawSpawn(A2($elm$core$Platform$sendToSelf, router, _Utils_Tuple2(tracker, $elm$http$Http$Receiving({ received: event.loaded, size: event.lengthComputable ? $elm$core$Maybe$Just(event.total) : $elm$core$Maybe$Nothing })))); }); } function _Url_percentEncode(string) { return encodeURIComponent(string); } function _Url_percentDecode(string) { try { return $elm$core$Maybe$Just(decodeURIComponent(string)); } catch (e) { return $elm$core$Maybe$Nothing; } } var _Bitwise_and = F2(function(a, b) { return a & b; }); var _Bitwise_or = F2(function(a, b) { return a | b; }); var _Bitwise_xor = F2(function(a, b) { return a ^ b; }); function _Bitwise_complement(a) { return ~a; }; var _Bitwise_shiftLeftBy = F2(function(offset, a) { return a << offset; }); var _Bitwise_shiftRightBy = F2(function(offset, a) { return a >> offset; }); var _Bitwise_shiftRightZfBy = F2(function(offset, a) { return a >>> offset; }); var $author$project$Main$LinkClicked = function (a) { return {$: 'LinkClicked', a: a}; }; var $author$project$Main$UrlChanged = function (a) { return {$: 'UrlChanged', a: a}; }; var $elm$core$Basics$EQ = {$: 'EQ'}; var $elm$core$Basics$GT = {$: 'GT'}; var $elm$core$Basics$LT = {$: 'LT'}; var $elm$core$List$cons = _List_cons; var $elm$core$Dict$foldr = F3( function (func, acc, t) { foldr: while (true) { if (t.$ === 'RBEmpty_elm_builtin') { return acc; } else { var key = t.b; var value = t.c; var left = t.d; var right = t.e; var $temp$func = func, $temp$acc = A3( func, key, value, A3($elm$core$Dict$foldr, func, acc, right)), $temp$t = left; func = $temp$func; acc = $temp$acc; t = $temp$t; continue foldr; } } }); var $elm$core$Dict$toList = function (dict) { return A3( $elm$core$Dict$foldr, F3( function (key, value, list) { return A2( $elm$core$List$cons, _Utils_Tuple2(key, value), list); }), _List_Nil, dict); }; var $elm$core$Dict$keys = function (dict) { return A3( $elm$core$Dict$foldr, F3( function (key, value, keyList) { return A2($elm$core$List$cons, key, keyList); }), _List_Nil, dict); }; var $elm$core$Set$toList = function (_v0) { var dict = _v0.a; return $elm$core$Dict$keys(dict); }; var $elm$core$Elm$JsArray$foldr = _JsArray_foldr; var $elm$core$Array$foldr = F3( function (func, baseCase, _v0) { var tree = _v0.c; var tail = _v0.d; var helper = F2( function (node, acc) { if (node.$ === 'SubTree') { var subTree = node.a; return A3($elm$core$Elm$JsArray$foldr, helper, acc, subTree); } else { var values = node.a; return A3($elm$core$Elm$JsArray$foldr, func, acc, values); } }); return A3( $elm$core$Elm$JsArray$foldr, helper, A3($elm$core$Elm$JsArray$foldr, func, baseCase, tail), tree); }); var $elm$core$Array$toList = function (array) { return A3($elm$core$Array$foldr, $elm$core$List$cons, _List_Nil, array); }; var $elm$core$Result$Err = function (a) { return {$: 'Err', a: a}; }; var $elm$json$Json$Decode$Failure = F2( function (a, b) { return {$: 'Failure', a: a, b: b}; }); var $elm$json$Json$Decode$Field = F2( function (a, b) { return {$: 'Field', a: a, b: b}; }); var $elm$json$Json$Decode$Index = F2( function (a, b) { return {$: 'Index', a: a, b: b}; }); var $elm$core$Result$Ok = function (a) { return {$: 'Ok', a: a}; }; var $elm$json$Json$Decode$OneOf = function (a) { return {$: 'OneOf', a: a}; }; var $elm$core$Basics$False = {$: 'False'}; var $elm$core$Basics$add = _Basics_add; var $elm$core$Maybe$Just = function (a) { return {$: 'Just', a: a}; }; var $elm$core$Maybe$Nothing = {$: 'Nothing'}; var $elm$core$String$all = _String_all; var $elm$core$Basics$and = _Basics_and; var $elm$core$Basics$append = _Utils_append; var $elm$json$Json$Encode$encode = _Json_encode; var $elm$core$String$fromInt = _String_fromNumber; var $elm$core$String$join = F2( function (sep, chunks) { return A2( _String_join, sep, _List_toArray(chunks)); }); var $elm$core$String$split = F2( function (sep, string) { return _List_fromArray( A2(_String_split, sep, string)); }); var $elm$json$Json$Decode$indent = function (str) { return A2( $elm$core$String$join, '\n ', A2($elm$core$String$split, '\n', str)); }; var $elm$core$List$foldl = F3( function (func, acc, list) { foldl: while (true) { if (!list.b) { return acc; } else { var x = list.a; var xs = list.b; var $temp$func = func, $temp$acc = A2(func, x, acc), $temp$list = xs; func = $temp$func; acc = $temp$acc; list = $temp$list; continue foldl; } } }); var $elm$core$List$length = function (xs) { return A3( $elm$core$List$foldl, F2( function (_v0, i) { return i + 1; }), 0, xs); }; var $elm$core$List$map2 = _List_map2; var $elm$core$Basics$le = _Utils_le; var $elm$core$Basics$sub = _Basics_sub; var $elm$core$List$rangeHelp = F3( function (lo, hi, list) { rangeHelp: while (true) { if (_Utils_cmp(lo, hi) < 1) { var $temp$lo = lo, $temp$hi = hi - 1, $temp$list = A2($elm$core$List$cons, hi, list); lo = $temp$lo; hi = $temp$hi; list = $temp$list; continue rangeHelp; } else { return list; } } }); var $elm$core$List$range = F2( function (lo, hi) { return A3($elm$core$List$rangeHelp, lo, hi, _List_Nil); }); var $elm$core$List$indexedMap = F2( function (f, xs) { return A3( $elm$core$List$map2, f, A2( $elm$core$List$range, 0, $elm$core$List$length(xs) - 1), xs); }); var $elm$core$Char$toCode = _Char_toCode; var $elm$core$Char$isLower = function (_char) { var code = $elm$core$Char$toCode(_char); return (97 <= code) && (code <= 122); }; var $elm$core$Char$isUpper = function (_char) { var code = $elm$core$Char$toCode(_char); return (code <= 90) && (65 <= code); }; var $elm$core$Basics$or = _Basics_or; var $elm$core$Char$isAlpha = function (_char) { return $elm$core$Char$isLower(_char) || $elm$core$Char$isUpper(_char); }; var $elm$core$Char$isDigit = function (_char) { var code = $elm$core$Char$toCode(_char); return (code <= 57) && (48 <= code); }; var $elm$core$Char$isAlphaNum = function (_char) { return $elm$core$Char$isLower(_char) || ($elm$core$Char$isUpper(_char) || $elm$core$Char$isDigit(_char)); }; var $elm$core$List$reverse = function (list) { return A3($elm$core$List$foldl, $elm$core$List$cons, _List_Nil, list); }; var $elm$core$String$uncons = _String_uncons; var $elm$json$Json$Decode$errorOneOf = F2( function (i, error) { return '\n\n(' + ($elm$core$String$fromInt(i + 1) + (') ' + $elm$json$Json$Decode$indent( $elm$json$Json$Decode$errorToString(error)))); }); var $elm$json$Json$Decode$errorToString = function (error) { return A2($elm$json$Json$Decode$errorToStringHelp, error, _List_Nil); }; var $elm$json$Json$Decode$errorToStringHelp = F2( function (error, context) { errorToStringHelp: while (true) { switch (error.$) { case 'Field': var f = error.a; var err = error.b; var isSimple = function () { var _v1 = $elm$core$String$uncons(f); if (_v1.$ === 'Nothing') { return false; } else { var _v2 = _v1.a; var _char = _v2.a; var rest = _v2.b; return $elm$core$Char$isAlpha(_char) && A2($elm$core$String$all, $elm$core$Char$isAlphaNum, rest); } }(); var fieldName = isSimple ? ('.' + f) : ('[\'' + (f + '\']')); var $temp$error = err, $temp$context = A2($elm$core$List$cons, fieldName, context); error = $temp$error; context = $temp$context; continue errorToStringHelp; case 'Index': var i = error.a; var err = error.b; var indexName = '[' + ($elm$core$String$fromInt(i) + ']'); var $temp$error = err, $temp$context = A2($elm$core$List$cons, indexName, context); error = $temp$error; context = $temp$context; continue errorToStringHelp; case 'OneOf': var errors = error.a; if (!errors.b) { return 'Ran into a Json.Decode.oneOf with no possibilities' + function () { if (!context.b) { return '!'; } else { return ' at json' + A2( $elm$core$String$join, '', $elm$core$List$reverse(context)); } }(); } else { if (!errors.b.b) { var err = errors.a; var $temp$error = err, $temp$context = context; error = $temp$error; context = $temp$context; continue errorToStringHelp; } else { var starter = function () { if (!context.b) { return 'Json.Decode.oneOf'; } else { return 'The Json.Decode.oneOf at json' + A2( $elm$core$String$join, '', $elm$core$List$reverse(context)); } }(); var introduction = starter + (' failed in the following ' + ($elm$core$String$fromInt( $elm$core$List$length(errors)) + ' ways:')); return A2( $elm$core$String$join, '\n\n', A2( $elm$core$List$cons, introduction, A2($elm$core$List$indexedMap, $elm$json$Json$Decode$errorOneOf, errors))); } } default: var msg = error.a; var json = error.b; var introduction = function () { if (!context.b) { return 'Problem with the given value:\n\n'; } else { return 'Problem with the value at json' + (A2( $elm$core$String$join, '', $elm$core$List$reverse(context)) + ':\n\n '); } }(); return introduction + ($elm$json$Json$Decode$indent( A2($elm$json$Json$Encode$encode, 4, json)) + ('\n\n' + msg)); } } }); var $elm$core$Array$branchFactor = 32; var $elm$core$Array$Array_elm_builtin = F4( function (a, b, c, d) { return {$: 'Array_elm_builtin', a: a, b: b, c: c, d: d}; }); var $elm$core$Elm$JsArray$empty = _JsArray_empty; var $elm$core$Basics$ceiling = _Basics_ceiling; var $elm$core$Basics$fdiv = _Basics_fdiv; var $elm$core$Basics$logBase = F2( function (base, number) { return _Basics_log(number) / _Basics_log(base); }); var $elm$core$Basics$toFloat = _Basics_toFloat; var $elm$core$Array$shiftStep = $elm$core$Basics$ceiling( A2($elm$core$Basics$logBase, 2, $elm$core$Array$branchFactor)); var $elm$core$Array$empty = A4($elm$core$Array$Array_elm_builtin, 0, $elm$core$Array$shiftStep, $elm$core$Elm$JsArray$empty, $elm$core$Elm$JsArray$empty); var $elm$core$Elm$JsArray$initialize = _JsArray_initialize; var $elm$core$Array$Leaf = function (a) { return {$: 'Leaf', a: a}; }; var $elm$core$Basics$apL = F2( function (f, x) { return f(x); }); var $elm$core$Basics$apR = F2( function (x, f) { return f(x); }); var $elm$core$Basics$eq = _Utils_equal; var $elm$core$Basics$floor = _Basics_floor; var $elm$core$Elm$JsArray$length = _JsArray_length; var $elm$core$Basics$gt = _Utils_gt; var $elm$core$Basics$max = F2( function (x, y) { return (_Utils_cmp(x, y) > 0) ? x : y; }); var $elm$core$Basics$mul = _Basics_mul; var $elm$core$Array$SubTree = function (a) { return {$: 'SubTree', a: a}; }; var $elm$core$Elm$JsArray$initializeFromList = _JsArray_initializeFromList; var $elm$core$Array$compressNodes = F2( function (nodes, acc) { compressNodes: while (true) { var _v0 = A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodes); var node = _v0.a; var remainingNodes = _v0.b; var newAcc = A2( $elm$core$List$cons, $elm$core$Array$SubTree(node), acc); if (!remainingNodes.b) { return $elm$core$List$reverse(newAcc); } else { var $temp$nodes = remainingNodes, $temp$acc = newAcc; nodes = $temp$nodes; acc = $temp$acc; continue compressNodes; } } }); var $elm$core$Tuple$first = function (_v0) { var x = _v0.a; return x; }; var $elm$core$Array$treeFromBuilder = F2( function (nodeList, nodeListSize) { treeFromBuilder: while (true) { var newNodeSize = $elm$core$Basics$ceiling(nodeListSize / $elm$core$Array$branchFactor); if (newNodeSize === 1) { return A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodeList).a; } else { var $temp$nodeList = A2($elm$core$Array$compressNodes, nodeList, _List_Nil), $temp$nodeListSize = newNodeSize; nodeList = $temp$nodeList; nodeListSize = $temp$nodeListSize; continue treeFromBuilder; } } }); var $elm$core$Array$builderToArray = F2( function (reverseNodeList, builder) { if (!builder.nodeListSize) { return A4( $elm$core$Array$Array_elm_builtin, $elm$core$Elm$JsArray$length(builder.tail), $elm$core$Array$shiftStep, $elm$core$Elm$JsArray$empty, builder.tail); } else { var treeLen = builder.nodeListSize * $elm$core$Array$branchFactor; var depth = $elm$core$Basics$floor( A2($elm$core$Basics$logBase, $elm$core$Array$branchFactor, treeLen - 1)); var correctNodeList = reverseNodeList ? $elm$core$List$reverse(builder.nodeList) : builder.nodeList; var tree = A2($elm$core$Array$treeFromBuilder, correctNodeList, builder.nodeListSize); return A4( $elm$core$Array$Array_elm_builtin, $elm$core$Elm$JsArray$length(builder.tail) + treeLen, A2($elm$core$Basics$max, 5, depth * $elm$core$Array$shiftStep), tree, builder.tail); } }); var $elm$core$Basics$idiv = _Basics_idiv; var $elm$core$Basics$lt = _Utils_lt; var $elm$core$Array$initializeHelp = F5( function (fn, fromIndex, len, nodeList, tail) { initializeHelp: while (true) { if (fromIndex < 0) { return A2( $elm$core$Array$builderToArray, false, {nodeList: nodeList, nodeListSize: (len / $elm$core$Array$branchFactor) | 0, tail: tail}); } else { var leaf = $elm$core$Array$Leaf( A3($elm$core$Elm$JsArray$initialize, $elm$core$Array$branchFactor, fromIndex, fn)); var $temp$fn = fn, $temp$fromIndex = fromIndex - $elm$core$Array$branchFactor, $temp$len = len, $temp$nodeList = A2($elm$core$List$cons, leaf, nodeList), $temp$tail = tail; fn = $temp$fn; fromIndex = $temp$fromIndex; len = $temp$len; nodeList = $temp$nodeList; tail = $temp$tail; continue initializeHelp; } } }); var $elm$core$Basics$remainderBy = _Basics_remainderBy; var $elm$core$Array$initialize = F2( function (len, fn) { if (len <= 0) { return $elm$core$Array$empty; } else { var tailLen = len % $elm$core$Array$branchFactor; var tail = A3($elm$core$Elm$JsArray$initialize, tailLen, len - tailLen, fn); var initialFromIndex = (len - tailLen) - $elm$core$Array$branchFactor; return A5($elm$core$Array$initializeHelp, fn, initialFromIndex, len, _List_Nil, tail); } }); var $elm$core$Basics$True = {$: 'True'}; var $elm$core$Result$isOk = function (result) { if (result.$ === 'Ok') { return true; } else { return false; } }; var $elm$json$Json$Decode$map = _Json_map1; var $elm$json$Json$Decode$map2 = _Json_map2; var $elm$json$Json$Decode$succeed = _Json_succeed; var $elm$virtual_dom$VirtualDom$toHandlerInt = function (handler) { switch (handler.$) { case 'Normal': return 0; case 'MayStopPropagation': return 1; case 'MayPreventDefault': return 2; default: return 3; } }; var $elm$browser$Browser$External = function (a) { return {$: 'External', a: a}; }; var $elm$browser$Browser$Internal = function (a) { return {$: 'Internal', a: a}; }; var $elm$core$Basics$identity = function (x) { return x; }; var $elm$browser$Browser$Dom$NotFound = function (a) { return {$: 'NotFound', a: a}; }; var $elm$url$Url$Http = {$: 'Http'}; var $elm$url$Url$Https = {$: 'Https'}; var $elm$url$Url$Url = F6( function (protocol, host, port_, path, query, fragment) { return {fragment: fragment, host: host, path: path, port_: port_, protocol: protocol, query: query}; }); var $elm$core$String$contains = _String_contains; var $elm$core$String$length = _String_length; var $elm$core$String$slice = _String_slice; var $elm$core$String$dropLeft = F2( function (n, string) { return (n < 1) ? string : A3( $elm$core$String$slice, n, $elm$core$String$length(string), string); }); var $elm$core$String$indexes = _String_indexes; var $elm$core$String$isEmpty = function (string) { return string === ''; }; var $elm$core$String$left = F2( function (n, string) { return (n < 1) ? '' : A3($elm$core$String$slice, 0, n, string); }); var $elm$core$String$toInt = _String_toInt; var $elm$url$Url$chompBeforePath = F5( function (protocol, path, params, frag, str) { if ($elm$core$String$isEmpty(str) || A2($elm$core$String$contains, '@', str)) { return $elm$core$Maybe$Nothing; } else { var _v0 = A2($elm$core$String$indexes, ':', str); if (!_v0.b) { return $elm$core$Maybe$Just( A6($elm$url$Url$Url, protocol, str, $elm$core$Maybe$Nothing, path, params, frag)); } else { if (!_v0.b.b) { var i = _v0.a; var _v1 = $elm$core$String$toInt( A2($elm$core$String$dropLeft, i + 1, str)); if (_v1.$ === 'Nothing') { return $elm$core$Maybe$Nothing; } else { var port_ = _v1; return $elm$core$Maybe$Just( A6( $elm$url$Url$Url, protocol, A2($elm$core$String$left, i, str), port_, path, params, frag)); } } else { return $elm$core$Maybe$Nothing; } } } }); var $elm$url$Url$chompBeforeQuery = F4( function (protocol, params, frag, str) { if ($elm$core$String$isEmpty(str)) { return $elm$core$Maybe$Nothing; } else { var _v0 = A2($elm$core$String$indexes, '/', str); if (!_v0.b) { return A5($elm$url$Url$chompBeforePath, protocol, '/', params, frag, str); } else { var i = _v0.a; return A5( $elm$url$Url$chompBeforePath, protocol, A2($elm$core$String$dropLeft, i, str), params, frag, A2($elm$core$String$left, i, str)); } } }); var $elm$url$Url$chompBeforeFragment = F3( function (protocol, frag, str) { if ($elm$core$String$isEmpty(str)) { return $elm$core$Maybe$Nothing; } else { var _v0 = A2($elm$core$String$indexes, '?', str); if (!_v0.b) { return A4($elm$url$Url$chompBeforeQuery, protocol, $elm$core$Maybe$Nothing, frag, str); } else { var i = _v0.a; return A4( $elm$url$Url$chompBeforeQuery, protocol, $elm$core$Maybe$Just( A2($elm$core$String$dropLeft, i + 1, str)), frag, A2($elm$core$String$left, i, str)); } } }); var $elm$url$Url$chompAfterProtocol = F2( function (protocol, str) { if ($elm$core$String$isEmpty(str)) { return $elm$core$Maybe$Nothing; } else { var _v0 = A2($elm$core$String$indexes, '#', str); if (!_v0.b) { return A3($elm$url$Url$chompBeforeFragment, protocol, $elm$core$Maybe$Nothing, str); } else { var i = _v0.a; return A3( $elm$url$Url$chompBeforeFragment, protocol, $elm$core$Maybe$Just( A2($elm$core$String$dropLeft, i + 1, str)), A2($elm$core$String$left, i, str)); } } }); var $elm$core$String$startsWith = _String_startsWith; var $elm$url$Url$fromString = function (str) { return A2($elm$core$String$startsWith, 'http://', str) ? A2( $elm$url$Url$chompAfterProtocol, $elm$url$Url$Http, A2($elm$core$String$dropLeft, 7, str)) : (A2($elm$core$String$startsWith, 'https://', str) ? A2( $elm$url$Url$chompAfterProtocol, $elm$url$Url$Https, A2($elm$core$String$dropLeft, 8, str)) : $elm$core$Maybe$Nothing); }; var $elm$core$Basics$never = function (_v0) { never: while (true) { var nvr = _v0.a; var $temp$_v0 = nvr; _v0 = $temp$_v0; continue never; } }; var $elm$core$Task$Perform = function (a) { return {$: 'Perform', a: a}; }; var $elm$core$Task$succeed = _Scheduler_succeed; var $elm$core$Task$init = $elm$core$Task$succeed(_Utils_Tuple0); var $elm$core$List$foldrHelper = F4( function (fn, acc, ctr, ls) { if (!ls.b) { return acc; } else { var a = ls.a; var r1 = ls.b; if (!r1.b) { return A2(fn, a, acc); } else { var b = r1.a; var r2 = r1.b; if (!r2.b) { return A2( fn, a, A2(fn, b, acc)); } else { var c = r2.a; var r3 = r2.b; if (!r3.b) { return A2( fn, a, A2( fn, b, A2(fn, c, acc))); } else { var d = r3.a; var r4 = r3.b; var res = (ctr > 500) ? A3( $elm$core$List$foldl, fn, acc, $elm$core$List$reverse(r4)) : A4($elm$core$List$foldrHelper, fn, acc, ctr + 1, r4); return A2( fn, a, A2( fn, b, A2( fn, c, A2(fn, d, res)))); } } } } }); var $elm$core$List$foldr = F3( function (fn, acc, ls) { return A4($elm$core$List$foldrHelper, fn, acc, 0, ls); }); var $elm$core$List$map = F2( function (f, xs) { return A3( $elm$core$List$foldr, F2( function (x, acc) { return A2( $elm$core$List$cons, f(x), acc); }), _List_Nil, xs); }); var $elm$core$Task$andThen = _Scheduler_andThen; var $elm$core$Task$map = F2( function (func, taskA) { return A2( $elm$core$Task$andThen, function (a) { return $elm$core$Task$succeed( func(a)); }, taskA); }); var $elm$core$Task$map2 = F3( function (func, taskA, taskB) { return A2( $elm$core$Task$andThen, function (a) { return A2( $elm$core$Task$andThen, function (b) { return $elm$core$Task$succeed( A2(func, a, b)); }, taskB); }, taskA); }); var $elm$core$Task$sequence = function (tasks) { return A3( $elm$core$List$foldr, $elm$core$Task$map2($elm$core$List$cons), $elm$core$Task$succeed(_List_Nil), tasks); }; var $elm$core$Platform$sendToApp = _Platform_sendToApp; var $elm$core$Task$spawnCmd = F2( function (router, _v0) { var task = _v0.a; return _Scheduler_spawn( A2( $elm$core$Task$andThen, $elm$core$Platform$sendToApp(router), task)); }); var $elm$core$Task$onEffects = F3( function (router, commands, state) { return A2( $elm$core$Task$map, function (_v0) { return _Utils_Tuple0; }, $elm$core$Task$sequence( A2( $elm$core$List$map, $elm$core$Task$spawnCmd(router), commands))); }); var $elm$core$Task$onSelfMsg = F3( function (_v0, _v1, _v2) { return $elm$core$Task$succeed(_Utils_Tuple0); }); var $elm$core$Task$cmdMap = F2( function (tagger, _v0) { var task = _v0.a; return $elm$core$Task$Perform( A2($elm$core$Task$map, tagger, task)); }); _Platform_effectManagers['Task'] = _Platform_createManager($elm$core$Task$init, $elm$core$Task$onEffects, $elm$core$Task$onSelfMsg, $elm$core$Task$cmdMap); var $elm$core$Task$command = _Platform_leaf('Task'); var $elm$core$Task$perform = F2( function (toMessage, task) { return $elm$core$Task$command( $elm$core$Task$Perform( A2($elm$core$Task$map, toMessage, task))); }); var $elm$browser$Browser$application = _Browser_application; var $author$project$Main$HomePage = {$: 'HomePage'}; var $author$project$Main$Model = F9( function (key, url, location, loginModel, catalogModel, productModel, signupModel, cartModel, checkoutModel) { return {cartModel: cartModel, catalogModel: catalogModel, checkoutModel: checkoutModel, key: key, location: location, loginModel: loginModel, productModel: productModel, signupModel: signupModel, url: url}; }); var $author$project$Cart$Model = F2( function (pageStatus, products) { return {pageStatus: pageStatus, products: products}; }); var $author$project$Cart$NotLoaded = {$: 'NotLoaded'}; var $author$project$Cart$init = A2($author$project$Cart$Model, $author$project$Cart$NotLoaded, _List_Nil); var $author$project$Catalog$Model = F3( function (pageStatus, products, filters) { return {filters: filters, pageStatus: pageStatus, products: products}; }); var $author$project$Catalog$NotLoaded = {$: 'NotLoaded'}; var $author$project$Catalog$Filters = F2( function (price, rating) { return {price: price, rating: rating}; }); var $elm$core$Basics$negate = function (n) { return -n; }; var $author$project$Catalog$defaultFilters = A2( $author$project$Catalog$Filters, _Utils_Tuple2(-1, 100000), _Utils_Tuple2(0, 5)); var $author$project$Catalog$init = A3($author$project$Catalog$Model, $author$project$Catalog$NotLoaded, _List_Nil, $author$project$Catalog$defaultFilters); var $author$project$Checkout$Model = F3( function (pageStatus, paymentMode, cartTotal) { return {cartTotal: cartTotal, pageStatus: pageStatus, paymentMode: paymentMode}; }); var $author$project$Checkout$NotLoaded = {$: 'NotLoaded'}; var $author$project$Checkout$init = A3($author$project$Checkout$Model, $author$project$Checkout$NotLoaded, 'Cash', 0); var $author$project$Login$Model = F3( function (username, password, loginStatus) { return {loginStatus: loginStatus, password: password, username: username}; }); var $author$project$Login$NotLoggedIn = {$: 'NotLoggedIn'}; var $author$project$Login$init = A3($author$project$Login$Model, '', '', $author$project$Login$NotLoggedIn); var $author$project$Product$Model = F6( function (pageStatus, listing, ratings, ratingStars, ratingText, addRatingStatus) { return {addRatingStatus: addRatingStatus, listing: listing, pageStatus: pageStatus, ratingStars: ratingStars, ratingText: ratingText, ratings: ratings}; }); var $author$project$Product$NotLoaded = {$: 'NotLoaded'}; var $author$project$Product$NotSubmitted = {$: 'NotSubmitted'}; var $author$project$Product$Product = F7( function (id, name, kind, price, description, src, iosSrc) { return {description: description, id: id, iosSrc: iosSrc, kind: kind, name: name, price: price, src: src}; }); var $author$project$Product$emptyProduct = A7($author$project$Product$Product, -1, '', $elm$core$Maybe$Nothing, 0, $elm$core$Maybe$Nothing, '', ''); var $author$project$Product$init = A6($author$project$Product$Model, $author$project$Product$NotLoaded, $author$project$Product$emptyProduct, _List_Nil, 5, '', $author$project$Product$NotSubmitted); var $author$project$Signup$Empty = {$: 'Empty'}; var $author$project$Signup$Model = F6( function (username, password, phoneNumber, emailId, address, status) { return {address: address, emailId: emailId, password: password, phoneNumber: phoneNumber, status: status, username: username}; }); var $author$project$Signup$init = A6($author$project$Signup$Model, '', '', '', '', $elm$core$Maybe$Nothing, $author$project$Signup$Empty); var $elm$core$Platform$Cmd$batch = _Platform_batch; var $elm$core$Platform$Cmd$none = $elm$core$Platform$Cmd$batch(_List_Nil); var $author$project$Main$init = F3( function (flags, url, key) { var start = $author$project$Main$HomePage; var signup = $author$project$Signup$init; var product = $author$project$Product$init; var login = $author$project$Login$init; var checkout = $author$project$Checkout$init; var catalog = $author$project$Catalog$init; var cart = $author$project$Cart$init; return _Utils_Tuple2( A9($author$project$Main$Model, key, url, start, login, catalog, product, signup, cart, checkout), $elm$core$Platform$Cmd$none); }); var $elm$core$Platform$Sub$batch = _Platform_batch; var $elm$core$Platform$Sub$none = $elm$core$Platform$Sub$batch(_List_Nil); var $author$project$Main$subscriptions = function (_v0) { return $elm$core$Platform$Sub$none; }; var $author$project$Main$CartMessage = function (a) { return {$: 'CartMessage', a: a}; }; var $author$project$Main$CartPage = {$: 'CartPage'}; var $author$project$Main$CatalogMessage = function (a) { return {$: 'CatalogMessage', a: a}; }; var $author$project$Main$CatalogPage = {$: 'CatalogPage'}; var $author$project$Main$CheckoutMessage = function (a) { return {$: 'CheckoutMessage', a: a}; }; var $author$project$Main$CheckoutPage = {$: 'CheckoutPage'}; var $author$project$Main$LoginMessage = function (a) { return {$: 'LoginMessage', a: a}; }; var $author$project$Main$NotFoundPage = {$: 'NotFoundPage'}; var $author$project$Main$ProductMessage = function (a) { return {$: 'ProductMessage', a: a}; }; var $author$project$Main$ProductPage = function (a) { return {$: 'ProductPage', a: a}; }; var $author$project$Main$SignupMessage = function (a) { return {$: 'SignupMessage', a: a}; }; var $author$project$Checkout$AmountLoaded = function (a) { return {$: 'AmountLoaded', a: a}; }; var $elm$http$Http$BadStatus_ = F2( function (a, b) { return {$: 'BadStatus_', a: a, b: b}; }); var $elm$http$Http$BadUrl_ = function (a) { return {$: 'BadUrl_', a: a}; }; var $elm$http$Http$GoodStatus_ = F2( function (a, b) { return {$: 'GoodStatus_', a: a, b: b}; }); var $elm$http$Http$NetworkError_ = {$: 'NetworkError_'}; var $elm$http$Http$Receiving = function (a) { return {$: 'Receiving', a: a}; }; var $elm$http$Http$Sending = function (a) { return {$: 'Sending', a: a}; }; var $elm$http$Http$Timeout_ = {$: 'Timeout_'}; var $elm$core$Dict$RBEmpty_elm_builtin = {$: 'RBEmpty_elm_builtin'}; var $elm$core$Dict$empty = $elm$core$Dict$RBEmpty_elm_builtin; var $elm$core$Maybe$isJust = function (maybe) { if (maybe.$ === 'Just') { return true; } else { return false; } }; var $elm$core$Platform$sendToSelf = _Platform_sendToSelf; var $elm$core$Basics$compare = _Utils_compare; var $elm$core$Dict$get = F2( function (targetKey, dict) { get: while (true) { if (dict.$ === 'RBEmpty_elm_builtin') { return $elm$core$Maybe$Nothing; } else { var key = dict.b; var value = dict.c; var left = dict.d; var right = dict.e; var _v1 = A2($elm$core$Basics$compare, targetKey, key); switch (_v1.$) { case 'LT': var $temp$targetKey = targetKey, $temp$dict = left; targetKey = $temp$targetKey; dict = $temp$dict; continue get; case 'EQ': return $elm$core$Maybe$Just(value); default: var $temp$targetKey = targetKey, $temp$dict = right; targetKey = $temp$targetKey; dict = $temp$dict; continue get; } } } }); var $elm$core$Dict$Black = {$: 'Black'}; var $elm$core$Dict$RBNode_elm_builtin = F5( function (a, b, c, d, e) { return {$: 'RBNode_elm_builtin', a: a, b: b, c: c, d: d, e: e}; }); var $elm$core$Dict$Red = {$: 'Red'}; var $elm$core$Dict$balance = F5( function (color, key, value, left, right) { if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Red')) { var _v1 = right.a; var rK = right.b; var rV = right.c; var rLeft = right.d; var rRight = right.e; if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) { var _v3 = left.a; var lK = left.b; var lV = left.c; var lLeft = left.d; var lRight = left.e; return A5( $elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, lK, lV, lLeft, lRight), A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rLeft, rRight)); } else { return A5( $elm$core$Dict$RBNode_elm_builtin, color, rK, rV, A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, left, rLeft), rRight); } } else { if ((((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) && (left.d.$ === 'RBNode_elm_builtin')) && (left.d.a.$ === 'Red')) { var _v5 = left.a; var lK = left.b; var lV = left.c; var _v6 = left.d; var _v7 = _v6.a; var llK = _v6.b; var llV = _v6.c; var llLeft = _v6.d; var llRight = _v6.e; var lRight = left.e; return A5( $elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight), A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, key, value, lRight, right)); } else { return A5($elm$core$Dict$RBNode_elm_builtin, color, key, value, left, right); } } }); var $elm$core$Dict$insertHelp = F3( function (key, value, dict) { if (dict.$ === 'RBEmpty_elm_builtin') { return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, $elm$core$Dict$RBEmpty_elm_builtin, $elm$core$Dict$RBEmpty_elm_builtin); } else { var nColor = dict.a; var nKey = dict.b; var nValue = dict.c; var nLeft = dict.d; var nRight = dict.e; var _v1 = A2($elm$core$Basics$compare, key, nKey); switch (_v1.$) { case 'LT': return A5( $elm$core$Dict$balance, nColor, nKey, nValue, A3($elm$core$Dict$insertHelp, key, value, nLeft), nRight); case 'EQ': return A5($elm$core$Dict$RBNode_elm_builtin, nColor, nKey, value, nLeft, nRight); default: return A5( $elm$core$Dict$balance, nColor, nKey, nValue, nLeft, A3($elm$core$Dict$insertHelp, key, value, nRight)); } } }); var $elm$core$Dict$insert = F3( function (key, value, dict) { var _v0 = A3($elm$core$Dict$insertHelp, key, value, dict); if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) { var _v1 = _v0.a; var k = _v0.b; var v = _v0.c; var l = _v0.d; var r = _v0.e; return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r); } else { var x = _v0; return x; } }); var $elm$core$Dict$getMin = function (dict) { getMin: while (true) { if ((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) { var left = dict.d; var $temp$dict = left; dict = $temp$dict; continue getMin; } else { return dict; } } }; var $elm$core$Dict$moveRedLeft = function (dict) { if (((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) && (dict.e.$ === 'RBNode_elm_builtin')) { if ((dict.e.d.$ === 'RBNode_elm_builtin') && (dict.e.d.a.$ === 'Red')) { var clr = dict.a; var k = dict.b; var v = dict.c; var _v1 = dict.d; var lClr = _v1.a; var lK = _v1.b; var lV = _v1.c; var lLeft = _v1.d; var lRight = _v1.e; var _v2 = dict.e; var rClr = _v2.a; var rK = _v2.b; var rV = _v2.c; var rLeft = _v2.d; var _v3 = rLeft.a; var rlK = rLeft.b; var rlV = rLeft.c; var rlL = rLeft.d; var rlR = rLeft.e; var rRight = _v2.e; return A5( $elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rlK, rlV, A5( $elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight), rlL), A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rlR, rRight)); } else { var clr = dict.a; var k = dict.b; var v = dict.c; var _v4 = dict.d; var lClr = _v4.a; var lK = _v4.b; var lV = _v4.c; var lLeft = _v4.d; var lRight = _v4.e; var _v5 = dict.e; var rClr = _v5.a; var rK = _v5.b; var rV = _v5.c; var rLeft = _v5.d; var rRight = _v5.e; if (clr.$ === 'Black') { return A5( $elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight), A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight)); } else { return A5( $elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight), A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight)); } } } else { return dict; } }; var $elm$core$Dict$moveRedRight = function (dict) { if (((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) && (dict.e.$ === 'RBNode_elm_builtin')) { if ((dict.d.d.$ === 'RBNode_elm_builtin') && (dict.d.d.a.$ === 'Red')) { var clr = dict.a; var k = dict.b; var v = dict.c; var _v1 = dict.d; var lClr = _v1.a; var lK = _v1.b; var lV = _v1.c; var _v2 = _v1.d; var _v3 = _v2.a; var llK = _v2.b; var llV = _v2.c; var llLeft = _v2.d; var llRight = _v2.e; var lRight = _v1.e; var _v4 = dict.e; var rClr = _v4.a; var rK = _v4.b; var rV = _v4.c; var rLeft = _v4.d; var rRight = _v4.e; return A5( $elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight), A5( $elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, lRight, A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight))); } else { var clr = dict.a; var k = dict.b; var v = dict.c; var _v5 = dict.d; var lClr = _v5.a; var lK = _v5.b; var lV = _v5.c; var lLeft = _v5.d; var lRight = _v5.e; var _v6 = dict.e; var rClr = _v6.a; var rK = _v6.b; var rV = _v6.c; var rLeft = _v6.d; var rRight = _v6.e; if (clr.$ === 'Black') { return A5( $elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight), A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight)); } else { return A5( $elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight), A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight)); } } } else { return dict; } }; var $elm$core$Dict$removeHelpPrepEQGT = F7( function (targetKey, dict, color, key, value, left, right) { if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) { var _v1 = left.a; var lK = left.b; var lV = left.c; var lLeft = left.d; var lRight = left.e; return A5( $elm$core$Dict$RBNode_elm_builtin, color, lK, lV, lLeft, A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, lRight, right)); } else { _v2$2: while (true) { if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Black')) { if (right.d.$ === 'RBNode_elm_builtin') { if (right.d.a.$ === 'Black') { var _v3 = right.a; var _v4 = right.d; var _v5 = _v4.a; return $elm$core$Dict$moveRedRight(dict); } else { break _v2$2; } } else { var _v6 = right.a; var _v7 = right.d; return $elm$core$Dict$moveRedRight(dict); } } else { break _v2$2; } } return dict; } }); var $elm$core$Dict$removeMin = function (dict) { if ((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) { var color = dict.a; var key = dict.b; var value = dict.c; var left = dict.d; var lColor = left.a; var lLeft = left.d; var right = dict.e; if (lColor.$ === 'Black') { if ((lLeft.$ === 'RBNode_elm_builtin') && (lLeft.a.$ === 'Red')) { var _v3 = lLeft.a; return A5( $elm$core$Dict$RBNode_elm_builtin, color, key, value, $elm$core$Dict$removeMin(left), right); } else { var _v4 = $elm$core$Dict$moveRedLeft(dict); if (_v4.$ === 'RBNode_elm_builtin') { var nColor = _v4.a; var nKey = _v4.b; var nValue = _v4.c; var nLeft = _v4.d; var nRight = _v4.e; return A5( $elm$core$Dict$balance, nColor, nKey, nValue, $elm$core$Dict$removeMin(nLeft), nRight); } else { return $elm$core$Dict$RBEmpty_elm_builtin; } } } else { return A5( $elm$core$Dict$RBNode_elm_builtin, color, key, value, $elm$core$Dict$removeMin(left), right); } } else { return $elm$core$Dict$RBEmpty_elm_builtin; } }; var $elm$core$Dict$removeHelp = F2( function (targetKey, dict) { if (dict.$ === 'RBEmpty_elm_builtin') { return $elm$core$Dict$RBEmpty_elm_builtin; } else { var color = dict.a; var key = dict.b; var value = dict.c; var left = dict.d; var right = dict.e; if (_Utils_cmp(targetKey, key) < 0) { if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Black')) { var _v4 = left.a; var lLeft = left.d; if ((lLeft.$ === 'RBNode_elm_builtin') && (lLeft.a.$ === 'Red')) { var _v6 = lLeft.a; return A5( $elm$core$Dict$RBNode_elm_builtin, color, key, value, A2($elm$core$Dict$removeHelp, targetKey, left), right); } else { var _v7 = $elm$core$Dict$moveRedLeft(dict); if (_v7.$ === 'RBNode_elm_builtin') { var nColor = _v7.a; var nKey = _v7.b; var nValue = _v7.c; var nLeft = _v7.d; var nRight = _v7.e; return A5( $elm$core$Dict$balance, nColor, nKey, nValue, A2($elm$core$Dict$removeHelp, targetKey, nLeft), nRight); } else { return $elm$core$Dict$RBEmpty_elm_builtin; } } } else { return A5( $elm$core$Dict$RBNode_elm_builtin, color, key, value, A2($elm$core$Dict$removeHelp, targetKey, left), right); } } else { return A2( $elm$core$Dict$removeHelpEQGT, targetKey, A7($elm$core$Dict$removeHelpPrepEQGT, targetKey, dict, color, key, value, left, right)); } } }); var $elm$core$Dict$removeHelpEQGT = F2( function (targetKey, dict) { if (dict.$ === 'RBNode_elm_builtin') { var color = dict.a; var key = dict.b; var value = dict.c; var left = dict.d; var right = dict.e; if (_Utils_eq(targetKey, key)) { var _v1 = $elm$core$Dict$getMin(right); if (_v1.$ === 'RBNode_elm_builtin') { var minKey = _v1.b; var minValue = _v1.c; return A5( $elm$core$Dict$balance, color, minKey, minValue, left, $elm$core$Dict$removeMin(right)); } else { return $elm$core$Dict$RBEmpty_elm_builtin; } } else { return A5( $elm$core$Dict$balance, color, key, value, left, A2($elm$core$Dict$removeHelp, targetKey, right)); } } else { return $elm$core$Dict$RBEmpty_elm_builtin; } }); var $elm$core$Dict$remove = F2( function (key, dict) { var _v0 = A2($elm$core$Dict$removeHelp, key, dict); if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) { var _v1 = _v0.a; var k = _v0.b; var v = _v0.c; var l = _v0.d; var r = _v0.e; return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r); } else { var x = _v0; return x; } }); var $elm$core$Dict$update = F3( function (targetKey, alter, dictionary) { var _v0 = alter( A2($elm$core$Dict$get, targetKey, dictionary)); if (_v0.$ === 'Just') { var value = _v0.a; return A3($elm$core$Dict$insert, targetKey, value, dictionary); } else { return A2($elm$core$Dict$remove, targetKey, dictionary); } }); var $elm$http$Http$emptyBody = _Http_emptyBody; var $elm$json$Json$Decode$decodeString = _Json_runOnString; var $elm$core$Basics$composeR = F3( function (f, g, x) { return g( f(x)); }); var $elm$http$Http$expectStringResponse = F2( function (toMsg, toResult) { return A3( _Http_expect, '', $elm$core$Basics$identity, A2($elm$core$Basics$composeR, toResult, toMsg)); }); var $elm$core$Result$mapError = F2( function (f, result) { if (result.$ === 'Ok') { var v = result.a; return $elm$core$Result$Ok(v); } else { var e = result.a; return $elm$core$Result$Err( f(e)); } }); var $elm$http$Http$BadBody = function (a) { return {$: 'BadBody', a: a}; }; var $elm$http$Http$BadStatus = function (a) { return {$: 'BadStatus', a: a}; }; var $elm$http$Http$BadUrl = function (a) { return {$: 'BadUrl', a: a}; }; var $elm$http$Http$NetworkError = {$: 'NetworkError'}; var $elm$http$Http$Timeout = {$: 'Timeout'}; var $elm$http$Http$resolve = F2( function (toResult, response) { switch (response.$) { case 'BadUrl_': var url = response.a; return $elm$core$Result$Err( $elm$http$Http$BadUrl(url)); case 'Timeout_': return $elm$core$Result$Err($elm$http$Http$Timeout); case 'NetworkError_': return $elm$core$Result$Err($elm$http$Http$NetworkError); case 'BadStatus_': var metadata = response.a; return $elm$core$Result$Err( $elm$http$Http$BadStatus(metadata.statusCode)); default: var body = response.b; return A2( $elm$core$Result$mapError, $elm$http$Http$BadBody, toResult(body)); } }); var $elm$http$Http$expectJson = F2( function (toMsg, decoder) { return A2( $elm$http$Http$expectStringResponse, toMsg, $elm$http$Http$resolve( function (string) { return A2( $elm$core$Result$mapError, $elm$json$Json$Decode$errorToString, A2($elm$json$Json$Decode$decodeString, decoder, string)); })); }); var $elm$json$Json$Decode$float = _Json_decodeFloat; var $elm$http$Http$Request = function (a) { return {$: 'Request', a: a}; }; var $elm$http$Http$State = F2( function (reqs, subs) { return {reqs: reqs, subs: subs}; }); var $elm$http$Http$init = $elm$core$Task$succeed( A2($elm$http$Http$State, $elm$core$Dict$empty, _List_Nil)); var $elm$core$Process$kill = _Scheduler_kill; var $elm$core$Process$spawn = _Scheduler_spawn; var $elm$http$Http$updateReqs = F3( function (router, cmds, reqs) { updateReqs: while (true) { if (!cmds.b) { return $elm$core$Task$succeed(reqs); } else { var cmd = cmds.a; var otherCmds = cmds.b; if (cmd.$ === 'Cancel') { var tracker = cmd.a; var _v2 = A2($elm$core$Dict$get, tracker, reqs); if (_v2.$ === 'Nothing') { var $temp$router = router, $temp$cmds = otherCmds, $temp$reqs = reqs; router = $temp$router; cmds = $temp$cmds; reqs = $temp$reqs; continue updateReqs; } else { var pid = _v2.a; return A2( $elm$core$Task$andThen, function (_v3) { return A3( $elm$http$Http$updateReqs, router, otherCmds, A2($elm$core$Dict$remove, tracker, reqs)); }, $elm$core$Process$kill(pid)); } } else { var req = cmd.a; return A2( $elm$core$Task$andThen, function (pid) { var _v4 = req.tracker; if (_v4.$ === 'Nothing') { return A3($elm$http$Http$updateReqs, router, otherCmds, reqs); } else { var tracker = _v4.a; return A3( $elm$http$Http$updateReqs, router, otherCmds, A3($elm$core$Dict$insert, tracker, pid, reqs)); } }, $elm$core$Process$spawn( A3( _Http_toTask, router, $elm$core$Platform$sendToApp(router), req))); } } } }); var $elm$http$Http$onEffects = F4( function (router, cmds, subs, state) { return A2( $elm$core$Task$andThen, function (reqs) { return $elm$core$Task$succeed( A2($elm$http$Http$State, reqs, subs)); }, A3($elm$http$Http$updateReqs, router, cmds, state.reqs)); }); var $elm$core$List$maybeCons = F3( function (f, mx, xs) { var _v0 = f(mx); if (_v0.$ === 'Just') { var x = _v0.a; return A2($elm$core$List$cons, x, xs); } else { return xs; } }); var $elm$core$List$filterMap = F2( function (f, xs) { return A3( $elm$core$List$foldr, $elm$core$List$maybeCons(f), _List_Nil, xs); }); var $elm$http$Http$maybeSend = F4( function (router, desiredTracker, progress, _v0) { var actualTracker = _v0.a; var toMsg = _v0.b; return _Utils_eq(desiredTracker, actualTracker) ? $elm$core$Maybe$Just( A2( $elm$core$Platform$sendToApp, router, toMsg(progress))) : $elm$core$Maybe$Nothing; }); var $elm$http$Http$onSelfMsg = F3( function (router, _v0, state) { var tracker = _v0.a; var progress = _v0.b; return A2( $elm$core$Task$andThen, function (_v1) { return $elm$core$Task$succeed(state); }, $elm$core$Task$sequence( A2( $elm$core$List$filterMap, A3($elm$http$Http$maybeSend, router, tracker, progress), state.subs))); }); var $elm$http$Http$Cancel = function (a) { return {$: 'Cancel', a: a}; }; var $elm$http$Http$cmdMap = F2( function (func, cmd) { if (cmd.$ === 'Cancel') { var tracker = cmd.a; return $elm$http$Http$Cancel(tracker); } else { var r = cmd.a; return $elm$http$Http$Request( { allowCookiesFromOtherDomains: r.allowCookiesFromOtherDomains, body: r.body, expect: A2(_Http_mapExpect, func, r.expect), headers: r.headers, method: r.method, timeout: r.timeout, tracker: r.tracker, url: r.url }); } }); var $elm$http$Http$MySub = F2( function (a, b) { return {$: 'MySub', a: a, b: b}; }); var $elm$http$Http$subMap = F2( function (func, _v0) { var tracker = _v0.a; var toMsg = _v0.b; return A2( $elm$http$Http$MySub, tracker, A2($elm$core$Basics$composeR, toMsg, func)); }); _Platform_effectManagers['Http'] = _Platform_createManager($elm$http$Http$init, $elm$http$Http$onEffects, $elm$http$Http$onSelfMsg, $elm$http$Http$cmdMap, $elm$http$Http$subMap); var $elm$http$Http$command = _Platform_leaf('Http'); var $elm$http$Http$subscription = _Platform_leaf('Http'); var $elm$http$Http$riskyRequest = function (r) { return $elm$http$Http$command( $elm$http$Http$Request( {allowCookiesFromOtherDomains: true, body: r.body, expect: r.expect, headers: r.headers, method: r.method, timeout: r.timeout, tracker: r.tracker, url: r.url})); }; var $author$project$Checkout$fetchAmount = $elm$http$Http$riskyRequest( { body: $elm$http$Http$emptyBody, expect: A2($elm$http$Http$expectJson, $author$project$Checkout$AmountLoaded, $elm$json$Json$Decode$float), headers: _List_Nil, method: 'GET', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: 'http://127.0.0.1:7878/cart/total' }); var $author$project$Cart$CartLoaded = function (a) { return {$: 'CartLoaded', a: a}; }; var $author$project$Cart$CartListing = F2( function (productItem, quantity) { return {productItem: productItem, quantity: quantity}; }); var $author$project$Cart$Product = F5( function (id, name, kind, price, description) { return {description: description, id: id, kind: kind, name: name, price: price}; }); var $elm$json$Json$Decode$field = _Json_decodeField; var $elm$json$Json$Decode$int = _Json_decodeInt; var $elm$json$Json$Decode$map5 = _Json_map5; var $elm$json$Json$Decode$null = _Json_decodeNull; var $elm$json$Json$Decode$oneOf = _Json_oneOf; var $elm$json$Json$Decode$nullable = function (decoder) { return $elm$json$Json$Decode$oneOf( _List_fromArray( [ $elm$json$Json$Decode$null($elm$core$Maybe$Nothing), A2($elm$json$Json$Decode$map, $elm$core$Maybe$Just, decoder) ])); }; var $elm$json$Json$Decode$string = _Json_decodeString; var $author$project$Cart$decodeProduct = A6( $elm$json$Json$Decode$map5, $author$project$Cart$Product, A2($elm$json$Json$Decode$field, 'id', $elm$json$Json$Decode$int), A2($elm$json$Json$Decode$field, 'name', $elm$json$Json$Decode$string), A2( $elm$json$Json$Decode$field, 'kind', $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)), A2($elm$json$Json$Decode$field, 'price', $elm$json$Json$Decode$float), A2( $elm$json$Json$Decode$field, 'description', $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string))); var $elm$json$Json$Decode$list = _Json_decodeList; var $author$project$Cart$decodeResponse = $elm$json$Json$Decode$list( A3( $elm$json$Json$Decode$map2, $author$project$Cart$CartListing, A2($elm$json$Json$Decode$field, 'product_item', $author$project$Cart$decodeProduct), A2($elm$json$Json$Decode$field, 'quantity', $elm$json$Json$Decode$int))); var $elm$core$Debug$log = _Debug_log; var $author$project$Cart$fetchCartItems = function () { var _v0 = A2($elm$core$Debug$log, 'cart', 'fetching cart items'); return $elm$http$Http$riskyRequest( { body: $elm$http$Http$emptyBody, expect: A2($elm$http$Http$expectJson, $author$project$Cart$CartLoaded, $author$project$Cart$decodeResponse), headers: _List_Nil, method: 'GET', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: 'http://127.0.0.1:7878/cart/items' }); }(); var $author$project$Product$ListingLoaded = function (a) { return {$: 'ListingLoaded', a: a}; }; var $elm$json$Json$Decode$map7 = _Json_map7; var $author$project$Product$decodeProduct = A8( $elm$json$Json$Decode$map7, $author$project$Product$Product, A2($elm$json$Json$Decode$field, 'id', $elm$json$Json$Decode$int), A2($elm$json$Json$Decode$field, 'name', $elm$json$Json$Decode$string), A2( $elm$json$Json$Decode$field, 'kind', $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)), A2($elm$json$Json$Decode$field, 'price', $elm$json$Json$Decode$float), A2( $elm$json$Json$Decode$field, 'description', $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)), A2($elm$json$Json$Decode$field, 'src', $elm$json$Json$Decode$string), A2($elm$json$Json$Decode$field, 'ios_src', $elm$json$Json$Decode$string)); var $elm$http$Http$request = function (r) { return $elm$http$Http$command( $elm$http$Http$Request( {allowCookiesFromOtherDomains: false, body: r.body, expect: r.expect, headers: r.headers, method: r.method, timeout: r.timeout, tracker: r.tracker, url: r.url})); }; var $elm$http$Http$get = function (r) { return $elm$http$Http$request( {body: $elm$http$Http$emptyBody, expect: r.expect, headers: _List_Nil, method: 'GET', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: r.url}); }; var $author$project$Product$fetchListing = function (id) { var _v0 = A2( $elm$core$Debug$log, 'err', 'fetching listing ' + $elm$core$String$fromInt(id)); return $elm$http$Http$get( { expect: A2($elm$http$Http$expectJson, $author$project$Product$ListingLoaded, $author$project$Product$decodeProduct), url: 'http://127.0.0.1:7878/product/' + $elm$core$String$fromInt(id) }); }; var $author$project$Catalog$ProductsLoaded = function (a) { return {$: 'ProductsLoaded', a: a}; }; var $author$project$Catalog$Product = F8( function (id, name, kind, price, description, averageRating, src, iosSrc) { return {averageRating: averageRating, description: description, id: id, iosSrc: iosSrc, kind: kind, name: name, price: price, src: src}; }); var $elm$json$Json$Decode$map8 = _Json_map8; var $author$project$Catalog$decodeProduct = A9( $elm$json$Json$Decode$map8, $author$project$Catalog$Product, A2($elm$json$Json$Decode$field, 'id', $elm$json$Json$Decode$int), A2($elm$json$Json$Decode$field, 'name', $elm$json$Json$Decode$string), A2( $elm$json$Json$Decode$field, 'kind', $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)), A2($elm$json$Json$Decode$field, 'price', $elm$json$Json$Decode$float), A2( $elm$json$Json$Decode$field, 'description', $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)), A2( $elm$json$Json$Decode$field, 'average_rating', $elm$json$Json$Decode$nullable($elm$json$Json$Decode$float)), A2($elm$json$Json$Decode$field, 'src', $elm$json$Json$Decode$string), A2($elm$json$Json$Decode$field, 'ios_src', $elm$json$Json$Decode$string)); var $author$project$Catalog$decodeResponse = $elm$json$Json$Decode$list($author$project$Catalog$decodeProduct); var $author$project$Catalog$fetchProducts = function () { var _v0 = A2($elm$core$Debug$log, 'err', 'fetching products'); return $elm$http$Http$get( { expect: A2($elm$http$Http$expectJson, $author$project$Catalog$ProductsLoaded, $author$project$Catalog$decodeResponse), url: 'http://127.0.0.1:7878/product/catalog' }); }(); var $author$project$Product$RatingsLoaded = function (a) { return {$: 'RatingsLoaded', a: a}; }; var $author$project$Product$Rating = F5( function (commentDate, commentText, customerName, productName, stars) { return {commentDate: commentDate, commentText: commentText, customerName: customerName, productName: productName, stars: stars}; }); var $author$project$Product$decodeRating = A6( $elm$json$Json$Decode$map5, $author$project$Product$Rating, A2($elm$json$Json$Decode$field, 'comment_date', $elm$json$Json$Decode$string), A2( $elm$json$Json$Decode$field, 'comment_text', $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)), A2($elm$json$Json$Decode$field, 'customer_name', $elm$json$Json$Decode$string), A2($elm$json$Json$Decode$field, 'product_name', $elm$json$Json$Decode$string), A2($elm$json$Json$Decode$field, 'stars', $elm$json$Json$Decode$int)); var $author$project$Product$decodeRatings = $elm$json$Json$Decode$list($author$project$Product$decodeRating); var $author$project$Product$fetchRatings = function (id) { var _v0 = A2( $elm$core$Debug$log, 'err', 'fetching ratings ' + $elm$core$String$fromInt(id)); return $elm$http$Http$get( { expect: A2($elm$http$Http$expectJson, $author$project$Product$RatingsLoaded, $author$project$Product$decodeRatings), url: 'http://127.0.0.1:7878/product/reviews/' + $elm$core$String$fromInt(id) }); }; var $elm$browser$Browser$Navigation$load = _Browser_load; var $elm$core$Platform$Cmd$map = _Platform_map; var $elm$url$Url$Parser$State = F5( function (visited, unvisited, params, frag, value) { return {frag: frag, params: params, unvisited: unvisited, value: value, visited: visited}; }); var $elm$url$Url$Parser$getFirstMatch = function (states) { getFirstMatch: while (true) { if (!states.b) { return $elm$core$Maybe$Nothing; } else { var state = states.a; var rest = states.b; var _v1 = state.unvisited; if (!_v1.b) { return $elm$core$Maybe$Just(state.value); } else { if ((_v1.a === '') && (!_v1.b.b)) { return $elm$core$Maybe$Just(state.value); } else { var $temp$states = rest; states = $temp$states; continue getFirstMatch; } } } } }; var $elm$url$Url$Parser$removeFinalEmpty = function (segments) { if (!segments.b) { return _List_Nil; } else { if ((segments.a === '') && (!segments.b.b)) { return _List_Nil; } else { var segment = segments.a; var rest = segments.b; return A2( $elm$core$List$cons, segment, $elm$url$Url$Parser$removeFinalEmpty(rest)); } } }; var $elm$url$Url$Parser$preparePath = function (path) { var _v0 = A2($elm$core$String$split, '/', path); if (_v0.b && (_v0.a === '')) { var segments = _v0.b; return $elm$url$Url$Parser$removeFinalEmpty(segments); } else { var segments = _v0; return $elm$url$Url$Parser$removeFinalEmpty(segments); } }; var $elm$url$Url$Parser$addToParametersHelp = F2( function (value, maybeList) { if (maybeList.$ === 'Nothing') { return $elm$core$Maybe$Just( _List_fromArray( [value])); } else { var list = maybeList.a; return $elm$core$Maybe$Just( A2($elm$core$List$cons, value, list)); } }); var $elm$url$Url$percentDecode = _Url_percentDecode; var $elm$url$Url$Parser$addParam = F2( function (segment, dict) { var _v0 = A2($elm$core$String$split, '=', segment); if ((_v0.b && _v0.b.b) && (!_v0.b.b.b)) { var rawKey = _v0.a; var _v1 = _v0.b; var rawValue = _v1.a; var _v2 = $elm$url$Url$percentDecode(rawKey); if (_v2.$ === 'Nothing') { return dict; } else { var key = _v2.a; var _v3 = $elm$url$Url$percentDecode(rawValue); if (_v3.$ === 'Nothing') { return dict; } else { var value = _v3.a; return A3( $elm$core$Dict$update, key, $elm$url$Url$Parser$addToParametersHelp(value), dict); } } } else { return dict; } }); var $elm$url$Url$Parser$prepareQuery = function (maybeQuery) { if (maybeQuery.$ === 'Nothing') { return $elm$core$Dict$empty; } else { var qry = maybeQuery.a; return A3( $elm$core$List$foldr, $elm$url$Url$Parser$addParam, $elm$core$Dict$empty, A2($elm$core$String$split, '&', qry)); } }; var $elm$url$Url$Parser$parse = F2( function (_v0, url) { var parser = _v0.a; return $elm$url$Url$Parser$getFirstMatch( parser( A5( $elm$url$Url$Parser$State, _List_Nil, $elm$url$Url$Parser$preparePath(url.path), $elm$url$Url$Parser$prepareQuery(url.query), url.fragment, $elm$core$Basics$identity))); }); var $author$project$Main$LoginPage = {$: 'LoginPage'}; var $author$project$Main$SignupPage = {$: 'SignupPage'}; var $elm$url$Url$Parser$Parser = function (a) { return {$: 'Parser', a: a}; }; var $elm$url$Url$Parser$custom = F2( function (tipe, stringToSomething) { return $elm$url$Url$Parser$Parser( function (_v0) { var visited = _v0.visited; var unvisited = _v0.unvisited; var params = _v0.params; var frag = _v0.frag; var value = _v0.value; if (!unvisited.b) { return _List_Nil; } else { var next = unvisited.a; var rest = unvisited.b; var _v2 = stringToSomething(next); if (_v2.$ === 'Just') { var nextValue = _v2.a; return _List_fromArray( [ A5( $elm$url$Url$Parser$State, A2($elm$core$List$cons, next, visited), rest, params, frag, value(nextValue)) ]); } else { return _List_Nil; } } }); }); var $elm$url$Url$Parser$int = A2($elm$url$Url$Parser$custom, 'NUMBER', $elm$core$String$toInt); var $elm$url$Url$Parser$mapState = F2( function (func, _v0) { var visited = _v0.visited; var unvisited = _v0.unvisited; var params = _v0.params; var frag = _v0.frag; var value = _v0.value; return A5( $elm$url$Url$Parser$State, visited, unvisited, params, frag, func(value)); }); var $elm$url$Url$Parser$map = F2( function (subValue, _v0) { var parseArg = _v0.a; return $elm$url$Url$Parser$Parser( function (_v1) { var visited = _v1.visited; var unvisited = _v1.unvisited; var params = _v1.params; var frag = _v1.frag; var value = _v1.value; return A2( $elm$core$List$map, $elm$url$Url$Parser$mapState(value), parseArg( A5($elm$url$Url$Parser$State, visited, unvisited, params, frag, subValue))); }); }); var $elm$core$List$append = F2( function (xs, ys) { if (!ys.b) { return xs; } else { return A3($elm$core$List$foldr, $elm$core$List$cons, ys, xs); } }); var $elm$core$List$concat = function (lists) { return A3($elm$core$List$foldr, $elm$core$List$append, _List_Nil, lists); }; var $elm$core$List$concatMap = F2( function (f, list) { return $elm$core$List$concat( A2($elm$core$List$map, f, list)); }); var $elm$url$Url$Parser$oneOf = function (parsers) { return $elm$url$Url$Parser$Parser( function (state) { return A2( $elm$core$List$concatMap, function (_v0) { var parser = _v0.a; return parser(state); }, parsers); }); }; var $elm$url$Url$Parser$s = function (str) { return $elm$url$Url$Parser$Parser( function (_v0) { var visited = _v0.visited; var unvisited = _v0.unvisited; var params = _v0.params; var frag = _v0.frag; var value = _v0.value; if (!unvisited.b) { return _List_Nil; } else { var next = unvisited.a; var rest = unvisited.b; return _Utils_eq(next, str) ? _List_fromArray( [ A5( $elm$url$Url$Parser$State, A2($elm$core$List$cons, next, visited), rest, params, frag, value) ]) : _List_Nil; } }); }; var $elm$url$Url$Parser$slash = F2( function (_v0, _v1) { var parseBefore = _v0.a; var parseAfter = _v1.a; return $elm$url$Url$Parser$Parser( function (state) { return A2( $elm$core$List$concatMap, parseAfter, parseBefore(state)); }); }); var $elm$url$Url$Parser$top = $elm$url$Url$Parser$Parser( function (state) { return _List_fromArray( [state]); }); var $author$project$Main$parseRoute = $elm$url$Url$Parser$oneOf( _List_fromArray( [ A2( $elm$url$Url$Parser$map, $author$project$Main$LoginPage, $elm$url$Url$Parser$s('login')), A2($elm$url$Url$Parser$map, $author$project$Main$HomePage, $elm$url$Url$Parser$top), A2( $elm$url$Url$Parser$map, $author$project$Main$CatalogPage, $elm$url$Url$Parser$s('catalog')), A2( $elm$url$Url$Parser$map, $author$project$Main$CartPage, $elm$url$Url$Parser$s('cart')), A2( $elm$url$Url$Parser$map, $author$project$Main$SignupPage, $elm$url$Url$Parser$s('signup')), A2( $elm$url$Url$Parser$map, $author$project$Main$CheckoutPage, $elm$url$Url$Parser$s('checkout')), A2( $elm$url$Url$Parser$map, $author$project$Main$ProductPage, A2( $elm$url$Url$Parser$slash, $elm$url$Url$Parser$s('product'), $elm$url$Url$Parser$int)) ])); var $elm$browser$Browser$Navigation$pushUrl = _Browser_pushUrl; var $elm$browser$Browser$Navigation$replaceUrl = _Browser_replaceUrl; var $elm$url$Url$addPort = F2( function (maybePort, starter) { if (maybePort.$ === 'Nothing') { return starter; } else { var port_ = maybePort.a; return starter + (':' + $elm$core$String$fromInt(port_)); } }); var $elm$url$Url$addPrefixed = F3( function (prefix, maybeSegment, starter) { if (maybeSegment.$ === 'Nothing') { return starter; } else { var segment = maybeSegment.a; return _Utils_ap( starter, _Utils_ap(prefix, segment)); } }); var $elm$url$Url$toString = function (url) { var http = function () { var _v0 = url.protocol; if (_v0.$ === 'Http') { return 'http://'; } else { return 'https://'; } }(); return A3( $elm$url$Url$addPrefixed, '#', url.fragment, A3( $elm$url$Url$addPrefixed, '?', url.query, _Utils_ap( A2( $elm$url$Url$addPort, url.port_, _Utils_ap(http, url.host)), url.path))); }; var $author$project$Main$LogoutSuccess = function (a) { return {$: 'LogoutSuccess', a: a}; }; var $elm$http$Http$expectBytesResponse = F2( function (toMsg, toResult) { return A3( _Http_expect, 'arraybuffer', _Http_toDataView, A2($elm$core$Basics$composeR, toResult, toMsg)); }); var $elm$http$Http$expectWhatever = function (toMsg) { return A2( $elm$http$Http$expectBytesResponse, toMsg, $elm$http$Http$resolve( function (_v0) { return $elm$core$Result$Ok(_Utils_Tuple0); })); }; var $author$project$Main$tryLogout = $elm$http$Http$riskyRequest( { body: $elm$http$Http$emptyBody, expect: $elm$http$Http$expectWhatever($author$project$Main$LogoutSuccess), headers: _List_Nil, method: 'POST', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: 'http://127.0.0.1:7878/user/logout' }); var $author$project$Cart$Loaded = {$: 'Loaded'}; var $author$project$Cart$Loading = {$: 'Loading'}; var $author$project$Cart$AddToCartSuccess = function (a) { return {$: 'AddToCartSuccess', a: a}; }; var $elm$http$Http$stringBody = _Http_pair; var $author$project$Cart$addToCart = function (id) { var _v0 = A2( $elm$core$Debug$log, 'err', 'adding to cart: ' + $elm$core$String$fromInt(id)); return $elm$http$Http$riskyRequest( { body: A2( $elm$http$Http$stringBody, 'applcation/json', $elm$core$String$fromInt(id)), expect: $elm$http$Http$expectWhatever($author$project$Cart$AddToCartSuccess), headers: _List_Nil, method: 'POST', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: 'http://127.0.0.1:7878/cart/add' }); }; var $author$project$Cart$CartItemRemoved = function (a) { return {$: 'CartItemRemoved', a: a}; }; var $author$project$Cart$removeProduct = function (id) { var _v0 = A2($elm$core$Debug$log, 'cart', 'fetching cart items'); return $elm$http$Http$riskyRequest( { body: A2( $elm$http$Http$stringBody, 'application/json', $elm$core$String$fromInt(id)), expect: $elm$http$Http$expectWhatever($author$project$Cart$CartItemRemoved), headers: _List_Nil, method: 'POST', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: 'http://127.0.0.1:7878/cart/remove' }); }; var $author$project$Cart$update = F2( function (msg, model) { switch (msg.$) { case 'CartLoaded': var res = msg.a; if (res.$ === 'Ok') { var s = res.a; return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Cart$Loaded, products: s}), $elm$core$Platform$Cmd$none); } else { var e = res.a; var _v2 = A2($elm$core$Debug$log, 'error', e); return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Cart$NotLoaded}), $elm$core$Platform$Cmd$none); } case 'RemoveFromCart': var id = msg.a; return _Utils_Tuple2( model, $author$project$Cart$removeProduct(id)); case 'CartItemRemoved': return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Cart$Loading}), $author$project$Cart$fetchCartItems); case 'FetchCartItems': return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Cart$Loading}), $author$project$Cart$fetchCartItems); case 'AddToCartPressed': var id = msg.a; return _Utils_Tuple2( model, $author$project$Cart$addToCart(id)); default: return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Cart$Loading}), $author$project$Cart$fetchCartItems); } }); var $author$project$Catalog$Loaded = {$: 'Loaded'}; var $author$project$Catalog$Loading = {$: 'Loading'}; var $elm$core$Basics$always = F2( function (a, _v0) { return a; }); var $elm$core$Tuple$mapFirst = F2( function (func, _v0) { var x = _v0.a; var y = _v0.b; return _Utils_Tuple2( func(x), y); }); var $elm$core$Tuple$mapSecond = F2( function (func, _v0) { var x = _v0.a; var y = _v0.b; return _Utils_Tuple2( x, func(y)); }); var $author$project$Catalog$update = F2( function (msg, model) { switch (msg.$) { case 'ProductsLoaded': var res = msg.a; if (res.$ === 'Ok') { var s = res.a; return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Catalog$Loaded, products: s}), $elm$core$Platform$Cmd$none); } else { var e = res.a; var _v2 = A2($elm$core$Debug$log, 'error', e); return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Catalog$NotLoaded}), $elm$core$Platform$Cmd$none); } case 'FetchProducts': return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Catalog$Loading}), $author$project$Catalog$fetchProducts); case 'ChangePriceLower': var v = msg.a; var fs = model.filters; var nfs = _Utils_update( fs, { price: A2( $elm$core$Tuple$mapFirst, $elm$core$Basics$always(v), fs.price) }); return _Utils_Tuple2( _Utils_update( model, {filters: nfs}), $elm$core$Platform$Cmd$none); case 'ChangePriceUpper': var v = msg.a; var fs = model.filters; var nfs = _Utils_update( fs, { price: A2( $elm$core$Tuple$mapSecond, $elm$core$Basics$always(v), fs.price) }); return _Utils_Tuple2( _Utils_update( model, {filters: nfs}), $elm$core$Platform$Cmd$none); case 'ChangeRatingLower': var v = msg.a; var fs = model.filters; var nfs = _Utils_update( fs, { rating: A2( $elm$core$Tuple$mapFirst, $elm$core$Basics$always(v), fs.rating) }); return _Utils_Tuple2( _Utils_update( model, {filters: nfs}), $elm$core$Platform$Cmd$none); default: var v = msg.a; var fs = model.filters; var nfs = _Utils_update( fs, { rating: A2( $elm$core$Tuple$mapSecond, $elm$core$Basics$always(v), fs.rating) }); return _Utils_Tuple2( _Utils_update( model, {filters: nfs}), $elm$core$Platform$Cmd$none); } }); var $author$project$Checkout$Loading = {$: 'Loading'}; var $author$project$Checkout$CheckoutSuccessful = function (a) { return {$: 'CheckoutSuccessful', a: a}; }; var $author$project$Checkout$tryCheckout = function (pm) { return $elm$http$Http$riskyRequest( { body: A2($elm$http$Http$stringBody, 'application/json', pm), expect: $elm$http$Http$expectWhatever($author$project$Checkout$CheckoutSuccessful), headers: _List_Nil, method: 'POST', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: 'http://127.0.0.1:7878/transaction/checkout' }); }; var $author$project$Checkout$update = F2( function (msg, model) { switch (msg.$) { case 'CheckoutPressed': return _Utils_Tuple2( model, $author$project$Checkout$tryCheckout(model.paymentMode)); case 'CheckoutSuccessful': return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none); case 'AmountLoaded': var res = msg.a; if (res.$ === 'Ok') { var v = res.a; return _Utils_Tuple2( _Utils_update( model, {cartTotal: v}), $elm$core$Platform$Cmd$none); } else { return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Checkout$NotLoaded}), $elm$core$Platform$Cmd$none); } case 'FetchAmount': var _v2 = A2($elm$core$Debug$log, 'err', 'fetching checkout amount'); return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Checkout$Loading}), $author$project$Checkout$fetchAmount); default: var s = msg.a; return _Utils_Tuple2( _Utils_update( model, {paymentMode: s}), $elm$core$Platform$Cmd$none); } }); var $author$project$Login$InvalidLogin = {$: 'InvalidLogin'}; var $author$project$Login$LoggedIn = {$: 'LoggedIn'}; var $author$project$Login$LoggingIn = {$: 'LoggingIn'}; var $author$project$Login$LoginSuccess = function (a) { return {$: 'LoginSuccess', a: a}; }; var $elm$json$Json$Encode$object = function (pairs) { return _Json_wrap( A3( $elm$core$List$foldl, F2( function (_v0, obj) { var k = _v0.a; var v = _v0.b; return A3(_Json_addField, k, v, obj); }), _Json_emptyObject(_Utils_Tuple0), pairs)); }; var $elm$json$Json$Encode$string = _Json_wrap; var $author$project$Login$encodeLogin = function (model) { return $elm$json$Json$Encode$object( _List_fromArray( [ _Utils_Tuple2( 'username', $elm$json$Json$Encode$string(model.username)), _Utils_Tuple2( 'password', $elm$json$Json$Encode$string(model.password)) ])); }; var $elm$http$Http$jsonBody = function (value) { return A2( _Http_pair, 'application/json', A2($elm$json$Json$Encode$encode, 0, value)); }; var $author$project$Login$tryLogin = function (model) { return $elm$http$Http$riskyRequest( { body: $elm$http$Http$jsonBody( $author$project$Login$encodeLogin(model)), expect: $elm$http$Http$expectWhatever($author$project$Login$LoginSuccess), headers: _List_Nil, method: 'POST', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: 'http://127.0.0.1:7878/user/login' }); }; var $author$project$Login$update = F2( function (msg, model) { switch (msg.$) { case 'PassEntered': var s = msg.a; return _Utils_Tuple2( _Utils_update( model, {password: s}), $elm$core$Platform$Cmd$none); case 'UserEntered': var s = msg.a; return _Utils_Tuple2( _Utils_update( model, {username: s}), $elm$core$Platform$Cmd$none); case 'LoginPressed': return _Utils_Tuple2( _Utils_update( model, {loginStatus: $author$project$Login$LoggingIn}), $author$project$Login$tryLogin(model)); case 'LoginSuccess': var res = msg.a; if (res.$ === 'Ok') { var s = res.a; return _Utils_Tuple2( _Utils_update( model, {loginStatus: $author$project$Login$LoggedIn}), $elm$core$Platform$Cmd$none); } else { var e = res.a; return _Utils_Tuple2( _Utils_update( model, {loginStatus: $author$project$Login$InvalidLogin}), $elm$core$Platform$Cmd$none); } default: return _Utils_Tuple2( _Utils_update( model, {loginStatus: $author$project$Login$InvalidLogin}), $elm$core$Platform$Cmd$none); } }); var $author$project$Product$Loaded = {$: 'Loaded'}; var $author$project$Product$Loading = {$: 'Loading'}; var $author$project$Product$SubmitFail = {$: 'SubmitFail'}; var $author$project$Product$SubmitSuccess = {$: 'SubmitSuccess'}; var $author$project$Product$Submitting = {$: 'Submitting'}; var $author$project$Product$AddToCartSuccess = function (a) { return {$: 'AddToCartSuccess', a: a}; }; var $author$project$Product$addToCart = function (model) { var _v0 = A2( $elm$core$Debug$log, 'err', 'adding to cart: ' + $elm$core$String$fromInt(model.listing.id)); return $elm$http$Http$riskyRequest( { body: A2( $elm$http$Http$stringBody, 'applcation/json', $elm$core$String$fromInt(model.listing.id)), expect: $elm$http$Http$expectWhatever($author$project$Product$AddToCartSuccess), headers: _List_Nil, method: 'POST', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: 'http://127.0.0.1:7878/cart/add' }); }; var $author$project$Product$AddRatingSuccess = function (a) { return {$: 'AddRatingSuccess', a: a}; }; var $elm$json$Json$Encode$int = _Json_wrap; var $author$project$Product$encodeRatingForm = function (model) { return $elm$json$Json$Encode$object( _List_fromArray( [ _Utils_Tuple2( 'product_id', $elm$json$Json$Encode$int(model.listing.id)), _Utils_Tuple2( 'stars', $elm$json$Json$Encode$int(model.ratingStars)), _Utils_Tuple2( 'comment_text', $elm$json$Json$Encode$string(model.ratingText)) ])); }; var $author$project$Product$submitRating = function (model) { var _v0 = A2( $elm$core$Debug$log, 'err', 'submitting rating for' + $elm$core$String$fromInt(model.listing.id)); return $elm$http$Http$riskyRequest( { body: $elm$http$Http$jsonBody( $author$project$Product$encodeRatingForm(model)), expect: $elm$http$Http$expectWhatever($author$project$Product$AddRatingSuccess), headers: _List_Nil, method: 'POST', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: 'http://127.0.0.1:7878/rating/add' }); }; var $author$project$Product$update = F2( function (msg, model) { switch (msg.$) { case 'ListingLoaded': var res = msg.a; if (res.$ === 'Ok') { var s = res.a; return _Utils_Tuple2( _Utils_update( model, {listing: s, pageStatus: $author$project$Product$Loaded}), $elm$core$Platform$Cmd$none); } else { var e = res.a; var _v2 = A2($elm$core$Debug$log, 'error', e); return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Product$NotLoaded}), $elm$core$Platform$Cmd$none); } case 'RatingsLoaded': var res = msg.a; if (res.$ === 'Ok') { var s = res.a; return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Product$Loaded, ratings: s}), $elm$core$Platform$Cmd$none); } else { var e = res.a; var _v4 = A2($elm$core$Debug$log, 'error', e); return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Product$NotLoaded}), $elm$core$Platform$Cmd$none); } case 'FetchProduct': var id = msg.a; return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Product$Loading}), $author$project$Product$fetchListing(id)); case 'FetchRatings': var id = msg.a; return _Utils_Tuple2( _Utils_update( model, {pageStatus: $author$project$Product$Loading}), $author$project$Product$fetchRatings(id)); case 'AddRatingStars': var i = msg.a; return _Utils_Tuple2( _Utils_update( model, {ratingStars: i}), $elm$core$Platform$Cmd$none); case 'AddRatingComment': var s = msg.a; return _Utils_Tuple2( _Utils_update( model, {ratingText: s}), $elm$core$Platform$Cmd$none); case 'AddRatingPressed': return _Utils_Tuple2( _Utils_update( model, {addRatingStatus: $author$project$Product$Submitting}), $author$project$Product$submitRating(model)); case 'AddRatingSuccess': var res = msg.a; if (res.$ === 'Ok') { return _Utils_Tuple2( _Utils_update( model, {addRatingStatus: $author$project$Product$SubmitSuccess}), $author$project$Product$fetchRatings(model.listing.id)); } else { return _Utils_Tuple2( _Utils_update( model, {addRatingStatus: $author$project$Product$SubmitFail}), $elm$core$Platform$Cmd$none); } case 'AddRatingFail': return _Utils_Tuple2( _Utils_update( model, {addRatingStatus: $author$project$Product$SubmitFail}), $elm$core$Platform$Cmd$none); case 'AddToCartPressed': return _Utils_Tuple2( model, $author$project$Product$addToCart(model)); default: return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none); } }); var $author$project$Signup$CreatedSuccessfully = {$: 'CreatedSuccessfully'}; var $author$project$Signup$CreatingUser = {$: 'CreatingUser'}; var $author$project$Signup$InvalidEmail = {$: 'InvalidEmail'}; var $author$project$Signup$InvalidPhone = {$: 'InvalidPhone'}; var $author$project$Signup$UsernameTaken = {$: 'UsernameTaken'}; var $elm$core$List$any = F2( function (isOkay, list) { any: while (true) { if (!list.b) { return false; } else { var x = list.a; var xs = list.b; if (isOkay(x)) { return true; } else { var $temp$isOkay = isOkay, $temp$list = xs; isOkay = $temp$isOkay; list = $temp$list; continue any; } } } }); var $elm$core$Basics$composeL = F3( function (g, f, x) { return g( f(x)); }); var $elm$core$Basics$not = _Basics_not; var $elm$core$List$all = F2( function (isOkay, list) { return !A2( $elm$core$List$any, A2($elm$core$Basics$composeL, $elm$core$Basics$not, isOkay), list); }); var $author$project$Signup$UsernameExists = function (a) { return {$: 'UsernameExists', a: a}; }; var $elm$http$Http$expectString = function (toMsg) { return A2( $elm$http$Http$expectStringResponse, toMsg, $elm$http$Http$resolve($elm$core$Result$Ok)); }; var $elm$http$Http$post = function (r) { return $elm$http$Http$request( {body: r.body, expect: r.expect, headers: _List_Nil, method: 'POST', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: r.url}); }; var $author$project$Signup$checkExists = function (model) { return $elm$http$Http$post( { body: A2($elm$http$Http$stringBody, 'application/json', model.username), expect: $elm$http$Http$expectString($author$project$Signup$UsernameExists), url: 'http://127.0.0.1:7878/user/existing' }); }; var $author$project$Signup$CreationSuccess = function (a) { return {$: 'CreationSuccess', a: a}; }; var $elm$core$Maybe$withDefault = F2( function (_default, maybe) { if (maybe.$ === 'Just') { var value = maybe.a; return value; } else { return _default; } }); var $author$project$Signup$encodeCreateUser = function (model) { return $elm$json$Json$Encode$object( _List_fromArray( [ _Utils_Tuple2( 'username', $elm$json$Json$Encode$string(model.username)), _Utils_Tuple2( 'password', $elm$json$Json$Encode$string(model.password)), _Utils_Tuple2( 'phone_number', $elm$json$Json$Encode$string(model.phoneNumber)), _Utils_Tuple2( 'email_id', $elm$json$Json$Encode$string(model.emailId)), _Utils_Tuple2( 'address', $elm$json$Json$Encode$string( A2($elm$core$Maybe$withDefault, '', model.address))) ])); }; var $author$project$Signup$createUser = function (model) { return $elm$http$Http$riskyRequest( { body: $elm$http$Http$jsonBody( $author$project$Signup$encodeCreateUser(model)), expect: $elm$http$Http$expectWhatever($author$project$Signup$CreationSuccess), headers: _List_Nil, method: 'POST', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: 'http://127.0.0.1:7878/user/new' }); }; var $elm$core$Basics$neq = _Utils_notEqual; var $elm$core$String$foldr = _String_foldr; var $elm$core$String$toList = function (string) { return A3($elm$core$String$foldr, $elm$core$List$cons, _List_Nil, string); }; var $author$project$Signup$update = F2( function (msg, model) { switch (msg.$) { case 'UserEntered': var s = msg.a; return _Utils_Tuple2( _Utils_update( model, {username: s}), $elm$core$Platform$Cmd$none); case 'PassEntered': var s = msg.a; return _Utils_Tuple2( _Utils_update( model, {password: s}), $elm$core$Platform$Cmd$none); case 'PhoneEntered': var s = msg.a; var status = (($elm$core$String$length(s) !== 10) || A2( $elm$core$List$all, A2($elm$core$Basics$composeL, $elm$core$Basics$not, $elm$core$Char$isDigit), $elm$core$String$toList(s))) ? $author$project$Signup$InvalidPhone : $author$project$Signup$Empty; return _Utils_Tuple2( _Utils_update( model, {phoneNumber: s, status: status}), $elm$core$Platform$Cmd$none); case 'EmailEntered': var s = msg.a; var status = (!A2($elm$core$String$contains, '@', s)) ? $author$project$Signup$InvalidEmail : $author$project$Signup$Empty; return _Utils_Tuple2( _Utils_update( model, {emailId: s, status: status}), $elm$core$Platform$Cmd$none); case 'AddressEntered': var s = msg.a; return _Utils_Tuple2( _Utils_update( model, { address: $elm$core$Maybe$Just(s) }), $elm$core$Platform$Cmd$none); case 'CreatePressed': return _Utils_Tuple2( _Utils_update( model, {status: $author$project$Signup$CreatingUser}), $author$project$Signup$checkExists(model)); case 'CreationSuccess': var res = msg.a; if (res.$ === 'Ok') { return _Utils_Tuple2( _Utils_update( model, {status: $author$project$Signup$CreatedSuccessfully}), $elm$core$Platform$Cmd$none); } else { return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none); } case 'CreationFail': return _Utils_Tuple2($author$project$Signup$init, $elm$core$Platform$Cmd$none); default: var res = msg.a; _v2$2: while (true) { if (res.$ === 'Ok') { switch (res.a) { case 'true': return _Utils_Tuple2( _Utils_update( model, {status: $author$project$Signup$UsernameTaken}), $elm$core$Platform$Cmd$none); case 'false': var _v3 = A2($elm$core$Debug$log, 'signup', 'Hit create user ...'); return _Utils_Tuple2( _Utils_update( model, {status: $author$project$Signup$CreatingUser}), $author$project$Signup$createUser(model)); default: break _v2$2; } } else { break _v2$2; } } return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none); } }); var $author$project$Main$update = F2( function (msg, model) { switch (msg.$) { case 'LinkClicked': var urlRequest = msg.a; if (urlRequest.$ === 'Internal') { var url = urlRequest.a; return _Utils_Tuple2( model, A2( $elm$browser$Browser$Navigation$pushUrl, model.key, $elm$url$Url$toString(url))); } else { var href = urlRequest.a; return _Utils_Tuple2( model, $elm$browser$Browser$Navigation$load(href)); } case 'LogoutPressed': return _Utils_Tuple2(model, $author$project$Main$tryLogout); case 'LogoutSuccess': return _Utils_Tuple2( _Utils_update( model, {loginModel: $author$project$Login$init}), A2($elm$browser$Browser$Navigation$replaceUrl, model.key, '/login')); case 'UrlChanged': var url = msg.a; var parsedUrl = A2($elm$url$Url$Parser$parse, $author$project$Main$parseRoute, url); if (parsedUrl.$ === 'Just') { switch (parsedUrl.a.$) { case 'CatalogPage': var _v3 = parsedUrl.a; return _Utils_Tuple2( _Utils_update( model, {location: $author$project$Main$CatalogPage}), A2($elm$core$Platform$Cmd$map, $author$project$Main$CatalogMessage, $author$project$Catalog$fetchProducts)); case 'ProductPage': var id = parsedUrl.a.a; var cmds = A2( $elm$core$List$map, $elm$core$Platform$Cmd$map($author$project$Main$ProductMessage), _List_fromArray( [ $author$project$Product$fetchListing(id), $author$project$Product$fetchRatings(id) ])); return _Utils_Tuple2( _Utils_update( model, { location: $author$project$Main$ProductPage(id) }), $elm$core$Platform$Cmd$batch(cmds)); case 'CartPage': var _v4 = parsedUrl.a; var cmd = A2($elm$core$Platform$Cmd$map, $author$project$Main$CartMessage, $author$project$Cart$fetchCartItems); return _Utils_Tuple2( _Utils_update( model, {location: $author$project$Main$CartPage}), cmd); case 'CheckoutPage': var _v5 = parsedUrl.a; var cmd = A2($elm$core$Platform$Cmd$map, $author$project$Main$CheckoutMessage, $author$project$Checkout$fetchAmount); var _v6 = A2($elm$core$Debug$log, 'err', 'loading checkout page ...'); return _Utils_Tuple2( _Utils_update( model, {location: $author$project$Main$CheckoutPage}), cmd); default: var p = parsedUrl.a; return _Utils_Tuple2( _Utils_update( model, {location: p}), $elm$core$Platform$Cmd$none); } } else { return _Utils_Tuple2( _Utils_update( model, {location: $author$project$Main$NotFoundPage}), $elm$core$Platform$Cmd$none); } case 'LoginMessage': var lm = msg.a; var _v7 = A2($author$project$Login$update, lm, model.loginModel); var lmn = _v7.a; var cmd = _v7.b; var redir = function () { var _v8 = lmn.loginStatus; if (_v8.$ === 'LoggedIn') { return A2($elm$browser$Browser$Navigation$replaceUrl, model.key, '/catalog'); } else { return $elm$core$Platform$Cmd$none; } }(); return _Utils_Tuple2( _Utils_update( model, {loginModel: lmn}), $elm$core$Platform$Cmd$batch( _List_fromArray( [ A2($elm$core$Platform$Cmd$map, $author$project$Main$LoginMessage, cmd), redir ]))); case 'SignupMessage': var sm = msg.a; var _v9 = A2($author$project$Signup$update, sm, model.signupModel); var smn = _v9.a; var cmd = _v9.b; var redir = function () { var _v10 = smn.status; if (_v10.$ === 'CreatedSuccessfully') { return A2($elm$browser$Browser$Navigation$replaceUrl, model.key, '/login'); } else { return $elm$core$Platform$Cmd$none; } }(); return _Utils_Tuple2( _Utils_update( model, {signupModel: smn}), $elm$core$Platform$Cmd$batch( _List_fromArray( [ A2($elm$core$Platform$Cmd$map, $author$project$Main$SignupMessage, cmd), redir ]))); case 'CatalogMessage': var cm = msg.a; var _v11 = A2($author$project$Catalog$update, cm, model.catalogModel); var cmn = _v11.a; var cmd = _v11.b; return _Utils_Tuple2( _Utils_update( model, {catalogModel: cmn}), A2($elm$core$Platform$Cmd$map, $author$project$Main$CatalogMessage, cmd)); case 'CartMessage': var cm = msg.a; var _v12 = A2($author$project$Cart$update, cm, model.cartModel); var cmn = _v12.a; var cmd = _v12.b; return _Utils_Tuple2( _Utils_update( model, {cartModel: cmn}), A2($elm$core$Platform$Cmd$map, $author$project$Main$CartMessage, cmd)); case 'CheckoutMessage': var cm = msg.a; var _v13 = A2($author$project$Checkout$update, cm, model.checkoutModel); var cmn = _v13.a; var cmd = _v13.b; var _v14 = A2($elm$core$Debug$log, 'err', 'received checkout message ...'); return _Utils_Tuple2( _Utils_update( model, {checkoutModel: cmn}), A2($elm$core$Platform$Cmd$map, $author$project$Main$CheckoutMessage, cmd)); default: var pm = msg.a; var redir = function () { if (pm.$ === 'AddToCartSuccess') { return A2($elm$browser$Browser$Navigation$replaceUrl, model.key, '/cart'); } else { return $elm$core$Platform$Cmd$none; } }(); var _v15 = A2($author$project$Product$update, pm, model.productModel); var pmn = _v15.a; var cmd = _v15.b; return _Utils_Tuple2( _Utils_update( model, {productModel: pmn}), $elm$core$Platform$Cmd$batch( _List_fromArray( [ A2($elm$core$Platform$Cmd$map, $author$project$Main$ProductMessage, cmd), redir ]))); } }); var $rtfeldman$elm_css$VirtualDom$Styled$Node = F3( function (a, b, c) { return {$: 'Node', a: a, b: b, c: c}; }); var $rtfeldman$elm_css$VirtualDom$Styled$node = $rtfeldman$elm_css$VirtualDom$Styled$Node; var $rtfeldman$elm_css$Html$Styled$node = $rtfeldman$elm_css$VirtualDom$Styled$node; var $rtfeldman$elm_css$Html$Styled$a = $rtfeldman$elm_css$Html$Styled$node('a'); var $rtfeldman$elm_css$Html$Styled$div = $rtfeldman$elm_css$Html$Styled$node('div'); var $rtfeldman$elm_css$VirtualDom$Styled$Attribute = F3( function (a, b, c) { return {$: 'Attribute', a: a, b: b, c: c}; }); var $elm$virtual_dom$VirtualDom$property = F2( function (key, value) { return A2( _VirtualDom_property, _VirtualDom_noInnerHtmlOrFormAction(key), _VirtualDom_noJavaScriptOrHtmlUri(value)); }); var $rtfeldman$elm_css$VirtualDom$Styled$property = F2( function (key, value) { return A3( $rtfeldman$elm_css$VirtualDom$Styled$Attribute, A2($elm$virtual_dom$VirtualDom$property, key, value), _List_Nil, ''); }); var $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty = F2( function (key, string) { return A2( $rtfeldman$elm_css$VirtualDom$Styled$property, key, $elm$json$Json$Encode$string(string)); }); var $rtfeldman$elm_css$Html$Styled$Attributes$href = function (url) { return A2($rtfeldman$elm_css$Html$Styled$Attributes$stringProperty, 'href', url); }; var $rtfeldman$elm_css$Html$Styled$li = $rtfeldman$elm_css$Html$Styled$node('li'); var $rtfeldman$elm_css$VirtualDom$Styled$KeyedNode = F3( function (a, b, c) { return {$: 'KeyedNode', a: a, b: b, c: c}; }); var $rtfeldman$elm_css$VirtualDom$Styled$KeyedNodeNS = F4( function (a, b, c, d) { return {$: 'KeyedNodeNS', a: a, b: b, c: c, d: d}; }); var $rtfeldman$elm_css$VirtualDom$Styled$NodeNS = F4( function (a, b, c, d) { return {$: 'NodeNS', a: a, b: b, c: c, d: d}; }); var $rtfeldman$elm_css$VirtualDom$Styled$Unstyled = function (a) { return {$: 'Unstyled', a: a}; }; var $elm$virtual_dom$VirtualDom$map = _VirtualDom_map; var $elm$virtual_dom$VirtualDom$mapAttribute = _VirtualDom_mapAttribute; var $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute = F2( function (transform, _v0) { var prop = _v0.a; var styles = _v0.b; var classname = _v0.c; return A3( $rtfeldman$elm_css$VirtualDom$Styled$Attribute, A2($elm$virtual_dom$VirtualDom$mapAttribute, transform, prop), styles, classname); }); var $rtfeldman$elm_css$VirtualDom$Styled$map = F2( function (transform, vdomNode) { switch (vdomNode.$) { case 'Node': var elemType = vdomNode.a; var properties = vdomNode.b; var children = vdomNode.c; return A3( $rtfeldman$elm_css$VirtualDom$Styled$Node, elemType, A2( $elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute(transform), properties), A2( $elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$map(transform), children)); case 'NodeNS': var ns = vdomNode.a; var elemType = vdomNode.b; var properties = vdomNode.c; var children = vdomNode.d; return A4( $rtfeldman$elm_css$VirtualDom$Styled$NodeNS, ns, elemType, A2( $elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute(transform), properties), A2( $elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$map(transform), children)); case 'KeyedNode': var elemType = vdomNode.a; var properties = vdomNode.b; var children = vdomNode.c; return A3( $rtfeldman$elm_css$VirtualDom$Styled$KeyedNode, elemType, A2( $elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute(transform), properties), A2( $elm$core$List$map, function (_v1) { var key = _v1.a; var child = _v1.b; return _Utils_Tuple2( key, A2($rtfeldman$elm_css$VirtualDom$Styled$map, transform, child)); }, children)); case 'KeyedNodeNS': var ns = vdomNode.a; var elemType = vdomNode.b; var properties = vdomNode.c; var children = vdomNode.d; return A4( $rtfeldman$elm_css$VirtualDom$Styled$KeyedNodeNS, ns, elemType, A2( $elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute(transform), properties), A2( $elm$core$List$map, function (_v2) { var key = _v2.a; var child = _v2.b; return _Utils_Tuple2( key, A2($rtfeldman$elm_css$VirtualDom$Styled$map, transform, child)); }, children)); default: var vdom = vdomNode.a; return $rtfeldman$elm_css$VirtualDom$Styled$Unstyled( A2($elm$virtual_dom$VirtualDom$map, transform, vdom)); } }); var $rtfeldman$elm_css$Html$Styled$map = $rtfeldman$elm_css$VirtualDom$Styled$map; var $elm$core$List$singleton = function (value) { return _List_fromArray( [value]); }; var $elm$core$List$isEmpty = function (xs) { if (!xs.b) { return true; } else { return false; } }; var $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles = F2( function (_v0, styles) { var newStyles = _v0.b; var classname = _v0.c; return $elm$core$List$isEmpty(newStyles) ? styles : A3($elm$core$Dict$insert, classname, newStyles, styles); }); var $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute = function (_v0) { var val = _v0.a; return val; }; var $elm$virtual_dom$VirtualDom$keyedNode = function (tag) { return _VirtualDom_keyedNode( _VirtualDom_noScript(tag)); }; var $elm$virtual_dom$VirtualDom$keyedNodeNS = F2( function (namespace, tag) { return A2( _VirtualDom_keyedNodeNS, namespace, _VirtualDom_noScript(tag)); }); var $elm$virtual_dom$VirtualDom$node = function (tag) { return _VirtualDom_node( _VirtualDom_noScript(tag)); }; var $elm$virtual_dom$VirtualDom$nodeNS = function (tag) { return _VirtualDom_nodeNS( _VirtualDom_noScript(tag)); }; var $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml = F2( function (_v6, _v7) { var key = _v6.a; var html = _v6.b; var pairs = _v7.a; var styles = _v7.b; switch (html.$) { case 'Unstyled': var vdom = html.a; return _Utils_Tuple2( A2( $elm$core$List$cons, _Utils_Tuple2(key, vdom), pairs), styles); case 'Node': var elemType = html.a; var properties = html.b; var children = html.c; var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); var _v9 = A3( $elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml, _Utils_Tuple2(_List_Nil, combinedStyles), children); var childNodes = _v9.a; var finalStyles = _v9.b; var vdom = A3( $elm$virtual_dom$VirtualDom$node, elemType, A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties), $elm$core$List$reverse(childNodes)); return _Utils_Tuple2( A2( $elm$core$List$cons, _Utils_Tuple2(key, vdom), pairs), finalStyles); case 'NodeNS': var ns = html.a; var elemType = html.b; var properties = html.c; var children = html.d; var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); var _v10 = A3( $elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml, _Utils_Tuple2(_List_Nil, combinedStyles), children); var childNodes = _v10.a; var finalStyles = _v10.b; var vdom = A4( $elm$virtual_dom$VirtualDom$nodeNS, ns, elemType, A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties), $elm$core$List$reverse(childNodes)); return _Utils_Tuple2( A2( $elm$core$List$cons, _Utils_Tuple2(key, vdom), pairs), finalStyles); case 'KeyedNode': var elemType = html.a; var properties = html.b; var children = html.c; var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); var _v11 = A3( $elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml, _Utils_Tuple2(_List_Nil, combinedStyles), children); var childNodes = _v11.a; var finalStyles = _v11.b; var vdom = A3( $elm$virtual_dom$VirtualDom$keyedNode, elemType, A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties), $elm$core$List$reverse(childNodes)); return _Utils_Tuple2( A2( $elm$core$List$cons, _Utils_Tuple2(key, vdom), pairs), finalStyles); default: var ns = html.a; var elemType = html.b; var properties = html.c; var children = html.d; var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); var _v12 = A3( $elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml, _Utils_Tuple2(_List_Nil, combinedStyles), children); var childNodes = _v12.a; var finalStyles = _v12.b; var vdom = A4( $elm$virtual_dom$VirtualDom$keyedNodeNS, ns, elemType, A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties), $elm$core$List$reverse(childNodes)); return _Utils_Tuple2( A2( $elm$core$List$cons, _Utils_Tuple2(key, vdom), pairs), finalStyles); } }); var $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml = F2( function (html, _v0) { var nodes = _v0.a; var styles = _v0.b; switch (html.$) { case 'Unstyled': var vdomNode = html.a; return _Utils_Tuple2( A2($elm$core$List$cons, vdomNode, nodes), styles); case 'Node': var elemType = html.a; var properties = html.b; var children = html.c; var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); var _v2 = A3( $elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml, _Utils_Tuple2(_List_Nil, combinedStyles), children); var childNodes = _v2.a; var finalStyles = _v2.b; var vdomNode = A3( $elm$virtual_dom$VirtualDom$node, elemType, A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties), $elm$core$List$reverse(childNodes)); return _Utils_Tuple2( A2($elm$core$List$cons, vdomNode, nodes), finalStyles); case 'NodeNS': var ns = html.a; var elemType = html.b; var properties = html.c; var children = html.d; var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); var _v3 = A3( $elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml, _Utils_Tuple2(_List_Nil, combinedStyles), children); var childNodes = _v3.a; var finalStyles = _v3.b; var vdomNode = A4( $elm$virtual_dom$VirtualDom$nodeNS, ns, elemType, A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties), $elm$core$List$reverse(childNodes)); return _Utils_Tuple2( A2($elm$core$List$cons, vdomNode, nodes), finalStyles); case 'KeyedNode': var elemType = html.a; var properties = html.b; var children = html.c; var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); var _v4 = A3( $elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml, _Utils_Tuple2(_List_Nil, combinedStyles), children); var childNodes = _v4.a; var finalStyles = _v4.b; var vdomNode = A3( $elm$virtual_dom$VirtualDom$keyedNode, elemType, A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties), $elm$core$List$reverse(childNodes)); return _Utils_Tuple2( A2($elm$core$List$cons, vdomNode, nodes), finalStyles); default: var ns = html.a; var elemType = html.b; var properties = html.c; var children = html.d; var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); var _v5 = A3( $elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml, _Utils_Tuple2(_List_Nil, combinedStyles), children); var childNodes = _v5.a; var finalStyles = _v5.b; var vdomNode = A4( $elm$virtual_dom$VirtualDom$keyedNodeNS, ns, elemType, A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties), $elm$core$List$reverse(childNodes)); return _Utils_Tuple2( A2($elm$core$List$cons, vdomNode, nodes), finalStyles); } }); var $elm$core$Dict$singleton = F2( function (key, value) { return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, key, value, $elm$core$Dict$RBEmpty_elm_builtin, $elm$core$Dict$RBEmpty_elm_builtin); }); var $rtfeldman$elm_css$VirtualDom$Styled$stylesFromPropertiesHelp = F2( function (candidate, properties) { stylesFromPropertiesHelp: while (true) { if (!properties.b) { return candidate; } else { var _v1 = properties.a; var styles = _v1.b; var classname = _v1.c; var rest = properties.b; if ($elm$core$String$isEmpty(classname)) { var $temp$candidate = candidate, $temp$properties = rest; candidate = $temp$candidate; properties = $temp$properties; continue stylesFromPropertiesHelp; } else { var $temp$candidate = $elm$core$Maybe$Just( _Utils_Tuple2(classname, styles)), $temp$properties = rest; candidate = $temp$candidate; properties = $temp$properties; continue stylesFromPropertiesHelp; } } } }); var $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties = function (properties) { var _v0 = A2($rtfeldman$elm_css$VirtualDom$Styled$stylesFromPropertiesHelp, $elm$core$Maybe$Nothing, properties); if (_v0.$ === 'Nothing') { return $elm$core$Dict$empty; } else { var _v1 = _v0.a; var classname = _v1.a; var styles = _v1.b; return A2($elm$core$Dict$singleton, classname, styles); } }; var $elm$virtual_dom$VirtualDom$text = _VirtualDom_text; var $rtfeldman$elm_css$Css$Structure$compactHelp = F2( function (declaration, _v0) { var keyframesByName = _v0.a; var declarations = _v0.b; switch (declaration.$) { case 'StyleBlockDeclaration': var _v2 = declaration.a; var properties = _v2.c; return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( keyframesByName, A2($elm$core$List$cons, declaration, declarations)); case 'MediaRule': var styleBlocks = declaration.b; return A2( $elm$core$List$all, function (_v3) { var properties = _v3.c; return $elm$core$List$isEmpty(properties); }, styleBlocks) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( keyframesByName, A2($elm$core$List$cons, declaration, declarations)); case 'SupportsRule': var otherDeclarations = declaration.b; return $elm$core$List$isEmpty(otherDeclarations) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( keyframesByName, A2($elm$core$List$cons, declaration, declarations)); case 'DocumentRule': return _Utils_Tuple2( keyframesByName, A2($elm$core$List$cons, declaration, declarations)); case 'PageRule': var properties = declaration.b; return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( keyframesByName, A2($elm$core$List$cons, declaration, declarations)); case 'FontFace': var properties = declaration.a; return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( keyframesByName, A2($elm$core$List$cons, declaration, declarations)); case 'Keyframes': var record = declaration.a; return $elm$core$String$isEmpty(record.declaration) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( A3($elm$core$Dict$insert, record.name, record.declaration, keyframesByName), declarations); case 'Viewport': var properties = declaration.a; return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( keyframesByName, A2($elm$core$List$cons, declaration, declarations)); case 'CounterStyle': var properties = declaration.a; return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( keyframesByName, A2($elm$core$List$cons, declaration, declarations)); default: var tuples = declaration.a; return A2( $elm$core$List$all, function (_v4) { var properties = _v4.b; return $elm$core$List$isEmpty(properties); }, tuples) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( keyframesByName, A2($elm$core$List$cons, declaration, declarations)); } }); var $rtfeldman$elm_css$Css$Structure$Keyframes = function (a) { return {$: 'Keyframes', a: a}; }; var $rtfeldman$elm_css$Css$Structure$withKeyframeDeclarations = F2( function (keyframesByName, compactedDeclarations) { return A2( $elm$core$List$append, A2( $elm$core$List$map, function (_v0) { var name = _v0.a; var decl = _v0.b; return $rtfeldman$elm_css$Css$Structure$Keyframes( {declaration: decl, name: name}); }, $elm$core$Dict$toList(keyframesByName)), compactedDeclarations); }); var $rtfeldman$elm_css$Css$Structure$compactStylesheet = function (_v0) { var charset = _v0.charset; var imports = _v0.imports; var namespaces = _v0.namespaces; var declarations = _v0.declarations; var _v1 = A3( $elm$core$List$foldr, $rtfeldman$elm_css$Css$Structure$compactHelp, _Utils_Tuple2($elm$core$Dict$empty, _List_Nil), declarations); var keyframesByName = _v1.a; var compactedDeclarations = _v1.b; var finalDeclarations = A2($rtfeldman$elm_css$Css$Structure$withKeyframeDeclarations, keyframesByName, compactedDeclarations); return {charset: charset, declarations: finalDeclarations, imports: imports, namespaces: namespaces}; }; var $elm$core$Maybe$map = F2( function (f, maybe) { if (maybe.$ === 'Just') { var value = maybe.a; return $elm$core$Maybe$Just( f(value)); } else { return $elm$core$Maybe$Nothing; } }); var $rtfeldman$elm_css$Css$Structure$Output$charsetToString = function (charset) { return A2( $elm$core$Maybe$withDefault, '', A2( $elm$core$Maybe$map, function (str) { return '@charset \"' + (str + '\"'); }, charset)); }; var $elm$core$List$filter = F2( function (isGood, list) { return A3( $elm$core$List$foldr, F2( function (x, xs) { return isGood(x) ? A2($elm$core$List$cons, x, xs) : xs; }), _List_Nil, list); }); var $rtfeldman$elm_css$Css$Structure$Output$mediaExpressionToString = function (expression) { return '(' + (expression.feature + (A2( $elm$core$Maybe$withDefault, '', A2( $elm$core$Maybe$map, $elm$core$Basics$append(': '), expression.value)) + ')')); }; var $rtfeldman$elm_css$Css$Structure$Output$mediaTypeToString = function (mediaType) { switch (mediaType.$) { case 'Print': return 'print'; case 'Screen': return 'screen'; default: return 'speech'; } }; var $rtfeldman$elm_css$Css$Structure$Output$mediaQueryToString = function (mediaQuery) { var prefixWith = F3( function (str, mediaType, expressions) { return str + (' ' + A2( $elm$core$String$join, ' and ', A2( $elm$core$List$cons, $rtfeldman$elm_css$Css$Structure$Output$mediaTypeToString(mediaType), A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$mediaExpressionToString, expressions)))); }); switch (mediaQuery.$) { case 'AllQuery': var expressions = mediaQuery.a; return A2( $elm$core$String$join, ' and ', A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$mediaExpressionToString, expressions)); case 'OnlyQuery': var mediaType = mediaQuery.a; var expressions = mediaQuery.b; return A3(prefixWith, 'only', mediaType, expressions); case 'NotQuery': var mediaType = mediaQuery.a; var expressions = mediaQuery.b; return A3(prefixWith, 'not', mediaType, expressions); default: var str = mediaQuery.a; return str; } }; var $rtfeldman$elm_css$Css$Structure$Output$importMediaQueryToString = F2( function (name, mediaQuery) { return '@import \"' + (name + ($rtfeldman$elm_css$Css$Structure$Output$mediaQueryToString(mediaQuery) + '\"')); }); var $rtfeldman$elm_css$Css$Structure$Output$importToString = function (_v0) { var name = _v0.a; var mediaQueries = _v0.b; return A2( $elm$core$String$join, '\n', A2( $elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$importMediaQueryToString(name), mediaQueries)); }; var $rtfeldman$elm_css$Css$Structure$Output$namespaceToString = function (_v0) { var prefix = _v0.a; var str = _v0.b; return '@namespace ' + (prefix + ('\"' + (str + '\"'))); }; var $rtfeldman$elm_css$Css$Structure$Output$spaceIndent = ' '; var $rtfeldman$elm_css$Css$Structure$Output$indent = function (str) { return _Utils_ap($rtfeldman$elm_css$Css$Structure$Output$spaceIndent, str); }; var $rtfeldman$elm_css$Css$Structure$Output$noIndent = ''; var $rtfeldman$elm_css$Css$Structure$Output$emitProperty = function (str) { return str + ';'; }; var $rtfeldman$elm_css$Css$Structure$Output$emitProperties = function (properties) { return A2( $elm$core$String$join, '\n', A2( $elm$core$List$map, A2($elm$core$Basics$composeL, $rtfeldman$elm_css$Css$Structure$Output$indent, $rtfeldman$elm_css$Css$Structure$Output$emitProperty), properties)); }; var $elm$core$String$append = _String_append; var $rtfeldman$elm_css$Css$Structure$Output$pseudoElementToString = function (_v0) { var str = _v0.a; return '::' + str; }; var $rtfeldman$elm_css$Css$Structure$Output$combinatorToString = function (combinator) { switch (combinator.$) { case 'AdjacentSibling': return '+'; case 'GeneralSibling': return '~'; case 'Child': return '>'; default: return ''; } }; var $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString = function (repeatableSimpleSelector) { switch (repeatableSimpleSelector.$) { case 'ClassSelector': var str = repeatableSimpleSelector.a; return '.' + str; case 'IdSelector': var str = repeatableSimpleSelector.a; return '#' + str; case 'PseudoClassSelector': var str = repeatableSimpleSelector.a; return ':' + str; default: var str = repeatableSimpleSelector.a; return '[' + (str + ']'); } }; var $rtfeldman$elm_css$Css$Structure$Output$simpleSelectorSequenceToString = function (simpleSelectorSequence) { switch (simpleSelectorSequence.$) { case 'TypeSelectorSequence': var str = simpleSelectorSequence.a.a; var repeatableSimpleSelectors = simpleSelectorSequence.b; return A2( $elm$core$String$join, '', A2( $elm$core$List$cons, str, A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString, repeatableSimpleSelectors))); case 'UniversalSelectorSequence': var repeatableSimpleSelectors = simpleSelectorSequence.a; return $elm$core$List$isEmpty(repeatableSimpleSelectors) ? '*' : A2( $elm$core$String$join, '', A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString, repeatableSimpleSelectors)); default: var str = simpleSelectorSequence.a; var repeatableSimpleSelectors = simpleSelectorSequence.b; return A2( $elm$core$String$join, '', A2( $elm$core$List$cons, str, A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString, repeatableSimpleSelectors))); } }; var $rtfeldman$elm_css$Css$Structure$Output$selectorChainToString = function (_v0) { var combinator = _v0.a; var sequence = _v0.b; return A2( $elm$core$String$join, ' ', _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$Output$combinatorToString(combinator), $rtfeldman$elm_css$Css$Structure$Output$simpleSelectorSequenceToString(sequence) ])); }; var $rtfeldman$elm_css$Css$Structure$Output$selectorToString = function (_v0) { var simpleSelectorSequence = _v0.a; var chain = _v0.b; var pseudoElement = _v0.c; var segments = A2( $elm$core$List$cons, $rtfeldman$elm_css$Css$Structure$Output$simpleSelectorSequenceToString(simpleSelectorSequence), A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$selectorChainToString, chain)); var pseudoElementsString = A2( $elm$core$String$join, '', _List_fromArray( [ A2( $elm$core$Maybe$withDefault, '', A2($elm$core$Maybe$map, $rtfeldman$elm_css$Css$Structure$Output$pseudoElementToString, pseudoElement)) ])); return A2( $elm$core$String$append, A2( $elm$core$String$join, ' ', A2( $elm$core$List$filter, A2($elm$core$Basics$composeL, $elm$core$Basics$not, $elm$core$String$isEmpty), segments)), pseudoElementsString); }; var $rtfeldman$elm_css$Css$Structure$Output$prettyPrintStyleBlock = F2( function (indentLevel, _v0) { var firstSelector = _v0.a; var otherSelectors = _v0.b; var properties = _v0.c; var selectorStr = A2( $elm$core$String$join, ', ', A2( $elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$selectorToString, A2($elm$core$List$cons, firstSelector, otherSelectors))); return A2( $elm$core$String$join, '', _List_fromArray( [ selectorStr, ' {\n', indentLevel, $rtfeldman$elm_css$Css$Structure$Output$emitProperties(properties), '\n', indentLevel, '}' ])); }); var $rtfeldman$elm_css$Css$Structure$Output$prettyPrintDeclaration = function (decl) { switch (decl.$) { case 'StyleBlockDeclaration': var styleBlock = decl.a; return A2($rtfeldman$elm_css$Css$Structure$Output$prettyPrintStyleBlock, $rtfeldman$elm_css$Css$Structure$Output$noIndent, styleBlock); case 'MediaRule': var mediaQueries = decl.a; var styleBlocks = decl.b; var query = A2( $elm$core$String$join, ',\n', A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$mediaQueryToString, mediaQueries)); var blocks = A2( $elm$core$String$join, '\n\n', A2( $elm$core$List$map, A2( $elm$core$Basics$composeL, $rtfeldman$elm_css$Css$Structure$Output$indent, $rtfeldman$elm_css$Css$Structure$Output$prettyPrintStyleBlock($rtfeldman$elm_css$Css$Structure$Output$spaceIndent)), styleBlocks)); return '@media ' + (query + (' {\n' + (blocks + '\n}'))); case 'SupportsRule': return 'TODO'; case 'DocumentRule': return 'TODO'; case 'PageRule': return 'TODO'; case 'FontFace': return 'TODO'; case 'Keyframes': var name = decl.a.name; var declaration = decl.a.declaration; return '@keyframes ' + (name + (' {\n' + (declaration + '\n}'))); case 'Viewport': return 'TODO'; case 'CounterStyle': return 'TODO'; default: return 'TODO'; } }; var $rtfeldman$elm_css$Css$Structure$Output$prettyPrint = function (_v0) { var charset = _v0.charset; var imports = _v0.imports; var namespaces = _v0.namespaces; var declarations = _v0.declarations; return A2( $elm$core$String$join, '\n\n', A2( $elm$core$List$filter, A2($elm$core$Basics$composeL, $elm$core$Basics$not, $elm$core$String$isEmpty), _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$Output$charsetToString(charset), A2( $elm$core$String$join, '\n', A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$importToString, imports)), A2( $elm$core$String$join, '\n', A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$namespaceToString, namespaces)), A2( $elm$core$String$join, '\n\n', A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$prettyPrintDeclaration, declarations)) ]))); }; var $rtfeldman$elm_css$Css$Structure$CounterStyle = function (a) { return {$: 'CounterStyle', a: a}; }; var $rtfeldman$elm_css$Css$Structure$FontFace = function (a) { return {$: 'FontFace', a: a}; }; var $rtfeldman$elm_css$Css$Structure$PageRule = F2( function (a, b) { return {$: 'PageRule', a: a, b: b}; }); var $rtfeldman$elm_css$Css$Structure$Selector = F3( function (a, b, c) { return {$: 'Selector', a: a, b: b, c: c}; }); var $rtfeldman$elm_css$Css$Structure$StyleBlock = F3( function (a, b, c) { return {$: 'StyleBlock', a: a, b: b, c: c}; }); var $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration = function (a) { return {$: 'StyleBlockDeclaration', a: a}; }; var $rtfeldman$elm_css$Css$Structure$SupportsRule = F2( function (a, b) { return {$: 'SupportsRule', a: a, b: b}; }); var $rtfeldman$elm_css$Css$Structure$Viewport = function (a) { return {$: 'Viewport', a: a}; }; var $rtfeldman$elm_css$Css$Structure$MediaRule = F2( function (a, b) { return {$: 'MediaRule', a: a, b: b}; }); var $rtfeldman$elm_css$Css$Structure$mapLast = F2( function (update, list) { if (!list.b) { return list; } else { if (!list.b.b) { var only = list.a; return _List_fromArray( [ update(only) ]); } else { var first = list.a; var rest = list.b; return A2( $elm$core$List$cons, first, A2($rtfeldman$elm_css$Css$Structure$mapLast, update, rest)); } } }); var $rtfeldman$elm_css$Css$Structure$withPropertyAppended = F2( function (property, _v0) { var firstSelector = _v0.a; var otherSelectors = _v0.b; var properties = _v0.c; return A3( $rtfeldman$elm_css$Css$Structure$StyleBlock, firstSelector, otherSelectors, _Utils_ap( properties, _List_fromArray( [property]))); }); var $rtfeldman$elm_css$Css$Structure$appendProperty = F2( function (property, declarations) { if (!declarations.b) { return declarations; } else { if (!declarations.b.b) { switch (declarations.a.$) { case 'StyleBlockDeclaration': var styleBlock = declarations.a.a; return _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration( A2($rtfeldman$elm_css$Css$Structure$withPropertyAppended, property, styleBlock)) ]); case 'MediaRule': var _v1 = declarations.a; var mediaQueries = _v1.a; var styleBlocks = _v1.b; return _List_fromArray( [ A2( $rtfeldman$elm_css$Css$Structure$MediaRule, mediaQueries, A2( $rtfeldman$elm_css$Css$Structure$mapLast, $rtfeldman$elm_css$Css$Structure$withPropertyAppended(property), styleBlocks)) ]); default: return declarations; } } else { var first = declarations.a; var rest = declarations.b; return A2( $elm$core$List$cons, first, A2($rtfeldman$elm_css$Css$Structure$appendProperty, property, rest)); } } }); var $rtfeldman$elm_css$Css$Structure$appendToLastSelector = F2( function (f, styleBlock) { if (!styleBlock.b.b) { var only = styleBlock.a; var properties = styleBlock.c; return _List_fromArray( [ A3($rtfeldman$elm_css$Css$Structure$StyleBlock, only, _List_Nil, properties), A3( $rtfeldman$elm_css$Css$Structure$StyleBlock, f(only), _List_Nil, _List_Nil) ]); } else { var first = styleBlock.a; var rest = styleBlock.b; var properties = styleBlock.c; var newRest = A2($elm$core$List$map, f, rest); var newFirst = f(first); return _List_fromArray( [ A3($rtfeldman$elm_css$Css$Structure$StyleBlock, first, rest, properties), A3($rtfeldman$elm_css$Css$Structure$StyleBlock, newFirst, newRest, _List_Nil) ]); } }); var $rtfeldman$elm_css$Css$Structure$applyPseudoElement = F2( function (pseudo, _v0) { var sequence = _v0.a; var selectors = _v0.b; return A3( $rtfeldman$elm_css$Css$Structure$Selector, sequence, selectors, $elm$core$Maybe$Just(pseudo)); }); var $rtfeldman$elm_css$Css$Structure$appendPseudoElementToLastSelector = F2( function (pseudo, styleBlock) { return A2( $rtfeldman$elm_css$Css$Structure$appendToLastSelector, $rtfeldman$elm_css$Css$Structure$applyPseudoElement(pseudo), styleBlock); }); var $rtfeldman$elm_css$Css$Structure$CustomSelector = F2( function (a, b) { return {$: 'CustomSelector', a: a, b: b}; }); var $rtfeldman$elm_css$Css$Structure$TypeSelectorSequence = F2( function (a, b) { return {$: 'TypeSelectorSequence', a: a, b: b}; }); var $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence = function (a) { return {$: 'UniversalSelectorSequence', a: a}; }; var $rtfeldman$elm_css$Css$Structure$appendRepeatable = F2( function (selector, sequence) { switch (sequence.$) { case 'TypeSelectorSequence': var typeSelector = sequence.a; var list = sequence.b; return A2( $rtfeldman$elm_css$Css$Structure$TypeSelectorSequence, typeSelector, _Utils_ap( list, _List_fromArray( [selector]))); case 'UniversalSelectorSequence': var list = sequence.a; return $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence( _Utils_ap( list, _List_fromArray( [selector]))); default: var str = sequence.a; var list = sequence.b; return A2( $rtfeldman$elm_css$Css$Structure$CustomSelector, str, _Utils_ap( list, _List_fromArray( [selector]))); } }); var $rtfeldman$elm_css$Css$Structure$appendRepeatableWithCombinator = F2( function (selector, list) { if (!list.b) { return _List_Nil; } else { if (!list.b.b) { var _v1 = list.a; var combinator = _v1.a; var sequence = _v1.b; return _List_fromArray( [ _Utils_Tuple2( combinator, A2($rtfeldman$elm_css$Css$Structure$appendRepeatable, selector, sequence)) ]); } else { var first = list.a; var rest = list.b; return A2( $elm$core$List$cons, first, A2($rtfeldman$elm_css$Css$Structure$appendRepeatableWithCombinator, selector, rest)); } } }); var $rtfeldman$elm_css$Css$Structure$appendRepeatableSelector = F2( function (repeatableSimpleSelector, selector) { if (!selector.b.b) { var sequence = selector.a; var pseudoElement = selector.c; return A3( $rtfeldman$elm_css$Css$Structure$Selector, A2($rtfeldman$elm_css$Css$Structure$appendRepeatable, repeatableSimpleSelector, sequence), _List_Nil, pseudoElement); } else { var firstSelector = selector.a; var tuples = selector.b; var pseudoElement = selector.c; return A3( $rtfeldman$elm_css$Css$Structure$Selector, firstSelector, A2($rtfeldman$elm_css$Css$Structure$appendRepeatableWithCombinator, repeatableSimpleSelector, tuples), pseudoElement); } }); var $rtfeldman$elm_css$Css$Structure$appendRepeatableToLastSelector = F2( function (selector, styleBlock) { return A2( $rtfeldman$elm_css$Css$Structure$appendToLastSelector, $rtfeldman$elm_css$Css$Structure$appendRepeatableSelector(selector), styleBlock); }); var $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors = function (declarations) { collectSelectors: while (true) { if (!declarations.b) { return _List_Nil; } else { if (declarations.a.$ === 'StyleBlockDeclaration') { var _v1 = declarations.a.a; var firstSelector = _v1.a; var otherSelectors = _v1.b; var rest = declarations.b; return _Utils_ap( A2($elm$core$List$cons, firstSelector, otherSelectors), $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors(rest)); } else { var rest = declarations.b; var $temp$declarations = rest; declarations = $temp$declarations; continue collectSelectors; } } } }; var $rtfeldman$elm_css$Css$Structure$DocumentRule = F5( function (a, b, c, d, e) { return {$: 'DocumentRule', a: a, b: b, c: c, d: d, e: e}; }); var $rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock = F2( function (update, declarations) { _v0$12: while (true) { if (!declarations.b) { return declarations; } else { if (!declarations.b.b) { switch (declarations.a.$) { case 'StyleBlockDeclaration': var styleBlock = declarations.a.a; return A2( $elm$core$List$map, $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration, update(styleBlock)); case 'MediaRule': if (declarations.a.b.b) { if (!declarations.a.b.b.b) { var _v1 = declarations.a; var mediaQueries = _v1.a; var _v2 = _v1.b; var styleBlock = _v2.a; return _List_fromArray( [ A2( $rtfeldman$elm_css$Css$Structure$MediaRule, mediaQueries, update(styleBlock)) ]); } else { var _v3 = declarations.a; var mediaQueries = _v3.a; var _v4 = _v3.b; var first = _v4.a; var rest = _v4.b; var _v5 = A2( $rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, update, _List_fromArray( [ A2($rtfeldman$elm_css$Css$Structure$MediaRule, mediaQueries, rest) ])); if ((_v5.b && (_v5.a.$ === 'MediaRule')) && (!_v5.b.b)) { var _v6 = _v5.a; var newMediaQueries = _v6.a; var newStyleBlocks = _v6.b; return _List_fromArray( [ A2( $rtfeldman$elm_css$Css$Structure$MediaRule, newMediaQueries, A2($elm$core$List$cons, first, newStyleBlocks)) ]); } else { var newDeclarations = _v5; return newDeclarations; } } } else { break _v0$12; } case 'SupportsRule': var _v7 = declarations.a; var str = _v7.a; var nestedDeclarations = _v7.b; return _List_fromArray( [ A2( $rtfeldman$elm_css$Css$Structure$SupportsRule, str, A2($rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, update, nestedDeclarations)) ]); case 'DocumentRule': var _v8 = declarations.a; var str1 = _v8.a; var str2 = _v8.b; var str3 = _v8.c; var str4 = _v8.d; var styleBlock = _v8.e; return A2( $elm$core$List$map, A4($rtfeldman$elm_css$Css$Structure$DocumentRule, str1, str2, str3, str4), update(styleBlock)); case 'PageRule': var _v9 = declarations.a; return declarations; case 'FontFace': return declarations; case 'Keyframes': return declarations; case 'Viewport': return declarations; case 'CounterStyle': return declarations; default: return declarations; } } else { break _v0$12; } } } var first = declarations.a; var rest = declarations.b; return A2( $elm$core$List$cons, first, A2($rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, update, rest)); }); var $elm$core$String$cons = _String_cons; var $rtfeldman$elm_css$ElmCssVendor$Murmur3$HashData = F4( function (shift, seed, hash, charsProcessed) { return {charsProcessed: charsProcessed, hash: hash, seed: seed, shift: shift}; }); var $rtfeldman$elm_css$ElmCssVendor$Murmur3$c1 = 3432918353; var $rtfeldman$elm_css$ElmCssVendor$Murmur3$c2 = 461845907; var $elm$core$Bitwise$and = _Bitwise_and; var $elm$core$Bitwise$shiftLeftBy = _Bitwise_shiftLeftBy; var $elm$core$Bitwise$shiftRightZfBy = _Bitwise_shiftRightZfBy; var $rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy = F2( function (b, a) { return ((a & 65535) * b) + ((((a >>> 16) * b) & 65535) << 16); }); var $elm$core$Bitwise$or = _Bitwise_or; var $rtfeldman$elm_css$ElmCssVendor$Murmur3$rotlBy = F2( function (b, a) { return (a << b) | (a >>> (32 - b)); }); var $elm$core$Bitwise$xor = _Bitwise_xor; var $rtfeldman$elm_css$ElmCssVendor$Murmur3$finalize = function (data) { var acc = (!(!data.hash)) ? (data.seed ^ A2( $rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, $rtfeldman$elm_css$ElmCssVendor$Murmur3$c2, A2( $rtfeldman$elm_css$ElmCssVendor$Murmur3$rotlBy, 15, A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, $rtfeldman$elm_css$ElmCssVendor$Murmur3$c1, data.hash)))) : data.seed; var h0 = acc ^ data.charsProcessed; var h1 = A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, 2246822507, h0 ^ (h0 >>> 16)); var h2 = A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, 3266489909, h1 ^ (h1 >>> 13)); return (h2 ^ (h2 >>> 16)) >>> 0; }; var $elm$core$String$foldl = _String_foldl; var $rtfeldman$elm_css$ElmCssVendor$Murmur3$mix = F2( function (h1, k1) { return A2( $rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, 5, A2( $rtfeldman$elm_css$ElmCssVendor$Murmur3$rotlBy, 13, h1 ^ A2( $rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, $rtfeldman$elm_css$ElmCssVendor$Murmur3$c2, A2( $rtfeldman$elm_css$ElmCssVendor$Murmur3$rotlBy, 15, A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, $rtfeldman$elm_css$ElmCssVendor$Murmur3$c1, k1))))) + 3864292196; }); var $rtfeldman$elm_css$ElmCssVendor$Murmur3$hashFold = F2( function (c, data) { var res = data.hash | ((255 & $elm$core$Char$toCode(c)) << data.shift); var _v0 = data.shift; if (_v0 === 24) { return { charsProcessed: data.charsProcessed + 1, hash: 0, seed: A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$mix, data.seed, res), shift: 0 }; } else { return {charsProcessed: data.charsProcessed + 1, hash: res, seed: data.seed, shift: data.shift + 8}; } }); var $rtfeldman$elm_css$ElmCssVendor$Murmur3$hashString = F2( function (seed, str) { return $rtfeldman$elm_css$ElmCssVendor$Murmur3$finalize( A3( $elm$core$String$foldl, $rtfeldman$elm_css$ElmCssVendor$Murmur3$hashFold, A4($rtfeldman$elm_css$ElmCssVendor$Murmur3$HashData, 0, seed, 0, 0), str)); }); var $rtfeldman$elm_css$Hash$murmurSeed = 15739; var $elm$core$String$fromList = _String_fromList; var $elm$core$Basics$modBy = _Basics_modBy; var $rtfeldman$elm_hex$Hex$unsafeToDigit = function (num) { unsafeToDigit: while (true) { switch (num) { case 0: return _Utils_chr('0'); case 1: return _Utils_chr('1'); case 2: return _Utils_chr('2'); case 3: return _Utils_chr('3'); case 4: return _Utils_chr('4'); case 5: return _Utils_chr('5'); case 6: return _Utils_chr('6'); case 7: return _Utils_chr('7'); case 8: return _Utils_chr('8'); case 9: return _Utils_chr('9'); case 10: return _Utils_chr('a'); case 11: return _Utils_chr('b'); case 12: return _Utils_chr('c'); case 13: return _Utils_chr('d'); case 14: return _Utils_chr('e'); case 15: return _Utils_chr('f'); default: var $temp$num = num; num = $temp$num; continue unsafeToDigit; } } }; var $rtfeldman$elm_hex$Hex$unsafePositiveToDigits = F2( function (digits, num) { unsafePositiveToDigits: while (true) { if (num < 16) { return A2( $elm$core$List$cons, $rtfeldman$elm_hex$Hex$unsafeToDigit(num), digits); } else { var $temp$digits = A2( $elm$core$List$cons, $rtfeldman$elm_hex$Hex$unsafeToDigit( A2($elm$core$Basics$modBy, 16, num)), digits), $temp$num = (num / 16) | 0; digits = $temp$digits; num = $temp$num; continue unsafePositiveToDigits; } } }); var $rtfeldman$elm_hex$Hex$toString = function (num) { return $elm$core$String$fromList( (num < 0) ? A2( $elm$core$List$cons, _Utils_chr('-'), A2($rtfeldman$elm_hex$Hex$unsafePositiveToDigits, _List_Nil, -num)) : A2($rtfeldman$elm_hex$Hex$unsafePositiveToDigits, _List_Nil, num)); }; var $rtfeldman$elm_css$Hash$fromString = function (str) { return A2( $elm$core$String$cons, _Utils_chr('_'), $rtfeldman$elm_hex$Hex$toString( A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$hashString, $rtfeldman$elm_css$Hash$murmurSeed, str))); }; var $elm$core$List$head = function (list) { if (list.b) { var x = list.a; var xs = list.b; return $elm$core$Maybe$Just(x); } else { return $elm$core$Maybe$Nothing; } }; var $rtfeldman$elm_css$Css$Preprocess$Resolve$last = function (list) { last: while (true) { if (!list.b) { return $elm$core$Maybe$Nothing; } else { if (!list.b.b) { var singleton = list.a; return $elm$core$Maybe$Just(singleton); } else { var rest = list.b; var $temp$list = rest; list = $temp$list; continue last; } } } }; var $rtfeldman$elm_css$Css$Preprocess$Resolve$lastDeclaration = function (declarations) { lastDeclaration: while (true) { if (!declarations.b) { return $elm$core$Maybe$Nothing; } else { if (!declarations.b.b) { var x = declarations.a; return $elm$core$Maybe$Just( _List_fromArray( [x])); } else { var xs = declarations.b; var $temp$declarations = xs; declarations = $temp$declarations; continue lastDeclaration; } } } }; var $rtfeldman$elm_css$Css$Preprocess$Resolve$oneOf = function (maybes) { oneOf: while (true) { if (!maybes.b) { return $elm$core$Maybe$Nothing; } else { var maybe = maybes.a; var rest = maybes.b; if (maybe.$ === 'Nothing') { var $temp$maybes = rest; maybes = $temp$maybes; continue oneOf; } else { return maybe; } } } }; var $rtfeldman$elm_css$Css$Structure$FontFeatureValues = function (a) { return {$: 'FontFeatureValues', a: a}; }; var $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveFontFeatureValues = function (tuples) { var expandTuples = function (tuplesToExpand) { if (!tuplesToExpand.b) { return _List_Nil; } else { var properties = tuplesToExpand.a; var rest = tuplesToExpand.b; return A2( $elm$core$List$cons, properties, expandTuples(rest)); } }; var newTuples = expandTuples(tuples); return _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$FontFeatureValues(newTuples) ]); }; var $rtfeldman$elm_css$Css$Structure$styleBlockToMediaRule = F2( function (mediaQueries, declaration) { if (declaration.$ === 'StyleBlockDeclaration') { var styleBlock = declaration.a; return A2( $rtfeldman$elm_css$Css$Structure$MediaRule, mediaQueries, _List_fromArray( [styleBlock])); } else { return declaration; } }); var $elm$core$List$tail = function (list) { if (list.b) { var x = list.a; var xs = list.b; return $elm$core$Maybe$Just(xs); } else { return $elm$core$Maybe$Nothing; } }; var $elm$core$List$takeReverse = F3( function (n, list, kept) { takeReverse: while (true) { if (n <= 0) { return kept; } else { if (!list.b) { return kept; } else { var x = list.a; var xs = list.b; var $temp$n = n - 1, $temp$list = xs, $temp$kept = A2($elm$core$List$cons, x, kept); n = $temp$n; list = $temp$list; kept = $temp$kept; continue takeReverse; } } } }); var $elm$core$List$takeTailRec = F2( function (n, list) { return $elm$core$List$reverse( A3($elm$core$List$takeReverse, n, list, _List_Nil)); }); var $elm$core$List$takeFast = F3( function (ctr, n, list) { if (n <= 0) { return _List_Nil; } else { var _v0 = _Utils_Tuple2(n, list); _v0$1: while (true) { _v0$5: while (true) { if (!_v0.b.b) { return list; } else { if (_v0.b.b.b) { switch (_v0.a) { case 1: break _v0$1; case 2: var _v2 = _v0.b; var x = _v2.a; var _v3 = _v2.b; var y = _v3.a; return _List_fromArray( [x, y]); case 3: if (_v0.b.b.b.b) { var _v4 = _v0.b; var x = _v4.a; var _v5 = _v4.b; var y = _v5.a; var _v6 = _v5.b; var z = _v6.a; return _List_fromArray( [x, y, z]); } else { break _v0$5; } default: if (_v0.b.b.b.b && _v0.b.b.b.b.b) { var _v7 = _v0.b; var x = _v7.a; var _v8 = _v7.b; var y = _v8.a; var _v9 = _v8.b; var z = _v9.a; var _v10 = _v9.b; var w = _v10.a; var tl = _v10.b; return (ctr > 1000) ? A2( $elm$core$List$cons, x, A2( $elm$core$List$cons, y, A2( $elm$core$List$cons, z, A2( $elm$core$List$cons, w, A2($elm$core$List$takeTailRec, n - 4, tl))))) : A2( $elm$core$List$cons, x, A2( $elm$core$List$cons, y, A2( $elm$core$List$cons, z, A2( $elm$core$List$cons, w, A3($elm$core$List$takeFast, ctr + 1, n - 4, tl))))); } else { break _v0$5; } } } else { if (_v0.a === 1) { break _v0$1; } else { break _v0$5; } } } } return list; } var _v1 = _v0.b; var x = _v1.a; return _List_fromArray( [x]); } }); var $elm$core$List$take = F2( function (n, list) { return A3($elm$core$List$takeFast, 0, n, list); }); var $rtfeldman$elm_css$Css$Preprocess$Resolve$toDocumentRule = F5( function (str1, str2, str3, str4, declaration) { if (declaration.$ === 'StyleBlockDeclaration') { var structureStyleBlock = declaration.a; return A5($rtfeldman$elm_css$Css$Structure$DocumentRule, str1, str2, str3, str4, structureStyleBlock); } else { return declaration; } }); var $rtfeldman$elm_css$Css$Preprocess$Resolve$toMediaRule = F2( function (mediaQueries, declaration) { switch (declaration.$) { case 'StyleBlockDeclaration': var structureStyleBlock = declaration.a; return A2( $rtfeldman$elm_css$Css$Structure$MediaRule, mediaQueries, _List_fromArray( [structureStyleBlock])); case 'MediaRule': var newMediaQueries = declaration.a; var structureStyleBlocks = declaration.b; return A2( $rtfeldman$elm_css$Css$Structure$MediaRule, _Utils_ap(mediaQueries, newMediaQueries), structureStyleBlocks); case 'SupportsRule': var str = declaration.a; var declarations = declaration.b; return A2( $rtfeldman$elm_css$Css$Structure$SupportsRule, str, A2( $elm$core$List$map, $rtfeldman$elm_css$Css$Preprocess$Resolve$toMediaRule(mediaQueries), declarations)); case 'DocumentRule': var str1 = declaration.a; var str2 = declaration.b; var str3 = declaration.c; var str4 = declaration.d; var structureStyleBlock = declaration.e; return A5($rtfeldman$elm_css$Css$Structure$DocumentRule, str1, str2, str3, str4, structureStyleBlock); case 'PageRule': return declaration; case 'FontFace': return declaration; case 'Keyframes': return declaration; case 'Viewport': return declaration; case 'CounterStyle': return declaration; default: return declaration; } }); var $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet = function (_v0) { var declarations = _v0.a; return declarations; }; var $rtfeldman$elm_css$Css$Preprocess$Resolve$applyNestedStylesToLast = F4( function (nestedStyles, rest, f, declarations) { var withoutParent = function (decls) { return A2( $elm$core$Maybe$withDefault, _List_Nil, $elm$core$List$tail(decls)); }; var nextResult = A2( $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, rest, A2( $elm$core$Maybe$withDefault, _List_Nil, $rtfeldman$elm_css$Css$Preprocess$Resolve$lastDeclaration(declarations))); var newDeclarations = function () { var _v14 = _Utils_Tuple2( $elm$core$List$head(nextResult), $rtfeldman$elm_css$Css$Preprocess$Resolve$last(declarations)); if ((_v14.a.$ === 'Just') && (_v14.b.$ === 'Just')) { var nextResultParent = _v14.a.a; var originalParent = _v14.b.a; return _Utils_ap( A2( $elm$core$List$take, $elm$core$List$length(declarations) - 1, declarations), _List_fromArray( [ (!_Utils_eq(originalParent, nextResultParent)) ? nextResultParent : originalParent ])); } else { return declarations; } }(); var insertStylesToNestedDecl = function (lastDecl) { return $elm$core$List$concat( A2( $rtfeldman$elm_css$Css$Structure$mapLast, $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles(nestedStyles), A2( $elm$core$List$map, $elm$core$List$singleton, A2($rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, f, lastDecl)))); }; var initialResult = A2( $elm$core$Maybe$withDefault, _List_Nil, A2( $elm$core$Maybe$map, insertStylesToNestedDecl, $rtfeldman$elm_css$Css$Preprocess$Resolve$lastDeclaration(declarations))); return _Utils_ap( newDeclarations, _Utils_ap( withoutParent(initialResult), withoutParent(nextResult))); }); var $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles = F2( function (styles, declarations) { if (!styles.b) { return declarations; } else { switch (styles.a.$) { case 'AppendProperty': var property = styles.a.a; var rest = styles.b; return A2( $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, rest, A2($rtfeldman$elm_css$Css$Structure$appendProperty, property, declarations)); case 'ExtendSelector': var _v4 = styles.a; var selector = _v4.a; var nestedStyles = _v4.b; var rest = styles.b; return A4( $rtfeldman$elm_css$Css$Preprocess$Resolve$applyNestedStylesToLast, nestedStyles, rest, $rtfeldman$elm_css$Css$Structure$appendRepeatableToLastSelector(selector), declarations); case 'NestSnippet': var _v5 = styles.a; var selectorCombinator = _v5.a; var snippets = _v5.b; var rest = styles.b; var chain = F2( function (_v9, _v10) { var originalSequence = _v9.a; var originalTuples = _v9.b; var originalPseudoElement = _v9.c; var newSequence = _v10.a; var newTuples = _v10.b; var newPseudoElement = _v10.c; return A3( $rtfeldman$elm_css$Css$Structure$Selector, originalSequence, _Utils_ap( originalTuples, A2( $elm$core$List$cons, _Utils_Tuple2(selectorCombinator, newSequence), newTuples)), $rtfeldman$elm_css$Css$Preprocess$Resolve$oneOf( _List_fromArray( [newPseudoElement, originalPseudoElement]))); }); var expandDeclaration = function (declaration) { switch (declaration.$) { case 'StyleBlockDeclaration': var _v7 = declaration.a; var firstSelector = _v7.a; var otherSelectors = _v7.b; var nestedStyles = _v7.c; var newSelectors = A2( $elm$core$List$concatMap, function (originalSelector) { return A2( $elm$core$List$map, chain(originalSelector), A2($elm$core$List$cons, firstSelector, otherSelectors)); }, $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors(declarations)); var newDeclarations = function () { if (!newSelectors.b) { return _List_Nil; } else { var first = newSelectors.a; var remainder = newSelectors.b; return _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration( A3($rtfeldman$elm_css$Css$Structure$StyleBlock, first, remainder, _List_Nil)) ]); } }(); return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, nestedStyles, newDeclarations); case 'MediaRule': var mediaQueries = declaration.a; var styleBlocks = declaration.b; return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveMediaRule, mediaQueries, styleBlocks); case 'SupportsRule': var str = declaration.a; var otherSnippets = declaration.b; return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveSupportsRule, str, otherSnippets); case 'DocumentRule': var str1 = declaration.a; var str2 = declaration.b; var str3 = declaration.c; var str4 = declaration.d; var styleBlock = declaration.e; return A2( $elm$core$List$map, A4($rtfeldman$elm_css$Css$Preprocess$Resolve$toDocumentRule, str1, str2, str3, str4), $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock)); case 'PageRule': var str = declaration.a; var properties = declaration.b; return _List_fromArray( [ A2($rtfeldman$elm_css$Css$Structure$PageRule, str, properties) ]); case 'FontFace': var properties = declaration.a; return _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$FontFace(properties) ]); case 'Viewport': var properties = declaration.a; return _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$Viewport(properties) ]); case 'CounterStyle': var properties = declaration.a; return _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$CounterStyle(properties) ]); default: var tuples = declaration.a; return $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveFontFeatureValues(tuples); } }; return $elm$core$List$concat( _Utils_ap( _List_fromArray( [ A2($rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, rest, declarations) ]), A2( $elm$core$List$map, expandDeclaration, A2($elm$core$List$concatMap, $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet, snippets)))); case 'WithPseudoElement': var _v11 = styles.a; var pseudoElement = _v11.a; var nestedStyles = _v11.b; var rest = styles.b; return A4( $rtfeldman$elm_css$Css$Preprocess$Resolve$applyNestedStylesToLast, nestedStyles, rest, $rtfeldman$elm_css$Css$Structure$appendPseudoElementToLastSelector(pseudoElement), declarations); case 'WithKeyframes': var str = styles.a.a; var rest = styles.b; var name = $rtfeldman$elm_css$Hash$fromString(str); var newProperty = 'animation-name:' + name; var newDeclarations = A2( $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, rest, A2($rtfeldman$elm_css$Css$Structure$appendProperty, newProperty, declarations)); return A2( $elm$core$List$append, newDeclarations, _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$Keyframes( {declaration: str, name: name}) ])); case 'WithMedia': var _v12 = styles.a; var mediaQueries = _v12.a; var nestedStyles = _v12.b; var rest = styles.b; var extraDeclarations = function () { var _v13 = $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors(declarations); if (!_v13.b) { return _List_Nil; } else { var firstSelector = _v13.a; var otherSelectors = _v13.b; return A2( $elm$core$List$map, $rtfeldman$elm_css$Css$Structure$styleBlockToMediaRule(mediaQueries), A2( $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, nestedStyles, $elm$core$List$singleton( $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration( A3($rtfeldman$elm_css$Css$Structure$StyleBlock, firstSelector, otherSelectors, _List_Nil))))); } }(); return _Utils_ap( A2($rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, rest, declarations), extraDeclarations); default: var otherStyles = styles.a.a; var rest = styles.b; return A2( $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, _Utils_ap(otherStyles, rest), declarations); } } }); var $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock = function (_v2) { var firstSelector = _v2.a; var otherSelectors = _v2.b; var styles = _v2.c; return A2( $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, styles, _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration( A3($rtfeldman$elm_css$Css$Structure$StyleBlock, firstSelector, otherSelectors, _List_Nil)) ])); }; var $rtfeldman$elm_css$Css$Preprocess$Resolve$extract = function (snippetDeclarations) { if (!snippetDeclarations.b) { return _List_Nil; } else { var first = snippetDeclarations.a; var rest = snippetDeclarations.b; return _Utils_ap( $rtfeldman$elm_css$Css$Preprocess$Resolve$toDeclarations(first), $rtfeldman$elm_css$Css$Preprocess$Resolve$extract(rest)); } }; var $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveMediaRule = F2( function (mediaQueries, styleBlocks) { var handleStyleBlock = function (styleBlock) { return A2( $elm$core$List$map, $rtfeldman$elm_css$Css$Preprocess$Resolve$toMediaRule(mediaQueries), $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock)); }; return A2($elm$core$List$concatMap, handleStyleBlock, styleBlocks); }); var $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveSupportsRule = F2( function (str, snippets) { var declarations = $rtfeldman$elm_css$Css$Preprocess$Resolve$extract( A2($elm$core$List$concatMap, $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet, snippets)); return _List_fromArray( [ A2($rtfeldman$elm_css$Css$Structure$SupportsRule, str, declarations) ]); }); var $rtfeldman$elm_css$Css$Preprocess$Resolve$toDeclarations = function (snippetDeclaration) { switch (snippetDeclaration.$) { case 'StyleBlockDeclaration': var styleBlock = snippetDeclaration.a; return $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock); case 'MediaRule': var mediaQueries = snippetDeclaration.a; var styleBlocks = snippetDeclaration.b; return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveMediaRule, mediaQueries, styleBlocks); case 'SupportsRule': var str = snippetDeclaration.a; var snippets = snippetDeclaration.b; return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveSupportsRule, str, snippets); case 'DocumentRule': var str1 = snippetDeclaration.a; var str2 = snippetDeclaration.b; var str3 = snippetDeclaration.c; var str4 = snippetDeclaration.d; var styleBlock = snippetDeclaration.e; return A2( $elm$core$List$map, A4($rtfeldman$elm_css$Css$Preprocess$Resolve$toDocumentRule, str1, str2, str3, str4), $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock)); case 'PageRule': var str = snippetDeclaration.a; var properties = snippetDeclaration.b; return _List_fromArray( [ A2($rtfeldman$elm_css$Css$Structure$PageRule, str, properties) ]); case 'FontFace': var properties = snippetDeclaration.a; return _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$FontFace(properties) ]); case 'Viewport': var properties = snippetDeclaration.a; return _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$Viewport(properties) ]); case 'CounterStyle': var properties = snippetDeclaration.a; return _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$CounterStyle(properties) ]); default: var tuples = snippetDeclaration.a; return $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveFontFeatureValues(tuples); } }; var $rtfeldman$elm_css$Css$Preprocess$Resolve$toStructure = function (_v0) { var charset = _v0.charset; var imports = _v0.imports; var namespaces = _v0.namespaces; var snippets = _v0.snippets; var declarations = $rtfeldman$elm_css$Css$Preprocess$Resolve$extract( A2($elm$core$List$concatMap, $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet, snippets)); return {charset: charset, declarations: declarations, imports: imports, namespaces: namespaces}; }; var $rtfeldman$elm_css$Css$Preprocess$Resolve$compileHelp = function (sheet) { return $rtfeldman$elm_css$Css$Structure$Output$prettyPrint( $rtfeldman$elm_css$Css$Structure$compactStylesheet( $rtfeldman$elm_css$Css$Preprocess$Resolve$toStructure(sheet))); }; var $rtfeldman$elm_css$Css$Preprocess$Resolve$compile = function (styles) { return A2( $elm$core$String$join, '\n\n', A2($elm$core$List$map, $rtfeldman$elm_css$Css$Preprocess$Resolve$compileHelp, styles)); }; var $rtfeldman$elm_css$Css$Structure$ClassSelector = function (a) { return {$: 'ClassSelector', a: a}; }; var $rtfeldman$elm_css$Css$Preprocess$Snippet = function (a) { return {$: 'Snippet', a: a}; }; var $rtfeldman$elm_css$Css$Preprocess$StyleBlock = F3( function (a, b, c) { return {$: 'StyleBlock', a: a, b: b, c: c}; }); var $rtfeldman$elm_css$Css$Preprocess$StyleBlockDeclaration = function (a) { return {$: 'StyleBlockDeclaration', a: a}; }; var $rtfeldman$elm_css$VirtualDom$Styled$makeSnippet = F2( function (styles, sequence) { var selector = A3($rtfeldman$elm_css$Css$Structure$Selector, sequence, _List_Nil, $elm$core$Maybe$Nothing); return $rtfeldman$elm_css$Css$Preprocess$Snippet( _List_fromArray( [ $rtfeldman$elm_css$Css$Preprocess$StyleBlockDeclaration( A3($rtfeldman$elm_css$Css$Preprocess$StyleBlock, selector, _List_Nil, styles)) ])); }); var $rtfeldman$elm_css$VirtualDom$Styled$snippetFromPair = function (_v0) { var classname = _v0.a; var styles = _v0.b; return A2( $rtfeldman$elm_css$VirtualDom$Styled$makeSnippet, styles, $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence( _List_fromArray( [ $rtfeldman$elm_css$Css$Structure$ClassSelector(classname) ]))); }; var $rtfeldman$elm_css$Css$Preprocess$stylesheet = function (snippets) { return {charset: $elm$core$Maybe$Nothing, imports: _List_Nil, namespaces: _List_Nil, snippets: snippets}; }; var $rtfeldman$elm_css$VirtualDom$Styled$toDeclaration = function (dict) { return $rtfeldman$elm_css$Css$Preprocess$Resolve$compile( $elm$core$List$singleton( $rtfeldman$elm_css$Css$Preprocess$stylesheet( A2( $elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$snippetFromPair, $elm$core$Dict$toList(dict))))); }; var $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode = function (styles) { return A3( $elm$virtual_dom$VirtualDom$node, 'style', _List_Nil, $elm$core$List$singleton( $elm$virtual_dom$VirtualDom$text( $rtfeldman$elm_css$VirtualDom$Styled$toDeclaration(styles)))); }; var $rtfeldman$elm_css$VirtualDom$Styled$unstyle = F3( function (elemType, properties, children) { var unstyledProperties = A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties); var initialStyles = $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties(properties); var _v0 = A3( $elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml, _Utils_Tuple2(_List_Nil, initialStyles), children); var childNodes = _v0.a; var styles = _v0.b; var styleNode = $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode(styles); return A3( $elm$virtual_dom$VirtualDom$node, elemType, unstyledProperties, A2( $elm$core$List$cons, styleNode, $elm$core$List$reverse(childNodes))); }); var $rtfeldman$elm_css$VirtualDom$Styled$containsKey = F2( function (key, pairs) { containsKey: while (true) { if (!pairs.b) { return false; } else { var _v1 = pairs.a; var str = _v1.a; var rest = pairs.b; if (_Utils_eq(key, str)) { return true; } else { var $temp$key = key, $temp$pairs = rest; key = $temp$key; pairs = $temp$pairs; continue containsKey; } } } }); var $rtfeldman$elm_css$VirtualDom$Styled$getUnusedKey = F2( function (_default, pairs) { getUnusedKey: while (true) { if (!pairs.b) { return _default; } else { var _v1 = pairs.a; var firstKey = _v1.a; var rest = pairs.b; var newKey = '_' + firstKey; if (A2($rtfeldman$elm_css$VirtualDom$Styled$containsKey, newKey, rest)) { var $temp$default = newKey, $temp$pairs = rest; _default = $temp$default; pairs = $temp$pairs; continue getUnusedKey; } else { return newKey; } } } }); var $rtfeldman$elm_css$VirtualDom$Styled$toKeyedStyleNode = F2( function (allStyles, keyedChildNodes) { var styleNodeKey = A2($rtfeldman$elm_css$VirtualDom$Styled$getUnusedKey, '_', keyedChildNodes); var finalNode = $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode(allStyles); return _Utils_Tuple2(styleNodeKey, finalNode); }); var $rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyed = F3( function (elemType, properties, keyedChildren) { var unstyledProperties = A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties); var initialStyles = $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties(properties); var _v0 = A3( $elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml, _Utils_Tuple2(_List_Nil, initialStyles), keyedChildren); var keyedChildNodes = _v0.a; var styles = _v0.b; var keyedStyleNode = A2($rtfeldman$elm_css$VirtualDom$Styled$toKeyedStyleNode, styles, keyedChildNodes); return A3( $elm$virtual_dom$VirtualDom$keyedNode, elemType, unstyledProperties, A2( $elm$core$List$cons, keyedStyleNode, $elm$core$List$reverse(keyedChildNodes))); }); var $rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyedNS = F4( function (ns, elemType, properties, keyedChildren) { var unstyledProperties = A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties); var initialStyles = $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties(properties); var _v0 = A3( $elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml, _Utils_Tuple2(_List_Nil, initialStyles), keyedChildren); var keyedChildNodes = _v0.a; var styles = _v0.b; var keyedStyleNode = A2($rtfeldman$elm_css$VirtualDom$Styled$toKeyedStyleNode, styles, keyedChildNodes); return A4( $elm$virtual_dom$VirtualDom$keyedNodeNS, ns, elemType, unstyledProperties, A2( $elm$core$List$cons, keyedStyleNode, $elm$core$List$reverse(keyedChildNodes))); }); var $rtfeldman$elm_css$VirtualDom$Styled$unstyleNS = F4( function (ns, elemType, properties, children) { var unstyledProperties = A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties); var initialStyles = $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties(properties); var _v0 = A3( $elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml, _Utils_Tuple2(_List_Nil, initialStyles), children); var childNodes = _v0.a; var styles = _v0.b; var styleNode = $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode(styles); return A4( $elm$virtual_dom$VirtualDom$nodeNS, ns, elemType, unstyledProperties, A2( $elm$core$List$cons, styleNode, $elm$core$List$reverse(childNodes))); }); var $rtfeldman$elm_css$VirtualDom$Styled$toUnstyled = function (vdom) { switch (vdom.$) { case 'Unstyled': var plainNode = vdom.a; return plainNode; case 'Node': var elemType = vdom.a; var properties = vdom.b; var children = vdom.c; return A3($rtfeldman$elm_css$VirtualDom$Styled$unstyle, elemType, properties, children); case 'NodeNS': var ns = vdom.a; var elemType = vdom.b; var properties = vdom.c; var children = vdom.d; return A4($rtfeldman$elm_css$VirtualDom$Styled$unstyleNS, ns, elemType, properties, children); case 'KeyedNode': var elemType = vdom.a; var properties = vdom.b; var children = vdom.c; return A3($rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyed, elemType, properties, children); default: var ns = vdom.a; var elemType = vdom.b; var properties = vdom.c; var children = vdom.d; return A4($rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyedNS, ns, elemType, properties, children); } }; var $rtfeldman$elm_css$Html$Styled$toUnstyled = $rtfeldman$elm_css$VirtualDom$Styled$toUnstyled; var $author$project$Main$LogoutPressed = {$: 'LogoutPressed'}; var $rtfeldman$elm_css$Css$Preprocess$AppendProperty = function (a) { return {$: 'AppendProperty', a: a}; }; var $rtfeldman$elm_css$Css$property = F2( function (key, value) { return $rtfeldman$elm_css$Css$Preprocess$AppendProperty(key + (':' + value)); }); var $rtfeldman$elm_css$Css$backgroundColor = function (c) { return A2($rtfeldman$elm_css$Css$property, 'background-color', c.value); }; var $rtfeldman$elm_css$VirtualDom$Styled$murmurSeed = 15739; var $rtfeldman$elm_css$VirtualDom$Styled$getClassname = function (styles) { return $elm$core$List$isEmpty(styles) ? 'unstyled' : A2( $elm$core$String$cons, _Utils_chr('_'), $rtfeldman$elm_hex$Hex$toString( A2( $rtfeldman$elm_css$ElmCssVendor$Murmur3$hashString, $rtfeldman$elm_css$VirtualDom$Styled$murmurSeed, $rtfeldman$elm_css$Css$Preprocess$Resolve$compile( $elm$core$List$singleton( $rtfeldman$elm_css$Css$Preprocess$stylesheet( $elm$core$List$singleton( A2( $rtfeldman$elm_css$VirtualDom$Styled$makeSnippet, styles, $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence(_List_Nil))))))))); }; var $rtfeldman$elm_css$Html$Styled$Internal$css = function (styles) { var classname = $rtfeldman$elm_css$VirtualDom$Styled$getClassname(styles); var classProperty = A2( $elm$virtual_dom$VirtualDom$property, 'className', $elm$json$Json$Encode$string(classname)); return A3($rtfeldman$elm_css$VirtualDom$Styled$Attribute, classProperty, styles, classname); }; var $rtfeldman$elm_css$Html$Styled$Attributes$css = $rtfeldman$elm_css$Html$Styled$Internal$css; var $rtfeldman$elm_css$Css$prop1 = F2( function (key, arg) { return A2($rtfeldman$elm_css$Css$property, key, arg.value); }); var $rtfeldman$elm_css$Css$display = $rtfeldman$elm_css$Css$prop1('display'); var $rtfeldman$elm_css$Css$border = $rtfeldman$elm_css$Css$prop1('border'); var $rtfeldman$elm_css$Css$borderRadius = $rtfeldman$elm_css$Css$prop1('border-radius'); var $rtfeldman$elm_css$Html$Styled$button = $rtfeldman$elm_css$Html$Styled$node('button'); var $rtfeldman$elm_css$Css$color = function (c) { return A2($rtfeldman$elm_css$Css$property, 'color', c.value); }; var $rtfeldman$elm_css$Css$height = $rtfeldman$elm_css$Css$prop1('height'); var $rtfeldman$elm_css$Css$Preprocess$ExtendSelector = F2( function (a, b) { return {$: 'ExtendSelector', a: a, b: b}; }); var $rtfeldman$elm_css$Css$Structure$PseudoClassSelector = function (a) { return {$: 'PseudoClassSelector', a: a}; }; var $rtfeldman$elm_css$Css$pseudoClass = function (_class) { return $rtfeldman$elm_css$Css$Preprocess$ExtendSelector( $rtfeldman$elm_css$Css$Structure$PseudoClassSelector(_class)); }; var $rtfeldman$elm_css$Css$hover = $rtfeldman$elm_css$Css$pseudoClass('hover'); var $rtfeldman$elm_css$Css$margin = $rtfeldman$elm_css$Css$prop1('margin'); var $rtfeldman$elm_css$Css$prop2 = F3( function (key, argA, argB) { return A2( $rtfeldman$elm_css$Css$property, key, A2( $elm$core$String$join, ' ', _List_fromArray( [argA.value, argB.value]))); }); var $rtfeldman$elm_css$Css$padding2 = $rtfeldman$elm_css$Css$prop2('padding'); var $rtfeldman$elm_css$Css$PxUnits = {$: 'PxUnits'}; var $rtfeldman$elm_css$Css$Structure$Compatible = {$: 'Compatible'}; var $elm$core$String$fromFloat = _String_fromNumber; var $rtfeldman$elm_css$Css$Internal$lengthConverter = F3( function (units, unitLabel, numericValue) { return { absoluteLength: $rtfeldman$elm_css$Css$Structure$Compatible, calc: $rtfeldman$elm_css$Css$Structure$Compatible, flexBasis: $rtfeldman$elm_css$Css$Structure$Compatible, fontSize: $rtfeldman$elm_css$Css$Structure$Compatible, length: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrAuto: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrAutoOrCoverOrContain: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrMinMaxDimension: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrNone: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrNoneOrMinMaxDimension: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrNumber: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrNumberOrAutoOrNoneOrContent: $rtfeldman$elm_css$Css$Structure$Compatible, numericValue: numericValue, textIndent: $rtfeldman$elm_css$Css$Structure$Compatible, unitLabel: unitLabel, units: units, value: _Utils_ap( $elm$core$String$fromFloat(numericValue), unitLabel) }; }); var $rtfeldman$elm_css$Css$px = A2($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$PxUnits, 'px'); var $rtfeldman$elm_css$Html$Styled$styled = F4( function (fn, styles, attrs, children) { return A2( fn, A2( $elm$core$List$cons, $rtfeldman$elm_css$Html$Styled$Internal$css(styles), attrs), children); }); var $author$project$Styles$Theme = F7( function (primary, secondary, bad, fg, bg, fgLight, bgLight) { return {bad: bad, bg: bg, bgLight: bgLight, fg: fg, fgLight: fgLight, primary: primary, secondary: secondary}; }); var $rtfeldman$elm_css$Css$withPrecedingHash = function (str) { return A2($elm$core$String$startsWith, '#', str) ? str : A2( $elm$core$String$cons, _Utils_chr('#'), str); }; var $rtfeldman$elm_css$Css$erroneousHex = function (str) { return { alpha: 1, blue: 0, color: $rtfeldman$elm_css$Css$Structure$Compatible, green: 0, red: 0, value: $rtfeldman$elm_css$Css$withPrecedingHash(str) }; }; var $elm$core$String$fromChar = function (_char) { return A2($elm$core$String$cons, _char, ''); }; var $elm$core$Basics$pow = _Basics_pow; var $rtfeldman$elm_hex$Hex$fromStringHelp = F3( function (position, chars, accumulated) { fromStringHelp: while (true) { if (!chars.b) { return $elm$core$Result$Ok(accumulated); } else { var _char = chars.a; var rest = chars.b; switch (_char.valueOf()) { case '0': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated; position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case '1': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + A2($elm$core$Basics$pow, 16, position); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case '2': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (2 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case '3': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (3 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case '4': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (4 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case '5': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (5 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case '6': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (6 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case '7': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (7 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case '8': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (8 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case '9': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (9 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case 'a': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (10 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case 'b': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (11 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case 'c': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (12 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case 'd': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (13 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case 'e': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (14 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; case 'f': var $temp$position = position - 1, $temp$chars = rest, $temp$accumulated = accumulated + (15 * A2($elm$core$Basics$pow, 16, position)); position = $temp$position; chars = $temp$chars; accumulated = $temp$accumulated; continue fromStringHelp; default: var nonHex = _char; return $elm$core$Result$Err( $elm$core$String$fromChar(nonHex) + ' is not a valid hexadecimal character.'); } } } }); var $elm$core$Result$map = F2( function (func, ra) { if (ra.$ === 'Ok') { var a = ra.a; return $elm$core$Result$Ok( func(a)); } else { var e = ra.a; return $elm$core$Result$Err(e); } }); var $rtfeldman$elm_hex$Hex$fromString = function (str) { if ($elm$core$String$isEmpty(str)) { return $elm$core$Result$Err('Empty strings are not valid hexadecimal strings.'); } else { var result = function () { if (A2($elm$core$String$startsWith, '-', str)) { var list = A2( $elm$core$Maybe$withDefault, _List_Nil, $elm$core$List$tail( $elm$core$String$toList(str))); return A2( $elm$core$Result$map, $elm$core$Basics$negate, A3( $rtfeldman$elm_hex$Hex$fromStringHelp, $elm$core$List$length(list) - 1, list, 0)); } else { return A3( $rtfeldman$elm_hex$Hex$fromStringHelp, $elm$core$String$length(str) - 1, $elm$core$String$toList(str), 0); } }(); var formatError = function (err) { return A2( $elm$core$String$join, ' ', _List_fromArray( ['\"' + (str + '\"'), 'is not a valid hexadecimal string because', err])); }; return A2($elm$core$Result$mapError, formatError, result); } }; var $elm$core$String$toLower = _String_toLower; var $rtfeldman$elm_css$Css$validHex = F5( function (str, _v0, _v1, _v2, _v3) { var r1 = _v0.a; var r2 = _v0.b; var g1 = _v1.a; var g2 = _v1.b; var b1 = _v2.a; var b2 = _v2.b; var a1 = _v3.a; var a2 = _v3.b; var toResult = A2( $elm$core$Basics$composeR, $elm$core$String$fromList, A2($elm$core$Basics$composeR, $elm$core$String$toLower, $rtfeldman$elm_hex$Hex$fromString)); var results = _Utils_Tuple2( _Utils_Tuple2( toResult( _List_fromArray( [r1, r2])), toResult( _List_fromArray( [g1, g2]))), _Utils_Tuple2( toResult( _List_fromArray( [b1, b2])), toResult( _List_fromArray( [a1, a2])))); if ((((results.a.a.$ === 'Ok') && (results.a.b.$ === 'Ok')) && (results.b.a.$ === 'Ok')) && (results.b.b.$ === 'Ok')) { var _v5 = results.a; var red = _v5.a.a; var green = _v5.b.a; var _v6 = results.b; var blue = _v6.a.a; var alpha = _v6.b.a; return { alpha: alpha / 255, blue: blue, color: $rtfeldman$elm_css$Css$Structure$Compatible, green: green, red: red, value: $rtfeldman$elm_css$Css$withPrecedingHash(str) }; } else { return $rtfeldman$elm_css$Css$erroneousHex(str); } }); var $rtfeldman$elm_css$Css$hex = function (str) { var withoutHash = A2($elm$core$String$startsWith, '#', str) ? A2($elm$core$String$dropLeft, 1, str) : str; var _v0 = $elm$core$String$toList(withoutHash); _v0$4: while (true) { if ((_v0.b && _v0.b.b) && _v0.b.b.b) { if (!_v0.b.b.b.b) { var r = _v0.a; var _v1 = _v0.b; var g = _v1.a; var _v2 = _v1.b; var b = _v2.a; return A5( $rtfeldman$elm_css$Css$validHex, str, _Utils_Tuple2(r, r), _Utils_Tuple2(g, g), _Utils_Tuple2(b, b), _Utils_Tuple2( _Utils_chr('f'), _Utils_chr('f'))); } else { if (!_v0.b.b.b.b.b) { var r = _v0.a; var _v3 = _v0.b; var g = _v3.a; var _v4 = _v3.b; var b = _v4.a; var _v5 = _v4.b; var a = _v5.a; return A5( $rtfeldman$elm_css$Css$validHex, str, _Utils_Tuple2(r, r), _Utils_Tuple2(g, g), _Utils_Tuple2(b, b), _Utils_Tuple2(a, a)); } else { if (_v0.b.b.b.b.b.b) { if (!_v0.b.b.b.b.b.b.b) { var r1 = _v0.a; var _v6 = _v0.b; var r2 = _v6.a; var _v7 = _v6.b; var g1 = _v7.a; var _v8 = _v7.b; var g2 = _v8.a; var _v9 = _v8.b; var b1 = _v9.a; var _v10 = _v9.b; var b2 = _v10.a; return A5( $rtfeldman$elm_css$Css$validHex, str, _Utils_Tuple2(r1, r2), _Utils_Tuple2(g1, g2), _Utils_Tuple2(b1, b2), _Utils_Tuple2( _Utils_chr('f'), _Utils_chr('f'))); } else { if (_v0.b.b.b.b.b.b.b.b && (!_v0.b.b.b.b.b.b.b.b.b)) { var r1 = _v0.a; var _v11 = _v0.b; var r2 = _v11.a; var _v12 = _v11.b; var g1 = _v12.a; var _v13 = _v12.b; var g2 = _v13.a; var _v14 = _v13.b; var b1 = _v14.a; var _v15 = _v14.b; var b2 = _v15.a; var _v16 = _v15.b; var a1 = _v16.a; var _v17 = _v16.b; var a2 = _v17.a; return A5( $rtfeldman$elm_css$Css$validHex, str, _Utils_Tuple2(r1, r2), _Utils_Tuple2(g1, g2), _Utils_Tuple2(b1, b2), _Utils_Tuple2(a1, a2)); } else { break _v0$4; } } } else { break _v0$4; } } } } else { break _v0$4; } } return $rtfeldman$elm_css$Css$erroneousHex(str); }; var $author$project$Styles$theme = A7( $author$project$Styles$Theme, $rtfeldman$elm_css$Css$hex('fedbd0'), $rtfeldman$elm_css$Css$hex('feeae6'), $rtfeldman$elm_css$Css$hex('ff0000'), $rtfeldman$elm_css$Css$hex('442c2e'), $rtfeldman$elm_css$Css$hex('ffffff'), $rtfeldman$elm_css$Css$hex('442c2e'), $rtfeldman$elm_css$Css$hex('feeae6')); var $author$project$Styles$furbyButton = A2( $rtfeldman$elm_css$Html$Styled$styled, $rtfeldman$elm_css$Html$Styled$button, _List_fromArray( [ $rtfeldman$elm_css$Css$margin( $rtfeldman$elm_css$Css$px(12)), $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fg), $rtfeldman$elm_css$Css$height( $rtfeldman$elm_css$Css$px(40)), $rtfeldman$elm_css$Css$border( $rtfeldman$elm_css$Css$px(0)), $rtfeldman$elm_css$Css$borderRadius( $rtfeldman$elm_css$Css$px(2)), A2( $rtfeldman$elm_css$Css$padding2, $rtfeldman$elm_css$Css$px(6), $rtfeldman$elm_css$Css$px(12)), $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.primary), $rtfeldman$elm_css$Css$hover( _List_fromArray( [ $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.secondary), $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fg), $rtfeldman$elm_css$Css$margin( $rtfeldman$elm_css$Css$px(12)) ])) ])); var $rtfeldman$elm_css$Css$none = {backgroundImage: $rtfeldman$elm_css$Css$Structure$Compatible, blockAxisOverflow: $rtfeldman$elm_css$Css$Structure$Compatible, borderStyle: $rtfeldman$elm_css$Css$Structure$Compatible, cursor: $rtfeldman$elm_css$Css$Structure$Compatible, display: $rtfeldman$elm_css$Css$Structure$Compatible, hoverCapability: $rtfeldman$elm_css$Css$Structure$Compatible, inlineAxisOverflow: $rtfeldman$elm_css$Css$Structure$Compatible, keyframes: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrNone: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrNoneOrMinMaxDimension: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrNumberOrAutoOrNoneOrContent: $rtfeldman$elm_css$Css$Structure$Compatible, listStyleType: $rtfeldman$elm_css$Css$Structure$Compatible, listStyleTypeOrPositionOrImage: $rtfeldman$elm_css$Css$Structure$Compatible, none: $rtfeldman$elm_css$Css$Structure$Compatible, outline: $rtfeldman$elm_css$Css$Structure$Compatible, pointerDevice: $rtfeldman$elm_css$Css$Structure$Compatible, pointerEvents: $rtfeldman$elm_css$Css$Structure$Compatible, resize: $rtfeldman$elm_css$Css$Structure$Compatible, scriptingSupport: $rtfeldman$elm_css$Css$Structure$Compatible, textDecorationLine: $rtfeldman$elm_css$Css$Structure$Compatible, textTransform: $rtfeldman$elm_css$Css$Structure$Compatible, touchAction: $rtfeldman$elm_css$Css$Structure$Compatible, transform: $rtfeldman$elm_css$Css$Structure$Compatible, updateFrequency: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'none'}; var $rtfeldman$elm_css$Css$padding = $rtfeldman$elm_css$Css$prop1('padding'); var $rtfeldman$elm_css$Css$textDecoration = $rtfeldman$elm_css$Css$prop1('text-decoration'); var $rtfeldman$elm_css$Css$underline = {textDecorationLine: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'underline'}; var $author$project$Styles$headerLink = A2( $rtfeldman$elm_css$Html$Styled$styled, $rtfeldman$elm_css$Html$Styled$a, _List_fromArray( [ $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fgLight), $rtfeldman$elm_css$Css$padding( $rtfeldman$elm_css$Css$px(12)), $rtfeldman$elm_css$Css$textDecoration($rtfeldman$elm_css$Css$none), $rtfeldman$elm_css$Css$hover( _List_fromArray( [ $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.secondary), $rtfeldman$elm_css$Css$textDecoration($rtfeldman$elm_css$Css$underline) ])) ])); var $rtfeldman$elm_css$Css$inline = {display: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'inline'}; var $rtfeldman$elm_css$Css$left = $rtfeldman$elm_css$Css$prop1('left'); var $rtfeldman$elm_css$Css$listStyle = $rtfeldman$elm_css$Css$prop1('list-style'); var $elm$virtual_dom$VirtualDom$Normal = function (a) { return {$: 'Normal', a: a}; }; var $elm$virtual_dom$VirtualDom$on = _VirtualDom_on; var $rtfeldman$elm_css$VirtualDom$Styled$on = F2( function (eventName, handler) { return A3( $rtfeldman$elm_css$VirtualDom$Styled$Attribute, A2($elm$virtual_dom$VirtualDom$on, eventName, handler), _List_Nil, ''); }); var $rtfeldman$elm_css$Html$Styled$Events$on = F2( function (event, decoder) { return A2( $rtfeldman$elm_css$VirtualDom$Styled$on, event, $elm$virtual_dom$VirtualDom$Normal(decoder)); }); var $rtfeldman$elm_css$Html$Styled$Events$onClick = function (msg) { return A2( $rtfeldman$elm_css$Html$Styled$Events$on, 'click', $elm$json$Json$Decode$succeed(msg)); }; var $rtfeldman$elm_css$Css$paddingBottom = $rtfeldman$elm_css$Css$prop1('padding-bottom'); var $rtfeldman$elm_css$Css$paddingTop = $rtfeldman$elm_css$Css$prop1('padding-top'); var $rtfeldman$elm_css$VirtualDom$Styled$text = function (str) { return $rtfeldman$elm_css$VirtualDom$Styled$Unstyled( $elm$virtual_dom$VirtualDom$text(str)); }; var $rtfeldman$elm_css$Html$Styled$text = $rtfeldman$elm_css$VirtualDom$Styled$text; var $rtfeldman$elm_css$Css$Preprocess$ApplyStyles = function (a) { return {$: 'ApplyStyles', a: a}; }; var $rtfeldman$elm_css$Css$Internal$property = F2( function (key, value) { return $rtfeldman$elm_css$Css$Preprocess$AppendProperty(key + (':' + value)); }); var $rtfeldman$elm_css$Css$Internal$getOverloadedProperty = F3( function (functionName, desiredKey, style) { getOverloadedProperty: while (true) { switch (style.$) { case 'AppendProperty': var str = style.a; var key = A2( $elm$core$Maybe$withDefault, '', $elm$core$List$head( A2($elm$core$String$split, ':', str))); return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, key); case 'ExtendSelector': var selector = style.a; return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-selector')); case 'NestSnippet': var combinator = style.a; return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-combinator')); case 'WithPseudoElement': var pseudoElement = style.a; return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-pseudo-element setter')); case 'WithMedia': return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-media-query')); case 'WithKeyframes': return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-keyframes')); default: if (!style.a.b) { return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-empty-Style')); } else { if (!style.a.b.b) { var _v1 = style.a; var only = _v1.a; var $temp$functionName = functionName, $temp$desiredKey = desiredKey, $temp$style = only; functionName = $temp$functionName; desiredKey = $temp$desiredKey; style = $temp$style; continue getOverloadedProperty; } else { var _v2 = style.a; var first = _v2.a; var rest = _v2.b; var $temp$functionName = functionName, $temp$desiredKey = desiredKey, $temp$style = $rtfeldman$elm_css$Css$Preprocess$ApplyStyles(rest); functionName = $temp$functionName; desiredKey = $temp$desiredKey; style = $temp$style; continue getOverloadedProperty; } } } } }); var $rtfeldman$elm_css$Css$Internal$IncompatibleUnits = {$: 'IncompatibleUnits'}; var $rtfeldman$elm_css$Css$Internal$lengthForOverloadedProperty = A3($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$Internal$IncompatibleUnits, '', 0); var $rtfeldman$elm_css$Css$textAlign = function (fn) { return A3( $rtfeldman$elm_css$Css$Internal$getOverloadedProperty, 'textAlign', 'text-align', fn($rtfeldman$elm_css$Css$Internal$lengthForOverloadedProperty)); }; var $rtfeldman$elm_css$Html$Styled$ul = $rtfeldman$elm_css$Html$Styled$node('ul'); var $author$project$Main$viewHeader = function (model) { var links = _List_fromArray( [ _Utils_Tuple2('Catalog', '/catalog'), _Utils_Tuple2('Cart', '/cart') ]); return A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$padding( $rtfeldman$elm_css$Css$px(40)), $rtfeldman$elm_css$Css$paddingTop( $rtfeldman$elm_css$Css$px(3)), $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(3)), $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$left), $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.secondary) ])) ]), _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$ul, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$listStyle($rtfeldman$elm_css$Css$none), $rtfeldman$elm_css$Css$padding( $rtfeldman$elm_css$Css$px(0)), $rtfeldman$elm_css$Css$margin( $rtfeldman$elm_css$Css$px(24)) ])) ]), _Utils_ap( A2( $elm$core$List$map, function (_v0) { var name = _v0.a; var loc = _v0.b; return A2( $rtfeldman$elm_css$Html$Styled$li, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$display($rtfeldman$elm_css$Css$inline) ])) ]), _List_fromArray( [ A2( $author$project$Styles$headerLink, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$href(loc) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text(name) ])) ])); }, links), _List_fromArray( [ (!_Utils_eq(model.loginModel.loginStatus, $author$project$Login$LoggedIn)) ? A2( $rtfeldman$elm_css$Html$Styled$li, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$display($rtfeldman$elm_css$Css$inline) ])) ]), _List_fromArray( [ A2( $author$project$Styles$headerLink, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$href('/login') ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Login') ])) ])) : A2( $author$project$Styles$furbyButton, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Main$LogoutPressed) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Logout') ])) ]))) ])); }; var $author$project$Main$pageWrap = F2( function (model, page) { return $elm$core$List$singleton( $rtfeldman$elm_css$Html$Styled$toUnstyled( A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $author$project$Main$viewHeader(model), page ])))); }); var $author$project$Cart$calculateTotal = function (model) { var items = model.products; return A3( $elm$core$List$foldl, $elm$core$Basics$add, 0, A2( $elm$core$List$map, function (i) { return i.quantity * i.productItem.price; }, items)); }; var $author$project$Cart$AddToCartPressed = function (a) { return {$: 'AddToCartPressed', a: a}; }; var $author$project$Cart$RemoveFromCart = function (a) { return {$: 'RemoveFromCart', a: a}; }; var $author$project$Cart$viewCartItemListing = function (listing) { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text(listing.productItem.name), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( A2($elm$core$Maybe$withDefault, '', listing.productItem.kind)) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( A2($elm$core$Maybe$withDefault, '', listing.productItem.description)) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( $elm$core$String$fromFloat(listing.productItem.price)) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( $elm$core$String$fromInt(listing.quantity)) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$button, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onClick( $author$project$Cart$AddToCartPressed(listing.productItem.id)) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Add') ])) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$button, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onClick( $author$project$Cart$RemoveFromCart(listing.productItem.id)) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Remove') ])) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$a, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$href( '/product/' + $elm$core$String$fromInt(listing.productItem.id)) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('View Product') ])) ])) ])); }; var $author$project$Cart$viewStatus = function (s) { switch (s.$) { case 'Loading': return 'Loading'; case 'Loaded': return 'Ready!'; default: return 'Not loaded ...'; } }; var $author$project$Cart$view = function (model) { var _v0 = model.pageStatus; if (_v0.$ === 'Loading') { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( $author$project$Cart$viewStatus($author$project$Cart$Loading)) ])); } else { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ function () { var cart = A2($elm$core$List$map, $author$project$Cart$viewCartItemListing, model.products); return $elm$core$List$isEmpty(cart) ? $rtfeldman$elm_css$Html$Styled$text('No items in cart') : A2($rtfeldman$elm_css$Html$Styled$ul, _List_Nil, cart); }(), $rtfeldman$elm_css$Html$Styled$text( $elm$core$String$fromFloat( $author$project$Cart$calculateTotal(model))), A2( $rtfeldman$elm_css$Html$Styled$a, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$href('/checkout') ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Checkout') ])) ])); } }; var $rtfeldman$elm_css$Css$fontSize = $rtfeldman$elm_css$Css$prop1('font-size'); var $author$project$Styles$bigHeading = $rtfeldman$elm_css$Css$fontSize( $rtfeldman$elm_css$Css$px(24)); var $elm$core$Basics$ge = _Utils_ge; var $author$project$Utils$between = F2( function (_v0, v) { var l = _v0.a; var u = _v0.b; return (_Utils_cmp(v, l) > -1) && (_Utils_cmp(v, u) < 1); }); var $author$project$Catalog$filterProducts = function (model) { return A2( $elm$core$List$filter, function (p) { return A2( $author$project$Utils$between, model.filters.rating, A2($elm$core$Maybe$withDefault, 5.0, p.averageRating)); }, A2( $elm$core$List$filter, A2( $elm$core$Basics$composeL, $author$project$Utils$between(model.filters.price), function ($) { return $.price; }), model.products)); }; var $rtfeldman$elm_css$Css$float = function (fn) { return A3( $rtfeldman$elm_css$Css$Internal$getOverloadedProperty, 'float', 'float', fn($rtfeldman$elm_css$Css$Internal$lengthForOverloadedProperty)); }; var $rtfeldman$elm_css$Css$PercentageUnits = {$: 'PercentageUnits'}; var $rtfeldman$elm_css$Css$pct = A2($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$PercentageUnits, '%'); var $author$project$Catalog$ChangePriceLower = function (a) { return {$: 'ChangePriceLower', a: a}; }; var $author$project$Catalog$ChangePriceUpper = function (a) { return {$: 'ChangePriceUpper', a: a}; }; var $author$project$Catalog$ChangeRatingLower = function (a) { return {$: 'ChangeRatingLower', a: a}; }; var $author$project$Catalog$ChangeRatingUpper = function (a) { return {$: 'ChangeRatingUpper', a: a}; }; var $rtfeldman$elm_css$Css$prop3 = F4( function (key, argA, argB, argC) { return A2( $rtfeldman$elm_css$Css$property, key, A2( $elm$core$String$join, ' ', _List_fromArray( [argA.value, argB.value, argC.value]))); }); var $rtfeldman$elm_css$Css$borderBottom3 = $rtfeldman$elm_css$Css$prop3('border-bottom'); var $rtfeldman$elm_css$Css$right = $rtfeldman$elm_css$Css$prop1('right'); var $rtfeldman$elm_css$Html$Styled$select = $rtfeldman$elm_css$Html$Styled$node('select'); var $rtfeldman$elm_css$Css$solid = {borderStyle: $rtfeldman$elm_css$Css$Structure$Compatible, textDecorationStyle: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'solid'}; var $author$project$Styles$furbySelect = A2( $rtfeldman$elm_css$Html$Styled$styled, $rtfeldman$elm_css$Html$Styled$select, _List_fromArray( [ $rtfeldman$elm_css$Css$margin( $rtfeldman$elm_css$Css$px(6)), $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fg), $rtfeldman$elm_css$Css$border( $rtfeldman$elm_css$Css$px(0)), A3( $rtfeldman$elm_css$Css$borderBottom3, $rtfeldman$elm_css$Css$px(2), $rtfeldman$elm_css$Css$solid, $author$project$Styles$theme.bgLight), $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$right), A2( $rtfeldman$elm_css$Css$padding2, $rtfeldman$elm_css$Css$px(3), $rtfeldman$elm_css$Css$px(3)), $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.bg), $rtfeldman$elm_css$Css$hover( _List_fromArray( [ A3( $rtfeldman$elm_css$Css$borderBottom3, $rtfeldman$elm_css$Css$px(2), $rtfeldman$elm_css$Css$solid, $author$project$Styles$theme.fg) ])) ])); var $rtfeldman$elm_css$Html$Styled$Events$alwaysStop = function (x) { return _Utils_Tuple2(x, true); }; var $elm$virtual_dom$VirtualDom$MayStopPropagation = function (a) { return {$: 'MayStopPropagation', a: a}; }; var $rtfeldman$elm_css$Html$Styled$Events$stopPropagationOn = F2( function (event, decoder) { return A2( $rtfeldman$elm_css$VirtualDom$Styled$on, event, $elm$virtual_dom$VirtualDom$MayStopPropagation(decoder)); }); var $elm$json$Json$Decode$at = F2( function (fields, decoder) { return A3($elm$core$List$foldr, $elm$json$Json$Decode$field, decoder, fields); }); var $rtfeldman$elm_css$Html$Styled$Events$targetValue = A2( $elm$json$Json$Decode$at, _List_fromArray( ['target', 'value']), $elm$json$Json$Decode$string); var $rtfeldman$elm_css$Html$Styled$Events$onInput = function (tagger) { return A2( $rtfeldman$elm_css$Html$Styled$Events$stopPropagationOn, 'input', A2( $elm$json$Json$Decode$map, $rtfeldman$elm_css$Html$Styled$Events$alwaysStop, A2($elm$json$Json$Decode$map, tagger, $rtfeldman$elm_css$Html$Styled$Events$targetValue))); }; var $rtfeldman$elm_css$Html$Styled$option = $rtfeldman$elm_css$Html$Styled$node('option'); var $author$project$Utils$range = F3( function (start, stop, step) { return (_Utils_cmp(start, stop) > -1) ? _List_Nil : A2( $elm$core$List$cons, start, A3($author$project$Utils$range, start + step, stop, step)); }); var $elm$json$Json$Encode$bool = _Json_wrap; var $rtfeldman$elm_css$Html$Styled$Attributes$boolProperty = F2( function (key, bool) { return A2( $rtfeldman$elm_css$VirtualDom$Styled$property, key, $elm$json$Json$Encode$bool(bool)); }); var $rtfeldman$elm_css$Html$Styled$Attributes$selected = $rtfeldman$elm_css$Html$Styled$Attributes$boolProperty('selected'); var $elm$virtual_dom$VirtualDom$style = _VirtualDom_style; var $rtfeldman$elm_css$VirtualDom$Styled$style = F2( function (key, val) { return A3( $rtfeldman$elm_css$VirtualDom$Styled$Attribute, A2($elm$virtual_dom$VirtualDom$style, key, val), _List_Nil, ''); }); var $rtfeldman$elm_css$Html$Styled$Attributes$style = $rtfeldman$elm_css$VirtualDom$Styled$style; var $elm$core$String$toFloat = _String_toFloat; var $author$project$Catalog$viewFilters = function (model) { var viewRange = F2( function (_default, scale) { return A2( $elm$core$List$map, function (i) { return A2( $rtfeldman$elm_css$Html$Styled$option, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$selected( _Utils_eq(i, _default)) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( $elm$core$String$fromInt(i)) ])); }, scale); }); var ratingRange = A3($author$project$Utils$range, 1, 6, 1); var priceRange = A3($author$project$Utils$range, 0, 55000, 5000); var inp = A2( $elm$core$Basics$composeL, $elm$core$Maybe$withDefault(0), $elm$core$String$toFloat); return A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $author$project$Styles$bigHeading, $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(12)) ])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Filters') ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Price') ])), A2( $author$project$Styles$furbySelect, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onInput( A2($elm$core$Basics$composeL, $author$project$Catalog$ChangePriceLower, inp)), A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'appearance', 'none') ]), A2(viewRange, 0, priceRange)), $rtfeldman$elm_css$Html$Styled$text('to'), A2( $author$project$Styles$furbySelect, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onInput( A2($elm$core$Basics$composeL, $author$project$Catalog$ChangePriceUpper, inp)), A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'appearance', 'none') ]), A2(viewRange, 50000, priceRange)) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Rating') ])), A2( $author$project$Styles$furbySelect, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onInput( A2($elm$core$Basics$composeL, $author$project$Catalog$ChangeRatingLower, inp)), A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'appearance', 'none') ]), A2(viewRange, 1, ratingRange)), $rtfeldman$elm_css$Html$Styled$text('to'), A2( $author$project$Styles$furbySelect, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onInput( A2($elm$core$Basics$composeL, $author$project$Catalog$ChangeRatingUpper, inp)), A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'appearance', 'none') ]), A2(viewRange, 5, ratingRange)) ])) ])); }; var $elm$virtual_dom$VirtualDom$attribute = F2( function (key, value) { return A2( _VirtualDom_attribute, _VirtualDom_noOnOrFormAction(key), _VirtualDom_noJavaScriptOrHtmlUri(value)); }); var $rtfeldman$elm_css$VirtualDom$Styled$attribute = F2( function (key, value) { return A3( $rtfeldman$elm_css$VirtualDom$Styled$Attribute, A2($elm$virtual_dom$VirtualDom$attribute, key, value), _List_Nil, ''); }); var $rtfeldman$elm_css$Html$Styled$Attributes$attribute = $rtfeldman$elm_css$VirtualDom$Styled$attribute; var $author$project$Utils$arIosSrc = function (src) { return A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'ios-src', src); }; var $author$project$Utils$arModes = function (mode) { return A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'ar-modes', mode); }; var $author$project$Utils$arSrc = function (src) { return A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'src', src); }; var $author$project$Utils$autoRotate = A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'auto-rotate', ''); var $rtfeldman$elm_css$Css$bold = {fontWeight: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'bold'}; var $rtfeldman$elm_css$Css$border3 = $rtfeldman$elm_css$Css$prop3('border'); var $author$project$Utils$cameraControls = A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'camera-controls', ''); var $author$project$Styles$cardPrimaryText = $rtfeldman$elm_css$Css$fontSize( $rtfeldman$elm_css$Css$px(18)); var $rtfeldman$elm_css$Css$batch = $rtfeldman$elm_css$Css$Preprocess$ApplyStyles; var $author$project$Styles$cardSecondaryText = $rtfeldman$elm_css$Css$batch( _List_fromArray( [ $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fgLight), $rtfeldman$elm_css$Css$fontSize( $rtfeldman$elm_css$Css$px(12)) ])); var $author$project$Styles$cardSupportingText = $rtfeldman$elm_css$Css$fontSize( $rtfeldman$elm_css$Css$px(16)); var $rtfeldman$elm_css$Css$fontVariant = $rtfeldman$elm_css$Css$prop1('font-variant'); var $rtfeldman$elm_css$Css$fontWeight = function (_v0) { var value = _v0.value; return A2($rtfeldman$elm_css$Css$property, 'font-weight', value); }; var $author$project$Utils$loading = function (mode) { return A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'loading', mode); }; var $rtfeldman$elm_css$Css$marginBottom = $rtfeldman$elm_css$Css$prop1('margin-bottom'); var $rtfeldman$elm_css$Css$maxWidth = $rtfeldman$elm_css$Css$prop1('max-width'); var $author$project$Utils$modelViewer = F2( function (attributes, children) { return A3($rtfeldman$elm_css$Html$Styled$node, 'model-viewer', attributes, children); }); var $rtfeldman$elm_css$Css$Structure$PseudoElement = function (a) { return {$: 'PseudoElement', a: a}; }; var $rtfeldman$elm_css$Css$Preprocess$WithPseudoElement = F2( function (a, b) { return {$: 'WithPseudoElement', a: a, b: b}; }); var $rtfeldman$elm_css$Css$pseudoElement = function (element) { return $rtfeldman$elm_css$Css$Preprocess$WithPseudoElement( $rtfeldman$elm_css$Css$Structure$PseudoElement(element)); }; var $rtfeldman$elm_css$Css$before = $rtfeldman$elm_css$Css$pseudoElement('before'); var $author$project$Styles$money = $rtfeldman$elm_css$Css$before( _List_fromArray( [ A2($rtfeldman$elm_css$Css$property, 'content', '\"₹ \"') ])); var $rtfeldman$elm_css$Css$smallCaps = {fontVariant: $rtfeldman$elm_css$Css$Structure$Compatible, fontVariantCaps: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'small-caps'}; var $rtfeldman$elm_css$Css$width = $rtfeldman$elm_css$Css$prop1('width'); var $author$project$Catalog$viewProduct = function (p) { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$marginBottom( $rtfeldman$elm_css$Css$px(20)), A3( $rtfeldman$elm_css$Css$border3, $rtfeldman$elm_css$Css$px(1), $rtfeldman$elm_css$Css$solid, $author$project$Styles$theme.primary), $rtfeldman$elm_css$Css$borderRadius( $rtfeldman$elm_css$Css$px(4)), $rtfeldman$elm_css$Css$padding( $rtfeldman$elm_css$Css$px(20)), $rtfeldman$elm_css$Css$width( $rtfeldman$elm_css$Css$pct(100)), $rtfeldman$elm_css$Css$maxWidth( $rtfeldman$elm_css$Css$px(650)) ])) ]), _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left), $rtfeldman$elm_css$Css$width( $rtfeldman$elm_css$Css$pct(50)) ])) ]), _List_fromArray( [ A2( $author$project$Utils$modelViewer, _List_fromArray( [ $author$project$Utils$cameraControls, $author$project$Utils$autoRotate, $author$project$Utils$arSrc(p.src), $author$project$Utils$arIosSrc(p.iosSrc), $author$project$Utils$loading('eager'), $author$project$Utils$arModes('webxr') ]), _List_Nil) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left), $rtfeldman$elm_css$Css$width( $rtfeldman$elm_css$Css$pct(50)) ])) ]), _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $author$project$Styles$cardSecondaryText, $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(3)), $rtfeldman$elm_css$Css$fontVariant($rtfeldman$elm_css$Css$smallCaps) ])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( A2($elm$core$Maybe$withDefault, '', p.kind)) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $author$project$Styles$cardPrimaryText, $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(3)) ])) ]), _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$a, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$href( '/product/' + $elm$core$String$fromInt(p.id)) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text(p.name) ])) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $author$project$Styles$cardSecondaryText, $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(12)) ])) ]), _List_fromArray( [ function () { var _v0 = p.averageRating; if (_v0.$ === 'Just') { var v = _v0.a; return $rtfeldman$elm_css$Html$Styled$text( 'Avg Rating: ' + $elm$core$String$fromFloat(v)); } else { return $rtfeldman$elm_css$Html$Styled$text('No Ratings'); } }() ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $author$project$Styles$cardSupportingText, $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(6)) ])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( A2($elm$core$Maybe$withDefault, 'No description provided', p.description)) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$fontWeight($rtfeldman$elm_css$Css$bold), $rtfeldman$elm_css$Css$fontSize( $rtfeldman$elm_css$Css$px(14)), $author$project$Styles$money ])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( $elm$core$String$fromFloat(p.price)) ])) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'clear', 'both') ]), _List_Nil) ])); }; var $author$project$Catalog$viewStatus = function (s) { switch (s.$) { case 'Loading': return 'Loading'; case 'Loaded': return 'Ready!'; default: return 'Not loaded ...'; } }; var $author$project$Catalog$view = function (model) { var _v0 = model.pageStatus; if (_v0.$ === 'Loading') { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( $author$project$Catalog$viewStatus($author$project$Catalog$Loading)) ])); } else { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$padding( $rtfeldman$elm_css$Css$px(40)) ])) ]), _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left), $rtfeldman$elm_css$Css$width( $rtfeldman$elm_css$Css$pct(20)) ])) ]), _List_fromArray( [ $author$project$Catalog$viewFilters(model) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left), $rtfeldman$elm_css$Css$width( $rtfeldman$elm_css$Css$pct(80)) ])) ]), _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [$author$project$Styles$bigHeading])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Products') ])), A2( $rtfeldman$elm_css$Html$Styled$ul, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$padding( $rtfeldman$elm_css$Css$px(0)), $rtfeldman$elm_css$Css$listStyle($rtfeldman$elm_css$Css$none) ])) ]), A2( $elm$core$List$map, $author$project$Catalog$viewProduct, $author$project$Catalog$filterProducts(model))) ])) ])); } }; var $author$project$Checkout$CheckoutPressed = {$: 'CheckoutPressed'}; var $author$project$Checkout$PaymentModeSelected = function (a) { return {$: 'PaymentModeSelected', a: a}; }; var $author$project$Checkout$viewStatus = function (s) { switch (s.$) { case 'Loading': return 'Loading'; case 'Loaded': return 'Ready!'; default: return 'Not loaded ...'; } }; var $author$project$Checkout$view = function (model) { var _v0 = model.pageStatus; if (_v0.$ === 'Loading') { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( $author$project$Checkout$viewStatus($author$project$Checkout$Loading)) ])); } else { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( $elm$core$String$fromFloat(model.cartTotal)) ])), A2( $rtfeldman$elm_css$Html$Styled$select, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$option, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onInput($author$project$Checkout$PaymentModeSelected) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Cash') ])), A2( $rtfeldman$elm_css$Html$Styled$option, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onInput($author$project$Checkout$PaymentModeSelected) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Debit Card') ])), A2( $rtfeldman$elm_css$Html$Styled$option, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onInput($author$project$Checkout$PaymentModeSelected) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Credit Card') ])) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$a, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$href('/cart') ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Cancel') ])) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$button, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Checkout$CheckoutPressed) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Confirm and Pay') ])) ])) ])); } }; var $author$project$Login$LoginPressed = {$: 'LoginPressed'}; var $author$project$Login$PassEntered = function (a) { return {$: 'PassEntered', a: a}; }; var $author$project$Login$UserEntered = function (a) { return {$: 'UserEntered', a: a}; }; var $rtfeldman$elm_css$Css$auto = {alignItemsOrAuto: $rtfeldman$elm_css$Css$Structure$Compatible, cursor: $rtfeldman$elm_css$Css$Structure$Compatible, flexBasis: $rtfeldman$elm_css$Css$Structure$Compatible, intOrAuto: $rtfeldman$elm_css$Css$Structure$Compatible, justifyContentOrAuto: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrAuto: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrAutoOrCoverOrContain: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrNumberOrAutoOrNoneOrContent: $rtfeldman$elm_css$Css$Structure$Compatible, overflow: $rtfeldman$elm_css$Css$Structure$Compatible, pointerEvents: $rtfeldman$elm_css$Css$Structure$Compatible, tableLayout: $rtfeldman$elm_css$Css$Structure$Compatible, textRendering: $rtfeldman$elm_css$Css$Structure$Compatible, touchAction: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'auto'}; var $rtfeldman$elm_css$Css$center = $rtfeldman$elm_css$Css$prop1('center'); var $author$project$Login$fieldPadding = $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$paddingTop( $rtfeldman$elm_css$Css$px(10)), $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(10)) ])); var $rtfeldman$elm_css$Css$marginTop = $rtfeldman$elm_css$Css$prop1('margin-top'); var $rtfeldman$elm_css$Css$focus = $rtfeldman$elm_css$Css$pseudoClass('focus'); var $rtfeldman$elm_css$Html$Styled$input = $rtfeldman$elm_css$Html$Styled$node('input'); var $author$project$Styles$loginInputField = A2( $rtfeldman$elm_css$Html$Styled$styled, $rtfeldman$elm_css$Html$Styled$input, _List_fromArray( [ $rtfeldman$elm_css$Css$width( $rtfeldman$elm_css$Css$pct(100)), $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fg), $rtfeldman$elm_css$Css$border( $rtfeldman$elm_css$Css$px(0)), A3( $rtfeldman$elm_css$Css$borderBottom3, $rtfeldman$elm_css$Css$px(1), $rtfeldman$elm_css$Css$solid, $author$project$Styles$theme.bgLight), $rtfeldman$elm_css$Css$focus( _List_fromArray( [ A3( $rtfeldman$elm_css$Css$borderBottom3, $rtfeldman$elm_css$Css$px(2), $rtfeldman$elm_css$Css$solid, $author$project$Styles$theme.fg) ])) ])); var $rtfeldman$elm_css$Html$Styled$Attributes$placeholder = $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty('placeholder'); var $rtfeldman$elm_css$Html$Styled$Attributes$type_ = $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty('type'); var $rtfeldman$elm_css$Html$Styled$Attributes$value = $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty('value'); var $author$project$Login$viewInput = F4( function (t, p, v, toMsg) { return A2( $author$project$Styles$loginInputField, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$type_(t), $rtfeldman$elm_css$Html$Styled$Attributes$placeholder(p), $rtfeldman$elm_css$Html$Styled$Attributes$value(v), $rtfeldman$elm_css$Html$Styled$Events$onInput(toMsg) ]), _List_Nil); }); var $author$project$Login$viewStatus = function (ls) { switch (ls.$) { case 'NotLoggedIn': return ''; case 'InvalidLogin': return 'Invalid Login'; case 'LoggedIn': return 'Logged in!'; default: return 'Logging In ...'; } }; var $author$project$Login$view = function (model) { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$margin($rtfeldman$elm_css$Css$auto), $rtfeldman$elm_css$Css$marginTop( $rtfeldman$elm_css$Css$pct(10)), $rtfeldman$elm_css$Css$padding( $rtfeldman$elm_css$Css$px(20)), $rtfeldman$elm_css$Css$width( $rtfeldman$elm_css$Css$pct(30)) ])) ]), _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $author$project$Login$fieldPadding, $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [$author$project$Styles$bigHeading])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Login') ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [$author$project$Login$fieldPadding]), _List_fromArray( [ A4($author$project$Login$viewInput, 'text', 'Enter name here', model.username, $author$project$Login$UserEntered) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [$author$project$Login$fieldPadding]), _List_fromArray( [ A4($author$project$Login$viewInput, 'password', 'Password', model.password, $author$project$Login$PassEntered) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$center) ])), $author$project$Login$fieldPadding ]), _List_fromArray( [ A2( $author$project$Styles$furbyButton, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Login$LoginPressed) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Login') ])) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$center) ])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( $author$project$Login$viewStatus(model.loginStatus)) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [$author$project$Login$fieldPadding]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Don\'t have an account? '), A2( $rtfeldman$elm_css$Html$Styled$a, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$href('/signup') ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Register now!') ])) ])) ])); }; var $author$project$Product$AddRatingComment = function (a) { return {$: 'AddRatingComment', a: a}; }; var $author$project$Product$AddRatingPressed = {$: 'AddRatingPressed'}; var $author$project$Product$viewInput = F4( function (t, p, v, toMsg) { return A2( $rtfeldman$elm_css$Html$Styled$input, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$type_(t), $rtfeldman$elm_css$Html$Styled$Attributes$placeholder(p), $rtfeldman$elm_css$Html$Styled$Attributes$value(v), $rtfeldman$elm_css$Html$Styled$Events$onInput(toMsg) ]), _List_Nil); }); var $author$project$Product$AddToCartPressed = {$: 'AddToCartPressed'}; var $author$project$Product$viewProduct = function (p) { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$marginBottom( $rtfeldman$elm_css$Css$px(20)), $rtfeldman$elm_css$Css$padding( $rtfeldman$elm_css$Css$px(20)), $rtfeldman$elm_css$Css$width( $rtfeldman$elm_css$Css$pct(100)) ])) ]), _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left), $rtfeldman$elm_css$Css$width( $rtfeldman$elm_css$Css$pct(50)) ])) ]), _List_fromArray( [ A2( $author$project$Utils$modelViewer, _List_fromArray( [ $author$project$Utils$cameraControls, $author$project$Utils$autoRotate, $author$project$Utils$arSrc(p.src), $author$project$Utils$arIosSrc(p.iosSrc), $author$project$Utils$loading('eager'), $author$project$Utils$arModes('webxr') ]), _List_Nil) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left), $rtfeldman$elm_css$Css$width( $rtfeldman$elm_css$Css$pct(50)) ])) ]), _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $author$project$Styles$cardSecondaryText, $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(3)), $rtfeldman$elm_css$Css$fontVariant($rtfeldman$elm_css$Css$smallCaps) ])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( A2($elm$core$Maybe$withDefault, '', p.kind)) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $author$project$Styles$cardPrimaryText, $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(12)) ])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text(p.name) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $author$project$Styles$cardSupportingText, $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(6)) ])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( A2($elm$core$Maybe$withDefault, 'No description provided', p.description)) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$fontWeight($rtfeldman$elm_css$Css$bold), $rtfeldman$elm_css$Css$fontSize( $rtfeldman$elm_css$Css$px(14)), $author$project$Styles$money ])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( $elm$core$String$fromFloat(p.price)), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ A2( $author$project$Styles$furbyButton, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Product$AddToCartPressed) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Add To Cart') ])) ])) ])) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'clear', 'both') ]), _List_Nil) ])); }; var $elm$core$List$repeatHelp = F3( function (result, n, value) { repeatHelp: while (true) { if (n <= 0) { return result; } else { var $temp$result = A2($elm$core$List$cons, value, result), $temp$n = n - 1, $temp$value = value; result = $temp$result; n = $temp$n; value = $temp$value; continue repeatHelp; } } }); var $elm$core$List$repeat = F2( function (n, value) { return A3($elm$core$List$repeatHelp, _List_Nil, n, value); }); var $rtfeldman$elm_css$VirtualDom$Styled$unstyledNode = $rtfeldman$elm_css$VirtualDom$Styled$Unstyled; var $rtfeldman$elm_css$Html$Styled$fromUnstyled = $rtfeldman$elm_css$VirtualDom$Styled$unstyledNode; var $elm$svg$Svg$Attributes$class = _VirtualDom_attribute('class'); var $elm$svg$Svg$Attributes$fill = _VirtualDom_attribute('fill'); var $elm$svg$Svg$Attributes$height = _VirtualDom_attribute('height'); var $elm$svg$Svg$map = $elm$virtual_dom$VirtualDom$map; var $elm$svg$Svg$Attributes$stroke = _VirtualDom_attribute('stroke'); var $elm$svg$Svg$Attributes$strokeLinecap = _VirtualDom_attribute('stroke-linecap'); var $elm$svg$Svg$Attributes$strokeLinejoin = _VirtualDom_attribute('stroke-linejoin'); var $elm$svg$Svg$Attributes$strokeWidth = _VirtualDom_attribute('stroke-width'); var $elm$svg$Svg$trustedNode = _VirtualDom_nodeNS('http://www.w3.org/2000/svg'); var $elm$svg$Svg$svg = $elm$svg$Svg$trustedNode('svg'); var $elm$svg$Svg$Attributes$viewBox = _VirtualDom_attribute('viewBox'); var $elm$svg$Svg$Attributes$width = _VirtualDom_attribute('width'); var $1602$elm_feather$FeatherIcons$toHtml = F2( function (attributes, _v0) { var src = _v0.a.src; var attrs = _v0.a.attrs; var strSize = $elm$core$String$fromFloat(attrs.size); var baseAttributes = _List_fromArray( [ $elm$svg$Svg$Attributes$fill('none'), $elm$svg$Svg$Attributes$height( _Utils_ap(strSize, attrs.sizeUnit)), $elm$svg$Svg$Attributes$width( _Utils_ap(strSize, attrs.sizeUnit)), $elm$svg$Svg$Attributes$stroke('currentColor'), $elm$svg$Svg$Attributes$strokeLinecap('round'), $elm$svg$Svg$Attributes$strokeLinejoin('round'), $elm$svg$Svg$Attributes$strokeWidth( $elm$core$String$fromFloat(attrs.strokeWidth)), $elm$svg$Svg$Attributes$viewBox(attrs.viewBox) ]); var combinedAttributes = _Utils_ap( function () { var _v1 = attrs._class; if (_v1.$ === 'Just') { var c = _v1.a; return A2( $elm$core$List$cons, $elm$svg$Svg$Attributes$class(c), baseAttributes); } else { return baseAttributes; } }(), attributes); return A2( $elm$svg$Svg$svg, combinedAttributes, A2( $elm$core$List$map, $elm$svg$Svg$map($elm$core$Basics$never), src)); }); var $1602$elm_feather$FeatherIcons$Icon = function (a) { return {$: 'Icon', a: a}; }; var $1602$elm_feather$FeatherIcons$withSize = F2( function (size, _v0) { var attrs = _v0.a.attrs; var src = _v0.a.src; return $1602$elm_feather$FeatherIcons$Icon( { attrs: _Utils_update( attrs, {size: size}), src: src }); }); var $author$project$Icons$convert = A2( $elm$core$Basics$composeL, A2( $elm$core$Basics$composeL, $rtfeldman$elm_css$Html$Styled$fromUnstyled, $1602$elm_feather$FeatherIcons$toHtml(_List_Nil)), $1602$elm_feather$FeatherIcons$withSize(14)); var $1602$elm_feather$FeatherIcons$defaultAttributes = function (name) { return { _class: $elm$core$Maybe$Just('feather feather-' + name), size: 24, sizeUnit: '', strokeWidth: 2, viewBox: '0 0 24 24' }; }; var $1602$elm_feather$FeatherIcons$makeBuilder = F2( function (name, src) { return $1602$elm_feather$FeatherIcons$Icon( { attrs: $1602$elm_feather$FeatherIcons$defaultAttributes(name), src: src }); }); var $elm$svg$Svg$Attributes$points = _VirtualDom_attribute('points'); var $elm$svg$Svg$polygon = $elm$svg$Svg$trustedNode('polygon'); var $1602$elm_feather$FeatherIcons$xmlns = function (s) { return A2( $elm$virtual_dom$VirtualDom$property, 'xmlns', $elm$json$Json$Encode$string(s)); }; var $1602$elm_feather$FeatherIcons$star = A2( $1602$elm_feather$FeatherIcons$makeBuilder, 'star', _List_fromArray( [ A2( $elm$svg$Svg$svg, _List_fromArray( [ $1602$elm_feather$FeatherIcons$xmlns('http://www.w3.org/2000/svg'), $elm$svg$Svg$Attributes$width('24'), $elm$svg$Svg$Attributes$height('24'), $elm$svg$Svg$Attributes$viewBox('0 0 24 24'), $elm$svg$Svg$Attributes$fill('none'), $elm$svg$Svg$Attributes$stroke('currentColor'), $elm$svg$Svg$Attributes$strokeWidth('2'), $elm$svg$Svg$Attributes$strokeLinecap('round'), $elm$svg$Svg$Attributes$strokeLinejoin('round'), $elm$svg$Svg$Attributes$class('feather feather-star') ]), _List_fromArray( [ A2( $elm$svg$Svg$polygon, _List_fromArray( [ $elm$svg$Svg$Attributes$points('12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2') ]), _List_Nil) ])) ])); var $author$project$Icons$starIcon = $author$project$Icons$convert($1602$elm_feather$FeatherIcons$star); var $author$project$Product$viewStarRating = function (i) { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, A2($elm$core$List$repeat, i, $author$project$Icons$starIcon)); }; var $author$project$Product$viewRating = function (r) { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ A3( $rtfeldman$elm_css$Css$border3, $rtfeldman$elm_css$Css$px(1), $rtfeldman$elm_css$Css$solid, $author$project$Styles$theme.primary), $rtfeldman$elm_css$Css$borderRadius( $rtfeldman$elm_css$Css$px(4)), $rtfeldman$elm_css$Css$marginBottom( $rtfeldman$elm_css$Css$px(20)), $rtfeldman$elm_css$Css$padding( $rtfeldman$elm_css$Css$px(20)) ])) ]), _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$fontSize( $rtfeldman$elm_css$Css$px(16)), $rtfeldman$elm_css$Css$fontWeight($rtfeldman$elm_css$Css$bold), $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(3)) ])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text(r.customerName) ])), $author$project$Product$viewStarRating(r.stars), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $author$project$Styles$cardSecondaryText, $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(12)) ])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Reviewed on ' + r.commentDate) ])), (!_Utils_eq(r.commentText, $elm$core$Maybe$Nothing)) ? A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [$author$project$Styles$cardSupportingText])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( A2($elm$core$Maybe$withDefault, '', r.commentText)) ])) : $rtfeldman$elm_css$Html$Styled$text('') ])); }; var $author$project$Product$AddRatingStars = function (a) { return {$: 'AddRatingStars', a: a}; }; var $author$project$Product$viewStars = A2( $rtfeldman$elm_css$Html$Styled$ul, _List_Nil, A2( $elm$core$List$map, function (i) { return A2( $rtfeldman$elm_css$Html$Styled$button, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onClick( $author$project$Product$AddRatingStars(i)) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( $elm$core$String$fromInt(i)) ])); }, _List_fromArray( [1, 2, 3, 4, 5]))); var $author$project$Product$viewStatus = function (s) { switch (s.$) { case 'Loading': return 'Loading'; case 'Loaded': return 'Ready!'; default: return 'Not loaded ...'; } }; var $author$project$Product$view = function (model) { var _v0 = model.pageStatus; if (_v0.$ === 'Loading') { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text( $author$project$Product$viewStatus($author$project$Product$Loading)) ])); } else { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$width( $rtfeldman$elm_css$Css$pct(60)), $rtfeldman$elm_css$Css$margin($rtfeldman$elm_css$Css$auto) ])) ]), _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $author$project$Product$viewProduct(model.listing) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [$author$project$Styles$cardPrimaryText])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('User Reviews') ])), _Utils_eq(model.ratings, _List_Nil) ? $rtfeldman$elm_css$Html$Styled$text('Be the first to add a review.') : A2( $rtfeldman$elm_css$Html$Styled$ul, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$padding( $rtfeldman$elm_css$Css$px(0)), $rtfeldman$elm_css$Css$listStyle($rtfeldman$elm_css$Css$none) ])) ]), A2($elm$core$List$map, $author$project$Product$viewRating, model.ratings)), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Add Rating: ') ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $author$project$Product$viewStars, A4($author$project$Product$viewInput, 'text', 'Enter Comment Text', model.ratingText, $author$project$Product$AddRatingComment), A2( $rtfeldman$elm_css$Html$Styled$button, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Product$AddRatingPressed) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Submit Rating') ])) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$a, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$href('/catalog') ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Back to catalog') ])) ])) ])); } }; var $author$project$Signup$AddressEntered = function (a) { return {$: 'AddressEntered', a: a}; }; var $author$project$Signup$CreatePressed = {$: 'CreatePressed'}; var $author$project$Signup$EmailEntered = function (a) { return {$: 'EmailEntered', a: a}; }; var $author$project$Signup$PassEntered = function (a) { return {$: 'PassEntered', a: a}; }; var $author$project$Signup$PhoneEntered = function (a) { return {$: 'PhoneEntered', a: a}; }; var $author$project$Signup$UserEntered = function (a) { return {$: 'UserEntered', a: a}; }; var $author$project$Signup$fieldPadding = $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$paddingTop( $rtfeldman$elm_css$Css$px(10)), $rtfeldman$elm_css$Css$paddingBottom( $rtfeldman$elm_css$Css$px(10)) ])); var $author$project$Signup$viewInput = F4( function (t, p, v, toMsg) { return A2( $author$project$Styles$loginInputField, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$type_(t), $rtfeldman$elm_css$Html$Styled$Attributes$placeholder(p), $rtfeldman$elm_css$Html$Styled$Attributes$value(v), $rtfeldman$elm_css$Html$Styled$Events$onInput(toMsg) ]), _List_Nil); }); var $author$project$Signup$viewStatus = function (s) { switch (s.$) { case 'UsernameTaken': return 'This username is taken!'; case 'InvalidPhone': return 'Invalid phone number!'; case 'InvalidEmail': return 'Invalid email address!'; case 'CreatedSuccessfully': return 'User created successfully'; case 'CreatingUser': return 'Creating user ...'; default: return ''; } }; var $author$project$Signup$view = function (model) { return A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$margin($rtfeldman$elm_css$Css$auto), $rtfeldman$elm_css$Css$marginTop( $rtfeldman$elm_css$Css$pct(10)), $rtfeldman$elm_css$Css$padding( $rtfeldman$elm_css$Css$px(20)), $rtfeldman$elm_css$Css$width( $rtfeldman$elm_css$Css$pct(30)) ])) ]), _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $author$project$Signup$fieldPadding, $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [$author$project$Styles$bigHeading])) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Signup') ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [$author$project$Signup$fieldPadding]), _List_fromArray( [ A4($author$project$Signup$viewInput, 'text', 'Username', model.username, $author$project$Signup$UserEntered) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [$author$project$Signup$fieldPadding]), _List_fromArray( [ A4($author$project$Signup$viewInput, 'password', 'Password', model.password, $author$project$Signup$PassEntered) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [$author$project$Signup$fieldPadding]), _List_fromArray( [ A4($author$project$Signup$viewInput, 'text', 'Email', model.emailId, $author$project$Signup$EmailEntered) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [$author$project$Signup$fieldPadding]), _List_fromArray( [ A4($author$project$Signup$viewInput, 'text', 'Phone Number', model.phoneNumber, $author$project$Signup$PhoneEntered) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [$author$project$Signup$fieldPadding]), _List_fromArray( [ A4( $author$project$Signup$viewInput, 'text', 'Shipping Address', A2($elm$core$Maybe$withDefault, '', model.address), $author$project$Signup$AddressEntered) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [ $author$project$Signup$fieldPadding, $rtfeldman$elm_css$Html$Styled$Attributes$css( _List_fromArray( [ $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$center) ])) ]), _List_fromArray( [ A2( $author$project$Styles$furbyButton, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Signup$CreatePressed) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Create Account') ])) ])), A2( $rtfeldman$elm_css$Html$Styled$div, _List_fromArray( [$author$project$Signup$fieldPadding]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Already have a account? '), A2( $rtfeldman$elm_css$Html$Styled$a, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$href('/login') ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Login >') ])) ])), $rtfeldman$elm_css$Html$Styled$text( $author$project$Signup$viewStatus(model.status)) ])); }; var $author$project$Main$view = function (model) { var _v0 = model.location; switch (_v0.$) { case 'HomePage': return { body: $elm$core$List$singleton( $rtfeldman$elm_css$Html$Styled$toUnstyled( A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$ul, _List_Nil, A2( $elm$core$List$map, function (l) { return A2( $rtfeldman$elm_css$Html$Styled$li, _List_Nil, _List_fromArray( [ A2( $rtfeldman$elm_css$Html$Styled$a, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$href(l) ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text(l) ])) ])); }, _List_fromArray( ['/login', '/catalog', '/cart']))) ])))), title: 'Login' }; case 'LoginPage': return { body: $elm$core$List$singleton( $rtfeldman$elm_css$Html$Styled$toUnstyled( A2( $rtfeldman$elm_css$Html$Styled$map, $author$project$Main$LoginMessage, $author$project$Login$view(model.loginModel)))), title: 'Login' }; case 'SignupPage': return { body: $elm$core$List$singleton( $rtfeldman$elm_css$Html$Styled$toUnstyled( A2( $rtfeldman$elm_css$Html$Styled$map, $author$project$Main$SignupMessage, $author$project$Signup$view(model.signupModel)))), title: 'Signup' }; case 'NotFoundPage': return { body: $elm$core$List$singleton( $rtfeldman$elm_css$Html$Styled$toUnstyled( A2( $rtfeldman$elm_css$Html$Styled$div, _List_Nil, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('404 - Not Found'), A2( $rtfeldman$elm_css$Html$Styled$a, _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$Attributes$href('/') ]), _List_fromArray( [ $rtfeldman$elm_css$Html$Styled$text('Go back >') ])) ])))), title: '404 - Not Found' }; case 'CatalogPage': return { body: A2( $author$project$Main$pageWrap, model, A2( $rtfeldman$elm_css$Html$Styled$map, $author$project$Main$CatalogMessage, $author$project$Catalog$view(model.catalogModel))), title: 'Catalog' }; case 'CartPage': return { body: A2( $author$project$Main$pageWrap, model, A2( $rtfeldman$elm_css$Html$Styled$map, $author$project$Main$CartMessage, $author$project$Cart$view(model.cartModel))), title: 'Cart' }; case 'CheckoutPage': return { body: A2( $author$project$Main$pageWrap, model, A2( $rtfeldman$elm_css$Html$Styled$map, $author$project$Main$CheckoutMessage, $author$project$Checkout$view(model.checkoutModel))), title: 'Checkout' }; default: var item = _v0.a; return { body: A2( $author$project$Main$pageWrap, model, A2( $rtfeldman$elm_css$Html$Styled$map, $author$project$Main$ProductMessage, $author$project$Product$view(model.productModel))), title: 'Product ' + $elm$core$String$fromInt(item) }; } }; var $author$project$Main$main = $elm$browser$Browser$application( {init: $author$project$Main$init, onUrlChange: $author$project$Main$UrlChanged, onUrlRequest: $author$project$Main$LinkClicked, subscriptions: $author$project$Main$subscriptions, update: $author$project$Main$update, view: $author$project$Main$view}); _Platform_export({'Main':{'init':$author$project$Main$main( $elm$json$Json$Decode$succeed(_Utils_Tuple0))(0)}});}(this));