aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend/index.html12764
-rw-r--r--frontend/main.js12732
2 files changed, 0 insertions, 25496 deletions
diff --git a/frontend/index.html b/frontend/index.html
deleted file mode 100644
index ffc3920..0000000
--- a/frontend/index.html
+++ /dev/null
@@ -1,12764 +0,0 @@
1<!DOCTYPE HTML>
2<html>
3<head>
4 <meta charset="UTF-8">
5 <title>Main</title>
6 <style>body { padding: 0; margin: 0; }</style>
7</head>
8
9<body>
10
11<pre id="elm"></pre>
12
13<script>
14try {
15(function(scope){
16'use strict';
17
18function F(arity, fun, wrapper) {
19 wrapper.a = arity;
20 wrapper.f = fun;
21 return wrapper;
22}
23
24function F2(fun) {
25 return F(2, fun, function(a) { return function(b) { return fun(a,b); }; })
26}
27function F3(fun) {
28 return F(3, fun, function(a) {
29 return function(b) { return function(c) { return fun(a, b, c); }; };
30 });
31}
32function F4(fun) {
33 return F(4, fun, function(a) { return function(b) { return function(c) {
34 return function(d) { return fun(a, b, c, d); }; }; };
35 });
36}
37function F5(fun) {
38 return F(5, fun, function(a) { return function(b) { return function(c) {
39 return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };
40 });
41}
42function F6(fun) {
43 return F(6, fun, function(a) { return function(b) { return function(c) {
44 return function(d) { return function(e) { return function(f) {
45 return fun(a, b, c, d, e, f); }; }; }; }; };
46 });
47}
48function F7(fun) {
49 return F(7, fun, function(a) { return function(b) { return function(c) {
50 return function(d) { return function(e) { return function(f) {
51 return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };
52 });
53}
54function F8(fun) {
55 return F(8, fun, function(a) { return function(b) { return function(c) {
56 return function(d) { return function(e) { return function(f) {
57 return function(g) { return function(h) {
58 return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };
59 });
60}
61function F9(fun) {
62 return F(9, fun, function(a) { return function(b) { return function(c) {
63 return function(d) { return function(e) { return function(f) {
64 return function(g) { return function(h) { return function(i) {
65 return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };
66 });
67}
68
69function A2(fun, a, b) {
70 return fun.a === 2 ? fun.f(a, b) : fun(a)(b);
71}
72function A3(fun, a, b, c) {
73 return fun.a === 3 ? fun.f(a, b, c) : fun(a)(b)(c);
74}
75function A4(fun, a, b, c, d) {
76 return fun.a === 4 ? fun.f(a, b, c, d) : fun(a)(b)(c)(d);
77}
78function A5(fun, a, b, c, d, e) {
79 return fun.a === 5 ? fun.f(a, b, c, d, e) : fun(a)(b)(c)(d)(e);
80}
81function A6(fun, a, b, c, d, e, f) {
82 return fun.a === 6 ? fun.f(a, b, c, d, e, f) : fun(a)(b)(c)(d)(e)(f);
83}
84function A7(fun, a, b, c, d, e, f, g) {
85 return fun.a === 7 ? fun.f(a, b, c, d, e, f, g) : fun(a)(b)(c)(d)(e)(f)(g);
86}
87function A8(fun, a, b, c, d, e, f, g, h) {
88 return fun.a === 8 ? fun.f(a, b, c, d, e, f, g, h) : fun(a)(b)(c)(d)(e)(f)(g)(h);
89}
90function A9(fun, a, b, c, d, e, f, g, h, i) {
91 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);
92}
93
94console.warn('Compiled in DEV mode. Follow the advice at https://elm-lang.org/0.19.1/optimize for better performance and smaller assets.');
95
96
97// EQUALITY
98
99function _Utils_eq(x, y)
100{
101 for (
102 var pair, stack = [], isEqual = _Utils_eqHelp(x, y, 0, stack);
103 isEqual && (pair = stack.pop());
104 isEqual = _Utils_eqHelp(pair.a, pair.b, 0, stack)
105 )
106 {}
107
108 return isEqual;
109}
110
111function _Utils_eqHelp(x, y, depth, stack)
112{
113 if (x === y)
114 {
115 return true;
116 }
117
118 if (typeof x !== 'object' || x === null || y === null)
119 {
120 typeof x === 'function' && _Debug_crash(5);
121 return false;
122 }
123
124 if (depth > 100)
125 {
126 stack.push(_Utils_Tuple2(x,y));
127 return true;
128 }
129
130 /**/
131 if (x.$ === 'Set_elm_builtin')
132 {
133 x = $elm$core$Set$toList(x);
134 y = $elm$core$Set$toList(y);
135 }
136 if (x.$ === 'RBNode_elm_builtin' || x.$ === 'RBEmpty_elm_builtin')
137 {
138 x = $elm$core$Dict$toList(x);
139 y = $elm$core$Dict$toList(y);
140 }
141 //*/
142
143 /**_UNUSED/
144 if (x.$ < 0)
145 {
146 x = $elm$core$Dict$toList(x);
147 y = $elm$core$Dict$toList(y);
148 }
149 //*/
150
151 for (var key in x)
152 {
153 if (!_Utils_eqHelp(x[key], y[key], depth + 1, stack))
154 {
155 return false;
156 }
157 }
158 return true;
159}
160
161var _Utils_equal = F2(_Utils_eq);
162var _Utils_notEqual = F2(function(a, b) { return !_Utils_eq(a,b); });
163
164
165
166// COMPARISONS
167
168// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on
169// the particular integer values assigned to LT, EQ, and GT.
170
171function _Utils_cmp(x, y, ord)
172{
173 if (typeof x !== 'object')
174 {
175 return x === y ? /*EQ*/ 0 : x < y ? /*LT*/ -1 : /*GT*/ 1;
176 }
177
178 /**/
179 if (x instanceof String)
180 {
181 var a = x.valueOf();
182 var b = y.valueOf();
183 return a === b ? 0 : a < b ? -1 : 1;
184 }
185 //*/
186
187 /**_UNUSED/
188 if (typeof x.$ === 'undefined')
189 //*/
190 /**/
191 if (x.$[0] === '#')
192 //*/
193 {
194 return (ord = _Utils_cmp(x.a, y.a))
195 ? ord
196 : (ord = _Utils_cmp(x.b, y.b))
197 ? ord
198 : _Utils_cmp(x.c, y.c);
199 }
200
201 // traverse conses until end of a list or a mismatch
202 for (; x.b && y.b && !(ord = _Utils_cmp(x.a, y.a)); x = x.b, y = y.b) {} // WHILE_CONSES
203 return ord || (x.b ? /*GT*/ 1 : y.b ? /*LT*/ -1 : /*EQ*/ 0);
204}
205
206var _Utils_lt = F2(function(a, b) { return _Utils_cmp(a, b) < 0; });
207var _Utils_le = F2(function(a, b) { return _Utils_cmp(a, b) < 1; });
208var _Utils_gt = F2(function(a, b) { return _Utils_cmp(a, b) > 0; });
209var _Utils_ge = F2(function(a, b) { return _Utils_cmp(a, b) >= 0; });
210
211var _Utils_compare = F2(function(x, y)
212{
213 var n = _Utils_cmp(x, y);
214 return n < 0 ? $elm$core$Basics$LT : n ? $elm$core$Basics$GT : $elm$core$Basics$EQ;
215});
216
217
218// COMMON VALUES
219
220var _Utils_Tuple0_UNUSED = 0;
221var _Utils_Tuple0 = { $: '#0' };
222
223function _Utils_Tuple2_UNUSED(a, b) { return { a: a, b: b }; }
224function _Utils_Tuple2(a, b) { return { $: '#2', a: a, b: b }; }
225
226function _Utils_Tuple3_UNUSED(a, b, c) { return { a: a, b: b, c: c }; }
227function _Utils_Tuple3(a, b, c) { return { $: '#3', a: a, b: b, c: c }; }
228
229function _Utils_chr_UNUSED(c) { return c; }
230function _Utils_chr(c) { return new String(c); }
231
232
233// RECORDS
234
235function _Utils_update(oldRecord, updatedFields)
236{
237 var newRecord = {};
238
239 for (var key in oldRecord)
240 {
241 newRecord[key] = oldRecord[key];
242 }
243
244 for (var key in updatedFields)
245 {
246 newRecord[key] = updatedFields[key];
247 }
248
249 return newRecord;
250}
251
252
253// APPEND
254
255var _Utils_append = F2(_Utils_ap);
256
257function _Utils_ap(xs, ys)
258{
259 // append Strings
260 if (typeof xs === 'string')
261 {
262 return xs + ys;
263 }
264
265 // append Lists
266 if (!xs.b)
267 {
268 return ys;
269 }
270 var root = _List_Cons(xs.a, ys);
271 xs = xs.b
272 for (var curr = root; xs.b; xs = xs.b) // WHILE_CONS
273 {
274 curr = curr.b = _List_Cons(xs.a, ys);
275 }
276 return root;
277}
278
279
280
281var _List_Nil_UNUSED = { $: 0 };
282var _List_Nil = { $: '[]' };
283
284function _List_Cons_UNUSED(hd, tl) { return { $: 1, a: hd, b: tl }; }
285function _List_Cons(hd, tl) { return { $: '::', a: hd, b: tl }; }
286
287
288var _List_cons = F2(_List_Cons);
289
290function _List_fromArray(arr)
291{
292 var out = _List_Nil;
293 for (var i = arr.length; i--; )
294 {
295 out = _List_Cons(arr[i], out);
296 }
297 return out;
298}
299
300function _List_toArray(xs)
301{
302 for (var out = []; xs.b; xs = xs.b) // WHILE_CONS
303 {
304 out.push(xs.a);
305 }
306 return out;
307}
308
309var _List_map2 = F3(function(f, xs, ys)
310{
311 for (var arr = []; xs.b && ys.b; xs = xs.b, ys = ys.b) // WHILE_CONSES
312 {
313 arr.push(A2(f, xs.a, ys.a));
314 }
315 return _List_fromArray(arr);
316});
317
318var _List_map3 = F4(function(f, xs, ys, zs)
319{
320 for (var arr = []; xs.b && ys.b && zs.b; xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
321 {
322 arr.push(A3(f, xs.a, ys.a, zs.a));
323 }
324 return _List_fromArray(arr);
325});
326
327var _List_map4 = F5(function(f, ws, xs, ys, zs)
328{
329 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
330 {
331 arr.push(A4(f, ws.a, xs.a, ys.a, zs.a));
332 }
333 return _List_fromArray(arr);
334});
335
336var _List_map5 = F6(function(f, vs, ws, xs, ys, zs)
337{
338 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
339 {
340 arr.push(A5(f, vs.a, ws.a, xs.a, ys.a, zs.a));
341 }
342 return _List_fromArray(arr);
343});
344
345var _List_sortBy = F2(function(f, xs)
346{
347 return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
348 return _Utils_cmp(f(a), f(b));
349 }));
350});
351
352var _List_sortWith = F2(function(f, xs)
353{
354 return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
355 var ord = A2(f, a, b);
356 return ord === $elm$core$Basics$EQ ? 0 : ord === $elm$core$Basics$LT ? -1 : 1;
357 }));
358});
359
360
361
362var _JsArray_empty = [];
363
364function _JsArray_singleton(value)
365{
366 return [value];
367}
368
369function _JsArray_length(array)
370{
371 return array.length;
372}
373
374var _JsArray_initialize = F3(function(size, offset, func)
375{
376 var result = new Array(size);
377
378 for (var i = 0; i < size; i++)
379 {
380 result[i] = func(offset + i);
381 }
382
383 return result;
384});
385
386var _JsArray_initializeFromList = F2(function (max, ls)
387{
388 var result = new Array(max);
389
390 for (var i = 0; i < max && ls.b; i++)
391 {
392 result[i] = ls.a;
393 ls = ls.b;
394 }
395
396 result.length = i;
397 return _Utils_Tuple2(result, ls);
398});
399
400var _JsArray_unsafeGet = F2(function(index, array)
401{
402 return array[index];
403});
404
405var _JsArray_unsafeSet = F3(function(index, value, array)
406{
407 var length = array.length;
408 var result = new Array(length);
409
410 for (var i = 0; i < length; i++)
411 {
412 result[i] = array[i];
413 }
414
415 result[index] = value;
416 return result;
417});
418
419var _JsArray_push = F2(function(value, array)
420{
421 var length = array.length;
422 var result = new Array(length + 1);
423
424 for (var i = 0; i < length; i++)
425 {
426 result[i] = array[i];
427 }
428
429 result[length] = value;
430 return result;
431});
432
433var _JsArray_foldl = F3(function(func, acc, array)
434{
435 var length = array.length;
436
437 for (var i = 0; i < length; i++)
438 {
439 acc = A2(func, array[i], acc);
440 }
441
442 return acc;
443});
444
445var _JsArray_foldr = F3(function(func, acc, array)
446{
447 for (var i = array.length - 1; i >= 0; i--)
448 {
449 acc = A2(func, array[i], acc);
450 }
451
452 return acc;
453});
454
455var _JsArray_map = F2(function(func, array)
456{
457 var length = array.length;
458 var result = new Array(length);
459
460 for (var i = 0; i < length; i++)
461 {
462 result[i] = func(array[i]);
463 }
464
465 return result;
466});
467
468var _JsArray_indexedMap = F3(function(func, offset, array)
469{
470 var length = array.length;
471 var result = new Array(length);
472
473 for (var i = 0; i < length; i++)
474 {
475 result[i] = A2(func, offset + i, array[i]);
476 }
477
478 return result;
479});
480
481var _JsArray_slice = F3(function(from, to, array)
482{
483 return array.slice(from, to);
484});
485
486var _JsArray_appendN = F3(function(n, dest, source)
487{
488 var destLen = dest.length;
489 var itemsToCopy = n - destLen;
490
491 if (itemsToCopy > source.length)
492 {
493 itemsToCopy = source.length;
494 }
495
496 var size = destLen + itemsToCopy;
497 var result = new Array(size);
498
499 for (var i = 0; i < destLen; i++)
500 {
501 result[i] = dest[i];
502 }
503
504 for (var i = 0; i < itemsToCopy; i++)
505 {
506 result[i + destLen] = source[i];
507 }
508
509 return result;
510});
511
512
513
514// LOG
515
516var _Debug_log_UNUSED = F2(function(tag, value)
517{
518 return value;
519});
520
521var _Debug_log = F2(function(tag, value)
522{
523 console.log(tag + ': ' + _Debug_toString(value));
524 return value;
525});
526
527
528// TODOS
529
530function _Debug_todo(moduleName, region)
531{
532 return function(message) {
533 _Debug_crash(8, moduleName, region, message);
534 };
535}
536
537function _Debug_todoCase(moduleName, region, value)
538{
539 return function(message) {
540 _Debug_crash(9, moduleName, region, value, message);
541 };
542}
543
544
545// TO STRING
546
547function _Debug_toString_UNUSED(value)
548{
549 return '<internals>';
550}
551
552function _Debug_toString(value)
553{
554 return _Debug_toAnsiString(false, value);
555}
556
557function _Debug_toAnsiString(ansi, value)
558{
559 if (typeof value === 'function')
560 {
561 return _Debug_internalColor(ansi, '<function>');
562 }
563
564 if (typeof value === 'boolean')
565 {
566 return _Debug_ctorColor(ansi, value ? 'True' : 'False');
567 }
568
569 if (typeof value === 'number')
570 {
571 return _Debug_numberColor(ansi, value + '');
572 }
573
574 if (value instanceof String)
575 {
576 return _Debug_charColor(ansi, "'" + _Debug_addSlashes(value, true) + "'");
577 }
578
579 if (typeof value === 'string')
580 {
581 return _Debug_stringColor(ansi, '"' + _Debug_addSlashes(value, false) + '"');
582 }
583
584 if (typeof value === 'object' && '$' in value)
585 {
586 var tag = value.$;
587
588 if (typeof tag === 'number')
589 {
590 return _Debug_internalColor(ansi, '<internals>');
591 }
592
593 if (tag[0] === '#')
594 {
595 var output = [];
596 for (var k in value)
597 {
598 if (k === '$') continue;
599 output.push(_Debug_toAnsiString(ansi, value[k]));
600 }
601 return '(' + output.join(',') + ')';
602 }
603
604 if (tag === 'Set_elm_builtin')
605 {
606 return _Debug_ctorColor(ansi, 'Set')
607 + _Debug_fadeColor(ansi, '.fromList') + ' '
608 + _Debug_toAnsiString(ansi, $elm$core$Set$toList(value));
609 }
610
611 if (tag === 'RBNode_elm_builtin' || tag === 'RBEmpty_elm_builtin')
612 {
613 return _Debug_ctorColor(ansi, 'Dict')
614 + _Debug_fadeColor(ansi, '.fromList') + ' '
615 + _Debug_toAnsiString(ansi, $elm$core$Dict$toList(value));
616 }
617
618 if (tag === 'Array_elm_builtin')
619 {
620 return _Debug_ctorColor(ansi, 'Array')
621 + _Debug_fadeColor(ansi, '.fromList') + ' '
622 + _Debug_toAnsiString(ansi, $elm$core$Array$toList(value));
623 }
624
625 if (tag === '::' || tag === '[]')
626 {
627 var output = '[';
628
629 value.b && (output += _Debug_toAnsiString(ansi, value.a), value = value.b)
630
631 for (; value.b; value = value.b) // WHILE_CONS
632 {
633 output += ',' + _Debug_toAnsiString(ansi, value.a);
634 }
635 return output + ']';
636 }
637
638 var output = '';
639 for (var i in value)
640 {
641 if (i === '$') continue;
642 var str = _Debug_toAnsiString(ansi, value[i]);
643 var c0 = str[0];
644 var parenless = c0 === '{' || c0 === '(' || c0 === '[' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0;
645 output += ' ' + (parenless ? str : '(' + str + ')');
646 }
647 return _Debug_ctorColor(ansi, tag) + output;
648 }
649
650 if (typeof DataView === 'function' && value instanceof DataView)
651 {
652 return _Debug_stringColor(ansi, '<' + value.byteLength + ' bytes>');
653 }
654
655 if (typeof File !== 'undefined' && value instanceof File)
656 {
657 return _Debug_internalColor(ansi, '<' + value.name + '>');
658 }
659
660 if (typeof value === 'object')
661 {
662 var output = [];
663 for (var key in value)
664 {
665 var field = key[0] === '_' ? key.slice(1) : key;
666 output.push(_Debug_fadeColor(ansi, field) + ' = ' + _Debug_toAnsiString(ansi, value[key]));
667 }
668 if (output.length === 0)
669 {
670 return '{}';
671 }
672 return '{ ' + output.join(', ') + ' }';
673 }
674
675 return _Debug_internalColor(ansi, '<internals>');
676}
677
678function _Debug_addSlashes(str, isChar)
679{
680 var s = str
681 .replace(/\\/g, '\\\\')
682 .replace(/\n/g, '\\n')
683 .replace(/\t/g, '\\t')
684 .replace(/\r/g, '\\r')
685 .replace(/\v/g, '\\v')
686 .replace(/\0/g, '\\0');
687
688 if (isChar)
689 {
690 return s.replace(/\'/g, '\\\'');
691 }
692 else
693 {
694 return s.replace(/\"/g, '\\"');
695 }
696}
697
698function _Debug_ctorColor(ansi, string)
699{
700 return ansi ? '\x1b[96m' + string + '\x1b[0m' : string;
701}
702
703function _Debug_numberColor(ansi, string)
704{
705 return ansi ? '\x1b[95m' + string + '\x1b[0m' : string;
706}
707
708function _Debug_stringColor(ansi, string)
709{
710 return ansi ? '\x1b[93m' + string + '\x1b[0m' : string;
711}
712
713function _Debug_charColor(ansi, string)
714{
715 return ansi ? '\x1b[92m' + string + '\x1b[0m' : string;
716}
717
718function _Debug_fadeColor(ansi, string)
719{
720 return ansi ? '\x1b[37m' + string + '\x1b[0m' : string;
721}
722
723function _Debug_internalColor(ansi, string)
724{
725 return ansi ? '\x1b[36m' + string + '\x1b[0m' : string;
726}
727
728function _Debug_toHexDigit(n)
729{
730 return String.fromCharCode(n < 10 ? 48 + n : 55 + n);
731}
732
733
734// CRASH
735
736
737function _Debug_crash_UNUSED(identifier)
738{
739 throw new Error('https://github.com/elm/core/blob/1.0.0/hints/' + identifier + '.md');
740}
741
742
743function _Debug_crash(identifier, fact1, fact2, fact3, fact4)
744{
745 switch(identifier)
746 {
747 case 0:
748 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.');
749
750 case 1:
751 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.');
752
753 case 2:
754 var jsonErrorString = fact1;
755 throw new Error('Problem with the flags given to your Elm program on initialization.\n\n' + jsonErrorString);
756
757 case 3:
758 var portName = fact1;
759 throw new Error('There can only be one port named `' + portName + '`, but your program has multiple.');
760
761 case 4:
762 var portName = fact1;
763 var problem = fact2;
764 throw new Error('Trying to send an unexpected type of value through port `' + portName + '`:\n' + problem);
765
766 case 5:
767 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.');
768
769 case 6:
770 var moduleName = fact1;
771 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!');
772
773 case 8:
774 var moduleName = fact1;
775 var region = fact2;
776 var message = fact3;
777 throw new Error('TODO in module `' + moduleName + '` ' + _Debug_regionToString(region) + '\n\n' + message);
778
779 case 9:
780 var moduleName = fact1;
781 var region = fact2;
782 var value = fact3;
783 var message = fact4;
784 throw new Error(
785 'TODO in module `' + moduleName + '` from the `case` expression '
786 + _Debug_regionToString(region) + '\n\nIt received the following value:\n\n '
787 + _Debug_toString(value).replace('\n', '\n ')
788 + '\n\nBut the branch that handles it says:\n\n ' + message.replace('\n', '\n ')
789 );
790
791 case 10:
792 throw new Error('Bug in https://github.com/elm/virtual-dom/issues');
793
794 case 11:
795 throw new Error('Cannot perform mod 0. Division by zero error.');
796 }
797}
798
799function _Debug_regionToString(region)
800{
801 if (region.start.line === region.end.line)
802 {
803 return 'on line ' + region.start.line;
804 }
805 return 'on lines ' + region.start.line + ' through ' + region.end.line;
806}
807
808
809
810// MATH
811
812var _Basics_add = F2(function(a, b) { return a + b; });
813var _Basics_sub = F2(function(a, b) { return a - b; });
814var _Basics_mul = F2(function(a, b) { return a * b; });
815var _Basics_fdiv = F2(function(a, b) { return a / b; });
816var _Basics_idiv = F2(function(a, b) { return (a / b) | 0; });
817var _Basics_pow = F2(Math.pow);
818
819var _Basics_remainderBy = F2(function(b, a) { return a % b; });
820
821// https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
822var _Basics_modBy = F2(function(modulus, x)
823{
824 var answer = x % modulus;
825 return modulus === 0
826 ? _Debug_crash(11)
827 :
828 ((answer > 0 && modulus < 0) || (answer < 0 && modulus > 0))
829 ? answer + modulus
830 : answer;
831});
832
833
834// TRIGONOMETRY
835
836var _Basics_pi = Math.PI;
837var _Basics_e = Math.E;
838var _Basics_cos = Math.cos;
839var _Basics_sin = Math.sin;
840var _Basics_tan = Math.tan;
841var _Basics_acos = Math.acos;
842var _Basics_asin = Math.asin;
843var _Basics_atan = Math.atan;
844var _Basics_atan2 = F2(Math.atan2);
845
846
847// MORE MATH
848
849function _Basics_toFloat(x) { return x; }
850function _Basics_truncate(n) { return n | 0; }
851function _Basics_isInfinite(n) { return n === Infinity || n === -Infinity; }
852
853var _Basics_ceiling = Math.ceil;
854var _Basics_floor = Math.floor;
855var _Basics_round = Math.round;
856var _Basics_sqrt = Math.sqrt;
857var _Basics_log = Math.log;
858var _Basics_isNaN = isNaN;
859
860
861// BOOLEANS
862
863function _Basics_not(bool) { return !bool; }
864var _Basics_and = F2(function(a, b) { return a && b; });
865var _Basics_or = F2(function(a, b) { return a || b; });
866var _Basics_xor = F2(function(a, b) { return a !== b; });
867
868
869
870var _String_cons = F2(function(chr, str)
871{
872 return chr + str;
873});
874
875function _String_uncons(string)
876{
877 var word = string.charCodeAt(0);
878 return !isNaN(word)
879 ? $elm$core$Maybe$Just(
880 0xD800 <= word && word <= 0xDBFF
881 ? _Utils_Tuple2(_Utils_chr(string[0] + string[1]), string.slice(2))
882 : _Utils_Tuple2(_Utils_chr(string[0]), string.slice(1))
883 )
884 : $elm$core$Maybe$Nothing;
885}
886
887var _String_append = F2(function(a, b)
888{
889 return a + b;
890});
891
892function _String_length(str)
893{
894 return str.length;
895}
896
897var _String_map = F2(function(func, string)
898{
899 var len = string.length;
900 var array = new Array(len);
901 var i = 0;
902 while (i < len)
903 {
904 var word = string.charCodeAt(i);
905 if (0xD800 <= word && word <= 0xDBFF)
906 {
907 array[i] = func(_Utils_chr(string[i] + string[i+1]));
908 i += 2;
909 continue;
910 }
911 array[i] = func(_Utils_chr(string[i]));
912 i++;
913 }
914 return array.join('');
915});
916
917var _String_filter = F2(function(isGood, str)
918{
919 var arr = [];
920 var len = str.length;
921 var i = 0;
922 while (i < len)
923 {
924 var char = str[i];
925 var word = str.charCodeAt(i);
926 i++;
927 if (0xD800 <= word && word <= 0xDBFF)
928 {
929 char += str[i];
930 i++;
931 }
932
933 if (isGood(_Utils_chr(char)))
934 {
935 arr.push(char);
936 }
937 }
938 return arr.join('');
939});
940
941function _String_reverse(str)
942{
943 var len = str.length;
944 var arr = new Array(len);
945 var i = 0;
946 while (i < len)
947 {
948 var word = str.charCodeAt(i);
949 if (0xD800 <= word && word <= 0xDBFF)
950 {
951 arr[len - i] = str[i + 1];
952 i++;
953 arr[len - i] = str[i - 1];
954 i++;
955 }
956 else
957 {
958 arr[len - i] = str[i];
959 i++;
960 }
961 }
962 return arr.join('');
963}
964
965var _String_foldl = F3(function(func, state, string)
966{
967 var len = string.length;
968 var i = 0;
969 while (i < len)
970 {
971 var char = string[i];
972 var word = string.charCodeAt(i);
973 i++;
974 if (0xD800 <= word && word <= 0xDBFF)
975 {
976 char += string[i];
977 i++;
978 }
979 state = A2(func, _Utils_chr(char), state);
980 }
981 return state;
982});
983
984var _String_foldr = F3(function(func, state, string)
985{
986 var i = string.length;
987 while (i--)
988 {
989 var char = string[i];
990 var word = string.charCodeAt(i);
991 if (0xDC00 <= word && word <= 0xDFFF)
992 {
993 i--;
994 char = string[i] + char;
995 }
996 state = A2(func, _Utils_chr(char), state);
997 }
998 return state;
999});
1000
1001var _String_split = F2(function(sep, str)
1002{
1003 return str.split(sep);
1004});
1005
1006var _String_join = F2(function(sep, strs)
1007{
1008 return strs.join(sep);
1009});
1010
1011var _String_slice = F3(function(start, end, str) {
1012 return str.slice(start, end);
1013});
1014
1015function _String_trim(str)
1016{
1017 return str.trim();
1018}
1019
1020function _String_trimLeft(str)
1021{
1022 return str.replace(/^\s+/, '');
1023}
1024
1025function _String_trimRight(str)
1026{
1027 return str.replace(/\s+$/, '');
1028}
1029
1030function _String_words(str)
1031{
1032 return _List_fromArray(str.trim().split(/\s+/g));
1033}
1034
1035function _String_lines(str)
1036{
1037 return _List_fromArray(str.split(/\r\n|\r|\n/g));
1038}
1039
1040function _String_toUpper(str)
1041{
1042 return str.toUpperCase();
1043}
1044
1045function _String_toLower(str)
1046{
1047 return str.toLowerCase();
1048}
1049
1050var _String_any = F2(function(isGood, string)
1051{
1052 var i = string.length;
1053 while (i--)
1054 {
1055 var char = string[i];
1056 var word = string.charCodeAt(i);
1057 if (0xDC00 <= word && word <= 0xDFFF)
1058 {
1059 i--;
1060 char = string[i] + char;
1061 }
1062 if (isGood(_Utils_chr(char)))
1063 {
1064 return true;
1065 }
1066 }
1067 return false;
1068});
1069
1070var _String_all = F2(function(isGood, string)
1071{
1072 var i = string.length;
1073 while (i--)
1074 {
1075 var char = string[i];
1076 var word = string.charCodeAt(i);
1077 if (0xDC00 <= word && word <= 0xDFFF)
1078 {
1079 i--;
1080 char = string[i] + char;
1081 }
1082 if (!isGood(_Utils_chr(char)))
1083 {
1084 return false;
1085 }
1086 }
1087 return true;
1088});
1089
1090var _String_contains = F2(function(sub, str)
1091{
1092 return str.indexOf(sub) > -1;
1093});
1094
1095var _String_startsWith = F2(function(sub, str)
1096{
1097 return str.indexOf(sub) === 0;
1098});
1099
1100var _String_endsWith = F2(function(sub, str)
1101{
1102 return str.length >= sub.length &&
1103 str.lastIndexOf(sub) === str.length - sub.length;
1104});
1105
1106var _String_indexes = F2(function(sub, str)
1107{
1108 var subLen = sub.length;
1109
1110 if (subLen < 1)
1111 {
1112 return _List_Nil;
1113 }
1114
1115 var i = 0;
1116 var is = [];
1117
1118 while ((i = str.indexOf(sub, i)) > -1)
1119 {
1120 is.push(i);
1121 i = i + subLen;
1122 }
1123
1124 return _List_fromArray(is);
1125});
1126
1127
1128// TO STRING
1129
1130function _String_fromNumber(number)
1131{
1132 return number + '';
1133}
1134
1135
1136// INT CONVERSIONS
1137
1138function _String_toInt(str)
1139{
1140 var total = 0;
1141 var code0 = str.charCodeAt(0);
1142 var start = code0 == 0x2B /* + */ || code0 == 0x2D /* - */ ? 1 : 0;
1143
1144 for (var i = start; i < str.length; ++i)
1145 {
1146 var code = str.charCodeAt(i);
1147 if (code < 0x30 || 0x39 < code)
1148 {
1149 return $elm$core$Maybe$Nothing;
1150 }
1151 total = 10 * total + code - 0x30;
1152 }
1153
1154 return i == start
1155 ? $elm$core$Maybe$Nothing
1156 : $elm$core$Maybe$Just(code0 == 0x2D ? -total : total);
1157}
1158
1159
1160// FLOAT CONVERSIONS
1161
1162function _String_toFloat(s)
1163{
1164 // check if it is a hex, octal, or binary number
1165 if (s.length === 0 || /[\sxbo]/.test(s))
1166 {
1167 return $elm$core$Maybe$Nothing;
1168 }
1169 var n = +s;
1170 // faster isNaN check
1171 return n === n ? $elm$core$Maybe$Just(n) : $elm$core$Maybe$Nothing;
1172}
1173
1174function _String_fromList(chars)
1175{
1176 return _List_toArray(chars).join('');
1177}
1178
1179
1180
1181
1182function _Char_toCode(char)
1183{
1184 var code = char.charCodeAt(0);
1185 if (0xD800 <= code && code <= 0xDBFF)
1186 {
1187 return (code - 0xD800) * 0x400 + char.charCodeAt(1) - 0xDC00 + 0x10000
1188 }
1189 return code;
1190}
1191
1192function _Char_fromCode(code)
1193{
1194 return _Utils_chr(
1195 (code < 0 || 0x10FFFF < code)
1196 ? '\uFFFD'
1197 :
1198 (code <= 0xFFFF)
1199 ? String.fromCharCode(code)
1200 :
1201 (code -= 0x10000,
1202 String.fromCharCode(Math.floor(code / 0x400) + 0xD800, code % 0x400 + 0xDC00)
1203 )
1204 );
1205}
1206
1207function _Char_toUpper(char)
1208{
1209 return _Utils_chr(char.toUpperCase());
1210}
1211
1212function _Char_toLower(char)
1213{
1214 return _Utils_chr(char.toLowerCase());
1215}
1216
1217function _Char_toLocaleUpper(char)
1218{
1219 return _Utils_chr(char.toLocaleUpperCase());
1220}
1221
1222function _Char_toLocaleLower(char)
1223{
1224 return _Utils_chr(char.toLocaleLowerCase());
1225}
1226
1227
1228
1229/**/
1230function _Json_errorToString(error)
1231{
1232 return $elm$json$Json$Decode$errorToString(error);
1233}
1234//*/
1235
1236
1237// CORE DECODERS
1238
1239function _Json_succeed(msg)
1240{
1241 return {
1242 $: 0,
1243 a: msg
1244 };
1245}
1246
1247function _Json_fail(msg)
1248{
1249 return {
1250 $: 1,
1251 a: msg
1252 };
1253}
1254
1255function _Json_decodePrim(decoder)
1256{
1257 return { $: 2, b: decoder };
1258}
1259
1260var _Json_decodeInt = _Json_decodePrim(function(value) {
1261 return (typeof value !== 'number')
1262 ? _Json_expecting('an INT', value)
1263 :
1264 (-2147483647 < value && value < 2147483647 && (value | 0) === value)
1265 ? $elm$core$Result$Ok(value)
1266 :
1267 (isFinite(value) && !(value % 1))
1268 ? $elm$core$Result$Ok(value)
1269 : _Json_expecting('an INT', value);
1270});
1271
1272var _Json_decodeBool = _Json_decodePrim(function(value) {
1273 return (typeof value === 'boolean')
1274 ? $elm$core$Result$Ok(value)
1275 : _Json_expecting('a BOOL', value);
1276});
1277
1278var _Json_decodeFloat = _Json_decodePrim(function(value) {
1279 return (typeof value === 'number')
1280 ? $elm$core$Result$Ok(value)
1281 : _Json_expecting('a FLOAT', value);
1282});
1283
1284var _Json_decodeValue = _Json_decodePrim(function(value) {
1285 return $elm$core$Result$Ok(_Json_wrap(value));
1286});
1287
1288var _Json_decodeString = _Json_decodePrim(function(value) {
1289 return (typeof value === 'string')
1290 ? $elm$core$Result$Ok(value)
1291 : (value instanceof String)
1292 ? $elm$core$Result$Ok(value + '')
1293 : _Json_expecting('a STRING', value);
1294});
1295
1296function _Json_decodeList(decoder) { return { $: 3, b: decoder }; }
1297function _Json_decodeArray(decoder) { return { $: 4, b: decoder }; }
1298
1299function _Json_decodeNull(value) { return { $: 5, c: value }; }
1300
1301var _Json_decodeField = F2(function(field, decoder)
1302{
1303 return {
1304 $: 6,
1305 d: field,
1306 b: decoder
1307 };
1308});
1309
1310var _Json_decodeIndex = F2(function(index, decoder)
1311{
1312 return {
1313 $: 7,
1314 e: index,
1315 b: decoder
1316 };
1317});
1318
1319function _Json_decodeKeyValuePairs(decoder)
1320{
1321 return {
1322 $: 8,
1323 b: decoder
1324 };
1325}
1326
1327function _Json_mapMany(f, decoders)
1328{
1329 return {
1330 $: 9,
1331 f: f,
1332 g: decoders
1333 };
1334}
1335
1336var _Json_andThen = F2(function(callback, decoder)
1337{
1338 return {
1339 $: 10,
1340 b: decoder,
1341 h: callback
1342 };
1343});
1344
1345function _Json_oneOf(decoders)
1346{
1347 return {
1348 $: 11,
1349 g: decoders
1350 };
1351}
1352
1353
1354// DECODING OBJECTS
1355
1356var _Json_map1 = F2(function(f, d1)
1357{
1358 return _Json_mapMany(f, [d1]);
1359});
1360
1361var _Json_map2 = F3(function(f, d1, d2)
1362{
1363 return _Json_mapMany(f, [d1, d2]);
1364});
1365
1366var _Json_map3 = F4(function(f, d1, d2, d3)
1367{
1368 return _Json_mapMany(f, [d1, d2, d3]);
1369});
1370
1371var _Json_map4 = F5(function(f, d1, d2, d3, d4)
1372{
1373 return _Json_mapMany(f, [d1, d2, d3, d4]);
1374});
1375
1376var _Json_map5 = F6(function(f, d1, d2, d3, d4, d5)
1377{
1378 return _Json_mapMany(f, [d1, d2, d3, d4, d5]);
1379});
1380
1381var _Json_map6 = F7(function(f, d1, d2, d3, d4, d5, d6)
1382{
1383 return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6]);
1384});
1385
1386var _Json_map7 = F8(function(f, d1, d2, d3, d4, d5, d6, d7)
1387{
1388 return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7]);
1389});
1390
1391var _Json_map8 = F9(function(f, d1, d2, d3, d4, d5, d6, d7, d8)
1392{
1393 return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]);
1394});
1395
1396
1397// DECODE
1398
1399var _Json_runOnString = F2(function(decoder, string)
1400{
1401 try
1402 {
1403 var value = JSON.parse(string);
1404 return _Json_runHelp(decoder, value);
1405 }
1406 catch (e)
1407 {
1408 return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'This is not valid JSON! ' + e.message, _Json_wrap(string)));
1409 }
1410});
1411
1412var _Json_run = F2(function(decoder, value)
1413{
1414 return _Json_runHelp(decoder, _Json_unwrap(value));
1415});
1416
1417function _Json_runHelp(decoder, value)
1418{
1419 switch (decoder.$)
1420 {
1421 case 2:
1422 return decoder.b(value);
1423
1424 case 5:
1425 return (value === null)
1426 ? $elm$core$Result$Ok(decoder.c)
1427 : _Json_expecting('null', value);
1428
1429 case 3:
1430 if (!_Json_isArray(value))
1431 {
1432 return _Json_expecting('a LIST', value);
1433 }
1434 return _Json_runArrayDecoder(decoder.b, value, _List_fromArray);
1435
1436 case 4:
1437 if (!_Json_isArray(value))
1438 {
1439 return _Json_expecting('an ARRAY', value);
1440 }
1441 return _Json_runArrayDecoder(decoder.b, value, _Json_toElmArray);
1442
1443 case 6:
1444 var field = decoder.d;
1445 if (typeof value !== 'object' || value === null || !(field in value))
1446 {
1447 return _Json_expecting('an OBJECT with a field named `' + field + '`', value);
1448 }
1449 var result = _Json_runHelp(decoder.b, value[field]);
1450 return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, field, result.a));
1451
1452 case 7:
1453 var index = decoder.e;
1454 if (!_Json_isArray(value))
1455 {
1456 return _Json_expecting('an ARRAY', value);
1457 }
1458 if (index >= value.length)
1459 {
1460 return _Json_expecting('a LONGER array. Need index ' + index + ' but only see ' + value.length + ' entries', value);
1461 }
1462 var result = _Json_runHelp(decoder.b, value[index]);
1463 return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, index, result.a));
1464
1465 case 8:
1466 if (typeof value !== 'object' || value === null || _Json_isArray(value))
1467 {
1468 return _Json_expecting('an OBJECT', value);
1469 }
1470
1471 var keyValuePairs = _List_Nil;
1472 // TODO test perf of Object.keys and switch when support is good enough
1473 for (var key in value)
1474 {
1475 if (value.hasOwnProperty(key))
1476 {
1477 var result = _Json_runHelp(decoder.b, value[key]);
1478 if (!$elm$core$Result$isOk(result))
1479 {
1480 return $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, key, result.a));
1481 }
1482 keyValuePairs = _List_Cons(_Utils_Tuple2(key, result.a), keyValuePairs);
1483 }
1484 }
1485 return $elm$core$Result$Ok($elm$core$List$reverse(keyValuePairs));
1486
1487 case 9:
1488 var answer = decoder.f;
1489 var decoders = decoder.g;
1490 for (var i = 0; i < decoders.length; i++)
1491 {
1492 var result = _Json_runHelp(decoders[i], value);
1493 if (!$elm$core$Result$isOk(result))
1494 {
1495 return result;
1496 }
1497 answer = answer(result.a);
1498 }
1499 return $elm$core$Result$Ok(answer);
1500
1501 case 10:
1502 var result = _Json_runHelp(decoder.b, value);
1503 return (!$elm$core$Result$isOk(result))
1504 ? result
1505 : _Json_runHelp(decoder.h(result.a), value);
1506
1507 case 11:
1508 var errors = _List_Nil;
1509 for (var temp = decoder.g; temp.b; temp = temp.b) // WHILE_CONS
1510 {
1511 var result = _Json_runHelp(temp.a, value);
1512 if ($elm$core$Result$isOk(result))
1513 {
1514 return result;
1515 }
1516 errors = _List_Cons(result.a, errors);
1517 }
1518 return $elm$core$Result$Err($elm$json$Json$Decode$OneOf($elm$core$List$reverse(errors)));
1519
1520 case 1:
1521 return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, decoder.a, _Json_wrap(value)));
1522
1523 case 0:
1524 return $elm$core$Result$Ok(decoder.a);
1525 }
1526}
1527
1528function _Json_runArrayDecoder(decoder, value, toElmValue)
1529{
1530 var len = value.length;
1531 var array = new Array(len);
1532 for (var i = 0; i < len; i++)
1533 {
1534 var result = _Json_runHelp(decoder, value[i]);
1535 if (!$elm$core$Result$isOk(result))
1536 {
1537 return $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, i, result.a));
1538 }
1539 array[i] = result.a;
1540 }
1541 return $elm$core$Result$Ok(toElmValue(array));
1542}
1543
1544function _Json_isArray(value)
1545{
1546 return Array.isArray(value) || (typeof FileList !== 'undefined' && value instanceof FileList);
1547}
1548
1549function _Json_toElmArray(array)
1550{
1551 return A2($elm$core$Array$initialize, array.length, function(i) { return array[i]; });
1552}
1553
1554function _Json_expecting(type, value)
1555{
1556 return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'Expecting ' + type, _Json_wrap(value)));
1557}
1558
1559
1560// EQUALITY
1561
1562function _Json_equality(x, y)
1563{
1564 if (x === y)
1565 {
1566 return true;
1567 }
1568
1569 if (x.$ !== y.$)
1570 {
1571 return false;
1572 }
1573
1574 switch (x.$)
1575 {
1576 case 0:
1577 case 1:
1578 return x.a === y.a;
1579
1580 case 2:
1581 return x.b === y.b;
1582
1583 case 5:
1584 return x.c === y.c;
1585
1586 case 3:
1587 case 4:
1588 case 8:
1589 return _Json_equality(x.b, y.b);
1590
1591 case 6:
1592 return x.d === y.d && _Json_equality(x.b, y.b);
1593
1594 case 7:
1595 return x.e === y.e && _Json_equality(x.b, y.b);
1596
1597 case 9:
1598 return x.f === y.f && _Json_listEquality(x.g, y.g);
1599
1600 case 10:
1601 return x.h === y.h && _Json_equality(x.b, y.b);
1602
1603 case 11:
1604 return _Json_listEquality(x.g, y.g);
1605 }
1606}
1607
1608function _Json_listEquality(aDecoders, bDecoders)
1609{
1610 var len = aDecoders.length;
1611 if (len !== bDecoders.length)
1612 {
1613 return false;
1614 }
1615 for (var i = 0; i < len; i++)
1616 {
1617 if (!_Json_equality(aDecoders[i], bDecoders[i]))
1618 {
1619 return false;
1620 }
1621 }
1622 return true;
1623}
1624
1625
1626// ENCODE
1627
1628var _Json_encode = F2(function(indentLevel, value)
1629{
1630 return JSON.stringify(_Json_unwrap(value), null, indentLevel) + '';
1631});
1632
1633function _Json_wrap(value) { return { $: 0, a: value }; }
1634function _Json_unwrap(value) { return value.a; }
1635
1636function _Json_wrap_UNUSED(value) { return value; }
1637function _Json_unwrap_UNUSED(value) { return value; }
1638
1639function _Json_emptyArray() { return []; }
1640function _Json_emptyObject() { return {}; }
1641
1642var _Json_addField = F3(function(key, value, object)
1643{
1644 object[key] = _Json_unwrap(value);
1645 return object;
1646});
1647
1648function _Json_addEntry(func)
1649{
1650 return F2(function(entry, array)
1651 {
1652 array.push(_Json_unwrap(func(entry)));
1653 return array;
1654 });
1655}
1656
1657var _Json_encodeNull = _Json_wrap(null);
1658
1659
1660
1661// TASKS
1662
1663function _Scheduler_succeed(value)
1664{
1665 return {
1666 $: 0,
1667 a: value
1668 };
1669}
1670
1671function _Scheduler_fail(error)
1672{
1673 return {
1674 $: 1,
1675 a: error
1676 };
1677}
1678
1679function _Scheduler_binding(callback)
1680{
1681 return {
1682 $: 2,
1683 b: callback,
1684 c: null
1685 };
1686}
1687
1688var _Scheduler_andThen = F2(function(callback, task)
1689{
1690 return {
1691 $: 3,
1692 b: callback,
1693 d: task
1694 };
1695});
1696
1697var _Scheduler_onError = F2(function(callback, task)
1698{
1699 return {
1700 $: 4,
1701 b: callback,
1702 d: task
1703 };
1704});
1705
1706function _Scheduler_receive(callback)
1707{
1708 return {
1709 $: 5,
1710 b: callback
1711 };
1712}
1713
1714
1715// PROCESSES
1716
1717var _Scheduler_guid = 0;
1718
1719function _Scheduler_rawSpawn(task)
1720{
1721 var proc = {
1722 $: 0,
1723 e: _Scheduler_guid++,
1724 f: task,
1725 g: null,
1726 h: []
1727 };
1728
1729 _Scheduler_enqueue(proc);
1730
1731 return proc;
1732}
1733
1734function _Scheduler_spawn(task)
1735{
1736 return _Scheduler_binding(function(callback) {
1737 callback(_Scheduler_succeed(_Scheduler_rawSpawn(task)));
1738 });
1739}
1740
1741function _Scheduler_rawSend(proc, msg)
1742{
1743 proc.h.push(msg);
1744 _Scheduler_enqueue(proc);
1745}
1746
1747var _Scheduler_send = F2(function(proc, msg)
1748{
1749 return _Scheduler_binding(function(callback) {
1750 _Scheduler_rawSend(proc, msg);
1751 callback(_Scheduler_succeed(_Utils_Tuple0));
1752 });
1753});
1754
1755function _Scheduler_kill(proc)
1756{
1757 return _Scheduler_binding(function(callback) {
1758 var task = proc.f;
1759 if (task.$ === 2 && task.c)
1760 {
1761 task.c();
1762 }
1763
1764 proc.f = null;
1765
1766 callback(_Scheduler_succeed(_Utils_Tuple0));
1767 });
1768}
1769
1770
1771/* STEP PROCESSES
1772
1773type alias Process =
1774 { $ : tag
1775 , id : unique_id
1776 , root : Task
1777 , stack : null | { $: SUCCEED | FAIL, a: callback, b: stack }
1778 , mailbox : [msg]
1779 }
1780
1781*/
1782
1783
1784var _Scheduler_working = false;
1785var _Scheduler_queue = [];
1786
1787
1788function _Scheduler_enqueue(proc)
1789{
1790 _Scheduler_queue.push(proc);
1791 if (_Scheduler_working)
1792 {
1793 return;
1794 }
1795 _Scheduler_working = true;
1796 while (proc = _Scheduler_queue.shift())
1797 {
1798 _Scheduler_step(proc);
1799 }
1800 _Scheduler_working = false;
1801}
1802
1803
1804function _Scheduler_step(proc)
1805{
1806 while (proc.f)
1807 {
1808 var rootTag = proc.f.$;
1809 if (rootTag === 0 || rootTag === 1)
1810 {
1811 while (proc.g && proc.g.$ !== rootTag)
1812 {
1813 proc.g = proc.g.i;
1814 }
1815 if (!proc.g)
1816 {
1817 return;
1818 }
1819 proc.f = proc.g.b(proc.f.a);
1820 proc.g = proc.g.i;
1821 }
1822 else if (rootTag === 2)
1823 {
1824 proc.f.c = proc.f.b(function(newRoot) {
1825 proc.f = newRoot;
1826 _Scheduler_enqueue(proc);
1827 });
1828 return;
1829 }
1830 else if (rootTag === 5)
1831 {
1832 if (proc.h.length === 0)
1833 {
1834 return;
1835 }
1836 proc.f = proc.f.b(proc.h.shift());
1837 }
1838 else // if (rootTag === 3 || rootTag === 4)
1839 {
1840 proc.g = {
1841 $: rootTag === 3 ? 0 : 1,
1842 b: proc.f.b,
1843 i: proc.g
1844 };
1845 proc.f = proc.f.d;
1846 }
1847 }
1848}
1849
1850
1851
1852function _Process_sleep(time)
1853{
1854 return _Scheduler_binding(function(callback) {
1855 var id = setTimeout(function() {
1856 callback(_Scheduler_succeed(_Utils_Tuple0));
1857 }, time);
1858
1859 return function() { clearTimeout(id); };
1860 });
1861}
1862
1863
1864
1865
1866// PROGRAMS
1867
1868
1869var _Platform_worker = F4(function(impl, flagDecoder, debugMetadata, args)
1870{
1871 return _Platform_initialize(
1872 flagDecoder,
1873 args,
1874 impl.init,
1875 impl.update,
1876 impl.subscriptions,
1877 function() { return function() {} }
1878 );
1879});
1880
1881
1882
1883// INITIALIZE A PROGRAM
1884
1885
1886function _Platform_initialize(flagDecoder, args, init, update, subscriptions, stepperBuilder)
1887{
1888 var result = A2(_Json_run, flagDecoder, _Json_wrap(args ? args['flags'] : undefined));
1889 $elm$core$Result$isOk(result) || _Debug_crash(2 /**/, _Json_errorToString(result.a) /**/);
1890 var managers = {};
1891 var initPair = init(result.a);
1892 var model = initPair.a;
1893 var stepper = stepperBuilder(sendToApp, model);
1894 var ports = _Platform_setupEffects(managers, sendToApp);
1895
1896 function sendToApp(msg, viewMetadata)
1897 {
1898 var pair = A2(update, msg, model);
1899 stepper(model = pair.a, viewMetadata);
1900 _Platform_enqueueEffects(managers, pair.b, subscriptions(model));
1901 }
1902
1903 _Platform_enqueueEffects(managers, initPair.b, subscriptions(model));
1904
1905 return ports ? { ports: ports } : {};
1906}
1907
1908
1909
1910// TRACK PRELOADS
1911//
1912// This is used by code in elm/browser and elm/http
1913// to register any HTTP requests that are triggered by init.
1914//
1915
1916
1917var _Platform_preload;
1918
1919
1920function _Platform_registerPreload(url)
1921{
1922 _Platform_preload.add(url);
1923}
1924
1925
1926
1927// EFFECT MANAGERS
1928
1929
1930var _Platform_effectManagers = {};
1931
1932
1933function _Platform_setupEffects(managers, sendToApp)
1934{
1935 var ports;
1936
1937 // setup all necessary effect managers
1938 for (var key in _Platform_effectManagers)
1939 {
1940 var manager = _Platform_effectManagers[key];
1941
1942 if (manager.a)
1943 {
1944 ports = ports || {};
1945 ports[key] = manager.a(key, sendToApp);
1946 }
1947
1948 managers[key] = _Platform_instantiateManager(manager, sendToApp);
1949 }
1950
1951 return ports;
1952}
1953
1954
1955function _Platform_createManager(init, onEffects, onSelfMsg, cmdMap, subMap)
1956{
1957 return {
1958 b: init,
1959 c: onEffects,
1960 d: onSelfMsg,
1961 e: cmdMap,
1962 f: subMap
1963 };
1964}
1965
1966
1967function _Platform_instantiateManager(info, sendToApp)
1968{
1969 var router = {
1970 g: sendToApp,
1971 h: undefined
1972 };
1973
1974 var onEffects = info.c;
1975 var onSelfMsg = info.d;
1976 var cmdMap = info.e;
1977 var subMap = info.f;
1978
1979 function loop(state)
1980 {
1981 return A2(_Scheduler_andThen, loop, _Scheduler_receive(function(msg)
1982 {
1983 var value = msg.a;
1984
1985 if (msg.$ === 0)
1986 {
1987 return A3(onSelfMsg, router, value, state);
1988 }
1989
1990 return cmdMap && subMap
1991 ? A4(onEffects, router, value.i, value.j, state)
1992 : A3(onEffects, router, cmdMap ? value.i : value.j, state);
1993 }));
1994 }
1995
1996 return router.h = _Scheduler_rawSpawn(A2(_Scheduler_andThen, loop, info.b));
1997}
1998
1999
2000
2001// ROUTING
2002
2003
2004var _Platform_sendToApp = F2(function(router, msg)
2005{
2006 return _Scheduler_binding(function(callback)
2007 {
2008 router.g(msg);
2009 callback(_Scheduler_succeed(_Utils_Tuple0));
2010 });
2011});
2012
2013
2014var _Platform_sendToSelf = F2(function(router, msg)
2015{
2016 return A2(_Scheduler_send, router.h, {
2017 $: 0,
2018 a: msg
2019 });
2020});
2021
2022
2023
2024// BAGS
2025
2026
2027function _Platform_leaf(home)
2028{
2029 return function(value)
2030 {
2031 return {
2032 $: 1,
2033 k: home,
2034 l: value
2035 };
2036 };
2037}
2038
2039
2040function _Platform_batch(list)
2041{
2042 return {
2043 $: 2,
2044 m: list
2045 };
2046}
2047
2048
2049var _Platform_map = F2(function(tagger, bag)
2050{
2051 return {
2052 $: 3,
2053 n: tagger,
2054 o: bag
2055 }
2056});
2057
2058
2059
2060// PIPE BAGS INTO EFFECT MANAGERS
2061//
2062// Effects must be queued!
2063//
2064// Say your init contains a synchronous command, like Time.now or Time.here
2065//
2066// - This will produce a batch of effects (FX_1)
2067// - The synchronous task triggers the subsequent `update` call
2068// - This will produce a batch of effects (FX_2)
2069//
2070// If we just start dispatching FX_2, subscriptions from FX_2 can be processed
2071// before subscriptions from FX_1. No good! Earlier versions of this code had
2072// this problem, leading to these reports:
2073//
2074// https://github.com/elm/core/issues/980
2075// https://github.com/elm/core/pull/981
2076// https://github.com/elm/compiler/issues/1776
2077//
2078// The queue is necessary to avoid ordering issues for synchronous commands.
2079
2080
2081// Why use true/false here? Why not just check the length of the queue?
2082// The goal is to detect "are we currently dispatching effects?" If we
2083// are, we need to bail and let the ongoing while loop handle things.
2084//
2085// Now say the queue has 1 element. When we dequeue the final element,
2086// the queue will be empty, but we are still actively dispatching effects.
2087// So you could get queue jumping in a really tricky category of cases.
2088//
2089var _Platform_effectsQueue = [];
2090var _Platform_effectsActive = false;
2091
2092
2093function _Platform_enqueueEffects(managers, cmdBag, subBag)
2094{
2095 _Platform_effectsQueue.push({ p: managers, q: cmdBag, r: subBag });
2096
2097 if (_Platform_effectsActive) return;
2098
2099 _Platform_effectsActive = true;
2100 for (var fx; fx = _Platform_effectsQueue.shift(); )
2101 {
2102 _Platform_dispatchEffects(fx.p, fx.q, fx.r);
2103 }
2104 _Platform_effectsActive = false;
2105}
2106
2107
2108function _Platform_dispatchEffects(managers, cmdBag, subBag)
2109{
2110 var effectsDict = {};
2111 _Platform_gatherEffects(true, cmdBag, effectsDict, null);
2112 _Platform_gatherEffects(false, subBag, effectsDict, null);
2113
2114 for (var home in managers)
2115 {
2116 _Scheduler_rawSend(managers[home], {
2117 $: 'fx',
2118 a: effectsDict[home] || { i: _List_Nil, j: _List_Nil }
2119 });
2120 }
2121}
2122
2123
2124function _Platform_gatherEffects(isCmd, bag, effectsDict, taggers)
2125{
2126 switch (bag.$)
2127 {
2128 case 1:
2129 var home = bag.k;
2130 var effect = _Platform_toEffect(isCmd, home, taggers, bag.l);
2131 effectsDict[home] = _Platform_insert(isCmd, effect, effectsDict[home]);
2132 return;
2133
2134 case 2:
2135 for (var list = bag.m; list.b; list = list.b) // WHILE_CONS
2136 {
2137 _Platform_gatherEffects(isCmd, list.a, effectsDict, taggers);
2138 }
2139 return;
2140
2141 case 3:
2142 _Platform_gatherEffects(isCmd, bag.o, effectsDict, {
2143 s: bag.n,
2144 t: taggers
2145 });
2146 return;
2147 }
2148}
2149
2150
2151function _Platform_toEffect(isCmd, home, taggers, value)
2152{
2153 function applyTaggers(x)
2154 {
2155 for (var temp = taggers; temp; temp = temp.t)
2156 {
2157 x = temp.s(x);
2158 }
2159 return x;
2160 }
2161
2162 var map = isCmd
2163 ? _Platform_effectManagers[home].e
2164 : _Platform_effectManagers[home].f;
2165
2166 return A2(map, applyTaggers, value)
2167}
2168
2169
2170function _Platform_insert(isCmd, newEffect, effects)
2171{
2172 effects = effects || { i: _List_Nil, j: _List_Nil };
2173
2174 isCmd
2175 ? (effects.i = _List_Cons(newEffect, effects.i))
2176 : (effects.j = _List_Cons(newEffect, effects.j));
2177
2178 return effects;
2179}
2180
2181
2182
2183// PORTS
2184
2185
2186function _Platform_checkPortName(name)
2187{
2188 if (_Platform_effectManagers[name])
2189 {
2190 _Debug_crash(3, name)
2191 }
2192}
2193
2194
2195
2196// OUTGOING PORTS
2197
2198
2199function _Platform_outgoingPort(name, converter)
2200{
2201 _Platform_checkPortName(name);
2202 _Platform_effectManagers[name] = {
2203 e: _Platform_outgoingPortMap,
2204 u: converter,
2205 a: _Platform_setupOutgoingPort
2206 };
2207 return _Platform_leaf(name);
2208}
2209
2210
2211var _Platform_outgoingPortMap = F2(function(tagger, value) { return value; });
2212
2213
2214function _Platform_setupOutgoingPort(name)
2215{
2216 var subs = [];
2217 var converter = _Platform_effectManagers[name].u;
2218
2219 // CREATE MANAGER
2220
2221 var init = _Process_sleep(0);
2222
2223 _Platform_effectManagers[name].b = init;
2224 _Platform_effectManagers[name].c = F3(function(router, cmdList, state)
2225 {
2226 for ( ; cmdList.b; cmdList = cmdList.b) // WHILE_CONS
2227 {
2228 // grab a separate reference to subs in case unsubscribe is called
2229 var currentSubs = subs;
2230 var value = _Json_unwrap(converter(cmdList.a));
2231 for (var i = 0; i < currentSubs.length; i++)
2232 {
2233 currentSubs[i](value);
2234 }
2235 }
2236 return init;
2237 });
2238
2239 // PUBLIC API
2240
2241 function subscribe(callback)
2242 {
2243 subs.push(callback);
2244 }
2245
2246 function unsubscribe(callback)
2247 {
2248 // copy subs into a new array in case unsubscribe is called within a
2249 // subscribed callback
2250 subs = subs.slice();
2251 var index = subs.indexOf(callback);
2252 if (index >= 0)
2253 {
2254 subs.splice(index, 1);
2255 }
2256 }
2257
2258 return {
2259 subscribe: subscribe,
2260 unsubscribe: unsubscribe
2261 };
2262}
2263
2264
2265
2266// INCOMING PORTS
2267
2268
2269function _Platform_incomingPort(name, converter)
2270{
2271 _Platform_checkPortName(name);
2272 _Platform_effectManagers[name] = {
2273 f: _Platform_incomingPortMap,
2274 u: converter,
2275 a: _Platform_setupIncomingPort
2276 };
2277 return _Platform_leaf(name);
2278}
2279
2280
2281var _Platform_incomingPortMap = F2(function(tagger, finalTagger)
2282{
2283 return function(value)
2284 {
2285 return tagger(finalTagger(value));
2286 };
2287});
2288
2289
2290function _Platform_setupIncomingPort(name, sendToApp)
2291{
2292 var subs = _List_Nil;
2293 var converter = _Platform_effectManagers[name].u;
2294
2295 // CREATE MANAGER
2296
2297 var init = _Scheduler_succeed(null);
2298
2299 _Platform_effectManagers[name].b = init;
2300 _Platform_effectManagers[name].c = F3(function(router, subList, state)
2301 {
2302 subs = subList;
2303 return init;
2304 });
2305
2306 // PUBLIC API
2307
2308 function send(incomingValue)
2309 {
2310 var result = A2(_Json_run, converter, _Json_wrap(incomingValue));
2311
2312 $elm$core$Result$isOk(result) || _Debug_crash(4, name, result.a);
2313
2314 var value = result.a;
2315 for (var temp = subs; temp.b; temp = temp.b) // WHILE_CONS
2316 {
2317 sendToApp(temp.a(value));
2318 }
2319 }
2320
2321 return { send: send };
2322}
2323
2324
2325
2326// EXPORT ELM MODULES
2327//
2328// Have DEBUG and PROD versions so that we can (1) give nicer errors in
2329// debug mode and (2) not pay for the bits needed for that in prod mode.
2330//
2331
2332
2333function _Platform_export_UNUSED(exports)
2334{
2335 scope['Elm']
2336 ? _Platform_mergeExportsProd(scope['Elm'], exports)
2337 : scope['Elm'] = exports;
2338}
2339
2340
2341function _Platform_mergeExportsProd(obj, exports)
2342{
2343 for (var name in exports)
2344 {
2345 (name in obj)
2346 ? (name == 'init')
2347 ? _Debug_crash(6)
2348 : _Platform_mergeExportsProd(obj[name], exports[name])
2349 : (obj[name] = exports[name]);
2350 }
2351}
2352
2353
2354function _Platform_export(exports)
2355{
2356 scope['Elm']
2357 ? _Platform_mergeExportsDebug('Elm', scope['Elm'], exports)
2358 : scope['Elm'] = exports;
2359}
2360
2361
2362function _Platform_mergeExportsDebug(moduleName, obj, exports)
2363{
2364 for (var name in exports)
2365 {
2366 (name in obj)
2367 ? (name == 'init')
2368 ? _Debug_crash(6, moduleName)
2369 : _Platform_mergeExportsDebug(moduleName + '.' + name, obj[name], exports[name])
2370 : (obj[name] = exports[name]);
2371 }
2372}
2373
2374
2375
2376
2377// HELPERS
2378
2379
2380var _VirtualDom_divertHrefToApp;
2381
2382var _VirtualDom_doc = typeof document !== 'undefined' ? document : {};
2383
2384
2385function _VirtualDom_appendChild(parent, child)
2386{
2387 parent.appendChild(child);
2388}
2389
2390var _VirtualDom_init = F4(function(virtualNode, flagDecoder, debugMetadata, args)
2391{
2392 // NOTE: this function needs _Platform_export available to work
2393
2394 /**_UNUSED/
2395 var node = args['node'];
2396 //*/
2397 /**/
2398 var node = args && args['node'] ? args['node'] : _Debug_crash(0);
2399 //*/
2400
2401 node.parentNode.replaceChild(
2402 _VirtualDom_render(virtualNode, function() {}),
2403 node
2404 );
2405
2406 return {};
2407});
2408
2409
2410
2411// TEXT
2412
2413
2414function _VirtualDom_text(string)
2415{
2416 return {
2417 $: 0,
2418 a: string
2419 };
2420}
2421
2422
2423
2424// NODE
2425
2426
2427var _VirtualDom_nodeNS = F2(function(namespace, tag)
2428{
2429 return F2(function(factList, kidList)
2430 {
2431 for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
2432 {
2433 var kid = kidList.a;
2434 descendantsCount += (kid.b || 0);
2435 kids.push(kid);
2436 }
2437 descendantsCount += kids.length;
2438
2439 return {
2440 $: 1,
2441 c: tag,
2442 d: _VirtualDom_organizeFacts(factList),
2443 e: kids,
2444 f: namespace,
2445 b: descendantsCount
2446 };
2447 });
2448});
2449
2450
2451var _VirtualDom_node = _VirtualDom_nodeNS(undefined);
2452
2453
2454
2455// KEYED NODE
2456
2457
2458var _VirtualDom_keyedNodeNS = F2(function(namespace, tag)
2459{
2460 return F2(function(factList, kidList)
2461 {
2462 for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
2463 {
2464 var kid = kidList.a;
2465 descendantsCount += (kid.b.b || 0);
2466 kids.push(kid);
2467 }
2468 descendantsCount += kids.length;
2469
2470 return {
2471 $: 2,
2472 c: tag,
2473 d: _VirtualDom_organizeFacts(factList),
2474 e: kids,
2475 f: namespace,
2476 b: descendantsCount
2477 };
2478 });
2479});
2480
2481
2482var _VirtualDom_keyedNode = _VirtualDom_keyedNodeNS(undefined);
2483
2484
2485
2486// CUSTOM
2487
2488
2489function _VirtualDom_custom(factList, model, render, diff)
2490{
2491 return {
2492 $: 3,
2493 d: _VirtualDom_organizeFacts(factList),
2494 g: model,
2495 h: render,
2496 i: diff
2497 };
2498}
2499
2500
2501
2502// MAP
2503
2504
2505var _VirtualDom_map = F2(function(tagger, node)
2506{
2507 return {
2508 $: 4,
2509 j: tagger,
2510 k: node,
2511 b: 1 + (node.b || 0)
2512 };
2513});
2514
2515
2516
2517// LAZY
2518
2519
2520function _VirtualDom_thunk(refs, thunk)
2521{
2522 return {
2523 $: 5,
2524 l: refs,
2525 m: thunk,
2526 k: undefined
2527 };
2528}
2529
2530var _VirtualDom_lazy = F2(function(func, a)
2531{
2532 return _VirtualDom_thunk([func, a], function() {
2533 return func(a);
2534 });
2535});
2536
2537var _VirtualDom_lazy2 = F3(function(func, a, b)
2538{
2539 return _VirtualDom_thunk([func, a, b], function() {
2540 return A2(func, a, b);
2541 });
2542});
2543
2544var _VirtualDom_lazy3 = F4(function(func, a, b, c)
2545{
2546 return _VirtualDom_thunk([func, a, b, c], function() {
2547 return A3(func, a, b, c);
2548 });
2549});
2550
2551var _VirtualDom_lazy4 = F5(function(func, a, b, c, d)
2552{
2553 return _VirtualDom_thunk([func, a, b, c, d], function() {
2554 return A4(func, a, b, c, d);
2555 });
2556});
2557
2558var _VirtualDom_lazy5 = F6(function(func, a, b, c, d, e)
2559{
2560 return _VirtualDom_thunk([func, a, b, c, d, e], function() {
2561 return A5(func, a, b, c, d, e);
2562 });
2563});
2564
2565var _VirtualDom_lazy6 = F7(function(func, a, b, c, d, e, f)
2566{
2567 return _VirtualDom_thunk([func, a, b, c, d, e, f], function() {
2568 return A6(func, a, b, c, d, e, f);
2569 });
2570});
2571
2572var _VirtualDom_lazy7 = F8(function(func, a, b, c, d, e, f, g)
2573{
2574 return _VirtualDom_thunk([func, a, b, c, d, e, f, g], function() {
2575 return A7(func, a, b, c, d, e, f, g);
2576 });
2577});
2578
2579var _VirtualDom_lazy8 = F9(function(func, a, b, c, d, e, f, g, h)
2580{
2581 return _VirtualDom_thunk([func, a, b, c, d, e, f, g, h], function() {
2582 return A8(func, a, b, c, d, e, f, g, h);
2583 });
2584});
2585
2586
2587
2588// FACTS
2589
2590
2591var _VirtualDom_on = F2(function(key, handler)
2592{
2593 return {
2594 $: 'a0',
2595 n: key,
2596 o: handler
2597 };
2598});
2599var _VirtualDom_style = F2(function(key, value)
2600{
2601 return {
2602 $: 'a1',
2603 n: key,
2604 o: value
2605 };
2606});
2607var _VirtualDom_property = F2(function(key, value)
2608{
2609 return {
2610 $: 'a2',
2611 n: key,
2612 o: value
2613 };
2614});
2615var _VirtualDom_attribute = F2(function(key, value)
2616{
2617 return {
2618 $: 'a3',
2619 n: key,
2620 o: value
2621 };
2622});
2623var _VirtualDom_attributeNS = F3(function(namespace, key, value)
2624{
2625 return {
2626 $: 'a4',
2627 n: key,
2628 o: { f: namespace, o: value }
2629 };
2630});
2631
2632
2633
2634// XSS ATTACK VECTOR CHECKS
2635
2636
2637function _VirtualDom_noScript(tag)
2638{
2639 return tag == 'script' ? 'p' : tag;
2640}
2641
2642function _VirtualDom_noOnOrFormAction(key)
2643{
2644 return /^(on|formAction$)/i.test(key) ? 'data-' + key : key;
2645}
2646
2647function _VirtualDom_noInnerHtmlOrFormAction(key)
2648{
2649 return key == 'innerHTML' || key == 'formAction' ? 'data-' + key : key;
2650}
2651
2652function _VirtualDom_noJavaScriptUri_UNUSED(value)
2653{
2654 return /^javascript:/i.test(value.replace(/\s/g,'')) ? '' : value;
2655}
2656
2657function _VirtualDom_noJavaScriptUri(value)
2658{
2659 return /^javascript:/i.test(value.replace(/\s/g,''))
2660 ? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'
2661 : value;
2662}
2663
2664function _VirtualDom_noJavaScriptOrHtmlUri_UNUSED(value)
2665{
2666 return /^\s*(javascript:|data:text\/html)/i.test(value) ? '' : value;
2667}
2668
2669function _VirtualDom_noJavaScriptOrHtmlUri(value)
2670{
2671 return /^\s*(javascript:|data:text\/html)/i.test(value)
2672 ? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'
2673 : value;
2674}
2675
2676
2677
2678// MAP FACTS
2679
2680
2681var _VirtualDom_mapAttribute = F2(function(func, attr)
2682{
2683 return (attr.$ === 'a0')
2684 ? A2(_VirtualDom_on, attr.n, _VirtualDom_mapHandler(func, attr.o))
2685 : attr;
2686});
2687
2688function _VirtualDom_mapHandler(func, handler)
2689{
2690 var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler);
2691
2692 // 0 = Normal
2693 // 1 = MayStopPropagation
2694 // 2 = MayPreventDefault
2695 // 3 = Custom
2696
2697 return {
2698 $: handler.$,
2699 a:
2700 !tag
2701 ? A2($elm$json$Json$Decode$map, func, handler.a)
2702 :
2703 A3($elm$json$Json$Decode$map2,
2704 tag < 3
2705 ? _VirtualDom_mapEventTuple
2706 : _VirtualDom_mapEventRecord,
2707 $elm$json$Json$Decode$succeed(func),
2708 handler.a
2709 )
2710 };
2711}
2712
2713var _VirtualDom_mapEventTuple = F2(function(func, tuple)
2714{
2715 return _Utils_Tuple2(func(tuple.a), tuple.b);
2716});
2717
2718var _VirtualDom_mapEventRecord = F2(function(func, record)
2719{
2720 return {
2721 message: func(record.message),
2722 stopPropagation: record.stopPropagation,
2723 preventDefault: record.preventDefault
2724 }
2725});
2726
2727
2728
2729// ORGANIZE FACTS
2730
2731
2732function _VirtualDom_organizeFacts(factList)
2733{
2734 for (var facts = {}; factList.b; factList = factList.b) // WHILE_CONS
2735 {
2736 var entry = factList.a;
2737
2738 var tag = entry.$;
2739 var key = entry.n;
2740 var value = entry.o;
2741
2742 if (tag === 'a2')
2743 {
2744 (key === 'className')
2745 ? _VirtualDom_addClass(facts, key, _Json_unwrap(value))
2746 : facts[key] = _Json_unwrap(value);
2747
2748 continue;
2749 }
2750
2751 var subFacts = facts[tag] || (facts[tag] = {});
2752 (tag === 'a3' && key === 'class')
2753 ? _VirtualDom_addClass(subFacts, key, value)
2754 : subFacts[key] = value;
2755 }
2756
2757 return facts;
2758}
2759
2760function _VirtualDom_addClass(object, key, newClass)
2761{
2762 var classes = object[key];
2763 object[key] = classes ? classes + ' ' + newClass : newClass;
2764}
2765
2766
2767
2768// RENDER
2769
2770
2771function _VirtualDom_render(vNode, eventNode)
2772{
2773 var tag = vNode.$;
2774
2775 if (tag === 5)
2776 {
2777 return _VirtualDom_render(vNode.k || (vNode.k = vNode.m()), eventNode);
2778 }
2779
2780 if (tag === 0)
2781 {
2782 return _VirtualDom_doc.createTextNode(vNode.a);
2783 }
2784
2785 if (tag === 4)
2786 {
2787 var subNode = vNode.k;
2788 var tagger = vNode.j;
2789
2790 while (subNode.$ === 4)
2791 {
2792 typeof tagger !== 'object'
2793 ? tagger = [tagger, subNode.j]
2794 : tagger.push(subNode.j);
2795
2796 subNode = subNode.k;
2797 }
2798
2799 var subEventRoot = { j: tagger, p: eventNode };
2800 var domNode = _VirtualDom_render(subNode, subEventRoot);
2801 domNode.elm_event_node_ref = subEventRoot;
2802 return domNode;
2803 }
2804
2805 if (tag === 3)
2806 {
2807 var domNode = vNode.h(vNode.g);
2808 _VirtualDom_applyFacts(domNode, eventNode, vNode.d);
2809 return domNode;
2810 }
2811
2812 // at this point `tag` must be 1 or 2
2813
2814 var domNode = vNode.f
2815 ? _VirtualDom_doc.createElementNS(vNode.f, vNode.c)
2816 : _VirtualDom_doc.createElement(vNode.c);
2817
2818 if (_VirtualDom_divertHrefToApp && vNode.c == 'a')
2819 {
2820 domNode.addEventListener('click', _VirtualDom_divertHrefToApp(domNode));
2821 }
2822
2823 _VirtualDom_applyFacts(domNode, eventNode, vNode.d);
2824
2825 for (var kids = vNode.e, i = 0; i < kids.length; i++)
2826 {
2827 _VirtualDom_appendChild(domNode, _VirtualDom_render(tag === 1 ? kids[i] : kids[i].b, eventNode));
2828 }
2829
2830 return domNode;
2831}
2832
2833
2834
2835// APPLY FACTS
2836
2837
2838function _VirtualDom_applyFacts(domNode, eventNode, facts)
2839{
2840 for (var key in facts)
2841 {
2842 var value = facts[key];
2843
2844 key === 'a1'
2845 ? _VirtualDom_applyStyles(domNode, value)
2846 :
2847 key === 'a0'
2848 ? _VirtualDom_applyEvents(domNode, eventNode, value)
2849 :
2850 key === 'a3'
2851 ? _VirtualDom_applyAttrs(domNode, value)
2852 :
2853 key === 'a4'
2854 ? _VirtualDom_applyAttrsNS(domNode, value)
2855 :
2856 ((key !== 'value' && key !== 'checked') || domNode[key] !== value) && (domNode[key] = value);
2857 }
2858}
2859
2860
2861
2862// APPLY STYLES
2863
2864
2865function _VirtualDom_applyStyles(domNode, styles)
2866{
2867 var domNodeStyle = domNode.style;
2868
2869 for (var key in styles)
2870 {
2871 domNodeStyle[key] = styles[key];
2872 }
2873}
2874
2875
2876
2877// APPLY ATTRS
2878
2879
2880function _VirtualDom_applyAttrs(domNode, attrs)
2881{
2882 for (var key in attrs)
2883 {
2884 var value = attrs[key];
2885 typeof value !== 'undefined'
2886 ? domNode.setAttribute(key, value)
2887 : domNode.removeAttribute(key);
2888 }
2889}
2890
2891
2892
2893// APPLY NAMESPACED ATTRS
2894
2895
2896function _VirtualDom_applyAttrsNS(domNode, nsAttrs)
2897{
2898 for (var key in nsAttrs)
2899 {
2900 var pair = nsAttrs[key];
2901 var namespace = pair.f;
2902 var value = pair.o;
2903
2904 typeof value !== 'undefined'
2905 ? domNode.setAttributeNS(namespace, key, value)
2906 : domNode.removeAttributeNS(namespace, key);
2907 }
2908}
2909
2910
2911
2912// APPLY EVENTS
2913
2914
2915function _VirtualDom_applyEvents(domNode, eventNode, events)
2916{
2917 var allCallbacks = domNode.elmFs || (domNode.elmFs = {});
2918
2919 for (var key in events)
2920 {
2921 var newHandler = events[key];
2922 var oldCallback = allCallbacks[key];
2923
2924 if (!newHandler)
2925 {
2926 domNode.removeEventListener(key, oldCallback);
2927 allCallbacks[key] = undefined;
2928 continue;
2929 }
2930
2931 if (oldCallback)
2932 {
2933 var oldHandler = oldCallback.q;
2934 if (oldHandler.$ === newHandler.$)
2935 {
2936 oldCallback.q = newHandler;
2937 continue;
2938 }
2939 domNode.removeEventListener(key, oldCallback);
2940 }
2941
2942 oldCallback = _VirtualDom_makeCallback(eventNode, newHandler);
2943 domNode.addEventListener(key, oldCallback,
2944 _VirtualDom_passiveSupported
2945 && { passive: $elm$virtual_dom$VirtualDom$toHandlerInt(newHandler) < 2 }
2946 );
2947 allCallbacks[key] = oldCallback;
2948 }
2949}
2950
2951
2952
2953// PASSIVE EVENTS
2954
2955
2956var _VirtualDom_passiveSupported;
2957
2958try
2959{
2960 window.addEventListener('t', null, Object.defineProperty({}, 'passive', {
2961 get: function() { _VirtualDom_passiveSupported = true; }
2962 }));
2963}
2964catch(e) {}
2965
2966
2967
2968// EVENT HANDLERS
2969
2970
2971function _VirtualDom_makeCallback(eventNode, initialHandler)
2972{
2973 function callback(event)
2974 {
2975 var handler = callback.q;
2976 var result = _Json_runHelp(handler.a, event);
2977
2978 if (!$elm$core$Result$isOk(result))
2979 {
2980 return;
2981 }
2982
2983 var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler);
2984
2985 // 0 = Normal
2986 // 1 = MayStopPropagation
2987 // 2 = MayPreventDefault
2988 // 3 = Custom
2989
2990 var value = result.a;
2991 var message = !tag ? value : tag < 3 ? value.a : value.message;
2992 var stopPropagation = tag == 1 ? value.b : tag == 3 && value.stopPropagation;
2993 var currentEventNode = (
2994 stopPropagation && event.stopPropagation(),
2995 (tag == 2 ? value.b : tag == 3 && value.preventDefault) && event.preventDefault(),
2996 eventNode
2997 );
2998 var tagger;
2999 var i;
3000 while (tagger = currentEventNode.j)
3001 {
3002 if (typeof tagger == 'function')
3003 {
3004 message = tagger(message);
3005 }
3006 else
3007 {
3008 for (var i = tagger.length; i--; )
3009 {
3010 message = tagger[i](message);
3011 }
3012 }
3013 currentEventNode = currentEventNode.p;
3014 }
3015 currentEventNode(message, stopPropagation); // stopPropagation implies isSync
3016 }
3017
3018 callback.q = initialHandler;
3019
3020 return callback;
3021}
3022
3023function _VirtualDom_equalEvents(x, y)
3024{
3025 return x.$ == y.$ && _Json_equality(x.a, y.a);
3026}
3027
3028
3029
3030// DIFF
3031
3032
3033// TODO: Should we do patches like in iOS?
3034//
3035// type Patch
3036// = At Int Patch
3037// | Batch (List Patch)
3038// | Change ...
3039//
3040// How could it not be better?
3041//
3042function _VirtualDom_diff(x, y)
3043{
3044 var patches = [];
3045 _VirtualDom_diffHelp(x, y, patches, 0);
3046 return patches;
3047}
3048
3049
3050function _VirtualDom_pushPatch(patches, type, index, data)
3051{
3052 var patch = {
3053 $: type,
3054 r: index,
3055 s: data,
3056 t: undefined,
3057 u: undefined
3058 };
3059 patches.push(patch);
3060 return patch;
3061}
3062
3063
3064function _VirtualDom_diffHelp(x, y, patches, index)
3065{
3066 if (x === y)
3067 {
3068 return;
3069 }
3070
3071 var xType = x.$;
3072 var yType = y.$;
3073
3074 // Bail if you run into different types of nodes. Implies that the
3075 // structure has changed significantly and it's not worth a diff.
3076 if (xType !== yType)
3077 {
3078 if (xType === 1 && yType === 2)
3079 {
3080 y = _VirtualDom_dekey(y);
3081 yType = 1;
3082 }
3083 else
3084 {
3085 _VirtualDom_pushPatch(patches, 0, index, y);
3086 return;
3087 }
3088 }
3089
3090 // Now we know that both nodes are the same $.
3091 switch (yType)
3092 {
3093 case 5:
3094 var xRefs = x.l;
3095 var yRefs = y.l;
3096 var i = xRefs.length;
3097 var same = i === yRefs.length;
3098 while (same && i--)
3099 {
3100 same = xRefs[i] === yRefs[i];
3101 }
3102 if (same)
3103 {
3104 y.k = x.k;
3105 return;
3106 }
3107 y.k = y.m();
3108 var subPatches = [];
3109 _VirtualDom_diffHelp(x.k, y.k, subPatches, 0);
3110 subPatches.length > 0 && _VirtualDom_pushPatch(patches, 1, index, subPatches);
3111 return;
3112
3113 case 4:
3114 // gather nested taggers
3115 var xTaggers = x.j;
3116 var yTaggers = y.j;
3117 var nesting = false;
3118
3119 var xSubNode = x.k;
3120 while (xSubNode.$ === 4)
3121 {
3122 nesting = true;
3123
3124 typeof xTaggers !== 'object'
3125 ? xTaggers = [xTaggers, xSubNode.j]
3126 : xTaggers.push(xSubNode.j);
3127
3128 xSubNode = xSubNode.k;
3129 }
3130
3131 var ySubNode = y.k;
3132 while (ySubNode.$ === 4)
3133 {
3134 nesting = true;
3135
3136 typeof yTaggers !== 'object'
3137 ? yTaggers = [yTaggers, ySubNode.j]
3138 : yTaggers.push(ySubNode.j);
3139
3140 ySubNode = ySubNode.k;
3141 }
3142
3143 // Just bail if different numbers of taggers. This implies the
3144 // structure of the virtual DOM has changed.
3145 if (nesting && xTaggers.length !== yTaggers.length)
3146 {
3147 _VirtualDom_pushPatch(patches, 0, index, y);
3148 return;
3149 }
3150
3151 // check if taggers are "the same"
3152 if (nesting ? !_VirtualDom_pairwiseRefEqual(xTaggers, yTaggers) : xTaggers !== yTaggers)
3153 {
3154 _VirtualDom_pushPatch(patches, 2, index, yTaggers);
3155 }
3156
3157 // diff everything below the taggers
3158 _VirtualDom_diffHelp(xSubNode, ySubNode, patches, index + 1);
3159 return;
3160
3161 case 0:
3162 if (x.a !== y.a)
3163 {
3164 _VirtualDom_pushPatch(patches, 3, index, y.a);
3165 }
3166 return;
3167
3168 case 1:
3169 _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKids);
3170 return;
3171
3172 case 2:
3173 _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKeyedKids);
3174 return;
3175
3176 case 3:
3177 if (x.h !== y.h)
3178 {
3179 _VirtualDom_pushPatch(patches, 0, index, y);
3180 return;
3181 }
3182
3183 var factsDiff = _VirtualDom_diffFacts(x.d, y.d);
3184 factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);
3185
3186 var patch = y.i(x.g, y.g);
3187 patch && _VirtualDom_pushPatch(patches, 5, index, patch);
3188
3189 return;
3190 }
3191}
3192
3193// assumes the incoming arrays are the same length
3194function _VirtualDom_pairwiseRefEqual(as, bs)
3195{
3196 for (var i = 0; i < as.length; i++)
3197 {
3198 if (as[i] !== bs[i])
3199 {
3200 return false;
3201 }
3202 }
3203
3204 return true;
3205}
3206
3207function _VirtualDom_diffNodes(x, y, patches, index, diffKids)
3208{
3209 // Bail if obvious indicators have changed. Implies more serious
3210 // structural changes such that it's not worth it to diff.
3211 if (x.c !== y.c || x.f !== y.f)
3212 {
3213 _VirtualDom_pushPatch(patches, 0, index, y);
3214 return;
3215 }
3216
3217 var factsDiff = _VirtualDom_diffFacts(x.d, y.d);
3218 factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);
3219
3220 diffKids(x, y, patches, index);
3221}
3222
3223
3224
3225// DIFF FACTS
3226
3227
3228// TODO Instead of creating a new diff object, it's possible to just test if
3229// there *is* a diff. During the actual patch, do the diff again and make the
3230// modifications directly. This way, there's no new allocations. Worth it?
3231function _VirtualDom_diffFacts(x, y, category)
3232{
3233 var diff;
3234
3235 // look for changes and removals
3236 for (var xKey in x)
3237 {
3238 if (xKey === 'a1' || xKey === 'a0' || xKey === 'a3' || xKey === 'a4')
3239 {
3240 var subDiff = _VirtualDom_diffFacts(x[xKey], y[xKey] || {}, xKey);
3241 if (subDiff)
3242 {
3243 diff = diff || {};
3244 diff[xKey] = subDiff;
3245 }
3246 continue;
3247 }
3248
3249 // remove if not in the new facts
3250 if (!(xKey in y))
3251 {
3252 diff = diff || {};
3253 diff[xKey] =
3254 !category
3255 ? (typeof x[xKey] === 'string' ? '' : null)
3256 :
3257 (category === 'a1')
3258 ? ''
3259 :
3260 (category === 'a0' || category === 'a3')
3261 ? undefined
3262 :
3263 { f: x[xKey].f, o: undefined };
3264
3265 continue;
3266 }
3267
3268 var xValue = x[xKey];
3269 var yValue = y[xKey];
3270
3271 // reference equal, so don't worry about it
3272 if (xValue === yValue && xKey !== 'value' && xKey !== 'checked'
3273 || category === 'a0' && _VirtualDom_equalEvents(xValue, yValue))
3274 {
3275 continue;
3276 }
3277
3278 diff = diff || {};
3279 diff[xKey] = yValue;
3280 }
3281
3282 // add new stuff
3283 for (var yKey in y)
3284 {
3285 if (!(yKey in x))
3286 {
3287 diff = diff || {};
3288 diff[yKey] = y[yKey];
3289 }
3290 }
3291
3292 return diff;
3293}
3294
3295
3296
3297// DIFF KIDS
3298
3299
3300function _VirtualDom_diffKids(xParent, yParent, patches, index)
3301{
3302 var xKids = xParent.e;
3303 var yKids = yParent.e;
3304
3305 var xLen = xKids.length;
3306 var yLen = yKids.length;
3307
3308 // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS
3309
3310 if (xLen > yLen)
3311 {
3312 _VirtualDom_pushPatch(patches, 6, index, {
3313 v: yLen,
3314 i: xLen - yLen
3315 });
3316 }
3317 else if (xLen < yLen)
3318 {
3319 _VirtualDom_pushPatch(patches, 7, index, {
3320 v: xLen,
3321 e: yKids
3322 });
3323 }
3324
3325 // PAIRWISE DIFF EVERYTHING ELSE
3326
3327 for (var minLen = xLen < yLen ? xLen : yLen, i = 0; i < minLen; i++)
3328 {
3329 var xKid = xKids[i];
3330 _VirtualDom_diffHelp(xKid, yKids[i], patches, ++index);
3331 index += xKid.b || 0;
3332 }
3333}
3334
3335
3336
3337// KEYED DIFF
3338
3339
3340function _VirtualDom_diffKeyedKids(xParent, yParent, patches, rootIndex)
3341{
3342 var localPatches = [];
3343
3344 var changes = {}; // Dict String Entry
3345 var inserts = []; // Array { index : Int, entry : Entry }
3346 // type Entry = { tag : String, vnode : VNode, index : Int, data : _ }
3347
3348 var xKids = xParent.e;
3349 var yKids = yParent.e;
3350 var xLen = xKids.length;
3351 var yLen = yKids.length;
3352 var xIndex = 0;
3353 var yIndex = 0;
3354
3355 var index = rootIndex;
3356
3357 while (xIndex < xLen && yIndex < yLen)
3358 {
3359 var x = xKids[xIndex];
3360 var y = yKids[yIndex];
3361
3362 var xKey = x.a;
3363 var yKey = y.a;
3364 var xNode = x.b;
3365 var yNode = y.b;
3366
3367 var newMatch = undefined;
3368 var oldMatch = undefined;
3369
3370 // check if keys match
3371
3372 if (xKey === yKey)
3373 {
3374 index++;
3375 _VirtualDom_diffHelp(xNode, yNode, localPatches, index);
3376 index += xNode.b || 0;
3377
3378 xIndex++;
3379 yIndex++;
3380 continue;
3381 }
3382
3383 // look ahead 1 to detect insertions and removals.
3384
3385 var xNext = xKids[xIndex + 1];
3386 var yNext = yKids[yIndex + 1];
3387
3388 if (xNext)
3389 {
3390 var xNextKey = xNext.a;
3391 var xNextNode = xNext.b;
3392 oldMatch = yKey === xNextKey;
3393 }
3394
3395 if (yNext)
3396 {
3397 var yNextKey = yNext.a;
3398 var yNextNode = yNext.b;
3399 newMatch = xKey === yNextKey;
3400 }
3401
3402
3403 // swap x and y
3404 if (newMatch && oldMatch)
3405 {
3406 index++;
3407 _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index);
3408 _VirtualDom_insertNode(changes, localPatches, xKey, yNode, yIndex, inserts);
3409 index += xNode.b || 0;
3410
3411 index++;
3412 _VirtualDom_removeNode(changes, localPatches, xKey, xNextNode, index);
3413 index += xNextNode.b || 0;
3414
3415 xIndex += 2;
3416 yIndex += 2;
3417 continue;
3418 }
3419
3420 // insert y
3421 if (newMatch)
3422 {
3423 index++;
3424 _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts);
3425 _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index);
3426 index += xNode.b || 0;
3427
3428 xIndex += 1;
3429 yIndex += 2;
3430 continue;
3431 }
3432
3433 // remove x
3434 if (oldMatch)
3435 {
3436 index++;
3437 _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index);
3438 index += xNode.b || 0;
3439
3440 index++;
3441 _VirtualDom_diffHelp(xNextNode, yNode, localPatches, index);
3442 index += xNextNode.b || 0;
3443
3444 xIndex += 2;
3445 yIndex += 1;
3446 continue;
3447 }
3448
3449 // remove x, insert y
3450 if (xNext && xNextKey === yNextKey)
3451 {
3452 index++;
3453 _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index);
3454 _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts);
3455 index += xNode.b || 0;
3456
3457 index++;
3458 _VirtualDom_diffHelp(xNextNode, yNextNode, localPatches, index);
3459 index += xNextNode.b || 0;
3460
3461 xIndex += 2;
3462 yIndex += 2;
3463 continue;
3464 }
3465
3466 break;
3467 }
3468
3469 // eat up any remaining nodes with removeNode and insertNode
3470
3471 while (xIndex < xLen)
3472 {
3473 index++;
3474 var x = xKids[xIndex];
3475 var xNode = x.b;
3476 _VirtualDom_removeNode(changes, localPatches, x.a, xNode, index);
3477 index += xNode.b || 0;
3478 xIndex++;
3479 }
3480
3481 while (yIndex < yLen)
3482 {
3483 var endInserts = endInserts || [];
3484 var y = yKids[yIndex];
3485 _VirtualDom_insertNode(changes, localPatches, y.a, y.b, undefined, endInserts);
3486 yIndex++;
3487 }
3488
3489 if (localPatches.length > 0 || inserts.length > 0 || endInserts)
3490 {
3491 _VirtualDom_pushPatch(patches, 8, rootIndex, {
3492 w: localPatches,
3493 x: inserts,
3494 y: endInserts
3495 });
3496 }
3497}
3498
3499
3500
3501// CHANGES FROM KEYED DIFF
3502
3503
3504var _VirtualDom_POSTFIX = '_elmW6BL';
3505
3506
3507function _VirtualDom_insertNode(changes, localPatches, key, vnode, yIndex, inserts)
3508{
3509 var entry = changes[key];
3510
3511 // never seen this key before
3512 if (!entry)
3513 {
3514 entry = {
3515 c: 0,
3516 z: vnode,
3517 r: yIndex,
3518 s: undefined
3519 };
3520
3521 inserts.push({ r: yIndex, A: entry });
3522 changes[key] = entry;
3523
3524 return;
3525 }
3526
3527 // this key was removed earlier, a match!
3528 if (entry.c === 1)
3529 {
3530 inserts.push({ r: yIndex, A: entry });
3531
3532 entry.c = 2;
3533 var subPatches = [];
3534 _VirtualDom_diffHelp(entry.z, vnode, subPatches, entry.r);
3535 entry.r = yIndex;
3536 entry.s.s = {
3537 w: subPatches,
3538 A: entry
3539 };
3540
3541 return;
3542 }
3543
3544 // this key has already been inserted or moved, a duplicate!
3545 _VirtualDom_insertNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, yIndex, inserts);
3546}
3547
3548
3549function _VirtualDom_removeNode(changes, localPatches, key, vnode, index)
3550{
3551 var entry = changes[key];
3552
3553 // never seen this key before
3554 if (!entry)
3555 {
3556 var patch = _VirtualDom_pushPatch(localPatches, 9, index, undefined);
3557
3558 changes[key] = {
3559 c: 1,
3560 z: vnode,
3561 r: index,
3562 s: patch
3563 };
3564
3565 return;
3566 }
3567
3568 // this key was inserted earlier, a match!
3569 if (entry.c === 0)
3570 {
3571 entry.c = 2;
3572 var subPatches = [];
3573 _VirtualDom_diffHelp(vnode, entry.z, subPatches, index);
3574
3575 _VirtualDom_pushPatch(localPatches, 9, index, {
3576 w: subPatches,
3577 A: entry
3578 });
3579
3580 return;
3581 }
3582
3583 // this key has already been removed or moved, a duplicate!
3584 _VirtualDom_removeNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, index);
3585}
3586
3587
3588
3589// ADD DOM NODES
3590//
3591// Each DOM node has an "index" assigned in order of traversal. It is important
3592// to minimize our crawl over the actual DOM, so these indexes (along with the
3593// descendantsCount of virtual nodes) let us skip touching entire subtrees of
3594// the DOM if we know there are no patches there.
3595
3596
3597function _VirtualDom_addDomNodes(domNode, vNode, patches, eventNode)
3598{
3599 _VirtualDom_addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.b, eventNode);
3600}
3601
3602
3603// assumes `patches` is non-empty and indexes increase monotonically.
3604function _VirtualDom_addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode)
3605{
3606 var patch = patches[i];
3607 var index = patch.r;
3608
3609 while (index === low)
3610 {
3611 var patchType = patch.$;
3612
3613 if (patchType === 1)
3614 {
3615 _VirtualDom_addDomNodes(domNode, vNode.k, patch.s, eventNode);
3616 }
3617 else if (patchType === 8)
3618 {
3619 patch.t = domNode;
3620 patch.u = eventNode;
3621
3622 var subPatches = patch.s.w;
3623 if (subPatches.length > 0)
3624 {
3625 _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
3626 }
3627 }
3628 else if (patchType === 9)
3629 {
3630 patch.t = domNode;
3631 patch.u = eventNode;
3632
3633 var data = patch.s;
3634 if (data)
3635 {
3636 data.A.s = domNode;
3637 var subPatches = data.w;
3638 if (subPatches.length > 0)
3639 {
3640 _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
3641 }
3642 }
3643 }
3644 else
3645 {
3646 patch.t = domNode;
3647 patch.u = eventNode;
3648 }
3649
3650 i++;
3651
3652 if (!(patch = patches[i]) || (index = patch.r) > high)
3653 {
3654 return i;
3655 }
3656 }
3657
3658 var tag = vNode.$;
3659
3660 if (tag === 4)
3661 {
3662 var subNode = vNode.k;
3663
3664 while (subNode.$ === 4)
3665 {
3666 subNode = subNode.k;
3667 }
3668
3669 return _VirtualDom_addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref);
3670 }
3671
3672 // tag must be 1 or 2 at this point
3673
3674 var vKids = vNode.e;
3675 var childNodes = domNode.childNodes;
3676 for (var j = 0; j < vKids.length; j++)
3677 {
3678 low++;
3679 var vKid = tag === 1 ? vKids[j] : vKids[j].b;
3680 var nextLow = low + (vKid.b || 0);
3681 if (low <= index && index <= nextLow)
3682 {
3683 i = _VirtualDom_addDomNodesHelp(childNodes[j], vKid, patches, i, low, nextLow, eventNode);
3684 if (!(patch = patches[i]) || (index = patch.r) > high)
3685 {
3686 return i;
3687 }
3688 }
3689 low = nextLow;
3690 }
3691 return i;
3692}
3693
3694
3695
3696// APPLY PATCHES
3697
3698
3699function _VirtualDom_applyPatches(rootDomNode, oldVirtualNode, patches, eventNode)
3700{
3701 if (patches.length === 0)
3702 {
3703 return rootDomNode;
3704 }
3705
3706 _VirtualDom_addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode);
3707 return _VirtualDom_applyPatchesHelp(rootDomNode, patches);
3708}
3709
3710function _VirtualDom_applyPatchesHelp(rootDomNode, patches)
3711{
3712 for (var i = 0; i < patches.length; i++)
3713 {
3714 var patch = patches[i];
3715 var localDomNode = patch.t
3716 var newNode = _VirtualDom_applyPatch(localDomNode, patch);
3717 if (localDomNode === rootDomNode)
3718 {
3719 rootDomNode = newNode;
3720 }
3721 }
3722 return rootDomNode;
3723}
3724
3725function _VirtualDom_applyPatch(domNode, patch)
3726{
3727 switch (patch.$)
3728 {
3729 case 0:
3730 return _VirtualDom_applyPatchRedraw(domNode, patch.s, patch.u);
3731
3732 case 4:
3733 _VirtualDom_applyFacts(domNode, patch.u, patch.s);
3734 return domNode;
3735
3736 case 3:
3737 domNode.replaceData(0, domNode.length, patch.s);
3738 return domNode;
3739
3740 case 1:
3741 return _VirtualDom_applyPatchesHelp(domNode, patch.s);
3742
3743 case 2:
3744 if (domNode.elm_event_node_ref)
3745 {
3746 domNode.elm_event_node_ref.j = patch.s;
3747 }
3748 else
3749 {
3750 domNode.elm_event_node_ref = { j: patch.s, p: patch.u };
3751 }
3752 return domNode;
3753
3754 case 6:
3755 var data = patch.s;
3756 for (var i = 0; i < data.i; i++)
3757 {
3758 domNode.removeChild(domNode.childNodes[data.v]);
3759 }
3760 return domNode;
3761
3762 case 7:
3763 var data = patch.s;
3764 var kids = data.e;
3765 var i = data.v;
3766 var theEnd = domNode.childNodes[i];
3767 for (; i < kids.length; i++)
3768 {
3769 domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd);
3770 }
3771 return domNode;
3772
3773 case 9:
3774 var data = patch.s;
3775 if (!data)
3776 {
3777 domNode.parentNode.removeChild(domNode);
3778 return domNode;
3779 }
3780 var entry = data.A;
3781 if (typeof entry.r !== 'undefined')
3782 {
3783 domNode.parentNode.removeChild(domNode);
3784 }
3785 entry.s = _VirtualDom_applyPatchesHelp(domNode, data.w);
3786 return domNode;
3787
3788 case 8:
3789 return _VirtualDom_applyPatchReorder(domNode, patch);
3790
3791 case 5:
3792 return patch.s(domNode);
3793
3794 default:
3795 _Debug_crash(10); // 'Ran into an unknown patch!'
3796 }
3797}
3798
3799
3800function _VirtualDom_applyPatchRedraw(domNode, vNode, eventNode)
3801{
3802 var parentNode = domNode.parentNode;
3803 var newNode = _VirtualDom_render(vNode, eventNode);
3804
3805 if (!newNode.elm_event_node_ref)
3806 {
3807 newNode.elm_event_node_ref = domNode.elm_event_node_ref;
3808 }
3809
3810 if (parentNode && newNode !== domNode)
3811 {
3812 parentNode.replaceChild(newNode, domNode);
3813 }
3814 return newNode;
3815}
3816
3817
3818function _VirtualDom_applyPatchReorder(domNode, patch)
3819{
3820 var data = patch.s;
3821
3822 // remove end inserts
3823 var frag = _VirtualDom_applyPatchReorderEndInsertsHelp(data.y, patch);
3824
3825 // removals
3826 domNode = _VirtualDom_applyPatchesHelp(domNode, data.w);
3827
3828 // inserts
3829 var inserts = data.x;
3830 for (var i = 0; i < inserts.length; i++)
3831 {
3832 var insert = inserts[i];
3833 var entry = insert.A;
3834 var node = entry.c === 2
3835 ? entry.s
3836 : _VirtualDom_render(entry.z, patch.u);
3837 domNode.insertBefore(node, domNode.childNodes[insert.r]);
3838 }
3839
3840 // add end inserts
3841 if (frag)
3842 {
3843 _VirtualDom_appendChild(domNode, frag);
3844 }
3845
3846 return domNode;
3847}
3848
3849
3850function _VirtualDom_applyPatchReorderEndInsertsHelp(endInserts, patch)
3851{
3852 if (!endInserts)
3853 {
3854 return;
3855 }
3856
3857 var frag = _VirtualDom_doc.createDocumentFragment();
3858 for (var i = 0; i < endInserts.length; i++)
3859 {
3860 var insert = endInserts[i];
3861 var entry = insert.A;
3862 _VirtualDom_appendChild(frag, entry.c === 2
3863 ? entry.s
3864 : _VirtualDom_render(entry.z, patch.u)
3865 );
3866 }
3867 return frag;
3868}
3869
3870
3871function _VirtualDom_virtualize(node)
3872{
3873 // TEXT NODES
3874
3875 if (node.nodeType === 3)
3876 {
3877 return _VirtualDom_text(node.textContent);
3878 }
3879
3880
3881 // WEIRD NODES
3882
3883 if (node.nodeType !== 1)
3884 {
3885 return _VirtualDom_text('');
3886 }
3887
3888
3889 // ELEMENT NODES
3890
3891 var attrList = _List_Nil;
3892 var attrs = node.attributes;
3893 for (var i = attrs.length; i--; )
3894 {
3895 var attr = attrs[i];
3896 var name = attr.name;
3897 var value = attr.value;
3898 attrList = _List_Cons( A2(_VirtualDom_attribute, name, value), attrList );
3899 }
3900
3901 var tag = node.tagName.toLowerCase();
3902 var kidList = _List_Nil;
3903 var kids = node.childNodes;
3904
3905 for (var i = kids.length; i--; )
3906 {
3907 kidList = _List_Cons(_VirtualDom_virtualize(kids[i]), kidList);
3908 }
3909 return A3(_VirtualDom_node, tag, attrList, kidList);
3910}
3911
3912function _VirtualDom_dekey(keyedNode)
3913{
3914 var keyedKids = keyedNode.e;
3915 var len = keyedKids.length;
3916 var kids = new Array(len);
3917 for (var i = 0; i < len; i++)
3918 {
3919 kids[i] = keyedKids[i].b;
3920 }
3921
3922 return {
3923 $: 1,
3924 c: keyedNode.c,
3925 d: keyedNode.d,
3926 e: kids,
3927 f: keyedNode.f,
3928 b: keyedNode.b
3929 };
3930}
3931
3932
3933
3934
3935// ELEMENT
3936
3937
3938var _Debugger_element;
3939
3940var _Browser_element = _Debugger_element || F4(function(impl, flagDecoder, debugMetadata, args)
3941{
3942 return _Platform_initialize(
3943 flagDecoder,
3944 args,
3945 impl.init,
3946 impl.update,
3947 impl.subscriptions,
3948 function(sendToApp, initialModel) {
3949 var view = impl.view;
3950 /**_UNUSED/
3951 var domNode = args['node'];
3952 //*/
3953 /**/
3954 var domNode = args && args['node'] ? args['node'] : _Debug_crash(0);
3955 //*/
3956 var currNode = _VirtualDom_virtualize(domNode);
3957
3958 return _Browser_makeAnimator(initialModel, function(model)
3959 {
3960 var nextNode = view(model);
3961 var patches = _VirtualDom_diff(currNode, nextNode);
3962 domNode = _VirtualDom_applyPatches(domNode, currNode, patches, sendToApp);
3963 currNode = nextNode;
3964 });
3965 }
3966 );
3967});
3968
3969
3970
3971// DOCUMENT
3972
3973
3974var _Debugger_document;
3975
3976var _Browser_document = _Debugger_document || F4(function(impl, flagDecoder, debugMetadata, args)
3977{
3978 return _Platform_initialize(
3979 flagDecoder,
3980 args,
3981 impl.init,
3982 impl.update,
3983 impl.subscriptions,
3984 function(sendToApp, initialModel) {
3985 var divertHrefToApp = impl.setup && impl.setup(sendToApp)
3986 var view = impl.view;
3987 var title = _VirtualDom_doc.title;
3988 var bodyNode = _VirtualDom_doc.body;
3989 var currNode = _VirtualDom_virtualize(bodyNode);
3990 return _Browser_makeAnimator(initialModel, function(model)
3991 {
3992 _VirtualDom_divertHrefToApp = divertHrefToApp;
3993 var doc = view(model);
3994 var nextNode = _VirtualDom_node('body')(_List_Nil)(doc.body);
3995 var patches = _VirtualDom_diff(currNode, nextNode);
3996 bodyNode = _VirtualDom_applyPatches(bodyNode, currNode, patches, sendToApp);
3997 currNode = nextNode;
3998 _VirtualDom_divertHrefToApp = 0;
3999 (title !== doc.title) && (_VirtualDom_doc.title = title = doc.title);
4000 });
4001 }
4002 );
4003});
4004
4005
4006
4007// ANIMATION
4008
4009
4010var _Browser_cancelAnimationFrame =
4011 typeof cancelAnimationFrame !== 'undefined'
4012 ? cancelAnimationFrame
4013 : function(id) { clearTimeout(id); };
4014
4015var _Browser_requestAnimationFrame =
4016 typeof requestAnimationFrame !== 'undefined'
4017 ? requestAnimationFrame
4018 : function(callback) { return setTimeout(callback, 1000 / 60); };
4019
4020
4021function _Browser_makeAnimator(model, draw)
4022{
4023 draw(model);
4024
4025 var state = 0;
4026
4027 function updateIfNeeded()
4028 {
4029 state = state === 1
4030 ? 0
4031 : ( _Browser_requestAnimationFrame(updateIfNeeded), draw(model), 1 );
4032 }
4033
4034 return function(nextModel, isSync)
4035 {
4036 model = nextModel;
4037
4038 isSync
4039 ? ( draw(model),
4040 state === 2 && (state = 1)
4041 )
4042 : ( state === 0 && _Browser_requestAnimationFrame(updateIfNeeded),
4043 state = 2
4044 );
4045 };
4046}
4047
4048
4049
4050// APPLICATION
4051
4052
4053function _Browser_application(impl)
4054{
4055 var onUrlChange = impl.onUrlChange;
4056 var onUrlRequest = impl.onUrlRequest;
4057 var key = function() { key.a(onUrlChange(_Browser_getUrl())); };
4058
4059 return _Browser_document({
4060 setup: function(sendToApp)
4061 {
4062 key.a = sendToApp;
4063 _Browser_window.addEventListener('popstate', key);
4064 _Browser_window.navigator.userAgent.indexOf('Trident') < 0 || _Browser_window.addEventListener('hashchange', key);
4065
4066 return F2(function(domNode, event)
4067 {
4068 if (!event.ctrlKey && !event.metaKey && !event.shiftKey && event.button < 1 && !domNode.target && !domNode.hasAttribute('download'))
4069 {
4070 event.preventDefault();
4071 var href = domNode.href;
4072 var curr = _Browser_getUrl();
4073 var next = $elm$url$Url$fromString(href).a;
4074 sendToApp(onUrlRequest(
4075 (next
4076 && curr.protocol === next.protocol
4077 && curr.host === next.host
4078 && curr.port_.a === next.port_.a
4079 )
4080 ? $elm$browser$Browser$Internal(next)
4081 : $elm$browser$Browser$External(href)
4082 ));
4083 }
4084 });
4085 },
4086 init: function(flags)
4087 {
4088 return A3(impl.init, flags, _Browser_getUrl(), key);
4089 },
4090 view: impl.view,
4091 update: impl.update,
4092 subscriptions: impl.subscriptions
4093 });
4094}
4095
4096function _Browser_getUrl()
4097{
4098 return $elm$url$Url$fromString(_VirtualDom_doc.location.href).a || _Debug_crash(1);
4099}
4100
4101var _Browser_go = F2(function(key, n)
4102{
4103 return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
4104 n && history.go(n);
4105 key();
4106 }));
4107});
4108
4109var _Browser_pushUrl = F2(function(key, url)
4110{
4111 return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
4112 history.pushState({}, '', url);
4113 key();
4114 }));
4115});
4116
4117var _Browser_replaceUrl = F2(function(key, url)
4118{
4119 return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
4120 history.replaceState({}, '', url);
4121 key();
4122 }));
4123});
4124
4125
4126
4127// GLOBAL EVENTS
4128
4129
4130var _Browser_fakeNode = { addEventListener: function() {}, removeEventListener: function() {} };
4131var _Browser_doc = typeof document !== 'undefined' ? document : _Browser_fakeNode;
4132var _Browser_window = typeof window !== 'undefined' ? window : _Browser_fakeNode;
4133
4134var _Browser_on = F3(function(node, eventName, sendToSelf)
4135{
4136 return _Scheduler_spawn(_Scheduler_binding(function(callback)
4137 {
4138 function handler(event) { _Scheduler_rawSpawn(sendToSelf(event)); }
4139 node.addEventListener(eventName, handler, _VirtualDom_passiveSupported && { passive: true });
4140 return function() { node.removeEventListener(eventName, handler); };
4141 }));
4142});
4143
4144var _Browser_decodeEvent = F2(function(decoder, event)
4145{
4146 var result = _Json_runHelp(decoder, event);
4147 return $elm$core$Result$isOk(result) ? $elm$core$Maybe$Just(result.a) : $elm$core$Maybe$Nothing;
4148});
4149
4150
4151
4152// PAGE VISIBILITY
4153
4154
4155function _Browser_visibilityInfo()
4156{
4157 return (typeof _VirtualDom_doc.hidden !== 'undefined')
4158 ? { hidden: 'hidden', change: 'visibilitychange' }
4159 :
4160 (typeof _VirtualDom_doc.mozHidden !== 'undefined')
4161 ? { hidden: 'mozHidden', change: 'mozvisibilitychange' }
4162 :
4163 (typeof _VirtualDom_doc.msHidden !== 'undefined')
4164 ? { hidden: 'msHidden', change: 'msvisibilitychange' }
4165 :
4166 (typeof _VirtualDom_doc.webkitHidden !== 'undefined')
4167 ? { hidden: 'webkitHidden', change: 'webkitvisibilitychange' }
4168 : { hidden: 'hidden', change: 'visibilitychange' };
4169}
4170
4171
4172
4173// ANIMATION FRAMES
4174
4175
4176function _Browser_rAF()
4177{
4178 return _Scheduler_binding(function(callback)
4179 {
4180 var id = _Browser_requestAnimationFrame(function() {
4181 callback(_Scheduler_succeed(Date.now()));
4182 });
4183
4184 return function() {
4185 _Browser_cancelAnimationFrame(id);
4186 };
4187 });
4188}
4189
4190
4191function _Browser_now()
4192{
4193 return _Scheduler_binding(function(callback)
4194 {
4195 callback(_Scheduler_succeed(Date.now()));
4196 });
4197}
4198
4199
4200
4201// DOM STUFF
4202
4203
4204function _Browser_withNode(id, doStuff)
4205{
4206 return _Scheduler_binding(function(callback)
4207 {
4208 _Browser_requestAnimationFrame(function() {
4209 var node = document.getElementById(id);
4210 callback(node
4211 ? _Scheduler_succeed(doStuff(node))
4212 : _Scheduler_fail($elm$browser$Browser$Dom$NotFound(id))
4213 );
4214 });
4215 });
4216}
4217
4218
4219function _Browser_withWindow(doStuff)
4220{
4221 return _Scheduler_binding(function(callback)
4222 {
4223 _Browser_requestAnimationFrame(function() {
4224 callback(_Scheduler_succeed(doStuff()));
4225 });
4226 });
4227}
4228
4229
4230// FOCUS and BLUR
4231
4232
4233var _Browser_call = F2(function(functionName, id)
4234{
4235 return _Browser_withNode(id, function(node) {
4236 node[functionName]();
4237 return _Utils_Tuple0;
4238 });
4239});
4240
4241
4242
4243// WINDOW VIEWPORT
4244
4245
4246function _Browser_getViewport()
4247{
4248 return {
4249 scene: _Browser_getScene(),
4250 viewport: {
4251 x: _Browser_window.pageXOffset,
4252 y: _Browser_window.pageYOffset,
4253 width: _Browser_doc.documentElement.clientWidth,
4254 height: _Browser_doc.documentElement.clientHeight
4255 }
4256 };
4257}
4258
4259function _Browser_getScene()
4260{
4261 var body = _Browser_doc.body;
4262 var elem = _Browser_doc.documentElement;
4263 return {
4264 width: Math.max(body.scrollWidth, body.offsetWidth, elem.scrollWidth, elem.offsetWidth, elem.clientWidth),
4265 height: Math.max(body.scrollHeight, body.offsetHeight, elem.scrollHeight, elem.offsetHeight, elem.clientHeight)
4266 };
4267}
4268
4269var _Browser_setViewport = F2(function(x, y)
4270{
4271 return _Browser_withWindow(function()
4272 {
4273 _Browser_window.scroll(x, y);
4274 return _Utils_Tuple0;
4275 });
4276});
4277
4278
4279
4280// ELEMENT VIEWPORT
4281
4282
4283function _Browser_getViewportOf(id)
4284{
4285 return _Browser_withNode(id, function(node)
4286 {
4287 return {
4288 scene: {
4289 width: node.scrollWidth,
4290 height: node.scrollHeight
4291 },
4292 viewport: {
4293 x: node.scrollLeft,
4294 y: node.scrollTop,
4295 width: node.clientWidth,
4296 height: node.clientHeight
4297 }
4298 };
4299 });
4300}
4301
4302
4303var _Browser_setViewportOf = F3(function(id, x, y)
4304{
4305 return _Browser_withNode(id, function(node)
4306 {
4307 node.scrollLeft = x;
4308 node.scrollTop = y;
4309 return _Utils_Tuple0;
4310 });
4311});
4312
4313
4314
4315// ELEMENT
4316
4317
4318function _Browser_getElement(id)
4319{
4320 return _Browser_withNode(id, function(node)
4321 {
4322 var rect = node.getBoundingClientRect();
4323 var x = _Browser_window.pageXOffset;
4324 var y = _Browser_window.pageYOffset;
4325 return {
4326 scene: _Browser_getScene(),
4327 viewport: {
4328 x: x,
4329 y: y,
4330 width: _Browser_doc.documentElement.clientWidth,
4331 height: _Browser_doc.documentElement.clientHeight
4332 },
4333 element: {
4334 x: x + rect.left,
4335 y: y + rect.top,
4336 width: rect.width,
4337 height: rect.height
4338 }
4339 };
4340 });
4341}
4342
4343
4344
4345// LOAD and RELOAD
4346
4347
4348function _Browser_reload(skipCache)
4349{
4350 return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback)
4351 {
4352 _VirtualDom_doc.location.reload(skipCache);
4353 }));
4354}
4355
4356function _Browser_load(url)
4357{
4358 return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback)
4359 {
4360 try
4361 {
4362 _Browser_window.location = url;
4363 }
4364 catch(err)
4365 {
4366 // Only Firefox can throw a NS_ERROR_MALFORMED_URI exception here.
4367 // Other browsers reload the page, so let's be consistent about that.
4368 _VirtualDom_doc.location.reload(false);
4369 }
4370 }));
4371}
4372
4373
4374
4375// SEND REQUEST
4376
4377var _Http_toTask = F3(function(router, toTask, request)
4378{
4379 return _Scheduler_binding(function(callback)
4380 {
4381 function done(response) {
4382 callback(toTask(request.expect.a(response)));
4383 }
4384
4385 var xhr = new XMLHttpRequest();
4386 xhr.addEventListener('error', function() { done($elm$http$Http$NetworkError_); });
4387 xhr.addEventListener('timeout', function() { done($elm$http$Http$Timeout_); });
4388 xhr.addEventListener('load', function() { done(_Http_toResponse(request.expect.b, xhr)); });
4389 $elm$core$Maybe$isJust(request.tracker) && _Http_track(router, xhr, request.tracker.a);
4390
4391 try {
4392 xhr.open(request.method, request.url, true);
4393 } catch (e) {
4394 return done($elm$http$Http$BadUrl_(request.url));
4395 }
4396
4397 _Http_configureRequest(xhr, request);
4398
4399 request.body.a && xhr.setRequestHeader('Content-Type', request.body.a);
4400 xhr.send(request.body.b);
4401
4402 return function() { xhr.c = true; xhr.abort(); };
4403 });
4404});
4405
4406
4407// CONFIGURE
4408
4409function _Http_configureRequest(xhr, request)
4410{
4411 for (var headers = request.headers; headers.b; headers = headers.b) // WHILE_CONS
4412 {
4413 xhr.setRequestHeader(headers.a.a, headers.a.b);
4414 }
4415 xhr.timeout = request.timeout.a || 0;
4416 xhr.responseType = request.expect.d;
4417 xhr.withCredentials = request.allowCookiesFromOtherDomains;
4418}
4419
4420
4421// RESPONSES
4422
4423function _Http_toResponse(toBody, xhr)
4424{
4425 return A2(
4426 200 <= xhr.status && xhr.status < 300 ? $elm$http$Http$GoodStatus_ : $elm$http$Http$BadStatus_,
4427 _Http_toMetadata(xhr),
4428 toBody(xhr.response)
4429 );
4430}
4431
4432
4433// METADATA
4434
4435function _Http_toMetadata(xhr)
4436{
4437 return {
4438 url: xhr.responseURL,
4439 statusCode: xhr.status,
4440 statusText: xhr.statusText,
4441 headers: _Http_parseHeaders(xhr.getAllResponseHeaders())
4442 };
4443}
4444
4445
4446// HEADERS
4447
4448function _Http_parseHeaders(rawHeaders)
4449{
4450 if (!rawHeaders)
4451 {
4452 return $elm$core$Dict$empty;
4453 }
4454
4455 var headers = $elm$core$Dict$empty;
4456 var headerPairs = rawHeaders.split('\r\n');
4457 for (var i = headerPairs.length; i--; )
4458 {
4459 var headerPair = headerPairs[i];
4460 var index = headerPair.indexOf(': ');
4461 if (index > 0)
4462 {
4463 var key = headerPair.substring(0, index);
4464 var value = headerPair.substring(index + 2);
4465
4466 headers = A3($elm$core$Dict$update, key, function(oldValue) {
4467 return $elm$core$Maybe$Just($elm$core$Maybe$isJust(oldValue)
4468 ? value + ', ' + oldValue.a
4469 : value
4470 );
4471 }, headers);
4472 }
4473 }
4474 return headers;
4475}
4476
4477
4478// EXPECT
4479
4480var _Http_expect = F3(function(type, toBody, toValue)
4481{
4482 return {
4483 $: 0,
4484 d: type,
4485 b: toBody,
4486 a: toValue
4487 };
4488});
4489
4490var _Http_mapExpect = F2(function(func, expect)
4491{
4492 return {
4493 $: 0,
4494 d: expect.d,
4495 b: expect.b,
4496 a: function(x) { return func(expect.a(x)); }
4497 };
4498});
4499
4500function _Http_toDataView(arrayBuffer)
4501{
4502 return new DataView(arrayBuffer);
4503}
4504
4505
4506// BODY and PARTS
4507
4508var _Http_emptyBody = { $: 0 };
4509var _Http_pair = F2(function(a, b) { return { $: 0, a: a, b: b }; });
4510
4511function _Http_toFormData(parts)
4512{
4513 for (var formData = new FormData(); parts.b; parts = parts.b) // WHILE_CONS
4514 {
4515 var part = parts.a;
4516 formData.append(part.a, part.b);
4517 }
4518 return formData;
4519}
4520
4521var _Http_bytesToBlob = F2(function(mime, bytes)
4522{
4523 return new Blob([bytes], { type: mime });
4524});
4525
4526
4527// PROGRESS
4528
4529function _Http_track(router, xhr, tracker)
4530{
4531 // TODO check out lengthComputable on loadstart event
4532
4533 xhr.upload.addEventListener('progress', function(event) {
4534 if (xhr.c) { return; }
4535 _Scheduler_rawSpawn(A2($elm$core$Platform$sendToSelf, router, _Utils_Tuple2(tracker, $elm$http$Http$Sending({
4536 sent: event.loaded,
4537 size: event.total
4538 }))));
4539 });
4540 xhr.addEventListener('progress', function(event) {
4541 if (xhr.c) { return; }
4542 _Scheduler_rawSpawn(A2($elm$core$Platform$sendToSelf, router, _Utils_Tuple2(tracker, $elm$http$Http$Receiving({
4543 received: event.loaded,
4544 size: event.lengthComputable ? $elm$core$Maybe$Just(event.total) : $elm$core$Maybe$Nothing
4545 }))));
4546 });
4547}
4548
4549function _Url_percentEncode(string)
4550{
4551 return encodeURIComponent(string);
4552}
4553
4554function _Url_percentDecode(string)
4555{
4556 try
4557 {
4558 return $elm$core$Maybe$Just(decodeURIComponent(string));
4559 }
4560 catch (e)
4561 {
4562 return $elm$core$Maybe$Nothing;
4563 }
4564}
4565
4566
4567var _Bitwise_and = F2(function(a, b)
4568{
4569 return a & b;
4570});
4571
4572var _Bitwise_or = F2(function(a, b)
4573{
4574 return a | b;
4575});
4576
4577var _Bitwise_xor = F2(function(a, b)
4578{
4579 return a ^ b;
4580});
4581
4582function _Bitwise_complement(a)
4583{
4584 return ~a;
4585};
4586
4587var _Bitwise_shiftLeftBy = F2(function(offset, a)
4588{
4589 return a << offset;
4590});
4591
4592var _Bitwise_shiftRightBy = F2(function(offset, a)
4593{
4594 return a >> offset;
4595});
4596
4597var _Bitwise_shiftRightZfBy = F2(function(offset, a)
4598{
4599 return a >>> offset;
4600});
4601var $author$project$Main$LinkClicked = function (a) {
4602 return {$: 'LinkClicked', a: a};
4603};
4604var $author$project$Main$UrlChanged = function (a) {
4605 return {$: 'UrlChanged', a: a};
4606};
4607var $elm$core$Basics$EQ = {$: 'EQ'};
4608var $elm$core$Basics$GT = {$: 'GT'};
4609var $elm$core$Basics$LT = {$: 'LT'};
4610var $elm$core$List$cons = _List_cons;
4611var $elm$core$Dict$foldr = F3(
4612 function (func, acc, t) {
4613 foldr:
4614 while (true) {
4615 if (t.$ === 'RBEmpty_elm_builtin') {
4616 return acc;
4617 } else {
4618 var key = t.b;
4619 var value = t.c;
4620 var left = t.d;
4621 var right = t.e;
4622 var $temp$func = func,
4623 $temp$acc = A3(
4624 func,
4625 key,
4626 value,
4627 A3($elm$core$Dict$foldr, func, acc, right)),
4628 $temp$t = left;
4629 func = $temp$func;
4630 acc = $temp$acc;
4631 t = $temp$t;
4632 continue foldr;
4633 }
4634 }
4635 });
4636var $elm$core$Dict$toList = function (dict) {
4637 return A3(
4638 $elm$core$Dict$foldr,
4639 F3(
4640 function (key, value, list) {
4641 return A2(
4642 $elm$core$List$cons,
4643 _Utils_Tuple2(key, value),
4644 list);
4645 }),
4646 _List_Nil,
4647 dict);
4648};
4649var $elm$core$Dict$keys = function (dict) {
4650 return A3(
4651 $elm$core$Dict$foldr,
4652 F3(
4653 function (key, value, keyList) {
4654 return A2($elm$core$List$cons, key, keyList);
4655 }),
4656 _List_Nil,
4657 dict);
4658};
4659var $elm$core$Set$toList = function (_v0) {
4660 var dict = _v0.a;
4661 return $elm$core$Dict$keys(dict);
4662};
4663var $elm$core$Elm$JsArray$foldr = _JsArray_foldr;
4664var $elm$core$Array$foldr = F3(
4665 function (func, baseCase, _v0) {
4666 var tree = _v0.c;
4667 var tail = _v0.d;
4668 var helper = F2(
4669 function (node, acc) {
4670 if (node.$ === 'SubTree') {
4671 var subTree = node.a;
4672 return A3($elm$core$Elm$JsArray$foldr, helper, acc, subTree);
4673 } else {
4674 var values = node.a;
4675 return A3($elm$core$Elm$JsArray$foldr, func, acc, values);
4676 }
4677 });
4678 return A3(
4679 $elm$core$Elm$JsArray$foldr,
4680 helper,
4681 A3($elm$core$Elm$JsArray$foldr, func, baseCase, tail),
4682 tree);
4683 });
4684var $elm$core$Array$toList = function (array) {
4685 return A3($elm$core$Array$foldr, $elm$core$List$cons, _List_Nil, array);
4686};
4687var $elm$core$Result$Err = function (a) {
4688 return {$: 'Err', a: a};
4689};
4690var $elm$json$Json$Decode$Failure = F2(
4691 function (a, b) {
4692 return {$: 'Failure', a: a, b: b};
4693 });
4694var $elm$json$Json$Decode$Field = F2(
4695 function (a, b) {
4696 return {$: 'Field', a: a, b: b};
4697 });
4698var $elm$json$Json$Decode$Index = F2(
4699 function (a, b) {
4700 return {$: 'Index', a: a, b: b};
4701 });
4702var $elm$core$Result$Ok = function (a) {
4703 return {$: 'Ok', a: a};
4704};
4705var $elm$json$Json$Decode$OneOf = function (a) {
4706 return {$: 'OneOf', a: a};
4707};
4708var $elm$core$Basics$False = {$: 'False'};
4709var $elm$core$Basics$add = _Basics_add;
4710var $elm$core$Maybe$Just = function (a) {
4711 return {$: 'Just', a: a};
4712};
4713var $elm$core$Maybe$Nothing = {$: 'Nothing'};
4714var $elm$core$String$all = _String_all;
4715var $elm$core$Basics$and = _Basics_and;
4716var $elm$core$Basics$append = _Utils_append;
4717var $elm$json$Json$Encode$encode = _Json_encode;
4718var $elm$core$String$fromInt = _String_fromNumber;
4719var $elm$core$String$join = F2(
4720 function (sep, chunks) {
4721 return A2(
4722 _String_join,
4723 sep,
4724 _List_toArray(chunks));
4725 });
4726var $elm$core$String$split = F2(
4727 function (sep, string) {
4728 return _List_fromArray(
4729 A2(_String_split, sep, string));
4730 });
4731var $elm$json$Json$Decode$indent = function (str) {
4732 return A2(
4733 $elm$core$String$join,
4734 '\n ',
4735 A2($elm$core$String$split, '\n', str));
4736};
4737var $elm$core$List$foldl = F3(
4738 function (func, acc, list) {
4739 foldl:
4740 while (true) {
4741 if (!list.b) {
4742 return acc;
4743 } else {
4744 var x = list.a;
4745 var xs = list.b;
4746 var $temp$func = func,
4747 $temp$acc = A2(func, x, acc),
4748 $temp$list = xs;
4749 func = $temp$func;
4750 acc = $temp$acc;
4751 list = $temp$list;
4752 continue foldl;
4753 }
4754 }
4755 });
4756var $elm$core$List$length = function (xs) {
4757 return A3(
4758 $elm$core$List$foldl,
4759 F2(
4760 function (_v0, i) {
4761 return i + 1;
4762 }),
4763 0,
4764 xs);
4765};
4766var $elm$core$List$map2 = _List_map2;
4767var $elm$core$Basics$le = _Utils_le;
4768var $elm$core$Basics$sub = _Basics_sub;
4769var $elm$core$List$rangeHelp = F3(
4770 function (lo, hi, list) {
4771 rangeHelp:
4772 while (true) {
4773 if (_Utils_cmp(lo, hi) < 1) {
4774 var $temp$lo = lo,
4775 $temp$hi = hi - 1,
4776 $temp$list = A2($elm$core$List$cons, hi, list);
4777 lo = $temp$lo;
4778 hi = $temp$hi;
4779 list = $temp$list;
4780 continue rangeHelp;
4781 } else {
4782 return list;
4783 }
4784 }
4785 });
4786var $elm$core$List$range = F2(
4787 function (lo, hi) {
4788 return A3($elm$core$List$rangeHelp, lo, hi, _List_Nil);
4789 });
4790var $elm$core$List$indexedMap = F2(
4791 function (f, xs) {
4792 return A3(
4793 $elm$core$List$map2,
4794 f,
4795 A2(
4796 $elm$core$List$range,
4797 0,
4798 $elm$core$List$length(xs) - 1),
4799 xs);
4800 });
4801var $elm$core$Char$toCode = _Char_toCode;
4802var $elm$core$Char$isLower = function (_char) {
4803 var code = $elm$core$Char$toCode(_char);
4804 return (97 <= code) && (code <= 122);
4805};
4806var $elm$core$Char$isUpper = function (_char) {
4807 var code = $elm$core$Char$toCode(_char);
4808 return (code <= 90) && (65 <= code);
4809};
4810var $elm$core$Basics$or = _Basics_or;
4811var $elm$core$Char$isAlpha = function (_char) {
4812 return $elm$core$Char$isLower(_char) || $elm$core$Char$isUpper(_char);
4813};
4814var $elm$core$Char$isDigit = function (_char) {
4815 var code = $elm$core$Char$toCode(_char);
4816 return (code <= 57) && (48 <= code);
4817};
4818var $elm$core$Char$isAlphaNum = function (_char) {
4819 return $elm$core$Char$isLower(_char) || ($elm$core$Char$isUpper(_char) || $elm$core$Char$isDigit(_char));
4820};
4821var $elm$core$List$reverse = function (list) {
4822 return A3($elm$core$List$foldl, $elm$core$List$cons, _List_Nil, list);
4823};
4824var $elm$core$String$uncons = _String_uncons;
4825var $elm$json$Json$Decode$errorOneOf = F2(
4826 function (i, error) {
4827 return '\n\n(' + ($elm$core$String$fromInt(i + 1) + (') ' + $elm$json$Json$Decode$indent(
4828 $elm$json$Json$Decode$errorToString(error))));
4829 });
4830var $elm$json$Json$Decode$errorToString = function (error) {
4831 return A2($elm$json$Json$Decode$errorToStringHelp, error, _List_Nil);
4832};
4833var $elm$json$Json$Decode$errorToStringHelp = F2(
4834 function (error, context) {
4835 errorToStringHelp:
4836 while (true) {
4837 switch (error.$) {
4838 case 'Field':
4839 var f = error.a;
4840 var err = error.b;
4841 var isSimple = function () {
4842 var _v1 = $elm$core$String$uncons(f);
4843 if (_v1.$ === 'Nothing') {
4844 return false;
4845 } else {
4846 var _v2 = _v1.a;
4847 var _char = _v2.a;
4848 var rest = _v2.b;
4849 return $elm$core$Char$isAlpha(_char) && A2($elm$core$String$all, $elm$core$Char$isAlphaNum, rest);
4850 }
4851 }();
4852 var fieldName = isSimple ? ('.' + f) : ('[\'' + (f + '\']'));
4853 var $temp$error = err,
4854 $temp$context = A2($elm$core$List$cons, fieldName, context);
4855 error = $temp$error;
4856 context = $temp$context;
4857 continue errorToStringHelp;
4858 case 'Index':
4859 var i = error.a;
4860 var err = error.b;
4861 var indexName = '[' + ($elm$core$String$fromInt(i) + ']');
4862 var $temp$error = err,
4863 $temp$context = A2($elm$core$List$cons, indexName, context);
4864 error = $temp$error;
4865 context = $temp$context;
4866 continue errorToStringHelp;
4867 case 'OneOf':
4868 var errors = error.a;
4869 if (!errors.b) {
4870 return 'Ran into a Json.Decode.oneOf with no possibilities' + function () {
4871 if (!context.b) {
4872 return '!';
4873 } else {
4874 return ' at json' + A2(
4875 $elm$core$String$join,
4876 '',
4877 $elm$core$List$reverse(context));
4878 }
4879 }();
4880 } else {
4881 if (!errors.b.b) {
4882 var err = errors.a;
4883 var $temp$error = err,
4884 $temp$context = context;
4885 error = $temp$error;
4886 context = $temp$context;
4887 continue errorToStringHelp;
4888 } else {
4889 var starter = function () {
4890 if (!context.b) {
4891 return 'Json.Decode.oneOf';
4892 } else {
4893 return 'The Json.Decode.oneOf at json' + A2(
4894 $elm$core$String$join,
4895 '',
4896 $elm$core$List$reverse(context));
4897 }
4898 }();
4899 var introduction = starter + (' failed in the following ' + ($elm$core$String$fromInt(
4900 $elm$core$List$length(errors)) + ' ways:'));
4901 return A2(
4902 $elm$core$String$join,
4903 '\n\n',
4904 A2(
4905 $elm$core$List$cons,
4906 introduction,
4907 A2($elm$core$List$indexedMap, $elm$json$Json$Decode$errorOneOf, errors)));
4908 }
4909 }
4910 default:
4911 var msg = error.a;
4912 var json = error.b;
4913 var introduction = function () {
4914 if (!context.b) {
4915 return 'Problem with the given value:\n\n';
4916 } else {
4917 return 'Problem with the value at json' + (A2(
4918 $elm$core$String$join,
4919 '',
4920 $elm$core$List$reverse(context)) + ':\n\n ');
4921 }
4922 }();
4923 return introduction + ($elm$json$Json$Decode$indent(
4924 A2($elm$json$Json$Encode$encode, 4, json)) + ('\n\n' + msg));
4925 }
4926 }
4927 });
4928var $elm$core$Array$branchFactor = 32;
4929var $elm$core$Array$Array_elm_builtin = F4(
4930 function (a, b, c, d) {
4931 return {$: 'Array_elm_builtin', a: a, b: b, c: c, d: d};
4932 });
4933var $elm$core$Elm$JsArray$empty = _JsArray_empty;
4934var $elm$core$Basics$ceiling = _Basics_ceiling;
4935var $elm$core$Basics$fdiv = _Basics_fdiv;
4936var $elm$core$Basics$logBase = F2(
4937 function (base, number) {
4938 return _Basics_log(number) / _Basics_log(base);
4939 });
4940var $elm$core$Basics$toFloat = _Basics_toFloat;
4941var $elm$core$Array$shiftStep = $elm$core$Basics$ceiling(
4942 A2($elm$core$Basics$logBase, 2, $elm$core$Array$branchFactor));
4943var $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);
4944var $elm$core$Elm$JsArray$initialize = _JsArray_initialize;
4945var $elm$core$Array$Leaf = function (a) {
4946 return {$: 'Leaf', a: a};
4947};
4948var $elm$core$Basics$apL = F2(
4949 function (f, x) {
4950 return f(x);
4951 });
4952var $elm$core$Basics$apR = F2(
4953 function (x, f) {
4954 return f(x);
4955 });
4956var $elm$core$Basics$eq = _Utils_equal;
4957var $elm$core$Basics$floor = _Basics_floor;
4958var $elm$core$Elm$JsArray$length = _JsArray_length;
4959var $elm$core$Basics$gt = _Utils_gt;
4960var $elm$core$Basics$max = F2(
4961 function (x, y) {
4962 return (_Utils_cmp(x, y) > 0) ? x : y;
4963 });
4964var $elm$core$Basics$mul = _Basics_mul;
4965var $elm$core$Array$SubTree = function (a) {
4966 return {$: 'SubTree', a: a};
4967};
4968var $elm$core$Elm$JsArray$initializeFromList = _JsArray_initializeFromList;
4969var $elm$core$Array$compressNodes = F2(
4970 function (nodes, acc) {
4971 compressNodes:
4972 while (true) {
4973 var _v0 = A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodes);
4974 var node = _v0.a;
4975 var remainingNodes = _v0.b;
4976 var newAcc = A2(
4977 $elm$core$List$cons,
4978 $elm$core$Array$SubTree(node),
4979 acc);
4980 if (!remainingNodes.b) {
4981 return $elm$core$List$reverse(newAcc);
4982 } else {
4983 var $temp$nodes = remainingNodes,
4984 $temp$acc = newAcc;
4985 nodes = $temp$nodes;
4986 acc = $temp$acc;
4987 continue compressNodes;
4988 }
4989 }
4990 });
4991var $elm$core$Tuple$first = function (_v0) {
4992 var x = _v0.a;
4993 return x;
4994};
4995var $elm$core$Array$treeFromBuilder = F2(
4996 function (nodeList, nodeListSize) {
4997 treeFromBuilder:
4998 while (true) {
4999 var newNodeSize = $elm$core$Basics$ceiling(nodeListSize / $elm$core$Array$branchFactor);
5000 if (newNodeSize === 1) {
5001 return A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodeList).a;
5002 } else {
5003 var $temp$nodeList = A2($elm$core$Array$compressNodes, nodeList, _List_Nil),
5004 $temp$nodeListSize = newNodeSize;
5005 nodeList = $temp$nodeList;
5006 nodeListSize = $temp$nodeListSize;
5007 continue treeFromBuilder;
5008 }
5009 }
5010 });
5011var $elm$core$Array$builderToArray = F2(
5012 function (reverseNodeList, builder) {
5013 if (!builder.nodeListSize) {
5014 return A4(
5015 $elm$core$Array$Array_elm_builtin,
5016 $elm$core$Elm$JsArray$length(builder.tail),
5017 $elm$core$Array$shiftStep,
5018 $elm$core$Elm$JsArray$empty,
5019 builder.tail);
5020 } else {
5021 var treeLen = builder.nodeListSize * $elm$core$Array$branchFactor;
5022 var depth = $elm$core$Basics$floor(
5023 A2($elm$core$Basics$logBase, $elm$core$Array$branchFactor, treeLen - 1));
5024 var correctNodeList = reverseNodeList ? $elm$core$List$reverse(builder.nodeList) : builder.nodeList;
5025 var tree = A2($elm$core$Array$treeFromBuilder, correctNodeList, builder.nodeListSize);
5026 return A4(
5027 $elm$core$Array$Array_elm_builtin,
5028 $elm$core$Elm$JsArray$length(builder.tail) + treeLen,
5029 A2($elm$core$Basics$max, 5, depth * $elm$core$Array$shiftStep),
5030 tree,
5031 builder.tail);
5032 }
5033 });
5034var $elm$core$Basics$idiv = _Basics_idiv;
5035var $elm$core$Basics$lt = _Utils_lt;
5036var $elm$core$Array$initializeHelp = F5(
5037 function (fn, fromIndex, len, nodeList, tail) {
5038 initializeHelp:
5039 while (true) {
5040 if (fromIndex < 0) {
5041 return A2(
5042 $elm$core$Array$builderToArray,
5043 false,
5044 {nodeList: nodeList, nodeListSize: (len / $elm$core$Array$branchFactor) | 0, tail: tail});
5045 } else {
5046 var leaf = $elm$core$Array$Leaf(
5047 A3($elm$core$Elm$JsArray$initialize, $elm$core$Array$branchFactor, fromIndex, fn));
5048 var $temp$fn = fn,
5049 $temp$fromIndex = fromIndex - $elm$core$Array$branchFactor,
5050 $temp$len = len,
5051 $temp$nodeList = A2($elm$core$List$cons, leaf, nodeList),
5052 $temp$tail = tail;
5053 fn = $temp$fn;
5054 fromIndex = $temp$fromIndex;
5055 len = $temp$len;
5056 nodeList = $temp$nodeList;
5057 tail = $temp$tail;
5058 continue initializeHelp;
5059 }
5060 }
5061 });
5062var $elm$core$Basics$remainderBy = _Basics_remainderBy;
5063var $elm$core$Array$initialize = F2(
5064 function (len, fn) {
5065 if (len <= 0) {
5066 return $elm$core$Array$empty;
5067 } else {
5068 var tailLen = len % $elm$core$Array$branchFactor;
5069 var tail = A3($elm$core$Elm$JsArray$initialize, tailLen, len - tailLen, fn);
5070 var initialFromIndex = (len - tailLen) - $elm$core$Array$branchFactor;
5071 return A5($elm$core$Array$initializeHelp, fn, initialFromIndex, len, _List_Nil, tail);
5072 }
5073 });
5074var $elm$core$Basics$True = {$: 'True'};
5075var $elm$core$Result$isOk = function (result) {
5076 if (result.$ === 'Ok') {
5077 return true;
5078 } else {
5079 return false;
5080 }
5081};
5082var $elm$json$Json$Decode$map = _Json_map1;
5083var $elm$json$Json$Decode$map2 = _Json_map2;
5084var $elm$json$Json$Decode$succeed = _Json_succeed;
5085var $elm$virtual_dom$VirtualDom$toHandlerInt = function (handler) {
5086 switch (handler.$) {
5087 case 'Normal':
5088 return 0;
5089 case 'MayStopPropagation':
5090 return 1;
5091 case 'MayPreventDefault':
5092 return 2;
5093 default:
5094 return 3;
5095 }
5096};
5097var $elm$browser$Browser$External = function (a) {
5098 return {$: 'External', a: a};
5099};
5100var $elm$browser$Browser$Internal = function (a) {
5101 return {$: 'Internal', a: a};
5102};
5103var $elm$core$Basics$identity = function (x) {
5104 return x;
5105};
5106var $elm$browser$Browser$Dom$NotFound = function (a) {
5107 return {$: 'NotFound', a: a};
5108};
5109var $elm$url$Url$Http = {$: 'Http'};
5110var $elm$url$Url$Https = {$: 'Https'};
5111var $elm$url$Url$Url = F6(
5112 function (protocol, host, port_, path, query, fragment) {
5113 return {fragment: fragment, host: host, path: path, port_: port_, protocol: protocol, query: query};
5114 });
5115var $elm$core$String$contains = _String_contains;
5116var $elm$core$String$length = _String_length;
5117var $elm$core$String$slice = _String_slice;
5118var $elm$core$String$dropLeft = F2(
5119 function (n, string) {
5120 return (n < 1) ? string : A3(
5121 $elm$core$String$slice,
5122 n,
5123 $elm$core$String$length(string),
5124 string);
5125 });
5126var $elm$core$String$indexes = _String_indexes;
5127var $elm$core$String$isEmpty = function (string) {
5128 return string === '';
5129};
5130var $elm$core$String$left = F2(
5131 function (n, string) {
5132 return (n < 1) ? '' : A3($elm$core$String$slice, 0, n, string);
5133 });
5134var $elm$core$String$toInt = _String_toInt;
5135var $elm$url$Url$chompBeforePath = F5(
5136 function (protocol, path, params, frag, str) {
5137 if ($elm$core$String$isEmpty(str) || A2($elm$core$String$contains, '@', str)) {
5138 return $elm$core$Maybe$Nothing;
5139 } else {
5140 var _v0 = A2($elm$core$String$indexes, ':', str);
5141 if (!_v0.b) {
5142 return $elm$core$Maybe$Just(
5143 A6($elm$url$Url$Url, protocol, str, $elm$core$Maybe$Nothing, path, params, frag));
5144 } else {
5145 if (!_v0.b.b) {
5146 var i = _v0.a;
5147 var _v1 = $elm$core$String$toInt(
5148 A2($elm$core$String$dropLeft, i + 1, str));
5149 if (_v1.$ === 'Nothing') {
5150 return $elm$core$Maybe$Nothing;
5151 } else {
5152 var port_ = _v1;
5153 return $elm$core$Maybe$Just(
5154 A6(
5155 $elm$url$Url$Url,
5156 protocol,
5157 A2($elm$core$String$left, i, str),
5158 port_,
5159 path,
5160 params,
5161 frag));
5162 }
5163 } else {
5164 return $elm$core$Maybe$Nothing;
5165 }
5166 }
5167 }
5168 });
5169var $elm$url$Url$chompBeforeQuery = F4(
5170 function (protocol, params, frag, str) {
5171 if ($elm$core$String$isEmpty(str)) {
5172 return $elm$core$Maybe$Nothing;
5173 } else {
5174 var _v0 = A2($elm$core$String$indexes, '/', str);
5175 if (!_v0.b) {
5176 return A5($elm$url$Url$chompBeforePath, protocol, '/', params, frag, str);
5177 } else {
5178 var i = _v0.a;
5179 return A5(
5180 $elm$url$Url$chompBeforePath,
5181 protocol,
5182 A2($elm$core$String$dropLeft, i, str),
5183 params,
5184 frag,
5185 A2($elm$core$String$left, i, str));
5186 }
5187 }
5188 });
5189var $elm$url$Url$chompBeforeFragment = F3(
5190 function (protocol, frag, str) {
5191 if ($elm$core$String$isEmpty(str)) {
5192 return $elm$core$Maybe$Nothing;
5193 } else {
5194 var _v0 = A2($elm$core$String$indexes, '?', str);
5195 if (!_v0.b) {
5196 return A4($elm$url$Url$chompBeforeQuery, protocol, $elm$core$Maybe$Nothing, frag, str);
5197 } else {
5198 var i = _v0.a;
5199 return A4(
5200 $elm$url$Url$chompBeforeQuery,
5201 protocol,
5202 $elm$core$Maybe$Just(
5203 A2($elm$core$String$dropLeft, i + 1, str)),
5204 frag,
5205 A2($elm$core$String$left, i, str));
5206 }
5207 }
5208 });
5209var $elm$url$Url$chompAfterProtocol = F2(
5210 function (protocol, str) {
5211 if ($elm$core$String$isEmpty(str)) {
5212 return $elm$core$Maybe$Nothing;
5213 } else {
5214 var _v0 = A2($elm$core$String$indexes, '#', str);
5215 if (!_v0.b) {
5216 return A3($elm$url$Url$chompBeforeFragment, protocol, $elm$core$Maybe$Nothing, str);
5217 } else {
5218 var i = _v0.a;
5219 return A3(
5220 $elm$url$Url$chompBeforeFragment,
5221 protocol,
5222 $elm$core$Maybe$Just(
5223 A2($elm$core$String$dropLeft, i + 1, str)),
5224 A2($elm$core$String$left, i, str));
5225 }
5226 }
5227 });
5228var $elm$core$String$startsWith = _String_startsWith;
5229var $elm$url$Url$fromString = function (str) {
5230 return A2($elm$core$String$startsWith, 'http://', str) ? A2(
5231 $elm$url$Url$chompAfterProtocol,
5232 $elm$url$Url$Http,
5233 A2($elm$core$String$dropLeft, 7, str)) : (A2($elm$core$String$startsWith, 'https://', str) ? A2(
5234 $elm$url$Url$chompAfterProtocol,
5235 $elm$url$Url$Https,
5236 A2($elm$core$String$dropLeft, 8, str)) : $elm$core$Maybe$Nothing);
5237};
5238var $elm$core$Basics$never = function (_v0) {
5239 never:
5240 while (true) {
5241 var nvr = _v0.a;
5242 var $temp$_v0 = nvr;
5243 _v0 = $temp$_v0;
5244 continue never;
5245 }
5246};
5247var $elm$core$Task$Perform = function (a) {
5248 return {$: 'Perform', a: a};
5249};
5250var $elm$core$Task$succeed = _Scheduler_succeed;
5251var $elm$core$Task$init = $elm$core$Task$succeed(_Utils_Tuple0);
5252var $elm$core$List$foldrHelper = F4(
5253 function (fn, acc, ctr, ls) {
5254 if (!ls.b) {
5255 return acc;
5256 } else {
5257 var a = ls.a;
5258 var r1 = ls.b;
5259 if (!r1.b) {
5260 return A2(fn, a, acc);
5261 } else {
5262 var b = r1.a;
5263 var r2 = r1.b;
5264 if (!r2.b) {
5265 return A2(
5266 fn,
5267 a,
5268 A2(fn, b, acc));
5269 } else {
5270 var c = r2.a;
5271 var r3 = r2.b;
5272 if (!r3.b) {
5273 return A2(
5274 fn,
5275 a,
5276 A2(
5277 fn,
5278 b,
5279 A2(fn, c, acc)));
5280 } else {
5281 var d = r3.a;
5282 var r4 = r3.b;
5283 var res = (ctr > 500) ? A3(
5284 $elm$core$List$foldl,
5285 fn,
5286 acc,
5287 $elm$core$List$reverse(r4)) : A4($elm$core$List$foldrHelper, fn, acc, ctr + 1, r4);
5288 return A2(
5289 fn,
5290 a,
5291 A2(
5292 fn,
5293 b,
5294 A2(
5295 fn,
5296 c,
5297 A2(fn, d, res))));
5298 }
5299 }
5300 }
5301 }
5302 });
5303var $elm$core$List$foldr = F3(
5304 function (fn, acc, ls) {
5305 return A4($elm$core$List$foldrHelper, fn, acc, 0, ls);
5306 });
5307var $elm$core$List$map = F2(
5308 function (f, xs) {
5309 return A3(
5310 $elm$core$List$foldr,
5311 F2(
5312 function (x, acc) {
5313 return A2(
5314 $elm$core$List$cons,
5315 f(x),
5316 acc);
5317 }),
5318 _List_Nil,
5319 xs);
5320 });
5321var $elm$core$Task$andThen = _Scheduler_andThen;
5322var $elm$core$Task$map = F2(
5323 function (func, taskA) {
5324 return A2(
5325 $elm$core$Task$andThen,
5326 function (a) {
5327 return $elm$core$Task$succeed(
5328 func(a));
5329 },
5330 taskA);
5331 });
5332var $elm$core$Task$map2 = F3(
5333 function (func, taskA, taskB) {
5334 return A2(
5335 $elm$core$Task$andThen,
5336 function (a) {
5337 return A2(
5338 $elm$core$Task$andThen,
5339 function (b) {
5340 return $elm$core$Task$succeed(
5341 A2(func, a, b));
5342 },
5343 taskB);
5344 },
5345 taskA);
5346 });
5347var $elm$core$Task$sequence = function (tasks) {
5348 return A3(
5349 $elm$core$List$foldr,
5350 $elm$core$Task$map2($elm$core$List$cons),
5351 $elm$core$Task$succeed(_List_Nil),
5352 tasks);
5353};
5354var $elm$core$Platform$sendToApp = _Platform_sendToApp;
5355var $elm$core$Task$spawnCmd = F2(
5356 function (router, _v0) {
5357 var task = _v0.a;
5358 return _Scheduler_spawn(
5359 A2(
5360 $elm$core$Task$andThen,
5361 $elm$core$Platform$sendToApp(router),
5362 task));
5363 });
5364var $elm$core$Task$onEffects = F3(
5365 function (router, commands, state) {
5366 return A2(
5367 $elm$core$Task$map,
5368 function (_v0) {
5369 return _Utils_Tuple0;
5370 },
5371 $elm$core$Task$sequence(
5372 A2(
5373 $elm$core$List$map,
5374 $elm$core$Task$spawnCmd(router),
5375 commands)));
5376 });
5377var $elm$core$Task$onSelfMsg = F3(
5378 function (_v0, _v1, _v2) {
5379 return $elm$core$Task$succeed(_Utils_Tuple0);
5380 });
5381var $elm$core$Task$cmdMap = F2(
5382 function (tagger, _v0) {
5383 var task = _v0.a;
5384 return $elm$core$Task$Perform(
5385 A2($elm$core$Task$map, tagger, task));
5386 });
5387_Platform_effectManagers['Task'] = _Platform_createManager($elm$core$Task$init, $elm$core$Task$onEffects, $elm$core$Task$onSelfMsg, $elm$core$Task$cmdMap);
5388var $elm$core$Task$command = _Platform_leaf('Task');
5389var $elm$core$Task$perform = F2(
5390 function (toMessage, task) {
5391 return $elm$core$Task$command(
5392 $elm$core$Task$Perform(
5393 A2($elm$core$Task$map, toMessage, task)));
5394 });
5395var $elm$browser$Browser$application = _Browser_application;
5396var $author$project$Main$HomePage = {$: 'HomePage'};
5397var $author$project$Main$Model = F9(
5398 function (key, url, location, loginModel, catalogModel, productModel, signupModel, cartModel, checkoutModel) {
5399 return {cartModel: cartModel, catalogModel: catalogModel, checkoutModel: checkoutModel, key: key, location: location, loginModel: loginModel, productModel: productModel, signupModel: signupModel, url: url};
5400 });
5401var $author$project$Cart$Model = F2(
5402 function (pageStatus, products) {
5403 return {pageStatus: pageStatus, products: products};
5404 });
5405var $author$project$Cart$NotLoaded = {$: 'NotLoaded'};
5406var $author$project$Cart$init = A2($author$project$Cart$Model, $author$project$Cart$NotLoaded, _List_Nil);
5407var $author$project$Catalog$Model = F3(
5408 function (pageStatus, products, filters) {
5409 return {filters: filters, pageStatus: pageStatus, products: products};
5410 });
5411var $author$project$Catalog$NotLoaded = {$: 'NotLoaded'};
5412var $author$project$Catalog$Filters = F2(
5413 function (price, rating) {
5414 return {price: price, rating: rating};
5415 });
5416var $elm$core$Basics$negate = function (n) {
5417 return -n;
5418};
5419var $author$project$Catalog$defaultFilters = A2(
5420 $author$project$Catalog$Filters,
5421 _Utils_Tuple2(-1, 100000),
5422 _Utils_Tuple2(0, 5));
5423var $author$project$Catalog$init = A3($author$project$Catalog$Model, $author$project$Catalog$NotLoaded, _List_Nil, $author$project$Catalog$defaultFilters);
5424var $author$project$Checkout$Model = F3(
5425 function (pageStatus, paymentMode, cartTotal) {
5426 return {cartTotal: cartTotal, pageStatus: pageStatus, paymentMode: paymentMode};
5427 });
5428var $author$project$Checkout$NotLoaded = {$: 'NotLoaded'};
5429var $author$project$Checkout$init = A3($author$project$Checkout$Model, $author$project$Checkout$NotLoaded, 'Cash', 0);
5430var $author$project$Login$Model = F3(
5431 function (username, password, loginStatus) {
5432 return {loginStatus: loginStatus, password: password, username: username};
5433 });
5434var $author$project$Login$NotLoggedIn = {$: 'NotLoggedIn'};
5435var $author$project$Login$init = A3($author$project$Login$Model, '', '', $author$project$Login$NotLoggedIn);
5436var $author$project$Product$Model = F6(
5437 function (pageStatus, listing, ratings, ratingStars, ratingText, addRatingStatus) {
5438 return {addRatingStatus: addRatingStatus, listing: listing, pageStatus: pageStatus, ratingStars: ratingStars, ratingText: ratingText, ratings: ratings};
5439 });
5440var $author$project$Product$NotLoaded = {$: 'NotLoaded'};
5441var $author$project$Product$NotSubmitted = {$: 'NotSubmitted'};
5442var $author$project$Product$Product = F7(
5443 function (id, name, kind, price, description, src, iosSrc) {
5444 return {description: description, id: id, iosSrc: iosSrc, kind: kind, name: name, price: price, src: src};
5445 });
5446var $author$project$Product$emptyProduct = A7($author$project$Product$Product, -1, '', $elm$core$Maybe$Nothing, 0, $elm$core$Maybe$Nothing, '', '');
5447var $author$project$Product$init = A6($author$project$Product$Model, $author$project$Product$NotLoaded, $author$project$Product$emptyProduct, _List_Nil, 5, '', $author$project$Product$NotSubmitted);
5448var $author$project$Signup$Empty = {$: 'Empty'};
5449var $author$project$Signup$Model = F6(
5450 function (username, password, phoneNumber, emailId, address, status) {
5451 return {address: address, emailId: emailId, password: password, phoneNumber: phoneNumber, status: status, username: username};
5452 });
5453var $author$project$Signup$init = A6($author$project$Signup$Model, '', '', '', '', $elm$core$Maybe$Nothing, $author$project$Signup$Empty);
5454var $elm$core$Platform$Cmd$batch = _Platform_batch;
5455var $elm$core$Platform$Cmd$none = $elm$core$Platform$Cmd$batch(_List_Nil);
5456var $author$project$Main$init = F3(
5457 function (flags, url, key) {
5458 var start = $author$project$Main$HomePage;
5459 var signup = $author$project$Signup$init;
5460 var product = $author$project$Product$init;
5461 var login = $author$project$Login$init;
5462 var checkout = $author$project$Checkout$init;
5463 var catalog = $author$project$Catalog$init;
5464 var cart = $author$project$Cart$init;
5465 return _Utils_Tuple2(
5466 A9($author$project$Main$Model, key, url, start, login, catalog, product, signup, cart, checkout),
5467 $elm$core$Platform$Cmd$none);
5468 });
5469var $elm$core$Platform$Sub$batch = _Platform_batch;
5470var $elm$core$Platform$Sub$none = $elm$core$Platform$Sub$batch(_List_Nil);
5471var $author$project$Main$subscriptions = function (_v0) {
5472 return $elm$core$Platform$Sub$none;
5473};
5474var $author$project$Main$CartMessage = function (a) {
5475 return {$: 'CartMessage', a: a};
5476};
5477var $author$project$Main$CartPage = {$: 'CartPage'};
5478var $author$project$Main$CatalogMessage = function (a) {
5479 return {$: 'CatalogMessage', a: a};
5480};
5481var $author$project$Main$CatalogPage = {$: 'CatalogPage'};
5482var $author$project$Main$CheckoutMessage = function (a) {
5483 return {$: 'CheckoutMessage', a: a};
5484};
5485var $author$project$Main$CheckoutPage = {$: 'CheckoutPage'};
5486var $author$project$Main$LoginMessage = function (a) {
5487 return {$: 'LoginMessage', a: a};
5488};
5489var $author$project$Main$NotFoundPage = {$: 'NotFoundPage'};
5490var $author$project$Main$ProductMessage = function (a) {
5491 return {$: 'ProductMessage', a: a};
5492};
5493var $author$project$Main$ProductPage = function (a) {
5494 return {$: 'ProductPage', a: a};
5495};
5496var $author$project$Main$SignupMessage = function (a) {
5497 return {$: 'SignupMessage', a: a};
5498};
5499var $author$project$Checkout$AmountLoaded = function (a) {
5500 return {$: 'AmountLoaded', a: a};
5501};
5502var $elm$http$Http$BadStatus_ = F2(
5503 function (a, b) {
5504 return {$: 'BadStatus_', a: a, b: b};
5505 });
5506var $elm$http$Http$BadUrl_ = function (a) {
5507 return {$: 'BadUrl_', a: a};
5508};
5509var $elm$http$Http$GoodStatus_ = F2(
5510 function (a, b) {
5511 return {$: 'GoodStatus_', a: a, b: b};
5512 });
5513var $elm$http$Http$NetworkError_ = {$: 'NetworkError_'};
5514var $elm$http$Http$Receiving = function (a) {
5515 return {$: 'Receiving', a: a};
5516};
5517var $elm$http$Http$Sending = function (a) {
5518 return {$: 'Sending', a: a};
5519};
5520var $elm$http$Http$Timeout_ = {$: 'Timeout_'};
5521var $elm$core$Dict$RBEmpty_elm_builtin = {$: 'RBEmpty_elm_builtin'};
5522var $elm$core$Dict$empty = $elm$core$Dict$RBEmpty_elm_builtin;
5523var $elm$core$Maybe$isJust = function (maybe) {
5524 if (maybe.$ === 'Just') {
5525 return true;
5526 } else {
5527 return false;
5528 }
5529};
5530var $elm$core$Platform$sendToSelf = _Platform_sendToSelf;
5531var $elm$core$Basics$compare = _Utils_compare;
5532var $elm$core$Dict$get = F2(
5533 function (targetKey, dict) {
5534 get:
5535 while (true) {
5536 if (dict.$ === 'RBEmpty_elm_builtin') {
5537 return $elm$core$Maybe$Nothing;
5538 } else {
5539 var key = dict.b;
5540 var value = dict.c;
5541 var left = dict.d;
5542 var right = dict.e;
5543 var _v1 = A2($elm$core$Basics$compare, targetKey, key);
5544 switch (_v1.$) {
5545 case 'LT':
5546 var $temp$targetKey = targetKey,
5547 $temp$dict = left;
5548 targetKey = $temp$targetKey;
5549 dict = $temp$dict;
5550 continue get;
5551 case 'EQ':
5552 return $elm$core$Maybe$Just(value);
5553 default:
5554 var $temp$targetKey = targetKey,
5555 $temp$dict = right;
5556 targetKey = $temp$targetKey;
5557 dict = $temp$dict;
5558 continue get;
5559 }
5560 }
5561 }
5562 });
5563var $elm$core$Dict$Black = {$: 'Black'};
5564var $elm$core$Dict$RBNode_elm_builtin = F5(
5565 function (a, b, c, d, e) {
5566 return {$: 'RBNode_elm_builtin', a: a, b: b, c: c, d: d, e: e};
5567 });
5568var $elm$core$Dict$Red = {$: 'Red'};
5569var $elm$core$Dict$balance = F5(
5570 function (color, key, value, left, right) {
5571 if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Red')) {
5572 var _v1 = right.a;
5573 var rK = right.b;
5574 var rV = right.c;
5575 var rLeft = right.d;
5576 var rRight = right.e;
5577 if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) {
5578 var _v3 = left.a;
5579 var lK = left.b;
5580 var lV = left.c;
5581 var lLeft = left.d;
5582 var lRight = left.e;
5583 return A5(
5584 $elm$core$Dict$RBNode_elm_builtin,
5585 $elm$core$Dict$Red,
5586 key,
5587 value,
5588 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, lK, lV, lLeft, lRight),
5589 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rLeft, rRight));
5590 } else {
5591 return A5(
5592 $elm$core$Dict$RBNode_elm_builtin,
5593 color,
5594 rK,
5595 rV,
5596 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, left, rLeft),
5597 rRight);
5598 }
5599 } else {
5600 if ((((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) && (left.d.$ === 'RBNode_elm_builtin')) && (left.d.a.$ === 'Red')) {
5601 var _v5 = left.a;
5602 var lK = left.b;
5603 var lV = left.c;
5604 var _v6 = left.d;
5605 var _v7 = _v6.a;
5606 var llK = _v6.b;
5607 var llV = _v6.c;
5608 var llLeft = _v6.d;
5609 var llRight = _v6.e;
5610 var lRight = left.e;
5611 return A5(
5612 $elm$core$Dict$RBNode_elm_builtin,
5613 $elm$core$Dict$Red,
5614 lK,
5615 lV,
5616 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight),
5617 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, key, value, lRight, right));
5618 } else {
5619 return A5($elm$core$Dict$RBNode_elm_builtin, color, key, value, left, right);
5620 }
5621 }
5622 });
5623var $elm$core$Dict$insertHelp = F3(
5624 function (key, value, dict) {
5625 if (dict.$ === 'RBEmpty_elm_builtin') {
5626 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);
5627 } else {
5628 var nColor = dict.a;
5629 var nKey = dict.b;
5630 var nValue = dict.c;
5631 var nLeft = dict.d;
5632 var nRight = dict.e;
5633 var _v1 = A2($elm$core$Basics$compare, key, nKey);
5634 switch (_v1.$) {
5635 case 'LT':
5636 return A5(
5637 $elm$core$Dict$balance,
5638 nColor,
5639 nKey,
5640 nValue,
5641 A3($elm$core$Dict$insertHelp, key, value, nLeft),
5642 nRight);
5643 case 'EQ':
5644 return A5($elm$core$Dict$RBNode_elm_builtin, nColor, nKey, value, nLeft, nRight);
5645 default:
5646 return A5(
5647 $elm$core$Dict$balance,
5648 nColor,
5649 nKey,
5650 nValue,
5651 nLeft,
5652 A3($elm$core$Dict$insertHelp, key, value, nRight));
5653 }
5654 }
5655 });
5656var $elm$core$Dict$insert = F3(
5657 function (key, value, dict) {
5658 var _v0 = A3($elm$core$Dict$insertHelp, key, value, dict);
5659 if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) {
5660 var _v1 = _v0.a;
5661 var k = _v0.b;
5662 var v = _v0.c;
5663 var l = _v0.d;
5664 var r = _v0.e;
5665 return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r);
5666 } else {
5667 var x = _v0;
5668 return x;
5669 }
5670 });
5671var $elm$core$Dict$getMin = function (dict) {
5672 getMin:
5673 while (true) {
5674 if ((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) {
5675 var left = dict.d;
5676 var $temp$dict = left;
5677 dict = $temp$dict;
5678 continue getMin;
5679 } else {
5680 return dict;
5681 }
5682 }
5683};
5684var $elm$core$Dict$moveRedLeft = function (dict) {
5685 if (((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) && (dict.e.$ === 'RBNode_elm_builtin')) {
5686 if ((dict.e.d.$ === 'RBNode_elm_builtin') && (dict.e.d.a.$ === 'Red')) {
5687 var clr = dict.a;
5688 var k = dict.b;
5689 var v = dict.c;
5690 var _v1 = dict.d;
5691 var lClr = _v1.a;
5692 var lK = _v1.b;
5693 var lV = _v1.c;
5694 var lLeft = _v1.d;
5695 var lRight = _v1.e;
5696 var _v2 = dict.e;
5697 var rClr = _v2.a;
5698 var rK = _v2.b;
5699 var rV = _v2.c;
5700 var rLeft = _v2.d;
5701 var _v3 = rLeft.a;
5702 var rlK = rLeft.b;
5703 var rlV = rLeft.c;
5704 var rlL = rLeft.d;
5705 var rlR = rLeft.e;
5706 var rRight = _v2.e;
5707 return A5(
5708 $elm$core$Dict$RBNode_elm_builtin,
5709 $elm$core$Dict$Red,
5710 rlK,
5711 rlV,
5712 A5(
5713 $elm$core$Dict$RBNode_elm_builtin,
5714 $elm$core$Dict$Black,
5715 k,
5716 v,
5717 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
5718 rlL),
5719 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rlR, rRight));
5720 } else {
5721 var clr = dict.a;
5722 var k = dict.b;
5723 var v = dict.c;
5724 var _v4 = dict.d;
5725 var lClr = _v4.a;
5726 var lK = _v4.b;
5727 var lV = _v4.c;
5728 var lLeft = _v4.d;
5729 var lRight = _v4.e;
5730 var _v5 = dict.e;
5731 var rClr = _v5.a;
5732 var rK = _v5.b;
5733 var rV = _v5.c;
5734 var rLeft = _v5.d;
5735 var rRight = _v5.e;
5736 if (clr.$ === 'Black') {
5737 return A5(
5738 $elm$core$Dict$RBNode_elm_builtin,
5739 $elm$core$Dict$Black,
5740 k,
5741 v,
5742 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
5743 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
5744 } else {
5745 return A5(
5746 $elm$core$Dict$RBNode_elm_builtin,
5747 $elm$core$Dict$Black,
5748 k,
5749 v,
5750 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
5751 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
5752 }
5753 }
5754 } else {
5755 return dict;
5756 }
5757};
5758var $elm$core$Dict$moveRedRight = function (dict) {
5759 if (((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) && (dict.e.$ === 'RBNode_elm_builtin')) {
5760 if ((dict.d.d.$ === 'RBNode_elm_builtin') && (dict.d.d.a.$ === 'Red')) {
5761 var clr = dict.a;
5762 var k = dict.b;
5763 var v = dict.c;
5764 var _v1 = dict.d;
5765 var lClr = _v1.a;
5766 var lK = _v1.b;
5767 var lV = _v1.c;
5768 var _v2 = _v1.d;
5769 var _v3 = _v2.a;
5770 var llK = _v2.b;
5771 var llV = _v2.c;
5772 var llLeft = _v2.d;
5773 var llRight = _v2.e;
5774 var lRight = _v1.e;
5775 var _v4 = dict.e;
5776 var rClr = _v4.a;
5777 var rK = _v4.b;
5778 var rV = _v4.c;
5779 var rLeft = _v4.d;
5780 var rRight = _v4.e;
5781 return A5(
5782 $elm$core$Dict$RBNode_elm_builtin,
5783 $elm$core$Dict$Red,
5784 lK,
5785 lV,
5786 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight),
5787 A5(
5788 $elm$core$Dict$RBNode_elm_builtin,
5789 $elm$core$Dict$Black,
5790 k,
5791 v,
5792 lRight,
5793 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight)));
5794 } else {
5795 var clr = dict.a;
5796 var k = dict.b;
5797 var v = dict.c;
5798 var _v5 = dict.d;
5799 var lClr = _v5.a;
5800 var lK = _v5.b;
5801 var lV = _v5.c;
5802 var lLeft = _v5.d;
5803 var lRight = _v5.e;
5804 var _v6 = dict.e;
5805 var rClr = _v6.a;
5806 var rK = _v6.b;
5807 var rV = _v6.c;
5808 var rLeft = _v6.d;
5809 var rRight = _v6.e;
5810 if (clr.$ === 'Black') {
5811 return A5(
5812 $elm$core$Dict$RBNode_elm_builtin,
5813 $elm$core$Dict$Black,
5814 k,
5815 v,
5816 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
5817 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
5818 } else {
5819 return A5(
5820 $elm$core$Dict$RBNode_elm_builtin,
5821 $elm$core$Dict$Black,
5822 k,
5823 v,
5824 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
5825 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
5826 }
5827 }
5828 } else {
5829 return dict;
5830 }
5831};
5832var $elm$core$Dict$removeHelpPrepEQGT = F7(
5833 function (targetKey, dict, color, key, value, left, right) {
5834 if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) {
5835 var _v1 = left.a;
5836 var lK = left.b;
5837 var lV = left.c;
5838 var lLeft = left.d;
5839 var lRight = left.e;
5840 return A5(
5841 $elm$core$Dict$RBNode_elm_builtin,
5842 color,
5843 lK,
5844 lV,
5845 lLeft,
5846 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, lRight, right));
5847 } else {
5848 _v2$2:
5849 while (true) {
5850 if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Black')) {
5851 if (right.d.$ === 'RBNode_elm_builtin') {
5852 if (right.d.a.$ === 'Black') {
5853 var _v3 = right.a;
5854 var _v4 = right.d;
5855 var _v5 = _v4.a;
5856 return $elm$core$Dict$moveRedRight(dict);
5857 } else {
5858 break _v2$2;
5859 }
5860 } else {
5861 var _v6 = right.a;
5862 var _v7 = right.d;
5863 return $elm$core$Dict$moveRedRight(dict);
5864 }
5865 } else {
5866 break _v2$2;
5867 }
5868 }
5869 return dict;
5870 }
5871 });
5872var $elm$core$Dict$removeMin = function (dict) {
5873 if ((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) {
5874 var color = dict.a;
5875 var key = dict.b;
5876 var value = dict.c;
5877 var left = dict.d;
5878 var lColor = left.a;
5879 var lLeft = left.d;
5880 var right = dict.e;
5881 if (lColor.$ === 'Black') {
5882 if ((lLeft.$ === 'RBNode_elm_builtin') && (lLeft.a.$ === 'Red')) {
5883 var _v3 = lLeft.a;
5884 return A5(
5885 $elm$core$Dict$RBNode_elm_builtin,
5886 color,
5887 key,
5888 value,
5889 $elm$core$Dict$removeMin(left),
5890 right);
5891 } else {
5892 var _v4 = $elm$core$Dict$moveRedLeft(dict);
5893 if (_v4.$ === 'RBNode_elm_builtin') {
5894 var nColor = _v4.a;
5895 var nKey = _v4.b;
5896 var nValue = _v4.c;
5897 var nLeft = _v4.d;
5898 var nRight = _v4.e;
5899 return A5(
5900 $elm$core$Dict$balance,
5901 nColor,
5902 nKey,
5903 nValue,
5904 $elm$core$Dict$removeMin(nLeft),
5905 nRight);
5906 } else {
5907 return $elm$core$Dict$RBEmpty_elm_builtin;
5908 }
5909 }
5910 } else {
5911 return A5(
5912 $elm$core$Dict$RBNode_elm_builtin,
5913 color,
5914 key,
5915 value,
5916 $elm$core$Dict$removeMin(left),
5917 right);
5918 }
5919 } else {
5920 return $elm$core$Dict$RBEmpty_elm_builtin;
5921 }
5922};
5923var $elm$core$Dict$removeHelp = F2(
5924 function (targetKey, dict) {
5925 if (dict.$ === 'RBEmpty_elm_builtin') {
5926 return $elm$core$Dict$RBEmpty_elm_builtin;
5927 } else {
5928 var color = dict.a;
5929 var key = dict.b;
5930 var value = dict.c;
5931 var left = dict.d;
5932 var right = dict.e;
5933 if (_Utils_cmp(targetKey, key) < 0) {
5934 if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Black')) {
5935 var _v4 = left.a;
5936 var lLeft = left.d;
5937 if ((lLeft.$ === 'RBNode_elm_builtin') && (lLeft.a.$ === 'Red')) {
5938 var _v6 = lLeft.a;
5939 return A5(
5940 $elm$core$Dict$RBNode_elm_builtin,
5941 color,
5942 key,
5943 value,
5944 A2($elm$core$Dict$removeHelp, targetKey, left),
5945 right);
5946 } else {
5947 var _v7 = $elm$core$Dict$moveRedLeft(dict);
5948 if (_v7.$ === 'RBNode_elm_builtin') {
5949 var nColor = _v7.a;
5950 var nKey = _v7.b;
5951 var nValue = _v7.c;
5952 var nLeft = _v7.d;
5953 var nRight = _v7.e;
5954 return A5(
5955 $elm$core$Dict$balance,
5956 nColor,
5957 nKey,
5958 nValue,
5959 A2($elm$core$Dict$removeHelp, targetKey, nLeft),
5960 nRight);
5961 } else {
5962 return $elm$core$Dict$RBEmpty_elm_builtin;
5963 }
5964 }
5965 } else {
5966 return A5(
5967 $elm$core$Dict$RBNode_elm_builtin,
5968 color,
5969 key,
5970 value,
5971 A2($elm$core$Dict$removeHelp, targetKey, left),
5972 right);
5973 }
5974 } else {
5975 return A2(
5976 $elm$core$Dict$removeHelpEQGT,
5977 targetKey,
5978 A7($elm$core$Dict$removeHelpPrepEQGT, targetKey, dict, color, key, value, left, right));
5979 }
5980 }
5981 });
5982var $elm$core$Dict$removeHelpEQGT = F2(
5983 function (targetKey, dict) {
5984 if (dict.$ === 'RBNode_elm_builtin') {
5985 var color = dict.a;
5986 var key = dict.b;
5987 var value = dict.c;
5988 var left = dict.d;
5989 var right = dict.e;
5990 if (_Utils_eq(targetKey, key)) {
5991 var _v1 = $elm$core$Dict$getMin(right);
5992 if (_v1.$ === 'RBNode_elm_builtin') {
5993 var minKey = _v1.b;
5994 var minValue = _v1.c;
5995 return A5(
5996 $elm$core$Dict$balance,
5997 color,
5998 minKey,
5999 minValue,
6000 left,
6001 $elm$core$Dict$removeMin(right));
6002 } else {
6003 return $elm$core$Dict$RBEmpty_elm_builtin;
6004 }
6005 } else {
6006 return A5(
6007 $elm$core$Dict$balance,
6008 color,
6009 key,
6010 value,
6011 left,
6012 A2($elm$core$Dict$removeHelp, targetKey, right));
6013 }
6014 } else {
6015 return $elm$core$Dict$RBEmpty_elm_builtin;
6016 }
6017 });
6018var $elm$core$Dict$remove = F2(
6019 function (key, dict) {
6020 var _v0 = A2($elm$core$Dict$removeHelp, key, dict);
6021 if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) {
6022 var _v1 = _v0.a;
6023 var k = _v0.b;
6024 var v = _v0.c;
6025 var l = _v0.d;
6026 var r = _v0.e;
6027 return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r);
6028 } else {
6029 var x = _v0;
6030 return x;
6031 }
6032 });
6033var $elm$core$Dict$update = F3(
6034 function (targetKey, alter, dictionary) {
6035 var _v0 = alter(
6036 A2($elm$core$Dict$get, targetKey, dictionary));
6037 if (_v0.$ === 'Just') {
6038 var value = _v0.a;
6039 return A3($elm$core$Dict$insert, targetKey, value, dictionary);
6040 } else {
6041 return A2($elm$core$Dict$remove, targetKey, dictionary);
6042 }
6043 });
6044var $elm$http$Http$emptyBody = _Http_emptyBody;
6045var $elm$json$Json$Decode$decodeString = _Json_runOnString;
6046var $elm$core$Basics$composeR = F3(
6047 function (f, g, x) {
6048 return g(
6049 f(x));
6050 });
6051var $elm$http$Http$expectStringResponse = F2(
6052 function (toMsg, toResult) {
6053 return A3(
6054 _Http_expect,
6055 '',
6056 $elm$core$Basics$identity,
6057 A2($elm$core$Basics$composeR, toResult, toMsg));
6058 });
6059var $elm$core$Result$mapError = F2(
6060 function (f, result) {
6061 if (result.$ === 'Ok') {
6062 var v = result.a;
6063 return $elm$core$Result$Ok(v);
6064 } else {
6065 var e = result.a;
6066 return $elm$core$Result$Err(
6067 f(e));
6068 }
6069 });
6070var $elm$http$Http$BadBody = function (a) {
6071 return {$: 'BadBody', a: a};
6072};
6073var $elm$http$Http$BadStatus = function (a) {
6074 return {$: 'BadStatus', a: a};
6075};
6076var $elm$http$Http$BadUrl = function (a) {
6077 return {$: 'BadUrl', a: a};
6078};
6079var $elm$http$Http$NetworkError = {$: 'NetworkError'};
6080var $elm$http$Http$Timeout = {$: 'Timeout'};
6081var $elm$http$Http$resolve = F2(
6082 function (toResult, response) {
6083 switch (response.$) {
6084 case 'BadUrl_':
6085 var url = response.a;
6086 return $elm$core$Result$Err(
6087 $elm$http$Http$BadUrl(url));
6088 case 'Timeout_':
6089 return $elm$core$Result$Err($elm$http$Http$Timeout);
6090 case 'NetworkError_':
6091 return $elm$core$Result$Err($elm$http$Http$NetworkError);
6092 case 'BadStatus_':
6093 var metadata = response.a;
6094 return $elm$core$Result$Err(
6095 $elm$http$Http$BadStatus(metadata.statusCode));
6096 default:
6097 var body = response.b;
6098 return A2(
6099 $elm$core$Result$mapError,
6100 $elm$http$Http$BadBody,
6101 toResult(body));
6102 }
6103 });
6104var $elm$http$Http$expectJson = F2(
6105 function (toMsg, decoder) {
6106 return A2(
6107 $elm$http$Http$expectStringResponse,
6108 toMsg,
6109 $elm$http$Http$resolve(
6110 function (string) {
6111 return A2(
6112 $elm$core$Result$mapError,
6113 $elm$json$Json$Decode$errorToString,
6114 A2($elm$json$Json$Decode$decodeString, decoder, string));
6115 }));
6116 });
6117var $elm$json$Json$Decode$float = _Json_decodeFloat;
6118var $elm$http$Http$Request = function (a) {
6119 return {$: 'Request', a: a};
6120};
6121var $elm$http$Http$State = F2(
6122 function (reqs, subs) {
6123 return {reqs: reqs, subs: subs};
6124 });
6125var $elm$http$Http$init = $elm$core$Task$succeed(
6126 A2($elm$http$Http$State, $elm$core$Dict$empty, _List_Nil));
6127var $elm$core$Process$kill = _Scheduler_kill;
6128var $elm$core$Process$spawn = _Scheduler_spawn;
6129var $elm$http$Http$updateReqs = F3(
6130 function (router, cmds, reqs) {
6131 updateReqs:
6132 while (true) {
6133 if (!cmds.b) {
6134 return $elm$core$Task$succeed(reqs);
6135 } else {
6136 var cmd = cmds.a;
6137 var otherCmds = cmds.b;
6138 if (cmd.$ === 'Cancel') {
6139 var tracker = cmd.a;
6140 var _v2 = A2($elm$core$Dict$get, tracker, reqs);
6141 if (_v2.$ === 'Nothing') {
6142 var $temp$router = router,
6143 $temp$cmds = otherCmds,
6144 $temp$reqs = reqs;
6145 router = $temp$router;
6146 cmds = $temp$cmds;
6147 reqs = $temp$reqs;
6148 continue updateReqs;
6149 } else {
6150 var pid = _v2.a;
6151 return A2(
6152 $elm$core$Task$andThen,
6153 function (_v3) {
6154 return A3(
6155 $elm$http$Http$updateReqs,
6156 router,
6157 otherCmds,
6158 A2($elm$core$Dict$remove, tracker, reqs));
6159 },
6160 $elm$core$Process$kill(pid));
6161 }
6162 } else {
6163 var req = cmd.a;
6164 return A2(
6165 $elm$core$Task$andThen,
6166 function (pid) {
6167 var _v4 = req.tracker;
6168 if (_v4.$ === 'Nothing') {
6169 return A3($elm$http$Http$updateReqs, router, otherCmds, reqs);
6170 } else {
6171 var tracker = _v4.a;
6172 return A3(
6173 $elm$http$Http$updateReqs,
6174 router,
6175 otherCmds,
6176 A3($elm$core$Dict$insert, tracker, pid, reqs));
6177 }
6178 },
6179 $elm$core$Process$spawn(
6180 A3(
6181 _Http_toTask,
6182 router,
6183 $elm$core$Platform$sendToApp(router),
6184 req)));
6185 }
6186 }
6187 }
6188 });
6189var $elm$http$Http$onEffects = F4(
6190 function (router, cmds, subs, state) {
6191 return A2(
6192 $elm$core$Task$andThen,
6193 function (reqs) {
6194 return $elm$core$Task$succeed(
6195 A2($elm$http$Http$State, reqs, subs));
6196 },
6197 A3($elm$http$Http$updateReqs, router, cmds, state.reqs));
6198 });
6199var $elm$core$List$maybeCons = F3(
6200 function (f, mx, xs) {
6201 var _v0 = f(mx);
6202 if (_v0.$ === 'Just') {
6203 var x = _v0.a;
6204 return A2($elm$core$List$cons, x, xs);
6205 } else {
6206 return xs;
6207 }
6208 });
6209var $elm$core$List$filterMap = F2(
6210 function (f, xs) {
6211 return A3(
6212 $elm$core$List$foldr,
6213 $elm$core$List$maybeCons(f),
6214 _List_Nil,
6215 xs);
6216 });
6217var $elm$http$Http$maybeSend = F4(
6218 function (router, desiredTracker, progress, _v0) {
6219 var actualTracker = _v0.a;
6220 var toMsg = _v0.b;
6221 return _Utils_eq(desiredTracker, actualTracker) ? $elm$core$Maybe$Just(
6222 A2(
6223 $elm$core$Platform$sendToApp,
6224 router,
6225 toMsg(progress))) : $elm$core$Maybe$Nothing;
6226 });
6227var $elm$http$Http$onSelfMsg = F3(
6228 function (router, _v0, state) {
6229 var tracker = _v0.a;
6230 var progress = _v0.b;
6231 return A2(
6232 $elm$core$Task$andThen,
6233 function (_v1) {
6234 return $elm$core$Task$succeed(state);
6235 },
6236 $elm$core$Task$sequence(
6237 A2(
6238 $elm$core$List$filterMap,
6239 A3($elm$http$Http$maybeSend, router, tracker, progress),
6240 state.subs)));
6241 });
6242var $elm$http$Http$Cancel = function (a) {
6243 return {$: 'Cancel', a: a};
6244};
6245var $elm$http$Http$cmdMap = F2(
6246 function (func, cmd) {
6247 if (cmd.$ === 'Cancel') {
6248 var tracker = cmd.a;
6249 return $elm$http$Http$Cancel(tracker);
6250 } else {
6251 var r = cmd.a;
6252 return $elm$http$Http$Request(
6253 {
6254 allowCookiesFromOtherDomains: r.allowCookiesFromOtherDomains,
6255 body: r.body,
6256 expect: A2(_Http_mapExpect, func, r.expect),
6257 headers: r.headers,
6258 method: r.method,
6259 timeout: r.timeout,
6260 tracker: r.tracker,
6261 url: r.url
6262 });
6263 }
6264 });
6265var $elm$http$Http$MySub = F2(
6266 function (a, b) {
6267 return {$: 'MySub', a: a, b: b};
6268 });
6269var $elm$http$Http$subMap = F2(
6270 function (func, _v0) {
6271 var tracker = _v0.a;
6272 var toMsg = _v0.b;
6273 return A2(
6274 $elm$http$Http$MySub,
6275 tracker,
6276 A2($elm$core$Basics$composeR, toMsg, func));
6277 });
6278_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);
6279var $elm$http$Http$command = _Platform_leaf('Http');
6280var $elm$http$Http$subscription = _Platform_leaf('Http');
6281var $elm$http$Http$riskyRequest = function (r) {
6282 return $elm$http$Http$command(
6283 $elm$http$Http$Request(
6284 {allowCookiesFromOtherDomains: true, body: r.body, expect: r.expect, headers: r.headers, method: r.method, timeout: r.timeout, tracker: r.tracker, url: r.url}));
6285};
6286var $author$project$Checkout$fetchAmount = $elm$http$Http$riskyRequest(
6287 {
6288 body: $elm$http$Http$emptyBody,
6289 expect: A2($elm$http$Http$expectJson, $author$project$Checkout$AmountLoaded, $elm$json$Json$Decode$float),
6290 headers: _List_Nil,
6291 method: 'GET',
6292 timeout: $elm$core$Maybe$Nothing,
6293 tracker: $elm$core$Maybe$Nothing,
6294 url: 'http://127.0.0.1:7878/cart/total'
6295 });
6296var $author$project$Cart$CartLoaded = function (a) {
6297 return {$: 'CartLoaded', a: a};
6298};
6299var $author$project$Cart$CartListing = F2(
6300 function (productItem, quantity) {
6301 return {productItem: productItem, quantity: quantity};
6302 });
6303var $author$project$Cart$Product = F5(
6304 function (id, name, kind, price, description) {
6305 return {description: description, id: id, kind: kind, name: name, price: price};
6306 });
6307var $elm$json$Json$Decode$field = _Json_decodeField;
6308var $elm$json$Json$Decode$int = _Json_decodeInt;
6309var $elm$json$Json$Decode$map5 = _Json_map5;
6310var $elm$json$Json$Decode$null = _Json_decodeNull;
6311var $elm$json$Json$Decode$oneOf = _Json_oneOf;
6312var $elm$json$Json$Decode$nullable = function (decoder) {
6313 return $elm$json$Json$Decode$oneOf(
6314 _List_fromArray(
6315 [
6316 $elm$json$Json$Decode$null($elm$core$Maybe$Nothing),
6317 A2($elm$json$Json$Decode$map, $elm$core$Maybe$Just, decoder)
6318 ]));
6319};
6320var $elm$json$Json$Decode$string = _Json_decodeString;
6321var $author$project$Cart$decodeProduct = A6(
6322 $elm$json$Json$Decode$map5,
6323 $author$project$Cart$Product,
6324 A2($elm$json$Json$Decode$field, 'id', $elm$json$Json$Decode$int),
6325 A2($elm$json$Json$Decode$field, 'name', $elm$json$Json$Decode$string),
6326 A2(
6327 $elm$json$Json$Decode$field,
6328 'kind',
6329 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)),
6330 A2($elm$json$Json$Decode$field, 'price', $elm$json$Json$Decode$float),
6331 A2(
6332 $elm$json$Json$Decode$field,
6333 'description',
6334 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)));
6335var $elm$json$Json$Decode$list = _Json_decodeList;
6336var $author$project$Cart$decodeResponse = $elm$json$Json$Decode$list(
6337 A3(
6338 $elm$json$Json$Decode$map2,
6339 $author$project$Cart$CartListing,
6340 A2($elm$json$Json$Decode$field, 'product_item', $author$project$Cart$decodeProduct),
6341 A2($elm$json$Json$Decode$field, 'quantity', $elm$json$Json$Decode$int)));
6342var $elm$core$Debug$log = _Debug_log;
6343var $author$project$Cart$fetchCartItems = function () {
6344 var _v0 = A2($elm$core$Debug$log, 'cart', 'fetching cart items');
6345 return $elm$http$Http$riskyRequest(
6346 {
6347 body: $elm$http$Http$emptyBody,
6348 expect: A2($elm$http$Http$expectJson, $author$project$Cart$CartLoaded, $author$project$Cart$decodeResponse),
6349 headers: _List_Nil,
6350 method: 'GET',
6351 timeout: $elm$core$Maybe$Nothing,
6352 tracker: $elm$core$Maybe$Nothing,
6353 url: 'http://127.0.0.1:7878/cart/items'
6354 });
6355}();
6356var $author$project$Product$ListingLoaded = function (a) {
6357 return {$: 'ListingLoaded', a: a};
6358};
6359var $elm$json$Json$Decode$map7 = _Json_map7;
6360var $author$project$Product$decodeProduct = A8(
6361 $elm$json$Json$Decode$map7,
6362 $author$project$Product$Product,
6363 A2($elm$json$Json$Decode$field, 'id', $elm$json$Json$Decode$int),
6364 A2($elm$json$Json$Decode$field, 'name', $elm$json$Json$Decode$string),
6365 A2(
6366 $elm$json$Json$Decode$field,
6367 'kind',
6368 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)),
6369 A2($elm$json$Json$Decode$field, 'price', $elm$json$Json$Decode$float),
6370 A2(
6371 $elm$json$Json$Decode$field,
6372 'description',
6373 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)),
6374 A2($elm$json$Json$Decode$field, 'src', $elm$json$Json$Decode$string),
6375 A2($elm$json$Json$Decode$field, 'ios_src', $elm$json$Json$Decode$string));
6376var $elm$http$Http$request = function (r) {
6377 return $elm$http$Http$command(
6378 $elm$http$Http$Request(
6379 {allowCookiesFromOtherDomains: false, body: r.body, expect: r.expect, headers: r.headers, method: r.method, timeout: r.timeout, tracker: r.tracker, url: r.url}));
6380};
6381var $elm$http$Http$get = function (r) {
6382 return $elm$http$Http$request(
6383 {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});
6384};
6385var $author$project$Product$fetchListing = function (id) {
6386 var _v0 = A2(
6387 $elm$core$Debug$log,
6388 'err',
6389 'fetching listing ' + $elm$core$String$fromInt(id));
6390 return $elm$http$Http$get(
6391 {
6392 expect: A2($elm$http$Http$expectJson, $author$project$Product$ListingLoaded, $author$project$Product$decodeProduct),
6393 url: 'http://127.0.0.1:7878/product/' + $elm$core$String$fromInt(id)
6394 });
6395};
6396var $author$project$Catalog$ProductsLoaded = function (a) {
6397 return {$: 'ProductsLoaded', a: a};
6398};
6399var $author$project$Catalog$Product = F8(
6400 function (id, name, kind, price, description, averageRating, src, iosSrc) {
6401 return {averageRating: averageRating, description: description, id: id, iosSrc: iosSrc, kind: kind, name: name, price: price, src: src};
6402 });
6403var $elm$json$Json$Decode$map8 = _Json_map8;
6404var $author$project$Catalog$decodeProduct = A9(
6405 $elm$json$Json$Decode$map8,
6406 $author$project$Catalog$Product,
6407 A2($elm$json$Json$Decode$field, 'id', $elm$json$Json$Decode$int),
6408 A2($elm$json$Json$Decode$field, 'name', $elm$json$Json$Decode$string),
6409 A2(
6410 $elm$json$Json$Decode$field,
6411 'kind',
6412 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)),
6413 A2($elm$json$Json$Decode$field, 'price', $elm$json$Json$Decode$float),
6414 A2(
6415 $elm$json$Json$Decode$field,
6416 'description',
6417 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)),
6418 A2(
6419 $elm$json$Json$Decode$field,
6420 'average_rating',
6421 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$float)),
6422 A2($elm$json$Json$Decode$field, 'src', $elm$json$Json$Decode$string),
6423 A2($elm$json$Json$Decode$field, 'ios_src', $elm$json$Json$Decode$string));
6424var $author$project$Catalog$decodeResponse = $elm$json$Json$Decode$list($author$project$Catalog$decodeProduct);
6425var $author$project$Catalog$fetchProducts = function () {
6426 var _v0 = A2($elm$core$Debug$log, 'err', 'fetching products');
6427 return $elm$http$Http$get(
6428 {
6429 expect: A2($elm$http$Http$expectJson, $author$project$Catalog$ProductsLoaded, $author$project$Catalog$decodeResponse),
6430 url: 'http://127.0.0.1:7878/product/catalog'
6431 });
6432}();
6433var $author$project$Product$RatingsLoaded = function (a) {
6434 return {$: 'RatingsLoaded', a: a};
6435};
6436var $author$project$Product$Rating = F5(
6437 function (commentDate, commentText, customerName, productName, stars) {
6438 return {commentDate: commentDate, commentText: commentText, customerName: customerName, productName: productName, stars: stars};
6439 });
6440var $author$project$Product$decodeRating = A6(
6441 $elm$json$Json$Decode$map5,
6442 $author$project$Product$Rating,
6443 A2($elm$json$Json$Decode$field, 'comment_date', $elm$json$Json$Decode$string),
6444 A2(
6445 $elm$json$Json$Decode$field,
6446 'comment_text',
6447 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)),
6448 A2($elm$json$Json$Decode$field, 'customer_name', $elm$json$Json$Decode$string),
6449 A2($elm$json$Json$Decode$field, 'product_name', $elm$json$Json$Decode$string),
6450 A2($elm$json$Json$Decode$field, 'stars', $elm$json$Json$Decode$int));
6451var $author$project$Product$decodeRatings = $elm$json$Json$Decode$list($author$project$Product$decodeRating);
6452var $author$project$Product$fetchRatings = function (id) {
6453 var _v0 = A2(
6454 $elm$core$Debug$log,
6455 'err',
6456 'fetching ratings ' + $elm$core$String$fromInt(id));
6457 return $elm$http$Http$get(
6458 {
6459 expect: A2($elm$http$Http$expectJson, $author$project$Product$RatingsLoaded, $author$project$Product$decodeRatings),
6460 url: 'http://127.0.0.1:7878/product/reviews/' + $elm$core$String$fromInt(id)
6461 });
6462};
6463var $elm$browser$Browser$Navigation$load = _Browser_load;
6464var $elm$core$Platform$Cmd$map = _Platform_map;
6465var $elm$url$Url$Parser$State = F5(
6466 function (visited, unvisited, params, frag, value) {
6467 return {frag: frag, params: params, unvisited: unvisited, value: value, visited: visited};
6468 });
6469var $elm$url$Url$Parser$getFirstMatch = function (states) {
6470 getFirstMatch:
6471 while (true) {
6472 if (!states.b) {
6473 return $elm$core$Maybe$Nothing;
6474 } else {
6475 var state = states.a;
6476 var rest = states.b;
6477 var _v1 = state.unvisited;
6478 if (!_v1.b) {
6479 return $elm$core$Maybe$Just(state.value);
6480 } else {
6481 if ((_v1.a === '') && (!_v1.b.b)) {
6482 return $elm$core$Maybe$Just(state.value);
6483 } else {
6484 var $temp$states = rest;
6485 states = $temp$states;
6486 continue getFirstMatch;
6487 }
6488 }
6489 }
6490 }
6491};
6492var $elm$url$Url$Parser$removeFinalEmpty = function (segments) {
6493 if (!segments.b) {
6494 return _List_Nil;
6495 } else {
6496 if ((segments.a === '') && (!segments.b.b)) {
6497 return _List_Nil;
6498 } else {
6499 var segment = segments.a;
6500 var rest = segments.b;
6501 return A2(
6502 $elm$core$List$cons,
6503 segment,
6504 $elm$url$Url$Parser$removeFinalEmpty(rest));
6505 }
6506 }
6507};
6508var $elm$url$Url$Parser$preparePath = function (path) {
6509 var _v0 = A2($elm$core$String$split, '/', path);
6510 if (_v0.b && (_v0.a === '')) {
6511 var segments = _v0.b;
6512 return $elm$url$Url$Parser$removeFinalEmpty(segments);
6513 } else {
6514 var segments = _v0;
6515 return $elm$url$Url$Parser$removeFinalEmpty(segments);
6516 }
6517};
6518var $elm$url$Url$Parser$addToParametersHelp = F2(
6519 function (value, maybeList) {
6520 if (maybeList.$ === 'Nothing') {
6521 return $elm$core$Maybe$Just(
6522 _List_fromArray(
6523 [value]));
6524 } else {
6525 var list = maybeList.a;
6526 return $elm$core$Maybe$Just(
6527 A2($elm$core$List$cons, value, list));
6528 }
6529 });
6530var $elm$url$Url$percentDecode = _Url_percentDecode;
6531var $elm$url$Url$Parser$addParam = F2(
6532 function (segment, dict) {
6533 var _v0 = A2($elm$core$String$split, '=', segment);
6534 if ((_v0.b && _v0.b.b) && (!_v0.b.b.b)) {
6535 var rawKey = _v0.a;
6536 var _v1 = _v0.b;
6537 var rawValue = _v1.a;
6538 var _v2 = $elm$url$Url$percentDecode(rawKey);
6539 if (_v2.$ === 'Nothing') {
6540 return dict;
6541 } else {
6542 var key = _v2.a;
6543 var _v3 = $elm$url$Url$percentDecode(rawValue);
6544 if (_v3.$ === 'Nothing') {
6545 return dict;
6546 } else {
6547 var value = _v3.a;
6548 return A3(
6549 $elm$core$Dict$update,
6550 key,
6551 $elm$url$Url$Parser$addToParametersHelp(value),
6552 dict);
6553 }
6554 }
6555 } else {
6556 return dict;
6557 }
6558 });
6559var $elm$url$Url$Parser$prepareQuery = function (maybeQuery) {
6560 if (maybeQuery.$ === 'Nothing') {
6561 return $elm$core$Dict$empty;
6562 } else {
6563 var qry = maybeQuery.a;
6564 return A3(
6565 $elm$core$List$foldr,
6566 $elm$url$Url$Parser$addParam,
6567 $elm$core$Dict$empty,
6568 A2($elm$core$String$split, '&', qry));
6569 }
6570};
6571var $elm$url$Url$Parser$parse = F2(
6572 function (_v0, url) {
6573 var parser = _v0.a;
6574 return $elm$url$Url$Parser$getFirstMatch(
6575 parser(
6576 A5(
6577 $elm$url$Url$Parser$State,
6578 _List_Nil,
6579 $elm$url$Url$Parser$preparePath(url.path),
6580 $elm$url$Url$Parser$prepareQuery(url.query),
6581 url.fragment,
6582 $elm$core$Basics$identity)));
6583 });
6584var $author$project$Main$LoginPage = {$: 'LoginPage'};
6585var $author$project$Main$SignupPage = {$: 'SignupPage'};
6586var $elm$url$Url$Parser$Parser = function (a) {
6587 return {$: 'Parser', a: a};
6588};
6589var $elm$url$Url$Parser$custom = F2(
6590 function (tipe, stringToSomething) {
6591 return $elm$url$Url$Parser$Parser(
6592 function (_v0) {
6593 var visited = _v0.visited;
6594 var unvisited = _v0.unvisited;
6595 var params = _v0.params;
6596 var frag = _v0.frag;
6597 var value = _v0.value;
6598 if (!unvisited.b) {
6599 return _List_Nil;
6600 } else {
6601 var next = unvisited.a;
6602 var rest = unvisited.b;
6603 var _v2 = stringToSomething(next);
6604 if (_v2.$ === 'Just') {
6605 var nextValue = _v2.a;
6606 return _List_fromArray(
6607 [
6608 A5(
6609 $elm$url$Url$Parser$State,
6610 A2($elm$core$List$cons, next, visited),
6611 rest,
6612 params,
6613 frag,
6614 value(nextValue))
6615 ]);
6616 } else {
6617 return _List_Nil;
6618 }
6619 }
6620 });
6621 });
6622var $elm$url$Url$Parser$int = A2($elm$url$Url$Parser$custom, 'NUMBER', $elm$core$String$toInt);
6623var $elm$url$Url$Parser$mapState = F2(
6624 function (func, _v0) {
6625 var visited = _v0.visited;
6626 var unvisited = _v0.unvisited;
6627 var params = _v0.params;
6628 var frag = _v0.frag;
6629 var value = _v0.value;
6630 return A5(
6631 $elm$url$Url$Parser$State,
6632 visited,
6633 unvisited,
6634 params,
6635 frag,
6636 func(value));
6637 });
6638var $elm$url$Url$Parser$map = F2(
6639 function (subValue, _v0) {
6640 var parseArg = _v0.a;
6641 return $elm$url$Url$Parser$Parser(
6642 function (_v1) {
6643 var visited = _v1.visited;
6644 var unvisited = _v1.unvisited;
6645 var params = _v1.params;
6646 var frag = _v1.frag;
6647 var value = _v1.value;
6648 return A2(
6649 $elm$core$List$map,
6650 $elm$url$Url$Parser$mapState(value),
6651 parseArg(
6652 A5($elm$url$Url$Parser$State, visited, unvisited, params, frag, subValue)));
6653 });
6654 });
6655var $elm$core$List$append = F2(
6656 function (xs, ys) {
6657 if (!ys.b) {
6658 return xs;
6659 } else {
6660 return A3($elm$core$List$foldr, $elm$core$List$cons, ys, xs);
6661 }
6662 });
6663var $elm$core$List$concat = function (lists) {
6664 return A3($elm$core$List$foldr, $elm$core$List$append, _List_Nil, lists);
6665};
6666var $elm$core$List$concatMap = F2(
6667 function (f, list) {
6668 return $elm$core$List$concat(
6669 A2($elm$core$List$map, f, list));
6670 });
6671var $elm$url$Url$Parser$oneOf = function (parsers) {
6672 return $elm$url$Url$Parser$Parser(
6673 function (state) {
6674 return A2(
6675 $elm$core$List$concatMap,
6676 function (_v0) {
6677 var parser = _v0.a;
6678 return parser(state);
6679 },
6680 parsers);
6681 });
6682};
6683var $elm$url$Url$Parser$s = function (str) {
6684 return $elm$url$Url$Parser$Parser(
6685 function (_v0) {
6686 var visited = _v0.visited;
6687 var unvisited = _v0.unvisited;
6688 var params = _v0.params;
6689 var frag = _v0.frag;
6690 var value = _v0.value;
6691 if (!unvisited.b) {
6692 return _List_Nil;
6693 } else {
6694 var next = unvisited.a;
6695 var rest = unvisited.b;
6696 return _Utils_eq(next, str) ? _List_fromArray(
6697 [
6698 A5(
6699 $elm$url$Url$Parser$State,
6700 A2($elm$core$List$cons, next, visited),
6701 rest,
6702 params,
6703 frag,
6704 value)
6705 ]) : _List_Nil;
6706 }
6707 });
6708};
6709var $elm$url$Url$Parser$slash = F2(
6710 function (_v0, _v1) {
6711 var parseBefore = _v0.a;
6712 var parseAfter = _v1.a;
6713 return $elm$url$Url$Parser$Parser(
6714 function (state) {
6715 return A2(
6716 $elm$core$List$concatMap,
6717 parseAfter,
6718 parseBefore(state));
6719 });
6720 });
6721var $elm$url$Url$Parser$top = $elm$url$Url$Parser$Parser(
6722 function (state) {
6723 return _List_fromArray(
6724 [state]);
6725 });
6726var $author$project$Main$parseRoute = $elm$url$Url$Parser$oneOf(
6727 _List_fromArray(
6728 [
6729 A2(
6730 $elm$url$Url$Parser$map,
6731 $author$project$Main$LoginPage,
6732 $elm$url$Url$Parser$s('login')),
6733 A2($elm$url$Url$Parser$map, $author$project$Main$HomePage, $elm$url$Url$Parser$top),
6734 A2(
6735 $elm$url$Url$Parser$map,
6736 $author$project$Main$CatalogPage,
6737 $elm$url$Url$Parser$s('catalog')),
6738 A2(
6739 $elm$url$Url$Parser$map,
6740 $author$project$Main$CartPage,
6741 $elm$url$Url$Parser$s('cart')),
6742 A2(
6743 $elm$url$Url$Parser$map,
6744 $author$project$Main$SignupPage,
6745 $elm$url$Url$Parser$s('signup')),
6746 A2(
6747 $elm$url$Url$Parser$map,
6748 $author$project$Main$CheckoutPage,
6749 $elm$url$Url$Parser$s('checkout')),
6750 A2(
6751 $elm$url$Url$Parser$map,
6752 $author$project$Main$ProductPage,
6753 A2(
6754 $elm$url$Url$Parser$slash,
6755 $elm$url$Url$Parser$s('product'),
6756 $elm$url$Url$Parser$int))
6757 ]));
6758var $elm$browser$Browser$Navigation$pushUrl = _Browser_pushUrl;
6759var $elm$browser$Browser$Navigation$replaceUrl = _Browser_replaceUrl;
6760var $elm$url$Url$addPort = F2(
6761 function (maybePort, starter) {
6762 if (maybePort.$ === 'Nothing') {
6763 return starter;
6764 } else {
6765 var port_ = maybePort.a;
6766 return starter + (':' + $elm$core$String$fromInt(port_));
6767 }
6768 });
6769var $elm$url$Url$addPrefixed = F3(
6770 function (prefix, maybeSegment, starter) {
6771 if (maybeSegment.$ === 'Nothing') {
6772 return starter;
6773 } else {
6774 var segment = maybeSegment.a;
6775 return _Utils_ap(
6776 starter,
6777 _Utils_ap(prefix, segment));
6778 }
6779 });
6780var $elm$url$Url$toString = function (url) {
6781 var http = function () {
6782 var _v0 = url.protocol;
6783 if (_v0.$ === 'Http') {
6784 return 'http://';
6785 } else {
6786 return 'https://';
6787 }
6788 }();
6789 return A3(
6790 $elm$url$Url$addPrefixed,
6791 '#',
6792 url.fragment,
6793 A3(
6794 $elm$url$Url$addPrefixed,
6795 '?',
6796 url.query,
6797 _Utils_ap(
6798 A2(
6799 $elm$url$Url$addPort,
6800 url.port_,
6801 _Utils_ap(http, url.host)),
6802 url.path)));
6803};
6804var $author$project$Main$LogoutSuccess = function (a) {
6805 return {$: 'LogoutSuccess', a: a};
6806};
6807var $elm$http$Http$expectBytesResponse = F2(
6808 function (toMsg, toResult) {
6809 return A3(
6810 _Http_expect,
6811 'arraybuffer',
6812 _Http_toDataView,
6813 A2($elm$core$Basics$composeR, toResult, toMsg));
6814 });
6815var $elm$http$Http$expectWhatever = function (toMsg) {
6816 return A2(
6817 $elm$http$Http$expectBytesResponse,
6818 toMsg,
6819 $elm$http$Http$resolve(
6820 function (_v0) {
6821 return $elm$core$Result$Ok(_Utils_Tuple0);
6822 }));
6823};
6824var $author$project$Main$tryLogout = $elm$http$Http$riskyRequest(
6825 {
6826 body: $elm$http$Http$emptyBody,
6827 expect: $elm$http$Http$expectWhatever($author$project$Main$LogoutSuccess),
6828 headers: _List_Nil,
6829 method: 'POST',
6830 timeout: $elm$core$Maybe$Nothing,
6831 tracker: $elm$core$Maybe$Nothing,
6832 url: 'http://127.0.0.1:7878/user/logout'
6833 });
6834var $author$project$Cart$Loaded = {$: 'Loaded'};
6835var $author$project$Cart$Loading = {$: 'Loading'};
6836var $author$project$Cart$AddToCartSuccess = function (a) {
6837 return {$: 'AddToCartSuccess', a: a};
6838};
6839var $elm$http$Http$stringBody = _Http_pair;
6840var $author$project$Cart$addToCart = function (id) {
6841 var _v0 = A2(
6842 $elm$core$Debug$log,
6843 'err',
6844 'adding to cart: ' + $elm$core$String$fromInt(id));
6845 return $elm$http$Http$riskyRequest(
6846 {
6847 body: A2(
6848 $elm$http$Http$stringBody,
6849 'applcation/json',
6850 $elm$core$String$fromInt(id)),
6851 expect: $elm$http$Http$expectWhatever($author$project$Cart$AddToCartSuccess),
6852 headers: _List_Nil,
6853 method: 'POST',
6854 timeout: $elm$core$Maybe$Nothing,
6855 tracker: $elm$core$Maybe$Nothing,
6856 url: 'http://127.0.0.1:7878/cart/add'
6857 });
6858};
6859var $author$project$Cart$CartItemRemoved = function (a) {
6860 return {$: 'CartItemRemoved', a: a};
6861};
6862var $author$project$Cart$removeProduct = function (id) {
6863 var _v0 = A2($elm$core$Debug$log, 'cart', 'fetching cart items');
6864 return $elm$http$Http$riskyRequest(
6865 {
6866 body: A2(
6867 $elm$http$Http$stringBody,
6868 'application/json',
6869 $elm$core$String$fromInt(id)),
6870 expect: $elm$http$Http$expectWhatever($author$project$Cart$CartItemRemoved),
6871 headers: _List_Nil,
6872 method: 'POST',
6873 timeout: $elm$core$Maybe$Nothing,
6874 tracker: $elm$core$Maybe$Nothing,
6875 url: 'http://127.0.0.1:7878/cart/remove'
6876 });
6877};
6878var $author$project$Cart$update = F2(
6879 function (msg, model) {
6880 switch (msg.$) {
6881 case 'CartLoaded':
6882 var res = msg.a;
6883 if (res.$ === 'Ok') {
6884 var s = res.a;
6885 return _Utils_Tuple2(
6886 _Utils_update(
6887 model,
6888 {pageStatus: $author$project$Cart$Loaded, products: s}),
6889 $elm$core$Platform$Cmd$none);
6890 } else {
6891 var e = res.a;
6892 var _v2 = A2($elm$core$Debug$log, 'error', e);
6893 return _Utils_Tuple2(
6894 _Utils_update(
6895 model,
6896 {pageStatus: $author$project$Cart$NotLoaded}),
6897 $elm$core$Platform$Cmd$none);
6898 }
6899 case 'RemoveFromCart':
6900 var id = msg.a;
6901 return _Utils_Tuple2(
6902 model,
6903 $author$project$Cart$removeProduct(id));
6904 case 'CartItemRemoved':
6905 return _Utils_Tuple2(
6906 _Utils_update(
6907 model,
6908 {pageStatus: $author$project$Cart$Loading}),
6909 $author$project$Cart$fetchCartItems);
6910 case 'FetchCartItems':
6911 return _Utils_Tuple2(
6912 _Utils_update(
6913 model,
6914 {pageStatus: $author$project$Cart$Loading}),
6915 $author$project$Cart$fetchCartItems);
6916 case 'AddToCartPressed':
6917 var id = msg.a;
6918 return _Utils_Tuple2(
6919 model,
6920 $author$project$Cart$addToCart(id));
6921 default:
6922 return _Utils_Tuple2(
6923 _Utils_update(
6924 model,
6925 {pageStatus: $author$project$Cart$Loading}),
6926 $author$project$Cart$fetchCartItems);
6927 }
6928 });
6929var $author$project$Catalog$Loaded = {$: 'Loaded'};
6930var $author$project$Catalog$Loading = {$: 'Loading'};
6931var $elm$core$Basics$always = F2(
6932 function (a, _v0) {
6933 return a;
6934 });
6935var $elm$core$Tuple$mapFirst = F2(
6936 function (func, _v0) {
6937 var x = _v0.a;
6938 var y = _v0.b;
6939 return _Utils_Tuple2(
6940 func(x),
6941 y);
6942 });
6943var $elm$core$Tuple$mapSecond = F2(
6944 function (func, _v0) {
6945 var x = _v0.a;
6946 var y = _v0.b;
6947 return _Utils_Tuple2(
6948 x,
6949 func(y));
6950 });
6951var $author$project$Catalog$update = F2(
6952 function (msg, model) {
6953 switch (msg.$) {
6954 case 'ProductsLoaded':
6955 var res = msg.a;
6956 if (res.$ === 'Ok') {
6957 var s = res.a;
6958 return _Utils_Tuple2(
6959 _Utils_update(
6960 model,
6961 {pageStatus: $author$project$Catalog$Loaded, products: s}),
6962 $elm$core$Platform$Cmd$none);
6963 } else {
6964 var e = res.a;
6965 var _v2 = A2($elm$core$Debug$log, 'error', e);
6966 return _Utils_Tuple2(
6967 _Utils_update(
6968 model,
6969 {pageStatus: $author$project$Catalog$NotLoaded}),
6970 $elm$core$Platform$Cmd$none);
6971 }
6972 case 'FetchProducts':
6973 return _Utils_Tuple2(
6974 _Utils_update(
6975 model,
6976 {pageStatus: $author$project$Catalog$Loading}),
6977 $author$project$Catalog$fetchProducts);
6978 case 'ChangePriceLower':
6979 var v = msg.a;
6980 var fs = model.filters;
6981 var nfs = _Utils_update(
6982 fs,
6983 {
6984 price: A2(
6985 $elm$core$Tuple$mapFirst,
6986 $elm$core$Basics$always(v),
6987 fs.price)
6988 });
6989 return _Utils_Tuple2(
6990 _Utils_update(
6991 model,
6992 {filters: nfs}),
6993 $elm$core$Platform$Cmd$none);
6994 case 'ChangePriceUpper':
6995 var v = msg.a;
6996 var fs = model.filters;
6997 var nfs = _Utils_update(
6998 fs,
6999 {
7000 price: A2(
7001 $elm$core$Tuple$mapSecond,
7002 $elm$core$Basics$always(v),
7003 fs.price)
7004 });
7005 return _Utils_Tuple2(
7006 _Utils_update(
7007 model,
7008 {filters: nfs}),
7009 $elm$core$Platform$Cmd$none);
7010 case 'ChangeRatingLower':
7011 var v = msg.a;
7012 var fs = model.filters;
7013 var nfs = _Utils_update(
7014 fs,
7015 {
7016 rating: A2(
7017 $elm$core$Tuple$mapFirst,
7018 $elm$core$Basics$always(v),
7019 fs.rating)
7020 });
7021 return _Utils_Tuple2(
7022 _Utils_update(
7023 model,
7024 {filters: nfs}),
7025 $elm$core$Platform$Cmd$none);
7026 default:
7027 var v = msg.a;
7028 var fs = model.filters;
7029 var nfs = _Utils_update(
7030 fs,
7031 {
7032 rating: A2(
7033 $elm$core$Tuple$mapSecond,
7034 $elm$core$Basics$always(v),
7035 fs.rating)
7036 });
7037 return _Utils_Tuple2(
7038 _Utils_update(
7039 model,
7040 {filters: nfs}),
7041 $elm$core$Platform$Cmd$none);
7042 }
7043 });
7044var $author$project$Checkout$Loading = {$: 'Loading'};
7045var $author$project$Checkout$CheckoutSuccessful = function (a) {
7046 return {$: 'CheckoutSuccessful', a: a};
7047};
7048var $author$project$Checkout$tryCheckout = function (pm) {
7049 return $elm$http$Http$riskyRequest(
7050 {
7051 body: A2($elm$http$Http$stringBody, 'application/json', pm),
7052 expect: $elm$http$Http$expectWhatever($author$project$Checkout$CheckoutSuccessful),
7053 headers: _List_Nil,
7054 method: 'POST',
7055 timeout: $elm$core$Maybe$Nothing,
7056 tracker: $elm$core$Maybe$Nothing,
7057 url: 'http://127.0.0.1:7878/transaction/checkout'
7058 });
7059};
7060var $author$project$Checkout$update = F2(
7061 function (msg, model) {
7062 switch (msg.$) {
7063 case 'CheckoutPressed':
7064 return _Utils_Tuple2(
7065 model,
7066 $author$project$Checkout$tryCheckout(model.paymentMode));
7067 case 'CheckoutSuccessful':
7068 return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
7069 case 'AmountLoaded':
7070 var res = msg.a;
7071 if (res.$ === 'Ok') {
7072 var v = res.a;
7073 return _Utils_Tuple2(
7074 _Utils_update(
7075 model,
7076 {cartTotal: v}),
7077 $elm$core$Platform$Cmd$none);
7078 } else {
7079 return _Utils_Tuple2(
7080 _Utils_update(
7081 model,
7082 {pageStatus: $author$project$Checkout$NotLoaded}),
7083 $elm$core$Platform$Cmd$none);
7084 }
7085 case 'FetchAmount':
7086 var _v2 = A2($elm$core$Debug$log, 'err', 'fetching checkout amount');
7087 return _Utils_Tuple2(
7088 _Utils_update(
7089 model,
7090 {pageStatus: $author$project$Checkout$Loading}),
7091 $author$project$Checkout$fetchAmount);
7092 default:
7093 var s = msg.a;
7094 return _Utils_Tuple2(
7095 _Utils_update(
7096 model,
7097 {paymentMode: s}),
7098 $elm$core$Platform$Cmd$none);
7099 }
7100 });
7101var $author$project$Login$InvalidLogin = {$: 'InvalidLogin'};
7102var $author$project$Login$LoggedIn = {$: 'LoggedIn'};
7103var $author$project$Login$LoggingIn = {$: 'LoggingIn'};
7104var $author$project$Login$LoginSuccess = function (a) {
7105 return {$: 'LoginSuccess', a: a};
7106};
7107var $elm$json$Json$Encode$object = function (pairs) {
7108 return _Json_wrap(
7109 A3(
7110 $elm$core$List$foldl,
7111 F2(
7112 function (_v0, obj) {
7113 var k = _v0.a;
7114 var v = _v0.b;
7115 return A3(_Json_addField, k, v, obj);
7116 }),
7117 _Json_emptyObject(_Utils_Tuple0),
7118 pairs));
7119};
7120var $elm$json$Json$Encode$string = _Json_wrap;
7121var $author$project$Login$encodeLogin = function (model) {
7122 return $elm$json$Json$Encode$object(
7123 _List_fromArray(
7124 [
7125 _Utils_Tuple2(
7126 'username',
7127 $elm$json$Json$Encode$string(model.username)),
7128 _Utils_Tuple2(
7129 'password',
7130 $elm$json$Json$Encode$string(model.password))
7131 ]));
7132};
7133var $elm$http$Http$jsonBody = function (value) {
7134 return A2(
7135 _Http_pair,
7136 'application/json',
7137 A2($elm$json$Json$Encode$encode, 0, value));
7138};
7139var $author$project$Login$tryLogin = function (model) {
7140 return $elm$http$Http$riskyRequest(
7141 {
7142 body: $elm$http$Http$jsonBody(
7143 $author$project$Login$encodeLogin(model)),
7144 expect: $elm$http$Http$expectWhatever($author$project$Login$LoginSuccess),
7145 headers: _List_Nil,
7146 method: 'POST',
7147 timeout: $elm$core$Maybe$Nothing,
7148 tracker: $elm$core$Maybe$Nothing,
7149 url: 'http://127.0.0.1:7878/user/login'
7150 });
7151};
7152var $author$project$Login$update = F2(
7153 function (msg, model) {
7154 switch (msg.$) {
7155 case 'PassEntered':
7156 var s = msg.a;
7157 return _Utils_Tuple2(
7158 _Utils_update(
7159 model,
7160 {password: s}),
7161 $elm$core$Platform$Cmd$none);
7162 case 'UserEntered':
7163 var s = msg.a;
7164 return _Utils_Tuple2(
7165 _Utils_update(
7166 model,
7167 {username: s}),
7168 $elm$core$Platform$Cmd$none);
7169 case 'LoginPressed':
7170 return _Utils_Tuple2(
7171 _Utils_update(
7172 model,
7173 {loginStatus: $author$project$Login$LoggingIn}),
7174 $author$project$Login$tryLogin(model));
7175 case 'LoginSuccess':
7176 var res = msg.a;
7177 if (res.$ === 'Ok') {
7178 var s = res.a;
7179 return _Utils_Tuple2(
7180 _Utils_update(
7181 model,
7182 {loginStatus: $author$project$Login$LoggedIn}),
7183 $elm$core$Platform$Cmd$none);
7184 } else {
7185 var e = res.a;
7186 return _Utils_Tuple2(
7187 _Utils_update(
7188 model,
7189 {loginStatus: $author$project$Login$InvalidLogin}),
7190 $elm$core$Platform$Cmd$none);
7191 }
7192 default:
7193 return _Utils_Tuple2(
7194 _Utils_update(
7195 model,
7196 {loginStatus: $author$project$Login$InvalidLogin}),
7197 $elm$core$Platform$Cmd$none);
7198 }
7199 });
7200var $author$project$Product$Loaded = {$: 'Loaded'};
7201var $author$project$Product$Loading = {$: 'Loading'};
7202var $author$project$Product$SubmitFail = {$: 'SubmitFail'};
7203var $author$project$Product$SubmitSuccess = {$: 'SubmitSuccess'};
7204var $author$project$Product$Submitting = {$: 'Submitting'};
7205var $author$project$Product$AddToCartSuccess = function (a) {
7206 return {$: 'AddToCartSuccess', a: a};
7207};
7208var $author$project$Product$addToCart = function (model) {
7209 var _v0 = A2(
7210 $elm$core$Debug$log,
7211 'err',
7212 'adding to cart: ' + $elm$core$String$fromInt(model.listing.id));
7213 return $elm$http$Http$riskyRequest(
7214 {
7215 body: A2(
7216 $elm$http$Http$stringBody,
7217 'applcation/json',
7218 $elm$core$String$fromInt(model.listing.id)),
7219 expect: $elm$http$Http$expectWhatever($author$project$Product$AddToCartSuccess),
7220 headers: _List_Nil,
7221 method: 'POST',
7222 timeout: $elm$core$Maybe$Nothing,
7223 tracker: $elm$core$Maybe$Nothing,
7224 url: 'http://127.0.0.1:7878/cart/add'
7225 });
7226};
7227var $author$project$Product$AddRatingSuccess = function (a) {
7228 return {$: 'AddRatingSuccess', a: a};
7229};
7230var $elm$json$Json$Encode$int = _Json_wrap;
7231var $author$project$Product$encodeRatingForm = function (model) {
7232 return $elm$json$Json$Encode$object(
7233 _List_fromArray(
7234 [
7235 _Utils_Tuple2(
7236 'product_id',
7237 $elm$json$Json$Encode$int(model.listing.id)),
7238 _Utils_Tuple2(
7239 'stars',
7240 $elm$json$Json$Encode$int(model.ratingStars)),
7241 _Utils_Tuple2(
7242 'comment_text',
7243 $elm$json$Json$Encode$string(model.ratingText))
7244 ]));
7245};
7246var $author$project$Product$submitRating = function (model) {
7247 var _v0 = A2(
7248 $elm$core$Debug$log,
7249 'err',
7250 'submitting rating for' + $elm$core$String$fromInt(model.listing.id));
7251 return $elm$http$Http$riskyRequest(
7252 {
7253 body: $elm$http$Http$jsonBody(
7254 $author$project$Product$encodeRatingForm(model)),
7255 expect: $elm$http$Http$expectWhatever($author$project$Product$AddRatingSuccess),
7256 headers: _List_Nil,
7257 method: 'POST',
7258 timeout: $elm$core$Maybe$Nothing,
7259 tracker: $elm$core$Maybe$Nothing,
7260 url: 'http://127.0.0.1:7878/rating/add'
7261 });
7262};
7263var $author$project$Product$update = F2(
7264 function (msg, model) {
7265 switch (msg.$) {
7266 case 'ListingLoaded':
7267 var res = msg.a;
7268 if (res.$ === 'Ok') {
7269 var s = res.a;
7270 return _Utils_Tuple2(
7271 _Utils_update(
7272 model,
7273 {listing: s, pageStatus: $author$project$Product$Loaded}),
7274 $elm$core$Platform$Cmd$none);
7275 } else {
7276 var e = res.a;
7277 var _v2 = A2($elm$core$Debug$log, 'error', e);
7278 return _Utils_Tuple2(
7279 _Utils_update(
7280 model,
7281 {pageStatus: $author$project$Product$NotLoaded}),
7282 $elm$core$Platform$Cmd$none);
7283 }
7284 case 'RatingsLoaded':
7285 var res = msg.a;
7286 if (res.$ === 'Ok') {
7287 var s = res.a;
7288 return _Utils_Tuple2(
7289 _Utils_update(
7290 model,
7291 {pageStatus: $author$project$Product$Loaded, ratings: s}),
7292 $elm$core$Platform$Cmd$none);
7293 } else {
7294 var e = res.a;
7295 var _v4 = A2($elm$core$Debug$log, 'error', e);
7296 return _Utils_Tuple2(
7297 _Utils_update(
7298 model,
7299 {pageStatus: $author$project$Product$NotLoaded}),
7300 $elm$core$Platform$Cmd$none);
7301 }
7302 case 'FetchProduct':
7303 var id = msg.a;
7304 return _Utils_Tuple2(
7305 _Utils_update(
7306 model,
7307 {pageStatus: $author$project$Product$Loading}),
7308 $author$project$Product$fetchListing(id));
7309 case 'FetchRatings':
7310 var id = msg.a;
7311 return _Utils_Tuple2(
7312 _Utils_update(
7313 model,
7314 {pageStatus: $author$project$Product$Loading}),
7315 $author$project$Product$fetchRatings(id));
7316 case 'AddRatingStars':
7317 var i = msg.a;
7318 return _Utils_Tuple2(
7319 _Utils_update(
7320 model,
7321 {ratingStars: i}),
7322 $elm$core$Platform$Cmd$none);
7323 case 'AddRatingComment':
7324 var s = msg.a;
7325 return _Utils_Tuple2(
7326 _Utils_update(
7327 model,
7328 {ratingText: s}),
7329 $elm$core$Platform$Cmd$none);
7330 case 'AddRatingPressed':
7331 return _Utils_Tuple2(
7332 _Utils_update(
7333 model,
7334 {addRatingStatus: $author$project$Product$Submitting}),
7335 $author$project$Product$submitRating(model));
7336 case 'AddRatingSuccess':
7337 var res = msg.a;
7338 if (res.$ === 'Ok') {
7339 return _Utils_Tuple2(
7340 _Utils_update(
7341 model,
7342 {addRatingStatus: $author$project$Product$SubmitSuccess}),
7343 $author$project$Product$fetchRatings(model.listing.id));
7344 } else {
7345 return _Utils_Tuple2(
7346 _Utils_update(
7347 model,
7348 {addRatingStatus: $author$project$Product$SubmitFail}),
7349 $elm$core$Platform$Cmd$none);
7350 }
7351 case 'AddRatingFail':
7352 return _Utils_Tuple2(
7353 _Utils_update(
7354 model,
7355 {addRatingStatus: $author$project$Product$SubmitFail}),
7356 $elm$core$Platform$Cmd$none);
7357 case 'AddToCartPressed':
7358 return _Utils_Tuple2(
7359 model,
7360 $author$project$Product$addToCart(model));
7361 default:
7362 return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
7363 }
7364 });
7365var $author$project$Signup$CreatedSuccessfully = {$: 'CreatedSuccessfully'};
7366var $author$project$Signup$CreatingUser = {$: 'CreatingUser'};
7367var $author$project$Signup$InvalidEmail = {$: 'InvalidEmail'};
7368var $author$project$Signup$InvalidPhone = {$: 'InvalidPhone'};
7369var $author$project$Signup$UsernameTaken = {$: 'UsernameTaken'};
7370var $elm$core$List$any = F2(
7371 function (isOkay, list) {
7372 any:
7373 while (true) {
7374 if (!list.b) {
7375 return false;
7376 } else {
7377 var x = list.a;
7378 var xs = list.b;
7379 if (isOkay(x)) {
7380 return true;
7381 } else {
7382 var $temp$isOkay = isOkay,
7383 $temp$list = xs;
7384 isOkay = $temp$isOkay;
7385 list = $temp$list;
7386 continue any;
7387 }
7388 }
7389 }
7390 });
7391var $elm$core$Basics$composeL = F3(
7392 function (g, f, x) {
7393 return g(
7394 f(x));
7395 });
7396var $elm$core$Basics$not = _Basics_not;
7397var $elm$core$List$all = F2(
7398 function (isOkay, list) {
7399 return !A2(
7400 $elm$core$List$any,
7401 A2($elm$core$Basics$composeL, $elm$core$Basics$not, isOkay),
7402 list);
7403 });
7404var $author$project$Signup$UsernameExists = function (a) {
7405 return {$: 'UsernameExists', a: a};
7406};
7407var $elm$http$Http$expectString = function (toMsg) {
7408 return A2(
7409 $elm$http$Http$expectStringResponse,
7410 toMsg,
7411 $elm$http$Http$resolve($elm$core$Result$Ok));
7412};
7413var $elm$http$Http$post = function (r) {
7414 return $elm$http$Http$request(
7415 {body: r.body, expect: r.expect, headers: _List_Nil, method: 'POST', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: r.url});
7416};
7417var $author$project$Signup$checkExists = function (model) {
7418 return $elm$http$Http$post(
7419 {
7420 body: A2($elm$http$Http$stringBody, 'application/json', model.username),
7421 expect: $elm$http$Http$expectString($author$project$Signup$UsernameExists),
7422 url: 'http://127.0.0.1:7878/user/existing'
7423 });
7424};
7425var $author$project$Signup$CreationSuccess = function (a) {
7426 return {$: 'CreationSuccess', a: a};
7427};
7428var $elm$core$Maybe$withDefault = F2(
7429 function (_default, maybe) {
7430 if (maybe.$ === 'Just') {
7431 var value = maybe.a;
7432 return value;
7433 } else {
7434 return _default;
7435 }
7436 });
7437var $author$project$Signup$encodeCreateUser = function (model) {
7438 return $elm$json$Json$Encode$object(
7439 _List_fromArray(
7440 [
7441 _Utils_Tuple2(
7442 'username',
7443 $elm$json$Json$Encode$string(model.username)),
7444 _Utils_Tuple2(
7445 'password',
7446 $elm$json$Json$Encode$string(model.password)),
7447 _Utils_Tuple2(
7448 'phone_number',
7449 $elm$json$Json$Encode$string(model.phoneNumber)),
7450 _Utils_Tuple2(
7451 'email_id',
7452 $elm$json$Json$Encode$string(model.emailId)),
7453 _Utils_Tuple2(
7454 'address',
7455 $elm$json$Json$Encode$string(
7456 A2($elm$core$Maybe$withDefault, '', model.address)))
7457 ]));
7458};
7459var $author$project$Signup$createUser = function (model) {
7460 return $elm$http$Http$riskyRequest(
7461 {
7462 body: $elm$http$Http$jsonBody(
7463 $author$project$Signup$encodeCreateUser(model)),
7464 expect: $elm$http$Http$expectWhatever($author$project$Signup$CreationSuccess),
7465 headers: _List_Nil,
7466 method: 'POST',
7467 timeout: $elm$core$Maybe$Nothing,
7468 tracker: $elm$core$Maybe$Nothing,
7469 url: 'http://127.0.0.1:7878/user/new'
7470 });
7471};
7472var $elm$core$Basics$neq = _Utils_notEqual;
7473var $elm$core$String$foldr = _String_foldr;
7474var $elm$core$String$toList = function (string) {
7475 return A3($elm$core$String$foldr, $elm$core$List$cons, _List_Nil, string);
7476};
7477var $author$project$Signup$update = F2(
7478 function (msg, model) {
7479 switch (msg.$) {
7480 case 'UserEntered':
7481 var s = msg.a;
7482 return _Utils_Tuple2(
7483 _Utils_update(
7484 model,
7485 {username: s}),
7486 $elm$core$Platform$Cmd$none);
7487 case 'PassEntered':
7488 var s = msg.a;
7489 return _Utils_Tuple2(
7490 _Utils_update(
7491 model,
7492 {password: s}),
7493 $elm$core$Platform$Cmd$none);
7494 case 'PhoneEntered':
7495 var s = msg.a;
7496 var status = (($elm$core$String$length(s) !== 10) || A2(
7497 $elm$core$List$all,
7498 A2($elm$core$Basics$composeL, $elm$core$Basics$not, $elm$core$Char$isDigit),
7499 $elm$core$String$toList(s))) ? $author$project$Signup$InvalidPhone : $author$project$Signup$Empty;
7500 return _Utils_Tuple2(
7501 _Utils_update(
7502 model,
7503 {phoneNumber: s, status: status}),
7504 $elm$core$Platform$Cmd$none);
7505 case 'EmailEntered':
7506 var s = msg.a;
7507 var status = (!A2($elm$core$String$contains, '@', s)) ? $author$project$Signup$InvalidEmail : $author$project$Signup$Empty;
7508 return _Utils_Tuple2(
7509 _Utils_update(
7510 model,
7511 {emailId: s, status: status}),
7512 $elm$core$Platform$Cmd$none);
7513 case 'AddressEntered':
7514 var s = msg.a;
7515 return _Utils_Tuple2(
7516 _Utils_update(
7517 model,
7518 {
7519 address: $elm$core$Maybe$Just(s)
7520 }),
7521 $elm$core$Platform$Cmd$none);
7522 case 'CreatePressed':
7523 return _Utils_Tuple2(
7524 _Utils_update(
7525 model,
7526 {status: $author$project$Signup$CreatingUser}),
7527 $author$project$Signup$checkExists(model));
7528 case 'CreationSuccess':
7529 var res = msg.a;
7530 if (res.$ === 'Ok') {
7531 return _Utils_Tuple2(
7532 _Utils_update(
7533 model,
7534 {status: $author$project$Signup$CreatedSuccessfully}),
7535 $elm$core$Platform$Cmd$none);
7536 } else {
7537 return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
7538 }
7539 case 'CreationFail':
7540 return _Utils_Tuple2($author$project$Signup$init, $elm$core$Platform$Cmd$none);
7541 default:
7542 var res = msg.a;
7543 _v2$2:
7544 while (true) {
7545 if (res.$ === 'Ok') {
7546 switch (res.a) {
7547 case 'true':
7548 return _Utils_Tuple2(
7549 _Utils_update(
7550 model,
7551 {status: $author$project$Signup$UsernameTaken}),
7552 $elm$core$Platform$Cmd$none);
7553 case 'false':
7554 var _v3 = A2($elm$core$Debug$log, 'signup', 'Hit create user ...');
7555 return _Utils_Tuple2(
7556 _Utils_update(
7557 model,
7558 {status: $author$project$Signup$CreatingUser}),
7559 $author$project$Signup$createUser(model));
7560 default:
7561 break _v2$2;
7562 }
7563 } else {
7564 break _v2$2;
7565 }
7566 }
7567 return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
7568 }
7569 });
7570var $author$project$Main$update = F2(
7571 function (msg, model) {
7572 switch (msg.$) {
7573 case 'LinkClicked':
7574 var urlRequest = msg.a;
7575 if (urlRequest.$ === 'Internal') {
7576 var url = urlRequest.a;
7577 return _Utils_Tuple2(
7578 model,
7579 A2(
7580 $elm$browser$Browser$Navigation$pushUrl,
7581 model.key,
7582 $elm$url$Url$toString(url)));
7583 } else {
7584 var href = urlRequest.a;
7585 return _Utils_Tuple2(
7586 model,
7587 $elm$browser$Browser$Navigation$load(href));
7588 }
7589 case 'LogoutPressed':
7590 return _Utils_Tuple2(model, $author$project$Main$tryLogout);
7591 case 'LogoutSuccess':
7592 return _Utils_Tuple2(
7593 _Utils_update(
7594 model,
7595 {loginModel: $author$project$Login$init}),
7596 A2($elm$browser$Browser$Navigation$replaceUrl, model.key, '/login'));
7597 case 'UrlChanged':
7598 var url = msg.a;
7599 var parsedUrl = A2($elm$url$Url$Parser$parse, $author$project$Main$parseRoute, url);
7600 if (parsedUrl.$ === 'Just') {
7601 switch (parsedUrl.a.$) {
7602 case 'CatalogPage':
7603 var _v3 = parsedUrl.a;
7604 return _Utils_Tuple2(
7605 _Utils_update(
7606 model,
7607 {location: $author$project$Main$CatalogPage}),
7608 A2($elm$core$Platform$Cmd$map, $author$project$Main$CatalogMessage, $author$project$Catalog$fetchProducts));
7609 case 'ProductPage':
7610 var id = parsedUrl.a.a;
7611 var cmds = A2(
7612 $elm$core$List$map,
7613 $elm$core$Platform$Cmd$map($author$project$Main$ProductMessage),
7614 _List_fromArray(
7615 [
7616 $author$project$Product$fetchListing(id),
7617 $author$project$Product$fetchRatings(id)
7618 ]));
7619 return _Utils_Tuple2(
7620 _Utils_update(
7621 model,
7622 {
7623 location: $author$project$Main$ProductPage(id)
7624 }),
7625 $elm$core$Platform$Cmd$batch(cmds));
7626 case 'CartPage':
7627 var _v4 = parsedUrl.a;
7628 var cmd = A2($elm$core$Platform$Cmd$map, $author$project$Main$CartMessage, $author$project$Cart$fetchCartItems);
7629 return _Utils_Tuple2(
7630 _Utils_update(
7631 model,
7632 {location: $author$project$Main$CartPage}),
7633 cmd);
7634 case 'CheckoutPage':
7635 var _v5 = parsedUrl.a;
7636 var cmd = A2($elm$core$Platform$Cmd$map, $author$project$Main$CheckoutMessage, $author$project$Checkout$fetchAmount);
7637 var _v6 = A2($elm$core$Debug$log, 'err', 'loading checkout page ...');
7638 return _Utils_Tuple2(
7639 _Utils_update(
7640 model,
7641 {location: $author$project$Main$CheckoutPage}),
7642 cmd);
7643 default:
7644 var p = parsedUrl.a;
7645 return _Utils_Tuple2(
7646 _Utils_update(
7647 model,
7648 {location: p}),
7649 $elm$core$Platform$Cmd$none);
7650 }
7651 } else {
7652 return _Utils_Tuple2(
7653 _Utils_update(
7654 model,
7655 {location: $author$project$Main$NotFoundPage}),
7656 $elm$core$Platform$Cmd$none);
7657 }
7658 case 'LoginMessage':
7659 var lm = msg.a;
7660 var _v7 = A2($author$project$Login$update, lm, model.loginModel);
7661 var lmn = _v7.a;
7662 var cmd = _v7.b;
7663 var redir = function () {
7664 var _v8 = lmn.loginStatus;
7665 if (_v8.$ === 'LoggedIn') {
7666 return A2($elm$browser$Browser$Navigation$replaceUrl, model.key, '/catalog');
7667 } else {
7668 return $elm$core$Platform$Cmd$none;
7669 }
7670 }();
7671 return _Utils_Tuple2(
7672 _Utils_update(
7673 model,
7674 {loginModel: lmn}),
7675 $elm$core$Platform$Cmd$batch(
7676 _List_fromArray(
7677 [
7678 A2($elm$core$Platform$Cmd$map, $author$project$Main$LoginMessage, cmd),
7679 redir
7680 ])));
7681 case 'SignupMessage':
7682 var sm = msg.a;
7683 var _v9 = A2($author$project$Signup$update, sm, model.signupModel);
7684 var smn = _v9.a;
7685 var cmd = _v9.b;
7686 var redir = function () {
7687 var _v10 = smn.status;
7688 if (_v10.$ === 'CreatedSuccessfully') {
7689 return A2($elm$browser$Browser$Navigation$replaceUrl, model.key, '/login');
7690 } else {
7691 return $elm$core$Platform$Cmd$none;
7692 }
7693 }();
7694 return _Utils_Tuple2(
7695 _Utils_update(
7696 model,
7697 {signupModel: smn}),
7698 $elm$core$Platform$Cmd$batch(
7699 _List_fromArray(
7700 [
7701 A2($elm$core$Platform$Cmd$map, $author$project$Main$SignupMessage, cmd),
7702 redir
7703 ])));
7704 case 'CatalogMessage':
7705 var cm = msg.a;
7706 var _v11 = A2($author$project$Catalog$update, cm, model.catalogModel);
7707 var cmn = _v11.a;
7708 var cmd = _v11.b;
7709 return _Utils_Tuple2(
7710 _Utils_update(
7711 model,
7712 {catalogModel: cmn}),
7713 A2($elm$core$Platform$Cmd$map, $author$project$Main$CatalogMessage, cmd));
7714 case 'CartMessage':
7715 var cm = msg.a;
7716 var _v12 = A2($author$project$Cart$update, cm, model.cartModel);
7717 var cmn = _v12.a;
7718 var cmd = _v12.b;
7719 return _Utils_Tuple2(
7720 _Utils_update(
7721 model,
7722 {cartModel: cmn}),
7723 A2($elm$core$Platform$Cmd$map, $author$project$Main$CartMessage, cmd));
7724 case 'CheckoutMessage':
7725 var cm = msg.a;
7726 var _v13 = A2($author$project$Checkout$update, cm, model.checkoutModel);
7727 var cmn = _v13.a;
7728 var cmd = _v13.b;
7729 var _v14 = A2($elm$core$Debug$log, 'err', 'received checkout message ...');
7730 return _Utils_Tuple2(
7731 _Utils_update(
7732 model,
7733 {checkoutModel: cmn}),
7734 A2($elm$core$Platform$Cmd$map, $author$project$Main$CheckoutMessage, cmd));
7735 default:
7736 var pm = msg.a;
7737 var redir = function () {
7738 if (pm.$ === 'AddToCartSuccess') {
7739 return A2($elm$browser$Browser$Navigation$replaceUrl, model.key, '/cart');
7740 } else {
7741 return $elm$core$Platform$Cmd$none;
7742 }
7743 }();
7744 var _v15 = A2($author$project$Product$update, pm, model.productModel);
7745 var pmn = _v15.a;
7746 var cmd = _v15.b;
7747 return _Utils_Tuple2(
7748 _Utils_update(
7749 model,
7750 {productModel: pmn}),
7751 $elm$core$Platform$Cmd$batch(
7752 _List_fromArray(
7753 [
7754 A2($elm$core$Platform$Cmd$map, $author$project$Main$ProductMessage, cmd),
7755 redir
7756 ])));
7757 }
7758 });
7759var $rtfeldman$elm_css$VirtualDom$Styled$Node = F3(
7760 function (a, b, c) {
7761 return {$: 'Node', a: a, b: b, c: c};
7762 });
7763var $rtfeldman$elm_css$VirtualDom$Styled$node = $rtfeldman$elm_css$VirtualDom$Styled$Node;
7764var $rtfeldman$elm_css$Html$Styled$node = $rtfeldman$elm_css$VirtualDom$Styled$node;
7765var $rtfeldman$elm_css$Html$Styled$a = $rtfeldman$elm_css$Html$Styled$node('a');
7766var $rtfeldman$elm_css$Html$Styled$div = $rtfeldman$elm_css$Html$Styled$node('div');
7767var $rtfeldman$elm_css$VirtualDom$Styled$Attribute = F3(
7768 function (a, b, c) {
7769 return {$: 'Attribute', a: a, b: b, c: c};
7770 });
7771var $elm$virtual_dom$VirtualDom$property = F2(
7772 function (key, value) {
7773 return A2(
7774 _VirtualDom_property,
7775 _VirtualDom_noInnerHtmlOrFormAction(key),
7776 _VirtualDom_noJavaScriptOrHtmlUri(value));
7777 });
7778var $rtfeldman$elm_css$VirtualDom$Styled$property = F2(
7779 function (key, value) {
7780 return A3(
7781 $rtfeldman$elm_css$VirtualDom$Styled$Attribute,
7782 A2($elm$virtual_dom$VirtualDom$property, key, value),
7783 _List_Nil,
7784 '');
7785 });
7786var $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty = F2(
7787 function (key, string) {
7788 return A2(
7789 $rtfeldman$elm_css$VirtualDom$Styled$property,
7790 key,
7791 $elm$json$Json$Encode$string(string));
7792 });
7793var $rtfeldman$elm_css$Html$Styled$Attributes$href = function (url) {
7794 return A2($rtfeldman$elm_css$Html$Styled$Attributes$stringProperty, 'href', url);
7795};
7796var $rtfeldman$elm_css$Html$Styled$li = $rtfeldman$elm_css$Html$Styled$node('li');
7797var $rtfeldman$elm_css$VirtualDom$Styled$KeyedNode = F3(
7798 function (a, b, c) {
7799 return {$: 'KeyedNode', a: a, b: b, c: c};
7800 });
7801var $rtfeldman$elm_css$VirtualDom$Styled$KeyedNodeNS = F4(
7802 function (a, b, c, d) {
7803 return {$: 'KeyedNodeNS', a: a, b: b, c: c, d: d};
7804 });
7805var $rtfeldman$elm_css$VirtualDom$Styled$NodeNS = F4(
7806 function (a, b, c, d) {
7807 return {$: 'NodeNS', a: a, b: b, c: c, d: d};
7808 });
7809var $rtfeldman$elm_css$VirtualDom$Styled$Unstyled = function (a) {
7810 return {$: 'Unstyled', a: a};
7811};
7812var $elm$virtual_dom$VirtualDom$map = _VirtualDom_map;
7813var $elm$virtual_dom$VirtualDom$mapAttribute = _VirtualDom_mapAttribute;
7814var $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute = F2(
7815 function (transform, _v0) {
7816 var prop = _v0.a;
7817 var styles = _v0.b;
7818 var classname = _v0.c;
7819 return A3(
7820 $rtfeldman$elm_css$VirtualDom$Styled$Attribute,
7821 A2($elm$virtual_dom$VirtualDom$mapAttribute, transform, prop),
7822 styles,
7823 classname);
7824 });
7825var $rtfeldman$elm_css$VirtualDom$Styled$map = F2(
7826 function (transform, vdomNode) {
7827 switch (vdomNode.$) {
7828 case 'Node':
7829 var elemType = vdomNode.a;
7830 var properties = vdomNode.b;
7831 var children = vdomNode.c;
7832 return A3(
7833 $rtfeldman$elm_css$VirtualDom$Styled$Node,
7834 elemType,
7835 A2(
7836 $elm$core$List$map,
7837 $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute(transform),
7838 properties),
7839 A2(
7840 $elm$core$List$map,
7841 $rtfeldman$elm_css$VirtualDom$Styled$map(transform),
7842 children));
7843 case 'NodeNS':
7844 var ns = vdomNode.a;
7845 var elemType = vdomNode.b;
7846 var properties = vdomNode.c;
7847 var children = vdomNode.d;
7848 return A4(
7849 $rtfeldman$elm_css$VirtualDom$Styled$NodeNS,
7850 ns,
7851 elemType,
7852 A2(
7853 $elm$core$List$map,
7854 $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute(transform),
7855 properties),
7856 A2(
7857 $elm$core$List$map,
7858 $rtfeldman$elm_css$VirtualDom$Styled$map(transform),
7859 children));
7860 case 'KeyedNode':
7861 var elemType = vdomNode.a;
7862 var properties = vdomNode.b;
7863 var children = vdomNode.c;
7864 return A3(
7865 $rtfeldman$elm_css$VirtualDom$Styled$KeyedNode,
7866 elemType,
7867 A2(
7868 $elm$core$List$map,
7869 $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute(transform),
7870 properties),
7871 A2(
7872 $elm$core$List$map,
7873 function (_v1) {
7874 var key = _v1.a;
7875 var child = _v1.b;
7876 return _Utils_Tuple2(
7877 key,
7878 A2($rtfeldman$elm_css$VirtualDom$Styled$map, transform, child));
7879 },
7880 children));
7881 case 'KeyedNodeNS':
7882 var ns = vdomNode.a;
7883 var elemType = vdomNode.b;
7884 var properties = vdomNode.c;
7885 var children = vdomNode.d;
7886 return A4(
7887 $rtfeldman$elm_css$VirtualDom$Styled$KeyedNodeNS,
7888 ns,
7889 elemType,
7890 A2(
7891 $elm$core$List$map,
7892 $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute(transform),
7893 properties),
7894 A2(
7895 $elm$core$List$map,
7896 function (_v2) {
7897 var key = _v2.a;
7898 var child = _v2.b;
7899 return _Utils_Tuple2(
7900 key,
7901 A2($rtfeldman$elm_css$VirtualDom$Styled$map, transform, child));
7902 },
7903 children));
7904 default:
7905 var vdom = vdomNode.a;
7906 return $rtfeldman$elm_css$VirtualDom$Styled$Unstyled(
7907 A2($elm$virtual_dom$VirtualDom$map, transform, vdom));
7908 }
7909 });
7910var $rtfeldman$elm_css$Html$Styled$map = $rtfeldman$elm_css$VirtualDom$Styled$map;
7911var $elm$core$List$singleton = function (value) {
7912 return _List_fromArray(
7913 [value]);
7914};
7915var $elm$core$List$isEmpty = function (xs) {
7916 if (!xs.b) {
7917 return true;
7918 } else {
7919 return false;
7920 }
7921};
7922var $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles = F2(
7923 function (_v0, styles) {
7924 var newStyles = _v0.b;
7925 var classname = _v0.c;
7926 return $elm$core$List$isEmpty(newStyles) ? styles : A3($elm$core$Dict$insert, classname, newStyles, styles);
7927 });
7928var $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute = function (_v0) {
7929 var val = _v0.a;
7930 return val;
7931};
7932var $elm$virtual_dom$VirtualDom$keyedNode = function (tag) {
7933 return _VirtualDom_keyedNode(
7934 _VirtualDom_noScript(tag));
7935};
7936var $elm$virtual_dom$VirtualDom$keyedNodeNS = F2(
7937 function (namespace, tag) {
7938 return A2(
7939 _VirtualDom_keyedNodeNS,
7940 namespace,
7941 _VirtualDom_noScript(tag));
7942 });
7943var $elm$virtual_dom$VirtualDom$node = function (tag) {
7944 return _VirtualDom_node(
7945 _VirtualDom_noScript(tag));
7946};
7947var $elm$virtual_dom$VirtualDom$nodeNS = function (tag) {
7948 return _VirtualDom_nodeNS(
7949 _VirtualDom_noScript(tag));
7950};
7951var $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml = F2(
7952 function (_v6, _v7) {
7953 var key = _v6.a;
7954 var html = _v6.b;
7955 var pairs = _v7.a;
7956 var styles = _v7.b;
7957 switch (html.$) {
7958 case 'Unstyled':
7959 var vdom = html.a;
7960 return _Utils_Tuple2(
7961 A2(
7962 $elm$core$List$cons,
7963 _Utils_Tuple2(key, vdom),
7964 pairs),
7965 styles);
7966 case 'Node':
7967 var elemType = html.a;
7968 var properties = html.b;
7969 var children = html.c;
7970 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
7971 var _v9 = A3(
7972 $elm$core$List$foldl,
7973 $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml,
7974 _Utils_Tuple2(_List_Nil, combinedStyles),
7975 children);
7976 var childNodes = _v9.a;
7977 var finalStyles = _v9.b;
7978 var vdom = A3(
7979 $elm$virtual_dom$VirtualDom$node,
7980 elemType,
7981 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
7982 $elm$core$List$reverse(childNodes));
7983 return _Utils_Tuple2(
7984 A2(
7985 $elm$core$List$cons,
7986 _Utils_Tuple2(key, vdom),
7987 pairs),
7988 finalStyles);
7989 case 'NodeNS':
7990 var ns = html.a;
7991 var elemType = html.b;
7992 var properties = html.c;
7993 var children = html.d;
7994 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
7995 var _v10 = A3(
7996 $elm$core$List$foldl,
7997 $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml,
7998 _Utils_Tuple2(_List_Nil, combinedStyles),
7999 children);
8000 var childNodes = _v10.a;
8001 var finalStyles = _v10.b;
8002 var vdom = A4(
8003 $elm$virtual_dom$VirtualDom$nodeNS,
8004 ns,
8005 elemType,
8006 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8007 $elm$core$List$reverse(childNodes));
8008 return _Utils_Tuple2(
8009 A2(
8010 $elm$core$List$cons,
8011 _Utils_Tuple2(key, vdom),
8012 pairs),
8013 finalStyles);
8014 case 'KeyedNode':
8015 var elemType = html.a;
8016 var properties = html.b;
8017 var children = html.c;
8018 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
8019 var _v11 = A3(
8020 $elm$core$List$foldl,
8021 $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml,
8022 _Utils_Tuple2(_List_Nil, combinedStyles),
8023 children);
8024 var childNodes = _v11.a;
8025 var finalStyles = _v11.b;
8026 var vdom = A3(
8027 $elm$virtual_dom$VirtualDom$keyedNode,
8028 elemType,
8029 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8030 $elm$core$List$reverse(childNodes));
8031 return _Utils_Tuple2(
8032 A2(
8033 $elm$core$List$cons,
8034 _Utils_Tuple2(key, vdom),
8035 pairs),
8036 finalStyles);
8037 default:
8038 var ns = html.a;
8039 var elemType = html.b;
8040 var properties = html.c;
8041 var children = html.d;
8042 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
8043 var _v12 = A3(
8044 $elm$core$List$foldl,
8045 $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml,
8046 _Utils_Tuple2(_List_Nil, combinedStyles),
8047 children);
8048 var childNodes = _v12.a;
8049 var finalStyles = _v12.b;
8050 var vdom = A4(
8051 $elm$virtual_dom$VirtualDom$keyedNodeNS,
8052 ns,
8053 elemType,
8054 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8055 $elm$core$List$reverse(childNodes));
8056 return _Utils_Tuple2(
8057 A2(
8058 $elm$core$List$cons,
8059 _Utils_Tuple2(key, vdom),
8060 pairs),
8061 finalStyles);
8062 }
8063 });
8064var $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml = F2(
8065 function (html, _v0) {
8066 var nodes = _v0.a;
8067 var styles = _v0.b;
8068 switch (html.$) {
8069 case 'Unstyled':
8070 var vdomNode = html.a;
8071 return _Utils_Tuple2(
8072 A2($elm$core$List$cons, vdomNode, nodes),
8073 styles);
8074 case 'Node':
8075 var elemType = html.a;
8076 var properties = html.b;
8077 var children = html.c;
8078 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
8079 var _v2 = A3(
8080 $elm$core$List$foldl,
8081 $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml,
8082 _Utils_Tuple2(_List_Nil, combinedStyles),
8083 children);
8084 var childNodes = _v2.a;
8085 var finalStyles = _v2.b;
8086 var vdomNode = A3(
8087 $elm$virtual_dom$VirtualDom$node,
8088 elemType,
8089 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8090 $elm$core$List$reverse(childNodes));
8091 return _Utils_Tuple2(
8092 A2($elm$core$List$cons, vdomNode, nodes),
8093 finalStyles);
8094 case 'NodeNS':
8095 var ns = html.a;
8096 var elemType = html.b;
8097 var properties = html.c;
8098 var children = html.d;
8099 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
8100 var _v3 = A3(
8101 $elm$core$List$foldl,
8102 $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml,
8103 _Utils_Tuple2(_List_Nil, combinedStyles),
8104 children);
8105 var childNodes = _v3.a;
8106 var finalStyles = _v3.b;
8107 var vdomNode = A4(
8108 $elm$virtual_dom$VirtualDom$nodeNS,
8109 ns,
8110 elemType,
8111 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8112 $elm$core$List$reverse(childNodes));
8113 return _Utils_Tuple2(
8114 A2($elm$core$List$cons, vdomNode, nodes),
8115 finalStyles);
8116 case 'KeyedNode':
8117 var elemType = html.a;
8118 var properties = html.b;
8119 var children = html.c;
8120 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
8121 var _v4 = A3(
8122 $elm$core$List$foldl,
8123 $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml,
8124 _Utils_Tuple2(_List_Nil, combinedStyles),
8125 children);
8126 var childNodes = _v4.a;
8127 var finalStyles = _v4.b;
8128 var vdomNode = A3(
8129 $elm$virtual_dom$VirtualDom$keyedNode,
8130 elemType,
8131 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8132 $elm$core$List$reverse(childNodes));
8133 return _Utils_Tuple2(
8134 A2($elm$core$List$cons, vdomNode, nodes),
8135 finalStyles);
8136 default:
8137 var ns = html.a;
8138 var elemType = html.b;
8139 var properties = html.c;
8140 var children = html.d;
8141 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
8142 var _v5 = A3(
8143 $elm$core$List$foldl,
8144 $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml,
8145 _Utils_Tuple2(_List_Nil, combinedStyles),
8146 children);
8147 var childNodes = _v5.a;
8148 var finalStyles = _v5.b;
8149 var vdomNode = A4(
8150 $elm$virtual_dom$VirtualDom$keyedNodeNS,
8151 ns,
8152 elemType,
8153 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8154 $elm$core$List$reverse(childNodes));
8155 return _Utils_Tuple2(
8156 A2($elm$core$List$cons, vdomNode, nodes),
8157 finalStyles);
8158 }
8159 });
8160var $elm$core$Dict$singleton = F2(
8161 function (key, value) {
8162 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);
8163 });
8164var $rtfeldman$elm_css$VirtualDom$Styled$stylesFromPropertiesHelp = F2(
8165 function (candidate, properties) {
8166 stylesFromPropertiesHelp:
8167 while (true) {
8168 if (!properties.b) {
8169 return candidate;
8170 } else {
8171 var _v1 = properties.a;
8172 var styles = _v1.b;
8173 var classname = _v1.c;
8174 var rest = properties.b;
8175 if ($elm$core$String$isEmpty(classname)) {
8176 var $temp$candidate = candidate,
8177 $temp$properties = rest;
8178 candidate = $temp$candidate;
8179 properties = $temp$properties;
8180 continue stylesFromPropertiesHelp;
8181 } else {
8182 var $temp$candidate = $elm$core$Maybe$Just(
8183 _Utils_Tuple2(classname, styles)),
8184 $temp$properties = rest;
8185 candidate = $temp$candidate;
8186 properties = $temp$properties;
8187 continue stylesFromPropertiesHelp;
8188 }
8189 }
8190 }
8191 });
8192var $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties = function (properties) {
8193 var _v0 = A2($rtfeldman$elm_css$VirtualDom$Styled$stylesFromPropertiesHelp, $elm$core$Maybe$Nothing, properties);
8194 if (_v0.$ === 'Nothing') {
8195 return $elm$core$Dict$empty;
8196 } else {
8197 var _v1 = _v0.a;
8198 var classname = _v1.a;
8199 var styles = _v1.b;
8200 return A2($elm$core$Dict$singleton, classname, styles);
8201 }
8202};
8203var $elm$virtual_dom$VirtualDom$text = _VirtualDom_text;
8204var $rtfeldman$elm_css$Css$Structure$compactHelp = F2(
8205 function (declaration, _v0) {
8206 var keyframesByName = _v0.a;
8207 var declarations = _v0.b;
8208 switch (declaration.$) {
8209 case 'StyleBlockDeclaration':
8210 var _v2 = declaration.a;
8211 var properties = _v2.c;
8212 return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8213 keyframesByName,
8214 A2($elm$core$List$cons, declaration, declarations));
8215 case 'MediaRule':
8216 var styleBlocks = declaration.b;
8217 return A2(
8218 $elm$core$List$all,
8219 function (_v3) {
8220 var properties = _v3.c;
8221 return $elm$core$List$isEmpty(properties);
8222 },
8223 styleBlocks) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8224 keyframesByName,
8225 A2($elm$core$List$cons, declaration, declarations));
8226 case 'SupportsRule':
8227 var otherDeclarations = declaration.b;
8228 return $elm$core$List$isEmpty(otherDeclarations) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8229 keyframesByName,
8230 A2($elm$core$List$cons, declaration, declarations));
8231 case 'DocumentRule':
8232 return _Utils_Tuple2(
8233 keyframesByName,
8234 A2($elm$core$List$cons, declaration, declarations));
8235 case 'PageRule':
8236 var properties = declaration.b;
8237 return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8238 keyframesByName,
8239 A2($elm$core$List$cons, declaration, declarations));
8240 case 'FontFace':
8241 var properties = declaration.a;
8242 return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8243 keyframesByName,
8244 A2($elm$core$List$cons, declaration, declarations));
8245 case 'Keyframes':
8246 var record = declaration.a;
8247 return $elm$core$String$isEmpty(record.declaration) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8248 A3($elm$core$Dict$insert, record.name, record.declaration, keyframesByName),
8249 declarations);
8250 case 'Viewport':
8251 var properties = declaration.a;
8252 return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8253 keyframesByName,
8254 A2($elm$core$List$cons, declaration, declarations));
8255 case 'CounterStyle':
8256 var properties = declaration.a;
8257 return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8258 keyframesByName,
8259 A2($elm$core$List$cons, declaration, declarations));
8260 default:
8261 var tuples = declaration.a;
8262 return A2(
8263 $elm$core$List$all,
8264 function (_v4) {
8265 var properties = _v4.b;
8266 return $elm$core$List$isEmpty(properties);
8267 },
8268 tuples) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8269 keyframesByName,
8270 A2($elm$core$List$cons, declaration, declarations));
8271 }
8272 });
8273var $rtfeldman$elm_css$Css$Structure$Keyframes = function (a) {
8274 return {$: 'Keyframes', a: a};
8275};
8276var $rtfeldman$elm_css$Css$Structure$withKeyframeDeclarations = F2(
8277 function (keyframesByName, compactedDeclarations) {
8278 return A2(
8279 $elm$core$List$append,
8280 A2(
8281 $elm$core$List$map,
8282 function (_v0) {
8283 var name = _v0.a;
8284 var decl = _v0.b;
8285 return $rtfeldman$elm_css$Css$Structure$Keyframes(
8286 {declaration: decl, name: name});
8287 },
8288 $elm$core$Dict$toList(keyframesByName)),
8289 compactedDeclarations);
8290 });
8291var $rtfeldman$elm_css$Css$Structure$compactStylesheet = function (_v0) {
8292 var charset = _v0.charset;
8293 var imports = _v0.imports;
8294 var namespaces = _v0.namespaces;
8295 var declarations = _v0.declarations;
8296 var _v1 = A3(
8297 $elm$core$List$foldr,
8298 $rtfeldman$elm_css$Css$Structure$compactHelp,
8299 _Utils_Tuple2($elm$core$Dict$empty, _List_Nil),
8300 declarations);
8301 var keyframesByName = _v1.a;
8302 var compactedDeclarations = _v1.b;
8303 var finalDeclarations = A2($rtfeldman$elm_css$Css$Structure$withKeyframeDeclarations, keyframesByName, compactedDeclarations);
8304 return {charset: charset, declarations: finalDeclarations, imports: imports, namespaces: namespaces};
8305};
8306var $elm$core$Maybe$map = F2(
8307 function (f, maybe) {
8308 if (maybe.$ === 'Just') {
8309 var value = maybe.a;
8310 return $elm$core$Maybe$Just(
8311 f(value));
8312 } else {
8313 return $elm$core$Maybe$Nothing;
8314 }
8315 });
8316var $rtfeldman$elm_css$Css$Structure$Output$charsetToString = function (charset) {
8317 return A2(
8318 $elm$core$Maybe$withDefault,
8319 '',
8320 A2(
8321 $elm$core$Maybe$map,
8322 function (str) {
8323 return '@charset \"' + (str + '\"');
8324 },
8325 charset));
8326};
8327var $elm$core$List$filter = F2(
8328 function (isGood, list) {
8329 return A3(
8330 $elm$core$List$foldr,
8331 F2(
8332 function (x, xs) {
8333 return isGood(x) ? A2($elm$core$List$cons, x, xs) : xs;
8334 }),
8335 _List_Nil,
8336 list);
8337 });
8338var $rtfeldman$elm_css$Css$Structure$Output$mediaExpressionToString = function (expression) {
8339 return '(' + (expression.feature + (A2(
8340 $elm$core$Maybe$withDefault,
8341 '',
8342 A2(
8343 $elm$core$Maybe$map,
8344 $elm$core$Basics$append(': '),
8345 expression.value)) + ')'));
8346};
8347var $rtfeldman$elm_css$Css$Structure$Output$mediaTypeToString = function (mediaType) {
8348 switch (mediaType.$) {
8349 case 'Print':
8350 return 'print';
8351 case 'Screen':
8352 return 'screen';
8353 default:
8354 return 'speech';
8355 }
8356};
8357var $rtfeldman$elm_css$Css$Structure$Output$mediaQueryToString = function (mediaQuery) {
8358 var prefixWith = F3(
8359 function (str, mediaType, expressions) {
8360 return str + (' ' + A2(
8361 $elm$core$String$join,
8362 ' and ',
8363 A2(
8364 $elm$core$List$cons,
8365 $rtfeldman$elm_css$Css$Structure$Output$mediaTypeToString(mediaType),
8366 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$mediaExpressionToString, expressions))));
8367 });
8368 switch (mediaQuery.$) {
8369 case 'AllQuery':
8370 var expressions = mediaQuery.a;
8371 return A2(
8372 $elm$core$String$join,
8373 ' and ',
8374 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$mediaExpressionToString, expressions));
8375 case 'OnlyQuery':
8376 var mediaType = mediaQuery.a;
8377 var expressions = mediaQuery.b;
8378 return A3(prefixWith, 'only', mediaType, expressions);
8379 case 'NotQuery':
8380 var mediaType = mediaQuery.a;
8381 var expressions = mediaQuery.b;
8382 return A3(prefixWith, 'not', mediaType, expressions);
8383 default:
8384 var str = mediaQuery.a;
8385 return str;
8386 }
8387};
8388var $rtfeldman$elm_css$Css$Structure$Output$importMediaQueryToString = F2(
8389 function (name, mediaQuery) {
8390 return '@import \"' + (name + ($rtfeldman$elm_css$Css$Structure$Output$mediaQueryToString(mediaQuery) + '\"'));
8391 });
8392var $rtfeldman$elm_css$Css$Structure$Output$importToString = function (_v0) {
8393 var name = _v0.a;
8394 var mediaQueries = _v0.b;
8395 return A2(
8396 $elm$core$String$join,
8397 '\n',
8398 A2(
8399 $elm$core$List$map,
8400 $rtfeldman$elm_css$Css$Structure$Output$importMediaQueryToString(name),
8401 mediaQueries));
8402};
8403var $rtfeldman$elm_css$Css$Structure$Output$namespaceToString = function (_v0) {
8404 var prefix = _v0.a;
8405 var str = _v0.b;
8406 return '@namespace ' + (prefix + ('\"' + (str + '\"')));
8407};
8408var $rtfeldman$elm_css$Css$Structure$Output$spaceIndent = ' ';
8409var $rtfeldman$elm_css$Css$Structure$Output$indent = function (str) {
8410 return _Utils_ap($rtfeldman$elm_css$Css$Structure$Output$spaceIndent, str);
8411};
8412var $rtfeldman$elm_css$Css$Structure$Output$noIndent = '';
8413var $rtfeldman$elm_css$Css$Structure$Output$emitProperty = function (str) {
8414 return str + ';';
8415};
8416var $rtfeldman$elm_css$Css$Structure$Output$emitProperties = function (properties) {
8417 return A2(
8418 $elm$core$String$join,
8419 '\n',
8420 A2(
8421 $elm$core$List$map,
8422 A2($elm$core$Basics$composeL, $rtfeldman$elm_css$Css$Structure$Output$indent, $rtfeldman$elm_css$Css$Structure$Output$emitProperty),
8423 properties));
8424};
8425var $elm$core$String$append = _String_append;
8426var $rtfeldman$elm_css$Css$Structure$Output$pseudoElementToString = function (_v0) {
8427 var str = _v0.a;
8428 return '::' + str;
8429};
8430var $rtfeldman$elm_css$Css$Structure$Output$combinatorToString = function (combinator) {
8431 switch (combinator.$) {
8432 case 'AdjacentSibling':
8433 return '+';
8434 case 'GeneralSibling':
8435 return '~';
8436 case 'Child':
8437 return '>';
8438 default:
8439 return '';
8440 }
8441};
8442var $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString = function (repeatableSimpleSelector) {
8443 switch (repeatableSimpleSelector.$) {
8444 case 'ClassSelector':
8445 var str = repeatableSimpleSelector.a;
8446 return '.' + str;
8447 case 'IdSelector':
8448 var str = repeatableSimpleSelector.a;
8449 return '#' + str;
8450 case 'PseudoClassSelector':
8451 var str = repeatableSimpleSelector.a;
8452 return ':' + str;
8453 default:
8454 var str = repeatableSimpleSelector.a;
8455 return '[' + (str + ']');
8456 }
8457};
8458var $rtfeldman$elm_css$Css$Structure$Output$simpleSelectorSequenceToString = function (simpleSelectorSequence) {
8459 switch (simpleSelectorSequence.$) {
8460 case 'TypeSelectorSequence':
8461 var str = simpleSelectorSequence.a.a;
8462 var repeatableSimpleSelectors = simpleSelectorSequence.b;
8463 return A2(
8464 $elm$core$String$join,
8465 '',
8466 A2(
8467 $elm$core$List$cons,
8468 str,
8469 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString, repeatableSimpleSelectors)));
8470 case 'UniversalSelectorSequence':
8471 var repeatableSimpleSelectors = simpleSelectorSequence.a;
8472 return $elm$core$List$isEmpty(repeatableSimpleSelectors) ? '*' : A2(
8473 $elm$core$String$join,
8474 '',
8475 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString, repeatableSimpleSelectors));
8476 default:
8477 var str = simpleSelectorSequence.a;
8478 var repeatableSimpleSelectors = simpleSelectorSequence.b;
8479 return A2(
8480 $elm$core$String$join,
8481 '',
8482 A2(
8483 $elm$core$List$cons,
8484 str,
8485 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString, repeatableSimpleSelectors)));
8486 }
8487};
8488var $rtfeldman$elm_css$Css$Structure$Output$selectorChainToString = function (_v0) {
8489 var combinator = _v0.a;
8490 var sequence = _v0.b;
8491 return A2(
8492 $elm$core$String$join,
8493 ' ',
8494 _List_fromArray(
8495 [
8496 $rtfeldman$elm_css$Css$Structure$Output$combinatorToString(combinator),
8497 $rtfeldman$elm_css$Css$Structure$Output$simpleSelectorSequenceToString(sequence)
8498 ]));
8499};
8500var $rtfeldman$elm_css$Css$Structure$Output$selectorToString = function (_v0) {
8501 var simpleSelectorSequence = _v0.a;
8502 var chain = _v0.b;
8503 var pseudoElement = _v0.c;
8504 var segments = A2(
8505 $elm$core$List$cons,
8506 $rtfeldman$elm_css$Css$Structure$Output$simpleSelectorSequenceToString(simpleSelectorSequence),
8507 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$selectorChainToString, chain));
8508 var pseudoElementsString = A2(
8509 $elm$core$String$join,
8510 '',
8511 _List_fromArray(
8512 [
8513 A2(
8514 $elm$core$Maybe$withDefault,
8515 '',
8516 A2($elm$core$Maybe$map, $rtfeldman$elm_css$Css$Structure$Output$pseudoElementToString, pseudoElement))
8517 ]));
8518 return A2(
8519 $elm$core$String$append,
8520 A2(
8521 $elm$core$String$join,
8522 ' ',
8523 A2(
8524 $elm$core$List$filter,
8525 A2($elm$core$Basics$composeL, $elm$core$Basics$not, $elm$core$String$isEmpty),
8526 segments)),
8527 pseudoElementsString);
8528};
8529var $rtfeldman$elm_css$Css$Structure$Output$prettyPrintStyleBlock = F2(
8530 function (indentLevel, _v0) {
8531 var firstSelector = _v0.a;
8532 var otherSelectors = _v0.b;
8533 var properties = _v0.c;
8534 var selectorStr = A2(
8535 $elm$core$String$join,
8536 ', ',
8537 A2(
8538 $elm$core$List$map,
8539 $rtfeldman$elm_css$Css$Structure$Output$selectorToString,
8540 A2($elm$core$List$cons, firstSelector, otherSelectors)));
8541 return A2(
8542 $elm$core$String$join,
8543 '',
8544 _List_fromArray(
8545 [
8546 selectorStr,
8547 ' {\n',
8548 indentLevel,
8549 $rtfeldman$elm_css$Css$Structure$Output$emitProperties(properties),
8550 '\n',
8551 indentLevel,
8552 '}'
8553 ]));
8554 });
8555var $rtfeldman$elm_css$Css$Structure$Output$prettyPrintDeclaration = function (decl) {
8556 switch (decl.$) {
8557 case 'StyleBlockDeclaration':
8558 var styleBlock = decl.a;
8559 return A2($rtfeldman$elm_css$Css$Structure$Output$prettyPrintStyleBlock, $rtfeldman$elm_css$Css$Structure$Output$noIndent, styleBlock);
8560 case 'MediaRule':
8561 var mediaQueries = decl.a;
8562 var styleBlocks = decl.b;
8563 var query = A2(
8564 $elm$core$String$join,
8565 ',\n',
8566 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$mediaQueryToString, mediaQueries));
8567 var blocks = A2(
8568 $elm$core$String$join,
8569 '\n\n',
8570 A2(
8571 $elm$core$List$map,
8572 A2(
8573 $elm$core$Basics$composeL,
8574 $rtfeldman$elm_css$Css$Structure$Output$indent,
8575 $rtfeldman$elm_css$Css$Structure$Output$prettyPrintStyleBlock($rtfeldman$elm_css$Css$Structure$Output$spaceIndent)),
8576 styleBlocks));
8577 return '@media ' + (query + (' {\n' + (blocks + '\n}')));
8578 case 'SupportsRule':
8579 return 'TODO';
8580 case 'DocumentRule':
8581 return 'TODO';
8582 case 'PageRule':
8583 return 'TODO';
8584 case 'FontFace':
8585 return 'TODO';
8586 case 'Keyframes':
8587 var name = decl.a.name;
8588 var declaration = decl.a.declaration;
8589 return '@keyframes ' + (name + (' {\n' + (declaration + '\n}')));
8590 case 'Viewport':
8591 return 'TODO';
8592 case 'CounterStyle':
8593 return 'TODO';
8594 default:
8595 return 'TODO';
8596 }
8597};
8598var $rtfeldman$elm_css$Css$Structure$Output$prettyPrint = function (_v0) {
8599 var charset = _v0.charset;
8600 var imports = _v0.imports;
8601 var namespaces = _v0.namespaces;
8602 var declarations = _v0.declarations;
8603 return A2(
8604 $elm$core$String$join,
8605 '\n\n',
8606 A2(
8607 $elm$core$List$filter,
8608 A2($elm$core$Basics$composeL, $elm$core$Basics$not, $elm$core$String$isEmpty),
8609 _List_fromArray(
8610 [
8611 $rtfeldman$elm_css$Css$Structure$Output$charsetToString(charset),
8612 A2(
8613 $elm$core$String$join,
8614 '\n',
8615 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$importToString, imports)),
8616 A2(
8617 $elm$core$String$join,
8618 '\n',
8619 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$namespaceToString, namespaces)),
8620 A2(
8621 $elm$core$String$join,
8622 '\n\n',
8623 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$prettyPrintDeclaration, declarations))
8624 ])));
8625};
8626var $rtfeldman$elm_css$Css$Structure$CounterStyle = function (a) {
8627 return {$: 'CounterStyle', a: a};
8628};
8629var $rtfeldman$elm_css$Css$Structure$FontFace = function (a) {
8630 return {$: 'FontFace', a: a};
8631};
8632var $rtfeldman$elm_css$Css$Structure$PageRule = F2(
8633 function (a, b) {
8634 return {$: 'PageRule', a: a, b: b};
8635 });
8636var $rtfeldman$elm_css$Css$Structure$Selector = F3(
8637 function (a, b, c) {
8638 return {$: 'Selector', a: a, b: b, c: c};
8639 });
8640var $rtfeldman$elm_css$Css$Structure$StyleBlock = F3(
8641 function (a, b, c) {
8642 return {$: 'StyleBlock', a: a, b: b, c: c};
8643 });
8644var $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration = function (a) {
8645 return {$: 'StyleBlockDeclaration', a: a};
8646};
8647var $rtfeldman$elm_css$Css$Structure$SupportsRule = F2(
8648 function (a, b) {
8649 return {$: 'SupportsRule', a: a, b: b};
8650 });
8651var $rtfeldman$elm_css$Css$Structure$Viewport = function (a) {
8652 return {$: 'Viewport', a: a};
8653};
8654var $rtfeldman$elm_css$Css$Structure$MediaRule = F2(
8655 function (a, b) {
8656 return {$: 'MediaRule', a: a, b: b};
8657 });
8658var $rtfeldman$elm_css$Css$Structure$mapLast = F2(
8659 function (update, list) {
8660 if (!list.b) {
8661 return list;
8662 } else {
8663 if (!list.b.b) {
8664 var only = list.a;
8665 return _List_fromArray(
8666 [
8667 update(only)
8668 ]);
8669 } else {
8670 var first = list.a;
8671 var rest = list.b;
8672 return A2(
8673 $elm$core$List$cons,
8674 first,
8675 A2($rtfeldman$elm_css$Css$Structure$mapLast, update, rest));
8676 }
8677 }
8678 });
8679var $rtfeldman$elm_css$Css$Structure$withPropertyAppended = F2(
8680 function (property, _v0) {
8681 var firstSelector = _v0.a;
8682 var otherSelectors = _v0.b;
8683 var properties = _v0.c;
8684 return A3(
8685 $rtfeldman$elm_css$Css$Structure$StyleBlock,
8686 firstSelector,
8687 otherSelectors,
8688 _Utils_ap(
8689 properties,
8690 _List_fromArray(
8691 [property])));
8692 });
8693var $rtfeldman$elm_css$Css$Structure$appendProperty = F2(
8694 function (property, declarations) {
8695 if (!declarations.b) {
8696 return declarations;
8697 } else {
8698 if (!declarations.b.b) {
8699 switch (declarations.a.$) {
8700 case 'StyleBlockDeclaration':
8701 var styleBlock = declarations.a.a;
8702 return _List_fromArray(
8703 [
8704 $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration(
8705 A2($rtfeldman$elm_css$Css$Structure$withPropertyAppended, property, styleBlock))
8706 ]);
8707 case 'MediaRule':
8708 var _v1 = declarations.a;
8709 var mediaQueries = _v1.a;
8710 var styleBlocks = _v1.b;
8711 return _List_fromArray(
8712 [
8713 A2(
8714 $rtfeldman$elm_css$Css$Structure$MediaRule,
8715 mediaQueries,
8716 A2(
8717 $rtfeldman$elm_css$Css$Structure$mapLast,
8718 $rtfeldman$elm_css$Css$Structure$withPropertyAppended(property),
8719 styleBlocks))
8720 ]);
8721 default:
8722 return declarations;
8723 }
8724 } else {
8725 var first = declarations.a;
8726 var rest = declarations.b;
8727 return A2(
8728 $elm$core$List$cons,
8729 first,
8730 A2($rtfeldman$elm_css$Css$Structure$appendProperty, property, rest));
8731 }
8732 }
8733 });
8734var $rtfeldman$elm_css$Css$Structure$appendToLastSelector = F2(
8735 function (f, styleBlock) {
8736 if (!styleBlock.b.b) {
8737 var only = styleBlock.a;
8738 var properties = styleBlock.c;
8739 return _List_fromArray(
8740 [
8741 A3($rtfeldman$elm_css$Css$Structure$StyleBlock, only, _List_Nil, properties),
8742 A3(
8743 $rtfeldman$elm_css$Css$Structure$StyleBlock,
8744 f(only),
8745 _List_Nil,
8746 _List_Nil)
8747 ]);
8748 } else {
8749 var first = styleBlock.a;
8750 var rest = styleBlock.b;
8751 var properties = styleBlock.c;
8752 var newRest = A2($elm$core$List$map, f, rest);
8753 var newFirst = f(first);
8754 return _List_fromArray(
8755 [
8756 A3($rtfeldman$elm_css$Css$Structure$StyleBlock, first, rest, properties),
8757 A3($rtfeldman$elm_css$Css$Structure$StyleBlock, newFirst, newRest, _List_Nil)
8758 ]);
8759 }
8760 });
8761var $rtfeldman$elm_css$Css$Structure$applyPseudoElement = F2(
8762 function (pseudo, _v0) {
8763 var sequence = _v0.a;
8764 var selectors = _v0.b;
8765 return A3(
8766 $rtfeldman$elm_css$Css$Structure$Selector,
8767 sequence,
8768 selectors,
8769 $elm$core$Maybe$Just(pseudo));
8770 });
8771var $rtfeldman$elm_css$Css$Structure$appendPseudoElementToLastSelector = F2(
8772 function (pseudo, styleBlock) {
8773 return A2(
8774 $rtfeldman$elm_css$Css$Structure$appendToLastSelector,
8775 $rtfeldman$elm_css$Css$Structure$applyPseudoElement(pseudo),
8776 styleBlock);
8777 });
8778var $rtfeldman$elm_css$Css$Structure$CustomSelector = F2(
8779 function (a, b) {
8780 return {$: 'CustomSelector', a: a, b: b};
8781 });
8782var $rtfeldman$elm_css$Css$Structure$TypeSelectorSequence = F2(
8783 function (a, b) {
8784 return {$: 'TypeSelectorSequence', a: a, b: b};
8785 });
8786var $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence = function (a) {
8787 return {$: 'UniversalSelectorSequence', a: a};
8788};
8789var $rtfeldman$elm_css$Css$Structure$appendRepeatable = F2(
8790 function (selector, sequence) {
8791 switch (sequence.$) {
8792 case 'TypeSelectorSequence':
8793 var typeSelector = sequence.a;
8794 var list = sequence.b;
8795 return A2(
8796 $rtfeldman$elm_css$Css$Structure$TypeSelectorSequence,
8797 typeSelector,
8798 _Utils_ap(
8799 list,
8800 _List_fromArray(
8801 [selector])));
8802 case 'UniversalSelectorSequence':
8803 var list = sequence.a;
8804 return $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence(
8805 _Utils_ap(
8806 list,
8807 _List_fromArray(
8808 [selector])));
8809 default:
8810 var str = sequence.a;
8811 var list = sequence.b;
8812 return A2(
8813 $rtfeldman$elm_css$Css$Structure$CustomSelector,
8814 str,
8815 _Utils_ap(
8816 list,
8817 _List_fromArray(
8818 [selector])));
8819 }
8820 });
8821var $rtfeldman$elm_css$Css$Structure$appendRepeatableWithCombinator = F2(
8822 function (selector, list) {
8823 if (!list.b) {
8824 return _List_Nil;
8825 } else {
8826 if (!list.b.b) {
8827 var _v1 = list.a;
8828 var combinator = _v1.a;
8829 var sequence = _v1.b;
8830 return _List_fromArray(
8831 [
8832 _Utils_Tuple2(
8833 combinator,
8834 A2($rtfeldman$elm_css$Css$Structure$appendRepeatable, selector, sequence))
8835 ]);
8836 } else {
8837 var first = list.a;
8838 var rest = list.b;
8839 return A2(
8840 $elm$core$List$cons,
8841 first,
8842 A2($rtfeldman$elm_css$Css$Structure$appendRepeatableWithCombinator, selector, rest));
8843 }
8844 }
8845 });
8846var $rtfeldman$elm_css$Css$Structure$appendRepeatableSelector = F2(
8847 function (repeatableSimpleSelector, selector) {
8848 if (!selector.b.b) {
8849 var sequence = selector.a;
8850 var pseudoElement = selector.c;
8851 return A3(
8852 $rtfeldman$elm_css$Css$Structure$Selector,
8853 A2($rtfeldman$elm_css$Css$Structure$appendRepeatable, repeatableSimpleSelector, sequence),
8854 _List_Nil,
8855 pseudoElement);
8856 } else {
8857 var firstSelector = selector.a;
8858 var tuples = selector.b;
8859 var pseudoElement = selector.c;
8860 return A3(
8861 $rtfeldman$elm_css$Css$Structure$Selector,
8862 firstSelector,
8863 A2($rtfeldman$elm_css$Css$Structure$appendRepeatableWithCombinator, repeatableSimpleSelector, tuples),
8864 pseudoElement);
8865 }
8866 });
8867var $rtfeldman$elm_css$Css$Structure$appendRepeatableToLastSelector = F2(
8868 function (selector, styleBlock) {
8869 return A2(
8870 $rtfeldman$elm_css$Css$Structure$appendToLastSelector,
8871 $rtfeldman$elm_css$Css$Structure$appendRepeatableSelector(selector),
8872 styleBlock);
8873 });
8874var $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors = function (declarations) {
8875 collectSelectors:
8876 while (true) {
8877 if (!declarations.b) {
8878 return _List_Nil;
8879 } else {
8880 if (declarations.a.$ === 'StyleBlockDeclaration') {
8881 var _v1 = declarations.a.a;
8882 var firstSelector = _v1.a;
8883 var otherSelectors = _v1.b;
8884 var rest = declarations.b;
8885 return _Utils_ap(
8886 A2($elm$core$List$cons, firstSelector, otherSelectors),
8887 $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors(rest));
8888 } else {
8889 var rest = declarations.b;
8890 var $temp$declarations = rest;
8891 declarations = $temp$declarations;
8892 continue collectSelectors;
8893 }
8894 }
8895 }
8896};
8897var $rtfeldman$elm_css$Css$Structure$DocumentRule = F5(
8898 function (a, b, c, d, e) {
8899 return {$: 'DocumentRule', a: a, b: b, c: c, d: d, e: e};
8900 });
8901var $rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock = F2(
8902 function (update, declarations) {
8903 _v0$12:
8904 while (true) {
8905 if (!declarations.b) {
8906 return declarations;
8907 } else {
8908 if (!declarations.b.b) {
8909 switch (declarations.a.$) {
8910 case 'StyleBlockDeclaration':
8911 var styleBlock = declarations.a.a;
8912 return A2(
8913 $elm$core$List$map,
8914 $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration,
8915 update(styleBlock));
8916 case 'MediaRule':
8917 if (declarations.a.b.b) {
8918 if (!declarations.a.b.b.b) {
8919 var _v1 = declarations.a;
8920 var mediaQueries = _v1.a;
8921 var _v2 = _v1.b;
8922 var styleBlock = _v2.a;
8923 return _List_fromArray(
8924 [
8925 A2(
8926 $rtfeldman$elm_css$Css$Structure$MediaRule,
8927 mediaQueries,
8928 update(styleBlock))
8929 ]);
8930 } else {
8931 var _v3 = declarations.a;
8932 var mediaQueries = _v3.a;
8933 var _v4 = _v3.b;
8934 var first = _v4.a;
8935 var rest = _v4.b;
8936 var _v5 = A2(
8937 $rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock,
8938 update,
8939 _List_fromArray(
8940 [
8941 A2($rtfeldman$elm_css$Css$Structure$MediaRule, mediaQueries, rest)
8942 ]));
8943 if ((_v5.b && (_v5.a.$ === 'MediaRule')) && (!_v5.b.b)) {
8944 var _v6 = _v5.a;
8945 var newMediaQueries = _v6.a;
8946 var newStyleBlocks = _v6.b;
8947 return _List_fromArray(
8948 [
8949 A2(
8950 $rtfeldman$elm_css$Css$Structure$MediaRule,
8951 newMediaQueries,
8952 A2($elm$core$List$cons, first, newStyleBlocks))
8953 ]);
8954 } else {
8955 var newDeclarations = _v5;
8956 return newDeclarations;
8957 }
8958 }
8959 } else {
8960 break _v0$12;
8961 }
8962 case 'SupportsRule':
8963 var _v7 = declarations.a;
8964 var str = _v7.a;
8965 var nestedDeclarations = _v7.b;
8966 return _List_fromArray(
8967 [
8968 A2(
8969 $rtfeldman$elm_css$Css$Structure$SupportsRule,
8970 str,
8971 A2($rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, update, nestedDeclarations))
8972 ]);
8973 case 'DocumentRule':
8974 var _v8 = declarations.a;
8975 var str1 = _v8.a;
8976 var str2 = _v8.b;
8977 var str3 = _v8.c;
8978 var str4 = _v8.d;
8979 var styleBlock = _v8.e;
8980 return A2(
8981 $elm$core$List$map,
8982 A4($rtfeldman$elm_css$Css$Structure$DocumentRule, str1, str2, str3, str4),
8983 update(styleBlock));
8984 case 'PageRule':
8985 var _v9 = declarations.a;
8986 return declarations;
8987 case 'FontFace':
8988 return declarations;
8989 case 'Keyframes':
8990 return declarations;
8991 case 'Viewport':
8992 return declarations;
8993 case 'CounterStyle':
8994 return declarations;
8995 default:
8996 return declarations;
8997 }
8998 } else {
8999 break _v0$12;
9000 }
9001 }
9002 }
9003 var first = declarations.a;
9004 var rest = declarations.b;
9005 return A2(
9006 $elm$core$List$cons,
9007 first,
9008 A2($rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, update, rest));
9009 });
9010var $elm$core$String$cons = _String_cons;
9011var $rtfeldman$elm_css$ElmCssVendor$Murmur3$HashData = F4(
9012 function (shift, seed, hash, charsProcessed) {
9013 return {charsProcessed: charsProcessed, hash: hash, seed: seed, shift: shift};
9014 });
9015var $rtfeldman$elm_css$ElmCssVendor$Murmur3$c1 = 3432918353;
9016var $rtfeldman$elm_css$ElmCssVendor$Murmur3$c2 = 461845907;
9017var $elm$core$Bitwise$and = _Bitwise_and;
9018var $elm$core$Bitwise$shiftLeftBy = _Bitwise_shiftLeftBy;
9019var $elm$core$Bitwise$shiftRightZfBy = _Bitwise_shiftRightZfBy;
9020var $rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy = F2(
9021 function (b, a) {
9022 return ((a & 65535) * b) + ((((a >>> 16) * b) & 65535) << 16);
9023 });
9024var $elm$core$Bitwise$or = _Bitwise_or;
9025var $rtfeldman$elm_css$ElmCssVendor$Murmur3$rotlBy = F2(
9026 function (b, a) {
9027 return (a << b) | (a >>> (32 - b));
9028 });
9029var $elm$core$Bitwise$xor = _Bitwise_xor;
9030var $rtfeldman$elm_css$ElmCssVendor$Murmur3$finalize = function (data) {
9031 var acc = (!(!data.hash)) ? (data.seed ^ A2(
9032 $rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy,
9033 $rtfeldman$elm_css$ElmCssVendor$Murmur3$c2,
9034 A2(
9035 $rtfeldman$elm_css$ElmCssVendor$Murmur3$rotlBy,
9036 15,
9037 A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, $rtfeldman$elm_css$ElmCssVendor$Murmur3$c1, data.hash)))) : data.seed;
9038 var h0 = acc ^ data.charsProcessed;
9039 var h1 = A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, 2246822507, h0 ^ (h0 >>> 16));
9040 var h2 = A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, 3266489909, h1 ^ (h1 >>> 13));
9041 return (h2 ^ (h2 >>> 16)) >>> 0;
9042};
9043var $elm$core$String$foldl = _String_foldl;
9044var $rtfeldman$elm_css$ElmCssVendor$Murmur3$mix = F2(
9045 function (h1, k1) {
9046 return A2(
9047 $rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy,
9048 5,
9049 A2(
9050 $rtfeldman$elm_css$ElmCssVendor$Murmur3$rotlBy,
9051 13,
9052 h1 ^ A2(
9053 $rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy,
9054 $rtfeldman$elm_css$ElmCssVendor$Murmur3$c2,
9055 A2(
9056 $rtfeldman$elm_css$ElmCssVendor$Murmur3$rotlBy,
9057 15,
9058 A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, $rtfeldman$elm_css$ElmCssVendor$Murmur3$c1, k1))))) + 3864292196;
9059 });
9060var $rtfeldman$elm_css$ElmCssVendor$Murmur3$hashFold = F2(
9061 function (c, data) {
9062 var res = data.hash | ((255 & $elm$core$Char$toCode(c)) << data.shift);
9063 var _v0 = data.shift;
9064 if (_v0 === 24) {
9065 return {
9066 charsProcessed: data.charsProcessed + 1,
9067 hash: 0,
9068 seed: A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$mix, data.seed, res),
9069 shift: 0
9070 };
9071 } else {
9072 return {charsProcessed: data.charsProcessed + 1, hash: res, seed: data.seed, shift: data.shift + 8};
9073 }
9074 });
9075var $rtfeldman$elm_css$ElmCssVendor$Murmur3$hashString = F2(
9076 function (seed, str) {
9077 return $rtfeldman$elm_css$ElmCssVendor$Murmur3$finalize(
9078 A3(
9079 $elm$core$String$foldl,
9080 $rtfeldman$elm_css$ElmCssVendor$Murmur3$hashFold,
9081 A4($rtfeldman$elm_css$ElmCssVendor$Murmur3$HashData, 0, seed, 0, 0),
9082 str));
9083 });
9084var $rtfeldman$elm_css$Hash$murmurSeed = 15739;
9085var $elm$core$String$fromList = _String_fromList;
9086var $elm$core$Basics$modBy = _Basics_modBy;
9087var $rtfeldman$elm_hex$Hex$unsafeToDigit = function (num) {
9088 unsafeToDigit:
9089 while (true) {
9090 switch (num) {
9091 case 0:
9092 return _Utils_chr('0');
9093 case 1:
9094 return _Utils_chr('1');
9095 case 2:
9096 return _Utils_chr('2');
9097 case 3:
9098 return _Utils_chr('3');
9099 case 4:
9100 return _Utils_chr('4');
9101 case 5:
9102 return _Utils_chr('5');
9103 case 6:
9104 return _Utils_chr('6');
9105 case 7:
9106 return _Utils_chr('7');
9107 case 8:
9108 return _Utils_chr('8');
9109 case 9:
9110 return _Utils_chr('9');
9111 case 10:
9112 return _Utils_chr('a');
9113 case 11:
9114 return _Utils_chr('b');
9115 case 12:
9116 return _Utils_chr('c');
9117 case 13:
9118 return _Utils_chr('d');
9119 case 14:
9120 return _Utils_chr('e');
9121 case 15:
9122 return _Utils_chr('f');
9123 default:
9124 var $temp$num = num;
9125 num = $temp$num;
9126 continue unsafeToDigit;
9127 }
9128 }
9129};
9130var $rtfeldman$elm_hex$Hex$unsafePositiveToDigits = F2(
9131 function (digits, num) {
9132 unsafePositiveToDigits:
9133 while (true) {
9134 if (num < 16) {
9135 return A2(
9136 $elm$core$List$cons,
9137 $rtfeldman$elm_hex$Hex$unsafeToDigit(num),
9138 digits);
9139 } else {
9140 var $temp$digits = A2(
9141 $elm$core$List$cons,
9142 $rtfeldman$elm_hex$Hex$unsafeToDigit(
9143 A2($elm$core$Basics$modBy, 16, num)),
9144 digits),
9145 $temp$num = (num / 16) | 0;
9146 digits = $temp$digits;
9147 num = $temp$num;
9148 continue unsafePositiveToDigits;
9149 }
9150 }
9151 });
9152var $rtfeldman$elm_hex$Hex$toString = function (num) {
9153 return $elm$core$String$fromList(
9154 (num < 0) ? A2(
9155 $elm$core$List$cons,
9156 _Utils_chr('-'),
9157 A2($rtfeldman$elm_hex$Hex$unsafePositiveToDigits, _List_Nil, -num)) : A2($rtfeldman$elm_hex$Hex$unsafePositiveToDigits, _List_Nil, num));
9158};
9159var $rtfeldman$elm_css$Hash$fromString = function (str) {
9160 return A2(
9161 $elm$core$String$cons,
9162 _Utils_chr('_'),
9163 $rtfeldman$elm_hex$Hex$toString(
9164 A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$hashString, $rtfeldman$elm_css$Hash$murmurSeed, str)));
9165};
9166var $elm$core$List$head = function (list) {
9167 if (list.b) {
9168 var x = list.a;
9169 var xs = list.b;
9170 return $elm$core$Maybe$Just(x);
9171 } else {
9172 return $elm$core$Maybe$Nothing;
9173 }
9174};
9175var $rtfeldman$elm_css$Css$Preprocess$Resolve$last = function (list) {
9176 last:
9177 while (true) {
9178 if (!list.b) {
9179 return $elm$core$Maybe$Nothing;
9180 } else {
9181 if (!list.b.b) {
9182 var singleton = list.a;
9183 return $elm$core$Maybe$Just(singleton);
9184 } else {
9185 var rest = list.b;
9186 var $temp$list = rest;
9187 list = $temp$list;
9188 continue last;
9189 }
9190 }
9191 }
9192};
9193var $rtfeldman$elm_css$Css$Preprocess$Resolve$lastDeclaration = function (declarations) {
9194 lastDeclaration:
9195 while (true) {
9196 if (!declarations.b) {
9197 return $elm$core$Maybe$Nothing;
9198 } else {
9199 if (!declarations.b.b) {
9200 var x = declarations.a;
9201 return $elm$core$Maybe$Just(
9202 _List_fromArray(
9203 [x]));
9204 } else {
9205 var xs = declarations.b;
9206 var $temp$declarations = xs;
9207 declarations = $temp$declarations;
9208 continue lastDeclaration;
9209 }
9210 }
9211 }
9212};
9213var $rtfeldman$elm_css$Css$Preprocess$Resolve$oneOf = function (maybes) {
9214 oneOf:
9215 while (true) {
9216 if (!maybes.b) {
9217 return $elm$core$Maybe$Nothing;
9218 } else {
9219 var maybe = maybes.a;
9220 var rest = maybes.b;
9221 if (maybe.$ === 'Nothing') {
9222 var $temp$maybes = rest;
9223 maybes = $temp$maybes;
9224 continue oneOf;
9225 } else {
9226 return maybe;
9227 }
9228 }
9229 }
9230};
9231var $rtfeldman$elm_css$Css$Structure$FontFeatureValues = function (a) {
9232 return {$: 'FontFeatureValues', a: a};
9233};
9234var $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveFontFeatureValues = function (tuples) {
9235 var expandTuples = function (tuplesToExpand) {
9236 if (!tuplesToExpand.b) {
9237 return _List_Nil;
9238 } else {
9239 var properties = tuplesToExpand.a;
9240 var rest = tuplesToExpand.b;
9241 return A2(
9242 $elm$core$List$cons,
9243 properties,
9244 expandTuples(rest));
9245 }
9246 };
9247 var newTuples = expandTuples(tuples);
9248 return _List_fromArray(
9249 [
9250 $rtfeldman$elm_css$Css$Structure$FontFeatureValues(newTuples)
9251 ]);
9252};
9253var $rtfeldman$elm_css$Css$Structure$styleBlockToMediaRule = F2(
9254 function (mediaQueries, declaration) {
9255 if (declaration.$ === 'StyleBlockDeclaration') {
9256 var styleBlock = declaration.a;
9257 return A2(
9258 $rtfeldman$elm_css$Css$Structure$MediaRule,
9259 mediaQueries,
9260 _List_fromArray(
9261 [styleBlock]));
9262 } else {
9263 return declaration;
9264 }
9265 });
9266var $elm$core$List$tail = function (list) {
9267 if (list.b) {
9268 var x = list.a;
9269 var xs = list.b;
9270 return $elm$core$Maybe$Just(xs);
9271 } else {
9272 return $elm$core$Maybe$Nothing;
9273 }
9274};
9275var $elm$core$List$takeReverse = F3(
9276 function (n, list, kept) {
9277 takeReverse:
9278 while (true) {
9279 if (n <= 0) {
9280 return kept;
9281 } else {
9282 if (!list.b) {
9283 return kept;
9284 } else {
9285 var x = list.a;
9286 var xs = list.b;
9287 var $temp$n = n - 1,
9288 $temp$list = xs,
9289 $temp$kept = A2($elm$core$List$cons, x, kept);
9290 n = $temp$n;
9291 list = $temp$list;
9292 kept = $temp$kept;
9293 continue takeReverse;
9294 }
9295 }
9296 }
9297 });
9298var $elm$core$List$takeTailRec = F2(
9299 function (n, list) {
9300 return $elm$core$List$reverse(
9301 A3($elm$core$List$takeReverse, n, list, _List_Nil));
9302 });
9303var $elm$core$List$takeFast = F3(
9304 function (ctr, n, list) {
9305 if (n <= 0) {
9306 return _List_Nil;
9307 } else {
9308 var _v0 = _Utils_Tuple2(n, list);
9309 _v0$1:
9310 while (true) {
9311 _v0$5:
9312 while (true) {
9313 if (!_v0.b.b) {
9314 return list;
9315 } else {
9316 if (_v0.b.b.b) {
9317 switch (_v0.a) {
9318 case 1:
9319 break _v0$1;
9320 case 2:
9321 var _v2 = _v0.b;
9322 var x = _v2.a;
9323 var _v3 = _v2.b;
9324 var y = _v3.a;
9325 return _List_fromArray(
9326 [x, y]);
9327 case 3:
9328 if (_v0.b.b.b.b) {
9329 var _v4 = _v0.b;
9330 var x = _v4.a;
9331 var _v5 = _v4.b;
9332 var y = _v5.a;
9333 var _v6 = _v5.b;
9334 var z = _v6.a;
9335 return _List_fromArray(
9336 [x, y, z]);
9337 } else {
9338 break _v0$5;
9339 }
9340 default:
9341 if (_v0.b.b.b.b && _v0.b.b.b.b.b) {
9342 var _v7 = _v0.b;
9343 var x = _v7.a;
9344 var _v8 = _v7.b;
9345 var y = _v8.a;
9346 var _v9 = _v8.b;
9347 var z = _v9.a;
9348 var _v10 = _v9.b;
9349 var w = _v10.a;
9350 var tl = _v10.b;
9351 return (ctr > 1000) ? A2(
9352 $elm$core$List$cons,
9353 x,
9354 A2(
9355 $elm$core$List$cons,
9356 y,
9357 A2(
9358 $elm$core$List$cons,
9359 z,
9360 A2(
9361 $elm$core$List$cons,
9362 w,
9363 A2($elm$core$List$takeTailRec, n - 4, tl))))) : A2(
9364 $elm$core$List$cons,
9365 x,
9366 A2(
9367 $elm$core$List$cons,
9368 y,
9369 A2(
9370 $elm$core$List$cons,
9371 z,
9372 A2(
9373 $elm$core$List$cons,
9374 w,
9375 A3($elm$core$List$takeFast, ctr + 1, n - 4, tl)))));
9376 } else {
9377 break _v0$5;
9378 }
9379 }
9380 } else {
9381 if (_v0.a === 1) {
9382 break _v0$1;
9383 } else {
9384 break _v0$5;
9385 }
9386 }
9387 }
9388 }
9389 return list;
9390 }
9391 var _v1 = _v0.b;
9392 var x = _v1.a;
9393 return _List_fromArray(
9394 [x]);
9395 }
9396 });
9397var $elm$core$List$take = F2(
9398 function (n, list) {
9399 return A3($elm$core$List$takeFast, 0, n, list);
9400 });
9401var $rtfeldman$elm_css$Css$Preprocess$Resolve$toDocumentRule = F5(
9402 function (str1, str2, str3, str4, declaration) {
9403 if (declaration.$ === 'StyleBlockDeclaration') {
9404 var structureStyleBlock = declaration.a;
9405 return A5($rtfeldman$elm_css$Css$Structure$DocumentRule, str1, str2, str3, str4, structureStyleBlock);
9406 } else {
9407 return declaration;
9408 }
9409 });
9410var $rtfeldman$elm_css$Css$Preprocess$Resolve$toMediaRule = F2(
9411 function (mediaQueries, declaration) {
9412 switch (declaration.$) {
9413 case 'StyleBlockDeclaration':
9414 var structureStyleBlock = declaration.a;
9415 return A2(
9416 $rtfeldman$elm_css$Css$Structure$MediaRule,
9417 mediaQueries,
9418 _List_fromArray(
9419 [structureStyleBlock]));
9420 case 'MediaRule':
9421 var newMediaQueries = declaration.a;
9422 var structureStyleBlocks = declaration.b;
9423 return A2(
9424 $rtfeldman$elm_css$Css$Structure$MediaRule,
9425 _Utils_ap(mediaQueries, newMediaQueries),
9426 structureStyleBlocks);
9427 case 'SupportsRule':
9428 var str = declaration.a;
9429 var declarations = declaration.b;
9430 return A2(
9431 $rtfeldman$elm_css$Css$Structure$SupportsRule,
9432 str,
9433 A2(
9434 $elm$core$List$map,
9435 $rtfeldman$elm_css$Css$Preprocess$Resolve$toMediaRule(mediaQueries),
9436 declarations));
9437 case 'DocumentRule':
9438 var str1 = declaration.a;
9439 var str2 = declaration.b;
9440 var str3 = declaration.c;
9441 var str4 = declaration.d;
9442 var structureStyleBlock = declaration.e;
9443 return A5($rtfeldman$elm_css$Css$Structure$DocumentRule, str1, str2, str3, str4, structureStyleBlock);
9444 case 'PageRule':
9445 return declaration;
9446 case 'FontFace':
9447 return declaration;
9448 case 'Keyframes':
9449 return declaration;
9450 case 'Viewport':
9451 return declaration;
9452 case 'CounterStyle':
9453 return declaration;
9454 default:
9455 return declaration;
9456 }
9457 });
9458var $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet = function (_v0) {
9459 var declarations = _v0.a;
9460 return declarations;
9461};
9462var $rtfeldman$elm_css$Css$Preprocess$Resolve$applyNestedStylesToLast = F4(
9463 function (nestedStyles, rest, f, declarations) {
9464 var withoutParent = function (decls) {
9465 return A2(
9466 $elm$core$Maybe$withDefault,
9467 _List_Nil,
9468 $elm$core$List$tail(decls));
9469 };
9470 var nextResult = A2(
9471 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles,
9472 rest,
9473 A2(
9474 $elm$core$Maybe$withDefault,
9475 _List_Nil,
9476 $rtfeldman$elm_css$Css$Preprocess$Resolve$lastDeclaration(declarations)));
9477 var newDeclarations = function () {
9478 var _v14 = _Utils_Tuple2(
9479 $elm$core$List$head(nextResult),
9480 $rtfeldman$elm_css$Css$Preprocess$Resolve$last(declarations));
9481 if ((_v14.a.$ === 'Just') && (_v14.b.$ === 'Just')) {
9482 var nextResultParent = _v14.a.a;
9483 var originalParent = _v14.b.a;
9484 return _Utils_ap(
9485 A2(
9486 $elm$core$List$take,
9487 $elm$core$List$length(declarations) - 1,
9488 declarations),
9489 _List_fromArray(
9490 [
9491 (!_Utils_eq(originalParent, nextResultParent)) ? nextResultParent : originalParent
9492 ]));
9493 } else {
9494 return declarations;
9495 }
9496 }();
9497 var insertStylesToNestedDecl = function (lastDecl) {
9498 return $elm$core$List$concat(
9499 A2(
9500 $rtfeldman$elm_css$Css$Structure$mapLast,
9501 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles(nestedStyles),
9502 A2(
9503 $elm$core$List$map,
9504 $elm$core$List$singleton,
9505 A2($rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, f, lastDecl))));
9506 };
9507 var initialResult = A2(
9508 $elm$core$Maybe$withDefault,
9509 _List_Nil,
9510 A2(
9511 $elm$core$Maybe$map,
9512 insertStylesToNestedDecl,
9513 $rtfeldman$elm_css$Css$Preprocess$Resolve$lastDeclaration(declarations)));
9514 return _Utils_ap(
9515 newDeclarations,
9516 _Utils_ap(
9517 withoutParent(initialResult),
9518 withoutParent(nextResult)));
9519 });
9520var $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles = F2(
9521 function (styles, declarations) {
9522 if (!styles.b) {
9523 return declarations;
9524 } else {
9525 switch (styles.a.$) {
9526 case 'AppendProperty':
9527 var property = styles.a.a;
9528 var rest = styles.b;
9529 return A2(
9530 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles,
9531 rest,
9532 A2($rtfeldman$elm_css$Css$Structure$appendProperty, property, declarations));
9533 case 'ExtendSelector':
9534 var _v4 = styles.a;
9535 var selector = _v4.a;
9536 var nestedStyles = _v4.b;
9537 var rest = styles.b;
9538 return A4(
9539 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyNestedStylesToLast,
9540 nestedStyles,
9541 rest,
9542 $rtfeldman$elm_css$Css$Structure$appendRepeatableToLastSelector(selector),
9543 declarations);
9544 case 'NestSnippet':
9545 var _v5 = styles.a;
9546 var selectorCombinator = _v5.a;
9547 var snippets = _v5.b;
9548 var rest = styles.b;
9549 var chain = F2(
9550 function (_v9, _v10) {
9551 var originalSequence = _v9.a;
9552 var originalTuples = _v9.b;
9553 var originalPseudoElement = _v9.c;
9554 var newSequence = _v10.a;
9555 var newTuples = _v10.b;
9556 var newPseudoElement = _v10.c;
9557 return A3(
9558 $rtfeldman$elm_css$Css$Structure$Selector,
9559 originalSequence,
9560 _Utils_ap(
9561 originalTuples,
9562 A2(
9563 $elm$core$List$cons,
9564 _Utils_Tuple2(selectorCombinator, newSequence),
9565 newTuples)),
9566 $rtfeldman$elm_css$Css$Preprocess$Resolve$oneOf(
9567 _List_fromArray(
9568 [newPseudoElement, originalPseudoElement])));
9569 });
9570 var expandDeclaration = function (declaration) {
9571 switch (declaration.$) {
9572 case 'StyleBlockDeclaration':
9573 var _v7 = declaration.a;
9574 var firstSelector = _v7.a;
9575 var otherSelectors = _v7.b;
9576 var nestedStyles = _v7.c;
9577 var newSelectors = A2(
9578 $elm$core$List$concatMap,
9579 function (originalSelector) {
9580 return A2(
9581 $elm$core$List$map,
9582 chain(originalSelector),
9583 A2($elm$core$List$cons, firstSelector, otherSelectors));
9584 },
9585 $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors(declarations));
9586 var newDeclarations = function () {
9587 if (!newSelectors.b) {
9588 return _List_Nil;
9589 } else {
9590 var first = newSelectors.a;
9591 var remainder = newSelectors.b;
9592 return _List_fromArray(
9593 [
9594 $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration(
9595 A3($rtfeldman$elm_css$Css$Structure$StyleBlock, first, remainder, _List_Nil))
9596 ]);
9597 }
9598 }();
9599 return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, nestedStyles, newDeclarations);
9600 case 'MediaRule':
9601 var mediaQueries = declaration.a;
9602 var styleBlocks = declaration.b;
9603 return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveMediaRule, mediaQueries, styleBlocks);
9604 case 'SupportsRule':
9605 var str = declaration.a;
9606 var otherSnippets = declaration.b;
9607 return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveSupportsRule, str, otherSnippets);
9608 case 'DocumentRule':
9609 var str1 = declaration.a;
9610 var str2 = declaration.b;
9611 var str3 = declaration.c;
9612 var str4 = declaration.d;
9613 var styleBlock = declaration.e;
9614 return A2(
9615 $elm$core$List$map,
9616 A4($rtfeldman$elm_css$Css$Preprocess$Resolve$toDocumentRule, str1, str2, str3, str4),
9617 $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock));
9618 case 'PageRule':
9619 var str = declaration.a;
9620 var properties = declaration.b;
9621 return _List_fromArray(
9622 [
9623 A2($rtfeldman$elm_css$Css$Structure$PageRule, str, properties)
9624 ]);
9625 case 'FontFace':
9626 var properties = declaration.a;
9627 return _List_fromArray(
9628 [
9629 $rtfeldman$elm_css$Css$Structure$FontFace(properties)
9630 ]);
9631 case 'Viewport':
9632 var properties = declaration.a;
9633 return _List_fromArray(
9634 [
9635 $rtfeldman$elm_css$Css$Structure$Viewport(properties)
9636 ]);
9637 case 'CounterStyle':
9638 var properties = declaration.a;
9639 return _List_fromArray(
9640 [
9641 $rtfeldman$elm_css$Css$Structure$CounterStyle(properties)
9642 ]);
9643 default:
9644 var tuples = declaration.a;
9645 return $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveFontFeatureValues(tuples);
9646 }
9647 };
9648 return $elm$core$List$concat(
9649 _Utils_ap(
9650 _List_fromArray(
9651 [
9652 A2($rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, rest, declarations)
9653 ]),
9654 A2(
9655 $elm$core$List$map,
9656 expandDeclaration,
9657 A2($elm$core$List$concatMap, $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet, snippets))));
9658 case 'WithPseudoElement':
9659 var _v11 = styles.a;
9660 var pseudoElement = _v11.a;
9661 var nestedStyles = _v11.b;
9662 var rest = styles.b;
9663 return A4(
9664 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyNestedStylesToLast,
9665 nestedStyles,
9666 rest,
9667 $rtfeldman$elm_css$Css$Structure$appendPseudoElementToLastSelector(pseudoElement),
9668 declarations);
9669 case 'WithKeyframes':
9670 var str = styles.a.a;
9671 var rest = styles.b;
9672 var name = $rtfeldman$elm_css$Hash$fromString(str);
9673 var newProperty = 'animation-name:' + name;
9674 var newDeclarations = A2(
9675 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles,
9676 rest,
9677 A2($rtfeldman$elm_css$Css$Structure$appendProperty, newProperty, declarations));
9678 return A2(
9679 $elm$core$List$append,
9680 newDeclarations,
9681 _List_fromArray(
9682 [
9683 $rtfeldman$elm_css$Css$Structure$Keyframes(
9684 {declaration: str, name: name})
9685 ]));
9686 case 'WithMedia':
9687 var _v12 = styles.a;
9688 var mediaQueries = _v12.a;
9689 var nestedStyles = _v12.b;
9690 var rest = styles.b;
9691 var extraDeclarations = function () {
9692 var _v13 = $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors(declarations);
9693 if (!_v13.b) {
9694 return _List_Nil;
9695 } else {
9696 var firstSelector = _v13.a;
9697 var otherSelectors = _v13.b;
9698 return A2(
9699 $elm$core$List$map,
9700 $rtfeldman$elm_css$Css$Structure$styleBlockToMediaRule(mediaQueries),
9701 A2(
9702 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles,
9703 nestedStyles,
9704 $elm$core$List$singleton(
9705 $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration(
9706 A3($rtfeldman$elm_css$Css$Structure$StyleBlock, firstSelector, otherSelectors, _List_Nil)))));
9707 }
9708 }();
9709 return _Utils_ap(
9710 A2($rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, rest, declarations),
9711 extraDeclarations);
9712 default:
9713 var otherStyles = styles.a.a;
9714 var rest = styles.b;
9715 return A2(
9716 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles,
9717 _Utils_ap(otherStyles, rest),
9718 declarations);
9719 }
9720 }
9721 });
9722var $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock = function (_v2) {
9723 var firstSelector = _v2.a;
9724 var otherSelectors = _v2.b;
9725 var styles = _v2.c;
9726 return A2(
9727 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles,
9728 styles,
9729 _List_fromArray(
9730 [
9731 $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration(
9732 A3($rtfeldman$elm_css$Css$Structure$StyleBlock, firstSelector, otherSelectors, _List_Nil))
9733 ]));
9734};
9735var $rtfeldman$elm_css$Css$Preprocess$Resolve$extract = function (snippetDeclarations) {
9736 if (!snippetDeclarations.b) {
9737 return _List_Nil;
9738 } else {
9739 var first = snippetDeclarations.a;
9740 var rest = snippetDeclarations.b;
9741 return _Utils_ap(
9742 $rtfeldman$elm_css$Css$Preprocess$Resolve$toDeclarations(first),
9743 $rtfeldman$elm_css$Css$Preprocess$Resolve$extract(rest));
9744 }
9745};
9746var $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveMediaRule = F2(
9747 function (mediaQueries, styleBlocks) {
9748 var handleStyleBlock = function (styleBlock) {
9749 return A2(
9750 $elm$core$List$map,
9751 $rtfeldman$elm_css$Css$Preprocess$Resolve$toMediaRule(mediaQueries),
9752 $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock));
9753 };
9754 return A2($elm$core$List$concatMap, handleStyleBlock, styleBlocks);
9755 });
9756var $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveSupportsRule = F2(
9757 function (str, snippets) {
9758 var declarations = $rtfeldman$elm_css$Css$Preprocess$Resolve$extract(
9759 A2($elm$core$List$concatMap, $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet, snippets));
9760 return _List_fromArray(
9761 [
9762 A2($rtfeldman$elm_css$Css$Structure$SupportsRule, str, declarations)
9763 ]);
9764 });
9765var $rtfeldman$elm_css$Css$Preprocess$Resolve$toDeclarations = function (snippetDeclaration) {
9766 switch (snippetDeclaration.$) {
9767 case 'StyleBlockDeclaration':
9768 var styleBlock = snippetDeclaration.a;
9769 return $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock);
9770 case 'MediaRule':
9771 var mediaQueries = snippetDeclaration.a;
9772 var styleBlocks = snippetDeclaration.b;
9773 return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveMediaRule, mediaQueries, styleBlocks);
9774 case 'SupportsRule':
9775 var str = snippetDeclaration.a;
9776 var snippets = snippetDeclaration.b;
9777 return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveSupportsRule, str, snippets);
9778 case 'DocumentRule':
9779 var str1 = snippetDeclaration.a;
9780 var str2 = snippetDeclaration.b;
9781 var str3 = snippetDeclaration.c;
9782 var str4 = snippetDeclaration.d;
9783 var styleBlock = snippetDeclaration.e;
9784 return A2(
9785 $elm$core$List$map,
9786 A4($rtfeldman$elm_css$Css$Preprocess$Resolve$toDocumentRule, str1, str2, str3, str4),
9787 $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock));
9788 case 'PageRule':
9789 var str = snippetDeclaration.a;
9790 var properties = snippetDeclaration.b;
9791 return _List_fromArray(
9792 [
9793 A2($rtfeldman$elm_css$Css$Structure$PageRule, str, properties)
9794 ]);
9795 case 'FontFace':
9796 var properties = snippetDeclaration.a;
9797 return _List_fromArray(
9798 [
9799 $rtfeldman$elm_css$Css$Structure$FontFace(properties)
9800 ]);
9801 case 'Viewport':
9802 var properties = snippetDeclaration.a;
9803 return _List_fromArray(
9804 [
9805 $rtfeldman$elm_css$Css$Structure$Viewport(properties)
9806 ]);
9807 case 'CounterStyle':
9808 var properties = snippetDeclaration.a;
9809 return _List_fromArray(
9810 [
9811 $rtfeldman$elm_css$Css$Structure$CounterStyle(properties)
9812 ]);
9813 default:
9814 var tuples = snippetDeclaration.a;
9815 return $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveFontFeatureValues(tuples);
9816 }
9817};
9818var $rtfeldman$elm_css$Css$Preprocess$Resolve$toStructure = function (_v0) {
9819 var charset = _v0.charset;
9820 var imports = _v0.imports;
9821 var namespaces = _v0.namespaces;
9822 var snippets = _v0.snippets;
9823 var declarations = $rtfeldman$elm_css$Css$Preprocess$Resolve$extract(
9824 A2($elm$core$List$concatMap, $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet, snippets));
9825 return {charset: charset, declarations: declarations, imports: imports, namespaces: namespaces};
9826};
9827var $rtfeldman$elm_css$Css$Preprocess$Resolve$compileHelp = function (sheet) {
9828 return $rtfeldman$elm_css$Css$Structure$Output$prettyPrint(
9829 $rtfeldman$elm_css$Css$Structure$compactStylesheet(
9830 $rtfeldman$elm_css$Css$Preprocess$Resolve$toStructure(sheet)));
9831};
9832var $rtfeldman$elm_css$Css$Preprocess$Resolve$compile = function (styles) {
9833 return A2(
9834 $elm$core$String$join,
9835 '\n\n',
9836 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Preprocess$Resolve$compileHelp, styles));
9837};
9838var $rtfeldman$elm_css$Css$Structure$ClassSelector = function (a) {
9839 return {$: 'ClassSelector', a: a};
9840};
9841var $rtfeldman$elm_css$Css$Preprocess$Snippet = function (a) {
9842 return {$: 'Snippet', a: a};
9843};
9844var $rtfeldman$elm_css$Css$Preprocess$StyleBlock = F3(
9845 function (a, b, c) {
9846 return {$: 'StyleBlock', a: a, b: b, c: c};
9847 });
9848var $rtfeldman$elm_css$Css$Preprocess$StyleBlockDeclaration = function (a) {
9849 return {$: 'StyleBlockDeclaration', a: a};
9850};
9851var $rtfeldman$elm_css$VirtualDom$Styled$makeSnippet = F2(
9852 function (styles, sequence) {
9853 var selector = A3($rtfeldman$elm_css$Css$Structure$Selector, sequence, _List_Nil, $elm$core$Maybe$Nothing);
9854 return $rtfeldman$elm_css$Css$Preprocess$Snippet(
9855 _List_fromArray(
9856 [
9857 $rtfeldman$elm_css$Css$Preprocess$StyleBlockDeclaration(
9858 A3($rtfeldman$elm_css$Css$Preprocess$StyleBlock, selector, _List_Nil, styles))
9859 ]));
9860 });
9861var $rtfeldman$elm_css$VirtualDom$Styled$snippetFromPair = function (_v0) {
9862 var classname = _v0.a;
9863 var styles = _v0.b;
9864 return A2(
9865 $rtfeldman$elm_css$VirtualDom$Styled$makeSnippet,
9866 styles,
9867 $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence(
9868 _List_fromArray(
9869 [
9870 $rtfeldman$elm_css$Css$Structure$ClassSelector(classname)
9871 ])));
9872};
9873var $rtfeldman$elm_css$Css$Preprocess$stylesheet = function (snippets) {
9874 return {charset: $elm$core$Maybe$Nothing, imports: _List_Nil, namespaces: _List_Nil, snippets: snippets};
9875};
9876var $rtfeldman$elm_css$VirtualDom$Styled$toDeclaration = function (dict) {
9877 return $rtfeldman$elm_css$Css$Preprocess$Resolve$compile(
9878 $elm$core$List$singleton(
9879 $rtfeldman$elm_css$Css$Preprocess$stylesheet(
9880 A2(
9881 $elm$core$List$map,
9882 $rtfeldman$elm_css$VirtualDom$Styled$snippetFromPair,
9883 $elm$core$Dict$toList(dict)))));
9884};
9885var $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode = function (styles) {
9886 return A3(
9887 $elm$virtual_dom$VirtualDom$node,
9888 'style',
9889 _List_Nil,
9890 $elm$core$List$singleton(
9891 $elm$virtual_dom$VirtualDom$text(
9892 $rtfeldman$elm_css$VirtualDom$Styled$toDeclaration(styles))));
9893};
9894var $rtfeldman$elm_css$VirtualDom$Styled$unstyle = F3(
9895 function (elemType, properties, children) {
9896 var unstyledProperties = A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties);
9897 var initialStyles = $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties(properties);
9898 var _v0 = A3(
9899 $elm$core$List$foldl,
9900 $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml,
9901 _Utils_Tuple2(_List_Nil, initialStyles),
9902 children);
9903 var childNodes = _v0.a;
9904 var styles = _v0.b;
9905 var styleNode = $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode(styles);
9906 return A3(
9907 $elm$virtual_dom$VirtualDom$node,
9908 elemType,
9909 unstyledProperties,
9910 A2(
9911 $elm$core$List$cons,
9912 styleNode,
9913 $elm$core$List$reverse(childNodes)));
9914 });
9915var $rtfeldman$elm_css$VirtualDom$Styled$containsKey = F2(
9916 function (key, pairs) {
9917 containsKey:
9918 while (true) {
9919 if (!pairs.b) {
9920 return false;
9921 } else {
9922 var _v1 = pairs.a;
9923 var str = _v1.a;
9924 var rest = pairs.b;
9925 if (_Utils_eq(key, str)) {
9926 return true;
9927 } else {
9928 var $temp$key = key,
9929 $temp$pairs = rest;
9930 key = $temp$key;
9931 pairs = $temp$pairs;
9932 continue containsKey;
9933 }
9934 }
9935 }
9936 });
9937var $rtfeldman$elm_css$VirtualDom$Styled$getUnusedKey = F2(
9938 function (_default, pairs) {
9939 getUnusedKey:
9940 while (true) {
9941 if (!pairs.b) {
9942 return _default;
9943 } else {
9944 var _v1 = pairs.a;
9945 var firstKey = _v1.a;
9946 var rest = pairs.b;
9947 var newKey = '_' + firstKey;
9948 if (A2($rtfeldman$elm_css$VirtualDom$Styled$containsKey, newKey, rest)) {
9949 var $temp$default = newKey,
9950 $temp$pairs = rest;
9951 _default = $temp$default;
9952 pairs = $temp$pairs;
9953 continue getUnusedKey;
9954 } else {
9955 return newKey;
9956 }
9957 }
9958 }
9959 });
9960var $rtfeldman$elm_css$VirtualDom$Styled$toKeyedStyleNode = F2(
9961 function (allStyles, keyedChildNodes) {
9962 var styleNodeKey = A2($rtfeldman$elm_css$VirtualDom$Styled$getUnusedKey, '_', keyedChildNodes);
9963 var finalNode = $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode(allStyles);
9964 return _Utils_Tuple2(styleNodeKey, finalNode);
9965 });
9966var $rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyed = F3(
9967 function (elemType, properties, keyedChildren) {
9968 var unstyledProperties = A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties);
9969 var initialStyles = $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties(properties);
9970 var _v0 = A3(
9971 $elm$core$List$foldl,
9972 $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml,
9973 _Utils_Tuple2(_List_Nil, initialStyles),
9974 keyedChildren);
9975 var keyedChildNodes = _v0.a;
9976 var styles = _v0.b;
9977 var keyedStyleNode = A2($rtfeldman$elm_css$VirtualDom$Styled$toKeyedStyleNode, styles, keyedChildNodes);
9978 return A3(
9979 $elm$virtual_dom$VirtualDom$keyedNode,
9980 elemType,
9981 unstyledProperties,
9982 A2(
9983 $elm$core$List$cons,
9984 keyedStyleNode,
9985 $elm$core$List$reverse(keyedChildNodes)));
9986 });
9987var $rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyedNS = F4(
9988 function (ns, elemType, properties, keyedChildren) {
9989 var unstyledProperties = A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties);
9990 var initialStyles = $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties(properties);
9991 var _v0 = A3(
9992 $elm$core$List$foldl,
9993 $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml,
9994 _Utils_Tuple2(_List_Nil, initialStyles),
9995 keyedChildren);
9996 var keyedChildNodes = _v0.a;
9997 var styles = _v0.b;
9998 var keyedStyleNode = A2($rtfeldman$elm_css$VirtualDom$Styled$toKeyedStyleNode, styles, keyedChildNodes);
9999 return A4(
10000 $elm$virtual_dom$VirtualDom$keyedNodeNS,
10001 ns,
10002 elemType,
10003 unstyledProperties,
10004 A2(
10005 $elm$core$List$cons,
10006 keyedStyleNode,
10007 $elm$core$List$reverse(keyedChildNodes)));
10008 });
10009var $rtfeldman$elm_css$VirtualDom$Styled$unstyleNS = F4(
10010 function (ns, elemType, properties, children) {
10011 var unstyledProperties = A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties);
10012 var initialStyles = $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties(properties);
10013 var _v0 = A3(
10014 $elm$core$List$foldl,
10015 $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml,
10016 _Utils_Tuple2(_List_Nil, initialStyles),
10017 children);
10018 var childNodes = _v0.a;
10019 var styles = _v0.b;
10020 var styleNode = $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode(styles);
10021 return A4(
10022 $elm$virtual_dom$VirtualDom$nodeNS,
10023 ns,
10024 elemType,
10025 unstyledProperties,
10026 A2(
10027 $elm$core$List$cons,
10028 styleNode,
10029 $elm$core$List$reverse(childNodes)));
10030 });
10031var $rtfeldman$elm_css$VirtualDom$Styled$toUnstyled = function (vdom) {
10032 switch (vdom.$) {
10033 case 'Unstyled':
10034 var plainNode = vdom.a;
10035 return plainNode;
10036 case 'Node':
10037 var elemType = vdom.a;
10038 var properties = vdom.b;
10039 var children = vdom.c;
10040 return A3($rtfeldman$elm_css$VirtualDom$Styled$unstyle, elemType, properties, children);
10041 case 'NodeNS':
10042 var ns = vdom.a;
10043 var elemType = vdom.b;
10044 var properties = vdom.c;
10045 var children = vdom.d;
10046 return A4($rtfeldman$elm_css$VirtualDom$Styled$unstyleNS, ns, elemType, properties, children);
10047 case 'KeyedNode':
10048 var elemType = vdom.a;
10049 var properties = vdom.b;
10050 var children = vdom.c;
10051 return A3($rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyed, elemType, properties, children);
10052 default:
10053 var ns = vdom.a;
10054 var elemType = vdom.b;
10055 var properties = vdom.c;
10056 var children = vdom.d;
10057 return A4($rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyedNS, ns, elemType, properties, children);
10058 }
10059};
10060var $rtfeldman$elm_css$Html$Styled$toUnstyled = $rtfeldman$elm_css$VirtualDom$Styled$toUnstyled;
10061var $author$project$Main$LogoutPressed = {$: 'LogoutPressed'};
10062var $rtfeldman$elm_css$Css$Preprocess$AppendProperty = function (a) {
10063 return {$: 'AppendProperty', a: a};
10064};
10065var $rtfeldman$elm_css$Css$property = F2(
10066 function (key, value) {
10067 return $rtfeldman$elm_css$Css$Preprocess$AppendProperty(key + (':' + value));
10068 });
10069var $rtfeldman$elm_css$Css$backgroundColor = function (c) {
10070 return A2($rtfeldman$elm_css$Css$property, 'background-color', c.value);
10071};
10072var $rtfeldman$elm_css$VirtualDom$Styled$murmurSeed = 15739;
10073var $rtfeldman$elm_css$VirtualDom$Styled$getClassname = function (styles) {
10074 return $elm$core$List$isEmpty(styles) ? 'unstyled' : A2(
10075 $elm$core$String$cons,
10076 _Utils_chr('_'),
10077 $rtfeldman$elm_hex$Hex$toString(
10078 A2(
10079 $rtfeldman$elm_css$ElmCssVendor$Murmur3$hashString,
10080 $rtfeldman$elm_css$VirtualDom$Styled$murmurSeed,
10081 $rtfeldman$elm_css$Css$Preprocess$Resolve$compile(
10082 $elm$core$List$singleton(
10083 $rtfeldman$elm_css$Css$Preprocess$stylesheet(
10084 $elm$core$List$singleton(
10085 A2(
10086 $rtfeldman$elm_css$VirtualDom$Styled$makeSnippet,
10087 styles,
10088 $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence(_List_Nil)))))))));
10089};
10090var $rtfeldman$elm_css$Html$Styled$Internal$css = function (styles) {
10091 var classname = $rtfeldman$elm_css$VirtualDom$Styled$getClassname(styles);
10092 var classProperty = A2(
10093 $elm$virtual_dom$VirtualDom$property,
10094 'className',
10095 $elm$json$Json$Encode$string(classname));
10096 return A3($rtfeldman$elm_css$VirtualDom$Styled$Attribute, classProperty, styles, classname);
10097};
10098var $rtfeldman$elm_css$Html$Styled$Attributes$css = $rtfeldman$elm_css$Html$Styled$Internal$css;
10099var $rtfeldman$elm_css$Css$prop1 = F2(
10100 function (key, arg) {
10101 return A2($rtfeldman$elm_css$Css$property, key, arg.value);
10102 });
10103var $rtfeldman$elm_css$Css$display = $rtfeldman$elm_css$Css$prop1('display');
10104var $rtfeldman$elm_css$Css$border = $rtfeldman$elm_css$Css$prop1('border');
10105var $rtfeldman$elm_css$Css$borderRadius = $rtfeldman$elm_css$Css$prop1('border-radius');
10106var $rtfeldman$elm_css$Html$Styled$button = $rtfeldman$elm_css$Html$Styled$node('button');
10107var $rtfeldman$elm_css$Css$color = function (c) {
10108 return A2($rtfeldman$elm_css$Css$property, 'color', c.value);
10109};
10110var $rtfeldman$elm_css$Css$height = $rtfeldman$elm_css$Css$prop1('height');
10111var $rtfeldman$elm_css$Css$Preprocess$ExtendSelector = F2(
10112 function (a, b) {
10113 return {$: 'ExtendSelector', a: a, b: b};
10114 });
10115var $rtfeldman$elm_css$Css$Structure$PseudoClassSelector = function (a) {
10116 return {$: 'PseudoClassSelector', a: a};
10117};
10118var $rtfeldman$elm_css$Css$pseudoClass = function (_class) {
10119 return $rtfeldman$elm_css$Css$Preprocess$ExtendSelector(
10120 $rtfeldman$elm_css$Css$Structure$PseudoClassSelector(_class));
10121};
10122var $rtfeldman$elm_css$Css$hover = $rtfeldman$elm_css$Css$pseudoClass('hover');
10123var $rtfeldman$elm_css$Css$margin = $rtfeldman$elm_css$Css$prop1('margin');
10124var $rtfeldman$elm_css$Css$prop2 = F3(
10125 function (key, argA, argB) {
10126 return A2(
10127 $rtfeldman$elm_css$Css$property,
10128 key,
10129 A2(
10130 $elm$core$String$join,
10131 ' ',
10132 _List_fromArray(
10133 [argA.value, argB.value])));
10134 });
10135var $rtfeldman$elm_css$Css$padding2 = $rtfeldman$elm_css$Css$prop2('padding');
10136var $rtfeldman$elm_css$Css$PxUnits = {$: 'PxUnits'};
10137var $rtfeldman$elm_css$Css$Structure$Compatible = {$: 'Compatible'};
10138var $elm$core$String$fromFloat = _String_fromNumber;
10139var $rtfeldman$elm_css$Css$Internal$lengthConverter = F3(
10140 function (units, unitLabel, numericValue) {
10141 return {
10142 absoluteLength: $rtfeldman$elm_css$Css$Structure$Compatible,
10143 calc: $rtfeldman$elm_css$Css$Structure$Compatible,
10144 flexBasis: $rtfeldman$elm_css$Css$Structure$Compatible,
10145 fontSize: $rtfeldman$elm_css$Css$Structure$Compatible,
10146 length: $rtfeldman$elm_css$Css$Structure$Compatible,
10147 lengthOrAuto: $rtfeldman$elm_css$Css$Structure$Compatible,
10148 lengthOrAutoOrCoverOrContain: $rtfeldman$elm_css$Css$Structure$Compatible,
10149 lengthOrMinMaxDimension: $rtfeldman$elm_css$Css$Structure$Compatible,
10150 lengthOrNone: $rtfeldman$elm_css$Css$Structure$Compatible,
10151 lengthOrNoneOrMinMaxDimension: $rtfeldman$elm_css$Css$Structure$Compatible,
10152 lengthOrNumber: $rtfeldman$elm_css$Css$Structure$Compatible,
10153 lengthOrNumberOrAutoOrNoneOrContent: $rtfeldman$elm_css$Css$Structure$Compatible,
10154 numericValue: numericValue,
10155 textIndent: $rtfeldman$elm_css$Css$Structure$Compatible,
10156 unitLabel: unitLabel,
10157 units: units,
10158 value: _Utils_ap(
10159 $elm$core$String$fromFloat(numericValue),
10160 unitLabel)
10161 };
10162 });
10163var $rtfeldman$elm_css$Css$px = A2($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$PxUnits, 'px');
10164var $rtfeldman$elm_css$Html$Styled$styled = F4(
10165 function (fn, styles, attrs, children) {
10166 return A2(
10167 fn,
10168 A2(
10169 $elm$core$List$cons,
10170 $rtfeldman$elm_css$Html$Styled$Internal$css(styles),
10171 attrs),
10172 children);
10173 });
10174var $author$project$Styles$Theme = F7(
10175 function (primary, secondary, bad, fg, bg, fgLight, bgLight) {
10176 return {bad: bad, bg: bg, bgLight: bgLight, fg: fg, fgLight: fgLight, primary: primary, secondary: secondary};
10177 });
10178var $rtfeldman$elm_css$Css$withPrecedingHash = function (str) {
10179 return A2($elm$core$String$startsWith, '#', str) ? str : A2(
10180 $elm$core$String$cons,
10181 _Utils_chr('#'),
10182 str);
10183};
10184var $rtfeldman$elm_css$Css$erroneousHex = function (str) {
10185 return {
10186 alpha: 1,
10187 blue: 0,
10188 color: $rtfeldman$elm_css$Css$Structure$Compatible,
10189 green: 0,
10190 red: 0,
10191 value: $rtfeldman$elm_css$Css$withPrecedingHash(str)
10192 };
10193};
10194var $elm$core$String$fromChar = function (_char) {
10195 return A2($elm$core$String$cons, _char, '');
10196};
10197var $elm$core$Basics$pow = _Basics_pow;
10198var $rtfeldman$elm_hex$Hex$fromStringHelp = F3(
10199 function (position, chars, accumulated) {
10200 fromStringHelp:
10201 while (true) {
10202 if (!chars.b) {
10203 return $elm$core$Result$Ok(accumulated);
10204 } else {
10205 var _char = chars.a;
10206 var rest = chars.b;
10207 switch (_char.valueOf()) {
10208 case '0':
10209 var $temp$position = position - 1,
10210 $temp$chars = rest,
10211 $temp$accumulated = accumulated;
10212 position = $temp$position;
10213 chars = $temp$chars;
10214 accumulated = $temp$accumulated;
10215 continue fromStringHelp;
10216 case '1':
10217 var $temp$position = position - 1,
10218 $temp$chars = rest,
10219 $temp$accumulated = accumulated + A2($elm$core$Basics$pow, 16, position);
10220 position = $temp$position;
10221 chars = $temp$chars;
10222 accumulated = $temp$accumulated;
10223 continue fromStringHelp;
10224 case '2':
10225 var $temp$position = position - 1,
10226 $temp$chars = rest,
10227 $temp$accumulated = accumulated + (2 * A2($elm$core$Basics$pow, 16, position));
10228 position = $temp$position;
10229 chars = $temp$chars;
10230 accumulated = $temp$accumulated;
10231 continue fromStringHelp;
10232 case '3':
10233 var $temp$position = position - 1,
10234 $temp$chars = rest,
10235 $temp$accumulated = accumulated + (3 * A2($elm$core$Basics$pow, 16, position));
10236 position = $temp$position;
10237 chars = $temp$chars;
10238 accumulated = $temp$accumulated;
10239 continue fromStringHelp;
10240 case '4':
10241 var $temp$position = position - 1,
10242 $temp$chars = rest,
10243 $temp$accumulated = accumulated + (4 * A2($elm$core$Basics$pow, 16, position));
10244 position = $temp$position;
10245 chars = $temp$chars;
10246 accumulated = $temp$accumulated;
10247 continue fromStringHelp;
10248 case '5':
10249 var $temp$position = position - 1,
10250 $temp$chars = rest,
10251 $temp$accumulated = accumulated + (5 * A2($elm$core$Basics$pow, 16, position));
10252 position = $temp$position;
10253 chars = $temp$chars;
10254 accumulated = $temp$accumulated;
10255 continue fromStringHelp;
10256 case '6':
10257 var $temp$position = position - 1,
10258 $temp$chars = rest,
10259 $temp$accumulated = accumulated + (6 * A2($elm$core$Basics$pow, 16, position));
10260 position = $temp$position;
10261 chars = $temp$chars;
10262 accumulated = $temp$accumulated;
10263 continue fromStringHelp;
10264 case '7':
10265 var $temp$position = position - 1,
10266 $temp$chars = rest,
10267 $temp$accumulated = accumulated + (7 * A2($elm$core$Basics$pow, 16, position));
10268 position = $temp$position;
10269 chars = $temp$chars;
10270 accumulated = $temp$accumulated;
10271 continue fromStringHelp;
10272 case '8':
10273 var $temp$position = position - 1,
10274 $temp$chars = rest,
10275 $temp$accumulated = accumulated + (8 * A2($elm$core$Basics$pow, 16, position));
10276 position = $temp$position;
10277 chars = $temp$chars;
10278 accumulated = $temp$accumulated;
10279 continue fromStringHelp;
10280 case '9':
10281 var $temp$position = position - 1,
10282 $temp$chars = rest,
10283 $temp$accumulated = accumulated + (9 * A2($elm$core$Basics$pow, 16, position));
10284 position = $temp$position;
10285 chars = $temp$chars;
10286 accumulated = $temp$accumulated;
10287 continue fromStringHelp;
10288 case 'a':
10289 var $temp$position = position - 1,
10290 $temp$chars = rest,
10291 $temp$accumulated = accumulated + (10 * A2($elm$core$Basics$pow, 16, position));
10292 position = $temp$position;
10293 chars = $temp$chars;
10294 accumulated = $temp$accumulated;
10295 continue fromStringHelp;
10296 case 'b':
10297 var $temp$position = position - 1,
10298 $temp$chars = rest,
10299 $temp$accumulated = accumulated + (11 * A2($elm$core$Basics$pow, 16, position));
10300 position = $temp$position;
10301 chars = $temp$chars;
10302 accumulated = $temp$accumulated;
10303 continue fromStringHelp;
10304 case 'c':
10305 var $temp$position = position - 1,
10306 $temp$chars = rest,
10307 $temp$accumulated = accumulated + (12 * A2($elm$core$Basics$pow, 16, position));
10308 position = $temp$position;
10309 chars = $temp$chars;
10310 accumulated = $temp$accumulated;
10311 continue fromStringHelp;
10312 case 'd':
10313 var $temp$position = position - 1,
10314 $temp$chars = rest,
10315 $temp$accumulated = accumulated + (13 * A2($elm$core$Basics$pow, 16, position));
10316 position = $temp$position;
10317 chars = $temp$chars;
10318 accumulated = $temp$accumulated;
10319 continue fromStringHelp;
10320 case 'e':
10321 var $temp$position = position - 1,
10322 $temp$chars = rest,
10323 $temp$accumulated = accumulated + (14 * A2($elm$core$Basics$pow, 16, position));
10324 position = $temp$position;
10325 chars = $temp$chars;
10326 accumulated = $temp$accumulated;
10327 continue fromStringHelp;
10328 case 'f':
10329 var $temp$position = position - 1,
10330 $temp$chars = rest,
10331 $temp$accumulated = accumulated + (15 * A2($elm$core$Basics$pow, 16, position));
10332 position = $temp$position;
10333 chars = $temp$chars;
10334 accumulated = $temp$accumulated;
10335 continue fromStringHelp;
10336 default:
10337 var nonHex = _char;
10338 return $elm$core$Result$Err(
10339 $elm$core$String$fromChar(nonHex) + ' is not a valid hexadecimal character.');
10340 }
10341 }
10342 }
10343 });
10344var $elm$core$Result$map = F2(
10345 function (func, ra) {
10346 if (ra.$ === 'Ok') {
10347 var a = ra.a;
10348 return $elm$core$Result$Ok(
10349 func(a));
10350 } else {
10351 var e = ra.a;
10352 return $elm$core$Result$Err(e);
10353 }
10354 });
10355var $rtfeldman$elm_hex$Hex$fromString = function (str) {
10356 if ($elm$core$String$isEmpty(str)) {
10357 return $elm$core$Result$Err('Empty strings are not valid hexadecimal strings.');
10358 } else {
10359 var result = function () {
10360 if (A2($elm$core$String$startsWith, '-', str)) {
10361 var list = A2(
10362 $elm$core$Maybe$withDefault,
10363 _List_Nil,
10364 $elm$core$List$tail(
10365 $elm$core$String$toList(str)));
10366 return A2(
10367 $elm$core$Result$map,
10368 $elm$core$Basics$negate,
10369 A3(
10370 $rtfeldman$elm_hex$Hex$fromStringHelp,
10371 $elm$core$List$length(list) - 1,
10372 list,
10373 0));
10374 } else {
10375 return A3(
10376 $rtfeldman$elm_hex$Hex$fromStringHelp,
10377 $elm$core$String$length(str) - 1,
10378 $elm$core$String$toList(str),
10379 0);
10380 }
10381 }();
10382 var formatError = function (err) {
10383 return A2(
10384 $elm$core$String$join,
10385 ' ',
10386 _List_fromArray(
10387 ['\"' + (str + '\"'), 'is not a valid hexadecimal string because', err]));
10388 };
10389 return A2($elm$core$Result$mapError, formatError, result);
10390 }
10391};
10392var $elm$core$String$toLower = _String_toLower;
10393var $rtfeldman$elm_css$Css$validHex = F5(
10394 function (str, _v0, _v1, _v2, _v3) {
10395 var r1 = _v0.a;
10396 var r2 = _v0.b;
10397 var g1 = _v1.a;
10398 var g2 = _v1.b;
10399 var b1 = _v2.a;
10400 var b2 = _v2.b;
10401 var a1 = _v3.a;
10402 var a2 = _v3.b;
10403 var toResult = A2(
10404 $elm$core$Basics$composeR,
10405 $elm$core$String$fromList,
10406 A2($elm$core$Basics$composeR, $elm$core$String$toLower, $rtfeldman$elm_hex$Hex$fromString));
10407 var results = _Utils_Tuple2(
10408 _Utils_Tuple2(
10409 toResult(
10410 _List_fromArray(
10411 [r1, r2])),
10412 toResult(
10413 _List_fromArray(
10414 [g1, g2]))),
10415 _Utils_Tuple2(
10416 toResult(
10417 _List_fromArray(
10418 [b1, b2])),
10419 toResult(
10420 _List_fromArray(
10421 [a1, a2]))));
10422 if ((((results.a.a.$ === 'Ok') && (results.a.b.$ === 'Ok')) && (results.b.a.$ === 'Ok')) && (results.b.b.$ === 'Ok')) {
10423 var _v5 = results.a;
10424 var red = _v5.a.a;
10425 var green = _v5.b.a;
10426 var _v6 = results.b;
10427 var blue = _v6.a.a;
10428 var alpha = _v6.b.a;
10429 return {
10430 alpha: alpha / 255,
10431 blue: blue,
10432 color: $rtfeldman$elm_css$Css$Structure$Compatible,
10433 green: green,
10434 red: red,
10435 value: $rtfeldman$elm_css$Css$withPrecedingHash(str)
10436 };
10437 } else {
10438 return $rtfeldman$elm_css$Css$erroneousHex(str);
10439 }
10440 });
10441var $rtfeldman$elm_css$Css$hex = function (str) {
10442 var withoutHash = A2($elm$core$String$startsWith, '#', str) ? A2($elm$core$String$dropLeft, 1, str) : str;
10443 var _v0 = $elm$core$String$toList(withoutHash);
10444 _v0$4:
10445 while (true) {
10446 if ((_v0.b && _v0.b.b) && _v0.b.b.b) {
10447 if (!_v0.b.b.b.b) {
10448 var r = _v0.a;
10449 var _v1 = _v0.b;
10450 var g = _v1.a;
10451 var _v2 = _v1.b;
10452 var b = _v2.a;
10453 return A5(
10454 $rtfeldman$elm_css$Css$validHex,
10455 str,
10456 _Utils_Tuple2(r, r),
10457 _Utils_Tuple2(g, g),
10458 _Utils_Tuple2(b, b),
10459 _Utils_Tuple2(
10460 _Utils_chr('f'),
10461 _Utils_chr('f')));
10462 } else {
10463 if (!_v0.b.b.b.b.b) {
10464 var r = _v0.a;
10465 var _v3 = _v0.b;
10466 var g = _v3.a;
10467 var _v4 = _v3.b;
10468 var b = _v4.a;
10469 var _v5 = _v4.b;
10470 var a = _v5.a;
10471 return A5(
10472 $rtfeldman$elm_css$Css$validHex,
10473 str,
10474 _Utils_Tuple2(r, r),
10475 _Utils_Tuple2(g, g),
10476 _Utils_Tuple2(b, b),
10477 _Utils_Tuple2(a, a));
10478 } else {
10479 if (_v0.b.b.b.b.b.b) {
10480 if (!_v0.b.b.b.b.b.b.b) {
10481 var r1 = _v0.a;
10482 var _v6 = _v0.b;
10483 var r2 = _v6.a;
10484 var _v7 = _v6.b;
10485 var g1 = _v7.a;
10486 var _v8 = _v7.b;
10487 var g2 = _v8.a;
10488 var _v9 = _v8.b;
10489 var b1 = _v9.a;
10490 var _v10 = _v9.b;
10491 var b2 = _v10.a;
10492 return A5(
10493 $rtfeldman$elm_css$Css$validHex,
10494 str,
10495 _Utils_Tuple2(r1, r2),
10496 _Utils_Tuple2(g1, g2),
10497 _Utils_Tuple2(b1, b2),
10498 _Utils_Tuple2(
10499 _Utils_chr('f'),
10500 _Utils_chr('f')));
10501 } else {
10502 if (_v0.b.b.b.b.b.b.b.b && (!_v0.b.b.b.b.b.b.b.b.b)) {
10503 var r1 = _v0.a;
10504 var _v11 = _v0.b;
10505 var r2 = _v11.a;
10506 var _v12 = _v11.b;
10507 var g1 = _v12.a;
10508 var _v13 = _v12.b;
10509 var g2 = _v13.a;
10510 var _v14 = _v13.b;
10511 var b1 = _v14.a;
10512 var _v15 = _v14.b;
10513 var b2 = _v15.a;
10514 var _v16 = _v15.b;
10515 var a1 = _v16.a;
10516 var _v17 = _v16.b;
10517 var a2 = _v17.a;
10518 return A5(
10519 $rtfeldman$elm_css$Css$validHex,
10520 str,
10521 _Utils_Tuple2(r1, r2),
10522 _Utils_Tuple2(g1, g2),
10523 _Utils_Tuple2(b1, b2),
10524 _Utils_Tuple2(a1, a2));
10525 } else {
10526 break _v0$4;
10527 }
10528 }
10529 } else {
10530 break _v0$4;
10531 }
10532 }
10533 }
10534 } else {
10535 break _v0$4;
10536 }
10537 }
10538 return $rtfeldman$elm_css$Css$erroneousHex(str);
10539};
10540var $author$project$Styles$theme = A7(
10541 $author$project$Styles$Theme,
10542 $rtfeldman$elm_css$Css$hex('fedbd0'),
10543 $rtfeldman$elm_css$Css$hex('feeae6'),
10544 $rtfeldman$elm_css$Css$hex('ff0000'),
10545 $rtfeldman$elm_css$Css$hex('442c2e'),
10546 $rtfeldman$elm_css$Css$hex('ffffff'),
10547 $rtfeldman$elm_css$Css$hex('442c2e'),
10548 $rtfeldman$elm_css$Css$hex('feeae6'));
10549var $author$project$Styles$furbyButton = A2(
10550 $rtfeldman$elm_css$Html$Styled$styled,
10551 $rtfeldman$elm_css$Html$Styled$button,
10552 _List_fromArray(
10553 [
10554 $rtfeldman$elm_css$Css$margin(
10555 $rtfeldman$elm_css$Css$px(12)),
10556 $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fg),
10557 $rtfeldman$elm_css$Css$height(
10558 $rtfeldman$elm_css$Css$px(40)),
10559 $rtfeldman$elm_css$Css$border(
10560 $rtfeldman$elm_css$Css$px(0)),
10561 $rtfeldman$elm_css$Css$borderRadius(
10562 $rtfeldman$elm_css$Css$px(2)),
10563 A2(
10564 $rtfeldman$elm_css$Css$padding2,
10565 $rtfeldman$elm_css$Css$px(6),
10566 $rtfeldman$elm_css$Css$px(12)),
10567 $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.primary),
10568 $rtfeldman$elm_css$Css$hover(
10569 _List_fromArray(
10570 [
10571 $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.secondary),
10572 $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fg),
10573 $rtfeldman$elm_css$Css$margin(
10574 $rtfeldman$elm_css$Css$px(12))
10575 ]))
10576 ]));
10577var $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'};
10578var $rtfeldman$elm_css$Css$padding = $rtfeldman$elm_css$Css$prop1('padding');
10579var $rtfeldman$elm_css$Css$textDecoration = $rtfeldman$elm_css$Css$prop1('text-decoration');
10580var $rtfeldman$elm_css$Css$underline = {textDecorationLine: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'underline'};
10581var $author$project$Styles$headerLink = A2(
10582 $rtfeldman$elm_css$Html$Styled$styled,
10583 $rtfeldman$elm_css$Html$Styled$a,
10584 _List_fromArray(
10585 [
10586 $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fgLight),
10587 $rtfeldman$elm_css$Css$padding(
10588 $rtfeldman$elm_css$Css$px(12)),
10589 $rtfeldman$elm_css$Css$textDecoration($rtfeldman$elm_css$Css$none),
10590 $rtfeldman$elm_css$Css$hover(
10591 _List_fromArray(
10592 [
10593 $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.secondary),
10594 $rtfeldman$elm_css$Css$textDecoration($rtfeldman$elm_css$Css$underline)
10595 ]))
10596 ]));
10597var $rtfeldman$elm_css$Css$inline = {display: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'inline'};
10598var $rtfeldman$elm_css$Css$left = $rtfeldman$elm_css$Css$prop1('left');
10599var $rtfeldman$elm_css$Css$listStyle = $rtfeldman$elm_css$Css$prop1('list-style');
10600var $elm$virtual_dom$VirtualDom$Normal = function (a) {
10601 return {$: 'Normal', a: a};
10602};
10603var $elm$virtual_dom$VirtualDom$on = _VirtualDom_on;
10604var $rtfeldman$elm_css$VirtualDom$Styled$on = F2(
10605 function (eventName, handler) {
10606 return A3(
10607 $rtfeldman$elm_css$VirtualDom$Styled$Attribute,
10608 A2($elm$virtual_dom$VirtualDom$on, eventName, handler),
10609 _List_Nil,
10610 '');
10611 });
10612var $rtfeldman$elm_css$Html$Styled$Events$on = F2(
10613 function (event, decoder) {
10614 return A2(
10615 $rtfeldman$elm_css$VirtualDom$Styled$on,
10616 event,
10617 $elm$virtual_dom$VirtualDom$Normal(decoder));
10618 });
10619var $rtfeldman$elm_css$Html$Styled$Events$onClick = function (msg) {
10620 return A2(
10621 $rtfeldman$elm_css$Html$Styled$Events$on,
10622 'click',
10623 $elm$json$Json$Decode$succeed(msg));
10624};
10625var $rtfeldman$elm_css$Css$paddingBottom = $rtfeldman$elm_css$Css$prop1('padding-bottom');
10626var $rtfeldman$elm_css$Css$paddingTop = $rtfeldman$elm_css$Css$prop1('padding-top');
10627var $rtfeldman$elm_css$VirtualDom$Styled$text = function (str) {
10628 return $rtfeldman$elm_css$VirtualDom$Styled$Unstyled(
10629 $elm$virtual_dom$VirtualDom$text(str));
10630};
10631var $rtfeldman$elm_css$Html$Styled$text = $rtfeldman$elm_css$VirtualDom$Styled$text;
10632var $rtfeldman$elm_css$Css$Preprocess$ApplyStyles = function (a) {
10633 return {$: 'ApplyStyles', a: a};
10634};
10635var $rtfeldman$elm_css$Css$Internal$property = F2(
10636 function (key, value) {
10637 return $rtfeldman$elm_css$Css$Preprocess$AppendProperty(key + (':' + value));
10638 });
10639var $rtfeldman$elm_css$Css$Internal$getOverloadedProperty = F3(
10640 function (functionName, desiredKey, style) {
10641 getOverloadedProperty:
10642 while (true) {
10643 switch (style.$) {
10644 case 'AppendProperty':
10645 var str = style.a;
10646 var key = A2(
10647 $elm$core$Maybe$withDefault,
10648 '',
10649 $elm$core$List$head(
10650 A2($elm$core$String$split, ':', str)));
10651 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, key);
10652 case 'ExtendSelector':
10653 var selector = style.a;
10654 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-selector'));
10655 case 'NestSnippet':
10656 var combinator = style.a;
10657 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-combinator'));
10658 case 'WithPseudoElement':
10659 var pseudoElement = style.a;
10660 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-pseudo-element setter'));
10661 case 'WithMedia':
10662 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-media-query'));
10663 case 'WithKeyframes':
10664 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-keyframes'));
10665 default:
10666 if (!style.a.b) {
10667 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-empty-Style'));
10668 } else {
10669 if (!style.a.b.b) {
10670 var _v1 = style.a;
10671 var only = _v1.a;
10672 var $temp$functionName = functionName,
10673 $temp$desiredKey = desiredKey,
10674 $temp$style = only;
10675 functionName = $temp$functionName;
10676 desiredKey = $temp$desiredKey;
10677 style = $temp$style;
10678 continue getOverloadedProperty;
10679 } else {
10680 var _v2 = style.a;
10681 var first = _v2.a;
10682 var rest = _v2.b;
10683 var $temp$functionName = functionName,
10684 $temp$desiredKey = desiredKey,
10685 $temp$style = $rtfeldman$elm_css$Css$Preprocess$ApplyStyles(rest);
10686 functionName = $temp$functionName;
10687 desiredKey = $temp$desiredKey;
10688 style = $temp$style;
10689 continue getOverloadedProperty;
10690 }
10691 }
10692 }
10693 }
10694 });
10695var $rtfeldman$elm_css$Css$Internal$IncompatibleUnits = {$: 'IncompatibleUnits'};
10696var $rtfeldman$elm_css$Css$Internal$lengthForOverloadedProperty = A3($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$Internal$IncompatibleUnits, '', 0);
10697var $rtfeldman$elm_css$Css$textAlign = function (fn) {
10698 return A3(
10699 $rtfeldman$elm_css$Css$Internal$getOverloadedProperty,
10700 'textAlign',
10701 'text-align',
10702 fn($rtfeldman$elm_css$Css$Internal$lengthForOverloadedProperty));
10703};
10704var $rtfeldman$elm_css$Html$Styled$ul = $rtfeldman$elm_css$Html$Styled$node('ul');
10705var $author$project$Main$viewHeader = function (model) {
10706 var links = _List_fromArray(
10707 [
10708 _Utils_Tuple2('Catalog', '/catalog'),
10709 _Utils_Tuple2('Cart', '/cart')
10710 ]);
10711 return A2(
10712 $rtfeldman$elm_css$Html$Styled$div,
10713 _List_fromArray(
10714 [
10715 $rtfeldman$elm_css$Html$Styled$Attributes$css(
10716 _List_fromArray(
10717 [
10718 $rtfeldman$elm_css$Css$padding(
10719 $rtfeldman$elm_css$Css$px(40)),
10720 $rtfeldman$elm_css$Css$paddingTop(
10721 $rtfeldman$elm_css$Css$px(3)),
10722 $rtfeldman$elm_css$Css$paddingBottom(
10723 $rtfeldman$elm_css$Css$px(3)),
10724 $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$left),
10725 $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.secondary)
10726 ]))
10727 ]),
10728 _List_fromArray(
10729 [
10730 A2(
10731 $rtfeldman$elm_css$Html$Styled$ul,
10732 _List_fromArray(
10733 [
10734 $rtfeldman$elm_css$Html$Styled$Attributes$css(
10735 _List_fromArray(
10736 [
10737 $rtfeldman$elm_css$Css$listStyle($rtfeldman$elm_css$Css$none),
10738 $rtfeldman$elm_css$Css$padding(
10739 $rtfeldman$elm_css$Css$px(0)),
10740 $rtfeldman$elm_css$Css$margin(
10741 $rtfeldman$elm_css$Css$px(24))
10742 ]))
10743 ]),
10744 _Utils_ap(
10745 A2(
10746 $elm$core$List$map,
10747 function (_v0) {
10748 var name = _v0.a;
10749 var loc = _v0.b;
10750 return A2(
10751 $rtfeldman$elm_css$Html$Styled$li,
10752 _List_fromArray(
10753 [
10754 $rtfeldman$elm_css$Html$Styled$Attributes$css(
10755 _List_fromArray(
10756 [
10757 $rtfeldman$elm_css$Css$display($rtfeldman$elm_css$Css$inline)
10758 ]))
10759 ]),
10760 _List_fromArray(
10761 [
10762 A2(
10763 $author$project$Styles$headerLink,
10764 _List_fromArray(
10765 [
10766 $rtfeldman$elm_css$Html$Styled$Attributes$href(loc)
10767 ]),
10768 _List_fromArray(
10769 [
10770 $rtfeldman$elm_css$Html$Styled$text(name)
10771 ]))
10772 ]));
10773 },
10774 links),
10775 _List_fromArray(
10776 [
10777 (!_Utils_eq(model.loginModel.loginStatus, $author$project$Login$LoggedIn)) ? A2(
10778 $rtfeldman$elm_css$Html$Styled$li,
10779 _List_fromArray(
10780 [
10781 $rtfeldman$elm_css$Html$Styled$Attributes$css(
10782 _List_fromArray(
10783 [
10784 $rtfeldman$elm_css$Css$display($rtfeldman$elm_css$Css$inline)
10785 ]))
10786 ]),
10787 _List_fromArray(
10788 [
10789 A2(
10790 $author$project$Styles$headerLink,
10791 _List_fromArray(
10792 [
10793 $rtfeldman$elm_css$Html$Styled$Attributes$href('/login')
10794 ]),
10795 _List_fromArray(
10796 [
10797 $rtfeldman$elm_css$Html$Styled$text('Login')
10798 ]))
10799 ])) : A2(
10800 $author$project$Styles$furbyButton,
10801 _List_fromArray(
10802 [
10803 $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Main$LogoutPressed)
10804 ]),
10805 _List_fromArray(
10806 [
10807 $rtfeldman$elm_css$Html$Styled$text('Logout')
10808 ]))
10809 ])))
10810 ]));
10811};
10812var $author$project$Main$pageWrap = F2(
10813 function (model, page) {
10814 return $elm$core$List$singleton(
10815 $rtfeldman$elm_css$Html$Styled$toUnstyled(
10816 A2(
10817 $rtfeldman$elm_css$Html$Styled$div,
10818 _List_Nil,
10819 _List_fromArray(
10820 [
10821 $author$project$Main$viewHeader(model),
10822 page
10823 ]))));
10824 });
10825var $author$project$Cart$calculateTotal = function (model) {
10826 var items = model.products;
10827 return A3(
10828 $elm$core$List$foldl,
10829 $elm$core$Basics$add,
10830 0,
10831 A2(
10832 $elm$core$List$map,
10833 function (i) {
10834 return i.quantity * i.productItem.price;
10835 },
10836 items));
10837};
10838var $author$project$Cart$AddToCartPressed = function (a) {
10839 return {$: 'AddToCartPressed', a: a};
10840};
10841var $author$project$Cart$RemoveFromCart = function (a) {
10842 return {$: 'RemoveFromCart', a: a};
10843};
10844var $author$project$Cart$viewCartItemListing = function (listing) {
10845 return A2(
10846 $rtfeldman$elm_css$Html$Styled$div,
10847 _List_Nil,
10848 _List_fromArray(
10849 [
10850 $rtfeldman$elm_css$Html$Styled$text(listing.productItem.name),
10851 A2(
10852 $rtfeldman$elm_css$Html$Styled$div,
10853 _List_Nil,
10854 _List_fromArray(
10855 [
10856 $rtfeldman$elm_css$Html$Styled$text(
10857 A2($elm$core$Maybe$withDefault, '', listing.productItem.kind))
10858 ])),
10859 A2(
10860 $rtfeldman$elm_css$Html$Styled$div,
10861 _List_Nil,
10862 _List_fromArray(
10863 [
10864 $rtfeldman$elm_css$Html$Styled$text(
10865 A2($elm$core$Maybe$withDefault, '', listing.productItem.description))
10866 ])),
10867 A2(
10868 $rtfeldman$elm_css$Html$Styled$div,
10869 _List_Nil,
10870 _List_fromArray(
10871 [
10872 $rtfeldman$elm_css$Html$Styled$text(
10873 $elm$core$String$fromFloat(listing.productItem.price))
10874 ])),
10875 A2(
10876 $rtfeldman$elm_css$Html$Styled$div,
10877 _List_Nil,
10878 _List_fromArray(
10879 [
10880 $rtfeldman$elm_css$Html$Styled$text(
10881 $elm$core$String$fromInt(listing.quantity))
10882 ])),
10883 A2(
10884 $rtfeldman$elm_css$Html$Styled$div,
10885 _List_Nil,
10886 _List_fromArray(
10887 [
10888 A2(
10889 $rtfeldman$elm_css$Html$Styled$button,
10890 _List_fromArray(
10891 [
10892 $rtfeldman$elm_css$Html$Styled$Events$onClick(
10893 $author$project$Cart$AddToCartPressed(listing.productItem.id))
10894 ]),
10895 _List_fromArray(
10896 [
10897 $rtfeldman$elm_css$Html$Styled$text('Add')
10898 ]))
10899 ])),
10900 A2(
10901 $rtfeldman$elm_css$Html$Styled$div,
10902 _List_Nil,
10903 _List_fromArray(
10904 [
10905 A2(
10906 $rtfeldman$elm_css$Html$Styled$button,
10907 _List_fromArray(
10908 [
10909 $rtfeldman$elm_css$Html$Styled$Events$onClick(
10910 $author$project$Cart$RemoveFromCart(listing.productItem.id))
10911 ]),
10912 _List_fromArray(
10913 [
10914 $rtfeldman$elm_css$Html$Styled$text('Remove')
10915 ]))
10916 ])),
10917 A2(
10918 $rtfeldman$elm_css$Html$Styled$div,
10919 _List_Nil,
10920 _List_fromArray(
10921 [
10922 A2(
10923 $rtfeldman$elm_css$Html$Styled$a,
10924 _List_fromArray(
10925 [
10926 $rtfeldman$elm_css$Html$Styled$Attributes$href(
10927 '/product/' + $elm$core$String$fromInt(listing.productItem.id))
10928 ]),
10929 _List_fromArray(
10930 [
10931 $rtfeldman$elm_css$Html$Styled$text('View Product')
10932 ]))
10933 ]))
10934 ]));
10935};
10936var $author$project$Cart$viewStatus = function (s) {
10937 switch (s.$) {
10938 case 'Loading':
10939 return 'Loading';
10940 case 'Loaded':
10941 return 'Ready!';
10942 default:
10943 return 'Not loaded ...';
10944 }
10945};
10946var $author$project$Cart$view = function (model) {
10947 var _v0 = model.pageStatus;
10948 if (_v0.$ === 'Loading') {
10949 return A2(
10950 $rtfeldman$elm_css$Html$Styled$div,
10951 _List_Nil,
10952 _List_fromArray(
10953 [
10954 $rtfeldman$elm_css$Html$Styled$text(
10955 $author$project$Cart$viewStatus($author$project$Cart$Loading))
10956 ]));
10957 } else {
10958 return A2(
10959 $rtfeldman$elm_css$Html$Styled$div,
10960 _List_Nil,
10961 _List_fromArray(
10962 [
10963 function () {
10964 var cart = A2($elm$core$List$map, $author$project$Cart$viewCartItemListing, model.products);
10965 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);
10966 }(),
10967 $rtfeldman$elm_css$Html$Styled$text(
10968 $elm$core$String$fromFloat(
10969 $author$project$Cart$calculateTotal(model))),
10970 A2(
10971 $rtfeldman$elm_css$Html$Styled$a,
10972 _List_fromArray(
10973 [
10974 $rtfeldman$elm_css$Html$Styled$Attributes$href('/checkout')
10975 ]),
10976 _List_fromArray(
10977 [
10978 $rtfeldman$elm_css$Html$Styled$text('Checkout')
10979 ]))
10980 ]));
10981 }
10982};
10983var $rtfeldman$elm_css$Css$fontSize = $rtfeldman$elm_css$Css$prop1('font-size');
10984var $author$project$Styles$bigHeading = $rtfeldman$elm_css$Css$fontSize(
10985 $rtfeldman$elm_css$Css$px(24));
10986var $elm$core$Basics$ge = _Utils_ge;
10987var $author$project$Utils$between = F2(
10988 function (_v0, v) {
10989 var l = _v0.a;
10990 var u = _v0.b;
10991 return (_Utils_cmp(v, l) > -1) && (_Utils_cmp(v, u) < 1);
10992 });
10993var $author$project$Catalog$filterProducts = function (model) {
10994 return A2(
10995 $elm$core$List$filter,
10996 function (p) {
10997 return A2(
10998 $author$project$Utils$between,
10999 model.filters.rating,
11000 A2($elm$core$Maybe$withDefault, 5.0, p.averageRating));
11001 },
11002 A2(
11003 $elm$core$List$filter,
11004 A2(
11005 $elm$core$Basics$composeL,
11006 $author$project$Utils$between(model.filters.price),
11007 function ($) {
11008 return $.price;
11009 }),
11010 model.products));
11011};
11012var $rtfeldman$elm_css$Css$float = function (fn) {
11013 return A3(
11014 $rtfeldman$elm_css$Css$Internal$getOverloadedProperty,
11015 'float',
11016 'float',
11017 fn($rtfeldman$elm_css$Css$Internal$lengthForOverloadedProperty));
11018};
11019var $rtfeldman$elm_css$Css$PercentageUnits = {$: 'PercentageUnits'};
11020var $rtfeldman$elm_css$Css$pct = A2($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$PercentageUnits, '%');
11021var $author$project$Catalog$ChangePriceLower = function (a) {
11022 return {$: 'ChangePriceLower', a: a};
11023};
11024var $author$project$Catalog$ChangePriceUpper = function (a) {
11025 return {$: 'ChangePriceUpper', a: a};
11026};
11027var $author$project$Catalog$ChangeRatingLower = function (a) {
11028 return {$: 'ChangeRatingLower', a: a};
11029};
11030var $author$project$Catalog$ChangeRatingUpper = function (a) {
11031 return {$: 'ChangeRatingUpper', a: a};
11032};
11033var $rtfeldman$elm_css$Css$prop3 = F4(
11034 function (key, argA, argB, argC) {
11035 return A2(
11036 $rtfeldman$elm_css$Css$property,
11037 key,
11038 A2(
11039 $elm$core$String$join,
11040 ' ',
11041 _List_fromArray(
11042 [argA.value, argB.value, argC.value])));
11043 });
11044var $rtfeldman$elm_css$Css$borderBottom3 = $rtfeldman$elm_css$Css$prop3('border-bottom');
11045var $rtfeldman$elm_css$Css$right = $rtfeldman$elm_css$Css$prop1('right');
11046var $rtfeldman$elm_css$Html$Styled$select = $rtfeldman$elm_css$Html$Styled$node('select');
11047var $rtfeldman$elm_css$Css$solid = {borderStyle: $rtfeldman$elm_css$Css$Structure$Compatible, textDecorationStyle: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'solid'};
11048var $author$project$Styles$furbySelect = A2(
11049 $rtfeldman$elm_css$Html$Styled$styled,
11050 $rtfeldman$elm_css$Html$Styled$select,
11051 _List_fromArray(
11052 [
11053 $rtfeldman$elm_css$Css$margin(
11054 $rtfeldman$elm_css$Css$px(6)),
11055 $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fg),
11056 $rtfeldman$elm_css$Css$border(
11057 $rtfeldman$elm_css$Css$px(0)),
11058 A3(
11059 $rtfeldman$elm_css$Css$borderBottom3,
11060 $rtfeldman$elm_css$Css$px(2),
11061 $rtfeldman$elm_css$Css$solid,
11062 $author$project$Styles$theme.bgLight),
11063 $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$right),
11064 A2(
11065 $rtfeldman$elm_css$Css$padding2,
11066 $rtfeldman$elm_css$Css$px(3),
11067 $rtfeldman$elm_css$Css$px(3)),
11068 $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.bg),
11069 $rtfeldman$elm_css$Css$hover(
11070 _List_fromArray(
11071 [
11072 A3(
11073 $rtfeldman$elm_css$Css$borderBottom3,
11074 $rtfeldman$elm_css$Css$px(2),
11075 $rtfeldman$elm_css$Css$solid,
11076 $author$project$Styles$theme.fg)
11077 ]))
11078 ]));
11079var $rtfeldman$elm_css$Html$Styled$Events$alwaysStop = function (x) {
11080 return _Utils_Tuple2(x, true);
11081};
11082var $elm$virtual_dom$VirtualDom$MayStopPropagation = function (a) {
11083 return {$: 'MayStopPropagation', a: a};
11084};
11085var $rtfeldman$elm_css$Html$Styled$Events$stopPropagationOn = F2(
11086 function (event, decoder) {
11087 return A2(
11088 $rtfeldman$elm_css$VirtualDom$Styled$on,
11089 event,
11090 $elm$virtual_dom$VirtualDom$MayStopPropagation(decoder));
11091 });
11092var $elm$json$Json$Decode$at = F2(
11093 function (fields, decoder) {
11094 return A3($elm$core$List$foldr, $elm$json$Json$Decode$field, decoder, fields);
11095 });
11096var $rtfeldman$elm_css$Html$Styled$Events$targetValue = A2(
11097 $elm$json$Json$Decode$at,
11098 _List_fromArray(
11099 ['target', 'value']),
11100 $elm$json$Json$Decode$string);
11101var $rtfeldman$elm_css$Html$Styled$Events$onInput = function (tagger) {
11102 return A2(
11103 $rtfeldman$elm_css$Html$Styled$Events$stopPropagationOn,
11104 'input',
11105 A2(
11106 $elm$json$Json$Decode$map,
11107 $rtfeldman$elm_css$Html$Styled$Events$alwaysStop,
11108 A2($elm$json$Json$Decode$map, tagger, $rtfeldman$elm_css$Html$Styled$Events$targetValue)));
11109};
11110var $rtfeldman$elm_css$Html$Styled$option = $rtfeldman$elm_css$Html$Styled$node('option');
11111var $author$project$Utils$range = F3(
11112 function (start, stop, step) {
11113 return (_Utils_cmp(start, stop) > -1) ? _List_Nil : A2(
11114 $elm$core$List$cons,
11115 start,
11116 A3($author$project$Utils$range, start + step, stop, step));
11117 });
11118var $elm$json$Json$Encode$bool = _Json_wrap;
11119var $rtfeldman$elm_css$Html$Styled$Attributes$boolProperty = F2(
11120 function (key, bool) {
11121 return A2(
11122 $rtfeldman$elm_css$VirtualDom$Styled$property,
11123 key,
11124 $elm$json$Json$Encode$bool(bool));
11125 });
11126var $rtfeldman$elm_css$Html$Styled$Attributes$selected = $rtfeldman$elm_css$Html$Styled$Attributes$boolProperty('selected');
11127var $elm$virtual_dom$VirtualDom$style = _VirtualDom_style;
11128var $rtfeldman$elm_css$VirtualDom$Styled$style = F2(
11129 function (key, val) {
11130 return A3(
11131 $rtfeldman$elm_css$VirtualDom$Styled$Attribute,
11132 A2($elm$virtual_dom$VirtualDom$style, key, val),
11133 _List_Nil,
11134 '');
11135 });
11136var $rtfeldman$elm_css$Html$Styled$Attributes$style = $rtfeldman$elm_css$VirtualDom$Styled$style;
11137var $elm$core$String$toFloat = _String_toFloat;
11138var $author$project$Catalog$viewFilters = function (model) {
11139 var viewRange = F2(
11140 function (_default, scale) {
11141 return A2(
11142 $elm$core$List$map,
11143 function (i) {
11144 return A2(
11145 $rtfeldman$elm_css$Html$Styled$option,
11146 _List_fromArray(
11147 [
11148 $rtfeldman$elm_css$Html$Styled$Attributes$selected(
11149 _Utils_eq(i, _default))
11150 ]),
11151 _List_fromArray(
11152 [
11153 $rtfeldman$elm_css$Html$Styled$text(
11154 $elm$core$String$fromInt(i))
11155 ]));
11156 },
11157 scale);
11158 });
11159 var ratingRange = A3($author$project$Utils$range, 1, 6, 1);
11160 var priceRange = A3($author$project$Utils$range, 0, 55000, 5000);
11161 var inp = A2(
11162 $elm$core$Basics$composeL,
11163 $elm$core$Maybe$withDefault(0),
11164 $elm$core$String$toFloat);
11165 return A2(
11166 $rtfeldman$elm_css$Html$Styled$div,
11167 _List_Nil,
11168 _List_fromArray(
11169 [
11170 A2(
11171 $rtfeldman$elm_css$Html$Styled$div,
11172 _List_fromArray(
11173 [
11174 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11175 _List_fromArray(
11176 [
11177 $author$project$Styles$bigHeading,
11178 $rtfeldman$elm_css$Css$paddingBottom(
11179 $rtfeldman$elm_css$Css$px(12))
11180 ]))
11181 ]),
11182 _List_fromArray(
11183 [
11184 $rtfeldman$elm_css$Html$Styled$text('Filters')
11185 ])),
11186 A2(
11187 $rtfeldman$elm_css$Html$Styled$div,
11188 _List_Nil,
11189 _List_fromArray(
11190 [
11191 A2(
11192 $rtfeldman$elm_css$Html$Styled$div,
11193 _List_Nil,
11194 _List_fromArray(
11195 [
11196 $rtfeldman$elm_css$Html$Styled$text('Price')
11197 ])),
11198 A2(
11199 $author$project$Styles$furbySelect,
11200 _List_fromArray(
11201 [
11202 $rtfeldman$elm_css$Html$Styled$Events$onInput(
11203 A2($elm$core$Basics$composeL, $author$project$Catalog$ChangePriceLower, inp)),
11204 A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'appearance', 'none')
11205 ]),
11206 A2(viewRange, 0, priceRange)),
11207 $rtfeldman$elm_css$Html$Styled$text('to'),
11208 A2(
11209 $author$project$Styles$furbySelect,
11210 _List_fromArray(
11211 [
11212 $rtfeldman$elm_css$Html$Styled$Events$onInput(
11213 A2($elm$core$Basics$composeL, $author$project$Catalog$ChangePriceUpper, inp)),
11214 A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'appearance', 'none')
11215 ]),
11216 A2(viewRange, 50000, priceRange))
11217 ])),
11218 A2(
11219 $rtfeldman$elm_css$Html$Styled$div,
11220 _List_Nil,
11221 _List_fromArray(
11222 [
11223 A2(
11224 $rtfeldman$elm_css$Html$Styled$div,
11225 _List_Nil,
11226 _List_fromArray(
11227 [
11228 $rtfeldman$elm_css$Html$Styled$text('Rating')
11229 ])),
11230 A2(
11231 $author$project$Styles$furbySelect,
11232 _List_fromArray(
11233 [
11234 $rtfeldman$elm_css$Html$Styled$Events$onInput(
11235 A2($elm$core$Basics$composeL, $author$project$Catalog$ChangeRatingLower, inp)),
11236 A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'appearance', 'none')
11237 ]),
11238 A2(viewRange, 1, ratingRange)),
11239 $rtfeldman$elm_css$Html$Styled$text('to'),
11240 A2(
11241 $author$project$Styles$furbySelect,
11242 _List_fromArray(
11243 [
11244 $rtfeldman$elm_css$Html$Styled$Events$onInput(
11245 A2($elm$core$Basics$composeL, $author$project$Catalog$ChangeRatingUpper, inp)),
11246 A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'appearance', 'none')
11247 ]),
11248 A2(viewRange, 5, ratingRange))
11249 ]))
11250 ]));
11251};
11252var $elm$virtual_dom$VirtualDom$attribute = F2(
11253 function (key, value) {
11254 return A2(
11255 _VirtualDom_attribute,
11256 _VirtualDom_noOnOrFormAction(key),
11257 _VirtualDom_noJavaScriptOrHtmlUri(value));
11258 });
11259var $rtfeldman$elm_css$VirtualDom$Styled$attribute = F2(
11260 function (key, value) {
11261 return A3(
11262 $rtfeldman$elm_css$VirtualDom$Styled$Attribute,
11263 A2($elm$virtual_dom$VirtualDom$attribute, key, value),
11264 _List_Nil,
11265 '');
11266 });
11267var $rtfeldman$elm_css$Html$Styled$Attributes$attribute = $rtfeldman$elm_css$VirtualDom$Styled$attribute;
11268var $author$project$Utils$arIosSrc = function (src) {
11269 return A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'ios-src', src);
11270};
11271var $author$project$Utils$arModes = function (mode) {
11272 return A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'ar-modes', mode);
11273};
11274var $author$project$Utils$arSrc = function (src) {
11275 return A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'src', src);
11276};
11277var $author$project$Utils$autoRotate = A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'auto-rotate', '');
11278var $rtfeldman$elm_css$Css$bold = {fontWeight: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'bold'};
11279var $rtfeldman$elm_css$Css$border3 = $rtfeldman$elm_css$Css$prop3('border');
11280var $author$project$Utils$cameraControls = A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'camera-controls', '');
11281var $author$project$Styles$cardPrimaryText = $rtfeldman$elm_css$Css$fontSize(
11282 $rtfeldman$elm_css$Css$px(18));
11283var $rtfeldman$elm_css$Css$batch = $rtfeldman$elm_css$Css$Preprocess$ApplyStyles;
11284var $author$project$Styles$cardSecondaryText = $rtfeldman$elm_css$Css$batch(
11285 _List_fromArray(
11286 [
11287 $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fgLight),
11288 $rtfeldman$elm_css$Css$fontSize(
11289 $rtfeldman$elm_css$Css$px(12))
11290 ]));
11291var $author$project$Styles$cardSupportingText = $rtfeldman$elm_css$Css$fontSize(
11292 $rtfeldman$elm_css$Css$px(16));
11293var $rtfeldman$elm_css$Css$fontVariant = $rtfeldman$elm_css$Css$prop1('font-variant');
11294var $rtfeldman$elm_css$Css$fontWeight = function (_v0) {
11295 var value = _v0.value;
11296 return A2($rtfeldman$elm_css$Css$property, 'font-weight', value);
11297};
11298var $author$project$Utils$loading = function (mode) {
11299 return A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'loading', mode);
11300};
11301var $rtfeldman$elm_css$Css$marginBottom = $rtfeldman$elm_css$Css$prop1('margin-bottom');
11302var $rtfeldman$elm_css$Css$maxWidth = $rtfeldman$elm_css$Css$prop1('max-width');
11303var $author$project$Utils$modelViewer = F2(
11304 function (attributes, children) {
11305 return A3($rtfeldman$elm_css$Html$Styled$node, 'model-viewer', attributes, children);
11306 });
11307var $rtfeldman$elm_css$Css$Structure$PseudoElement = function (a) {
11308 return {$: 'PseudoElement', a: a};
11309};
11310var $rtfeldman$elm_css$Css$Preprocess$WithPseudoElement = F2(
11311 function (a, b) {
11312 return {$: 'WithPseudoElement', a: a, b: b};
11313 });
11314var $rtfeldman$elm_css$Css$pseudoElement = function (element) {
11315 return $rtfeldman$elm_css$Css$Preprocess$WithPseudoElement(
11316 $rtfeldman$elm_css$Css$Structure$PseudoElement(element));
11317};
11318var $rtfeldman$elm_css$Css$before = $rtfeldman$elm_css$Css$pseudoElement('before');
11319var $author$project$Styles$money = $rtfeldman$elm_css$Css$before(
11320 _List_fromArray(
11321 [
11322 A2($rtfeldman$elm_css$Css$property, 'content', '\"₹ \"')
11323 ]));
11324var $rtfeldman$elm_css$Css$smallCaps = {fontVariant: $rtfeldman$elm_css$Css$Structure$Compatible, fontVariantCaps: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'small-caps'};
11325var $rtfeldman$elm_css$Css$width = $rtfeldman$elm_css$Css$prop1('width');
11326var $author$project$Catalog$viewProduct = function (p) {
11327 return A2(
11328 $rtfeldman$elm_css$Html$Styled$div,
11329 _List_fromArray(
11330 [
11331 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11332 _List_fromArray(
11333 [
11334 $rtfeldman$elm_css$Css$marginBottom(
11335 $rtfeldman$elm_css$Css$px(20)),
11336 A3(
11337 $rtfeldman$elm_css$Css$border3,
11338 $rtfeldman$elm_css$Css$px(1),
11339 $rtfeldman$elm_css$Css$solid,
11340 $author$project$Styles$theme.primary),
11341 $rtfeldman$elm_css$Css$borderRadius(
11342 $rtfeldman$elm_css$Css$px(4)),
11343 $rtfeldman$elm_css$Css$padding(
11344 $rtfeldman$elm_css$Css$px(20)),
11345 $rtfeldman$elm_css$Css$width(
11346 $rtfeldman$elm_css$Css$pct(100)),
11347 $rtfeldman$elm_css$Css$maxWidth(
11348 $rtfeldman$elm_css$Css$px(650))
11349 ]))
11350 ]),
11351 _List_fromArray(
11352 [
11353 A2(
11354 $rtfeldman$elm_css$Html$Styled$div,
11355 _List_fromArray(
11356 [
11357 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11358 _List_fromArray(
11359 [
11360 $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left),
11361 $rtfeldman$elm_css$Css$width(
11362 $rtfeldman$elm_css$Css$pct(50))
11363 ]))
11364 ]),
11365 _List_fromArray(
11366 [
11367 A2(
11368 $author$project$Utils$modelViewer,
11369 _List_fromArray(
11370 [
11371 $author$project$Utils$cameraControls,
11372 $author$project$Utils$autoRotate,
11373 $author$project$Utils$arSrc(p.src),
11374 $author$project$Utils$arIosSrc(p.iosSrc),
11375 $author$project$Utils$loading('eager'),
11376 $author$project$Utils$arModes('webxr')
11377 ]),
11378 _List_Nil)
11379 ])),
11380 A2(
11381 $rtfeldman$elm_css$Html$Styled$div,
11382 _List_fromArray(
11383 [
11384 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11385 _List_fromArray(
11386 [
11387 $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left),
11388 $rtfeldman$elm_css$Css$width(
11389 $rtfeldman$elm_css$Css$pct(50))
11390 ]))
11391 ]),
11392 _List_fromArray(
11393 [
11394 A2(
11395 $rtfeldman$elm_css$Html$Styled$div,
11396 _List_fromArray(
11397 [
11398 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11399 _List_fromArray(
11400 [
11401 $author$project$Styles$cardSecondaryText,
11402 $rtfeldman$elm_css$Css$paddingBottom(
11403 $rtfeldman$elm_css$Css$px(3)),
11404 $rtfeldman$elm_css$Css$fontVariant($rtfeldman$elm_css$Css$smallCaps)
11405 ]))
11406 ]),
11407 _List_fromArray(
11408 [
11409 $rtfeldman$elm_css$Html$Styled$text(
11410 A2($elm$core$Maybe$withDefault, '', p.kind))
11411 ])),
11412 A2(
11413 $rtfeldman$elm_css$Html$Styled$div,
11414 _List_fromArray(
11415 [
11416 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11417 _List_fromArray(
11418 [
11419 $author$project$Styles$cardPrimaryText,
11420 $rtfeldman$elm_css$Css$paddingBottom(
11421 $rtfeldman$elm_css$Css$px(3))
11422 ]))
11423 ]),
11424 _List_fromArray(
11425 [
11426 A2(
11427 $rtfeldman$elm_css$Html$Styled$a,
11428 _List_fromArray(
11429 [
11430 $rtfeldman$elm_css$Html$Styled$Attributes$href(
11431 '/product/' + $elm$core$String$fromInt(p.id))
11432 ]),
11433 _List_fromArray(
11434 [
11435 $rtfeldman$elm_css$Html$Styled$text(p.name)
11436 ]))
11437 ])),
11438 A2(
11439 $rtfeldman$elm_css$Html$Styled$div,
11440 _List_fromArray(
11441 [
11442 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11443 _List_fromArray(
11444 [
11445 $author$project$Styles$cardSecondaryText,
11446 $rtfeldman$elm_css$Css$paddingBottom(
11447 $rtfeldman$elm_css$Css$px(12))
11448 ]))
11449 ]),
11450 _List_fromArray(
11451 [
11452 function () {
11453 var _v0 = p.averageRating;
11454 if (_v0.$ === 'Just') {
11455 var v = _v0.a;
11456 return $rtfeldman$elm_css$Html$Styled$text(
11457 'Avg Rating: ' + $elm$core$String$fromFloat(v));
11458 } else {
11459 return $rtfeldman$elm_css$Html$Styled$text('No Ratings');
11460 }
11461 }()
11462 ])),
11463 A2(
11464 $rtfeldman$elm_css$Html$Styled$div,
11465 _List_fromArray(
11466 [
11467 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11468 _List_fromArray(
11469 [
11470 $author$project$Styles$cardSupportingText,
11471 $rtfeldman$elm_css$Css$paddingBottom(
11472 $rtfeldman$elm_css$Css$px(6))
11473 ]))
11474 ]),
11475 _List_fromArray(
11476 [
11477 $rtfeldman$elm_css$Html$Styled$text(
11478 A2($elm$core$Maybe$withDefault, 'No description provided', p.description))
11479 ])),
11480 A2(
11481 $rtfeldman$elm_css$Html$Styled$div,
11482 _List_fromArray(
11483 [
11484 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11485 _List_fromArray(
11486 [
11487 $rtfeldman$elm_css$Css$fontWeight($rtfeldman$elm_css$Css$bold),
11488 $rtfeldman$elm_css$Css$fontSize(
11489 $rtfeldman$elm_css$Css$px(14)),
11490 $author$project$Styles$money
11491 ]))
11492 ]),
11493 _List_fromArray(
11494 [
11495 $rtfeldman$elm_css$Html$Styled$text(
11496 $elm$core$String$fromFloat(p.price))
11497 ]))
11498 ])),
11499 A2(
11500 $rtfeldman$elm_css$Html$Styled$div,
11501 _List_fromArray(
11502 [
11503 A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'clear', 'both')
11504 ]),
11505 _List_Nil)
11506 ]));
11507};
11508var $author$project$Catalog$viewStatus = function (s) {
11509 switch (s.$) {
11510 case 'Loading':
11511 return 'Loading';
11512 case 'Loaded':
11513 return 'Ready!';
11514 default:
11515 return 'Not loaded ...';
11516 }
11517};
11518var $author$project$Catalog$view = function (model) {
11519 var _v0 = model.pageStatus;
11520 if (_v0.$ === 'Loading') {
11521 return A2(
11522 $rtfeldman$elm_css$Html$Styled$div,
11523 _List_Nil,
11524 _List_fromArray(
11525 [
11526 $rtfeldman$elm_css$Html$Styled$text(
11527 $author$project$Catalog$viewStatus($author$project$Catalog$Loading))
11528 ]));
11529 } else {
11530 return A2(
11531 $rtfeldman$elm_css$Html$Styled$div,
11532 _List_fromArray(
11533 [
11534 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11535 _List_fromArray(
11536 [
11537 $rtfeldman$elm_css$Css$padding(
11538 $rtfeldman$elm_css$Css$px(40))
11539 ]))
11540 ]),
11541 _List_fromArray(
11542 [
11543 A2(
11544 $rtfeldman$elm_css$Html$Styled$div,
11545 _List_fromArray(
11546 [
11547 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11548 _List_fromArray(
11549 [
11550 $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left),
11551 $rtfeldman$elm_css$Css$width(
11552 $rtfeldman$elm_css$Css$pct(20))
11553 ]))
11554 ]),
11555 _List_fromArray(
11556 [
11557 $author$project$Catalog$viewFilters(model)
11558 ])),
11559 A2(
11560 $rtfeldman$elm_css$Html$Styled$div,
11561 _List_fromArray(
11562 [
11563 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11564 _List_fromArray(
11565 [
11566 $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left),
11567 $rtfeldman$elm_css$Css$width(
11568 $rtfeldman$elm_css$Css$pct(80))
11569 ]))
11570 ]),
11571 _List_fromArray(
11572 [
11573 A2(
11574 $rtfeldman$elm_css$Html$Styled$div,
11575 _List_fromArray(
11576 [
11577 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11578 _List_fromArray(
11579 [$author$project$Styles$bigHeading]))
11580 ]),
11581 _List_fromArray(
11582 [
11583 $rtfeldman$elm_css$Html$Styled$text('Products')
11584 ])),
11585 A2(
11586 $rtfeldman$elm_css$Html$Styled$ul,
11587 _List_fromArray(
11588 [
11589 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11590 _List_fromArray(
11591 [
11592 $rtfeldman$elm_css$Css$padding(
11593 $rtfeldman$elm_css$Css$px(0)),
11594 $rtfeldman$elm_css$Css$listStyle($rtfeldman$elm_css$Css$none)
11595 ]))
11596 ]),
11597 A2(
11598 $elm$core$List$map,
11599 $author$project$Catalog$viewProduct,
11600 $author$project$Catalog$filterProducts(model)))
11601 ]))
11602 ]));
11603 }
11604};
11605var $author$project$Checkout$CheckoutPressed = {$: 'CheckoutPressed'};
11606var $author$project$Checkout$PaymentModeSelected = function (a) {
11607 return {$: 'PaymentModeSelected', a: a};
11608};
11609var $author$project$Checkout$viewStatus = function (s) {
11610 switch (s.$) {
11611 case 'Loading':
11612 return 'Loading';
11613 case 'Loaded':
11614 return 'Ready!';
11615 default:
11616 return 'Not loaded ...';
11617 }
11618};
11619var $author$project$Checkout$view = function (model) {
11620 var _v0 = model.pageStatus;
11621 if (_v0.$ === 'Loading') {
11622 return A2(
11623 $rtfeldman$elm_css$Html$Styled$div,
11624 _List_Nil,
11625 _List_fromArray(
11626 [
11627 $rtfeldman$elm_css$Html$Styled$text(
11628 $author$project$Checkout$viewStatus($author$project$Checkout$Loading))
11629 ]));
11630 } else {
11631 return A2(
11632 $rtfeldman$elm_css$Html$Styled$div,
11633 _List_Nil,
11634 _List_fromArray(
11635 [
11636 A2(
11637 $rtfeldman$elm_css$Html$Styled$div,
11638 _List_Nil,
11639 _List_fromArray(
11640 [
11641 $rtfeldman$elm_css$Html$Styled$text(
11642 $elm$core$String$fromFloat(model.cartTotal))
11643 ])),
11644 A2(
11645 $rtfeldman$elm_css$Html$Styled$select,
11646 _List_Nil,
11647 _List_fromArray(
11648 [
11649 A2(
11650 $rtfeldman$elm_css$Html$Styled$option,
11651 _List_fromArray(
11652 [
11653 $rtfeldman$elm_css$Html$Styled$Events$onInput($author$project$Checkout$PaymentModeSelected)
11654 ]),
11655 _List_fromArray(
11656 [
11657 $rtfeldman$elm_css$Html$Styled$text('Cash')
11658 ])),
11659 A2(
11660 $rtfeldman$elm_css$Html$Styled$option,
11661 _List_fromArray(
11662 [
11663 $rtfeldman$elm_css$Html$Styled$Events$onInput($author$project$Checkout$PaymentModeSelected)
11664 ]),
11665 _List_fromArray(
11666 [
11667 $rtfeldman$elm_css$Html$Styled$text('Debit Card')
11668 ])),
11669 A2(
11670 $rtfeldman$elm_css$Html$Styled$option,
11671 _List_fromArray(
11672 [
11673 $rtfeldman$elm_css$Html$Styled$Events$onInput($author$project$Checkout$PaymentModeSelected)
11674 ]),
11675 _List_fromArray(
11676 [
11677 $rtfeldman$elm_css$Html$Styled$text('Credit Card')
11678 ]))
11679 ])),
11680 A2(
11681 $rtfeldman$elm_css$Html$Styled$div,
11682 _List_Nil,
11683 _List_fromArray(
11684 [
11685 A2(
11686 $rtfeldman$elm_css$Html$Styled$a,
11687 _List_fromArray(
11688 [
11689 $rtfeldman$elm_css$Html$Styled$Attributes$href('/cart')
11690 ]),
11691 _List_fromArray(
11692 [
11693 $rtfeldman$elm_css$Html$Styled$text('Cancel')
11694 ]))
11695 ])),
11696 A2(
11697 $rtfeldman$elm_css$Html$Styled$div,
11698 _List_Nil,
11699 _List_fromArray(
11700 [
11701 A2(
11702 $rtfeldman$elm_css$Html$Styled$button,
11703 _List_fromArray(
11704 [
11705 $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Checkout$CheckoutPressed)
11706 ]),
11707 _List_fromArray(
11708 [
11709 $rtfeldman$elm_css$Html$Styled$text('Confirm and Pay')
11710 ]))
11711 ]))
11712 ]));
11713 }
11714};
11715var $author$project$Login$LoginPressed = {$: 'LoginPressed'};
11716var $author$project$Login$PassEntered = function (a) {
11717 return {$: 'PassEntered', a: a};
11718};
11719var $author$project$Login$UserEntered = function (a) {
11720 return {$: 'UserEntered', a: a};
11721};
11722var $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'};
11723var $rtfeldman$elm_css$Css$center = $rtfeldman$elm_css$Css$prop1('center');
11724var $author$project$Login$fieldPadding = $rtfeldman$elm_css$Html$Styled$Attributes$css(
11725 _List_fromArray(
11726 [
11727 $rtfeldman$elm_css$Css$paddingTop(
11728 $rtfeldman$elm_css$Css$px(10)),
11729 $rtfeldman$elm_css$Css$paddingBottom(
11730 $rtfeldman$elm_css$Css$px(10))
11731 ]));
11732var $rtfeldman$elm_css$Css$marginTop = $rtfeldman$elm_css$Css$prop1('margin-top');
11733var $rtfeldman$elm_css$Css$focus = $rtfeldman$elm_css$Css$pseudoClass('focus');
11734var $rtfeldman$elm_css$Html$Styled$input = $rtfeldman$elm_css$Html$Styled$node('input');
11735var $author$project$Styles$loginInputField = A2(
11736 $rtfeldman$elm_css$Html$Styled$styled,
11737 $rtfeldman$elm_css$Html$Styled$input,
11738 _List_fromArray(
11739 [
11740 $rtfeldman$elm_css$Css$width(
11741 $rtfeldman$elm_css$Css$pct(100)),
11742 $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fg),
11743 $rtfeldman$elm_css$Css$border(
11744 $rtfeldman$elm_css$Css$px(0)),
11745 A3(
11746 $rtfeldman$elm_css$Css$borderBottom3,
11747 $rtfeldman$elm_css$Css$px(1),
11748 $rtfeldman$elm_css$Css$solid,
11749 $author$project$Styles$theme.bgLight),
11750 $rtfeldman$elm_css$Css$focus(
11751 _List_fromArray(
11752 [
11753 A3(
11754 $rtfeldman$elm_css$Css$borderBottom3,
11755 $rtfeldman$elm_css$Css$px(2),
11756 $rtfeldman$elm_css$Css$solid,
11757 $author$project$Styles$theme.fg)
11758 ]))
11759 ]));
11760var $rtfeldman$elm_css$Html$Styled$Attributes$placeholder = $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty('placeholder');
11761var $rtfeldman$elm_css$Html$Styled$Attributes$type_ = $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty('type');
11762var $rtfeldman$elm_css$Html$Styled$Attributes$value = $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty('value');
11763var $author$project$Login$viewInput = F4(
11764 function (t, p, v, toMsg) {
11765 return A2(
11766 $author$project$Styles$loginInputField,
11767 _List_fromArray(
11768 [
11769 $rtfeldman$elm_css$Html$Styled$Attributes$type_(t),
11770 $rtfeldman$elm_css$Html$Styled$Attributes$placeholder(p),
11771 $rtfeldman$elm_css$Html$Styled$Attributes$value(v),
11772 $rtfeldman$elm_css$Html$Styled$Events$onInput(toMsg)
11773 ]),
11774 _List_Nil);
11775 });
11776var $author$project$Login$viewStatus = function (ls) {
11777 switch (ls.$) {
11778 case 'NotLoggedIn':
11779 return '';
11780 case 'InvalidLogin':
11781 return 'Invalid Login';
11782 case 'LoggedIn':
11783 return 'Logged in!';
11784 default:
11785 return 'Logging In ...';
11786 }
11787};
11788var $author$project$Login$view = function (model) {
11789 return A2(
11790 $rtfeldman$elm_css$Html$Styled$div,
11791 _List_fromArray(
11792 [
11793 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11794 _List_fromArray(
11795 [
11796 $rtfeldman$elm_css$Css$margin($rtfeldman$elm_css$Css$auto),
11797 $rtfeldman$elm_css$Css$marginTop(
11798 $rtfeldman$elm_css$Css$pct(10)),
11799 $rtfeldman$elm_css$Css$padding(
11800 $rtfeldman$elm_css$Css$px(20)),
11801 $rtfeldman$elm_css$Css$width(
11802 $rtfeldman$elm_css$Css$pct(30))
11803 ]))
11804 ]),
11805 _List_fromArray(
11806 [
11807 A2(
11808 $rtfeldman$elm_css$Html$Styled$div,
11809 _List_fromArray(
11810 [
11811 $author$project$Login$fieldPadding,
11812 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11813 _List_fromArray(
11814 [$author$project$Styles$bigHeading]))
11815 ]),
11816 _List_fromArray(
11817 [
11818 $rtfeldman$elm_css$Html$Styled$text('Login')
11819 ])),
11820 A2(
11821 $rtfeldman$elm_css$Html$Styled$div,
11822 _List_fromArray(
11823 [$author$project$Login$fieldPadding]),
11824 _List_fromArray(
11825 [
11826 A4($author$project$Login$viewInput, 'text', 'Enter name here', model.username, $author$project$Login$UserEntered)
11827 ])),
11828 A2(
11829 $rtfeldman$elm_css$Html$Styled$div,
11830 _List_fromArray(
11831 [$author$project$Login$fieldPadding]),
11832 _List_fromArray(
11833 [
11834 A4($author$project$Login$viewInput, 'password', 'Password', model.password, $author$project$Login$PassEntered)
11835 ])),
11836 A2(
11837 $rtfeldman$elm_css$Html$Styled$div,
11838 _List_fromArray(
11839 [
11840 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11841 _List_fromArray(
11842 [
11843 $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$center)
11844 ])),
11845 $author$project$Login$fieldPadding
11846 ]),
11847 _List_fromArray(
11848 [
11849 A2(
11850 $author$project$Styles$furbyButton,
11851 _List_fromArray(
11852 [
11853 $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Login$LoginPressed)
11854 ]),
11855 _List_fromArray(
11856 [
11857 $rtfeldman$elm_css$Html$Styled$text('Login')
11858 ]))
11859 ])),
11860 A2(
11861 $rtfeldman$elm_css$Html$Styled$div,
11862 _List_fromArray(
11863 [
11864 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11865 _List_fromArray(
11866 [
11867 $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$center)
11868 ]))
11869 ]),
11870 _List_fromArray(
11871 [
11872 $rtfeldman$elm_css$Html$Styled$text(
11873 $author$project$Login$viewStatus(model.loginStatus))
11874 ])),
11875 A2(
11876 $rtfeldman$elm_css$Html$Styled$div,
11877 _List_fromArray(
11878 [$author$project$Login$fieldPadding]),
11879 _List_fromArray(
11880 [
11881 $rtfeldman$elm_css$Html$Styled$text('Don\'t have an account? '),
11882 A2(
11883 $rtfeldman$elm_css$Html$Styled$a,
11884 _List_fromArray(
11885 [
11886 $rtfeldman$elm_css$Html$Styled$Attributes$href('/signup')
11887 ]),
11888 _List_fromArray(
11889 [
11890 $rtfeldman$elm_css$Html$Styled$text('Register now!')
11891 ]))
11892 ]))
11893 ]));
11894};
11895var $author$project$Product$AddRatingComment = function (a) {
11896 return {$: 'AddRatingComment', a: a};
11897};
11898var $author$project$Product$AddRatingPressed = {$: 'AddRatingPressed'};
11899var $author$project$Product$viewInput = F4(
11900 function (t, p, v, toMsg) {
11901 return A2(
11902 $rtfeldman$elm_css$Html$Styled$input,
11903 _List_fromArray(
11904 [
11905 $rtfeldman$elm_css$Html$Styled$Attributes$type_(t),
11906 $rtfeldman$elm_css$Html$Styled$Attributes$placeholder(p),
11907 $rtfeldman$elm_css$Html$Styled$Attributes$value(v),
11908 $rtfeldman$elm_css$Html$Styled$Events$onInput(toMsg)
11909 ]),
11910 _List_Nil);
11911 });
11912var $author$project$Product$AddToCartPressed = {$: 'AddToCartPressed'};
11913var $author$project$Product$viewProduct = function (p) {
11914 return A2(
11915 $rtfeldman$elm_css$Html$Styled$div,
11916 _List_fromArray(
11917 [
11918 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11919 _List_fromArray(
11920 [
11921 $rtfeldman$elm_css$Css$marginBottom(
11922 $rtfeldman$elm_css$Css$px(20)),
11923 $rtfeldman$elm_css$Css$padding(
11924 $rtfeldman$elm_css$Css$px(20)),
11925 $rtfeldman$elm_css$Css$width(
11926 $rtfeldman$elm_css$Css$pct(100))
11927 ]))
11928 ]),
11929 _List_fromArray(
11930 [
11931 A2(
11932 $rtfeldman$elm_css$Html$Styled$div,
11933 _List_fromArray(
11934 [
11935 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11936 _List_fromArray(
11937 [
11938 $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left),
11939 $rtfeldman$elm_css$Css$width(
11940 $rtfeldman$elm_css$Css$pct(50))
11941 ]))
11942 ]),
11943 _List_fromArray(
11944 [
11945 A2(
11946 $author$project$Utils$modelViewer,
11947 _List_fromArray(
11948 [
11949 $author$project$Utils$cameraControls,
11950 $author$project$Utils$autoRotate,
11951 $author$project$Utils$arSrc(p.src),
11952 $author$project$Utils$arIosSrc(p.iosSrc),
11953 $author$project$Utils$loading('eager'),
11954 $author$project$Utils$arModes('webxr')
11955 ]),
11956 _List_Nil)
11957 ])),
11958 A2(
11959 $rtfeldman$elm_css$Html$Styled$div,
11960 _List_fromArray(
11961 [
11962 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11963 _List_fromArray(
11964 [
11965 $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left),
11966 $rtfeldman$elm_css$Css$width(
11967 $rtfeldman$elm_css$Css$pct(50))
11968 ]))
11969 ]),
11970 _List_fromArray(
11971 [
11972 A2(
11973 $rtfeldman$elm_css$Html$Styled$div,
11974 _List_fromArray(
11975 [
11976 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11977 _List_fromArray(
11978 [
11979 $author$project$Styles$cardSecondaryText,
11980 $rtfeldman$elm_css$Css$paddingBottom(
11981 $rtfeldman$elm_css$Css$px(3)),
11982 $rtfeldman$elm_css$Css$fontVariant($rtfeldman$elm_css$Css$smallCaps)
11983 ]))
11984 ]),
11985 _List_fromArray(
11986 [
11987 $rtfeldman$elm_css$Html$Styled$text(
11988 A2($elm$core$Maybe$withDefault, '', p.kind))
11989 ])),
11990 A2(
11991 $rtfeldman$elm_css$Html$Styled$div,
11992 _List_fromArray(
11993 [
11994 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11995 _List_fromArray(
11996 [
11997 $author$project$Styles$cardPrimaryText,
11998 $rtfeldman$elm_css$Css$paddingBottom(
11999 $rtfeldman$elm_css$Css$px(12))
12000 ]))
12001 ]),
12002 _List_fromArray(
12003 [
12004 $rtfeldman$elm_css$Html$Styled$text(p.name)
12005 ])),
12006 A2(
12007 $rtfeldman$elm_css$Html$Styled$div,
12008 _List_fromArray(
12009 [
12010 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12011 _List_fromArray(
12012 [
12013 $author$project$Styles$cardSupportingText,
12014 $rtfeldman$elm_css$Css$paddingBottom(
12015 $rtfeldman$elm_css$Css$px(6))
12016 ]))
12017 ]),
12018 _List_fromArray(
12019 [
12020 $rtfeldman$elm_css$Html$Styled$text(
12021 A2($elm$core$Maybe$withDefault, 'No description provided', p.description))
12022 ])),
12023 A2(
12024 $rtfeldman$elm_css$Html$Styled$div,
12025 _List_fromArray(
12026 [
12027 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12028 _List_fromArray(
12029 [
12030 $rtfeldman$elm_css$Css$fontWeight($rtfeldman$elm_css$Css$bold),
12031 $rtfeldman$elm_css$Css$fontSize(
12032 $rtfeldman$elm_css$Css$px(14)),
12033 $author$project$Styles$money
12034 ]))
12035 ]),
12036 _List_fromArray(
12037 [
12038 $rtfeldman$elm_css$Html$Styled$text(
12039 $elm$core$String$fromFloat(p.price)),
12040 A2(
12041 $rtfeldman$elm_css$Html$Styled$div,
12042 _List_Nil,
12043 _List_fromArray(
12044 [
12045 A2(
12046 $author$project$Styles$furbyButton,
12047 _List_fromArray(
12048 [
12049 $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Product$AddToCartPressed)
12050 ]),
12051 _List_fromArray(
12052 [
12053 $rtfeldman$elm_css$Html$Styled$text('Add To Cart')
12054 ]))
12055 ]))
12056 ]))
12057 ])),
12058 A2(
12059 $rtfeldman$elm_css$Html$Styled$div,
12060 _List_fromArray(
12061 [
12062 A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'clear', 'both')
12063 ]),
12064 _List_Nil)
12065 ]));
12066};
12067var $elm$core$List$repeatHelp = F3(
12068 function (result, n, value) {
12069 repeatHelp:
12070 while (true) {
12071 if (n <= 0) {
12072 return result;
12073 } else {
12074 var $temp$result = A2($elm$core$List$cons, value, result),
12075 $temp$n = n - 1,
12076 $temp$value = value;
12077 result = $temp$result;
12078 n = $temp$n;
12079 value = $temp$value;
12080 continue repeatHelp;
12081 }
12082 }
12083 });
12084var $elm$core$List$repeat = F2(
12085 function (n, value) {
12086 return A3($elm$core$List$repeatHelp, _List_Nil, n, value);
12087 });
12088var $rtfeldman$elm_css$VirtualDom$Styled$unstyledNode = $rtfeldman$elm_css$VirtualDom$Styled$Unstyled;
12089var $rtfeldman$elm_css$Html$Styled$fromUnstyled = $rtfeldman$elm_css$VirtualDom$Styled$unstyledNode;
12090var $elm$svg$Svg$Attributes$class = _VirtualDom_attribute('class');
12091var $elm$svg$Svg$Attributes$fill = _VirtualDom_attribute('fill');
12092var $elm$svg$Svg$Attributes$height = _VirtualDom_attribute('height');
12093var $elm$svg$Svg$map = $elm$virtual_dom$VirtualDom$map;
12094var $elm$svg$Svg$Attributes$stroke = _VirtualDom_attribute('stroke');
12095var $elm$svg$Svg$Attributes$strokeLinecap = _VirtualDom_attribute('stroke-linecap');
12096var $elm$svg$Svg$Attributes$strokeLinejoin = _VirtualDom_attribute('stroke-linejoin');
12097var $elm$svg$Svg$Attributes$strokeWidth = _VirtualDom_attribute('stroke-width');
12098var $elm$svg$Svg$trustedNode = _VirtualDom_nodeNS('http://www.w3.org/2000/svg');
12099var $elm$svg$Svg$svg = $elm$svg$Svg$trustedNode('svg');
12100var $elm$svg$Svg$Attributes$viewBox = _VirtualDom_attribute('viewBox');
12101var $elm$svg$Svg$Attributes$width = _VirtualDom_attribute('width');
12102var $1602$elm_feather$FeatherIcons$toHtml = F2(
12103 function (attributes, _v0) {
12104 var src = _v0.a.src;
12105 var attrs = _v0.a.attrs;
12106 var strSize = $elm$core$String$fromFloat(attrs.size);
12107 var baseAttributes = _List_fromArray(
12108 [
12109 $elm$svg$Svg$Attributes$fill('none'),
12110 $elm$svg$Svg$Attributes$height(
12111 _Utils_ap(strSize, attrs.sizeUnit)),
12112 $elm$svg$Svg$Attributes$width(
12113 _Utils_ap(strSize, attrs.sizeUnit)),
12114 $elm$svg$Svg$Attributes$stroke('currentColor'),
12115 $elm$svg$Svg$Attributes$strokeLinecap('round'),
12116 $elm$svg$Svg$Attributes$strokeLinejoin('round'),
12117 $elm$svg$Svg$Attributes$strokeWidth(
12118 $elm$core$String$fromFloat(attrs.strokeWidth)),
12119 $elm$svg$Svg$Attributes$viewBox(attrs.viewBox)
12120 ]);
12121 var combinedAttributes = _Utils_ap(
12122 function () {
12123 var _v1 = attrs._class;
12124 if (_v1.$ === 'Just') {
12125 var c = _v1.a;
12126 return A2(
12127 $elm$core$List$cons,
12128 $elm$svg$Svg$Attributes$class(c),
12129 baseAttributes);
12130 } else {
12131 return baseAttributes;
12132 }
12133 }(),
12134 attributes);
12135 return A2(
12136 $elm$svg$Svg$svg,
12137 combinedAttributes,
12138 A2(
12139 $elm$core$List$map,
12140 $elm$svg$Svg$map($elm$core$Basics$never),
12141 src));
12142 });
12143var $1602$elm_feather$FeatherIcons$Icon = function (a) {
12144 return {$: 'Icon', a: a};
12145};
12146var $1602$elm_feather$FeatherIcons$withSize = F2(
12147 function (size, _v0) {
12148 var attrs = _v0.a.attrs;
12149 var src = _v0.a.src;
12150 return $1602$elm_feather$FeatherIcons$Icon(
12151 {
12152 attrs: _Utils_update(
12153 attrs,
12154 {size: size}),
12155 src: src
12156 });
12157 });
12158var $author$project$Icons$convert = A2(
12159 $elm$core$Basics$composeL,
12160 A2(
12161 $elm$core$Basics$composeL,
12162 $rtfeldman$elm_css$Html$Styled$fromUnstyled,
12163 $1602$elm_feather$FeatherIcons$toHtml(_List_Nil)),
12164 $1602$elm_feather$FeatherIcons$withSize(14));
12165var $1602$elm_feather$FeatherIcons$defaultAttributes = function (name) {
12166 return {
12167 _class: $elm$core$Maybe$Just('feather feather-' + name),
12168 size: 24,
12169 sizeUnit: '',
12170 strokeWidth: 2,
12171 viewBox: '0 0 24 24'
12172 };
12173};
12174var $1602$elm_feather$FeatherIcons$makeBuilder = F2(
12175 function (name, src) {
12176 return $1602$elm_feather$FeatherIcons$Icon(
12177 {
12178 attrs: $1602$elm_feather$FeatherIcons$defaultAttributes(name),
12179 src: src
12180 });
12181 });
12182var $elm$svg$Svg$Attributes$points = _VirtualDom_attribute('points');
12183var $elm$svg$Svg$polygon = $elm$svg$Svg$trustedNode('polygon');
12184var $1602$elm_feather$FeatherIcons$xmlns = function (s) {
12185 return A2(
12186 $elm$virtual_dom$VirtualDom$property,
12187 'xmlns',
12188 $elm$json$Json$Encode$string(s));
12189};
12190var $1602$elm_feather$FeatherIcons$star = A2(
12191 $1602$elm_feather$FeatherIcons$makeBuilder,
12192 'star',
12193 _List_fromArray(
12194 [
12195 A2(
12196 $elm$svg$Svg$svg,
12197 _List_fromArray(
12198 [
12199 $1602$elm_feather$FeatherIcons$xmlns('http://www.w3.org/2000/svg'),
12200 $elm$svg$Svg$Attributes$width('24'),
12201 $elm$svg$Svg$Attributes$height('24'),
12202 $elm$svg$Svg$Attributes$viewBox('0 0 24 24'),
12203 $elm$svg$Svg$Attributes$fill('none'),
12204 $elm$svg$Svg$Attributes$stroke('currentColor'),
12205 $elm$svg$Svg$Attributes$strokeWidth('2'),
12206 $elm$svg$Svg$Attributes$strokeLinecap('round'),
12207 $elm$svg$Svg$Attributes$strokeLinejoin('round'),
12208 $elm$svg$Svg$Attributes$class('feather feather-star')
12209 ]),
12210 _List_fromArray(
12211 [
12212 A2(
12213 $elm$svg$Svg$polygon,
12214 _List_fromArray(
12215 [
12216 $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')
12217 ]),
12218 _List_Nil)
12219 ]))
12220 ]));
12221var $author$project$Icons$starIcon = $author$project$Icons$convert($1602$elm_feather$FeatherIcons$star);
12222var $author$project$Product$viewStarRating = function (i) {
12223 return A2(
12224 $rtfeldman$elm_css$Html$Styled$div,
12225 _List_Nil,
12226 A2($elm$core$List$repeat, i, $author$project$Icons$starIcon));
12227};
12228var $author$project$Product$viewRating = function (r) {
12229 return A2(
12230 $rtfeldman$elm_css$Html$Styled$div,
12231 _List_fromArray(
12232 [
12233 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12234 _List_fromArray(
12235 [
12236 A3(
12237 $rtfeldman$elm_css$Css$border3,
12238 $rtfeldman$elm_css$Css$px(1),
12239 $rtfeldman$elm_css$Css$solid,
12240 $author$project$Styles$theme.primary),
12241 $rtfeldman$elm_css$Css$borderRadius(
12242 $rtfeldman$elm_css$Css$px(4)),
12243 $rtfeldman$elm_css$Css$marginBottom(
12244 $rtfeldman$elm_css$Css$px(20)),
12245 $rtfeldman$elm_css$Css$padding(
12246 $rtfeldman$elm_css$Css$px(20))
12247 ]))
12248 ]),
12249 _List_fromArray(
12250 [
12251 A2(
12252 $rtfeldman$elm_css$Html$Styled$div,
12253 _List_fromArray(
12254 [
12255 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12256 _List_fromArray(
12257 [
12258 $rtfeldman$elm_css$Css$fontSize(
12259 $rtfeldman$elm_css$Css$px(16)),
12260 $rtfeldman$elm_css$Css$fontWeight($rtfeldman$elm_css$Css$bold),
12261 $rtfeldman$elm_css$Css$paddingBottom(
12262 $rtfeldman$elm_css$Css$px(3))
12263 ]))
12264 ]),
12265 _List_fromArray(
12266 [
12267 $rtfeldman$elm_css$Html$Styled$text(r.customerName)
12268 ])),
12269 $author$project$Product$viewStarRating(r.stars),
12270 A2(
12271 $rtfeldman$elm_css$Html$Styled$div,
12272 _List_fromArray(
12273 [
12274 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12275 _List_fromArray(
12276 [
12277 $author$project$Styles$cardSecondaryText,
12278 $rtfeldman$elm_css$Css$paddingBottom(
12279 $rtfeldman$elm_css$Css$px(12))
12280 ]))
12281 ]),
12282 _List_fromArray(
12283 [
12284 $rtfeldman$elm_css$Html$Styled$text('Reviewed on ' + r.commentDate)
12285 ])),
12286 (!_Utils_eq(r.commentText, $elm$core$Maybe$Nothing)) ? A2(
12287 $rtfeldman$elm_css$Html$Styled$div,
12288 _List_fromArray(
12289 [
12290 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12291 _List_fromArray(
12292 [$author$project$Styles$cardSupportingText]))
12293 ]),
12294 _List_fromArray(
12295 [
12296 $rtfeldman$elm_css$Html$Styled$text(
12297 A2($elm$core$Maybe$withDefault, '', r.commentText))
12298 ])) : $rtfeldman$elm_css$Html$Styled$text('')
12299 ]));
12300};
12301var $author$project$Product$AddRatingStars = function (a) {
12302 return {$: 'AddRatingStars', a: a};
12303};
12304var $author$project$Product$viewStars = A2(
12305 $rtfeldman$elm_css$Html$Styled$ul,
12306 _List_Nil,
12307 A2(
12308 $elm$core$List$map,
12309 function (i) {
12310 return A2(
12311 $rtfeldman$elm_css$Html$Styled$button,
12312 _List_fromArray(
12313 [
12314 $rtfeldman$elm_css$Html$Styled$Events$onClick(
12315 $author$project$Product$AddRatingStars(i))
12316 ]),
12317 _List_fromArray(
12318 [
12319 $rtfeldman$elm_css$Html$Styled$text(
12320 $elm$core$String$fromInt(i))
12321 ]));
12322 },
12323 _List_fromArray(
12324 [1, 2, 3, 4, 5])));
12325var $author$project$Product$viewStatus = function (s) {
12326 switch (s.$) {
12327 case 'Loading':
12328 return 'Loading';
12329 case 'Loaded':
12330 return 'Ready!';
12331 default:
12332 return 'Not loaded ...';
12333 }
12334};
12335var $author$project$Product$view = function (model) {
12336 var _v0 = model.pageStatus;
12337 if (_v0.$ === 'Loading') {
12338 return A2(
12339 $rtfeldman$elm_css$Html$Styled$div,
12340 _List_Nil,
12341 _List_fromArray(
12342 [
12343 $rtfeldman$elm_css$Html$Styled$text(
12344 $author$project$Product$viewStatus($author$project$Product$Loading))
12345 ]));
12346 } else {
12347 return A2(
12348 $rtfeldman$elm_css$Html$Styled$div,
12349 _List_fromArray(
12350 [
12351 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12352 _List_fromArray(
12353 [
12354 $rtfeldman$elm_css$Css$width(
12355 $rtfeldman$elm_css$Css$pct(60)),
12356 $rtfeldman$elm_css$Css$margin($rtfeldman$elm_css$Css$auto)
12357 ]))
12358 ]),
12359 _List_fromArray(
12360 [
12361 A2(
12362 $rtfeldman$elm_css$Html$Styled$div,
12363 _List_Nil,
12364 _List_fromArray(
12365 [
12366 $author$project$Product$viewProduct(model.listing)
12367 ])),
12368 A2(
12369 $rtfeldman$elm_css$Html$Styled$div,
12370 _List_fromArray(
12371 [
12372 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12373 _List_fromArray(
12374 [$author$project$Styles$cardPrimaryText]))
12375 ]),
12376 _List_fromArray(
12377 [
12378 $rtfeldman$elm_css$Html$Styled$text('User Reviews')
12379 ])),
12380 _Utils_eq(model.ratings, _List_Nil) ? $rtfeldman$elm_css$Html$Styled$text('Be the first to add a review.') : A2(
12381 $rtfeldman$elm_css$Html$Styled$ul,
12382 _List_fromArray(
12383 [
12384 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12385 _List_fromArray(
12386 [
12387 $rtfeldman$elm_css$Css$padding(
12388 $rtfeldman$elm_css$Css$px(0)),
12389 $rtfeldman$elm_css$Css$listStyle($rtfeldman$elm_css$Css$none)
12390 ]))
12391 ]),
12392 A2($elm$core$List$map, $author$project$Product$viewRating, model.ratings)),
12393 A2(
12394 $rtfeldman$elm_css$Html$Styled$div,
12395 _List_Nil,
12396 _List_fromArray(
12397 [
12398 $rtfeldman$elm_css$Html$Styled$text('Add Rating: ')
12399 ])),
12400 A2(
12401 $rtfeldman$elm_css$Html$Styled$div,
12402 _List_Nil,
12403 _List_fromArray(
12404 [
12405 $author$project$Product$viewStars,
12406 A4($author$project$Product$viewInput, 'text', 'Enter Comment Text', model.ratingText, $author$project$Product$AddRatingComment),
12407 A2(
12408 $rtfeldman$elm_css$Html$Styled$button,
12409 _List_fromArray(
12410 [
12411 $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Product$AddRatingPressed)
12412 ]),
12413 _List_fromArray(
12414 [
12415 $rtfeldman$elm_css$Html$Styled$text('Submit Rating')
12416 ]))
12417 ])),
12418 A2(
12419 $rtfeldman$elm_css$Html$Styled$div,
12420 _List_Nil,
12421 _List_fromArray(
12422 [
12423 A2(
12424 $rtfeldman$elm_css$Html$Styled$a,
12425 _List_fromArray(
12426 [
12427 $rtfeldman$elm_css$Html$Styled$Attributes$href('/catalog')
12428 ]),
12429 _List_fromArray(
12430 [
12431 $rtfeldman$elm_css$Html$Styled$text('Back to catalog')
12432 ]))
12433 ]))
12434 ]));
12435 }
12436};
12437var $author$project$Signup$AddressEntered = function (a) {
12438 return {$: 'AddressEntered', a: a};
12439};
12440var $author$project$Signup$CreatePressed = {$: 'CreatePressed'};
12441var $author$project$Signup$EmailEntered = function (a) {
12442 return {$: 'EmailEntered', a: a};
12443};
12444var $author$project$Signup$PassEntered = function (a) {
12445 return {$: 'PassEntered', a: a};
12446};
12447var $author$project$Signup$PhoneEntered = function (a) {
12448 return {$: 'PhoneEntered', a: a};
12449};
12450var $author$project$Signup$UserEntered = function (a) {
12451 return {$: 'UserEntered', a: a};
12452};
12453var $author$project$Signup$fieldPadding = $rtfeldman$elm_css$Html$Styled$Attributes$css(
12454 _List_fromArray(
12455 [
12456 $rtfeldman$elm_css$Css$paddingTop(
12457 $rtfeldman$elm_css$Css$px(10)),
12458 $rtfeldman$elm_css$Css$paddingBottom(
12459 $rtfeldman$elm_css$Css$px(10))
12460 ]));
12461var $author$project$Signup$viewInput = F4(
12462 function (t, p, v, toMsg) {
12463 return A2(
12464 $author$project$Styles$loginInputField,
12465 _List_fromArray(
12466 [
12467 $rtfeldman$elm_css$Html$Styled$Attributes$type_(t),
12468 $rtfeldman$elm_css$Html$Styled$Attributes$placeholder(p),
12469 $rtfeldman$elm_css$Html$Styled$Attributes$value(v),
12470 $rtfeldman$elm_css$Html$Styled$Events$onInput(toMsg)
12471 ]),
12472 _List_Nil);
12473 });
12474var $author$project$Signup$viewStatus = function (s) {
12475 switch (s.$) {
12476 case 'UsernameTaken':
12477 return 'This username is taken!';
12478 case 'InvalidPhone':
12479 return 'Invalid phone number!';
12480 case 'InvalidEmail':
12481 return 'Invalid email address!';
12482 case 'CreatedSuccessfully':
12483 return 'User created successfully';
12484 case 'CreatingUser':
12485 return 'Creating user ...';
12486 default:
12487 return '';
12488 }
12489};
12490var $author$project$Signup$view = function (model) {
12491 return A2(
12492 $rtfeldman$elm_css$Html$Styled$div,
12493 _List_fromArray(
12494 [
12495 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12496 _List_fromArray(
12497 [
12498 $rtfeldman$elm_css$Css$margin($rtfeldman$elm_css$Css$auto),
12499 $rtfeldman$elm_css$Css$marginTop(
12500 $rtfeldman$elm_css$Css$pct(10)),
12501 $rtfeldman$elm_css$Css$padding(
12502 $rtfeldman$elm_css$Css$px(20)),
12503 $rtfeldman$elm_css$Css$width(
12504 $rtfeldman$elm_css$Css$pct(30))
12505 ]))
12506 ]),
12507 _List_fromArray(
12508 [
12509 A2(
12510 $rtfeldman$elm_css$Html$Styled$div,
12511 _List_fromArray(
12512 [
12513 $author$project$Signup$fieldPadding,
12514 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12515 _List_fromArray(
12516 [$author$project$Styles$bigHeading]))
12517 ]),
12518 _List_fromArray(
12519 [
12520 $rtfeldman$elm_css$Html$Styled$text('Signup')
12521 ])),
12522 A2(
12523 $rtfeldman$elm_css$Html$Styled$div,
12524 _List_fromArray(
12525 [$author$project$Signup$fieldPadding]),
12526 _List_fromArray(
12527 [
12528 A4($author$project$Signup$viewInput, 'text', 'Username', model.username, $author$project$Signup$UserEntered)
12529 ])),
12530 A2(
12531 $rtfeldman$elm_css$Html$Styled$div,
12532 _List_fromArray(
12533 [$author$project$Signup$fieldPadding]),
12534 _List_fromArray(
12535 [
12536 A4($author$project$Signup$viewInput, 'password', 'Password', model.password, $author$project$Signup$PassEntered)
12537 ])),
12538 A2(
12539 $rtfeldman$elm_css$Html$Styled$div,
12540 _List_fromArray(
12541 [$author$project$Signup$fieldPadding]),
12542 _List_fromArray(
12543 [
12544 A4($author$project$Signup$viewInput, 'text', 'Email', model.emailId, $author$project$Signup$EmailEntered)
12545 ])),
12546 A2(
12547 $rtfeldman$elm_css$Html$Styled$div,
12548 _List_fromArray(
12549 [$author$project$Signup$fieldPadding]),
12550 _List_fromArray(
12551 [
12552 A4($author$project$Signup$viewInput, 'text', 'Phone Number', model.phoneNumber, $author$project$Signup$PhoneEntered)
12553 ])),
12554 A2(
12555 $rtfeldman$elm_css$Html$Styled$div,
12556 _List_fromArray(
12557 [$author$project$Signup$fieldPadding]),
12558 _List_fromArray(
12559 [
12560 A4(
12561 $author$project$Signup$viewInput,
12562 'text',
12563 'Shipping Address',
12564 A2($elm$core$Maybe$withDefault, '', model.address),
12565 $author$project$Signup$AddressEntered)
12566 ])),
12567 A2(
12568 $rtfeldman$elm_css$Html$Styled$div,
12569 _List_fromArray(
12570 [
12571 $author$project$Signup$fieldPadding,
12572 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12573 _List_fromArray(
12574 [
12575 $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$center)
12576 ]))
12577 ]),
12578 _List_fromArray(
12579 [
12580 A2(
12581 $author$project$Styles$furbyButton,
12582 _List_fromArray(
12583 [
12584 $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Signup$CreatePressed)
12585 ]),
12586 _List_fromArray(
12587 [
12588 $rtfeldman$elm_css$Html$Styled$text('Create Account')
12589 ]))
12590 ])),
12591 A2(
12592 $rtfeldman$elm_css$Html$Styled$div,
12593 _List_fromArray(
12594 [$author$project$Signup$fieldPadding]),
12595 _List_fromArray(
12596 [
12597 $rtfeldman$elm_css$Html$Styled$text('Already have a account? '),
12598 A2(
12599 $rtfeldman$elm_css$Html$Styled$a,
12600 _List_fromArray(
12601 [
12602 $rtfeldman$elm_css$Html$Styled$Attributes$href('/login')
12603 ]),
12604 _List_fromArray(
12605 [
12606 $rtfeldman$elm_css$Html$Styled$text('Login >')
12607 ]))
12608 ])),
12609 $rtfeldman$elm_css$Html$Styled$text(
12610 $author$project$Signup$viewStatus(model.status))
12611 ]));
12612};
12613var $author$project$Main$view = function (model) {
12614 var _v0 = model.location;
12615 switch (_v0.$) {
12616 case 'HomePage':
12617 return {
12618 body: $elm$core$List$singleton(
12619 $rtfeldman$elm_css$Html$Styled$toUnstyled(
12620 A2(
12621 $rtfeldman$elm_css$Html$Styled$div,
12622 _List_Nil,
12623 _List_fromArray(
12624 [
12625 A2(
12626 $rtfeldman$elm_css$Html$Styled$ul,
12627 _List_Nil,
12628 A2(
12629 $elm$core$List$map,
12630 function (l) {
12631 return A2(
12632 $rtfeldman$elm_css$Html$Styled$li,
12633 _List_Nil,
12634 _List_fromArray(
12635 [
12636 A2(
12637 $rtfeldman$elm_css$Html$Styled$a,
12638 _List_fromArray(
12639 [
12640 $rtfeldman$elm_css$Html$Styled$Attributes$href(l)
12641 ]),
12642 _List_fromArray(
12643 [
12644 $rtfeldman$elm_css$Html$Styled$text(l)
12645 ]))
12646 ]));
12647 },
12648 _List_fromArray(
12649 ['/login', '/catalog', '/cart'])))
12650 ])))),
12651 title: 'Login'
12652 };
12653 case 'LoginPage':
12654 return {
12655 body: $elm$core$List$singleton(
12656 $rtfeldman$elm_css$Html$Styled$toUnstyled(
12657 A2(
12658 $rtfeldman$elm_css$Html$Styled$map,
12659 $author$project$Main$LoginMessage,
12660 $author$project$Login$view(model.loginModel)))),
12661 title: 'Login'
12662 };
12663 case 'SignupPage':
12664 return {
12665 body: $elm$core$List$singleton(
12666 $rtfeldman$elm_css$Html$Styled$toUnstyled(
12667 A2(
12668 $rtfeldman$elm_css$Html$Styled$map,
12669 $author$project$Main$SignupMessage,
12670 $author$project$Signup$view(model.signupModel)))),
12671 title: 'Signup'
12672 };
12673 case 'NotFoundPage':
12674 return {
12675 body: $elm$core$List$singleton(
12676 $rtfeldman$elm_css$Html$Styled$toUnstyled(
12677 A2(
12678 $rtfeldman$elm_css$Html$Styled$div,
12679 _List_Nil,
12680 _List_fromArray(
12681 [
12682 $rtfeldman$elm_css$Html$Styled$text('404 - Not Found'),
12683 A2(
12684 $rtfeldman$elm_css$Html$Styled$a,
12685 _List_fromArray(
12686 [
12687 $rtfeldman$elm_css$Html$Styled$Attributes$href('/')
12688 ]),
12689 _List_fromArray(
12690 [
12691 $rtfeldman$elm_css$Html$Styled$text('Go back >')
12692 ]))
12693 ])))),
12694 title: '404 - Not Found'
12695 };
12696 case 'CatalogPage':
12697 return {
12698 body: A2(
12699 $author$project$Main$pageWrap,
12700 model,
12701 A2(
12702 $rtfeldman$elm_css$Html$Styled$map,
12703 $author$project$Main$CatalogMessage,
12704 $author$project$Catalog$view(model.catalogModel))),
12705 title: 'Catalog'
12706 };
12707 case 'CartPage':
12708 return {
12709 body: A2(
12710 $author$project$Main$pageWrap,
12711 model,
12712 A2(
12713 $rtfeldman$elm_css$Html$Styled$map,
12714 $author$project$Main$CartMessage,
12715 $author$project$Cart$view(model.cartModel))),
12716 title: 'Cart'
12717 };
12718 case 'CheckoutPage':
12719 return {
12720 body: A2(
12721 $author$project$Main$pageWrap,
12722 model,
12723 A2(
12724 $rtfeldman$elm_css$Html$Styled$map,
12725 $author$project$Main$CheckoutMessage,
12726 $author$project$Checkout$view(model.checkoutModel))),
12727 title: 'Checkout'
12728 };
12729 default:
12730 var item = _v0.a;
12731 return {
12732 body: A2(
12733 $author$project$Main$pageWrap,
12734 model,
12735 A2(
12736 $rtfeldman$elm_css$Html$Styled$map,
12737 $author$project$Main$ProductMessage,
12738 $author$project$Product$view(model.productModel))),
12739 title: 'Product ' + $elm$core$String$fromInt(item)
12740 };
12741 }
12742};
12743var $author$project$Main$main = $elm$browser$Browser$application(
12744 {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});
12745_Platform_export({'Main':{'init':$author$project$Main$main(
12746 $elm$json$Json$Decode$succeed(_Utils_Tuple0))(0)}});}(this));
12747
12748 var app = Elm.Main.init({ node: document.getElementById("elm") });
12749}
12750catch (e)
12751{
12752 // display initialization errors (e.g. bad flags, infinite recursion)
12753 var header = document.createElement("h1");
12754 header.style.fontFamily = "monospace";
12755 header.innerText = "Initialization Error";
12756 var pre = document.getElementById("elm");
12757 document.body.insertBefore(header, pre);
12758 pre.innerText = e;
12759 throw e;
12760}
12761</script>
12762
12763</body>
12764</html> \ No newline at end of file
diff --git a/frontend/main.js b/frontend/main.js
deleted file mode 100644
index 9d33498..0000000
--- a/frontend/main.js
+++ /dev/null
@@ -1,12732 +0,0 @@
1(function(scope){
2'use strict';
3
4function F(arity, fun, wrapper) {
5 wrapper.a = arity;
6 wrapper.f = fun;
7 return wrapper;
8}
9
10function F2(fun) {
11 return F(2, fun, function(a) { return function(b) { return fun(a,b); }; })
12}
13function F3(fun) {
14 return F(3, fun, function(a) {
15 return function(b) { return function(c) { return fun(a, b, c); }; };
16 });
17}
18function F4(fun) {
19 return F(4, fun, function(a) { return function(b) { return function(c) {
20 return function(d) { return fun(a, b, c, d); }; }; };
21 });
22}
23function F5(fun) {
24 return F(5, fun, function(a) { return function(b) { return function(c) {
25 return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };
26 });
27}
28function F6(fun) {
29 return F(6, fun, function(a) { return function(b) { return function(c) {
30 return function(d) { return function(e) { return function(f) {
31 return fun(a, b, c, d, e, f); }; }; }; }; };
32 });
33}
34function F7(fun) {
35 return F(7, fun, function(a) { return function(b) { return function(c) {
36 return function(d) { return function(e) { return function(f) {
37 return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };
38 });
39}
40function F8(fun) {
41 return F(8, fun, function(a) { return function(b) { return function(c) {
42 return function(d) { return function(e) { return function(f) {
43 return function(g) { return function(h) {
44 return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };
45 });
46}
47function F9(fun) {
48 return F(9, fun, function(a) { return function(b) { return function(c) {
49 return function(d) { return function(e) { return function(f) {
50 return function(g) { return function(h) { return function(i) {
51 return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };
52 });
53}
54
55function A2(fun, a, b) {
56 return fun.a === 2 ? fun.f(a, b) : fun(a)(b);
57}
58function A3(fun, a, b, c) {
59 return fun.a === 3 ? fun.f(a, b, c) : fun(a)(b)(c);
60}
61function A4(fun, a, b, c, d) {
62 return fun.a === 4 ? fun.f(a, b, c, d) : fun(a)(b)(c)(d);
63}
64function A5(fun, a, b, c, d, e) {
65 return fun.a === 5 ? fun.f(a, b, c, d, e) : fun(a)(b)(c)(d)(e);
66}
67function A6(fun, a, b, c, d, e, f) {
68 return fun.a === 6 ? fun.f(a, b, c, d, e, f) : fun(a)(b)(c)(d)(e)(f);
69}
70function A7(fun, a, b, c, d, e, f, g) {
71 return fun.a === 7 ? fun.f(a, b, c, d, e, f, g) : fun(a)(b)(c)(d)(e)(f)(g);
72}
73function A8(fun, a, b, c, d, e, f, g, h) {
74 return fun.a === 8 ? fun.f(a, b, c, d, e, f, g, h) : fun(a)(b)(c)(d)(e)(f)(g)(h);
75}
76function A9(fun, a, b, c, d, e, f, g, h, i) {
77 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);
78}
79
80console.warn('Compiled in DEV mode. Follow the advice at https://elm-lang.org/0.19.1/optimize for better performance and smaller assets.');
81
82
83// EQUALITY
84
85function _Utils_eq(x, y)
86{
87 for (
88 var pair, stack = [], isEqual = _Utils_eqHelp(x, y, 0, stack);
89 isEqual && (pair = stack.pop());
90 isEqual = _Utils_eqHelp(pair.a, pair.b, 0, stack)
91 )
92 {}
93
94 return isEqual;
95}
96
97function _Utils_eqHelp(x, y, depth, stack)
98{
99 if (x === y)
100 {
101 return true;
102 }
103
104 if (typeof x !== 'object' || x === null || y === null)
105 {
106 typeof x === 'function' && _Debug_crash(5);
107 return false;
108 }
109
110 if (depth > 100)
111 {
112 stack.push(_Utils_Tuple2(x,y));
113 return true;
114 }
115
116 /**/
117 if (x.$ === 'Set_elm_builtin')
118 {
119 x = $elm$core$Set$toList(x);
120 y = $elm$core$Set$toList(y);
121 }
122 if (x.$ === 'RBNode_elm_builtin' || x.$ === 'RBEmpty_elm_builtin')
123 {
124 x = $elm$core$Dict$toList(x);
125 y = $elm$core$Dict$toList(y);
126 }
127 //*/
128
129 /**_UNUSED/
130 if (x.$ < 0)
131 {
132 x = $elm$core$Dict$toList(x);
133 y = $elm$core$Dict$toList(y);
134 }
135 //*/
136
137 for (var key in x)
138 {
139 if (!_Utils_eqHelp(x[key], y[key], depth + 1, stack))
140 {
141 return false;
142 }
143 }
144 return true;
145}
146
147var _Utils_equal = F2(_Utils_eq);
148var _Utils_notEqual = F2(function(a, b) { return !_Utils_eq(a,b); });
149
150
151
152// COMPARISONS
153
154// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on
155// the particular integer values assigned to LT, EQ, and GT.
156
157function _Utils_cmp(x, y, ord)
158{
159 if (typeof x !== 'object')
160 {
161 return x === y ? /*EQ*/ 0 : x < y ? /*LT*/ -1 : /*GT*/ 1;
162 }
163
164 /**/
165 if (x instanceof String)
166 {
167 var a = x.valueOf();
168 var b = y.valueOf();
169 return a === b ? 0 : a < b ? -1 : 1;
170 }
171 //*/
172
173 /**_UNUSED/
174 if (typeof x.$ === 'undefined')
175 //*/
176 /**/
177 if (x.$[0] === '#')
178 //*/
179 {
180 return (ord = _Utils_cmp(x.a, y.a))
181 ? ord
182 : (ord = _Utils_cmp(x.b, y.b))
183 ? ord
184 : _Utils_cmp(x.c, y.c);
185 }
186
187 // traverse conses until end of a list or a mismatch
188 for (; x.b && y.b && !(ord = _Utils_cmp(x.a, y.a)); x = x.b, y = y.b) {} // WHILE_CONSES
189 return ord || (x.b ? /*GT*/ 1 : y.b ? /*LT*/ -1 : /*EQ*/ 0);
190}
191
192var _Utils_lt = F2(function(a, b) { return _Utils_cmp(a, b) < 0; });
193var _Utils_le = F2(function(a, b) { return _Utils_cmp(a, b) < 1; });
194var _Utils_gt = F2(function(a, b) { return _Utils_cmp(a, b) > 0; });
195var _Utils_ge = F2(function(a, b) { return _Utils_cmp(a, b) >= 0; });
196
197var _Utils_compare = F2(function(x, y)
198{
199 var n = _Utils_cmp(x, y);
200 return n < 0 ? $elm$core$Basics$LT : n ? $elm$core$Basics$GT : $elm$core$Basics$EQ;
201});
202
203
204// COMMON VALUES
205
206var _Utils_Tuple0_UNUSED = 0;
207var _Utils_Tuple0 = { $: '#0' };
208
209function _Utils_Tuple2_UNUSED(a, b) { return { a: a, b: b }; }
210function _Utils_Tuple2(a, b) { return { $: '#2', a: a, b: b }; }
211
212function _Utils_Tuple3_UNUSED(a, b, c) { return { a: a, b: b, c: c }; }
213function _Utils_Tuple3(a, b, c) { return { $: '#3', a: a, b: b, c: c }; }
214
215function _Utils_chr_UNUSED(c) { return c; }
216function _Utils_chr(c) { return new String(c); }
217
218
219// RECORDS
220
221function _Utils_update(oldRecord, updatedFields)
222{
223 var newRecord = {};
224
225 for (var key in oldRecord)
226 {
227 newRecord[key] = oldRecord[key];
228 }
229
230 for (var key in updatedFields)
231 {
232 newRecord[key] = updatedFields[key];
233 }
234
235 return newRecord;
236}
237
238
239// APPEND
240
241var _Utils_append = F2(_Utils_ap);
242
243function _Utils_ap(xs, ys)
244{
245 // append Strings
246 if (typeof xs === 'string')
247 {
248 return xs + ys;
249 }
250
251 // append Lists
252 if (!xs.b)
253 {
254 return ys;
255 }
256 var root = _List_Cons(xs.a, ys);
257 xs = xs.b
258 for (var curr = root; xs.b; xs = xs.b) // WHILE_CONS
259 {
260 curr = curr.b = _List_Cons(xs.a, ys);
261 }
262 return root;
263}
264
265
266
267var _List_Nil_UNUSED = { $: 0 };
268var _List_Nil = { $: '[]' };
269
270function _List_Cons_UNUSED(hd, tl) { return { $: 1, a: hd, b: tl }; }
271function _List_Cons(hd, tl) { return { $: '::', a: hd, b: tl }; }
272
273
274var _List_cons = F2(_List_Cons);
275
276function _List_fromArray(arr)
277{
278 var out = _List_Nil;
279 for (var i = arr.length; i--; )
280 {
281 out = _List_Cons(arr[i], out);
282 }
283 return out;
284}
285
286function _List_toArray(xs)
287{
288 for (var out = []; xs.b; xs = xs.b) // WHILE_CONS
289 {
290 out.push(xs.a);
291 }
292 return out;
293}
294
295var _List_map2 = F3(function(f, xs, ys)
296{
297 for (var arr = []; xs.b && ys.b; xs = xs.b, ys = ys.b) // WHILE_CONSES
298 {
299 arr.push(A2(f, xs.a, ys.a));
300 }
301 return _List_fromArray(arr);
302});
303
304var _List_map3 = F4(function(f, xs, ys, zs)
305{
306 for (var arr = []; xs.b && ys.b && zs.b; xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
307 {
308 arr.push(A3(f, xs.a, ys.a, zs.a));
309 }
310 return _List_fromArray(arr);
311});
312
313var _List_map4 = F5(function(f, ws, xs, ys, zs)
314{
315 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
316 {
317 arr.push(A4(f, ws.a, xs.a, ys.a, zs.a));
318 }
319 return _List_fromArray(arr);
320});
321
322var _List_map5 = F6(function(f, vs, ws, xs, ys, zs)
323{
324 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
325 {
326 arr.push(A5(f, vs.a, ws.a, xs.a, ys.a, zs.a));
327 }
328 return _List_fromArray(arr);
329});
330
331var _List_sortBy = F2(function(f, xs)
332{
333 return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
334 return _Utils_cmp(f(a), f(b));
335 }));
336});
337
338var _List_sortWith = F2(function(f, xs)
339{
340 return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
341 var ord = A2(f, a, b);
342 return ord === $elm$core$Basics$EQ ? 0 : ord === $elm$core$Basics$LT ? -1 : 1;
343 }));
344});
345
346
347
348var _JsArray_empty = [];
349
350function _JsArray_singleton(value)
351{
352 return [value];
353}
354
355function _JsArray_length(array)
356{
357 return array.length;
358}
359
360var _JsArray_initialize = F3(function(size, offset, func)
361{
362 var result = new Array(size);
363
364 for (var i = 0; i < size; i++)
365 {
366 result[i] = func(offset + i);
367 }
368
369 return result;
370});
371
372var _JsArray_initializeFromList = F2(function (max, ls)
373{
374 var result = new Array(max);
375
376 for (var i = 0; i < max && ls.b; i++)
377 {
378 result[i] = ls.a;
379 ls = ls.b;
380 }
381
382 result.length = i;
383 return _Utils_Tuple2(result, ls);
384});
385
386var _JsArray_unsafeGet = F2(function(index, array)
387{
388 return array[index];
389});
390
391var _JsArray_unsafeSet = F3(function(index, value, array)
392{
393 var length = array.length;
394 var result = new Array(length);
395
396 for (var i = 0; i < length; i++)
397 {
398 result[i] = array[i];
399 }
400
401 result[index] = value;
402 return result;
403});
404
405var _JsArray_push = F2(function(value, array)
406{
407 var length = array.length;
408 var result = new Array(length + 1);
409
410 for (var i = 0; i < length; i++)
411 {
412 result[i] = array[i];
413 }
414
415 result[length] = value;
416 return result;
417});
418
419var _JsArray_foldl = F3(function(func, acc, array)
420{
421 var length = array.length;
422
423 for (var i = 0; i < length; i++)
424 {
425 acc = A2(func, array[i], acc);
426 }
427
428 return acc;
429});
430
431var _JsArray_foldr = F3(function(func, acc, array)
432{
433 for (var i = array.length - 1; i >= 0; i--)
434 {
435 acc = A2(func, array[i], acc);
436 }
437
438 return acc;
439});
440
441var _JsArray_map = F2(function(func, array)
442{
443 var length = array.length;
444 var result = new Array(length);
445
446 for (var i = 0; i < length; i++)
447 {
448 result[i] = func(array[i]);
449 }
450
451 return result;
452});
453
454var _JsArray_indexedMap = F3(function(func, offset, array)
455{
456 var length = array.length;
457 var result = new Array(length);
458
459 for (var i = 0; i < length; i++)
460 {
461 result[i] = A2(func, offset + i, array[i]);
462 }
463
464 return result;
465});
466
467var _JsArray_slice = F3(function(from, to, array)
468{
469 return array.slice(from, to);
470});
471
472var _JsArray_appendN = F3(function(n, dest, source)
473{
474 var destLen = dest.length;
475 var itemsToCopy = n - destLen;
476
477 if (itemsToCopy > source.length)
478 {
479 itemsToCopy = source.length;
480 }
481
482 var size = destLen + itemsToCopy;
483 var result = new Array(size);
484
485 for (var i = 0; i < destLen; i++)
486 {
487 result[i] = dest[i];
488 }
489
490 for (var i = 0; i < itemsToCopy; i++)
491 {
492 result[i + destLen] = source[i];
493 }
494
495 return result;
496});
497
498
499
500// LOG
501
502var _Debug_log_UNUSED = F2(function(tag, value)
503{
504 return value;
505});
506
507var _Debug_log = F2(function(tag, value)
508{
509 console.log(tag + ': ' + _Debug_toString(value));
510 return value;
511});
512
513
514// TODOS
515
516function _Debug_todo(moduleName, region)
517{
518 return function(message) {
519 _Debug_crash(8, moduleName, region, message);
520 };
521}
522
523function _Debug_todoCase(moduleName, region, value)
524{
525 return function(message) {
526 _Debug_crash(9, moduleName, region, value, message);
527 };
528}
529
530
531// TO STRING
532
533function _Debug_toString_UNUSED(value)
534{
535 return '<internals>';
536}
537
538function _Debug_toString(value)
539{
540 return _Debug_toAnsiString(false, value);
541}
542
543function _Debug_toAnsiString(ansi, value)
544{
545 if (typeof value === 'function')
546 {
547 return _Debug_internalColor(ansi, '<function>');
548 }
549
550 if (typeof value === 'boolean')
551 {
552 return _Debug_ctorColor(ansi, value ? 'True' : 'False');
553 }
554
555 if (typeof value === 'number')
556 {
557 return _Debug_numberColor(ansi, value + '');
558 }
559
560 if (value instanceof String)
561 {
562 return _Debug_charColor(ansi, "'" + _Debug_addSlashes(value, true) + "'");
563 }
564
565 if (typeof value === 'string')
566 {
567 return _Debug_stringColor(ansi, '"' + _Debug_addSlashes(value, false) + '"');
568 }
569
570 if (typeof value === 'object' && '$' in value)
571 {
572 var tag = value.$;
573
574 if (typeof tag === 'number')
575 {
576 return _Debug_internalColor(ansi, '<internals>');
577 }
578
579 if (tag[0] === '#')
580 {
581 var output = [];
582 for (var k in value)
583 {
584 if (k === '$') continue;
585 output.push(_Debug_toAnsiString(ansi, value[k]));
586 }
587 return '(' + output.join(',') + ')';
588 }
589
590 if (tag === 'Set_elm_builtin')
591 {
592 return _Debug_ctorColor(ansi, 'Set')
593 + _Debug_fadeColor(ansi, '.fromList') + ' '
594 + _Debug_toAnsiString(ansi, $elm$core$Set$toList(value));
595 }
596
597 if (tag === 'RBNode_elm_builtin' || tag === 'RBEmpty_elm_builtin')
598 {
599 return _Debug_ctorColor(ansi, 'Dict')
600 + _Debug_fadeColor(ansi, '.fromList') + ' '
601 + _Debug_toAnsiString(ansi, $elm$core$Dict$toList(value));
602 }
603
604 if (tag === 'Array_elm_builtin')
605 {
606 return _Debug_ctorColor(ansi, 'Array')
607 + _Debug_fadeColor(ansi, '.fromList') + ' '
608 + _Debug_toAnsiString(ansi, $elm$core$Array$toList(value));
609 }
610
611 if (tag === '::' || tag === '[]')
612 {
613 var output = '[';
614
615 value.b && (output += _Debug_toAnsiString(ansi, value.a), value = value.b)
616
617 for (; value.b; value = value.b) // WHILE_CONS
618 {
619 output += ',' + _Debug_toAnsiString(ansi, value.a);
620 }
621 return output + ']';
622 }
623
624 var output = '';
625 for (var i in value)
626 {
627 if (i === '$') continue;
628 var str = _Debug_toAnsiString(ansi, value[i]);
629 var c0 = str[0];
630 var parenless = c0 === '{' || c0 === '(' || c0 === '[' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0;
631 output += ' ' + (parenless ? str : '(' + str + ')');
632 }
633 return _Debug_ctorColor(ansi, tag) + output;
634 }
635
636 if (typeof DataView === 'function' && value instanceof DataView)
637 {
638 return _Debug_stringColor(ansi, '<' + value.byteLength + ' bytes>');
639 }
640
641 if (typeof File !== 'undefined' && value instanceof File)
642 {
643 return _Debug_internalColor(ansi, '<' + value.name + '>');
644 }
645
646 if (typeof value === 'object')
647 {
648 var output = [];
649 for (var key in value)
650 {
651 var field = key[0] === '_' ? key.slice(1) : key;
652 output.push(_Debug_fadeColor(ansi, field) + ' = ' + _Debug_toAnsiString(ansi, value[key]));
653 }
654 if (output.length === 0)
655 {
656 return '{}';
657 }
658 return '{ ' + output.join(', ') + ' }';
659 }
660
661 return _Debug_internalColor(ansi, '<internals>');
662}
663
664function _Debug_addSlashes(str, isChar)
665{
666 var s = str
667 .replace(/\\/g, '\\\\')
668 .replace(/\n/g, '\\n')
669 .replace(/\t/g, '\\t')
670 .replace(/\r/g, '\\r')
671 .replace(/\v/g, '\\v')
672 .replace(/\0/g, '\\0');
673
674 if (isChar)
675 {
676 return s.replace(/\'/g, '\\\'');
677 }
678 else
679 {
680 return s.replace(/\"/g, '\\"');
681 }
682}
683
684function _Debug_ctorColor(ansi, string)
685{
686 return ansi ? '\x1b[96m' + string + '\x1b[0m' : string;
687}
688
689function _Debug_numberColor(ansi, string)
690{
691 return ansi ? '\x1b[95m' + string + '\x1b[0m' : string;
692}
693
694function _Debug_stringColor(ansi, string)
695{
696 return ansi ? '\x1b[93m' + string + '\x1b[0m' : string;
697}
698
699function _Debug_charColor(ansi, string)
700{
701 return ansi ? '\x1b[92m' + string + '\x1b[0m' : string;
702}
703
704function _Debug_fadeColor(ansi, string)
705{
706 return ansi ? '\x1b[37m' + string + '\x1b[0m' : string;
707}
708
709function _Debug_internalColor(ansi, string)
710{
711 return ansi ? '\x1b[36m' + string + '\x1b[0m' : string;
712}
713
714function _Debug_toHexDigit(n)
715{
716 return String.fromCharCode(n < 10 ? 48 + n : 55 + n);
717}
718
719
720// CRASH
721
722
723function _Debug_crash_UNUSED(identifier)
724{
725 throw new Error('https://github.com/elm/core/blob/1.0.0/hints/' + identifier + '.md');
726}
727
728
729function _Debug_crash(identifier, fact1, fact2, fact3, fact4)
730{
731 switch(identifier)
732 {
733 case 0:
734 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.');
735
736 case 1:
737 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.');
738
739 case 2:
740 var jsonErrorString = fact1;
741 throw new Error('Problem with the flags given to your Elm program on initialization.\n\n' + jsonErrorString);
742
743 case 3:
744 var portName = fact1;
745 throw new Error('There can only be one port named `' + portName + '`, but your program has multiple.');
746
747 case 4:
748 var portName = fact1;
749 var problem = fact2;
750 throw new Error('Trying to send an unexpected type of value through port `' + portName + '`:\n' + problem);
751
752 case 5:
753 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.');
754
755 case 6:
756 var moduleName = fact1;
757 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!');
758
759 case 8:
760 var moduleName = fact1;
761 var region = fact2;
762 var message = fact3;
763 throw new Error('TODO in module `' + moduleName + '` ' + _Debug_regionToString(region) + '\n\n' + message);
764
765 case 9:
766 var moduleName = fact1;
767 var region = fact2;
768 var value = fact3;
769 var message = fact4;
770 throw new Error(
771 'TODO in module `' + moduleName + '` from the `case` expression '
772 + _Debug_regionToString(region) + '\n\nIt received the following value:\n\n '
773 + _Debug_toString(value).replace('\n', '\n ')
774 + '\n\nBut the branch that handles it says:\n\n ' + message.replace('\n', '\n ')
775 );
776
777 case 10:
778 throw new Error('Bug in https://github.com/elm/virtual-dom/issues');
779
780 case 11:
781 throw new Error('Cannot perform mod 0. Division by zero error.');
782 }
783}
784
785function _Debug_regionToString(region)
786{
787 if (region.start.line === region.end.line)
788 {
789 return 'on line ' + region.start.line;
790 }
791 return 'on lines ' + region.start.line + ' through ' + region.end.line;
792}
793
794
795
796// MATH
797
798var _Basics_add = F2(function(a, b) { return a + b; });
799var _Basics_sub = F2(function(a, b) { return a - b; });
800var _Basics_mul = F2(function(a, b) { return a * b; });
801var _Basics_fdiv = F2(function(a, b) { return a / b; });
802var _Basics_idiv = F2(function(a, b) { return (a / b) | 0; });
803var _Basics_pow = F2(Math.pow);
804
805var _Basics_remainderBy = F2(function(b, a) { return a % b; });
806
807// https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
808var _Basics_modBy = F2(function(modulus, x)
809{
810 var answer = x % modulus;
811 return modulus === 0
812 ? _Debug_crash(11)
813 :
814 ((answer > 0 && modulus < 0) || (answer < 0 && modulus > 0))
815 ? answer + modulus
816 : answer;
817});
818
819
820// TRIGONOMETRY
821
822var _Basics_pi = Math.PI;
823var _Basics_e = Math.E;
824var _Basics_cos = Math.cos;
825var _Basics_sin = Math.sin;
826var _Basics_tan = Math.tan;
827var _Basics_acos = Math.acos;
828var _Basics_asin = Math.asin;
829var _Basics_atan = Math.atan;
830var _Basics_atan2 = F2(Math.atan2);
831
832
833// MORE MATH
834
835function _Basics_toFloat(x) { return x; }
836function _Basics_truncate(n) { return n | 0; }
837function _Basics_isInfinite(n) { return n === Infinity || n === -Infinity; }
838
839var _Basics_ceiling = Math.ceil;
840var _Basics_floor = Math.floor;
841var _Basics_round = Math.round;
842var _Basics_sqrt = Math.sqrt;
843var _Basics_log = Math.log;
844var _Basics_isNaN = isNaN;
845
846
847// BOOLEANS
848
849function _Basics_not(bool) { return !bool; }
850var _Basics_and = F2(function(a, b) { return a && b; });
851var _Basics_or = F2(function(a, b) { return a || b; });
852var _Basics_xor = F2(function(a, b) { return a !== b; });
853
854
855
856var _String_cons = F2(function(chr, str)
857{
858 return chr + str;
859});
860
861function _String_uncons(string)
862{
863 var word = string.charCodeAt(0);
864 return !isNaN(word)
865 ? $elm$core$Maybe$Just(
866 0xD800 <= word && word <= 0xDBFF
867 ? _Utils_Tuple2(_Utils_chr(string[0] + string[1]), string.slice(2))
868 : _Utils_Tuple2(_Utils_chr(string[0]), string.slice(1))
869 )
870 : $elm$core$Maybe$Nothing;
871}
872
873var _String_append = F2(function(a, b)
874{
875 return a + b;
876});
877
878function _String_length(str)
879{
880 return str.length;
881}
882
883var _String_map = F2(function(func, string)
884{
885 var len = string.length;
886 var array = new Array(len);
887 var i = 0;
888 while (i < len)
889 {
890 var word = string.charCodeAt(i);
891 if (0xD800 <= word && word <= 0xDBFF)
892 {
893 array[i] = func(_Utils_chr(string[i] + string[i+1]));
894 i += 2;
895 continue;
896 }
897 array[i] = func(_Utils_chr(string[i]));
898 i++;
899 }
900 return array.join('');
901});
902
903var _String_filter = F2(function(isGood, str)
904{
905 var arr = [];
906 var len = str.length;
907 var i = 0;
908 while (i < len)
909 {
910 var char = str[i];
911 var word = str.charCodeAt(i);
912 i++;
913 if (0xD800 <= word && word <= 0xDBFF)
914 {
915 char += str[i];
916 i++;
917 }
918
919 if (isGood(_Utils_chr(char)))
920 {
921 arr.push(char);
922 }
923 }
924 return arr.join('');
925});
926
927function _String_reverse(str)
928{
929 var len = str.length;
930 var arr = new Array(len);
931 var i = 0;
932 while (i < len)
933 {
934 var word = str.charCodeAt(i);
935 if (0xD800 <= word && word <= 0xDBFF)
936 {
937 arr[len - i] = str[i + 1];
938 i++;
939 arr[len - i] = str[i - 1];
940 i++;
941 }
942 else
943 {
944 arr[len - i] = str[i];
945 i++;
946 }
947 }
948 return arr.join('');
949}
950
951var _String_foldl = F3(function(func, state, string)
952{
953 var len = string.length;
954 var i = 0;
955 while (i < len)
956 {
957 var char = string[i];
958 var word = string.charCodeAt(i);
959 i++;
960 if (0xD800 <= word && word <= 0xDBFF)
961 {
962 char += string[i];
963 i++;
964 }
965 state = A2(func, _Utils_chr(char), state);
966 }
967 return state;
968});
969
970var _String_foldr = F3(function(func, state, string)
971{
972 var i = string.length;
973 while (i--)
974 {
975 var char = string[i];
976 var word = string.charCodeAt(i);
977 if (0xDC00 <= word && word <= 0xDFFF)
978 {
979 i--;
980 char = string[i] + char;
981 }
982 state = A2(func, _Utils_chr(char), state);
983 }
984 return state;
985});
986
987var _String_split = F2(function(sep, str)
988{
989 return str.split(sep);
990});
991
992var _String_join = F2(function(sep, strs)
993{
994 return strs.join(sep);
995});
996
997var _String_slice = F3(function(start, end, str) {
998 return str.slice(start, end);
999});
1000
1001function _String_trim(str)
1002{
1003 return str.trim();
1004}
1005
1006function _String_trimLeft(str)
1007{
1008 return str.replace(/^\s+/, '');
1009}
1010
1011function _String_trimRight(str)
1012{
1013 return str.replace(/\s+$/, '');
1014}
1015
1016function _String_words(str)
1017{
1018 return _List_fromArray(str.trim().split(/\s+/g));
1019}
1020
1021function _String_lines(str)
1022{
1023 return _List_fromArray(str.split(/\r\n|\r|\n/g));
1024}
1025
1026function _String_toUpper(str)
1027{
1028 return str.toUpperCase();
1029}
1030
1031function _String_toLower(str)
1032{
1033 return str.toLowerCase();
1034}
1035
1036var _String_any = F2(function(isGood, string)
1037{
1038 var i = string.length;
1039 while (i--)
1040 {
1041 var char = string[i];
1042 var word = string.charCodeAt(i);
1043 if (0xDC00 <= word && word <= 0xDFFF)
1044 {
1045 i--;
1046 char = string[i] + char;
1047 }
1048 if (isGood(_Utils_chr(char)))
1049 {
1050 return true;
1051 }
1052 }
1053 return false;
1054});
1055
1056var _String_all = F2(function(isGood, string)
1057{
1058 var i = string.length;
1059 while (i--)
1060 {
1061 var char = string[i];
1062 var word = string.charCodeAt(i);
1063 if (0xDC00 <= word && word <= 0xDFFF)
1064 {
1065 i--;
1066 char = string[i] + char;
1067 }
1068 if (!isGood(_Utils_chr(char)))
1069 {
1070 return false;
1071 }
1072 }
1073 return true;
1074});
1075
1076var _String_contains = F2(function(sub, str)
1077{
1078 return str.indexOf(sub) > -1;
1079});
1080
1081var _String_startsWith = F2(function(sub, str)
1082{
1083 return str.indexOf(sub) === 0;
1084});
1085
1086var _String_endsWith = F2(function(sub, str)
1087{
1088 return str.length >= sub.length &&
1089 str.lastIndexOf(sub) === str.length - sub.length;
1090});
1091
1092var _String_indexes = F2(function(sub, str)
1093{
1094 var subLen = sub.length;
1095
1096 if (subLen < 1)
1097 {
1098 return _List_Nil;
1099 }
1100
1101 var i = 0;
1102 var is = [];
1103
1104 while ((i = str.indexOf(sub, i)) > -1)
1105 {
1106 is.push(i);
1107 i = i + subLen;
1108 }
1109
1110 return _List_fromArray(is);
1111});
1112
1113
1114// TO STRING
1115
1116function _String_fromNumber(number)
1117{
1118 return number + '';
1119}
1120
1121
1122// INT CONVERSIONS
1123
1124function _String_toInt(str)
1125{
1126 var total = 0;
1127 var code0 = str.charCodeAt(0);
1128 var start = code0 == 0x2B /* + */ || code0 == 0x2D /* - */ ? 1 : 0;
1129
1130 for (var i = start; i < str.length; ++i)
1131 {
1132 var code = str.charCodeAt(i);
1133 if (code < 0x30 || 0x39 < code)
1134 {
1135 return $elm$core$Maybe$Nothing;
1136 }
1137 total = 10 * total + code - 0x30;
1138 }
1139
1140 return i == start
1141 ? $elm$core$Maybe$Nothing
1142 : $elm$core$Maybe$Just(code0 == 0x2D ? -total : total);
1143}
1144
1145
1146// FLOAT CONVERSIONS
1147
1148function _String_toFloat(s)
1149{
1150 // check if it is a hex, octal, or binary number
1151 if (s.length === 0 || /[\sxbo]/.test(s))
1152 {
1153 return $elm$core$Maybe$Nothing;
1154 }
1155 var n = +s;
1156 // faster isNaN check
1157 return n === n ? $elm$core$Maybe$Just(n) : $elm$core$Maybe$Nothing;
1158}
1159
1160function _String_fromList(chars)
1161{
1162 return _List_toArray(chars).join('');
1163}
1164
1165
1166
1167
1168function _Char_toCode(char)
1169{
1170 var code = char.charCodeAt(0);
1171 if (0xD800 <= code && code <= 0xDBFF)
1172 {
1173 return (code - 0xD800) * 0x400 + char.charCodeAt(1) - 0xDC00 + 0x10000
1174 }
1175 return code;
1176}
1177
1178function _Char_fromCode(code)
1179{
1180 return _Utils_chr(
1181 (code < 0 || 0x10FFFF < code)
1182 ? '\uFFFD'
1183 :
1184 (code <= 0xFFFF)
1185 ? String.fromCharCode(code)
1186 :
1187 (code -= 0x10000,
1188 String.fromCharCode(Math.floor(code / 0x400) + 0xD800, code % 0x400 + 0xDC00)
1189 )
1190 );
1191}
1192
1193function _Char_toUpper(char)
1194{
1195 return _Utils_chr(char.toUpperCase());
1196}
1197
1198function _Char_toLower(char)
1199{
1200 return _Utils_chr(char.toLowerCase());
1201}
1202
1203function _Char_toLocaleUpper(char)
1204{
1205 return _Utils_chr(char.toLocaleUpperCase());
1206}
1207
1208function _Char_toLocaleLower(char)
1209{
1210 return _Utils_chr(char.toLocaleLowerCase());
1211}
1212
1213
1214
1215/**/
1216function _Json_errorToString(error)
1217{
1218 return $elm$json$Json$Decode$errorToString(error);
1219}
1220//*/
1221
1222
1223// CORE DECODERS
1224
1225function _Json_succeed(msg)
1226{
1227 return {
1228 $: 0,
1229 a: msg
1230 };
1231}
1232
1233function _Json_fail(msg)
1234{
1235 return {
1236 $: 1,
1237 a: msg
1238 };
1239}
1240
1241function _Json_decodePrim(decoder)
1242{
1243 return { $: 2, b: decoder };
1244}
1245
1246var _Json_decodeInt = _Json_decodePrim(function(value) {
1247 return (typeof value !== 'number')
1248 ? _Json_expecting('an INT', value)
1249 :
1250 (-2147483647 < value && value < 2147483647 && (value | 0) === value)
1251 ? $elm$core$Result$Ok(value)
1252 :
1253 (isFinite(value) && !(value % 1))
1254 ? $elm$core$Result$Ok(value)
1255 : _Json_expecting('an INT', value);
1256});
1257
1258var _Json_decodeBool = _Json_decodePrim(function(value) {
1259 return (typeof value === 'boolean')
1260 ? $elm$core$Result$Ok(value)
1261 : _Json_expecting('a BOOL', value);
1262});
1263
1264var _Json_decodeFloat = _Json_decodePrim(function(value) {
1265 return (typeof value === 'number')
1266 ? $elm$core$Result$Ok(value)
1267 : _Json_expecting('a FLOAT', value);
1268});
1269
1270var _Json_decodeValue = _Json_decodePrim(function(value) {
1271 return $elm$core$Result$Ok(_Json_wrap(value));
1272});
1273
1274var _Json_decodeString = _Json_decodePrim(function(value) {
1275 return (typeof value === 'string')
1276 ? $elm$core$Result$Ok(value)
1277 : (value instanceof String)
1278 ? $elm$core$Result$Ok(value + '')
1279 : _Json_expecting('a STRING', value);
1280});
1281
1282function _Json_decodeList(decoder) { return { $: 3, b: decoder }; }
1283function _Json_decodeArray(decoder) { return { $: 4, b: decoder }; }
1284
1285function _Json_decodeNull(value) { return { $: 5, c: value }; }
1286
1287var _Json_decodeField = F2(function(field, decoder)
1288{
1289 return {
1290 $: 6,
1291 d: field,
1292 b: decoder
1293 };
1294});
1295
1296var _Json_decodeIndex = F2(function(index, decoder)
1297{
1298 return {
1299 $: 7,
1300 e: index,
1301 b: decoder
1302 };
1303});
1304
1305function _Json_decodeKeyValuePairs(decoder)
1306{
1307 return {
1308 $: 8,
1309 b: decoder
1310 };
1311}
1312
1313function _Json_mapMany(f, decoders)
1314{
1315 return {
1316 $: 9,
1317 f: f,
1318 g: decoders
1319 };
1320}
1321
1322var _Json_andThen = F2(function(callback, decoder)
1323{
1324 return {
1325 $: 10,
1326 b: decoder,
1327 h: callback
1328 };
1329});
1330
1331function _Json_oneOf(decoders)
1332{
1333 return {
1334 $: 11,
1335 g: decoders
1336 };
1337}
1338
1339
1340// DECODING OBJECTS
1341
1342var _Json_map1 = F2(function(f, d1)
1343{
1344 return _Json_mapMany(f, [d1]);
1345});
1346
1347var _Json_map2 = F3(function(f, d1, d2)
1348{
1349 return _Json_mapMany(f, [d1, d2]);
1350});
1351
1352var _Json_map3 = F4(function(f, d1, d2, d3)
1353{
1354 return _Json_mapMany(f, [d1, d2, d3]);
1355});
1356
1357var _Json_map4 = F5(function(f, d1, d2, d3, d4)
1358{
1359 return _Json_mapMany(f, [d1, d2, d3, d4]);
1360});
1361
1362var _Json_map5 = F6(function(f, d1, d2, d3, d4, d5)
1363{
1364 return _Json_mapMany(f, [d1, d2, d3, d4, d5]);
1365});
1366
1367var _Json_map6 = F7(function(f, d1, d2, d3, d4, d5, d6)
1368{
1369 return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6]);
1370});
1371
1372var _Json_map7 = F8(function(f, d1, d2, d3, d4, d5, d6, d7)
1373{
1374 return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7]);
1375});
1376
1377var _Json_map8 = F9(function(f, d1, d2, d3, d4, d5, d6, d7, d8)
1378{
1379 return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]);
1380});
1381
1382
1383// DECODE
1384
1385var _Json_runOnString = F2(function(decoder, string)
1386{
1387 try
1388 {
1389 var value = JSON.parse(string);
1390 return _Json_runHelp(decoder, value);
1391 }
1392 catch (e)
1393 {
1394 return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'This is not valid JSON! ' + e.message, _Json_wrap(string)));
1395 }
1396});
1397
1398var _Json_run = F2(function(decoder, value)
1399{
1400 return _Json_runHelp(decoder, _Json_unwrap(value));
1401});
1402
1403function _Json_runHelp(decoder, value)
1404{
1405 switch (decoder.$)
1406 {
1407 case 2:
1408 return decoder.b(value);
1409
1410 case 5:
1411 return (value === null)
1412 ? $elm$core$Result$Ok(decoder.c)
1413 : _Json_expecting('null', value);
1414
1415 case 3:
1416 if (!_Json_isArray(value))
1417 {
1418 return _Json_expecting('a LIST', value);
1419 }
1420 return _Json_runArrayDecoder(decoder.b, value, _List_fromArray);
1421
1422 case 4:
1423 if (!_Json_isArray(value))
1424 {
1425 return _Json_expecting('an ARRAY', value);
1426 }
1427 return _Json_runArrayDecoder(decoder.b, value, _Json_toElmArray);
1428
1429 case 6:
1430 var field = decoder.d;
1431 if (typeof value !== 'object' || value === null || !(field in value))
1432 {
1433 return _Json_expecting('an OBJECT with a field named `' + field + '`', value);
1434 }
1435 var result = _Json_runHelp(decoder.b, value[field]);
1436 return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, field, result.a));
1437
1438 case 7:
1439 var index = decoder.e;
1440 if (!_Json_isArray(value))
1441 {
1442 return _Json_expecting('an ARRAY', value);
1443 }
1444 if (index >= value.length)
1445 {
1446 return _Json_expecting('a LONGER array. Need index ' + index + ' but only see ' + value.length + ' entries', value);
1447 }
1448 var result = _Json_runHelp(decoder.b, value[index]);
1449 return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, index, result.a));
1450
1451 case 8:
1452 if (typeof value !== 'object' || value === null || _Json_isArray(value))
1453 {
1454 return _Json_expecting('an OBJECT', value);
1455 }
1456
1457 var keyValuePairs = _List_Nil;
1458 // TODO test perf of Object.keys and switch when support is good enough
1459 for (var key in value)
1460 {
1461 if (value.hasOwnProperty(key))
1462 {
1463 var result = _Json_runHelp(decoder.b, value[key]);
1464 if (!$elm$core$Result$isOk(result))
1465 {
1466 return $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, key, result.a));
1467 }
1468 keyValuePairs = _List_Cons(_Utils_Tuple2(key, result.a), keyValuePairs);
1469 }
1470 }
1471 return $elm$core$Result$Ok($elm$core$List$reverse(keyValuePairs));
1472
1473 case 9:
1474 var answer = decoder.f;
1475 var decoders = decoder.g;
1476 for (var i = 0; i < decoders.length; i++)
1477 {
1478 var result = _Json_runHelp(decoders[i], value);
1479 if (!$elm$core$Result$isOk(result))
1480 {
1481 return result;
1482 }
1483 answer = answer(result.a);
1484 }
1485 return $elm$core$Result$Ok(answer);
1486
1487 case 10:
1488 var result = _Json_runHelp(decoder.b, value);
1489 return (!$elm$core$Result$isOk(result))
1490 ? result
1491 : _Json_runHelp(decoder.h(result.a), value);
1492
1493 case 11:
1494 var errors = _List_Nil;
1495 for (var temp = decoder.g; temp.b; temp = temp.b) // WHILE_CONS
1496 {
1497 var result = _Json_runHelp(temp.a, value);
1498 if ($elm$core$Result$isOk(result))
1499 {
1500 return result;
1501 }
1502 errors = _List_Cons(result.a, errors);
1503 }
1504 return $elm$core$Result$Err($elm$json$Json$Decode$OneOf($elm$core$List$reverse(errors)));
1505
1506 case 1:
1507 return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, decoder.a, _Json_wrap(value)));
1508
1509 case 0:
1510 return $elm$core$Result$Ok(decoder.a);
1511 }
1512}
1513
1514function _Json_runArrayDecoder(decoder, value, toElmValue)
1515{
1516 var len = value.length;
1517 var array = new Array(len);
1518 for (var i = 0; i < len; i++)
1519 {
1520 var result = _Json_runHelp(decoder, value[i]);
1521 if (!$elm$core$Result$isOk(result))
1522 {
1523 return $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, i, result.a));
1524 }
1525 array[i] = result.a;
1526 }
1527 return $elm$core$Result$Ok(toElmValue(array));
1528}
1529
1530function _Json_isArray(value)
1531{
1532 return Array.isArray(value) || (typeof FileList !== 'undefined' && value instanceof FileList);
1533}
1534
1535function _Json_toElmArray(array)
1536{
1537 return A2($elm$core$Array$initialize, array.length, function(i) { return array[i]; });
1538}
1539
1540function _Json_expecting(type, value)
1541{
1542 return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'Expecting ' + type, _Json_wrap(value)));
1543}
1544
1545
1546// EQUALITY
1547
1548function _Json_equality(x, y)
1549{
1550 if (x === y)
1551 {
1552 return true;
1553 }
1554
1555 if (x.$ !== y.$)
1556 {
1557 return false;
1558 }
1559
1560 switch (x.$)
1561 {
1562 case 0:
1563 case 1:
1564 return x.a === y.a;
1565
1566 case 2:
1567 return x.b === y.b;
1568
1569 case 5:
1570 return x.c === y.c;
1571
1572 case 3:
1573 case 4:
1574 case 8:
1575 return _Json_equality(x.b, y.b);
1576
1577 case 6:
1578 return x.d === y.d && _Json_equality(x.b, y.b);
1579
1580 case 7:
1581 return x.e === y.e && _Json_equality(x.b, y.b);
1582
1583 case 9:
1584 return x.f === y.f && _Json_listEquality(x.g, y.g);
1585
1586 case 10:
1587 return x.h === y.h && _Json_equality(x.b, y.b);
1588
1589 case 11:
1590 return _Json_listEquality(x.g, y.g);
1591 }
1592}
1593
1594function _Json_listEquality(aDecoders, bDecoders)
1595{
1596 var len = aDecoders.length;
1597 if (len !== bDecoders.length)
1598 {
1599 return false;
1600 }
1601 for (var i = 0; i < len; i++)
1602 {
1603 if (!_Json_equality(aDecoders[i], bDecoders[i]))
1604 {
1605 return false;
1606 }
1607 }
1608 return true;
1609}
1610
1611
1612// ENCODE
1613
1614var _Json_encode = F2(function(indentLevel, value)
1615{
1616 return JSON.stringify(_Json_unwrap(value), null, indentLevel) + '';
1617});
1618
1619function _Json_wrap(value) { return { $: 0, a: value }; }
1620function _Json_unwrap(value) { return value.a; }
1621
1622function _Json_wrap_UNUSED(value) { return value; }
1623function _Json_unwrap_UNUSED(value) { return value; }
1624
1625function _Json_emptyArray() { return []; }
1626function _Json_emptyObject() { return {}; }
1627
1628var _Json_addField = F3(function(key, value, object)
1629{
1630 object[key] = _Json_unwrap(value);
1631 return object;
1632});
1633
1634function _Json_addEntry(func)
1635{
1636 return F2(function(entry, array)
1637 {
1638 array.push(_Json_unwrap(func(entry)));
1639 return array;
1640 });
1641}
1642
1643var _Json_encodeNull = _Json_wrap(null);
1644
1645
1646
1647// TASKS
1648
1649function _Scheduler_succeed(value)
1650{
1651 return {
1652 $: 0,
1653 a: value
1654 };
1655}
1656
1657function _Scheduler_fail(error)
1658{
1659 return {
1660 $: 1,
1661 a: error
1662 };
1663}
1664
1665function _Scheduler_binding(callback)
1666{
1667 return {
1668 $: 2,
1669 b: callback,
1670 c: null
1671 };
1672}
1673
1674var _Scheduler_andThen = F2(function(callback, task)
1675{
1676 return {
1677 $: 3,
1678 b: callback,
1679 d: task
1680 };
1681});
1682
1683var _Scheduler_onError = F2(function(callback, task)
1684{
1685 return {
1686 $: 4,
1687 b: callback,
1688 d: task
1689 };
1690});
1691
1692function _Scheduler_receive(callback)
1693{
1694 return {
1695 $: 5,
1696 b: callback
1697 };
1698}
1699
1700
1701// PROCESSES
1702
1703var _Scheduler_guid = 0;
1704
1705function _Scheduler_rawSpawn(task)
1706{
1707 var proc = {
1708 $: 0,
1709 e: _Scheduler_guid++,
1710 f: task,
1711 g: null,
1712 h: []
1713 };
1714
1715 _Scheduler_enqueue(proc);
1716
1717 return proc;
1718}
1719
1720function _Scheduler_spawn(task)
1721{
1722 return _Scheduler_binding(function(callback) {
1723 callback(_Scheduler_succeed(_Scheduler_rawSpawn(task)));
1724 });
1725}
1726
1727function _Scheduler_rawSend(proc, msg)
1728{
1729 proc.h.push(msg);
1730 _Scheduler_enqueue(proc);
1731}
1732
1733var _Scheduler_send = F2(function(proc, msg)
1734{
1735 return _Scheduler_binding(function(callback) {
1736 _Scheduler_rawSend(proc, msg);
1737 callback(_Scheduler_succeed(_Utils_Tuple0));
1738 });
1739});
1740
1741function _Scheduler_kill(proc)
1742{
1743 return _Scheduler_binding(function(callback) {
1744 var task = proc.f;
1745 if (task.$ === 2 && task.c)
1746 {
1747 task.c();
1748 }
1749
1750 proc.f = null;
1751
1752 callback(_Scheduler_succeed(_Utils_Tuple0));
1753 });
1754}
1755
1756
1757/* STEP PROCESSES
1758
1759type alias Process =
1760 { $ : tag
1761 , id : unique_id
1762 , root : Task
1763 , stack : null | { $: SUCCEED | FAIL, a: callback, b: stack }
1764 , mailbox : [msg]
1765 }
1766
1767*/
1768
1769
1770var _Scheduler_working = false;
1771var _Scheduler_queue = [];
1772
1773
1774function _Scheduler_enqueue(proc)
1775{
1776 _Scheduler_queue.push(proc);
1777 if (_Scheduler_working)
1778 {
1779 return;
1780 }
1781 _Scheduler_working = true;
1782 while (proc = _Scheduler_queue.shift())
1783 {
1784 _Scheduler_step(proc);
1785 }
1786 _Scheduler_working = false;
1787}
1788
1789
1790function _Scheduler_step(proc)
1791{
1792 while (proc.f)
1793 {
1794 var rootTag = proc.f.$;
1795 if (rootTag === 0 || rootTag === 1)
1796 {
1797 while (proc.g && proc.g.$ !== rootTag)
1798 {
1799 proc.g = proc.g.i;
1800 }
1801 if (!proc.g)
1802 {
1803 return;
1804 }
1805 proc.f = proc.g.b(proc.f.a);
1806 proc.g = proc.g.i;
1807 }
1808 else if (rootTag === 2)
1809 {
1810 proc.f.c = proc.f.b(function(newRoot) {
1811 proc.f = newRoot;
1812 _Scheduler_enqueue(proc);
1813 });
1814 return;
1815 }
1816 else if (rootTag === 5)
1817 {
1818 if (proc.h.length === 0)
1819 {
1820 return;
1821 }
1822 proc.f = proc.f.b(proc.h.shift());
1823 }
1824 else // if (rootTag === 3 || rootTag === 4)
1825 {
1826 proc.g = {
1827 $: rootTag === 3 ? 0 : 1,
1828 b: proc.f.b,
1829 i: proc.g
1830 };
1831 proc.f = proc.f.d;
1832 }
1833 }
1834}
1835
1836
1837
1838function _Process_sleep(time)
1839{
1840 return _Scheduler_binding(function(callback) {
1841 var id = setTimeout(function() {
1842 callback(_Scheduler_succeed(_Utils_Tuple0));
1843 }, time);
1844
1845 return function() { clearTimeout(id); };
1846 });
1847}
1848
1849
1850
1851
1852// PROGRAMS
1853
1854
1855var _Platform_worker = F4(function(impl, flagDecoder, debugMetadata, args)
1856{
1857 return _Platform_initialize(
1858 flagDecoder,
1859 args,
1860 impl.init,
1861 impl.update,
1862 impl.subscriptions,
1863 function() { return function() {} }
1864 );
1865});
1866
1867
1868
1869// INITIALIZE A PROGRAM
1870
1871
1872function _Platform_initialize(flagDecoder, args, init, update, subscriptions, stepperBuilder)
1873{
1874 var result = A2(_Json_run, flagDecoder, _Json_wrap(args ? args['flags'] : undefined));
1875 $elm$core$Result$isOk(result) || _Debug_crash(2 /**/, _Json_errorToString(result.a) /**/);
1876 var managers = {};
1877 var initPair = init(result.a);
1878 var model = initPair.a;
1879 var stepper = stepperBuilder(sendToApp, model);
1880 var ports = _Platform_setupEffects(managers, sendToApp);
1881
1882 function sendToApp(msg, viewMetadata)
1883 {
1884 var pair = A2(update, msg, model);
1885 stepper(model = pair.a, viewMetadata);
1886 _Platform_enqueueEffects(managers, pair.b, subscriptions(model));
1887 }
1888
1889 _Platform_enqueueEffects(managers, initPair.b, subscriptions(model));
1890
1891 return ports ? { ports: ports } : {};
1892}
1893
1894
1895
1896// TRACK PRELOADS
1897//
1898// This is used by code in elm/browser and elm/http
1899// to register any HTTP requests that are triggered by init.
1900//
1901
1902
1903var _Platform_preload;
1904
1905
1906function _Platform_registerPreload(url)
1907{
1908 _Platform_preload.add(url);
1909}
1910
1911
1912
1913// EFFECT MANAGERS
1914
1915
1916var _Platform_effectManagers = {};
1917
1918
1919function _Platform_setupEffects(managers, sendToApp)
1920{
1921 var ports;
1922
1923 // setup all necessary effect managers
1924 for (var key in _Platform_effectManagers)
1925 {
1926 var manager = _Platform_effectManagers[key];
1927
1928 if (manager.a)
1929 {
1930 ports = ports || {};
1931 ports[key] = manager.a(key, sendToApp);
1932 }
1933
1934 managers[key] = _Platform_instantiateManager(manager, sendToApp);
1935 }
1936
1937 return ports;
1938}
1939
1940
1941function _Platform_createManager(init, onEffects, onSelfMsg, cmdMap, subMap)
1942{
1943 return {
1944 b: init,
1945 c: onEffects,
1946 d: onSelfMsg,
1947 e: cmdMap,
1948 f: subMap
1949 };
1950}
1951
1952
1953function _Platform_instantiateManager(info, sendToApp)
1954{
1955 var router = {
1956 g: sendToApp,
1957 h: undefined
1958 };
1959
1960 var onEffects = info.c;
1961 var onSelfMsg = info.d;
1962 var cmdMap = info.e;
1963 var subMap = info.f;
1964
1965 function loop(state)
1966 {
1967 return A2(_Scheduler_andThen, loop, _Scheduler_receive(function(msg)
1968 {
1969 var value = msg.a;
1970
1971 if (msg.$ === 0)
1972 {
1973 return A3(onSelfMsg, router, value, state);
1974 }
1975
1976 return cmdMap && subMap
1977 ? A4(onEffects, router, value.i, value.j, state)
1978 : A3(onEffects, router, cmdMap ? value.i : value.j, state);
1979 }));
1980 }
1981
1982 return router.h = _Scheduler_rawSpawn(A2(_Scheduler_andThen, loop, info.b));
1983}
1984
1985
1986
1987// ROUTING
1988
1989
1990var _Platform_sendToApp = F2(function(router, msg)
1991{
1992 return _Scheduler_binding(function(callback)
1993 {
1994 router.g(msg);
1995 callback(_Scheduler_succeed(_Utils_Tuple0));
1996 });
1997});
1998
1999
2000var _Platform_sendToSelf = F2(function(router, msg)
2001{
2002 return A2(_Scheduler_send, router.h, {
2003 $: 0,
2004 a: msg
2005 });
2006});
2007
2008
2009
2010// BAGS
2011
2012
2013function _Platform_leaf(home)
2014{
2015 return function(value)
2016 {
2017 return {
2018 $: 1,
2019 k: home,
2020 l: value
2021 };
2022 };
2023}
2024
2025
2026function _Platform_batch(list)
2027{
2028 return {
2029 $: 2,
2030 m: list
2031 };
2032}
2033
2034
2035var _Platform_map = F2(function(tagger, bag)
2036{
2037 return {
2038 $: 3,
2039 n: tagger,
2040 o: bag
2041 }
2042});
2043
2044
2045
2046// PIPE BAGS INTO EFFECT MANAGERS
2047//
2048// Effects must be queued!
2049//
2050// Say your init contains a synchronous command, like Time.now or Time.here
2051//
2052// - This will produce a batch of effects (FX_1)
2053// - The synchronous task triggers the subsequent `update` call
2054// - This will produce a batch of effects (FX_2)
2055//
2056// If we just start dispatching FX_2, subscriptions from FX_2 can be processed
2057// before subscriptions from FX_1. No good! Earlier versions of this code had
2058// this problem, leading to these reports:
2059//
2060// https://github.com/elm/core/issues/980
2061// https://github.com/elm/core/pull/981
2062// https://github.com/elm/compiler/issues/1776
2063//
2064// The queue is necessary to avoid ordering issues for synchronous commands.
2065
2066
2067// Why use true/false here? Why not just check the length of the queue?
2068// The goal is to detect "are we currently dispatching effects?" If we
2069// are, we need to bail and let the ongoing while loop handle things.
2070//
2071// Now say the queue has 1 element. When we dequeue the final element,
2072// the queue will be empty, but we are still actively dispatching effects.
2073// So you could get queue jumping in a really tricky category of cases.
2074//
2075var _Platform_effectsQueue = [];
2076var _Platform_effectsActive = false;
2077
2078
2079function _Platform_enqueueEffects(managers, cmdBag, subBag)
2080{
2081 _Platform_effectsQueue.push({ p: managers, q: cmdBag, r: subBag });
2082
2083 if (_Platform_effectsActive) return;
2084
2085 _Platform_effectsActive = true;
2086 for (var fx; fx = _Platform_effectsQueue.shift(); )
2087 {
2088 _Platform_dispatchEffects(fx.p, fx.q, fx.r);
2089 }
2090 _Platform_effectsActive = false;
2091}
2092
2093
2094function _Platform_dispatchEffects(managers, cmdBag, subBag)
2095{
2096 var effectsDict = {};
2097 _Platform_gatherEffects(true, cmdBag, effectsDict, null);
2098 _Platform_gatherEffects(false, subBag, effectsDict, null);
2099
2100 for (var home in managers)
2101 {
2102 _Scheduler_rawSend(managers[home], {
2103 $: 'fx',
2104 a: effectsDict[home] || { i: _List_Nil, j: _List_Nil }
2105 });
2106 }
2107}
2108
2109
2110function _Platform_gatherEffects(isCmd, bag, effectsDict, taggers)
2111{
2112 switch (bag.$)
2113 {
2114 case 1:
2115 var home = bag.k;
2116 var effect = _Platform_toEffect(isCmd, home, taggers, bag.l);
2117 effectsDict[home] = _Platform_insert(isCmd, effect, effectsDict[home]);
2118 return;
2119
2120 case 2:
2121 for (var list = bag.m; list.b; list = list.b) // WHILE_CONS
2122 {
2123 _Platform_gatherEffects(isCmd, list.a, effectsDict, taggers);
2124 }
2125 return;
2126
2127 case 3:
2128 _Platform_gatherEffects(isCmd, bag.o, effectsDict, {
2129 s: bag.n,
2130 t: taggers
2131 });
2132 return;
2133 }
2134}
2135
2136
2137function _Platform_toEffect(isCmd, home, taggers, value)
2138{
2139 function applyTaggers(x)
2140 {
2141 for (var temp = taggers; temp; temp = temp.t)
2142 {
2143 x = temp.s(x);
2144 }
2145 return x;
2146 }
2147
2148 var map = isCmd
2149 ? _Platform_effectManagers[home].e
2150 : _Platform_effectManagers[home].f;
2151
2152 return A2(map, applyTaggers, value)
2153}
2154
2155
2156function _Platform_insert(isCmd, newEffect, effects)
2157{
2158 effects = effects || { i: _List_Nil, j: _List_Nil };
2159
2160 isCmd
2161 ? (effects.i = _List_Cons(newEffect, effects.i))
2162 : (effects.j = _List_Cons(newEffect, effects.j));
2163
2164 return effects;
2165}
2166
2167
2168
2169// PORTS
2170
2171
2172function _Platform_checkPortName(name)
2173{
2174 if (_Platform_effectManagers[name])
2175 {
2176 _Debug_crash(3, name)
2177 }
2178}
2179
2180
2181
2182// OUTGOING PORTS
2183
2184
2185function _Platform_outgoingPort(name, converter)
2186{
2187 _Platform_checkPortName(name);
2188 _Platform_effectManagers[name] = {
2189 e: _Platform_outgoingPortMap,
2190 u: converter,
2191 a: _Platform_setupOutgoingPort
2192 };
2193 return _Platform_leaf(name);
2194}
2195
2196
2197var _Platform_outgoingPortMap = F2(function(tagger, value) { return value; });
2198
2199
2200function _Platform_setupOutgoingPort(name)
2201{
2202 var subs = [];
2203 var converter = _Platform_effectManagers[name].u;
2204
2205 // CREATE MANAGER
2206
2207 var init = _Process_sleep(0);
2208
2209 _Platform_effectManagers[name].b = init;
2210 _Platform_effectManagers[name].c = F3(function(router, cmdList, state)
2211 {
2212 for ( ; cmdList.b; cmdList = cmdList.b) // WHILE_CONS
2213 {
2214 // grab a separate reference to subs in case unsubscribe is called
2215 var currentSubs = subs;
2216 var value = _Json_unwrap(converter(cmdList.a));
2217 for (var i = 0; i < currentSubs.length; i++)
2218 {
2219 currentSubs[i](value);
2220 }
2221 }
2222 return init;
2223 });
2224
2225 // PUBLIC API
2226
2227 function subscribe(callback)
2228 {
2229 subs.push(callback);
2230 }
2231
2232 function unsubscribe(callback)
2233 {
2234 // copy subs into a new array in case unsubscribe is called within a
2235 // subscribed callback
2236 subs = subs.slice();
2237 var index = subs.indexOf(callback);
2238 if (index >= 0)
2239 {
2240 subs.splice(index, 1);
2241 }
2242 }
2243
2244 return {
2245 subscribe: subscribe,
2246 unsubscribe: unsubscribe
2247 };
2248}
2249
2250
2251
2252// INCOMING PORTS
2253
2254
2255function _Platform_incomingPort(name, converter)
2256{
2257 _Platform_checkPortName(name);
2258 _Platform_effectManagers[name] = {
2259 f: _Platform_incomingPortMap,
2260 u: converter,
2261 a: _Platform_setupIncomingPort
2262 };
2263 return _Platform_leaf(name);
2264}
2265
2266
2267var _Platform_incomingPortMap = F2(function(tagger, finalTagger)
2268{
2269 return function(value)
2270 {
2271 return tagger(finalTagger(value));
2272 };
2273});
2274
2275
2276function _Platform_setupIncomingPort(name, sendToApp)
2277{
2278 var subs = _List_Nil;
2279 var converter = _Platform_effectManagers[name].u;
2280
2281 // CREATE MANAGER
2282
2283 var init = _Scheduler_succeed(null);
2284
2285 _Platform_effectManagers[name].b = init;
2286 _Platform_effectManagers[name].c = F3(function(router, subList, state)
2287 {
2288 subs = subList;
2289 return init;
2290 });
2291
2292 // PUBLIC API
2293
2294 function send(incomingValue)
2295 {
2296 var result = A2(_Json_run, converter, _Json_wrap(incomingValue));
2297
2298 $elm$core$Result$isOk(result) || _Debug_crash(4, name, result.a);
2299
2300 var value = result.a;
2301 for (var temp = subs; temp.b; temp = temp.b) // WHILE_CONS
2302 {
2303 sendToApp(temp.a(value));
2304 }
2305 }
2306
2307 return { send: send };
2308}
2309
2310
2311
2312// EXPORT ELM MODULES
2313//
2314// Have DEBUG and PROD versions so that we can (1) give nicer errors in
2315// debug mode and (2) not pay for the bits needed for that in prod mode.
2316//
2317
2318
2319function _Platform_export_UNUSED(exports)
2320{
2321 scope['Elm']
2322 ? _Platform_mergeExportsProd(scope['Elm'], exports)
2323 : scope['Elm'] = exports;
2324}
2325
2326
2327function _Platform_mergeExportsProd(obj, exports)
2328{
2329 for (var name in exports)
2330 {
2331 (name in obj)
2332 ? (name == 'init')
2333 ? _Debug_crash(6)
2334 : _Platform_mergeExportsProd(obj[name], exports[name])
2335 : (obj[name] = exports[name]);
2336 }
2337}
2338
2339
2340function _Platform_export(exports)
2341{
2342 scope['Elm']
2343 ? _Platform_mergeExportsDebug('Elm', scope['Elm'], exports)
2344 : scope['Elm'] = exports;
2345}
2346
2347
2348function _Platform_mergeExportsDebug(moduleName, obj, exports)
2349{
2350 for (var name in exports)
2351 {
2352 (name in obj)
2353 ? (name == 'init')
2354 ? _Debug_crash(6, moduleName)
2355 : _Platform_mergeExportsDebug(moduleName + '.' + name, obj[name], exports[name])
2356 : (obj[name] = exports[name]);
2357 }
2358}
2359
2360
2361
2362
2363// HELPERS
2364
2365
2366var _VirtualDom_divertHrefToApp;
2367
2368var _VirtualDom_doc = typeof document !== 'undefined' ? document : {};
2369
2370
2371function _VirtualDom_appendChild(parent, child)
2372{
2373 parent.appendChild(child);
2374}
2375
2376var _VirtualDom_init = F4(function(virtualNode, flagDecoder, debugMetadata, args)
2377{
2378 // NOTE: this function needs _Platform_export available to work
2379
2380 /**_UNUSED/
2381 var node = args['node'];
2382 //*/
2383 /**/
2384 var node = args && args['node'] ? args['node'] : _Debug_crash(0);
2385 //*/
2386
2387 node.parentNode.replaceChild(
2388 _VirtualDom_render(virtualNode, function() {}),
2389 node
2390 );
2391
2392 return {};
2393});
2394
2395
2396
2397// TEXT
2398
2399
2400function _VirtualDom_text(string)
2401{
2402 return {
2403 $: 0,
2404 a: string
2405 };
2406}
2407
2408
2409
2410// NODE
2411
2412
2413var _VirtualDom_nodeNS = F2(function(namespace, tag)
2414{
2415 return F2(function(factList, kidList)
2416 {
2417 for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
2418 {
2419 var kid = kidList.a;
2420 descendantsCount += (kid.b || 0);
2421 kids.push(kid);
2422 }
2423 descendantsCount += kids.length;
2424
2425 return {
2426 $: 1,
2427 c: tag,
2428 d: _VirtualDom_organizeFacts(factList),
2429 e: kids,
2430 f: namespace,
2431 b: descendantsCount
2432 };
2433 });
2434});
2435
2436
2437var _VirtualDom_node = _VirtualDom_nodeNS(undefined);
2438
2439
2440
2441// KEYED NODE
2442
2443
2444var _VirtualDom_keyedNodeNS = F2(function(namespace, tag)
2445{
2446 return F2(function(factList, kidList)
2447 {
2448 for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
2449 {
2450 var kid = kidList.a;
2451 descendantsCount += (kid.b.b || 0);
2452 kids.push(kid);
2453 }
2454 descendantsCount += kids.length;
2455
2456 return {
2457 $: 2,
2458 c: tag,
2459 d: _VirtualDom_organizeFacts(factList),
2460 e: kids,
2461 f: namespace,
2462 b: descendantsCount
2463 };
2464 });
2465});
2466
2467
2468var _VirtualDom_keyedNode = _VirtualDom_keyedNodeNS(undefined);
2469
2470
2471
2472// CUSTOM
2473
2474
2475function _VirtualDom_custom(factList, model, render, diff)
2476{
2477 return {
2478 $: 3,
2479 d: _VirtualDom_organizeFacts(factList),
2480 g: model,
2481 h: render,
2482 i: diff
2483 };
2484}
2485
2486
2487
2488// MAP
2489
2490
2491var _VirtualDom_map = F2(function(tagger, node)
2492{
2493 return {
2494 $: 4,
2495 j: tagger,
2496 k: node,
2497 b: 1 + (node.b || 0)
2498 };
2499});
2500
2501
2502
2503// LAZY
2504
2505
2506function _VirtualDom_thunk(refs, thunk)
2507{
2508 return {
2509 $: 5,
2510 l: refs,
2511 m: thunk,
2512 k: undefined
2513 };
2514}
2515
2516var _VirtualDom_lazy = F2(function(func, a)
2517{
2518 return _VirtualDom_thunk([func, a], function() {
2519 return func(a);
2520 });
2521});
2522
2523var _VirtualDom_lazy2 = F3(function(func, a, b)
2524{
2525 return _VirtualDom_thunk([func, a, b], function() {
2526 return A2(func, a, b);
2527 });
2528});
2529
2530var _VirtualDom_lazy3 = F4(function(func, a, b, c)
2531{
2532 return _VirtualDom_thunk([func, a, b, c], function() {
2533 return A3(func, a, b, c);
2534 });
2535});
2536
2537var _VirtualDom_lazy4 = F5(function(func, a, b, c, d)
2538{
2539 return _VirtualDom_thunk([func, a, b, c, d], function() {
2540 return A4(func, a, b, c, d);
2541 });
2542});
2543
2544var _VirtualDom_lazy5 = F6(function(func, a, b, c, d, e)
2545{
2546 return _VirtualDom_thunk([func, a, b, c, d, e], function() {
2547 return A5(func, a, b, c, d, e);
2548 });
2549});
2550
2551var _VirtualDom_lazy6 = F7(function(func, a, b, c, d, e, f)
2552{
2553 return _VirtualDom_thunk([func, a, b, c, d, e, f], function() {
2554 return A6(func, a, b, c, d, e, f);
2555 });
2556});
2557
2558var _VirtualDom_lazy7 = F8(function(func, a, b, c, d, e, f, g)
2559{
2560 return _VirtualDom_thunk([func, a, b, c, d, e, f, g], function() {
2561 return A7(func, a, b, c, d, e, f, g);
2562 });
2563});
2564
2565var _VirtualDom_lazy8 = F9(function(func, a, b, c, d, e, f, g, h)
2566{
2567 return _VirtualDom_thunk([func, a, b, c, d, e, f, g, h], function() {
2568 return A8(func, a, b, c, d, e, f, g, h);
2569 });
2570});
2571
2572
2573
2574// FACTS
2575
2576
2577var _VirtualDom_on = F2(function(key, handler)
2578{
2579 return {
2580 $: 'a0',
2581 n: key,
2582 o: handler
2583 };
2584});
2585var _VirtualDom_style = F2(function(key, value)
2586{
2587 return {
2588 $: 'a1',
2589 n: key,
2590 o: value
2591 };
2592});
2593var _VirtualDom_property = F2(function(key, value)
2594{
2595 return {
2596 $: 'a2',
2597 n: key,
2598 o: value
2599 };
2600});
2601var _VirtualDom_attribute = F2(function(key, value)
2602{
2603 return {
2604 $: 'a3',
2605 n: key,
2606 o: value
2607 };
2608});
2609var _VirtualDom_attributeNS = F3(function(namespace, key, value)
2610{
2611 return {
2612 $: 'a4',
2613 n: key,
2614 o: { f: namespace, o: value }
2615 };
2616});
2617
2618
2619
2620// XSS ATTACK VECTOR CHECKS
2621
2622
2623function _VirtualDom_noScript(tag)
2624{
2625 return tag == 'script' ? 'p' : tag;
2626}
2627
2628function _VirtualDom_noOnOrFormAction(key)
2629{
2630 return /^(on|formAction$)/i.test(key) ? 'data-' + key : key;
2631}
2632
2633function _VirtualDom_noInnerHtmlOrFormAction(key)
2634{
2635 return key == 'innerHTML' || key == 'formAction' ? 'data-' + key : key;
2636}
2637
2638function _VirtualDom_noJavaScriptUri_UNUSED(value)
2639{
2640 return /^javascript:/i.test(value.replace(/\s/g,'')) ? '' : value;
2641}
2642
2643function _VirtualDom_noJavaScriptUri(value)
2644{
2645 return /^javascript:/i.test(value.replace(/\s/g,''))
2646 ? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'
2647 : value;
2648}
2649
2650function _VirtualDom_noJavaScriptOrHtmlUri_UNUSED(value)
2651{
2652 return /^\s*(javascript:|data:text\/html)/i.test(value) ? '' : value;
2653}
2654
2655function _VirtualDom_noJavaScriptOrHtmlUri(value)
2656{
2657 return /^\s*(javascript:|data:text\/html)/i.test(value)
2658 ? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'
2659 : value;
2660}
2661
2662
2663
2664// MAP FACTS
2665
2666
2667var _VirtualDom_mapAttribute = F2(function(func, attr)
2668{
2669 return (attr.$ === 'a0')
2670 ? A2(_VirtualDom_on, attr.n, _VirtualDom_mapHandler(func, attr.o))
2671 : attr;
2672});
2673
2674function _VirtualDom_mapHandler(func, handler)
2675{
2676 var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler);
2677
2678 // 0 = Normal
2679 // 1 = MayStopPropagation
2680 // 2 = MayPreventDefault
2681 // 3 = Custom
2682
2683 return {
2684 $: handler.$,
2685 a:
2686 !tag
2687 ? A2($elm$json$Json$Decode$map, func, handler.a)
2688 :
2689 A3($elm$json$Json$Decode$map2,
2690 tag < 3
2691 ? _VirtualDom_mapEventTuple
2692 : _VirtualDom_mapEventRecord,
2693 $elm$json$Json$Decode$succeed(func),
2694 handler.a
2695 )
2696 };
2697}
2698
2699var _VirtualDom_mapEventTuple = F2(function(func, tuple)
2700{
2701 return _Utils_Tuple2(func(tuple.a), tuple.b);
2702});
2703
2704var _VirtualDom_mapEventRecord = F2(function(func, record)
2705{
2706 return {
2707 message: func(record.message),
2708 stopPropagation: record.stopPropagation,
2709 preventDefault: record.preventDefault
2710 }
2711});
2712
2713
2714
2715// ORGANIZE FACTS
2716
2717
2718function _VirtualDom_organizeFacts(factList)
2719{
2720 for (var facts = {}; factList.b; factList = factList.b) // WHILE_CONS
2721 {
2722 var entry = factList.a;
2723
2724 var tag = entry.$;
2725 var key = entry.n;
2726 var value = entry.o;
2727
2728 if (tag === 'a2')
2729 {
2730 (key === 'className')
2731 ? _VirtualDom_addClass(facts, key, _Json_unwrap(value))
2732 : facts[key] = _Json_unwrap(value);
2733
2734 continue;
2735 }
2736
2737 var subFacts = facts[tag] || (facts[tag] = {});
2738 (tag === 'a3' && key === 'class')
2739 ? _VirtualDom_addClass(subFacts, key, value)
2740 : subFacts[key] = value;
2741 }
2742
2743 return facts;
2744}
2745
2746function _VirtualDom_addClass(object, key, newClass)
2747{
2748 var classes = object[key];
2749 object[key] = classes ? classes + ' ' + newClass : newClass;
2750}
2751
2752
2753
2754// RENDER
2755
2756
2757function _VirtualDom_render(vNode, eventNode)
2758{
2759 var tag = vNode.$;
2760
2761 if (tag === 5)
2762 {
2763 return _VirtualDom_render(vNode.k || (vNode.k = vNode.m()), eventNode);
2764 }
2765
2766 if (tag === 0)
2767 {
2768 return _VirtualDom_doc.createTextNode(vNode.a);
2769 }
2770
2771 if (tag === 4)
2772 {
2773 var subNode = vNode.k;
2774 var tagger = vNode.j;
2775
2776 while (subNode.$ === 4)
2777 {
2778 typeof tagger !== 'object'
2779 ? tagger = [tagger, subNode.j]
2780 : tagger.push(subNode.j);
2781
2782 subNode = subNode.k;
2783 }
2784
2785 var subEventRoot = { j: tagger, p: eventNode };
2786 var domNode = _VirtualDom_render(subNode, subEventRoot);
2787 domNode.elm_event_node_ref = subEventRoot;
2788 return domNode;
2789 }
2790
2791 if (tag === 3)
2792 {
2793 var domNode = vNode.h(vNode.g);
2794 _VirtualDom_applyFacts(domNode, eventNode, vNode.d);
2795 return domNode;
2796 }
2797
2798 // at this point `tag` must be 1 or 2
2799
2800 var domNode = vNode.f
2801 ? _VirtualDom_doc.createElementNS(vNode.f, vNode.c)
2802 : _VirtualDom_doc.createElement(vNode.c);
2803
2804 if (_VirtualDom_divertHrefToApp && vNode.c == 'a')
2805 {
2806 domNode.addEventListener('click', _VirtualDom_divertHrefToApp(domNode));
2807 }
2808
2809 _VirtualDom_applyFacts(domNode, eventNode, vNode.d);
2810
2811 for (var kids = vNode.e, i = 0; i < kids.length; i++)
2812 {
2813 _VirtualDom_appendChild(domNode, _VirtualDom_render(tag === 1 ? kids[i] : kids[i].b, eventNode));
2814 }
2815
2816 return domNode;
2817}
2818
2819
2820
2821// APPLY FACTS
2822
2823
2824function _VirtualDom_applyFacts(domNode, eventNode, facts)
2825{
2826 for (var key in facts)
2827 {
2828 var value = facts[key];
2829
2830 key === 'a1'
2831 ? _VirtualDom_applyStyles(domNode, value)
2832 :
2833 key === 'a0'
2834 ? _VirtualDom_applyEvents(domNode, eventNode, value)
2835 :
2836 key === 'a3'
2837 ? _VirtualDom_applyAttrs(domNode, value)
2838 :
2839 key === 'a4'
2840 ? _VirtualDom_applyAttrsNS(domNode, value)
2841 :
2842 ((key !== 'value' && key !== 'checked') || domNode[key] !== value) && (domNode[key] = value);
2843 }
2844}
2845
2846
2847
2848// APPLY STYLES
2849
2850
2851function _VirtualDom_applyStyles(domNode, styles)
2852{
2853 var domNodeStyle = domNode.style;
2854
2855 for (var key in styles)
2856 {
2857 domNodeStyle[key] = styles[key];
2858 }
2859}
2860
2861
2862
2863// APPLY ATTRS
2864
2865
2866function _VirtualDom_applyAttrs(domNode, attrs)
2867{
2868 for (var key in attrs)
2869 {
2870 var value = attrs[key];
2871 typeof value !== 'undefined'
2872 ? domNode.setAttribute(key, value)
2873 : domNode.removeAttribute(key);
2874 }
2875}
2876
2877
2878
2879// APPLY NAMESPACED ATTRS
2880
2881
2882function _VirtualDom_applyAttrsNS(domNode, nsAttrs)
2883{
2884 for (var key in nsAttrs)
2885 {
2886 var pair = nsAttrs[key];
2887 var namespace = pair.f;
2888 var value = pair.o;
2889
2890 typeof value !== 'undefined'
2891 ? domNode.setAttributeNS(namespace, key, value)
2892 : domNode.removeAttributeNS(namespace, key);
2893 }
2894}
2895
2896
2897
2898// APPLY EVENTS
2899
2900
2901function _VirtualDom_applyEvents(domNode, eventNode, events)
2902{
2903 var allCallbacks = domNode.elmFs || (domNode.elmFs = {});
2904
2905 for (var key in events)
2906 {
2907 var newHandler = events[key];
2908 var oldCallback = allCallbacks[key];
2909
2910 if (!newHandler)
2911 {
2912 domNode.removeEventListener(key, oldCallback);
2913 allCallbacks[key] = undefined;
2914 continue;
2915 }
2916
2917 if (oldCallback)
2918 {
2919 var oldHandler = oldCallback.q;
2920 if (oldHandler.$ === newHandler.$)
2921 {
2922 oldCallback.q = newHandler;
2923 continue;
2924 }
2925 domNode.removeEventListener(key, oldCallback);
2926 }
2927
2928 oldCallback = _VirtualDom_makeCallback(eventNode, newHandler);
2929 domNode.addEventListener(key, oldCallback,
2930 _VirtualDom_passiveSupported
2931 && { passive: $elm$virtual_dom$VirtualDom$toHandlerInt(newHandler) < 2 }
2932 );
2933 allCallbacks[key] = oldCallback;
2934 }
2935}
2936
2937
2938
2939// PASSIVE EVENTS
2940
2941
2942var _VirtualDom_passiveSupported;
2943
2944try
2945{
2946 window.addEventListener('t', null, Object.defineProperty({}, 'passive', {
2947 get: function() { _VirtualDom_passiveSupported = true; }
2948 }));
2949}
2950catch(e) {}
2951
2952
2953
2954// EVENT HANDLERS
2955
2956
2957function _VirtualDom_makeCallback(eventNode, initialHandler)
2958{
2959 function callback(event)
2960 {
2961 var handler = callback.q;
2962 var result = _Json_runHelp(handler.a, event);
2963
2964 if (!$elm$core$Result$isOk(result))
2965 {
2966 return;
2967 }
2968
2969 var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler);
2970
2971 // 0 = Normal
2972 // 1 = MayStopPropagation
2973 // 2 = MayPreventDefault
2974 // 3 = Custom
2975
2976 var value = result.a;
2977 var message = !tag ? value : tag < 3 ? value.a : value.message;
2978 var stopPropagation = tag == 1 ? value.b : tag == 3 && value.stopPropagation;
2979 var currentEventNode = (
2980 stopPropagation && event.stopPropagation(),
2981 (tag == 2 ? value.b : tag == 3 && value.preventDefault) && event.preventDefault(),
2982 eventNode
2983 );
2984 var tagger;
2985 var i;
2986 while (tagger = currentEventNode.j)
2987 {
2988 if (typeof tagger == 'function')
2989 {
2990 message = tagger(message);
2991 }
2992 else
2993 {
2994 for (var i = tagger.length; i--; )
2995 {
2996 message = tagger[i](message);
2997 }
2998 }
2999 currentEventNode = currentEventNode.p;
3000 }
3001 currentEventNode(message, stopPropagation); // stopPropagation implies isSync
3002 }
3003
3004 callback.q = initialHandler;
3005
3006 return callback;
3007}
3008
3009function _VirtualDom_equalEvents(x, y)
3010{
3011 return x.$ == y.$ && _Json_equality(x.a, y.a);
3012}
3013
3014
3015
3016// DIFF
3017
3018
3019// TODO: Should we do patches like in iOS?
3020//
3021// type Patch
3022// = At Int Patch
3023// | Batch (List Patch)
3024// | Change ...
3025//
3026// How could it not be better?
3027//
3028function _VirtualDom_diff(x, y)
3029{
3030 var patches = [];
3031 _VirtualDom_diffHelp(x, y, patches, 0);
3032 return patches;
3033}
3034
3035
3036function _VirtualDom_pushPatch(patches, type, index, data)
3037{
3038 var patch = {
3039 $: type,
3040 r: index,
3041 s: data,
3042 t: undefined,
3043 u: undefined
3044 };
3045 patches.push(patch);
3046 return patch;
3047}
3048
3049
3050function _VirtualDom_diffHelp(x, y, patches, index)
3051{
3052 if (x === y)
3053 {
3054 return;
3055 }
3056
3057 var xType = x.$;
3058 var yType = y.$;
3059
3060 // Bail if you run into different types of nodes. Implies that the
3061 // structure has changed significantly and it's not worth a diff.
3062 if (xType !== yType)
3063 {
3064 if (xType === 1 && yType === 2)
3065 {
3066 y = _VirtualDom_dekey(y);
3067 yType = 1;
3068 }
3069 else
3070 {
3071 _VirtualDom_pushPatch(patches, 0, index, y);
3072 return;
3073 }
3074 }
3075
3076 // Now we know that both nodes are the same $.
3077 switch (yType)
3078 {
3079 case 5:
3080 var xRefs = x.l;
3081 var yRefs = y.l;
3082 var i = xRefs.length;
3083 var same = i === yRefs.length;
3084 while (same && i--)
3085 {
3086 same = xRefs[i] === yRefs[i];
3087 }
3088 if (same)
3089 {
3090 y.k = x.k;
3091 return;
3092 }
3093 y.k = y.m();
3094 var subPatches = [];
3095 _VirtualDom_diffHelp(x.k, y.k, subPatches, 0);
3096 subPatches.length > 0 && _VirtualDom_pushPatch(patches, 1, index, subPatches);
3097 return;
3098
3099 case 4:
3100 // gather nested taggers
3101 var xTaggers = x.j;
3102 var yTaggers = y.j;
3103 var nesting = false;
3104
3105 var xSubNode = x.k;
3106 while (xSubNode.$ === 4)
3107 {
3108 nesting = true;
3109
3110 typeof xTaggers !== 'object'
3111 ? xTaggers = [xTaggers, xSubNode.j]
3112 : xTaggers.push(xSubNode.j);
3113
3114 xSubNode = xSubNode.k;
3115 }
3116
3117 var ySubNode = y.k;
3118 while (ySubNode.$ === 4)
3119 {
3120 nesting = true;
3121
3122 typeof yTaggers !== 'object'
3123 ? yTaggers = [yTaggers, ySubNode.j]
3124 : yTaggers.push(ySubNode.j);
3125
3126 ySubNode = ySubNode.k;
3127 }
3128
3129 // Just bail if different numbers of taggers. This implies the
3130 // structure of the virtual DOM has changed.
3131 if (nesting && xTaggers.length !== yTaggers.length)
3132 {
3133 _VirtualDom_pushPatch(patches, 0, index, y);
3134 return;
3135 }
3136
3137 // check if taggers are "the same"
3138 if (nesting ? !_VirtualDom_pairwiseRefEqual(xTaggers, yTaggers) : xTaggers !== yTaggers)
3139 {
3140 _VirtualDom_pushPatch(patches, 2, index, yTaggers);
3141 }
3142
3143 // diff everything below the taggers
3144 _VirtualDom_diffHelp(xSubNode, ySubNode, patches, index + 1);
3145 return;
3146
3147 case 0:
3148 if (x.a !== y.a)
3149 {
3150 _VirtualDom_pushPatch(patches, 3, index, y.a);
3151 }
3152 return;
3153
3154 case 1:
3155 _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKids);
3156 return;
3157
3158 case 2:
3159 _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKeyedKids);
3160 return;
3161
3162 case 3:
3163 if (x.h !== y.h)
3164 {
3165 _VirtualDom_pushPatch(patches, 0, index, y);
3166 return;
3167 }
3168
3169 var factsDiff = _VirtualDom_diffFacts(x.d, y.d);
3170 factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);
3171
3172 var patch = y.i(x.g, y.g);
3173 patch && _VirtualDom_pushPatch(patches, 5, index, patch);
3174
3175 return;
3176 }
3177}
3178
3179// assumes the incoming arrays are the same length
3180function _VirtualDom_pairwiseRefEqual(as, bs)
3181{
3182 for (var i = 0; i < as.length; i++)
3183 {
3184 if (as[i] !== bs[i])
3185 {
3186 return false;
3187 }
3188 }
3189
3190 return true;
3191}
3192
3193function _VirtualDom_diffNodes(x, y, patches, index, diffKids)
3194{
3195 // Bail if obvious indicators have changed. Implies more serious
3196 // structural changes such that it's not worth it to diff.
3197 if (x.c !== y.c || x.f !== y.f)
3198 {
3199 _VirtualDom_pushPatch(patches, 0, index, y);
3200 return;
3201 }
3202
3203 var factsDiff = _VirtualDom_diffFacts(x.d, y.d);
3204 factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);
3205
3206 diffKids(x, y, patches, index);
3207}
3208
3209
3210
3211// DIFF FACTS
3212
3213
3214// TODO Instead of creating a new diff object, it's possible to just test if
3215// there *is* a diff. During the actual patch, do the diff again and make the
3216// modifications directly. This way, there's no new allocations. Worth it?
3217function _VirtualDom_diffFacts(x, y, category)
3218{
3219 var diff;
3220
3221 // look for changes and removals
3222 for (var xKey in x)
3223 {
3224 if (xKey === 'a1' || xKey === 'a0' || xKey === 'a3' || xKey === 'a4')
3225 {
3226 var subDiff = _VirtualDom_diffFacts(x[xKey], y[xKey] || {}, xKey);
3227 if (subDiff)
3228 {
3229 diff = diff || {};
3230 diff[xKey] = subDiff;
3231 }
3232 continue;
3233 }
3234
3235 // remove if not in the new facts
3236 if (!(xKey in y))
3237 {
3238 diff = diff || {};
3239 diff[xKey] =
3240 !category
3241 ? (typeof x[xKey] === 'string' ? '' : null)
3242 :
3243 (category === 'a1')
3244 ? ''
3245 :
3246 (category === 'a0' || category === 'a3')
3247 ? undefined
3248 :
3249 { f: x[xKey].f, o: undefined };
3250
3251 continue;
3252 }
3253
3254 var xValue = x[xKey];
3255 var yValue = y[xKey];
3256
3257 // reference equal, so don't worry about it
3258 if (xValue === yValue && xKey !== 'value' && xKey !== 'checked'
3259 || category === 'a0' && _VirtualDom_equalEvents(xValue, yValue))
3260 {
3261 continue;
3262 }
3263
3264 diff = diff || {};
3265 diff[xKey] = yValue;
3266 }
3267
3268 // add new stuff
3269 for (var yKey in y)
3270 {
3271 if (!(yKey in x))
3272 {
3273 diff = diff || {};
3274 diff[yKey] = y[yKey];
3275 }
3276 }
3277
3278 return diff;
3279}
3280
3281
3282
3283// DIFF KIDS
3284
3285
3286function _VirtualDom_diffKids(xParent, yParent, patches, index)
3287{
3288 var xKids = xParent.e;
3289 var yKids = yParent.e;
3290
3291 var xLen = xKids.length;
3292 var yLen = yKids.length;
3293
3294 // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS
3295
3296 if (xLen > yLen)
3297 {
3298 _VirtualDom_pushPatch(patches, 6, index, {
3299 v: yLen,
3300 i: xLen - yLen
3301 });
3302 }
3303 else if (xLen < yLen)
3304 {
3305 _VirtualDom_pushPatch(patches, 7, index, {
3306 v: xLen,
3307 e: yKids
3308 });
3309 }
3310
3311 // PAIRWISE DIFF EVERYTHING ELSE
3312
3313 for (var minLen = xLen < yLen ? xLen : yLen, i = 0; i < minLen; i++)
3314 {
3315 var xKid = xKids[i];
3316 _VirtualDom_diffHelp(xKid, yKids[i], patches, ++index);
3317 index += xKid.b || 0;
3318 }
3319}
3320
3321
3322
3323// KEYED DIFF
3324
3325
3326function _VirtualDom_diffKeyedKids(xParent, yParent, patches, rootIndex)
3327{
3328 var localPatches = [];
3329
3330 var changes = {}; // Dict String Entry
3331 var inserts = []; // Array { index : Int, entry : Entry }
3332 // type Entry = { tag : String, vnode : VNode, index : Int, data : _ }
3333
3334 var xKids = xParent.e;
3335 var yKids = yParent.e;
3336 var xLen = xKids.length;
3337 var yLen = yKids.length;
3338 var xIndex = 0;
3339 var yIndex = 0;
3340
3341 var index = rootIndex;
3342
3343 while (xIndex < xLen && yIndex < yLen)
3344 {
3345 var x = xKids[xIndex];
3346 var y = yKids[yIndex];
3347
3348 var xKey = x.a;
3349 var yKey = y.a;
3350 var xNode = x.b;
3351 var yNode = y.b;
3352
3353 var newMatch = undefined;
3354 var oldMatch = undefined;
3355
3356 // check if keys match
3357
3358 if (xKey === yKey)
3359 {
3360 index++;
3361 _VirtualDom_diffHelp(xNode, yNode, localPatches, index);
3362 index += xNode.b || 0;
3363
3364 xIndex++;
3365 yIndex++;
3366 continue;
3367 }
3368
3369 // look ahead 1 to detect insertions and removals.
3370
3371 var xNext = xKids[xIndex + 1];
3372 var yNext = yKids[yIndex + 1];
3373
3374 if (xNext)
3375 {
3376 var xNextKey = xNext.a;
3377 var xNextNode = xNext.b;
3378 oldMatch = yKey === xNextKey;
3379 }
3380
3381 if (yNext)
3382 {
3383 var yNextKey = yNext.a;
3384 var yNextNode = yNext.b;
3385 newMatch = xKey === yNextKey;
3386 }
3387
3388
3389 // swap x and y
3390 if (newMatch && oldMatch)
3391 {
3392 index++;
3393 _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index);
3394 _VirtualDom_insertNode(changes, localPatches, xKey, yNode, yIndex, inserts);
3395 index += xNode.b || 0;
3396
3397 index++;
3398 _VirtualDom_removeNode(changes, localPatches, xKey, xNextNode, index);
3399 index += xNextNode.b || 0;
3400
3401 xIndex += 2;
3402 yIndex += 2;
3403 continue;
3404 }
3405
3406 // insert y
3407 if (newMatch)
3408 {
3409 index++;
3410 _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts);
3411 _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index);
3412 index += xNode.b || 0;
3413
3414 xIndex += 1;
3415 yIndex += 2;
3416 continue;
3417 }
3418
3419 // remove x
3420 if (oldMatch)
3421 {
3422 index++;
3423 _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index);
3424 index += xNode.b || 0;
3425
3426 index++;
3427 _VirtualDom_diffHelp(xNextNode, yNode, localPatches, index);
3428 index += xNextNode.b || 0;
3429
3430 xIndex += 2;
3431 yIndex += 1;
3432 continue;
3433 }
3434
3435 // remove x, insert y
3436 if (xNext && xNextKey === yNextKey)
3437 {
3438 index++;
3439 _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index);
3440 _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts);
3441 index += xNode.b || 0;
3442
3443 index++;
3444 _VirtualDom_diffHelp(xNextNode, yNextNode, localPatches, index);
3445 index += xNextNode.b || 0;
3446
3447 xIndex += 2;
3448 yIndex += 2;
3449 continue;
3450 }
3451
3452 break;
3453 }
3454
3455 // eat up any remaining nodes with removeNode and insertNode
3456
3457 while (xIndex < xLen)
3458 {
3459 index++;
3460 var x = xKids[xIndex];
3461 var xNode = x.b;
3462 _VirtualDom_removeNode(changes, localPatches, x.a, xNode, index);
3463 index += xNode.b || 0;
3464 xIndex++;
3465 }
3466
3467 while (yIndex < yLen)
3468 {
3469 var endInserts = endInserts || [];
3470 var y = yKids[yIndex];
3471 _VirtualDom_insertNode(changes, localPatches, y.a, y.b, undefined, endInserts);
3472 yIndex++;
3473 }
3474
3475 if (localPatches.length > 0 || inserts.length > 0 || endInserts)
3476 {
3477 _VirtualDom_pushPatch(patches, 8, rootIndex, {
3478 w: localPatches,
3479 x: inserts,
3480 y: endInserts
3481 });
3482 }
3483}
3484
3485
3486
3487// CHANGES FROM KEYED DIFF
3488
3489
3490var _VirtualDom_POSTFIX = '_elmW6BL';
3491
3492
3493function _VirtualDom_insertNode(changes, localPatches, key, vnode, yIndex, inserts)
3494{
3495 var entry = changes[key];
3496
3497 // never seen this key before
3498 if (!entry)
3499 {
3500 entry = {
3501 c: 0,
3502 z: vnode,
3503 r: yIndex,
3504 s: undefined
3505 };
3506
3507 inserts.push({ r: yIndex, A: entry });
3508 changes[key] = entry;
3509
3510 return;
3511 }
3512
3513 // this key was removed earlier, a match!
3514 if (entry.c === 1)
3515 {
3516 inserts.push({ r: yIndex, A: entry });
3517
3518 entry.c = 2;
3519 var subPatches = [];
3520 _VirtualDom_diffHelp(entry.z, vnode, subPatches, entry.r);
3521 entry.r = yIndex;
3522 entry.s.s = {
3523 w: subPatches,
3524 A: entry
3525 };
3526
3527 return;
3528 }
3529
3530 // this key has already been inserted or moved, a duplicate!
3531 _VirtualDom_insertNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, yIndex, inserts);
3532}
3533
3534
3535function _VirtualDom_removeNode(changes, localPatches, key, vnode, index)
3536{
3537 var entry = changes[key];
3538
3539 // never seen this key before
3540 if (!entry)
3541 {
3542 var patch = _VirtualDom_pushPatch(localPatches, 9, index, undefined);
3543
3544 changes[key] = {
3545 c: 1,
3546 z: vnode,
3547 r: index,
3548 s: patch
3549 };
3550
3551 return;
3552 }
3553
3554 // this key was inserted earlier, a match!
3555 if (entry.c === 0)
3556 {
3557 entry.c = 2;
3558 var subPatches = [];
3559 _VirtualDom_diffHelp(vnode, entry.z, subPatches, index);
3560
3561 _VirtualDom_pushPatch(localPatches, 9, index, {
3562 w: subPatches,
3563 A: entry
3564 });
3565
3566 return;
3567 }
3568
3569 // this key has already been removed or moved, a duplicate!
3570 _VirtualDom_removeNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, index);
3571}
3572
3573
3574
3575// ADD DOM NODES
3576//
3577// Each DOM node has an "index" assigned in order of traversal. It is important
3578// to minimize our crawl over the actual DOM, so these indexes (along with the
3579// descendantsCount of virtual nodes) let us skip touching entire subtrees of
3580// the DOM if we know there are no patches there.
3581
3582
3583function _VirtualDom_addDomNodes(domNode, vNode, patches, eventNode)
3584{
3585 _VirtualDom_addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.b, eventNode);
3586}
3587
3588
3589// assumes `patches` is non-empty and indexes increase monotonically.
3590function _VirtualDom_addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode)
3591{
3592 var patch = patches[i];
3593 var index = patch.r;
3594
3595 while (index === low)
3596 {
3597 var patchType = patch.$;
3598
3599 if (patchType === 1)
3600 {
3601 _VirtualDom_addDomNodes(domNode, vNode.k, patch.s, eventNode);
3602 }
3603 else if (patchType === 8)
3604 {
3605 patch.t = domNode;
3606 patch.u = eventNode;
3607
3608 var subPatches = patch.s.w;
3609 if (subPatches.length > 0)
3610 {
3611 _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
3612 }
3613 }
3614 else if (patchType === 9)
3615 {
3616 patch.t = domNode;
3617 patch.u = eventNode;
3618
3619 var data = patch.s;
3620 if (data)
3621 {
3622 data.A.s = domNode;
3623 var subPatches = data.w;
3624 if (subPatches.length > 0)
3625 {
3626 _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
3627 }
3628 }
3629 }
3630 else
3631 {
3632 patch.t = domNode;
3633 patch.u = eventNode;
3634 }
3635
3636 i++;
3637
3638 if (!(patch = patches[i]) || (index = patch.r) > high)
3639 {
3640 return i;
3641 }
3642 }
3643
3644 var tag = vNode.$;
3645
3646 if (tag === 4)
3647 {
3648 var subNode = vNode.k;
3649
3650 while (subNode.$ === 4)
3651 {
3652 subNode = subNode.k;
3653 }
3654
3655 return _VirtualDom_addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref);
3656 }
3657
3658 // tag must be 1 or 2 at this point
3659
3660 var vKids = vNode.e;
3661 var childNodes = domNode.childNodes;
3662 for (var j = 0; j < vKids.length; j++)
3663 {
3664 low++;
3665 var vKid = tag === 1 ? vKids[j] : vKids[j].b;
3666 var nextLow = low + (vKid.b || 0);
3667 if (low <= index && index <= nextLow)
3668 {
3669 i = _VirtualDom_addDomNodesHelp(childNodes[j], vKid, patches, i, low, nextLow, eventNode);
3670 if (!(patch = patches[i]) || (index = patch.r) > high)
3671 {
3672 return i;
3673 }
3674 }
3675 low = nextLow;
3676 }
3677 return i;
3678}
3679
3680
3681
3682// APPLY PATCHES
3683
3684
3685function _VirtualDom_applyPatches(rootDomNode, oldVirtualNode, patches, eventNode)
3686{
3687 if (patches.length === 0)
3688 {
3689 return rootDomNode;
3690 }
3691
3692 _VirtualDom_addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode);
3693 return _VirtualDom_applyPatchesHelp(rootDomNode, patches);
3694}
3695
3696function _VirtualDom_applyPatchesHelp(rootDomNode, patches)
3697{
3698 for (var i = 0; i < patches.length; i++)
3699 {
3700 var patch = patches[i];
3701 var localDomNode = patch.t
3702 var newNode = _VirtualDom_applyPatch(localDomNode, patch);
3703 if (localDomNode === rootDomNode)
3704 {
3705 rootDomNode = newNode;
3706 }
3707 }
3708 return rootDomNode;
3709}
3710
3711function _VirtualDom_applyPatch(domNode, patch)
3712{
3713 switch (patch.$)
3714 {
3715 case 0:
3716 return _VirtualDom_applyPatchRedraw(domNode, patch.s, patch.u);
3717
3718 case 4:
3719 _VirtualDom_applyFacts(domNode, patch.u, patch.s);
3720 return domNode;
3721
3722 case 3:
3723 domNode.replaceData(0, domNode.length, patch.s);
3724 return domNode;
3725
3726 case 1:
3727 return _VirtualDom_applyPatchesHelp(domNode, patch.s);
3728
3729 case 2:
3730 if (domNode.elm_event_node_ref)
3731 {
3732 domNode.elm_event_node_ref.j = patch.s;
3733 }
3734 else
3735 {
3736 domNode.elm_event_node_ref = { j: patch.s, p: patch.u };
3737 }
3738 return domNode;
3739
3740 case 6:
3741 var data = patch.s;
3742 for (var i = 0; i < data.i; i++)
3743 {
3744 domNode.removeChild(domNode.childNodes[data.v]);
3745 }
3746 return domNode;
3747
3748 case 7:
3749 var data = patch.s;
3750 var kids = data.e;
3751 var i = data.v;
3752 var theEnd = domNode.childNodes[i];
3753 for (; i < kids.length; i++)
3754 {
3755 domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd);
3756 }
3757 return domNode;
3758
3759 case 9:
3760 var data = patch.s;
3761 if (!data)
3762 {
3763 domNode.parentNode.removeChild(domNode);
3764 return domNode;
3765 }
3766 var entry = data.A;
3767 if (typeof entry.r !== 'undefined')
3768 {
3769 domNode.parentNode.removeChild(domNode);
3770 }
3771 entry.s = _VirtualDom_applyPatchesHelp(domNode, data.w);
3772 return domNode;
3773
3774 case 8:
3775 return _VirtualDom_applyPatchReorder(domNode, patch);
3776
3777 case 5:
3778 return patch.s(domNode);
3779
3780 default:
3781 _Debug_crash(10); // 'Ran into an unknown patch!'
3782 }
3783}
3784
3785
3786function _VirtualDom_applyPatchRedraw(domNode, vNode, eventNode)
3787{
3788 var parentNode = domNode.parentNode;
3789 var newNode = _VirtualDom_render(vNode, eventNode);
3790
3791 if (!newNode.elm_event_node_ref)
3792 {
3793 newNode.elm_event_node_ref = domNode.elm_event_node_ref;
3794 }
3795
3796 if (parentNode && newNode !== domNode)
3797 {
3798 parentNode.replaceChild(newNode, domNode);
3799 }
3800 return newNode;
3801}
3802
3803
3804function _VirtualDom_applyPatchReorder(domNode, patch)
3805{
3806 var data = patch.s;
3807
3808 // remove end inserts
3809 var frag = _VirtualDom_applyPatchReorderEndInsertsHelp(data.y, patch);
3810
3811 // removals
3812 domNode = _VirtualDom_applyPatchesHelp(domNode, data.w);
3813
3814 // inserts
3815 var inserts = data.x;
3816 for (var i = 0; i < inserts.length; i++)
3817 {
3818 var insert = inserts[i];
3819 var entry = insert.A;
3820 var node = entry.c === 2
3821 ? entry.s
3822 : _VirtualDom_render(entry.z, patch.u);
3823 domNode.insertBefore(node, domNode.childNodes[insert.r]);
3824 }
3825
3826 // add end inserts
3827 if (frag)
3828 {
3829 _VirtualDom_appendChild(domNode, frag);
3830 }
3831
3832 return domNode;
3833}
3834
3835
3836function _VirtualDom_applyPatchReorderEndInsertsHelp(endInserts, patch)
3837{
3838 if (!endInserts)
3839 {
3840 return;
3841 }
3842
3843 var frag = _VirtualDom_doc.createDocumentFragment();
3844 for (var i = 0; i < endInserts.length; i++)
3845 {
3846 var insert = endInserts[i];
3847 var entry = insert.A;
3848 _VirtualDom_appendChild(frag, entry.c === 2
3849 ? entry.s
3850 : _VirtualDom_render(entry.z, patch.u)
3851 );
3852 }
3853 return frag;
3854}
3855
3856
3857function _VirtualDom_virtualize(node)
3858{
3859 // TEXT NODES
3860
3861 if (node.nodeType === 3)
3862 {
3863 return _VirtualDom_text(node.textContent);
3864 }
3865
3866
3867 // WEIRD NODES
3868
3869 if (node.nodeType !== 1)
3870 {
3871 return _VirtualDom_text('');
3872 }
3873
3874
3875 // ELEMENT NODES
3876
3877 var attrList = _List_Nil;
3878 var attrs = node.attributes;
3879 for (var i = attrs.length; i--; )
3880 {
3881 var attr = attrs[i];
3882 var name = attr.name;
3883 var value = attr.value;
3884 attrList = _List_Cons( A2(_VirtualDom_attribute, name, value), attrList );
3885 }
3886
3887 var tag = node.tagName.toLowerCase();
3888 var kidList = _List_Nil;
3889 var kids = node.childNodes;
3890
3891 for (var i = kids.length; i--; )
3892 {
3893 kidList = _List_Cons(_VirtualDom_virtualize(kids[i]), kidList);
3894 }
3895 return A3(_VirtualDom_node, tag, attrList, kidList);
3896}
3897
3898function _VirtualDom_dekey(keyedNode)
3899{
3900 var keyedKids = keyedNode.e;
3901 var len = keyedKids.length;
3902 var kids = new Array(len);
3903 for (var i = 0; i < len; i++)
3904 {
3905 kids[i] = keyedKids[i].b;
3906 }
3907
3908 return {
3909 $: 1,
3910 c: keyedNode.c,
3911 d: keyedNode.d,
3912 e: kids,
3913 f: keyedNode.f,
3914 b: keyedNode.b
3915 };
3916}
3917
3918
3919
3920
3921// ELEMENT
3922
3923
3924var _Debugger_element;
3925
3926var _Browser_element = _Debugger_element || F4(function(impl, flagDecoder, debugMetadata, args)
3927{
3928 return _Platform_initialize(
3929 flagDecoder,
3930 args,
3931 impl.init,
3932 impl.update,
3933 impl.subscriptions,
3934 function(sendToApp, initialModel) {
3935 var view = impl.view;
3936 /**_UNUSED/
3937 var domNode = args['node'];
3938 //*/
3939 /**/
3940 var domNode = args && args['node'] ? args['node'] : _Debug_crash(0);
3941 //*/
3942 var currNode = _VirtualDom_virtualize(domNode);
3943
3944 return _Browser_makeAnimator(initialModel, function(model)
3945 {
3946 var nextNode = view(model);
3947 var patches = _VirtualDom_diff(currNode, nextNode);
3948 domNode = _VirtualDom_applyPatches(domNode, currNode, patches, sendToApp);
3949 currNode = nextNode;
3950 });
3951 }
3952 );
3953});
3954
3955
3956
3957// DOCUMENT
3958
3959
3960var _Debugger_document;
3961
3962var _Browser_document = _Debugger_document || F4(function(impl, flagDecoder, debugMetadata, args)
3963{
3964 return _Platform_initialize(
3965 flagDecoder,
3966 args,
3967 impl.init,
3968 impl.update,
3969 impl.subscriptions,
3970 function(sendToApp, initialModel) {
3971 var divertHrefToApp = impl.setup && impl.setup(sendToApp)
3972 var view = impl.view;
3973 var title = _VirtualDom_doc.title;
3974 var bodyNode = _VirtualDom_doc.body;
3975 var currNode = _VirtualDom_virtualize(bodyNode);
3976 return _Browser_makeAnimator(initialModel, function(model)
3977 {
3978 _VirtualDom_divertHrefToApp = divertHrefToApp;
3979 var doc = view(model);
3980 var nextNode = _VirtualDom_node('body')(_List_Nil)(doc.body);
3981 var patches = _VirtualDom_diff(currNode, nextNode);
3982 bodyNode = _VirtualDom_applyPatches(bodyNode, currNode, patches, sendToApp);
3983 currNode = nextNode;
3984 _VirtualDom_divertHrefToApp = 0;
3985 (title !== doc.title) && (_VirtualDom_doc.title = title = doc.title);
3986 });
3987 }
3988 );
3989});
3990
3991
3992
3993// ANIMATION
3994
3995
3996var _Browser_cancelAnimationFrame =
3997 typeof cancelAnimationFrame !== 'undefined'
3998 ? cancelAnimationFrame
3999 : function(id) { clearTimeout(id); };
4000
4001var _Browser_requestAnimationFrame =
4002 typeof requestAnimationFrame !== 'undefined'
4003 ? requestAnimationFrame
4004 : function(callback) { return setTimeout(callback, 1000 / 60); };
4005
4006
4007function _Browser_makeAnimator(model, draw)
4008{
4009 draw(model);
4010
4011 var state = 0;
4012
4013 function updateIfNeeded()
4014 {
4015 state = state === 1
4016 ? 0
4017 : ( _Browser_requestAnimationFrame(updateIfNeeded), draw(model), 1 );
4018 }
4019
4020 return function(nextModel, isSync)
4021 {
4022 model = nextModel;
4023
4024 isSync
4025 ? ( draw(model),
4026 state === 2 && (state = 1)
4027 )
4028 : ( state === 0 && _Browser_requestAnimationFrame(updateIfNeeded),
4029 state = 2
4030 );
4031 };
4032}
4033
4034
4035
4036// APPLICATION
4037
4038
4039function _Browser_application(impl)
4040{
4041 var onUrlChange = impl.onUrlChange;
4042 var onUrlRequest = impl.onUrlRequest;
4043 var key = function() { key.a(onUrlChange(_Browser_getUrl())); };
4044
4045 return _Browser_document({
4046 setup: function(sendToApp)
4047 {
4048 key.a = sendToApp;
4049 _Browser_window.addEventListener('popstate', key);
4050 _Browser_window.navigator.userAgent.indexOf('Trident') < 0 || _Browser_window.addEventListener('hashchange', key);
4051
4052 return F2(function(domNode, event)
4053 {
4054 if (!event.ctrlKey && !event.metaKey && !event.shiftKey && event.button < 1 && !domNode.target && !domNode.hasAttribute('download'))
4055 {
4056 event.preventDefault();
4057 var href = domNode.href;
4058 var curr = _Browser_getUrl();
4059 var next = $elm$url$Url$fromString(href).a;
4060 sendToApp(onUrlRequest(
4061 (next
4062 && curr.protocol === next.protocol
4063 && curr.host === next.host
4064 && curr.port_.a === next.port_.a
4065 )
4066 ? $elm$browser$Browser$Internal(next)
4067 : $elm$browser$Browser$External(href)
4068 ));
4069 }
4070 });
4071 },
4072 init: function(flags)
4073 {
4074 return A3(impl.init, flags, _Browser_getUrl(), key);
4075 },
4076 view: impl.view,
4077 update: impl.update,
4078 subscriptions: impl.subscriptions
4079 });
4080}
4081
4082function _Browser_getUrl()
4083{
4084 return $elm$url$Url$fromString(_VirtualDom_doc.location.href).a || _Debug_crash(1);
4085}
4086
4087var _Browser_go = F2(function(key, n)
4088{
4089 return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
4090 n && history.go(n);
4091 key();
4092 }));
4093});
4094
4095var _Browser_pushUrl = F2(function(key, url)
4096{
4097 return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
4098 history.pushState({}, '', url);
4099 key();
4100 }));
4101});
4102
4103var _Browser_replaceUrl = F2(function(key, url)
4104{
4105 return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
4106 history.replaceState({}, '', url);
4107 key();
4108 }));
4109});
4110
4111
4112
4113// GLOBAL EVENTS
4114
4115
4116var _Browser_fakeNode = { addEventListener: function() {}, removeEventListener: function() {} };
4117var _Browser_doc = typeof document !== 'undefined' ? document : _Browser_fakeNode;
4118var _Browser_window = typeof window !== 'undefined' ? window : _Browser_fakeNode;
4119
4120var _Browser_on = F3(function(node, eventName, sendToSelf)
4121{
4122 return _Scheduler_spawn(_Scheduler_binding(function(callback)
4123 {
4124 function handler(event) { _Scheduler_rawSpawn(sendToSelf(event)); }
4125 node.addEventListener(eventName, handler, _VirtualDom_passiveSupported && { passive: true });
4126 return function() { node.removeEventListener(eventName, handler); };
4127 }));
4128});
4129
4130var _Browser_decodeEvent = F2(function(decoder, event)
4131{
4132 var result = _Json_runHelp(decoder, event);
4133 return $elm$core$Result$isOk(result) ? $elm$core$Maybe$Just(result.a) : $elm$core$Maybe$Nothing;
4134});
4135
4136
4137
4138// PAGE VISIBILITY
4139
4140
4141function _Browser_visibilityInfo()
4142{
4143 return (typeof _VirtualDom_doc.hidden !== 'undefined')
4144 ? { hidden: 'hidden', change: 'visibilitychange' }
4145 :
4146 (typeof _VirtualDom_doc.mozHidden !== 'undefined')
4147 ? { hidden: 'mozHidden', change: 'mozvisibilitychange' }
4148 :
4149 (typeof _VirtualDom_doc.msHidden !== 'undefined')
4150 ? { hidden: 'msHidden', change: 'msvisibilitychange' }
4151 :
4152 (typeof _VirtualDom_doc.webkitHidden !== 'undefined')
4153 ? { hidden: 'webkitHidden', change: 'webkitvisibilitychange' }
4154 : { hidden: 'hidden', change: 'visibilitychange' };
4155}
4156
4157
4158
4159// ANIMATION FRAMES
4160
4161
4162function _Browser_rAF()
4163{
4164 return _Scheduler_binding(function(callback)
4165 {
4166 var id = _Browser_requestAnimationFrame(function() {
4167 callback(_Scheduler_succeed(Date.now()));
4168 });
4169
4170 return function() {
4171 _Browser_cancelAnimationFrame(id);
4172 };
4173 });
4174}
4175
4176
4177function _Browser_now()
4178{
4179 return _Scheduler_binding(function(callback)
4180 {
4181 callback(_Scheduler_succeed(Date.now()));
4182 });
4183}
4184
4185
4186
4187// DOM STUFF
4188
4189
4190function _Browser_withNode(id, doStuff)
4191{
4192 return _Scheduler_binding(function(callback)
4193 {
4194 _Browser_requestAnimationFrame(function() {
4195 var node = document.getElementById(id);
4196 callback(node
4197 ? _Scheduler_succeed(doStuff(node))
4198 : _Scheduler_fail($elm$browser$Browser$Dom$NotFound(id))
4199 );
4200 });
4201 });
4202}
4203
4204
4205function _Browser_withWindow(doStuff)
4206{
4207 return _Scheduler_binding(function(callback)
4208 {
4209 _Browser_requestAnimationFrame(function() {
4210 callback(_Scheduler_succeed(doStuff()));
4211 });
4212 });
4213}
4214
4215
4216// FOCUS and BLUR
4217
4218
4219var _Browser_call = F2(function(functionName, id)
4220{
4221 return _Browser_withNode(id, function(node) {
4222 node[functionName]();
4223 return _Utils_Tuple0;
4224 });
4225});
4226
4227
4228
4229// WINDOW VIEWPORT
4230
4231
4232function _Browser_getViewport()
4233{
4234 return {
4235 scene: _Browser_getScene(),
4236 viewport: {
4237 x: _Browser_window.pageXOffset,
4238 y: _Browser_window.pageYOffset,
4239 width: _Browser_doc.documentElement.clientWidth,
4240 height: _Browser_doc.documentElement.clientHeight
4241 }
4242 };
4243}
4244
4245function _Browser_getScene()
4246{
4247 var body = _Browser_doc.body;
4248 var elem = _Browser_doc.documentElement;
4249 return {
4250 width: Math.max(body.scrollWidth, body.offsetWidth, elem.scrollWidth, elem.offsetWidth, elem.clientWidth),
4251 height: Math.max(body.scrollHeight, body.offsetHeight, elem.scrollHeight, elem.offsetHeight, elem.clientHeight)
4252 };
4253}
4254
4255var _Browser_setViewport = F2(function(x, y)
4256{
4257 return _Browser_withWindow(function()
4258 {
4259 _Browser_window.scroll(x, y);
4260 return _Utils_Tuple0;
4261 });
4262});
4263
4264
4265
4266// ELEMENT VIEWPORT
4267
4268
4269function _Browser_getViewportOf(id)
4270{
4271 return _Browser_withNode(id, function(node)
4272 {
4273 return {
4274 scene: {
4275 width: node.scrollWidth,
4276 height: node.scrollHeight
4277 },
4278 viewport: {
4279 x: node.scrollLeft,
4280 y: node.scrollTop,
4281 width: node.clientWidth,
4282 height: node.clientHeight
4283 }
4284 };
4285 });
4286}
4287
4288
4289var _Browser_setViewportOf = F3(function(id, x, y)
4290{
4291 return _Browser_withNode(id, function(node)
4292 {
4293 node.scrollLeft = x;
4294 node.scrollTop = y;
4295 return _Utils_Tuple0;
4296 });
4297});
4298
4299
4300
4301// ELEMENT
4302
4303
4304function _Browser_getElement(id)
4305{
4306 return _Browser_withNode(id, function(node)
4307 {
4308 var rect = node.getBoundingClientRect();
4309 var x = _Browser_window.pageXOffset;
4310 var y = _Browser_window.pageYOffset;
4311 return {
4312 scene: _Browser_getScene(),
4313 viewport: {
4314 x: x,
4315 y: y,
4316 width: _Browser_doc.documentElement.clientWidth,
4317 height: _Browser_doc.documentElement.clientHeight
4318 },
4319 element: {
4320 x: x + rect.left,
4321 y: y + rect.top,
4322 width: rect.width,
4323 height: rect.height
4324 }
4325 };
4326 });
4327}
4328
4329
4330
4331// LOAD and RELOAD
4332
4333
4334function _Browser_reload(skipCache)
4335{
4336 return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback)
4337 {
4338 _VirtualDom_doc.location.reload(skipCache);
4339 }));
4340}
4341
4342function _Browser_load(url)
4343{
4344 return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback)
4345 {
4346 try
4347 {
4348 _Browser_window.location = url;
4349 }
4350 catch(err)
4351 {
4352 // Only Firefox can throw a NS_ERROR_MALFORMED_URI exception here.
4353 // Other browsers reload the page, so let's be consistent about that.
4354 _VirtualDom_doc.location.reload(false);
4355 }
4356 }));
4357}
4358
4359
4360
4361// SEND REQUEST
4362
4363var _Http_toTask = F3(function(router, toTask, request)
4364{
4365 return _Scheduler_binding(function(callback)
4366 {
4367 function done(response) {
4368 callback(toTask(request.expect.a(response)));
4369 }
4370
4371 var xhr = new XMLHttpRequest();
4372 xhr.addEventListener('error', function() { done($elm$http$Http$NetworkError_); });
4373 xhr.addEventListener('timeout', function() { done($elm$http$Http$Timeout_); });
4374 xhr.addEventListener('load', function() { done(_Http_toResponse(request.expect.b, xhr)); });
4375 $elm$core$Maybe$isJust(request.tracker) && _Http_track(router, xhr, request.tracker.a);
4376
4377 try {
4378 xhr.open(request.method, request.url, true);
4379 } catch (e) {
4380 return done($elm$http$Http$BadUrl_(request.url));
4381 }
4382
4383 _Http_configureRequest(xhr, request);
4384
4385 request.body.a && xhr.setRequestHeader('Content-Type', request.body.a);
4386 xhr.send(request.body.b);
4387
4388 return function() { xhr.c = true; xhr.abort(); };
4389 });
4390});
4391
4392
4393// CONFIGURE
4394
4395function _Http_configureRequest(xhr, request)
4396{
4397 for (var headers = request.headers; headers.b; headers = headers.b) // WHILE_CONS
4398 {
4399 xhr.setRequestHeader(headers.a.a, headers.a.b);
4400 }
4401 xhr.timeout = request.timeout.a || 0;
4402 xhr.responseType = request.expect.d;
4403 xhr.withCredentials = request.allowCookiesFromOtherDomains;
4404}
4405
4406
4407// RESPONSES
4408
4409function _Http_toResponse(toBody, xhr)
4410{
4411 return A2(
4412 200 <= xhr.status && xhr.status < 300 ? $elm$http$Http$GoodStatus_ : $elm$http$Http$BadStatus_,
4413 _Http_toMetadata(xhr),
4414 toBody(xhr.response)
4415 );
4416}
4417
4418
4419// METADATA
4420
4421function _Http_toMetadata(xhr)
4422{
4423 return {
4424 url: xhr.responseURL,
4425 statusCode: xhr.status,
4426 statusText: xhr.statusText,
4427 headers: _Http_parseHeaders(xhr.getAllResponseHeaders())
4428 };
4429}
4430
4431
4432// HEADERS
4433
4434function _Http_parseHeaders(rawHeaders)
4435{
4436 if (!rawHeaders)
4437 {
4438 return $elm$core$Dict$empty;
4439 }
4440
4441 var headers = $elm$core$Dict$empty;
4442 var headerPairs = rawHeaders.split('\r\n');
4443 for (var i = headerPairs.length; i--; )
4444 {
4445 var headerPair = headerPairs[i];
4446 var index = headerPair.indexOf(': ');
4447 if (index > 0)
4448 {
4449 var key = headerPair.substring(0, index);
4450 var value = headerPair.substring(index + 2);
4451
4452 headers = A3($elm$core$Dict$update, key, function(oldValue) {
4453 return $elm$core$Maybe$Just($elm$core$Maybe$isJust(oldValue)
4454 ? value + ', ' + oldValue.a
4455 : value
4456 );
4457 }, headers);
4458 }
4459 }
4460 return headers;
4461}
4462
4463
4464// EXPECT
4465
4466var _Http_expect = F3(function(type, toBody, toValue)
4467{
4468 return {
4469 $: 0,
4470 d: type,
4471 b: toBody,
4472 a: toValue
4473 };
4474});
4475
4476var _Http_mapExpect = F2(function(func, expect)
4477{
4478 return {
4479 $: 0,
4480 d: expect.d,
4481 b: expect.b,
4482 a: function(x) { return func(expect.a(x)); }
4483 };
4484});
4485
4486function _Http_toDataView(arrayBuffer)
4487{
4488 return new DataView(arrayBuffer);
4489}
4490
4491
4492// BODY and PARTS
4493
4494var _Http_emptyBody = { $: 0 };
4495var _Http_pair = F2(function(a, b) { return { $: 0, a: a, b: b }; });
4496
4497function _Http_toFormData(parts)
4498{
4499 for (var formData = new FormData(); parts.b; parts = parts.b) // WHILE_CONS
4500 {
4501 var part = parts.a;
4502 formData.append(part.a, part.b);
4503 }
4504 return formData;
4505}
4506
4507var _Http_bytesToBlob = F2(function(mime, bytes)
4508{
4509 return new Blob([bytes], { type: mime });
4510});
4511
4512
4513// PROGRESS
4514
4515function _Http_track(router, xhr, tracker)
4516{
4517 // TODO check out lengthComputable on loadstart event
4518
4519 xhr.upload.addEventListener('progress', function(event) {
4520 if (xhr.c) { return; }
4521 _Scheduler_rawSpawn(A2($elm$core$Platform$sendToSelf, router, _Utils_Tuple2(tracker, $elm$http$Http$Sending({
4522 sent: event.loaded,
4523 size: event.total
4524 }))));
4525 });
4526 xhr.addEventListener('progress', function(event) {
4527 if (xhr.c) { return; }
4528 _Scheduler_rawSpawn(A2($elm$core$Platform$sendToSelf, router, _Utils_Tuple2(tracker, $elm$http$Http$Receiving({
4529 received: event.loaded,
4530 size: event.lengthComputable ? $elm$core$Maybe$Just(event.total) : $elm$core$Maybe$Nothing
4531 }))));
4532 });
4533}
4534
4535function _Url_percentEncode(string)
4536{
4537 return encodeURIComponent(string);
4538}
4539
4540function _Url_percentDecode(string)
4541{
4542 try
4543 {
4544 return $elm$core$Maybe$Just(decodeURIComponent(string));
4545 }
4546 catch (e)
4547 {
4548 return $elm$core$Maybe$Nothing;
4549 }
4550}
4551
4552
4553var _Bitwise_and = F2(function(a, b)
4554{
4555 return a & b;
4556});
4557
4558var _Bitwise_or = F2(function(a, b)
4559{
4560 return a | b;
4561});
4562
4563var _Bitwise_xor = F2(function(a, b)
4564{
4565 return a ^ b;
4566});
4567
4568function _Bitwise_complement(a)
4569{
4570 return ~a;
4571};
4572
4573var _Bitwise_shiftLeftBy = F2(function(offset, a)
4574{
4575 return a << offset;
4576});
4577
4578var _Bitwise_shiftRightBy = F2(function(offset, a)
4579{
4580 return a >> offset;
4581});
4582
4583var _Bitwise_shiftRightZfBy = F2(function(offset, a)
4584{
4585 return a >>> offset;
4586});
4587var $author$project$Main$LinkClicked = function (a) {
4588 return {$: 'LinkClicked', a: a};
4589};
4590var $author$project$Main$UrlChanged = function (a) {
4591 return {$: 'UrlChanged', a: a};
4592};
4593var $elm$core$Basics$EQ = {$: 'EQ'};
4594var $elm$core$Basics$GT = {$: 'GT'};
4595var $elm$core$Basics$LT = {$: 'LT'};
4596var $elm$core$List$cons = _List_cons;
4597var $elm$core$Dict$foldr = F3(
4598 function (func, acc, t) {
4599 foldr:
4600 while (true) {
4601 if (t.$ === 'RBEmpty_elm_builtin') {
4602 return acc;
4603 } else {
4604 var key = t.b;
4605 var value = t.c;
4606 var left = t.d;
4607 var right = t.e;
4608 var $temp$func = func,
4609 $temp$acc = A3(
4610 func,
4611 key,
4612 value,
4613 A3($elm$core$Dict$foldr, func, acc, right)),
4614 $temp$t = left;
4615 func = $temp$func;
4616 acc = $temp$acc;
4617 t = $temp$t;
4618 continue foldr;
4619 }
4620 }
4621 });
4622var $elm$core$Dict$toList = function (dict) {
4623 return A3(
4624 $elm$core$Dict$foldr,
4625 F3(
4626 function (key, value, list) {
4627 return A2(
4628 $elm$core$List$cons,
4629 _Utils_Tuple2(key, value),
4630 list);
4631 }),
4632 _List_Nil,
4633 dict);
4634};
4635var $elm$core$Dict$keys = function (dict) {
4636 return A3(
4637 $elm$core$Dict$foldr,
4638 F3(
4639 function (key, value, keyList) {
4640 return A2($elm$core$List$cons, key, keyList);
4641 }),
4642 _List_Nil,
4643 dict);
4644};
4645var $elm$core$Set$toList = function (_v0) {
4646 var dict = _v0.a;
4647 return $elm$core$Dict$keys(dict);
4648};
4649var $elm$core$Elm$JsArray$foldr = _JsArray_foldr;
4650var $elm$core$Array$foldr = F3(
4651 function (func, baseCase, _v0) {
4652 var tree = _v0.c;
4653 var tail = _v0.d;
4654 var helper = F2(
4655 function (node, acc) {
4656 if (node.$ === 'SubTree') {
4657 var subTree = node.a;
4658 return A3($elm$core$Elm$JsArray$foldr, helper, acc, subTree);
4659 } else {
4660 var values = node.a;
4661 return A3($elm$core$Elm$JsArray$foldr, func, acc, values);
4662 }
4663 });
4664 return A3(
4665 $elm$core$Elm$JsArray$foldr,
4666 helper,
4667 A3($elm$core$Elm$JsArray$foldr, func, baseCase, tail),
4668 tree);
4669 });
4670var $elm$core$Array$toList = function (array) {
4671 return A3($elm$core$Array$foldr, $elm$core$List$cons, _List_Nil, array);
4672};
4673var $elm$core$Result$Err = function (a) {
4674 return {$: 'Err', a: a};
4675};
4676var $elm$json$Json$Decode$Failure = F2(
4677 function (a, b) {
4678 return {$: 'Failure', a: a, b: b};
4679 });
4680var $elm$json$Json$Decode$Field = F2(
4681 function (a, b) {
4682 return {$: 'Field', a: a, b: b};
4683 });
4684var $elm$json$Json$Decode$Index = F2(
4685 function (a, b) {
4686 return {$: 'Index', a: a, b: b};
4687 });
4688var $elm$core$Result$Ok = function (a) {
4689 return {$: 'Ok', a: a};
4690};
4691var $elm$json$Json$Decode$OneOf = function (a) {
4692 return {$: 'OneOf', a: a};
4693};
4694var $elm$core$Basics$False = {$: 'False'};
4695var $elm$core$Basics$add = _Basics_add;
4696var $elm$core$Maybe$Just = function (a) {
4697 return {$: 'Just', a: a};
4698};
4699var $elm$core$Maybe$Nothing = {$: 'Nothing'};
4700var $elm$core$String$all = _String_all;
4701var $elm$core$Basics$and = _Basics_and;
4702var $elm$core$Basics$append = _Utils_append;
4703var $elm$json$Json$Encode$encode = _Json_encode;
4704var $elm$core$String$fromInt = _String_fromNumber;
4705var $elm$core$String$join = F2(
4706 function (sep, chunks) {
4707 return A2(
4708 _String_join,
4709 sep,
4710 _List_toArray(chunks));
4711 });
4712var $elm$core$String$split = F2(
4713 function (sep, string) {
4714 return _List_fromArray(
4715 A2(_String_split, sep, string));
4716 });
4717var $elm$json$Json$Decode$indent = function (str) {
4718 return A2(
4719 $elm$core$String$join,
4720 '\n ',
4721 A2($elm$core$String$split, '\n', str));
4722};
4723var $elm$core$List$foldl = F3(
4724 function (func, acc, list) {
4725 foldl:
4726 while (true) {
4727 if (!list.b) {
4728 return acc;
4729 } else {
4730 var x = list.a;
4731 var xs = list.b;
4732 var $temp$func = func,
4733 $temp$acc = A2(func, x, acc),
4734 $temp$list = xs;
4735 func = $temp$func;
4736 acc = $temp$acc;
4737 list = $temp$list;
4738 continue foldl;
4739 }
4740 }
4741 });
4742var $elm$core$List$length = function (xs) {
4743 return A3(
4744 $elm$core$List$foldl,
4745 F2(
4746 function (_v0, i) {
4747 return i + 1;
4748 }),
4749 0,
4750 xs);
4751};
4752var $elm$core$List$map2 = _List_map2;
4753var $elm$core$Basics$le = _Utils_le;
4754var $elm$core$Basics$sub = _Basics_sub;
4755var $elm$core$List$rangeHelp = F3(
4756 function (lo, hi, list) {
4757 rangeHelp:
4758 while (true) {
4759 if (_Utils_cmp(lo, hi) < 1) {
4760 var $temp$lo = lo,
4761 $temp$hi = hi - 1,
4762 $temp$list = A2($elm$core$List$cons, hi, list);
4763 lo = $temp$lo;
4764 hi = $temp$hi;
4765 list = $temp$list;
4766 continue rangeHelp;
4767 } else {
4768 return list;
4769 }
4770 }
4771 });
4772var $elm$core$List$range = F2(
4773 function (lo, hi) {
4774 return A3($elm$core$List$rangeHelp, lo, hi, _List_Nil);
4775 });
4776var $elm$core$List$indexedMap = F2(
4777 function (f, xs) {
4778 return A3(
4779 $elm$core$List$map2,
4780 f,
4781 A2(
4782 $elm$core$List$range,
4783 0,
4784 $elm$core$List$length(xs) - 1),
4785 xs);
4786 });
4787var $elm$core$Char$toCode = _Char_toCode;
4788var $elm$core$Char$isLower = function (_char) {
4789 var code = $elm$core$Char$toCode(_char);
4790 return (97 <= code) && (code <= 122);
4791};
4792var $elm$core$Char$isUpper = function (_char) {
4793 var code = $elm$core$Char$toCode(_char);
4794 return (code <= 90) && (65 <= code);
4795};
4796var $elm$core$Basics$or = _Basics_or;
4797var $elm$core$Char$isAlpha = function (_char) {
4798 return $elm$core$Char$isLower(_char) || $elm$core$Char$isUpper(_char);
4799};
4800var $elm$core$Char$isDigit = function (_char) {
4801 var code = $elm$core$Char$toCode(_char);
4802 return (code <= 57) && (48 <= code);
4803};
4804var $elm$core$Char$isAlphaNum = function (_char) {
4805 return $elm$core$Char$isLower(_char) || ($elm$core$Char$isUpper(_char) || $elm$core$Char$isDigit(_char));
4806};
4807var $elm$core$List$reverse = function (list) {
4808 return A3($elm$core$List$foldl, $elm$core$List$cons, _List_Nil, list);
4809};
4810var $elm$core$String$uncons = _String_uncons;
4811var $elm$json$Json$Decode$errorOneOf = F2(
4812 function (i, error) {
4813 return '\n\n(' + ($elm$core$String$fromInt(i + 1) + (') ' + $elm$json$Json$Decode$indent(
4814 $elm$json$Json$Decode$errorToString(error))));
4815 });
4816var $elm$json$Json$Decode$errorToString = function (error) {
4817 return A2($elm$json$Json$Decode$errorToStringHelp, error, _List_Nil);
4818};
4819var $elm$json$Json$Decode$errorToStringHelp = F2(
4820 function (error, context) {
4821 errorToStringHelp:
4822 while (true) {
4823 switch (error.$) {
4824 case 'Field':
4825 var f = error.a;
4826 var err = error.b;
4827 var isSimple = function () {
4828 var _v1 = $elm$core$String$uncons(f);
4829 if (_v1.$ === 'Nothing') {
4830 return false;
4831 } else {
4832 var _v2 = _v1.a;
4833 var _char = _v2.a;
4834 var rest = _v2.b;
4835 return $elm$core$Char$isAlpha(_char) && A2($elm$core$String$all, $elm$core$Char$isAlphaNum, rest);
4836 }
4837 }();
4838 var fieldName = isSimple ? ('.' + f) : ('[\'' + (f + '\']'));
4839 var $temp$error = err,
4840 $temp$context = A2($elm$core$List$cons, fieldName, context);
4841 error = $temp$error;
4842 context = $temp$context;
4843 continue errorToStringHelp;
4844 case 'Index':
4845 var i = error.a;
4846 var err = error.b;
4847 var indexName = '[' + ($elm$core$String$fromInt(i) + ']');
4848 var $temp$error = err,
4849 $temp$context = A2($elm$core$List$cons, indexName, context);
4850 error = $temp$error;
4851 context = $temp$context;
4852 continue errorToStringHelp;
4853 case 'OneOf':
4854 var errors = error.a;
4855 if (!errors.b) {
4856 return 'Ran into a Json.Decode.oneOf with no possibilities' + function () {
4857 if (!context.b) {
4858 return '!';
4859 } else {
4860 return ' at json' + A2(
4861 $elm$core$String$join,
4862 '',
4863 $elm$core$List$reverse(context));
4864 }
4865 }();
4866 } else {
4867 if (!errors.b.b) {
4868 var err = errors.a;
4869 var $temp$error = err,
4870 $temp$context = context;
4871 error = $temp$error;
4872 context = $temp$context;
4873 continue errorToStringHelp;
4874 } else {
4875 var starter = function () {
4876 if (!context.b) {
4877 return 'Json.Decode.oneOf';
4878 } else {
4879 return 'The Json.Decode.oneOf at json' + A2(
4880 $elm$core$String$join,
4881 '',
4882 $elm$core$List$reverse(context));
4883 }
4884 }();
4885 var introduction = starter + (' failed in the following ' + ($elm$core$String$fromInt(
4886 $elm$core$List$length(errors)) + ' ways:'));
4887 return A2(
4888 $elm$core$String$join,
4889 '\n\n',
4890 A2(
4891 $elm$core$List$cons,
4892 introduction,
4893 A2($elm$core$List$indexedMap, $elm$json$Json$Decode$errorOneOf, errors)));
4894 }
4895 }
4896 default:
4897 var msg = error.a;
4898 var json = error.b;
4899 var introduction = function () {
4900 if (!context.b) {
4901 return 'Problem with the given value:\n\n';
4902 } else {
4903 return 'Problem with the value at json' + (A2(
4904 $elm$core$String$join,
4905 '',
4906 $elm$core$List$reverse(context)) + ':\n\n ');
4907 }
4908 }();
4909 return introduction + ($elm$json$Json$Decode$indent(
4910 A2($elm$json$Json$Encode$encode, 4, json)) + ('\n\n' + msg));
4911 }
4912 }
4913 });
4914var $elm$core$Array$branchFactor = 32;
4915var $elm$core$Array$Array_elm_builtin = F4(
4916 function (a, b, c, d) {
4917 return {$: 'Array_elm_builtin', a: a, b: b, c: c, d: d};
4918 });
4919var $elm$core$Elm$JsArray$empty = _JsArray_empty;
4920var $elm$core$Basics$ceiling = _Basics_ceiling;
4921var $elm$core$Basics$fdiv = _Basics_fdiv;
4922var $elm$core$Basics$logBase = F2(
4923 function (base, number) {
4924 return _Basics_log(number) / _Basics_log(base);
4925 });
4926var $elm$core$Basics$toFloat = _Basics_toFloat;
4927var $elm$core$Array$shiftStep = $elm$core$Basics$ceiling(
4928 A2($elm$core$Basics$logBase, 2, $elm$core$Array$branchFactor));
4929var $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);
4930var $elm$core$Elm$JsArray$initialize = _JsArray_initialize;
4931var $elm$core$Array$Leaf = function (a) {
4932 return {$: 'Leaf', a: a};
4933};
4934var $elm$core$Basics$apL = F2(
4935 function (f, x) {
4936 return f(x);
4937 });
4938var $elm$core$Basics$apR = F2(
4939 function (x, f) {
4940 return f(x);
4941 });
4942var $elm$core$Basics$eq = _Utils_equal;
4943var $elm$core$Basics$floor = _Basics_floor;
4944var $elm$core$Elm$JsArray$length = _JsArray_length;
4945var $elm$core$Basics$gt = _Utils_gt;
4946var $elm$core$Basics$max = F2(
4947 function (x, y) {
4948 return (_Utils_cmp(x, y) > 0) ? x : y;
4949 });
4950var $elm$core$Basics$mul = _Basics_mul;
4951var $elm$core$Array$SubTree = function (a) {
4952 return {$: 'SubTree', a: a};
4953};
4954var $elm$core$Elm$JsArray$initializeFromList = _JsArray_initializeFromList;
4955var $elm$core$Array$compressNodes = F2(
4956 function (nodes, acc) {
4957 compressNodes:
4958 while (true) {
4959 var _v0 = A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodes);
4960 var node = _v0.a;
4961 var remainingNodes = _v0.b;
4962 var newAcc = A2(
4963 $elm$core$List$cons,
4964 $elm$core$Array$SubTree(node),
4965 acc);
4966 if (!remainingNodes.b) {
4967 return $elm$core$List$reverse(newAcc);
4968 } else {
4969 var $temp$nodes = remainingNodes,
4970 $temp$acc = newAcc;
4971 nodes = $temp$nodes;
4972 acc = $temp$acc;
4973 continue compressNodes;
4974 }
4975 }
4976 });
4977var $elm$core$Tuple$first = function (_v0) {
4978 var x = _v0.a;
4979 return x;
4980};
4981var $elm$core$Array$treeFromBuilder = F2(
4982 function (nodeList, nodeListSize) {
4983 treeFromBuilder:
4984 while (true) {
4985 var newNodeSize = $elm$core$Basics$ceiling(nodeListSize / $elm$core$Array$branchFactor);
4986 if (newNodeSize === 1) {
4987 return A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodeList).a;
4988 } else {
4989 var $temp$nodeList = A2($elm$core$Array$compressNodes, nodeList, _List_Nil),
4990 $temp$nodeListSize = newNodeSize;
4991 nodeList = $temp$nodeList;
4992 nodeListSize = $temp$nodeListSize;
4993 continue treeFromBuilder;
4994 }
4995 }
4996 });
4997var $elm$core$Array$builderToArray = F2(
4998 function (reverseNodeList, builder) {
4999 if (!builder.nodeListSize) {
5000 return A4(
5001 $elm$core$Array$Array_elm_builtin,
5002 $elm$core$Elm$JsArray$length(builder.tail),
5003 $elm$core$Array$shiftStep,
5004 $elm$core$Elm$JsArray$empty,
5005 builder.tail);
5006 } else {
5007 var treeLen = builder.nodeListSize * $elm$core$Array$branchFactor;
5008 var depth = $elm$core$Basics$floor(
5009 A2($elm$core$Basics$logBase, $elm$core$Array$branchFactor, treeLen - 1));
5010 var correctNodeList = reverseNodeList ? $elm$core$List$reverse(builder.nodeList) : builder.nodeList;
5011 var tree = A2($elm$core$Array$treeFromBuilder, correctNodeList, builder.nodeListSize);
5012 return A4(
5013 $elm$core$Array$Array_elm_builtin,
5014 $elm$core$Elm$JsArray$length(builder.tail) + treeLen,
5015 A2($elm$core$Basics$max, 5, depth * $elm$core$Array$shiftStep),
5016 tree,
5017 builder.tail);
5018 }
5019 });
5020var $elm$core$Basics$idiv = _Basics_idiv;
5021var $elm$core$Basics$lt = _Utils_lt;
5022var $elm$core$Array$initializeHelp = F5(
5023 function (fn, fromIndex, len, nodeList, tail) {
5024 initializeHelp:
5025 while (true) {
5026 if (fromIndex < 0) {
5027 return A2(
5028 $elm$core$Array$builderToArray,
5029 false,
5030 {nodeList: nodeList, nodeListSize: (len / $elm$core$Array$branchFactor) | 0, tail: tail});
5031 } else {
5032 var leaf = $elm$core$Array$Leaf(
5033 A3($elm$core$Elm$JsArray$initialize, $elm$core$Array$branchFactor, fromIndex, fn));
5034 var $temp$fn = fn,
5035 $temp$fromIndex = fromIndex - $elm$core$Array$branchFactor,
5036 $temp$len = len,
5037 $temp$nodeList = A2($elm$core$List$cons, leaf, nodeList),
5038 $temp$tail = tail;
5039 fn = $temp$fn;
5040 fromIndex = $temp$fromIndex;
5041 len = $temp$len;
5042 nodeList = $temp$nodeList;
5043 tail = $temp$tail;
5044 continue initializeHelp;
5045 }
5046 }
5047 });
5048var $elm$core$Basics$remainderBy = _Basics_remainderBy;
5049var $elm$core$Array$initialize = F2(
5050 function (len, fn) {
5051 if (len <= 0) {
5052 return $elm$core$Array$empty;
5053 } else {
5054 var tailLen = len % $elm$core$Array$branchFactor;
5055 var tail = A3($elm$core$Elm$JsArray$initialize, tailLen, len - tailLen, fn);
5056 var initialFromIndex = (len - tailLen) - $elm$core$Array$branchFactor;
5057 return A5($elm$core$Array$initializeHelp, fn, initialFromIndex, len, _List_Nil, tail);
5058 }
5059 });
5060var $elm$core$Basics$True = {$: 'True'};
5061var $elm$core$Result$isOk = function (result) {
5062 if (result.$ === 'Ok') {
5063 return true;
5064 } else {
5065 return false;
5066 }
5067};
5068var $elm$json$Json$Decode$map = _Json_map1;
5069var $elm$json$Json$Decode$map2 = _Json_map2;
5070var $elm$json$Json$Decode$succeed = _Json_succeed;
5071var $elm$virtual_dom$VirtualDom$toHandlerInt = function (handler) {
5072 switch (handler.$) {
5073 case 'Normal':
5074 return 0;
5075 case 'MayStopPropagation':
5076 return 1;
5077 case 'MayPreventDefault':
5078 return 2;
5079 default:
5080 return 3;
5081 }
5082};
5083var $elm$browser$Browser$External = function (a) {
5084 return {$: 'External', a: a};
5085};
5086var $elm$browser$Browser$Internal = function (a) {
5087 return {$: 'Internal', a: a};
5088};
5089var $elm$core$Basics$identity = function (x) {
5090 return x;
5091};
5092var $elm$browser$Browser$Dom$NotFound = function (a) {
5093 return {$: 'NotFound', a: a};
5094};
5095var $elm$url$Url$Http = {$: 'Http'};
5096var $elm$url$Url$Https = {$: 'Https'};
5097var $elm$url$Url$Url = F6(
5098 function (protocol, host, port_, path, query, fragment) {
5099 return {fragment: fragment, host: host, path: path, port_: port_, protocol: protocol, query: query};
5100 });
5101var $elm$core$String$contains = _String_contains;
5102var $elm$core$String$length = _String_length;
5103var $elm$core$String$slice = _String_slice;
5104var $elm$core$String$dropLeft = F2(
5105 function (n, string) {
5106 return (n < 1) ? string : A3(
5107 $elm$core$String$slice,
5108 n,
5109 $elm$core$String$length(string),
5110 string);
5111 });
5112var $elm$core$String$indexes = _String_indexes;
5113var $elm$core$String$isEmpty = function (string) {
5114 return string === '';
5115};
5116var $elm$core$String$left = F2(
5117 function (n, string) {
5118 return (n < 1) ? '' : A3($elm$core$String$slice, 0, n, string);
5119 });
5120var $elm$core$String$toInt = _String_toInt;
5121var $elm$url$Url$chompBeforePath = F5(
5122 function (protocol, path, params, frag, str) {
5123 if ($elm$core$String$isEmpty(str) || A2($elm$core$String$contains, '@', str)) {
5124 return $elm$core$Maybe$Nothing;
5125 } else {
5126 var _v0 = A2($elm$core$String$indexes, ':', str);
5127 if (!_v0.b) {
5128 return $elm$core$Maybe$Just(
5129 A6($elm$url$Url$Url, protocol, str, $elm$core$Maybe$Nothing, path, params, frag));
5130 } else {
5131 if (!_v0.b.b) {
5132 var i = _v0.a;
5133 var _v1 = $elm$core$String$toInt(
5134 A2($elm$core$String$dropLeft, i + 1, str));
5135 if (_v1.$ === 'Nothing') {
5136 return $elm$core$Maybe$Nothing;
5137 } else {
5138 var port_ = _v1;
5139 return $elm$core$Maybe$Just(
5140 A6(
5141 $elm$url$Url$Url,
5142 protocol,
5143 A2($elm$core$String$left, i, str),
5144 port_,
5145 path,
5146 params,
5147 frag));
5148 }
5149 } else {
5150 return $elm$core$Maybe$Nothing;
5151 }
5152 }
5153 }
5154 });
5155var $elm$url$Url$chompBeforeQuery = F4(
5156 function (protocol, params, frag, str) {
5157 if ($elm$core$String$isEmpty(str)) {
5158 return $elm$core$Maybe$Nothing;
5159 } else {
5160 var _v0 = A2($elm$core$String$indexes, '/', str);
5161 if (!_v0.b) {
5162 return A5($elm$url$Url$chompBeforePath, protocol, '/', params, frag, str);
5163 } else {
5164 var i = _v0.a;
5165 return A5(
5166 $elm$url$Url$chompBeforePath,
5167 protocol,
5168 A2($elm$core$String$dropLeft, i, str),
5169 params,
5170 frag,
5171 A2($elm$core$String$left, i, str));
5172 }
5173 }
5174 });
5175var $elm$url$Url$chompBeforeFragment = F3(
5176 function (protocol, frag, str) {
5177 if ($elm$core$String$isEmpty(str)) {
5178 return $elm$core$Maybe$Nothing;
5179 } else {
5180 var _v0 = A2($elm$core$String$indexes, '?', str);
5181 if (!_v0.b) {
5182 return A4($elm$url$Url$chompBeforeQuery, protocol, $elm$core$Maybe$Nothing, frag, str);
5183 } else {
5184 var i = _v0.a;
5185 return A4(
5186 $elm$url$Url$chompBeforeQuery,
5187 protocol,
5188 $elm$core$Maybe$Just(
5189 A2($elm$core$String$dropLeft, i + 1, str)),
5190 frag,
5191 A2($elm$core$String$left, i, str));
5192 }
5193 }
5194 });
5195var $elm$url$Url$chompAfterProtocol = F2(
5196 function (protocol, str) {
5197 if ($elm$core$String$isEmpty(str)) {
5198 return $elm$core$Maybe$Nothing;
5199 } else {
5200 var _v0 = A2($elm$core$String$indexes, '#', str);
5201 if (!_v0.b) {
5202 return A3($elm$url$Url$chompBeforeFragment, protocol, $elm$core$Maybe$Nothing, str);
5203 } else {
5204 var i = _v0.a;
5205 return A3(
5206 $elm$url$Url$chompBeforeFragment,
5207 protocol,
5208 $elm$core$Maybe$Just(
5209 A2($elm$core$String$dropLeft, i + 1, str)),
5210 A2($elm$core$String$left, i, str));
5211 }
5212 }
5213 });
5214var $elm$core$String$startsWith = _String_startsWith;
5215var $elm$url$Url$fromString = function (str) {
5216 return A2($elm$core$String$startsWith, 'http://', str) ? A2(
5217 $elm$url$Url$chompAfterProtocol,
5218 $elm$url$Url$Http,
5219 A2($elm$core$String$dropLeft, 7, str)) : (A2($elm$core$String$startsWith, 'https://', str) ? A2(
5220 $elm$url$Url$chompAfterProtocol,
5221 $elm$url$Url$Https,
5222 A2($elm$core$String$dropLeft, 8, str)) : $elm$core$Maybe$Nothing);
5223};
5224var $elm$core$Basics$never = function (_v0) {
5225 never:
5226 while (true) {
5227 var nvr = _v0.a;
5228 var $temp$_v0 = nvr;
5229 _v0 = $temp$_v0;
5230 continue never;
5231 }
5232};
5233var $elm$core$Task$Perform = function (a) {
5234 return {$: 'Perform', a: a};
5235};
5236var $elm$core$Task$succeed = _Scheduler_succeed;
5237var $elm$core$Task$init = $elm$core$Task$succeed(_Utils_Tuple0);
5238var $elm$core$List$foldrHelper = F4(
5239 function (fn, acc, ctr, ls) {
5240 if (!ls.b) {
5241 return acc;
5242 } else {
5243 var a = ls.a;
5244 var r1 = ls.b;
5245 if (!r1.b) {
5246 return A2(fn, a, acc);
5247 } else {
5248 var b = r1.a;
5249 var r2 = r1.b;
5250 if (!r2.b) {
5251 return A2(
5252 fn,
5253 a,
5254 A2(fn, b, acc));
5255 } else {
5256 var c = r2.a;
5257 var r3 = r2.b;
5258 if (!r3.b) {
5259 return A2(
5260 fn,
5261 a,
5262 A2(
5263 fn,
5264 b,
5265 A2(fn, c, acc)));
5266 } else {
5267 var d = r3.a;
5268 var r4 = r3.b;
5269 var res = (ctr > 500) ? A3(
5270 $elm$core$List$foldl,
5271 fn,
5272 acc,
5273 $elm$core$List$reverse(r4)) : A4($elm$core$List$foldrHelper, fn, acc, ctr + 1, r4);
5274 return A2(
5275 fn,
5276 a,
5277 A2(
5278 fn,
5279 b,
5280 A2(
5281 fn,
5282 c,
5283 A2(fn, d, res))));
5284 }
5285 }
5286 }
5287 }
5288 });
5289var $elm$core$List$foldr = F3(
5290 function (fn, acc, ls) {
5291 return A4($elm$core$List$foldrHelper, fn, acc, 0, ls);
5292 });
5293var $elm$core$List$map = F2(
5294 function (f, xs) {
5295 return A3(
5296 $elm$core$List$foldr,
5297 F2(
5298 function (x, acc) {
5299 return A2(
5300 $elm$core$List$cons,
5301 f(x),
5302 acc);
5303 }),
5304 _List_Nil,
5305 xs);
5306 });
5307var $elm$core$Task$andThen = _Scheduler_andThen;
5308var $elm$core$Task$map = F2(
5309 function (func, taskA) {
5310 return A2(
5311 $elm$core$Task$andThen,
5312 function (a) {
5313 return $elm$core$Task$succeed(
5314 func(a));
5315 },
5316 taskA);
5317 });
5318var $elm$core$Task$map2 = F3(
5319 function (func, taskA, taskB) {
5320 return A2(
5321 $elm$core$Task$andThen,
5322 function (a) {
5323 return A2(
5324 $elm$core$Task$andThen,
5325 function (b) {
5326 return $elm$core$Task$succeed(
5327 A2(func, a, b));
5328 },
5329 taskB);
5330 },
5331 taskA);
5332 });
5333var $elm$core$Task$sequence = function (tasks) {
5334 return A3(
5335 $elm$core$List$foldr,
5336 $elm$core$Task$map2($elm$core$List$cons),
5337 $elm$core$Task$succeed(_List_Nil),
5338 tasks);
5339};
5340var $elm$core$Platform$sendToApp = _Platform_sendToApp;
5341var $elm$core$Task$spawnCmd = F2(
5342 function (router, _v0) {
5343 var task = _v0.a;
5344 return _Scheduler_spawn(
5345 A2(
5346 $elm$core$Task$andThen,
5347 $elm$core$Platform$sendToApp(router),
5348 task));
5349 });
5350var $elm$core$Task$onEffects = F3(
5351 function (router, commands, state) {
5352 return A2(
5353 $elm$core$Task$map,
5354 function (_v0) {
5355 return _Utils_Tuple0;
5356 },
5357 $elm$core$Task$sequence(
5358 A2(
5359 $elm$core$List$map,
5360 $elm$core$Task$spawnCmd(router),
5361 commands)));
5362 });
5363var $elm$core$Task$onSelfMsg = F3(
5364 function (_v0, _v1, _v2) {
5365 return $elm$core$Task$succeed(_Utils_Tuple0);
5366 });
5367var $elm$core$Task$cmdMap = F2(
5368 function (tagger, _v0) {
5369 var task = _v0.a;
5370 return $elm$core$Task$Perform(
5371 A2($elm$core$Task$map, tagger, task));
5372 });
5373_Platform_effectManagers['Task'] = _Platform_createManager($elm$core$Task$init, $elm$core$Task$onEffects, $elm$core$Task$onSelfMsg, $elm$core$Task$cmdMap);
5374var $elm$core$Task$command = _Platform_leaf('Task');
5375var $elm$core$Task$perform = F2(
5376 function (toMessage, task) {
5377 return $elm$core$Task$command(
5378 $elm$core$Task$Perform(
5379 A2($elm$core$Task$map, toMessage, task)));
5380 });
5381var $elm$browser$Browser$application = _Browser_application;
5382var $author$project$Main$HomePage = {$: 'HomePage'};
5383var $author$project$Main$Model = F9(
5384 function (key, url, location, loginModel, catalogModel, productModel, signupModel, cartModel, checkoutModel) {
5385 return {cartModel: cartModel, catalogModel: catalogModel, checkoutModel: checkoutModel, key: key, location: location, loginModel: loginModel, productModel: productModel, signupModel: signupModel, url: url};
5386 });
5387var $author$project$Cart$Model = F2(
5388 function (pageStatus, products) {
5389 return {pageStatus: pageStatus, products: products};
5390 });
5391var $author$project$Cart$NotLoaded = {$: 'NotLoaded'};
5392var $author$project$Cart$init = A2($author$project$Cart$Model, $author$project$Cart$NotLoaded, _List_Nil);
5393var $author$project$Catalog$Model = F3(
5394 function (pageStatus, products, filters) {
5395 return {filters: filters, pageStatus: pageStatus, products: products};
5396 });
5397var $author$project$Catalog$NotLoaded = {$: 'NotLoaded'};
5398var $author$project$Catalog$Filters = F2(
5399 function (price, rating) {
5400 return {price: price, rating: rating};
5401 });
5402var $elm$core$Basics$negate = function (n) {
5403 return -n;
5404};
5405var $author$project$Catalog$defaultFilters = A2(
5406 $author$project$Catalog$Filters,
5407 _Utils_Tuple2(-1, 100000),
5408 _Utils_Tuple2(0, 5));
5409var $author$project$Catalog$init = A3($author$project$Catalog$Model, $author$project$Catalog$NotLoaded, _List_Nil, $author$project$Catalog$defaultFilters);
5410var $author$project$Checkout$Model = F3(
5411 function (pageStatus, paymentMode, cartTotal) {
5412 return {cartTotal: cartTotal, pageStatus: pageStatus, paymentMode: paymentMode};
5413 });
5414var $author$project$Checkout$NotLoaded = {$: 'NotLoaded'};
5415var $author$project$Checkout$init = A3($author$project$Checkout$Model, $author$project$Checkout$NotLoaded, 'Cash', 0);
5416var $author$project$Login$Model = F3(
5417 function (username, password, loginStatus) {
5418 return {loginStatus: loginStatus, password: password, username: username};
5419 });
5420var $author$project$Login$NotLoggedIn = {$: 'NotLoggedIn'};
5421var $author$project$Login$init = A3($author$project$Login$Model, '', '', $author$project$Login$NotLoggedIn);
5422var $author$project$Product$Model = F6(
5423 function (pageStatus, listing, ratings, ratingStars, ratingText, addRatingStatus) {
5424 return {addRatingStatus: addRatingStatus, listing: listing, pageStatus: pageStatus, ratingStars: ratingStars, ratingText: ratingText, ratings: ratings};
5425 });
5426var $author$project$Product$NotLoaded = {$: 'NotLoaded'};
5427var $author$project$Product$NotSubmitted = {$: 'NotSubmitted'};
5428var $author$project$Product$Product = F7(
5429 function (id, name, kind, price, description, src, iosSrc) {
5430 return {description: description, id: id, iosSrc: iosSrc, kind: kind, name: name, price: price, src: src};
5431 });
5432var $author$project$Product$emptyProduct = A7($author$project$Product$Product, -1, '', $elm$core$Maybe$Nothing, 0, $elm$core$Maybe$Nothing, '', '');
5433var $author$project$Product$init = A6($author$project$Product$Model, $author$project$Product$NotLoaded, $author$project$Product$emptyProduct, _List_Nil, 5, '', $author$project$Product$NotSubmitted);
5434var $author$project$Signup$Empty = {$: 'Empty'};
5435var $author$project$Signup$Model = F6(
5436 function (username, password, phoneNumber, emailId, address, status) {
5437 return {address: address, emailId: emailId, password: password, phoneNumber: phoneNumber, status: status, username: username};
5438 });
5439var $author$project$Signup$init = A6($author$project$Signup$Model, '', '', '', '', $elm$core$Maybe$Nothing, $author$project$Signup$Empty);
5440var $elm$core$Platform$Cmd$batch = _Platform_batch;
5441var $elm$core$Platform$Cmd$none = $elm$core$Platform$Cmd$batch(_List_Nil);
5442var $author$project$Main$init = F3(
5443 function (flags, url, key) {
5444 var start = $author$project$Main$HomePage;
5445 var signup = $author$project$Signup$init;
5446 var product = $author$project$Product$init;
5447 var login = $author$project$Login$init;
5448 var checkout = $author$project$Checkout$init;
5449 var catalog = $author$project$Catalog$init;
5450 var cart = $author$project$Cart$init;
5451 return _Utils_Tuple2(
5452 A9($author$project$Main$Model, key, url, start, login, catalog, product, signup, cart, checkout),
5453 $elm$core$Platform$Cmd$none);
5454 });
5455var $elm$core$Platform$Sub$batch = _Platform_batch;
5456var $elm$core$Platform$Sub$none = $elm$core$Platform$Sub$batch(_List_Nil);
5457var $author$project$Main$subscriptions = function (_v0) {
5458 return $elm$core$Platform$Sub$none;
5459};
5460var $author$project$Main$CartMessage = function (a) {
5461 return {$: 'CartMessage', a: a};
5462};
5463var $author$project$Main$CartPage = {$: 'CartPage'};
5464var $author$project$Main$CatalogMessage = function (a) {
5465 return {$: 'CatalogMessage', a: a};
5466};
5467var $author$project$Main$CatalogPage = {$: 'CatalogPage'};
5468var $author$project$Main$CheckoutMessage = function (a) {
5469 return {$: 'CheckoutMessage', a: a};
5470};
5471var $author$project$Main$CheckoutPage = {$: 'CheckoutPage'};
5472var $author$project$Main$LoginMessage = function (a) {
5473 return {$: 'LoginMessage', a: a};
5474};
5475var $author$project$Main$NotFoundPage = {$: 'NotFoundPage'};
5476var $author$project$Main$ProductMessage = function (a) {
5477 return {$: 'ProductMessage', a: a};
5478};
5479var $author$project$Main$ProductPage = function (a) {
5480 return {$: 'ProductPage', a: a};
5481};
5482var $author$project$Main$SignupMessage = function (a) {
5483 return {$: 'SignupMessage', a: a};
5484};
5485var $author$project$Checkout$AmountLoaded = function (a) {
5486 return {$: 'AmountLoaded', a: a};
5487};
5488var $elm$http$Http$BadStatus_ = F2(
5489 function (a, b) {
5490 return {$: 'BadStatus_', a: a, b: b};
5491 });
5492var $elm$http$Http$BadUrl_ = function (a) {
5493 return {$: 'BadUrl_', a: a};
5494};
5495var $elm$http$Http$GoodStatus_ = F2(
5496 function (a, b) {
5497 return {$: 'GoodStatus_', a: a, b: b};
5498 });
5499var $elm$http$Http$NetworkError_ = {$: 'NetworkError_'};
5500var $elm$http$Http$Receiving = function (a) {
5501 return {$: 'Receiving', a: a};
5502};
5503var $elm$http$Http$Sending = function (a) {
5504 return {$: 'Sending', a: a};
5505};
5506var $elm$http$Http$Timeout_ = {$: 'Timeout_'};
5507var $elm$core$Dict$RBEmpty_elm_builtin = {$: 'RBEmpty_elm_builtin'};
5508var $elm$core$Dict$empty = $elm$core$Dict$RBEmpty_elm_builtin;
5509var $elm$core$Maybe$isJust = function (maybe) {
5510 if (maybe.$ === 'Just') {
5511 return true;
5512 } else {
5513 return false;
5514 }
5515};
5516var $elm$core$Platform$sendToSelf = _Platform_sendToSelf;
5517var $elm$core$Basics$compare = _Utils_compare;
5518var $elm$core$Dict$get = F2(
5519 function (targetKey, dict) {
5520 get:
5521 while (true) {
5522 if (dict.$ === 'RBEmpty_elm_builtin') {
5523 return $elm$core$Maybe$Nothing;
5524 } else {
5525 var key = dict.b;
5526 var value = dict.c;
5527 var left = dict.d;
5528 var right = dict.e;
5529 var _v1 = A2($elm$core$Basics$compare, targetKey, key);
5530 switch (_v1.$) {
5531 case 'LT':
5532 var $temp$targetKey = targetKey,
5533 $temp$dict = left;
5534 targetKey = $temp$targetKey;
5535 dict = $temp$dict;
5536 continue get;
5537 case 'EQ':
5538 return $elm$core$Maybe$Just(value);
5539 default:
5540 var $temp$targetKey = targetKey,
5541 $temp$dict = right;
5542 targetKey = $temp$targetKey;
5543 dict = $temp$dict;
5544 continue get;
5545 }
5546 }
5547 }
5548 });
5549var $elm$core$Dict$Black = {$: 'Black'};
5550var $elm$core$Dict$RBNode_elm_builtin = F5(
5551 function (a, b, c, d, e) {
5552 return {$: 'RBNode_elm_builtin', a: a, b: b, c: c, d: d, e: e};
5553 });
5554var $elm$core$Dict$Red = {$: 'Red'};
5555var $elm$core$Dict$balance = F5(
5556 function (color, key, value, left, right) {
5557 if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Red')) {
5558 var _v1 = right.a;
5559 var rK = right.b;
5560 var rV = right.c;
5561 var rLeft = right.d;
5562 var rRight = right.e;
5563 if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) {
5564 var _v3 = left.a;
5565 var lK = left.b;
5566 var lV = left.c;
5567 var lLeft = left.d;
5568 var lRight = left.e;
5569 return A5(
5570 $elm$core$Dict$RBNode_elm_builtin,
5571 $elm$core$Dict$Red,
5572 key,
5573 value,
5574 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, lK, lV, lLeft, lRight),
5575 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rLeft, rRight));
5576 } else {
5577 return A5(
5578 $elm$core$Dict$RBNode_elm_builtin,
5579 color,
5580 rK,
5581 rV,
5582 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, left, rLeft),
5583 rRight);
5584 }
5585 } else {
5586 if ((((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) && (left.d.$ === 'RBNode_elm_builtin')) && (left.d.a.$ === 'Red')) {
5587 var _v5 = left.a;
5588 var lK = left.b;
5589 var lV = left.c;
5590 var _v6 = left.d;
5591 var _v7 = _v6.a;
5592 var llK = _v6.b;
5593 var llV = _v6.c;
5594 var llLeft = _v6.d;
5595 var llRight = _v6.e;
5596 var lRight = left.e;
5597 return A5(
5598 $elm$core$Dict$RBNode_elm_builtin,
5599 $elm$core$Dict$Red,
5600 lK,
5601 lV,
5602 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight),
5603 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, key, value, lRight, right));
5604 } else {
5605 return A5($elm$core$Dict$RBNode_elm_builtin, color, key, value, left, right);
5606 }
5607 }
5608 });
5609var $elm$core$Dict$insertHelp = F3(
5610 function (key, value, dict) {
5611 if (dict.$ === 'RBEmpty_elm_builtin') {
5612 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);
5613 } else {
5614 var nColor = dict.a;
5615 var nKey = dict.b;
5616 var nValue = dict.c;
5617 var nLeft = dict.d;
5618 var nRight = dict.e;
5619 var _v1 = A2($elm$core$Basics$compare, key, nKey);
5620 switch (_v1.$) {
5621 case 'LT':
5622 return A5(
5623 $elm$core$Dict$balance,
5624 nColor,
5625 nKey,
5626 nValue,
5627 A3($elm$core$Dict$insertHelp, key, value, nLeft),
5628 nRight);
5629 case 'EQ':
5630 return A5($elm$core$Dict$RBNode_elm_builtin, nColor, nKey, value, nLeft, nRight);
5631 default:
5632 return A5(
5633 $elm$core$Dict$balance,
5634 nColor,
5635 nKey,
5636 nValue,
5637 nLeft,
5638 A3($elm$core$Dict$insertHelp, key, value, nRight));
5639 }
5640 }
5641 });
5642var $elm$core$Dict$insert = F3(
5643 function (key, value, dict) {
5644 var _v0 = A3($elm$core$Dict$insertHelp, key, value, dict);
5645 if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) {
5646 var _v1 = _v0.a;
5647 var k = _v0.b;
5648 var v = _v0.c;
5649 var l = _v0.d;
5650 var r = _v0.e;
5651 return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r);
5652 } else {
5653 var x = _v0;
5654 return x;
5655 }
5656 });
5657var $elm$core$Dict$getMin = function (dict) {
5658 getMin:
5659 while (true) {
5660 if ((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) {
5661 var left = dict.d;
5662 var $temp$dict = left;
5663 dict = $temp$dict;
5664 continue getMin;
5665 } else {
5666 return dict;
5667 }
5668 }
5669};
5670var $elm$core$Dict$moveRedLeft = function (dict) {
5671 if (((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) && (dict.e.$ === 'RBNode_elm_builtin')) {
5672 if ((dict.e.d.$ === 'RBNode_elm_builtin') && (dict.e.d.a.$ === 'Red')) {
5673 var clr = dict.a;
5674 var k = dict.b;
5675 var v = dict.c;
5676 var _v1 = dict.d;
5677 var lClr = _v1.a;
5678 var lK = _v1.b;
5679 var lV = _v1.c;
5680 var lLeft = _v1.d;
5681 var lRight = _v1.e;
5682 var _v2 = dict.e;
5683 var rClr = _v2.a;
5684 var rK = _v2.b;
5685 var rV = _v2.c;
5686 var rLeft = _v2.d;
5687 var _v3 = rLeft.a;
5688 var rlK = rLeft.b;
5689 var rlV = rLeft.c;
5690 var rlL = rLeft.d;
5691 var rlR = rLeft.e;
5692 var rRight = _v2.e;
5693 return A5(
5694 $elm$core$Dict$RBNode_elm_builtin,
5695 $elm$core$Dict$Red,
5696 rlK,
5697 rlV,
5698 A5(
5699 $elm$core$Dict$RBNode_elm_builtin,
5700 $elm$core$Dict$Black,
5701 k,
5702 v,
5703 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
5704 rlL),
5705 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rlR, rRight));
5706 } else {
5707 var clr = dict.a;
5708 var k = dict.b;
5709 var v = dict.c;
5710 var _v4 = dict.d;
5711 var lClr = _v4.a;
5712 var lK = _v4.b;
5713 var lV = _v4.c;
5714 var lLeft = _v4.d;
5715 var lRight = _v4.e;
5716 var _v5 = dict.e;
5717 var rClr = _v5.a;
5718 var rK = _v5.b;
5719 var rV = _v5.c;
5720 var rLeft = _v5.d;
5721 var rRight = _v5.e;
5722 if (clr.$ === 'Black') {
5723 return A5(
5724 $elm$core$Dict$RBNode_elm_builtin,
5725 $elm$core$Dict$Black,
5726 k,
5727 v,
5728 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
5729 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
5730 } else {
5731 return A5(
5732 $elm$core$Dict$RBNode_elm_builtin,
5733 $elm$core$Dict$Black,
5734 k,
5735 v,
5736 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
5737 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
5738 }
5739 }
5740 } else {
5741 return dict;
5742 }
5743};
5744var $elm$core$Dict$moveRedRight = function (dict) {
5745 if (((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) && (dict.e.$ === 'RBNode_elm_builtin')) {
5746 if ((dict.d.d.$ === 'RBNode_elm_builtin') && (dict.d.d.a.$ === 'Red')) {
5747 var clr = dict.a;
5748 var k = dict.b;
5749 var v = dict.c;
5750 var _v1 = dict.d;
5751 var lClr = _v1.a;
5752 var lK = _v1.b;
5753 var lV = _v1.c;
5754 var _v2 = _v1.d;
5755 var _v3 = _v2.a;
5756 var llK = _v2.b;
5757 var llV = _v2.c;
5758 var llLeft = _v2.d;
5759 var llRight = _v2.e;
5760 var lRight = _v1.e;
5761 var _v4 = dict.e;
5762 var rClr = _v4.a;
5763 var rK = _v4.b;
5764 var rV = _v4.c;
5765 var rLeft = _v4.d;
5766 var rRight = _v4.e;
5767 return A5(
5768 $elm$core$Dict$RBNode_elm_builtin,
5769 $elm$core$Dict$Red,
5770 lK,
5771 lV,
5772 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight),
5773 A5(
5774 $elm$core$Dict$RBNode_elm_builtin,
5775 $elm$core$Dict$Black,
5776 k,
5777 v,
5778 lRight,
5779 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight)));
5780 } else {
5781 var clr = dict.a;
5782 var k = dict.b;
5783 var v = dict.c;
5784 var _v5 = dict.d;
5785 var lClr = _v5.a;
5786 var lK = _v5.b;
5787 var lV = _v5.c;
5788 var lLeft = _v5.d;
5789 var lRight = _v5.e;
5790 var _v6 = dict.e;
5791 var rClr = _v6.a;
5792 var rK = _v6.b;
5793 var rV = _v6.c;
5794 var rLeft = _v6.d;
5795 var rRight = _v6.e;
5796 if (clr.$ === 'Black') {
5797 return A5(
5798 $elm$core$Dict$RBNode_elm_builtin,
5799 $elm$core$Dict$Black,
5800 k,
5801 v,
5802 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
5803 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
5804 } else {
5805 return A5(
5806 $elm$core$Dict$RBNode_elm_builtin,
5807 $elm$core$Dict$Black,
5808 k,
5809 v,
5810 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
5811 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
5812 }
5813 }
5814 } else {
5815 return dict;
5816 }
5817};
5818var $elm$core$Dict$removeHelpPrepEQGT = F7(
5819 function (targetKey, dict, color, key, value, left, right) {
5820 if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) {
5821 var _v1 = left.a;
5822 var lK = left.b;
5823 var lV = left.c;
5824 var lLeft = left.d;
5825 var lRight = left.e;
5826 return A5(
5827 $elm$core$Dict$RBNode_elm_builtin,
5828 color,
5829 lK,
5830 lV,
5831 lLeft,
5832 A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, lRight, right));
5833 } else {
5834 _v2$2:
5835 while (true) {
5836 if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Black')) {
5837 if (right.d.$ === 'RBNode_elm_builtin') {
5838 if (right.d.a.$ === 'Black') {
5839 var _v3 = right.a;
5840 var _v4 = right.d;
5841 var _v5 = _v4.a;
5842 return $elm$core$Dict$moveRedRight(dict);
5843 } else {
5844 break _v2$2;
5845 }
5846 } else {
5847 var _v6 = right.a;
5848 var _v7 = right.d;
5849 return $elm$core$Dict$moveRedRight(dict);
5850 }
5851 } else {
5852 break _v2$2;
5853 }
5854 }
5855 return dict;
5856 }
5857 });
5858var $elm$core$Dict$removeMin = function (dict) {
5859 if ((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) {
5860 var color = dict.a;
5861 var key = dict.b;
5862 var value = dict.c;
5863 var left = dict.d;
5864 var lColor = left.a;
5865 var lLeft = left.d;
5866 var right = dict.e;
5867 if (lColor.$ === 'Black') {
5868 if ((lLeft.$ === 'RBNode_elm_builtin') && (lLeft.a.$ === 'Red')) {
5869 var _v3 = lLeft.a;
5870 return A5(
5871 $elm$core$Dict$RBNode_elm_builtin,
5872 color,
5873 key,
5874 value,
5875 $elm$core$Dict$removeMin(left),
5876 right);
5877 } else {
5878 var _v4 = $elm$core$Dict$moveRedLeft(dict);
5879 if (_v4.$ === 'RBNode_elm_builtin') {
5880 var nColor = _v4.a;
5881 var nKey = _v4.b;
5882 var nValue = _v4.c;
5883 var nLeft = _v4.d;
5884 var nRight = _v4.e;
5885 return A5(
5886 $elm$core$Dict$balance,
5887 nColor,
5888 nKey,
5889 nValue,
5890 $elm$core$Dict$removeMin(nLeft),
5891 nRight);
5892 } else {
5893 return $elm$core$Dict$RBEmpty_elm_builtin;
5894 }
5895 }
5896 } else {
5897 return A5(
5898 $elm$core$Dict$RBNode_elm_builtin,
5899 color,
5900 key,
5901 value,
5902 $elm$core$Dict$removeMin(left),
5903 right);
5904 }
5905 } else {
5906 return $elm$core$Dict$RBEmpty_elm_builtin;
5907 }
5908};
5909var $elm$core$Dict$removeHelp = F2(
5910 function (targetKey, dict) {
5911 if (dict.$ === 'RBEmpty_elm_builtin') {
5912 return $elm$core$Dict$RBEmpty_elm_builtin;
5913 } else {
5914 var color = dict.a;
5915 var key = dict.b;
5916 var value = dict.c;
5917 var left = dict.d;
5918 var right = dict.e;
5919 if (_Utils_cmp(targetKey, key) < 0) {
5920 if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Black')) {
5921 var _v4 = left.a;
5922 var lLeft = left.d;
5923 if ((lLeft.$ === 'RBNode_elm_builtin') && (lLeft.a.$ === 'Red')) {
5924 var _v6 = lLeft.a;
5925 return A5(
5926 $elm$core$Dict$RBNode_elm_builtin,
5927 color,
5928 key,
5929 value,
5930 A2($elm$core$Dict$removeHelp, targetKey, left),
5931 right);
5932 } else {
5933 var _v7 = $elm$core$Dict$moveRedLeft(dict);
5934 if (_v7.$ === 'RBNode_elm_builtin') {
5935 var nColor = _v7.a;
5936 var nKey = _v7.b;
5937 var nValue = _v7.c;
5938 var nLeft = _v7.d;
5939 var nRight = _v7.e;
5940 return A5(
5941 $elm$core$Dict$balance,
5942 nColor,
5943 nKey,
5944 nValue,
5945 A2($elm$core$Dict$removeHelp, targetKey, nLeft),
5946 nRight);
5947 } else {
5948 return $elm$core$Dict$RBEmpty_elm_builtin;
5949 }
5950 }
5951 } else {
5952 return A5(
5953 $elm$core$Dict$RBNode_elm_builtin,
5954 color,
5955 key,
5956 value,
5957 A2($elm$core$Dict$removeHelp, targetKey, left),
5958 right);
5959 }
5960 } else {
5961 return A2(
5962 $elm$core$Dict$removeHelpEQGT,
5963 targetKey,
5964 A7($elm$core$Dict$removeHelpPrepEQGT, targetKey, dict, color, key, value, left, right));
5965 }
5966 }
5967 });
5968var $elm$core$Dict$removeHelpEQGT = F2(
5969 function (targetKey, dict) {
5970 if (dict.$ === 'RBNode_elm_builtin') {
5971 var color = dict.a;
5972 var key = dict.b;
5973 var value = dict.c;
5974 var left = dict.d;
5975 var right = dict.e;
5976 if (_Utils_eq(targetKey, key)) {
5977 var _v1 = $elm$core$Dict$getMin(right);
5978 if (_v1.$ === 'RBNode_elm_builtin') {
5979 var minKey = _v1.b;
5980 var minValue = _v1.c;
5981 return A5(
5982 $elm$core$Dict$balance,
5983 color,
5984 minKey,
5985 minValue,
5986 left,
5987 $elm$core$Dict$removeMin(right));
5988 } else {
5989 return $elm$core$Dict$RBEmpty_elm_builtin;
5990 }
5991 } else {
5992 return A5(
5993 $elm$core$Dict$balance,
5994 color,
5995 key,
5996 value,
5997 left,
5998 A2($elm$core$Dict$removeHelp, targetKey, right));
5999 }
6000 } else {
6001 return $elm$core$Dict$RBEmpty_elm_builtin;
6002 }
6003 });
6004var $elm$core$Dict$remove = F2(
6005 function (key, dict) {
6006 var _v0 = A2($elm$core$Dict$removeHelp, key, dict);
6007 if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) {
6008 var _v1 = _v0.a;
6009 var k = _v0.b;
6010 var v = _v0.c;
6011 var l = _v0.d;
6012 var r = _v0.e;
6013 return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r);
6014 } else {
6015 var x = _v0;
6016 return x;
6017 }
6018 });
6019var $elm$core$Dict$update = F3(
6020 function (targetKey, alter, dictionary) {
6021 var _v0 = alter(
6022 A2($elm$core$Dict$get, targetKey, dictionary));
6023 if (_v0.$ === 'Just') {
6024 var value = _v0.a;
6025 return A3($elm$core$Dict$insert, targetKey, value, dictionary);
6026 } else {
6027 return A2($elm$core$Dict$remove, targetKey, dictionary);
6028 }
6029 });
6030var $elm$http$Http$emptyBody = _Http_emptyBody;
6031var $elm$json$Json$Decode$decodeString = _Json_runOnString;
6032var $elm$core$Basics$composeR = F3(
6033 function (f, g, x) {
6034 return g(
6035 f(x));
6036 });
6037var $elm$http$Http$expectStringResponse = F2(
6038 function (toMsg, toResult) {
6039 return A3(
6040 _Http_expect,
6041 '',
6042 $elm$core$Basics$identity,
6043 A2($elm$core$Basics$composeR, toResult, toMsg));
6044 });
6045var $elm$core$Result$mapError = F2(
6046 function (f, result) {
6047 if (result.$ === 'Ok') {
6048 var v = result.a;
6049 return $elm$core$Result$Ok(v);
6050 } else {
6051 var e = result.a;
6052 return $elm$core$Result$Err(
6053 f(e));
6054 }
6055 });
6056var $elm$http$Http$BadBody = function (a) {
6057 return {$: 'BadBody', a: a};
6058};
6059var $elm$http$Http$BadStatus = function (a) {
6060 return {$: 'BadStatus', a: a};
6061};
6062var $elm$http$Http$BadUrl = function (a) {
6063 return {$: 'BadUrl', a: a};
6064};
6065var $elm$http$Http$NetworkError = {$: 'NetworkError'};
6066var $elm$http$Http$Timeout = {$: 'Timeout'};
6067var $elm$http$Http$resolve = F2(
6068 function (toResult, response) {
6069 switch (response.$) {
6070 case 'BadUrl_':
6071 var url = response.a;
6072 return $elm$core$Result$Err(
6073 $elm$http$Http$BadUrl(url));
6074 case 'Timeout_':
6075 return $elm$core$Result$Err($elm$http$Http$Timeout);
6076 case 'NetworkError_':
6077 return $elm$core$Result$Err($elm$http$Http$NetworkError);
6078 case 'BadStatus_':
6079 var metadata = response.a;
6080 return $elm$core$Result$Err(
6081 $elm$http$Http$BadStatus(metadata.statusCode));
6082 default:
6083 var body = response.b;
6084 return A2(
6085 $elm$core$Result$mapError,
6086 $elm$http$Http$BadBody,
6087 toResult(body));
6088 }
6089 });
6090var $elm$http$Http$expectJson = F2(
6091 function (toMsg, decoder) {
6092 return A2(
6093 $elm$http$Http$expectStringResponse,
6094 toMsg,
6095 $elm$http$Http$resolve(
6096 function (string) {
6097 return A2(
6098 $elm$core$Result$mapError,
6099 $elm$json$Json$Decode$errorToString,
6100 A2($elm$json$Json$Decode$decodeString, decoder, string));
6101 }));
6102 });
6103var $elm$json$Json$Decode$float = _Json_decodeFloat;
6104var $elm$http$Http$Request = function (a) {
6105 return {$: 'Request', a: a};
6106};
6107var $elm$http$Http$State = F2(
6108 function (reqs, subs) {
6109 return {reqs: reqs, subs: subs};
6110 });
6111var $elm$http$Http$init = $elm$core$Task$succeed(
6112 A2($elm$http$Http$State, $elm$core$Dict$empty, _List_Nil));
6113var $elm$core$Process$kill = _Scheduler_kill;
6114var $elm$core$Process$spawn = _Scheduler_spawn;
6115var $elm$http$Http$updateReqs = F3(
6116 function (router, cmds, reqs) {
6117 updateReqs:
6118 while (true) {
6119 if (!cmds.b) {
6120 return $elm$core$Task$succeed(reqs);
6121 } else {
6122 var cmd = cmds.a;
6123 var otherCmds = cmds.b;
6124 if (cmd.$ === 'Cancel') {
6125 var tracker = cmd.a;
6126 var _v2 = A2($elm$core$Dict$get, tracker, reqs);
6127 if (_v2.$ === 'Nothing') {
6128 var $temp$router = router,
6129 $temp$cmds = otherCmds,
6130 $temp$reqs = reqs;
6131 router = $temp$router;
6132 cmds = $temp$cmds;
6133 reqs = $temp$reqs;
6134 continue updateReqs;
6135 } else {
6136 var pid = _v2.a;
6137 return A2(
6138 $elm$core$Task$andThen,
6139 function (_v3) {
6140 return A3(
6141 $elm$http$Http$updateReqs,
6142 router,
6143 otherCmds,
6144 A2($elm$core$Dict$remove, tracker, reqs));
6145 },
6146 $elm$core$Process$kill(pid));
6147 }
6148 } else {
6149 var req = cmd.a;
6150 return A2(
6151 $elm$core$Task$andThen,
6152 function (pid) {
6153 var _v4 = req.tracker;
6154 if (_v4.$ === 'Nothing') {
6155 return A3($elm$http$Http$updateReqs, router, otherCmds, reqs);
6156 } else {
6157 var tracker = _v4.a;
6158 return A3(
6159 $elm$http$Http$updateReqs,
6160 router,
6161 otherCmds,
6162 A3($elm$core$Dict$insert, tracker, pid, reqs));
6163 }
6164 },
6165 $elm$core$Process$spawn(
6166 A3(
6167 _Http_toTask,
6168 router,
6169 $elm$core$Platform$sendToApp(router),
6170 req)));
6171 }
6172 }
6173 }
6174 });
6175var $elm$http$Http$onEffects = F4(
6176 function (router, cmds, subs, state) {
6177 return A2(
6178 $elm$core$Task$andThen,
6179 function (reqs) {
6180 return $elm$core$Task$succeed(
6181 A2($elm$http$Http$State, reqs, subs));
6182 },
6183 A3($elm$http$Http$updateReqs, router, cmds, state.reqs));
6184 });
6185var $elm$core$List$maybeCons = F3(
6186 function (f, mx, xs) {
6187 var _v0 = f(mx);
6188 if (_v0.$ === 'Just') {
6189 var x = _v0.a;
6190 return A2($elm$core$List$cons, x, xs);
6191 } else {
6192 return xs;
6193 }
6194 });
6195var $elm$core$List$filterMap = F2(
6196 function (f, xs) {
6197 return A3(
6198 $elm$core$List$foldr,
6199 $elm$core$List$maybeCons(f),
6200 _List_Nil,
6201 xs);
6202 });
6203var $elm$http$Http$maybeSend = F4(
6204 function (router, desiredTracker, progress, _v0) {
6205 var actualTracker = _v0.a;
6206 var toMsg = _v0.b;
6207 return _Utils_eq(desiredTracker, actualTracker) ? $elm$core$Maybe$Just(
6208 A2(
6209 $elm$core$Platform$sendToApp,
6210 router,
6211 toMsg(progress))) : $elm$core$Maybe$Nothing;
6212 });
6213var $elm$http$Http$onSelfMsg = F3(
6214 function (router, _v0, state) {
6215 var tracker = _v0.a;
6216 var progress = _v0.b;
6217 return A2(
6218 $elm$core$Task$andThen,
6219 function (_v1) {
6220 return $elm$core$Task$succeed(state);
6221 },
6222 $elm$core$Task$sequence(
6223 A2(
6224 $elm$core$List$filterMap,
6225 A3($elm$http$Http$maybeSend, router, tracker, progress),
6226 state.subs)));
6227 });
6228var $elm$http$Http$Cancel = function (a) {
6229 return {$: 'Cancel', a: a};
6230};
6231var $elm$http$Http$cmdMap = F2(
6232 function (func, cmd) {
6233 if (cmd.$ === 'Cancel') {
6234 var tracker = cmd.a;
6235 return $elm$http$Http$Cancel(tracker);
6236 } else {
6237 var r = cmd.a;
6238 return $elm$http$Http$Request(
6239 {
6240 allowCookiesFromOtherDomains: r.allowCookiesFromOtherDomains,
6241 body: r.body,
6242 expect: A2(_Http_mapExpect, func, r.expect),
6243 headers: r.headers,
6244 method: r.method,
6245 timeout: r.timeout,
6246 tracker: r.tracker,
6247 url: r.url
6248 });
6249 }
6250 });
6251var $elm$http$Http$MySub = F2(
6252 function (a, b) {
6253 return {$: 'MySub', a: a, b: b};
6254 });
6255var $elm$http$Http$subMap = F2(
6256 function (func, _v0) {
6257 var tracker = _v0.a;
6258 var toMsg = _v0.b;
6259 return A2(
6260 $elm$http$Http$MySub,
6261 tracker,
6262 A2($elm$core$Basics$composeR, toMsg, func));
6263 });
6264_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);
6265var $elm$http$Http$command = _Platform_leaf('Http');
6266var $elm$http$Http$subscription = _Platform_leaf('Http');
6267var $elm$http$Http$riskyRequest = function (r) {
6268 return $elm$http$Http$command(
6269 $elm$http$Http$Request(
6270 {allowCookiesFromOtherDomains: true, body: r.body, expect: r.expect, headers: r.headers, method: r.method, timeout: r.timeout, tracker: r.tracker, url: r.url}));
6271};
6272var $author$project$Checkout$fetchAmount = $elm$http$Http$riskyRequest(
6273 {
6274 body: $elm$http$Http$emptyBody,
6275 expect: A2($elm$http$Http$expectJson, $author$project$Checkout$AmountLoaded, $elm$json$Json$Decode$float),
6276 headers: _List_Nil,
6277 method: 'GET',
6278 timeout: $elm$core$Maybe$Nothing,
6279 tracker: $elm$core$Maybe$Nothing,
6280 url: 'http://127.0.0.1:7878/cart/total'
6281 });
6282var $author$project$Cart$CartLoaded = function (a) {
6283 return {$: 'CartLoaded', a: a};
6284};
6285var $author$project$Cart$CartListing = F2(
6286 function (productItem, quantity) {
6287 return {productItem: productItem, quantity: quantity};
6288 });
6289var $author$project$Cart$Product = F5(
6290 function (id, name, kind, price, description) {
6291 return {description: description, id: id, kind: kind, name: name, price: price};
6292 });
6293var $elm$json$Json$Decode$field = _Json_decodeField;
6294var $elm$json$Json$Decode$int = _Json_decodeInt;
6295var $elm$json$Json$Decode$map5 = _Json_map5;
6296var $elm$json$Json$Decode$null = _Json_decodeNull;
6297var $elm$json$Json$Decode$oneOf = _Json_oneOf;
6298var $elm$json$Json$Decode$nullable = function (decoder) {
6299 return $elm$json$Json$Decode$oneOf(
6300 _List_fromArray(
6301 [
6302 $elm$json$Json$Decode$null($elm$core$Maybe$Nothing),
6303 A2($elm$json$Json$Decode$map, $elm$core$Maybe$Just, decoder)
6304 ]));
6305};
6306var $elm$json$Json$Decode$string = _Json_decodeString;
6307var $author$project$Cart$decodeProduct = A6(
6308 $elm$json$Json$Decode$map5,
6309 $author$project$Cart$Product,
6310 A2($elm$json$Json$Decode$field, 'id', $elm$json$Json$Decode$int),
6311 A2($elm$json$Json$Decode$field, 'name', $elm$json$Json$Decode$string),
6312 A2(
6313 $elm$json$Json$Decode$field,
6314 'kind',
6315 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)),
6316 A2($elm$json$Json$Decode$field, 'price', $elm$json$Json$Decode$float),
6317 A2(
6318 $elm$json$Json$Decode$field,
6319 'description',
6320 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)));
6321var $elm$json$Json$Decode$list = _Json_decodeList;
6322var $author$project$Cart$decodeResponse = $elm$json$Json$Decode$list(
6323 A3(
6324 $elm$json$Json$Decode$map2,
6325 $author$project$Cart$CartListing,
6326 A2($elm$json$Json$Decode$field, 'product_item', $author$project$Cart$decodeProduct),
6327 A2($elm$json$Json$Decode$field, 'quantity', $elm$json$Json$Decode$int)));
6328var $elm$core$Debug$log = _Debug_log;
6329var $author$project$Cart$fetchCartItems = function () {
6330 var _v0 = A2($elm$core$Debug$log, 'cart', 'fetching cart items');
6331 return $elm$http$Http$riskyRequest(
6332 {
6333 body: $elm$http$Http$emptyBody,
6334 expect: A2($elm$http$Http$expectJson, $author$project$Cart$CartLoaded, $author$project$Cart$decodeResponse),
6335 headers: _List_Nil,
6336 method: 'GET',
6337 timeout: $elm$core$Maybe$Nothing,
6338 tracker: $elm$core$Maybe$Nothing,
6339 url: 'http://127.0.0.1:7878/cart/items'
6340 });
6341}();
6342var $author$project$Product$ListingLoaded = function (a) {
6343 return {$: 'ListingLoaded', a: a};
6344};
6345var $elm$json$Json$Decode$map7 = _Json_map7;
6346var $author$project$Product$decodeProduct = A8(
6347 $elm$json$Json$Decode$map7,
6348 $author$project$Product$Product,
6349 A2($elm$json$Json$Decode$field, 'id', $elm$json$Json$Decode$int),
6350 A2($elm$json$Json$Decode$field, 'name', $elm$json$Json$Decode$string),
6351 A2(
6352 $elm$json$Json$Decode$field,
6353 'kind',
6354 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)),
6355 A2($elm$json$Json$Decode$field, 'price', $elm$json$Json$Decode$float),
6356 A2(
6357 $elm$json$Json$Decode$field,
6358 'description',
6359 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)),
6360 A2($elm$json$Json$Decode$field, 'src', $elm$json$Json$Decode$string),
6361 A2($elm$json$Json$Decode$field, 'ios_src', $elm$json$Json$Decode$string));
6362var $elm$http$Http$request = function (r) {
6363 return $elm$http$Http$command(
6364 $elm$http$Http$Request(
6365 {allowCookiesFromOtherDomains: false, body: r.body, expect: r.expect, headers: r.headers, method: r.method, timeout: r.timeout, tracker: r.tracker, url: r.url}));
6366};
6367var $elm$http$Http$get = function (r) {
6368 return $elm$http$Http$request(
6369 {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});
6370};
6371var $author$project$Product$fetchListing = function (id) {
6372 var _v0 = A2(
6373 $elm$core$Debug$log,
6374 'err',
6375 'fetching listing ' + $elm$core$String$fromInt(id));
6376 return $elm$http$Http$get(
6377 {
6378 expect: A2($elm$http$Http$expectJson, $author$project$Product$ListingLoaded, $author$project$Product$decodeProduct),
6379 url: 'http://127.0.0.1:7878/product/' + $elm$core$String$fromInt(id)
6380 });
6381};
6382var $author$project$Catalog$ProductsLoaded = function (a) {
6383 return {$: 'ProductsLoaded', a: a};
6384};
6385var $author$project$Catalog$Product = F8(
6386 function (id, name, kind, price, description, averageRating, src, iosSrc) {
6387 return {averageRating: averageRating, description: description, id: id, iosSrc: iosSrc, kind: kind, name: name, price: price, src: src};
6388 });
6389var $elm$json$Json$Decode$map8 = _Json_map8;
6390var $author$project$Catalog$decodeProduct = A9(
6391 $elm$json$Json$Decode$map8,
6392 $author$project$Catalog$Product,
6393 A2($elm$json$Json$Decode$field, 'id', $elm$json$Json$Decode$int),
6394 A2($elm$json$Json$Decode$field, 'name', $elm$json$Json$Decode$string),
6395 A2(
6396 $elm$json$Json$Decode$field,
6397 'kind',
6398 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)),
6399 A2($elm$json$Json$Decode$field, 'price', $elm$json$Json$Decode$float),
6400 A2(
6401 $elm$json$Json$Decode$field,
6402 'description',
6403 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)),
6404 A2(
6405 $elm$json$Json$Decode$field,
6406 'average_rating',
6407 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$float)),
6408 A2($elm$json$Json$Decode$field, 'src', $elm$json$Json$Decode$string),
6409 A2($elm$json$Json$Decode$field, 'ios_src', $elm$json$Json$Decode$string));
6410var $author$project$Catalog$decodeResponse = $elm$json$Json$Decode$list($author$project$Catalog$decodeProduct);
6411var $author$project$Catalog$fetchProducts = function () {
6412 var _v0 = A2($elm$core$Debug$log, 'err', 'fetching products');
6413 return $elm$http$Http$get(
6414 {
6415 expect: A2($elm$http$Http$expectJson, $author$project$Catalog$ProductsLoaded, $author$project$Catalog$decodeResponse),
6416 url: 'http://127.0.0.1:7878/product/catalog'
6417 });
6418}();
6419var $author$project$Product$RatingsLoaded = function (a) {
6420 return {$: 'RatingsLoaded', a: a};
6421};
6422var $author$project$Product$Rating = F5(
6423 function (commentDate, commentText, customerName, productName, stars) {
6424 return {commentDate: commentDate, commentText: commentText, customerName: customerName, productName: productName, stars: stars};
6425 });
6426var $author$project$Product$decodeRating = A6(
6427 $elm$json$Json$Decode$map5,
6428 $author$project$Product$Rating,
6429 A2($elm$json$Json$Decode$field, 'comment_date', $elm$json$Json$Decode$string),
6430 A2(
6431 $elm$json$Json$Decode$field,
6432 'comment_text',
6433 $elm$json$Json$Decode$nullable($elm$json$Json$Decode$string)),
6434 A2($elm$json$Json$Decode$field, 'customer_name', $elm$json$Json$Decode$string),
6435 A2($elm$json$Json$Decode$field, 'product_name', $elm$json$Json$Decode$string),
6436 A2($elm$json$Json$Decode$field, 'stars', $elm$json$Json$Decode$int));
6437var $author$project$Product$decodeRatings = $elm$json$Json$Decode$list($author$project$Product$decodeRating);
6438var $author$project$Product$fetchRatings = function (id) {
6439 var _v0 = A2(
6440 $elm$core$Debug$log,
6441 'err',
6442 'fetching ratings ' + $elm$core$String$fromInt(id));
6443 return $elm$http$Http$get(
6444 {
6445 expect: A2($elm$http$Http$expectJson, $author$project$Product$RatingsLoaded, $author$project$Product$decodeRatings),
6446 url: 'http://127.0.0.1:7878/product/reviews/' + $elm$core$String$fromInt(id)
6447 });
6448};
6449var $elm$browser$Browser$Navigation$load = _Browser_load;
6450var $elm$core$Platform$Cmd$map = _Platform_map;
6451var $elm$url$Url$Parser$State = F5(
6452 function (visited, unvisited, params, frag, value) {
6453 return {frag: frag, params: params, unvisited: unvisited, value: value, visited: visited};
6454 });
6455var $elm$url$Url$Parser$getFirstMatch = function (states) {
6456 getFirstMatch:
6457 while (true) {
6458 if (!states.b) {
6459 return $elm$core$Maybe$Nothing;
6460 } else {
6461 var state = states.a;
6462 var rest = states.b;
6463 var _v1 = state.unvisited;
6464 if (!_v1.b) {
6465 return $elm$core$Maybe$Just(state.value);
6466 } else {
6467 if ((_v1.a === '') && (!_v1.b.b)) {
6468 return $elm$core$Maybe$Just(state.value);
6469 } else {
6470 var $temp$states = rest;
6471 states = $temp$states;
6472 continue getFirstMatch;
6473 }
6474 }
6475 }
6476 }
6477};
6478var $elm$url$Url$Parser$removeFinalEmpty = function (segments) {
6479 if (!segments.b) {
6480 return _List_Nil;
6481 } else {
6482 if ((segments.a === '') && (!segments.b.b)) {
6483 return _List_Nil;
6484 } else {
6485 var segment = segments.a;
6486 var rest = segments.b;
6487 return A2(
6488 $elm$core$List$cons,
6489 segment,
6490 $elm$url$Url$Parser$removeFinalEmpty(rest));
6491 }
6492 }
6493};
6494var $elm$url$Url$Parser$preparePath = function (path) {
6495 var _v0 = A2($elm$core$String$split, '/', path);
6496 if (_v0.b && (_v0.a === '')) {
6497 var segments = _v0.b;
6498 return $elm$url$Url$Parser$removeFinalEmpty(segments);
6499 } else {
6500 var segments = _v0;
6501 return $elm$url$Url$Parser$removeFinalEmpty(segments);
6502 }
6503};
6504var $elm$url$Url$Parser$addToParametersHelp = F2(
6505 function (value, maybeList) {
6506 if (maybeList.$ === 'Nothing') {
6507 return $elm$core$Maybe$Just(
6508 _List_fromArray(
6509 [value]));
6510 } else {
6511 var list = maybeList.a;
6512 return $elm$core$Maybe$Just(
6513 A2($elm$core$List$cons, value, list));
6514 }
6515 });
6516var $elm$url$Url$percentDecode = _Url_percentDecode;
6517var $elm$url$Url$Parser$addParam = F2(
6518 function (segment, dict) {
6519 var _v0 = A2($elm$core$String$split, '=', segment);
6520 if ((_v0.b && _v0.b.b) && (!_v0.b.b.b)) {
6521 var rawKey = _v0.a;
6522 var _v1 = _v0.b;
6523 var rawValue = _v1.a;
6524 var _v2 = $elm$url$Url$percentDecode(rawKey);
6525 if (_v2.$ === 'Nothing') {
6526 return dict;
6527 } else {
6528 var key = _v2.a;
6529 var _v3 = $elm$url$Url$percentDecode(rawValue);
6530 if (_v3.$ === 'Nothing') {
6531 return dict;
6532 } else {
6533 var value = _v3.a;
6534 return A3(
6535 $elm$core$Dict$update,
6536 key,
6537 $elm$url$Url$Parser$addToParametersHelp(value),
6538 dict);
6539 }
6540 }
6541 } else {
6542 return dict;
6543 }
6544 });
6545var $elm$url$Url$Parser$prepareQuery = function (maybeQuery) {
6546 if (maybeQuery.$ === 'Nothing') {
6547 return $elm$core$Dict$empty;
6548 } else {
6549 var qry = maybeQuery.a;
6550 return A3(
6551 $elm$core$List$foldr,
6552 $elm$url$Url$Parser$addParam,
6553 $elm$core$Dict$empty,
6554 A2($elm$core$String$split, '&', qry));
6555 }
6556};
6557var $elm$url$Url$Parser$parse = F2(
6558 function (_v0, url) {
6559 var parser = _v0.a;
6560 return $elm$url$Url$Parser$getFirstMatch(
6561 parser(
6562 A5(
6563 $elm$url$Url$Parser$State,
6564 _List_Nil,
6565 $elm$url$Url$Parser$preparePath(url.path),
6566 $elm$url$Url$Parser$prepareQuery(url.query),
6567 url.fragment,
6568 $elm$core$Basics$identity)));
6569 });
6570var $author$project$Main$LoginPage = {$: 'LoginPage'};
6571var $author$project$Main$SignupPage = {$: 'SignupPage'};
6572var $elm$url$Url$Parser$Parser = function (a) {
6573 return {$: 'Parser', a: a};
6574};
6575var $elm$url$Url$Parser$custom = F2(
6576 function (tipe, stringToSomething) {
6577 return $elm$url$Url$Parser$Parser(
6578 function (_v0) {
6579 var visited = _v0.visited;
6580 var unvisited = _v0.unvisited;
6581 var params = _v0.params;
6582 var frag = _v0.frag;
6583 var value = _v0.value;
6584 if (!unvisited.b) {
6585 return _List_Nil;
6586 } else {
6587 var next = unvisited.a;
6588 var rest = unvisited.b;
6589 var _v2 = stringToSomething(next);
6590 if (_v2.$ === 'Just') {
6591 var nextValue = _v2.a;
6592 return _List_fromArray(
6593 [
6594 A5(
6595 $elm$url$Url$Parser$State,
6596 A2($elm$core$List$cons, next, visited),
6597 rest,
6598 params,
6599 frag,
6600 value(nextValue))
6601 ]);
6602 } else {
6603 return _List_Nil;
6604 }
6605 }
6606 });
6607 });
6608var $elm$url$Url$Parser$int = A2($elm$url$Url$Parser$custom, 'NUMBER', $elm$core$String$toInt);
6609var $elm$url$Url$Parser$mapState = F2(
6610 function (func, _v0) {
6611 var visited = _v0.visited;
6612 var unvisited = _v0.unvisited;
6613 var params = _v0.params;
6614 var frag = _v0.frag;
6615 var value = _v0.value;
6616 return A5(
6617 $elm$url$Url$Parser$State,
6618 visited,
6619 unvisited,
6620 params,
6621 frag,
6622 func(value));
6623 });
6624var $elm$url$Url$Parser$map = F2(
6625 function (subValue, _v0) {
6626 var parseArg = _v0.a;
6627 return $elm$url$Url$Parser$Parser(
6628 function (_v1) {
6629 var visited = _v1.visited;
6630 var unvisited = _v1.unvisited;
6631 var params = _v1.params;
6632 var frag = _v1.frag;
6633 var value = _v1.value;
6634 return A2(
6635 $elm$core$List$map,
6636 $elm$url$Url$Parser$mapState(value),
6637 parseArg(
6638 A5($elm$url$Url$Parser$State, visited, unvisited, params, frag, subValue)));
6639 });
6640 });
6641var $elm$core$List$append = F2(
6642 function (xs, ys) {
6643 if (!ys.b) {
6644 return xs;
6645 } else {
6646 return A3($elm$core$List$foldr, $elm$core$List$cons, ys, xs);
6647 }
6648 });
6649var $elm$core$List$concat = function (lists) {
6650 return A3($elm$core$List$foldr, $elm$core$List$append, _List_Nil, lists);
6651};
6652var $elm$core$List$concatMap = F2(
6653 function (f, list) {
6654 return $elm$core$List$concat(
6655 A2($elm$core$List$map, f, list));
6656 });
6657var $elm$url$Url$Parser$oneOf = function (parsers) {
6658 return $elm$url$Url$Parser$Parser(
6659 function (state) {
6660 return A2(
6661 $elm$core$List$concatMap,
6662 function (_v0) {
6663 var parser = _v0.a;
6664 return parser(state);
6665 },
6666 parsers);
6667 });
6668};
6669var $elm$url$Url$Parser$s = function (str) {
6670 return $elm$url$Url$Parser$Parser(
6671 function (_v0) {
6672 var visited = _v0.visited;
6673 var unvisited = _v0.unvisited;
6674 var params = _v0.params;
6675 var frag = _v0.frag;
6676 var value = _v0.value;
6677 if (!unvisited.b) {
6678 return _List_Nil;
6679 } else {
6680 var next = unvisited.a;
6681 var rest = unvisited.b;
6682 return _Utils_eq(next, str) ? _List_fromArray(
6683 [
6684 A5(
6685 $elm$url$Url$Parser$State,
6686 A2($elm$core$List$cons, next, visited),
6687 rest,
6688 params,
6689 frag,
6690 value)
6691 ]) : _List_Nil;
6692 }
6693 });
6694};
6695var $elm$url$Url$Parser$slash = F2(
6696 function (_v0, _v1) {
6697 var parseBefore = _v0.a;
6698 var parseAfter = _v1.a;
6699 return $elm$url$Url$Parser$Parser(
6700 function (state) {
6701 return A2(
6702 $elm$core$List$concatMap,
6703 parseAfter,
6704 parseBefore(state));
6705 });
6706 });
6707var $elm$url$Url$Parser$top = $elm$url$Url$Parser$Parser(
6708 function (state) {
6709 return _List_fromArray(
6710 [state]);
6711 });
6712var $author$project$Main$parseRoute = $elm$url$Url$Parser$oneOf(
6713 _List_fromArray(
6714 [
6715 A2(
6716 $elm$url$Url$Parser$map,
6717 $author$project$Main$LoginPage,
6718 $elm$url$Url$Parser$s('login')),
6719 A2($elm$url$Url$Parser$map, $author$project$Main$HomePage, $elm$url$Url$Parser$top),
6720 A2(
6721 $elm$url$Url$Parser$map,
6722 $author$project$Main$CatalogPage,
6723 $elm$url$Url$Parser$s('catalog')),
6724 A2(
6725 $elm$url$Url$Parser$map,
6726 $author$project$Main$CartPage,
6727 $elm$url$Url$Parser$s('cart')),
6728 A2(
6729 $elm$url$Url$Parser$map,
6730 $author$project$Main$SignupPage,
6731 $elm$url$Url$Parser$s('signup')),
6732 A2(
6733 $elm$url$Url$Parser$map,
6734 $author$project$Main$CheckoutPage,
6735 $elm$url$Url$Parser$s('checkout')),
6736 A2(
6737 $elm$url$Url$Parser$map,
6738 $author$project$Main$ProductPage,
6739 A2(
6740 $elm$url$Url$Parser$slash,
6741 $elm$url$Url$Parser$s('product'),
6742 $elm$url$Url$Parser$int))
6743 ]));
6744var $elm$browser$Browser$Navigation$pushUrl = _Browser_pushUrl;
6745var $elm$browser$Browser$Navigation$replaceUrl = _Browser_replaceUrl;
6746var $elm$url$Url$addPort = F2(
6747 function (maybePort, starter) {
6748 if (maybePort.$ === 'Nothing') {
6749 return starter;
6750 } else {
6751 var port_ = maybePort.a;
6752 return starter + (':' + $elm$core$String$fromInt(port_));
6753 }
6754 });
6755var $elm$url$Url$addPrefixed = F3(
6756 function (prefix, maybeSegment, starter) {
6757 if (maybeSegment.$ === 'Nothing') {
6758 return starter;
6759 } else {
6760 var segment = maybeSegment.a;
6761 return _Utils_ap(
6762 starter,
6763 _Utils_ap(prefix, segment));
6764 }
6765 });
6766var $elm$url$Url$toString = function (url) {
6767 var http = function () {
6768 var _v0 = url.protocol;
6769 if (_v0.$ === 'Http') {
6770 return 'http://';
6771 } else {
6772 return 'https://';
6773 }
6774 }();
6775 return A3(
6776 $elm$url$Url$addPrefixed,
6777 '#',
6778 url.fragment,
6779 A3(
6780 $elm$url$Url$addPrefixed,
6781 '?',
6782 url.query,
6783 _Utils_ap(
6784 A2(
6785 $elm$url$Url$addPort,
6786 url.port_,
6787 _Utils_ap(http, url.host)),
6788 url.path)));
6789};
6790var $author$project$Main$LogoutSuccess = function (a) {
6791 return {$: 'LogoutSuccess', a: a};
6792};
6793var $elm$http$Http$expectBytesResponse = F2(
6794 function (toMsg, toResult) {
6795 return A3(
6796 _Http_expect,
6797 'arraybuffer',
6798 _Http_toDataView,
6799 A2($elm$core$Basics$composeR, toResult, toMsg));
6800 });
6801var $elm$http$Http$expectWhatever = function (toMsg) {
6802 return A2(
6803 $elm$http$Http$expectBytesResponse,
6804 toMsg,
6805 $elm$http$Http$resolve(
6806 function (_v0) {
6807 return $elm$core$Result$Ok(_Utils_Tuple0);
6808 }));
6809};
6810var $author$project$Main$tryLogout = $elm$http$Http$riskyRequest(
6811 {
6812 body: $elm$http$Http$emptyBody,
6813 expect: $elm$http$Http$expectWhatever($author$project$Main$LogoutSuccess),
6814 headers: _List_Nil,
6815 method: 'POST',
6816 timeout: $elm$core$Maybe$Nothing,
6817 tracker: $elm$core$Maybe$Nothing,
6818 url: 'http://127.0.0.1:7878/user/logout'
6819 });
6820var $author$project$Cart$Loaded = {$: 'Loaded'};
6821var $author$project$Cart$Loading = {$: 'Loading'};
6822var $author$project$Cart$AddToCartSuccess = function (a) {
6823 return {$: 'AddToCartSuccess', a: a};
6824};
6825var $elm$http$Http$stringBody = _Http_pair;
6826var $author$project$Cart$addToCart = function (id) {
6827 var _v0 = A2(
6828 $elm$core$Debug$log,
6829 'err',
6830 'adding to cart: ' + $elm$core$String$fromInt(id));
6831 return $elm$http$Http$riskyRequest(
6832 {
6833 body: A2(
6834 $elm$http$Http$stringBody,
6835 'applcation/json',
6836 $elm$core$String$fromInt(id)),
6837 expect: $elm$http$Http$expectWhatever($author$project$Cart$AddToCartSuccess),
6838 headers: _List_Nil,
6839 method: 'POST',
6840 timeout: $elm$core$Maybe$Nothing,
6841 tracker: $elm$core$Maybe$Nothing,
6842 url: 'http://127.0.0.1:7878/cart/add'
6843 });
6844};
6845var $author$project$Cart$CartItemRemoved = function (a) {
6846 return {$: 'CartItemRemoved', a: a};
6847};
6848var $author$project$Cart$removeProduct = function (id) {
6849 var _v0 = A2($elm$core$Debug$log, 'cart', 'fetching cart items');
6850 return $elm$http$Http$riskyRequest(
6851 {
6852 body: A2(
6853 $elm$http$Http$stringBody,
6854 'application/json',
6855 $elm$core$String$fromInt(id)),
6856 expect: $elm$http$Http$expectWhatever($author$project$Cart$CartItemRemoved),
6857 headers: _List_Nil,
6858 method: 'POST',
6859 timeout: $elm$core$Maybe$Nothing,
6860 tracker: $elm$core$Maybe$Nothing,
6861 url: 'http://127.0.0.1:7878/cart/remove'
6862 });
6863};
6864var $author$project$Cart$update = F2(
6865 function (msg, model) {
6866 switch (msg.$) {
6867 case 'CartLoaded':
6868 var res = msg.a;
6869 if (res.$ === 'Ok') {
6870 var s = res.a;
6871 return _Utils_Tuple2(
6872 _Utils_update(
6873 model,
6874 {pageStatus: $author$project$Cart$Loaded, products: s}),
6875 $elm$core$Platform$Cmd$none);
6876 } else {
6877 var e = res.a;
6878 var _v2 = A2($elm$core$Debug$log, 'error', e);
6879 return _Utils_Tuple2(
6880 _Utils_update(
6881 model,
6882 {pageStatus: $author$project$Cart$NotLoaded}),
6883 $elm$core$Platform$Cmd$none);
6884 }
6885 case 'RemoveFromCart':
6886 var id = msg.a;
6887 return _Utils_Tuple2(
6888 model,
6889 $author$project$Cart$removeProduct(id));
6890 case 'CartItemRemoved':
6891 return _Utils_Tuple2(
6892 _Utils_update(
6893 model,
6894 {pageStatus: $author$project$Cart$Loading}),
6895 $author$project$Cart$fetchCartItems);
6896 case 'FetchCartItems':
6897 return _Utils_Tuple2(
6898 _Utils_update(
6899 model,
6900 {pageStatus: $author$project$Cart$Loading}),
6901 $author$project$Cart$fetchCartItems);
6902 case 'AddToCartPressed':
6903 var id = msg.a;
6904 return _Utils_Tuple2(
6905 model,
6906 $author$project$Cart$addToCart(id));
6907 default:
6908 return _Utils_Tuple2(
6909 _Utils_update(
6910 model,
6911 {pageStatus: $author$project$Cart$Loading}),
6912 $author$project$Cart$fetchCartItems);
6913 }
6914 });
6915var $author$project$Catalog$Loaded = {$: 'Loaded'};
6916var $author$project$Catalog$Loading = {$: 'Loading'};
6917var $elm$core$Basics$always = F2(
6918 function (a, _v0) {
6919 return a;
6920 });
6921var $elm$core$Tuple$mapFirst = F2(
6922 function (func, _v0) {
6923 var x = _v0.a;
6924 var y = _v0.b;
6925 return _Utils_Tuple2(
6926 func(x),
6927 y);
6928 });
6929var $elm$core$Tuple$mapSecond = F2(
6930 function (func, _v0) {
6931 var x = _v0.a;
6932 var y = _v0.b;
6933 return _Utils_Tuple2(
6934 x,
6935 func(y));
6936 });
6937var $author$project$Catalog$update = F2(
6938 function (msg, model) {
6939 switch (msg.$) {
6940 case 'ProductsLoaded':
6941 var res = msg.a;
6942 if (res.$ === 'Ok') {
6943 var s = res.a;
6944 return _Utils_Tuple2(
6945 _Utils_update(
6946 model,
6947 {pageStatus: $author$project$Catalog$Loaded, products: s}),
6948 $elm$core$Platform$Cmd$none);
6949 } else {
6950 var e = res.a;
6951 var _v2 = A2($elm$core$Debug$log, 'error', e);
6952 return _Utils_Tuple2(
6953 _Utils_update(
6954 model,
6955 {pageStatus: $author$project$Catalog$NotLoaded}),
6956 $elm$core$Platform$Cmd$none);
6957 }
6958 case 'FetchProducts':
6959 return _Utils_Tuple2(
6960 _Utils_update(
6961 model,
6962 {pageStatus: $author$project$Catalog$Loading}),
6963 $author$project$Catalog$fetchProducts);
6964 case 'ChangePriceLower':
6965 var v = msg.a;
6966 var fs = model.filters;
6967 var nfs = _Utils_update(
6968 fs,
6969 {
6970 price: A2(
6971 $elm$core$Tuple$mapFirst,
6972 $elm$core$Basics$always(v),
6973 fs.price)
6974 });
6975 return _Utils_Tuple2(
6976 _Utils_update(
6977 model,
6978 {filters: nfs}),
6979 $elm$core$Platform$Cmd$none);
6980 case 'ChangePriceUpper':
6981 var v = msg.a;
6982 var fs = model.filters;
6983 var nfs = _Utils_update(
6984 fs,
6985 {
6986 price: A2(
6987 $elm$core$Tuple$mapSecond,
6988 $elm$core$Basics$always(v),
6989 fs.price)
6990 });
6991 return _Utils_Tuple2(
6992 _Utils_update(
6993 model,
6994 {filters: nfs}),
6995 $elm$core$Platform$Cmd$none);
6996 case 'ChangeRatingLower':
6997 var v = msg.a;
6998 var fs = model.filters;
6999 var nfs = _Utils_update(
7000 fs,
7001 {
7002 rating: A2(
7003 $elm$core$Tuple$mapFirst,
7004 $elm$core$Basics$always(v),
7005 fs.rating)
7006 });
7007 return _Utils_Tuple2(
7008 _Utils_update(
7009 model,
7010 {filters: nfs}),
7011 $elm$core$Platform$Cmd$none);
7012 default:
7013 var v = msg.a;
7014 var fs = model.filters;
7015 var nfs = _Utils_update(
7016 fs,
7017 {
7018 rating: A2(
7019 $elm$core$Tuple$mapSecond,
7020 $elm$core$Basics$always(v),
7021 fs.rating)
7022 });
7023 return _Utils_Tuple2(
7024 _Utils_update(
7025 model,
7026 {filters: nfs}),
7027 $elm$core$Platform$Cmd$none);
7028 }
7029 });
7030var $author$project$Checkout$Loading = {$: 'Loading'};
7031var $author$project$Checkout$CheckoutSuccessful = function (a) {
7032 return {$: 'CheckoutSuccessful', a: a};
7033};
7034var $author$project$Checkout$tryCheckout = function (pm) {
7035 return $elm$http$Http$riskyRequest(
7036 {
7037 body: A2($elm$http$Http$stringBody, 'application/json', pm),
7038 expect: $elm$http$Http$expectWhatever($author$project$Checkout$CheckoutSuccessful),
7039 headers: _List_Nil,
7040 method: 'POST',
7041 timeout: $elm$core$Maybe$Nothing,
7042 tracker: $elm$core$Maybe$Nothing,
7043 url: 'http://127.0.0.1:7878/transaction/checkout'
7044 });
7045};
7046var $author$project$Checkout$update = F2(
7047 function (msg, model) {
7048 switch (msg.$) {
7049 case 'CheckoutPressed':
7050 return _Utils_Tuple2(
7051 model,
7052 $author$project$Checkout$tryCheckout(model.paymentMode));
7053 case 'CheckoutSuccessful':
7054 return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
7055 case 'AmountLoaded':
7056 var res = msg.a;
7057 if (res.$ === 'Ok') {
7058 var v = res.a;
7059 return _Utils_Tuple2(
7060 _Utils_update(
7061 model,
7062 {cartTotal: v}),
7063 $elm$core$Platform$Cmd$none);
7064 } else {
7065 return _Utils_Tuple2(
7066 _Utils_update(
7067 model,
7068 {pageStatus: $author$project$Checkout$NotLoaded}),
7069 $elm$core$Platform$Cmd$none);
7070 }
7071 case 'FetchAmount':
7072 var _v2 = A2($elm$core$Debug$log, 'err', 'fetching checkout amount');
7073 return _Utils_Tuple2(
7074 _Utils_update(
7075 model,
7076 {pageStatus: $author$project$Checkout$Loading}),
7077 $author$project$Checkout$fetchAmount);
7078 default:
7079 var s = msg.a;
7080 return _Utils_Tuple2(
7081 _Utils_update(
7082 model,
7083 {paymentMode: s}),
7084 $elm$core$Platform$Cmd$none);
7085 }
7086 });
7087var $author$project$Login$InvalidLogin = {$: 'InvalidLogin'};
7088var $author$project$Login$LoggedIn = {$: 'LoggedIn'};
7089var $author$project$Login$LoggingIn = {$: 'LoggingIn'};
7090var $author$project$Login$LoginSuccess = function (a) {
7091 return {$: 'LoginSuccess', a: a};
7092};
7093var $elm$json$Json$Encode$object = function (pairs) {
7094 return _Json_wrap(
7095 A3(
7096 $elm$core$List$foldl,
7097 F2(
7098 function (_v0, obj) {
7099 var k = _v0.a;
7100 var v = _v0.b;
7101 return A3(_Json_addField, k, v, obj);
7102 }),
7103 _Json_emptyObject(_Utils_Tuple0),
7104 pairs));
7105};
7106var $elm$json$Json$Encode$string = _Json_wrap;
7107var $author$project$Login$encodeLogin = function (model) {
7108 return $elm$json$Json$Encode$object(
7109 _List_fromArray(
7110 [
7111 _Utils_Tuple2(
7112 'username',
7113 $elm$json$Json$Encode$string(model.username)),
7114 _Utils_Tuple2(
7115 'password',
7116 $elm$json$Json$Encode$string(model.password))
7117 ]));
7118};
7119var $elm$http$Http$jsonBody = function (value) {
7120 return A2(
7121 _Http_pair,
7122 'application/json',
7123 A2($elm$json$Json$Encode$encode, 0, value));
7124};
7125var $author$project$Login$tryLogin = function (model) {
7126 return $elm$http$Http$riskyRequest(
7127 {
7128 body: $elm$http$Http$jsonBody(
7129 $author$project$Login$encodeLogin(model)),
7130 expect: $elm$http$Http$expectWhatever($author$project$Login$LoginSuccess),
7131 headers: _List_Nil,
7132 method: 'POST',
7133 timeout: $elm$core$Maybe$Nothing,
7134 tracker: $elm$core$Maybe$Nothing,
7135 url: 'http://127.0.0.1:7878/user/login'
7136 });
7137};
7138var $author$project$Login$update = F2(
7139 function (msg, model) {
7140 switch (msg.$) {
7141 case 'PassEntered':
7142 var s = msg.a;
7143 return _Utils_Tuple2(
7144 _Utils_update(
7145 model,
7146 {password: s}),
7147 $elm$core$Platform$Cmd$none);
7148 case 'UserEntered':
7149 var s = msg.a;
7150 return _Utils_Tuple2(
7151 _Utils_update(
7152 model,
7153 {username: s}),
7154 $elm$core$Platform$Cmd$none);
7155 case 'LoginPressed':
7156 return _Utils_Tuple2(
7157 _Utils_update(
7158 model,
7159 {loginStatus: $author$project$Login$LoggingIn}),
7160 $author$project$Login$tryLogin(model));
7161 case 'LoginSuccess':
7162 var res = msg.a;
7163 if (res.$ === 'Ok') {
7164 var s = res.a;
7165 return _Utils_Tuple2(
7166 _Utils_update(
7167 model,
7168 {loginStatus: $author$project$Login$LoggedIn}),
7169 $elm$core$Platform$Cmd$none);
7170 } else {
7171 var e = res.a;
7172 return _Utils_Tuple2(
7173 _Utils_update(
7174 model,
7175 {loginStatus: $author$project$Login$InvalidLogin}),
7176 $elm$core$Platform$Cmd$none);
7177 }
7178 default:
7179 return _Utils_Tuple2(
7180 _Utils_update(
7181 model,
7182 {loginStatus: $author$project$Login$InvalidLogin}),
7183 $elm$core$Platform$Cmd$none);
7184 }
7185 });
7186var $author$project$Product$Loaded = {$: 'Loaded'};
7187var $author$project$Product$Loading = {$: 'Loading'};
7188var $author$project$Product$SubmitFail = {$: 'SubmitFail'};
7189var $author$project$Product$SubmitSuccess = {$: 'SubmitSuccess'};
7190var $author$project$Product$Submitting = {$: 'Submitting'};
7191var $author$project$Product$AddToCartSuccess = function (a) {
7192 return {$: 'AddToCartSuccess', a: a};
7193};
7194var $author$project$Product$addToCart = function (model) {
7195 var _v0 = A2(
7196 $elm$core$Debug$log,
7197 'err',
7198 'adding to cart: ' + $elm$core$String$fromInt(model.listing.id));
7199 return $elm$http$Http$riskyRequest(
7200 {
7201 body: A2(
7202 $elm$http$Http$stringBody,
7203 'applcation/json',
7204 $elm$core$String$fromInt(model.listing.id)),
7205 expect: $elm$http$Http$expectWhatever($author$project$Product$AddToCartSuccess),
7206 headers: _List_Nil,
7207 method: 'POST',
7208 timeout: $elm$core$Maybe$Nothing,
7209 tracker: $elm$core$Maybe$Nothing,
7210 url: 'http://127.0.0.1:7878/cart/add'
7211 });
7212};
7213var $author$project$Product$AddRatingSuccess = function (a) {
7214 return {$: 'AddRatingSuccess', a: a};
7215};
7216var $elm$json$Json$Encode$int = _Json_wrap;
7217var $author$project$Product$encodeRatingForm = function (model) {
7218 return $elm$json$Json$Encode$object(
7219 _List_fromArray(
7220 [
7221 _Utils_Tuple2(
7222 'product_id',
7223 $elm$json$Json$Encode$int(model.listing.id)),
7224 _Utils_Tuple2(
7225 'stars',
7226 $elm$json$Json$Encode$int(model.ratingStars)),
7227 _Utils_Tuple2(
7228 'comment_text',
7229 $elm$json$Json$Encode$string(model.ratingText))
7230 ]));
7231};
7232var $author$project$Product$submitRating = function (model) {
7233 var _v0 = A2(
7234 $elm$core$Debug$log,
7235 'err',
7236 'submitting rating for' + $elm$core$String$fromInt(model.listing.id));
7237 return $elm$http$Http$riskyRequest(
7238 {
7239 body: $elm$http$Http$jsonBody(
7240 $author$project$Product$encodeRatingForm(model)),
7241 expect: $elm$http$Http$expectWhatever($author$project$Product$AddRatingSuccess),
7242 headers: _List_Nil,
7243 method: 'POST',
7244 timeout: $elm$core$Maybe$Nothing,
7245 tracker: $elm$core$Maybe$Nothing,
7246 url: 'http://127.0.0.1:7878/rating/add'
7247 });
7248};
7249var $author$project$Product$update = F2(
7250 function (msg, model) {
7251 switch (msg.$) {
7252 case 'ListingLoaded':
7253 var res = msg.a;
7254 if (res.$ === 'Ok') {
7255 var s = res.a;
7256 return _Utils_Tuple2(
7257 _Utils_update(
7258 model,
7259 {listing: s, pageStatus: $author$project$Product$Loaded}),
7260 $elm$core$Platform$Cmd$none);
7261 } else {
7262 var e = res.a;
7263 var _v2 = A2($elm$core$Debug$log, 'error', e);
7264 return _Utils_Tuple2(
7265 _Utils_update(
7266 model,
7267 {pageStatus: $author$project$Product$NotLoaded}),
7268 $elm$core$Platform$Cmd$none);
7269 }
7270 case 'RatingsLoaded':
7271 var res = msg.a;
7272 if (res.$ === 'Ok') {
7273 var s = res.a;
7274 return _Utils_Tuple2(
7275 _Utils_update(
7276 model,
7277 {pageStatus: $author$project$Product$Loaded, ratings: s}),
7278 $elm$core$Platform$Cmd$none);
7279 } else {
7280 var e = res.a;
7281 var _v4 = A2($elm$core$Debug$log, 'error', e);
7282 return _Utils_Tuple2(
7283 _Utils_update(
7284 model,
7285 {pageStatus: $author$project$Product$NotLoaded}),
7286 $elm$core$Platform$Cmd$none);
7287 }
7288 case 'FetchProduct':
7289 var id = msg.a;
7290 return _Utils_Tuple2(
7291 _Utils_update(
7292 model,
7293 {pageStatus: $author$project$Product$Loading}),
7294 $author$project$Product$fetchListing(id));
7295 case 'FetchRatings':
7296 var id = msg.a;
7297 return _Utils_Tuple2(
7298 _Utils_update(
7299 model,
7300 {pageStatus: $author$project$Product$Loading}),
7301 $author$project$Product$fetchRatings(id));
7302 case 'AddRatingStars':
7303 var i = msg.a;
7304 return _Utils_Tuple2(
7305 _Utils_update(
7306 model,
7307 {ratingStars: i}),
7308 $elm$core$Platform$Cmd$none);
7309 case 'AddRatingComment':
7310 var s = msg.a;
7311 return _Utils_Tuple2(
7312 _Utils_update(
7313 model,
7314 {ratingText: s}),
7315 $elm$core$Platform$Cmd$none);
7316 case 'AddRatingPressed':
7317 return _Utils_Tuple2(
7318 _Utils_update(
7319 model,
7320 {addRatingStatus: $author$project$Product$Submitting}),
7321 $author$project$Product$submitRating(model));
7322 case 'AddRatingSuccess':
7323 var res = msg.a;
7324 if (res.$ === 'Ok') {
7325 return _Utils_Tuple2(
7326 _Utils_update(
7327 model,
7328 {addRatingStatus: $author$project$Product$SubmitSuccess}),
7329 $author$project$Product$fetchRatings(model.listing.id));
7330 } else {
7331 return _Utils_Tuple2(
7332 _Utils_update(
7333 model,
7334 {addRatingStatus: $author$project$Product$SubmitFail}),
7335 $elm$core$Platform$Cmd$none);
7336 }
7337 case 'AddRatingFail':
7338 return _Utils_Tuple2(
7339 _Utils_update(
7340 model,
7341 {addRatingStatus: $author$project$Product$SubmitFail}),
7342 $elm$core$Platform$Cmd$none);
7343 case 'AddToCartPressed':
7344 return _Utils_Tuple2(
7345 model,
7346 $author$project$Product$addToCart(model));
7347 default:
7348 return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
7349 }
7350 });
7351var $author$project$Signup$CreatedSuccessfully = {$: 'CreatedSuccessfully'};
7352var $author$project$Signup$CreatingUser = {$: 'CreatingUser'};
7353var $author$project$Signup$InvalidEmail = {$: 'InvalidEmail'};
7354var $author$project$Signup$InvalidPhone = {$: 'InvalidPhone'};
7355var $author$project$Signup$UsernameTaken = {$: 'UsernameTaken'};
7356var $elm$core$List$any = F2(
7357 function (isOkay, list) {
7358 any:
7359 while (true) {
7360 if (!list.b) {
7361 return false;
7362 } else {
7363 var x = list.a;
7364 var xs = list.b;
7365 if (isOkay(x)) {
7366 return true;
7367 } else {
7368 var $temp$isOkay = isOkay,
7369 $temp$list = xs;
7370 isOkay = $temp$isOkay;
7371 list = $temp$list;
7372 continue any;
7373 }
7374 }
7375 }
7376 });
7377var $elm$core$Basics$composeL = F3(
7378 function (g, f, x) {
7379 return g(
7380 f(x));
7381 });
7382var $elm$core$Basics$not = _Basics_not;
7383var $elm$core$List$all = F2(
7384 function (isOkay, list) {
7385 return !A2(
7386 $elm$core$List$any,
7387 A2($elm$core$Basics$composeL, $elm$core$Basics$not, isOkay),
7388 list);
7389 });
7390var $author$project$Signup$UsernameExists = function (a) {
7391 return {$: 'UsernameExists', a: a};
7392};
7393var $elm$http$Http$expectString = function (toMsg) {
7394 return A2(
7395 $elm$http$Http$expectStringResponse,
7396 toMsg,
7397 $elm$http$Http$resolve($elm$core$Result$Ok));
7398};
7399var $elm$http$Http$post = function (r) {
7400 return $elm$http$Http$request(
7401 {body: r.body, expect: r.expect, headers: _List_Nil, method: 'POST', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: r.url});
7402};
7403var $author$project$Signup$checkExists = function (model) {
7404 return $elm$http$Http$post(
7405 {
7406 body: A2($elm$http$Http$stringBody, 'application/json', model.username),
7407 expect: $elm$http$Http$expectString($author$project$Signup$UsernameExists),
7408 url: 'http://127.0.0.1:7878/user/existing'
7409 });
7410};
7411var $author$project$Signup$CreationSuccess = function (a) {
7412 return {$: 'CreationSuccess', a: a};
7413};
7414var $elm$core$Maybe$withDefault = F2(
7415 function (_default, maybe) {
7416 if (maybe.$ === 'Just') {
7417 var value = maybe.a;
7418 return value;
7419 } else {
7420 return _default;
7421 }
7422 });
7423var $author$project$Signup$encodeCreateUser = function (model) {
7424 return $elm$json$Json$Encode$object(
7425 _List_fromArray(
7426 [
7427 _Utils_Tuple2(
7428 'username',
7429 $elm$json$Json$Encode$string(model.username)),
7430 _Utils_Tuple2(
7431 'password',
7432 $elm$json$Json$Encode$string(model.password)),
7433 _Utils_Tuple2(
7434 'phone_number',
7435 $elm$json$Json$Encode$string(model.phoneNumber)),
7436 _Utils_Tuple2(
7437 'email_id',
7438 $elm$json$Json$Encode$string(model.emailId)),
7439 _Utils_Tuple2(
7440 'address',
7441 $elm$json$Json$Encode$string(
7442 A2($elm$core$Maybe$withDefault, '', model.address)))
7443 ]));
7444};
7445var $author$project$Signup$createUser = function (model) {
7446 return $elm$http$Http$riskyRequest(
7447 {
7448 body: $elm$http$Http$jsonBody(
7449 $author$project$Signup$encodeCreateUser(model)),
7450 expect: $elm$http$Http$expectWhatever($author$project$Signup$CreationSuccess),
7451 headers: _List_Nil,
7452 method: 'POST',
7453 timeout: $elm$core$Maybe$Nothing,
7454 tracker: $elm$core$Maybe$Nothing,
7455 url: 'http://127.0.0.1:7878/user/new'
7456 });
7457};
7458var $elm$core$Basics$neq = _Utils_notEqual;
7459var $elm$core$String$foldr = _String_foldr;
7460var $elm$core$String$toList = function (string) {
7461 return A3($elm$core$String$foldr, $elm$core$List$cons, _List_Nil, string);
7462};
7463var $author$project$Signup$update = F2(
7464 function (msg, model) {
7465 switch (msg.$) {
7466 case 'UserEntered':
7467 var s = msg.a;
7468 return _Utils_Tuple2(
7469 _Utils_update(
7470 model,
7471 {username: s}),
7472 $elm$core$Platform$Cmd$none);
7473 case 'PassEntered':
7474 var s = msg.a;
7475 return _Utils_Tuple2(
7476 _Utils_update(
7477 model,
7478 {password: s}),
7479 $elm$core$Platform$Cmd$none);
7480 case 'PhoneEntered':
7481 var s = msg.a;
7482 var status = (($elm$core$String$length(s) !== 10) || A2(
7483 $elm$core$List$all,
7484 A2($elm$core$Basics$composeL, $elm$core$Basics$not, $elm$core$Char$isDigit),
7485 $elm$core$String$toList(s))) ? $author$project$Signup$InvalidPhone : $author$project$Signup$Empty;
7486 return _Utils_Tuple2(
7487 _Utils_update(
7488 model,
7489 {phoneNumber: s, status: status}),
7490 $elm$core$Platform$Cmd$none);
7491 case 'EmailEntered':
7492 var s = msg.a;
7493 var status = (!A2($elm$core$String$contains, '@', s)) ? $author$project$Signup$InvalidEmail : $author$project$Signup$Empty;
7494 return _Utils_Tuple2(
7495 _Utils_update(
7496 model,
7497 {emailId: s, status: status}),
7498 $elm$core$Platform$Cmd$none);
7499 case 'AddressEntered':
7500 var s = msg.a;
7501 return _Utils_Tuple2(
7502 _Utils_update(
7503 model,
7504 {
7505 address: $elm$core$Maybe$Just(s)
7506 }),
7507 $elm$core$Platform$Cmd$none);
7508 case 'CreatePressed':
7509 return _Utils_Tuple2(
7510 _Utils_update(
7511 model,
7512 {status: $author$project$Signup$CreatingUser}),
7513 $author$project$Signup$checkExists(model));
7514 case 'CreationSuccess':
7515 var res = msg.a;
7516 if (res.$ === 'Ok') {
7517 return _Utils_Tuple2(
7518 _Utils_update(
7519 model,
7520 {status: $author$project$Signup$CreatedSuccessfully}),
7521 $elm$core$Platform$Cmd$none);
7522 } else {
7523 return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
7524 }
7525 case 'CreationFail':
7526 return _Utils_Tuple2($author$project$Signup$init, $elm$core$Platform$Cmd$none);
7527 default:
7528 var res = msg.a;
7529 _v2$2:
7530 while (true) {
7531 if (res.$ === 'Ok') {
7532 switch (res.a) {
7533 case 'true':
7534 return _Utils_Tuple2(
7535 _Utils_update(
7536 model,
7537 {status: $author$project$Signup$UsernameTaken}),
7538 $elm$core$Platform$Cmd$none);
7539 case 'false':
7540 var _v3 = A2($elm$core$Debug$log, 'signup', 'Hit create user ...');
7541 return _Utils_Tuple2(
7542 _Utils_update(
7543 model,
7544 {status: $author$project$Signup$CreatingUser}),
7545 $author$project$Signup$createUser(model));
7546 default:
7547 break _v2$2;
7548 }
7549 } else {
7550 break _v2$2;
7551 }
7552 }
7553 return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
7554 }
7555 });
7556var $author$project$Main$update = F2(
7557 function (msg, model) {
7558 switch (msg.$) {
7559 case 'LinkClicked':
7560 var urlRequest = msg.a;
7561 if (urlRequest.$ === 'Internal') {
7562 var url = urlRequest.a;
7563 return _Utils_Tuple2(
7564 model,
7565 A2(
7566 $elm$browser$Browser$Navigation$pushUrl,
7567 model.key,
7568 $elm$url$Url$toString(url)));
7569 } else {
7570 var href = urlRequest.a;
7571 return _Utils_Tuple2(
7572 model,
7573 $elm$browser$Browser$Navigation$load(href));
7574 }
7575 case 'LogoutPressed':
7576 return _Utils_Tuple2(model, $author$project$Main$tryLogout);
7577 case 'LogoutSuccess':
7578 return _Utils_Tuple2(
7579 _Utils_update(
7580 model,
7581 {loginModel: $author$project$Login$init}),
7582 A2($elm$browser$Browser$Navigation$replaceUrl, model.key, '/login'));
7583 case 'UrlChanged':
7584 var url = msg.a;
7585 var parsedUrl = A2($elm$url$Url$Parser$parse, $author$project$Main$parseRoute, url);
7586 if (parsedUrl.$ === 'Just') {
7587 switch (parsedUrl.a.$) {
7588 case 'CatalogPage':
7589 var _v3 = parsedUrl.a;
7590 return _Utils_Tuple2(
7591 _Utils_update(
7592 model,
7593 {location: $author$project$Main$CatalogPage}),
7594 A2($elm$core$Platform$Cmd$map, $author$project$Main$CatalogMessage, $author$project$Catalog$fetchProducts));
7595 case 'ProductPage':
7596 var id = parsedUrl.a.a;
7597 var cmds = A2(
7598 $elm$core$List$map,
7599 $elm$core$Platform$Cmd$map($author$project$Main$ProductMessage),
7600 _List_fromArray(
7601 [
7602 $author$project$Product$fetchListing(id),
7603 $author$project$Product$fetchRatings(id)
7604 ]));
7605 return _Utils_Tuple2(
7606 _Utils_update(
7607 model,
7608 {
7609 location: $author$project$Main$ProductPage(id)
7610 }),
7611 $elm$core$Platform$Cmd$batch(cmds));
7612 case 'CartPage':
7613 var _v4 = parsedUrl.a;
7614 var cmd = A2($elm$core$Platform$Cmd$map, $author$project$Main$CartMessage, $author$project$Cart$fetchCartItems);
7615 return _Utils_Tuple2(
7616 _Utils_update(
7617 model,
7618 {location: $author$project$Main$CartPage}),
7619 cmd);
7620 case 'CheckoutPage':
7621 var _v5 = parsedUrl.a;
7622 var cmd = A2($elm$core$Platform$Cmd$map, $author$project$Main$CheckoutMessage, $author$project$Checkout$fetchAmount);
7623 var _v6 = A2($elm$core$Debug$log, 'err', 'loading checkout page ...');
7624 return _Utils_Tuple2(
7625 _Utils_update(
7626 model,
7627 {location: $author$project$Main$CheckoutPage}),
7628 cmd);
7629 default:
7630 var p = parsedUrl.a;
7631 return _Utils_Tuple2(
7632 _Utils_update(
7633 model,
7634 {location: p}),
7635 $elm$core$Platform$Cmd$none);
7636 }
7637 } else {
7638 return _Utils_Tuple2(
7639 _Utils_update(
7640 model,
7641 {location: $author$project$Main$NotFoundPage}),
7642 $elm$core$Platform$Cmd$none);
7643 }
7644 case 'LoginMessage':
7645 var lm = msg.a;
7646 var _v7 = A2($author$project$Login$update, lm, model.loginModel);
7647 var lmn = _v7.a;
7648 var cmd = _v7.b;
7649 var redir = function () {
7650 var _v8 = lmn.loginStatus;
7651 if (_v8.$ === 'LoggedIn') {
7652 return A2($elm$browser$Browser$Navigation$replaceUrl, model.key, '/catalog');
7653 } else {
7654 return $elm$core$Platform$Cmd$none;
7655 }
7656 }();
7657 return _Utils_Tuple2(
7658 _Utils_update(
7659 model,
7660 {loginModel: lmn}),
7661 $elm$core$Platform$Cmd$batch(
7662 _List_fromArray(
7663 [
7664 A2($elm$core$Platform$Cmd$map, $author$project$Main$LoginMessage, cmd),
7665 redir
7666 ])));
7667 case 'SignupMessage':
7668 var sm = msg.a;
7669 var _v9 = A2($author$project$Signup$update, sm, model.signupModel);
7670 var smn = _v9.a;
7671 var cmd = _v9.b;
7672 var redir = function () {
7673 var _v10 = smn.status;
7674 if (_v10.$ === 'CreatedSuccessfully') {
7675 return A2($elm$browser$Browser$Navigation$replaceUrl, model.key, '/login');
7676 } else {
7677 return $elm$core$Platform$Cmd$none;
7678 }
7679 }();
7680 return _Utils_Tuple2(
7681 _Utils_update(
7682 model,
7683 {signupModel: smn}),
7684 $elm$core$Platform$Cmd$batch(
7685 _List_fromArray(
7686 [
7687 A2($elm$core$Platform$Cmd$map, $author$project$Main$SignupMessage, cmd),
7688 redir
7689 ])));
7690 case 'CatalogMessage':
7691 var cm = msg.a;
7692 var _v11 = A2($author$project$Catalog$update, cm, model.catalogModel);
7693 var cmn = _v11.a;
7694 var cmd = _v11.b;
7695 return _Utils_Tuple2(
7696 _Utils_update(
7697 model,
7698 {catalogModel: cmn}),
7699 A2($elm$core$Platform$Cmd$map, $author$project$Main$CatalogMessage, cmd));
7700 case 'CartMessage':
7701 var cm = msg.a;
7702 var _v12 = A2($author$project$Cart$update, cm, model.cartModel);
7703 var cmn = _v12.a;
7704 var cmd = _v12.b;
7705 return _Utils_Tuple2(
7706 _Utils_update(
7707 model,
7708 {cartModel: cmn}),
7709 A2($elm$core$Platform$Cmd$map, $author$project$Main$CartMessage, cmd));
7710 case 'CheckoutMessage':
7711 var cm = msg.a;
7712 var _v13 = A2($author$project$Checkout$update, cm, model.checkoutModel);
7713 var cmn = _v13.a;
7714 var cmd = _v13.b;
7715 var _v14 = A2($elm$core$Debug$log, 'err', 'received checkout message ...');
7716 return _Utils_Tuple2(
7717 _Utils_update(
7718 model,
7719 {checkoutModel: cmn}),
7720 A2($elm$core$Platform$Cmd$map, $author$project$Main$CheckoutMessage, cmd));
7721 default:
7722 var pm = msg.a;
7723 var redir = function () {
7724 if (pm.$ === 'AddToCartSuccess') {
7725 return A2($elm$browser$Browser$Navigation$replaceUrl, model.key, '/cart');
7726 } else {
7727 return $elm$core$Platform$Cmd$none;
7728 }
7729 }();
7730 var _v15 = A2($author$project$Product$update, pm, model.productModel);
7731 var pmn = _v15.a;
7732 var cmd = _v15.b;
7733 return _Utils_Tuple2(
7734 _Utils_update(
7735 model,
7736 {productModel: pmn}),
7737 $elm$core$Platform$Cmd$batch(
7738 _List_fromArray(
7739 [
7740 A2($elm$core$Platform$Cmd$map, $author$project$Main$ProductMessage, cmd),
7741 redir
7742 ])));
7743 }
7744 });
7745var $rtfeldman$elm_css$VirtualDom$Styled$Node = F3(
7746 function (a, b, c) {
7747 return {$: 'Node', a: a, b: b, c: c};
7748 });
7749var $rtfeldman$elm_css$VirtualDom$Styled$node = $rtfeldman$elm_css$VirtualDom$Styled$Node;
7750var $rtfeldman$elm_css$Html$Styled$node = $rtfeldman$elm_css$VirtualDom$Styled$node;
7751var $rtfeldman$elm_css$Html$Styled$a = $rtfeldman$elm_css$Html$Styled$node('a');
7752var $rtfeldman$elm_css$Html$Styled$div = $rtfeldman$elm_css$Html$Styled$node('div');
7753var $rtfeldman$elm_css$VirtualDom$Styled$Attribute = F3(
7754 function (a, b, c) {
7755 return {$: 'Attribute', a: a, b: b, c: c};
7756 });
7757var $elm$virtual_dom$VirtualDom$property = F2(
7758 function (key, value) {
7759 return A2(
7760 _VirtualDom_property,
7761 _VirtualDom_noInnerHtmlOrFormAction(key),
7762 _VirtualDom_noJavaScriptOrHtmlUri(value));
7763 });
7764var $rtfeldman$elm_css$VirtualDom$Styled$property = F2(
7765 function (key, value) {
7766 return A3(
7767 $rtfeldman$elm_css$VirtualDom$Styled$Attribute,
7768 A2($elm$virtual_dom$VirtualDom$property, key, value),
7769 _List_Nil,
7770 '');
7771 });
7772var $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty = F2(
7773 function (key, string) {
7774 return A2(
7775 $rtfeldman$elm_css$VirtualDom$Styled$property,
7776 key,
7777 $elm$json$Json$Encode$string(string));
7778 });
7779var $rtfeldman$elm_css$Html$Styled$Attributes$href = function (url) {
7780 return A2($rtfeldman$elm_css$Html$Styled$Attributes$stringProperty, 'href', url);
7781};
7782var $rtfeldman$elm_css$Html$Styled$li = $rtfeldman$elm_css$Html$Styled$node('li');
7783var $rtfeldman$elm_css$VirtualDom$Styled$KeyedNode = F3(
7784 function (a, b, c) {
7785 return {$: 'KeyedNode', a: a, b: b, c: c};
7786 });
7787var $rtfeldman$elm_css$VirtualDom$Styled$KeyedNodeNS = F4(
7788 function (a, b, c, d) {
7789 return {$: 'KeyedNodeNS', a: a, b: b, c: c, d: d};
7790 });
7791var $rtfeldman$elm_css$VirtualDom$Styled$NodeNS = F4(
7792 function (a, b, c, d) {
7793 return {$: 'NodeNS', a: a, b: b, c: c, d: d};
7794 });
7795var $rtfeldman$elm_css$VirtualDom$Styled$Unstyled = function (a) {
7796 return {$: 'Unstyled', a: a};
7797};
7798var $elm$virtual_dom$VirtualDom$map = _VirtualDom_map;
7799var $elm$virtual_dom$VirtualDom$mapAttribute = _VirtualDom_mapAttribute;
7800var $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute = F2(
7801 function (transform, _v0) {
7802 var prop = _v0.a;
7803 var styles = _v0.b;
7804 var classname = _v0.c;
7805 return A3(
7806 $rtfeldman$elm_css$VirtualDom$Styled$Attribute,
7807 A2($elm$virtual_dom$VirtualDom$mapAttribute, transform, prop),
7808 styles,
7809 classname);
7810 });
7811var $rtfeldman$elm_css$VirtualDom$Styled$map = F2(
7812 function (transform, vdomNode) {
7813 switch (vdomNode.$) {
7814 case 'Node':
7815 var elemType = vdomNode.a;
7816 var properties = vdomNode.b;
7817 var children = vdomNode.c;
7818 return A3(
7819 $rtfeldman$elm_css$VirtualDom$Styled$Node,
7820 elemType,
7821 A2(
7822 $elm$core$List$map,
7823 $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute(transform),
7824 properties),
7825 A2(
7826 $elm$core$List$map,
7827 $rtfeldman$elm_css$VirtualDom$Styled$map(transform),
7828 children));
7829 case 'NodeNS':
7830 var ns = vdomNode.a;
7831 var elemType = vdomNode.b;
7832 var properties = vdomNode.c;
7833 var children = vdomNode.d;
7834 return A4(
7835 $rtfeldman$elm_css$VirtualDom$Styled$NodeNS,
7836 ns,
7837 elemType,
7838 A2(
7839 $elm$core$List$map,
7840 $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute(transform),
7841 properties),
7842 A2(
7843 $elm$core$List$map,
7844 $rtfeldman$elm_css$VirtualDom$Styled$map(transform),
7845 children));
7846 case 'KeyedNode':
7847 var elemType = vdomNode.a;
7848 var properties = vdomNode.b;
7849 var children = vdomNode.c;
7850 return A3(
7851 $rtfeldman$elm_css$VirtualDom$Styled$KeyedNode,
7852 elemType,
7853 A2(
7854 $elm$core$List$map,
7855 $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute(transform),
7856 properties),
7857 A2(
7858 $elm$core$List$map,
7859 function (_v1) {
7860 var key = _v1.a;
7861 var child = _v1.b;
7862 return _Utils_Tuple2(
7863 key,
7864 A2($rtfeldman$elm_css$VirtualDom$Styled$map, transform, child));
7865 },
7866 children));
7867 case 'KeyedNodeNS':
7868 var ns = vdomNode.a;
7869 var elemType = vdomNode.b;
7870 var properties = vdomNode.c;
7871 var children = vdomNode.d;
7872 return A4(
7873 $rtfeldman$elm_css$VirtualDom$Styled$KeyedNodeNS,
7874 ns,
7875 elemType,
7876 A2(
7877 $elm$core$List$map,
7878 $rtfeldman$elm_css$VirtualDom$Styled$mapAttribute(transform),
7879 properties),
7880 A2(
7881 $elm$core$List$map,
7882 function (_v2) {
7883 var key = _v2.a;
7884 var child = _v2.b;
7885 return _Utils_Tuple2(
7886 key,
7887 A2($rtfeldman$elm_css$VirtualDom$Styled$map, transform, child));
7888 },
7889 children));
7890 default:
7891 var vdom = vdomNode.a;
7892 return $rtfeldman$elm_css$VirtualDom$Styled$Unstyled(
7893 A2($elm$virtual_dom$VirtualDom$map, transform, vdom));
7894 }
7895 });
7896var $rtfeldman$elm_css$Html$Styled$map = $rtfeldman$elm_css$VirtualDom$Styled$map;
7897var $elm$core$List$singleton = function (value) {
7898 return _List_fromArray(
7899 [value]);
7900};
7901var $elm$core$List$isEmpty = function (xs) {
7902 if (!xs.b) {
7903 return true;
7904 } else {
7905 return false;
7906 }
7907};
7908var $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles = F2(
7909 function (_v0, styles) {
7910 var newStyles = _v0.b;
7911 var classname = _v0.c;
7912 return $elm$core$List$isEmpty(newStyles) ? styles : A3($elm$core$Dict$insert, classname, newStyles, styles);
7913 });
7914var $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute = function (_v0) {
7915 var val = _v0.a;
7916 return val;
7917};
7918var $elm$virtual_dom$VirtualDom$keyedNode = function (tag) {
7919 return _VirtualDom_keyedNode(
7920 _VirtualDom_noScript(tag));
7921};
7922var $elm$virtual_dom$VirtualDom$keyedNodeNS = F2(
7923 function (namespace, tag) {
7924 return A2(
7925 _VirtualDom_keyedNodeNS,
7926 namespace,
7927 _VirtualDom_noScript(tag));
7928 });
7929var $elm$virtual_dom$VirtualDom$node = function (tag) {
7930 return _VirtualDom_node(
7931 _VirtualDom_noScript(tag));
7932};
7933var $elm$virtual_dom$VirtualDom$nodeNS = function (tag) {
7934 return _VirtualDom_nodeNS(
7935 _VirtualDom_noScript(tag));
7936};
7937var $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml = F2(
7938 function (_v6, _v7) {
7939 var key = _v6.a;
7940 var html = _v6.b;
7941 var pairs = _v7.a;
7942 var styles = _v7.b;
7943 switch (html.$) {
7944 case 'Unstyled':
7945 var vdom = html.a;
7946 return _Utils_Tuple2(
7947 A2(
7948 $elm$core$List$cons,
7949 _Utils_Tuple2(key, vdom),
7950 pairs),
7951 styles);
7952 case 'Node':
7953 var elemType = html.a;
7954 var properties = html.b;
7955 var children = html.c;
7956 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
7957 var _v9 = A3(
7958 $elm$core$List$foldl,
7959 $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml,
7960 _Utils_Tuple2(_List_Nil, combinedStyles),
7961 children);
7962 var childNodes = _v9.a;
7963 var finalStyles = _v9.b;
7964 var vdom = A3(
7965 $elm$virtual_dom$VirtualDom$node,
7966 elemType,
7967 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
7968 $elm$core$List$reverse(childNodes));
7969 return _Utils_Tuple2(
7970 A2(
7971 $elm$core$List$cons,
7972 _Utils_Tuple2(key, vdom),
7973 pairs),
7974 finalStyles);
7975 case 'NodeNS':
7976 var ns = html.a;
7977 var elemType = html.b;
7978 var properties = html.c;
7979 var children = html.d;
7980 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
7981 var _v10 = A3(
7982 $elm$core$List$foldl,
7983 $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml,
7984 _Utils_Tuple2(_List_Nil, combinedStyles),
7985 children);
7986 var childNodes = _v10.a;
7987 var finalStyles = _v10.b;
7988 var vdom = A4(
7989 $elm$virtual_dom$VirtualDom$nodeNS,
7990 ns,
7991 elemType,
7992 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
7993 $elm$core$List$reverse(childNodes));
7994 return _Utils_Tuple2(
7995 A2(
7996 $elm$core$List$cons,
7997 _Utils_Tuple2(key, vdom),
7998 pairs),
7999 finalStyles);
8000 case 'KeyedNode':
8001 var elemType = html.a;
8002 var properties = html.b;
8003 var children = html.c;
8004 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
8005 var _v11 = A3(
8006 $elm$core$List$foldl,
8007 $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml,
8008 _Utils_Tuple2(_List_Nil, combinedStyles),
8009 children);
8010 var childNodes = _v11.a;
8011 var finalStyles = _v11.b;
8012 var vdom = A3(
8013 $elm$virtual_dom$VirtualDom$keyedNode,
8014 elemType,
8015 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8016 $elm$core$List$reverse(childNodes));
8017 return _Utils_Tuple2(
8018 A2(
8019 $elm$core$List$cons,
8020 _Utils_Tuple2(key, vdom),
8021 pairs),
8022 finalStyles);
8023 default:
8024 var ns = html.a;
8025 var elemType = html.b;
8026 var properties = html.c;
8027 var children = html.d;
8028 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
8029 var _v12 = A3(
8030 $elm$core$List$foldl,
8031 $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml,
8032 _Utils_Tuple2(_List_Nil, combinedStyles),
8033 children);
8034 var childNodes = _v12.a;
8035 var finalStyles = _v12.b;
8036 var vdom = A4(
8037 $elm$virtual_dom$VirtualDom$keyedNodeNS,
8038 ns,
8039 elemType,
8040 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8041 $elm$core$List$reverse(childNodes));
8042 return _Utils_Tuple2(
8043 A2(
8044 $elm$core$List$cons,
8045 _Utils_Tuple2(key, vdom),
8046 pairs),
8047 finalStyles);
8048 }
8049 });
8050var $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml = F2(
8051 function (html, _v0) {
8052 var nodes = _v0.a;
8053 var styles = _v0.b;
8054 switch (html.$) {
8055 case 'Unstyled':
8056 var vdomNode = html.a;
8057 return _Utils_Tuple2(
8058 A2($elm$core$List$cons, vdomNode, nodes),
8059 styles);
8060 case 'Node':
8061 var elemType = html.a;
8062 var properties = html.b;
8063 var children = html.c;
8064 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
8065 var _v2 = A3(
8066 $elm$core$List$foldl,
8067 $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml,
8068 _Utils_Tuple2(_List_Nil, combinedStyles),
8069 children);
8070 var childNodes = _v2.a;
8071 var finalStyles = _v2.b;
8072 var vdomNode = A3(
8073 $elm$virtual_dom$VirtualDom$node,
8074 elemType,
8075 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8076 $elm$core$List$reverse(childNodes));
8077 return _Utils_Tuple2(
8078 A2($elm$core$List$cons, vdomNode, nodes),
8079 finalStyles);
8080 case 'NodeNS':
8081 var ns = html.a;
8082 var elemType = html.b;
8083 var properties = html.c;
8084 var children = html.d;
8085 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
8086 var _v3 = A3(
8087 $elm$core$List$foldl,
8088 $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml,
8089 _Utils_Tuple2(_List_Nil, combinedStyles),
8090 children);
8091 var childNodes = _v3.a;
8092 var finalStyles = _v3.b;
8093 var vdomNode = A4(
8094 $elm$virtual_dom$VirtualDom$nodeNS,
8095 ns,
8096 elemType,
8097 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8098 $elm$core$List$reverse(childNodes));
8099 return _Utils_Tuple2(
8100 A2($elm$core$List$cons, vdomNode, nodes),
8101 finalStyles);
8102 case 'KeyedNode':
8103 var elemType = html.a;
8104 var properties = html.b;
8105 var children = html.c;
8106 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
8107 var _v4 = A3(
8108 $elm$core$List$foldl,
8109 $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml,
8110 _Utils_Tuple2(_List_Nil, combinedStyles),
8111 children);
8112 var childNodes = _v4.a;
8113 var finalStyles = _v4.b;
8114 var vdomNode = A3(
8115 $elm$virtual_dom$VirtualDom$keyedNode,
8116 elemType,
8117 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8118 $elm$core$List$reverse(childNodes));
8119 return _Utils_Tuple2(
8120 A2($elm$core$List$cons, vdomNode, nodes),
8121 finalStyles);
8122 default:
8123 var ns = html.a;
8124 var elemType = html.b;
8125 var properties = html.c;
8126 var children = html.d;
8127 var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties);
8128 var _v5 = A3(
8129 $elm$core$List$foldl,
8130 $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml,
8131 _Utils_Tuple2(_List_Nil, combinedStyles),
8132 children);
8133 var childNodes = _v5.a;
8134 var finalStyles = _v5.b;
8135 var vdomNode = A4(
8136 $elm$virtual_dom$VirtualDom$keyedNodeNS,
8137 ns,
8138 elemType,
8139 A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties),
8140 $elm$core$List$reverse(childNodes));
8141 return _Utils_Tuple2(
8142 A2($elm$core$List$cons, vdomNode, nodes),
8143 finalStyles);
8144 }
8145 });
8146var $elm$core$Dict$singleton = F2(
8147 function (key, value) {
8148 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);
8149 });
8150var $rtfeldman$elm_css$VirtualDom$Styled$stylesFromPropertiesHelp = F2(
8151 function (candidate, properties) {
8152 stylesFromPropertiesHelp:
8153 while (true) {
8154 if (!properties.b) {
8155 return candidate;
8156 } else {
8157 var _v1 = properties.a;
8158 var styles = _v1.b;
8159 var classname = _v1.c;
8160 var rest = properties.b;
8161 if ($elm$core$String$isEmpty(classname)) {
8162 var $temp$candidate = candidate,
8163 $temp$properties = rest;
8164 candidate = $temp$candidate;
8165 properties = $temp$properties;
8166 continue stylesFromPropertiesHelp;
8167 } else {
8168 var $temp$candidate = $elm$core$Maybe$Just(
8169 _Utils_Tuple2(classname, styles)),
8170 $temp$properties = rest;
8171 candidate = $temp$candidate;
8172 properties = $temp$properties;
8173 continue stylesFromPropertiesHelp;
8174 }
8175 }
8176 }
8177 });
8178var $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties = function (properties) {
8179 var _v0 = A2($rtfeldman$elm_css$VirtualDom$Styled$stylesFromPropertiesHelp, $elm$core$Maybe$Nothing, properties);
8180 if (_v0.$ === 'Nothing') {
8181 return $elm$core$Dict$empty;
8182 } else {
8183 var _v1 = _v0.a;
8184 var classname = _v1.a;
8185 var styles = _v1.b;
8186 return A2($elm$core$Dict$singleton, classname, styles);
8187 }
8188};
8189var $elm$virtual_dom$VirtualDom$text = _VirtualDom_text;
8190var $rtfeldman$elm_css$Css$Structure$compactHelp = F2(
8191 function (declaration, _v0) {
8192 var keyframesByName = _v0.a;
8193 var declarations = _v0.b;
8194 switch (declaration.$) {
8195 case 'StyleBlockDeclaration':
8196 var _v2 = declaration.a;
8197 var properties = _v2.c;
8198 return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8199 keyframesByName,
8200 A2($elm$core$List$cons, declaration, declarations));
8201 case 'MediaRule':
8202 var styleBlocks = declaration.b;
8203 return A2(
8204 $elm$core$List$all,
8205 function (_v3) {
8206 var properties = _v3.c;
8207 return $elm$core$List$isEmpty(properties);
8208 },
8209 styleBlocks) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8210 keyframesByName,
8211 A2($elm$core$List$cons, declaration, declarations));
8212 case 'SupportsRule':
8213 var otherDeclarations = declaration.b;
8214 return $elm$core$List$isEmpty(otherDeclarations) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8215 keyframesByName,
8216 A2($elm$core$List$cons, declaration, declarations));
8217 case 'DocumentRule':
8218 return _Utils_Tuple2(
8219 keyframesByName,
8220 A2($elm$core$List$cons, declaration, declarations));
8221 case 'PageRule':
8222 var properties = declaration.b;
8223 return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8224 keyframesByName,
8225 A2($elm$core$List$cons, declaration, declarations));
8226 case 'FontFace':
8227 var properties = declaration.a;
8228 return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8229 keyframesByName,
8230 A2($elm$core$List$cons, declaration, declarations));
8231 case 'Keyframes':
8232 var record = declaration.a;
8233 return $elm$core$String$isEmpty(record.declaration) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8234 A3($elm$core$Dict$insert, record.name, record.declaration, keyframesByName),
8235 declarations);
8236 case 'Viewport':
8237 var properties = declaration.a;
8238 return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8239 keyframesByName,
8240 A2($elm$core$List$cons, declaration, declarations));
8241 case 'CounterStyle':
8242 var properties = declaration.a;
8243 return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8244 keyframesByName,
8245 A2($elm$core$List$cons, declaration, declarations));
8246 default:
8247 var tuples = declaration.a;
8248 return A2(
8249 $elm$core$List$all,
8250 function (_v4) {
8251 var properties = _v4.b;
8252 return $elm$core$List$isEmpty(properties);
8253 },
8254 tuples) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2(
8255 keyframesByName,
8256 A2($elm$core$List$cons, declaration, declarations));
8257 }
8258 });
8259var $rtfeldman$elm_css$Css$Structure$Keyframes = function (a) {
8260 return {$: 'Keyframes', a: a};
8261};
8262var $rtfeldman$elm_css$Css$Structure$withKeyframeDeclarations = F2(
8263 function (keyframesByName, compactedDeclarations) {
8264 return A2(
8265 $elm$core$List$append,
8266 A2(
8267 $elm$core$List$map,
8268 function (_v0) {
8269 var name = _v0.a;
8270 var decl = _v0.b;
8271 return $rtfeldman$elm_css$Css$Structure$Keyframes(
8272 {declaration: decl, name: name});
8273 },
8274 $elm$core$Dict$toList(keyframesByName)),
8275 compactedDeclarations);
8276 });
8277var $rtfeldman$elm_css$Css$Structure$compactStylesheet = function (_v0) {
8278 var charset = _v0.charset;
8279 var imports = _v0.imports;
8280 var namespaces = _v0.namespaces;
8281 var declarations = _v0.declarations;
8282 var _v1 = A3(
8283 $elm$core$List$foldr,
8284 $rtfeldman$elm_css$Css$Structure$compactHelp,
8285 _Utils_Tuple2($elm$core$Dict$empty, _List_Nil),
8286 declarations);
8287 var keyframesByName = _v1.a;
8288 var compactedDeclarations = _v1.b;
8289 var finalDeclarations = A2($rtfeldman$elm_css$Css$Structure$withKeyframeDeclarations, keyframesByName, compactedDeclarations);
8290 return {charset: charset, declarations: finalDeclarations, imports: imports, namespaces: namespaces};
8291};
8292var $elm$core$Maybe$map = F2(
8293 function (f, maybe) {
8294 if (maybe.$ === 'Just') {
8295 var value = maybe.a;
8296 return $elm$core$Maybe$Just(
8297 f(value));
8298 } else {
8299 return $elm$core$Maybe$Nothing;
8300 }
8301 });
8302var $rtfeldman$elm_css$Css$Structure$Output$charsetToString = function (charset) {
8303 return A2(
8304 $elm$core$Maybe$withDefault,
8305 '',
8306 A2(
8307 $elm$core$Maybe$map,
8308 function (str) {
8309 return '@charset \"' + (str + '\"');
8310 },
8311 charset));
8312};
8313var $elm$core$List$filter = F2(
8314 function (isGood, list) {
8315 return A3(
8316 $elm$core$List$foldr,
8317 F2(
8318 function (x, xs) {
8319 return isGood(x) ? A2($elm$core$List$cons, x, xs) : xs;
8320 }),
8321 _List_Nil,
8322 list);
8323 });
8324var $rtfeldman$elm_css$Css$Structure$Output$mediaExpressionToString = function (expression) {
8325 return '(' + (expression.feature + (A2(
8326 $elm$core$Maybe$withDefault,
8327 '',
8328 A2(
8329 $elm$core$Maybe$map,
8330 $elm$core$Basics$append(': '),
8331 expression.value)) + ')'));
8332};
8333var $rtfeldman$elm_css$Css$Structure$Output$mediaTypeToString = function (mediaType) {
8334 switch (mediaType.$) {
8335 case 'Print':
8336 return 'print';
8337 case 'Screen':
8338 return 'screen';
8339 default:
8340 return 'speech';
8341 }
8342};
8343var $rtfeldman$elm_css$Css$Structure$Output$mediaQueryToString = function (mediaQuery) {
8344 var prefixWith = F3(
8345 function (str, mediaType, expressions) {
8346 return str + (' ' + A2(
8347 $elm$core$String$join,
8348 ' and ',
8349 A2(
8350 $elm$core$List$cons,
8351 $rtfeldman$elm_css$Css$Structure$Output$mediaTypeToString(mediaType),
8352 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$mediaExpressionToString, expressions))));
8353 });
8354 switch (mediaQuery.$) {
8355 case 'AllQuery':
8356 var expressions = mediaQuery.a;
8357 return A2(
8358 $elm$core$String$join,
8359 ' and ',
8360 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$mediaExpressionToString, expressions));
8361 case 'OnlyQuery':
8362 var mediaType = mediaQuery.a;
8363 var expressions = mediaQuery.b;
8364 return A3(prefixWith, 'only', mediaType, expressions);
8365 case 'NotQuery':
8366 var mediaType = mediaQuery.a;
8367 var expressions = mediaQuery.b;
8368 return A3(prefixWith, 'not', mediaType, expressions);
8369 default:
8370 var str = mediaQuery.a;
8371 return str;
8372 }
8373};
8374var $rtfeldman$elm_css$Css$Structure$Output$importMediaQueryToString = F2(
8375 function (name, mediaQuery) {
8376 return '@import \"' + (name + ($rtfeldman$elm_css$Css$Structure$Output$mediaQueryToString(mediaQuery) + '\"'));
8377 });
8378var $rtfeldman$elm_css$Css$Structure$Output$importToString = function (_v0) {
8379 var name = _v0.a;
8380 var mediaQueries = _v0.b;
8381 return A2(
8382 $elm$core$String$join,
8383 '\n',
8384 A2(
8385 $elm$core$List$map,
8386 $rtfeldman$elm_css$Css$Structure$Output$importMediaQueryToString(name),
8387 mediaQueries));
8388};
8389var $rtfeldman$elm_css$Css$Structure$Output$namespaceToString = function (_v0) {
8390 var prefix = _v0.a;
8391 var str = _v0.b;
8392 return '@namespace ' + (prefix + ('\"' + (str + '\"')));
8393};
8394var $rtfeldman$elm_css$Css$Structure$Output$spaceIndent = ' ';
8395var $rtfeldman$elm_css$Css$Structure$Output$indent = function (str) {
8396 return _Utils_ap($rtfeldman$elm_css$Css$Structure$Output$spaceIndent, str);
8397};
8398var $rtfeldman$elm_css$Css$Structure$Output$noIndent = '';
8399var $rtfeldman$elm_css$Css$Structure$Output$emitProperty = function (str) {
8400 return str + ';';
8401};
8402var $rtfeldman$elm_css$Css$Structure$Output$emitProperties = function (properties) {
8403 return A2(
8404 $elm$core$String$join,
8405 '\n',
8406 A2(
8407 $elm$core$List$map,
8408 A2($elm$core$Basics$composeL, $rtfeldman$elm_css$Css$Structure$Output$indent, $rtfeldman$elm_css$Css$Structure$Output$emitProperty),
8409 properties));
8410};
8411var $elm$core$String$append = _String_append;
8412var $rtfeldman$elm_css$Css$Structure$Output$pseudoElementToString = function (_v0) {
8413 var str = _v0.a;
8414 return '::' + str;
8415};
8416var $rtfeldman$elm_css$Css$Structure$Output$combinatorToString = function (combinator) {
8417 switch (combinator.$) {
8418 case 'AdjacentSibling':
8419 return '+';
8420 case 'GeneralSibling':
8421 return '~';
8422 case 'Child':
8423 return '>';
8424 default:
8425 return '';
8426 }
8427};
8428var $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString = function (repeatableSimpleSelector) {
8429 switch (repeatableSimpleSelector.$) {
8430 case 'ClassSelector':
8431 var str = repeatableSimpleSelector.a;
8432 return '.' + str;
8433 case 'IdSelector':
8434 var str = repeatableSimpleSelector.a;
8435 return '#' + str;
8436 case 'PseudoClassSelector':
8437 var str = repeatableSimpleSelector.a;
8438 return ':' + str;
8439 default:
8440 var str = repeatableSimpleSelector.a;
8441 return '[' + (str + ']');
8442 }
8443};
8444var $rtfeldman$elm_css$Css$Structure$Output$simpleSelectorSequenceToString = function (simpleSelectorSequence) {
8445 switch (simpleSelectorSequence.$) {
8446 case 'TypeSelectorSequence':
8447 var str = simpleSelectorSequence.a.a;
8448 var repeatableSimpleSelectors = simpleSelectorSequence.b;
8449 return A2(
8450 $elm$core$String$join,
8451 '',
8452 A2(
8453 $elm$core$List$cons,
8454 str,
8455 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString, repeatableSimpleSelectors)));
8456 case 'UniversalSelectorSequence':
8457 var repeatableSimpleSelectors = simpleSelectorSequence.a;
8458 return $elm$core$List$isEmpty(repeatableSimpleSelectors) ? '*' : A2(
8459 $elm$core$String$join,
8460 '',
8461 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString, repeatableSimpleSelectors));
8462 default:
8463 var str = simpleSelectorSequence.a;
8464 var repeatableSimpleSelectors = simpleSelectorSequence.b;
8465 return A2(
8466 $elm$core$String$join,
8467 '',
8468 A2(
8469 $elm$core$List$cons,
8470 str,
8471 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString, repeatableSimpleSelectors)));
8472 }
8473};
8474var $rtfeldman$elm_css$Css$Structure$Output$selectorChainToString = function (_v0) {
8475 var combinator = _v0.a;
8476 var sequence = _v0.b;
8477 return A2(
8478 $elm$core$String$join,
8479 ' ',
8480 _List_fromArray(
8481 [
8482 $rtfeldman$elm_css$Css$Structure$Output$combinatorToString(combinator),
8483 $rtfeldman$elm_css$Css$Structure$Output$simpleSelectorSequenceToString(sequence)
8484 ]));
8485};
8486var $rtfeldman$elm_css$Css$Structure$Output$selectorToString = function (_v0) {
8487 var simpleSelectorSequence = _v0.a;
8488 var chain = _v0.b;
8489 var pseudoElement = _v0.c;
8490 var segments = A2(
8491 $elm$core$List$cons,
8492 $rtfeldman$elm_css$Css$Structure$Output$simpleSelectorSequenceToString(simpleSelectorSequence),
8493 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$selectorChainToString, chain));
8494 var pseudoElementsString = A2(
8495 $elm$core$String$join,
8496 '',
8497 _List_fromArray(
8498 [
8499 A2(
8500 $elm$core$Maybe$withDefault,
8501 '',
8502 A2($elm$core$Maybe$map, $rtfeldman$elm_css$Css$Structure$Output$pseudoElementToString, pseudoElement))
8503 ]));
8504 return A2(
8505 $elm$core$String$append,
8506 A2(
8507 $elm$core$String$join,
8508 ' ',
8509 A2(
8510 $elm$core$List$filter,
8511 A2($elm$core$Basics$composeL, $elm$core$Basics$not, $elm$core$String$isEmpty),
8512 segments)),
8513 pseudoElementsString);
8514};
8515var $rtfeldman$elm_css$Css$Structure$Output$prettyPrintStyleBlock = F2(
8516 function (indentLevel, _v0) {
8517 var firstSelector = _v0.a;
8518 var otherSelectors = _v0.b;
8519 var properties = _v0.c;
8520 var selectorStr = A2(
8521 $elm$core$String$join,
8522 ', ',
8523 A2(
8524 $elm$core$List$map,
8525 $rtfeldman$elm_css$Css$Structure$Output$selectorToString,
8526 A2($elm$core$List$cons, firstSelector, otherSelectors)));
8527 return A2(
8528 $elm$core$String$join,
8529 '',
8530 _List_fromArray(
8531 [
8532 selectorStr,
8533 ' {\n',
8534 indentLevel,
8535 $rtfeldman$elm_css$Css$Structure$Output$emitProperties(properties),
8536 '\n',
8537 indentLevel,
8538 '}'
8539 ]));
8540 });
8541var $rtfeldman$elm_css$Css$Structure$Output$prettyPrintDeclaration = function (decl) {
8542 switch (decl.$) {
8543 case 'StyleBlockDeclaration':
8544 var styleBlock = decl.a;
8545 return A2($rtfeldman$elm_css$Css$Structure$Output$prettyPrintStyleBlock, $rtfeldman$elm_css$Css$Structure$Output$noIndent, styleBlock);
8546 case 'MediaRule':
8547 var mediaQueries = decl.a;
8548 var styleBlocks = decl.b;
8549 var query = A2(
8550 $elm$core$String$join,
8551 ',\n',
8552 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$mediaQueryToString, mediaQueries));
8553 var blocks = A2(
8554 $elm$core$String$join,
8555 '\n\n',
8556 A2(
8557 $elm$core$List$map,
8558 A2(
8559 $elm$core$Basics$composeL,
8560 $rtfeldman$elm_css$Css$Structure$Output$indent,
8561 $rtfeldman$elm_css$Css$Structure$Output$prettyPrintStyleBlock($rtfeldman$elm_css$Css$Structure$Output$spaceIndent)),
8562 styleBlocks));
8563 return '@media ' + (query + (' {\n' + (blocks + '\n}')));
8564 case 'SupportsRule':
8565 return 'TODO';
8566 case 'DocumentRule':
8567 return 'TODO';
8568 case 'PageRule':
8569 return 'TODO';
8570 case 'FontFace':
8571 return 'TODO';
8572 case 'Keyframes':
8573 var name = decl.a.name;
8574 var declaration = decl.a.declaration;
8575 return '@keyframes ' + (name + (' {\n' + (declaration + '\n}')));
8576 case 'Viewport':
8577 return 'TODO';
8578 case 'CounterStyle':
8579 return 'TODO';
8580 default:
8581 return 'TODO';
8582 }
8583};
8584var $rtfeldman$elm_css$Css$Structure$Output$prettyPrint = function (_v0) {
8585 var charset = _v0.charset;
8586 var imports = _v0.imports;
8587 var namespaces = _v0.namespaces;
8588 var declarations = _v0.declarations;
8589 return A2(
8590 $elm$core$String$join,
8591 '\n\n',
8592 A2(
8593 $elm$core$List$filter,
8594 A2($elm$core$Basics$composeL, $elm$core$Basics$not, $elm$core$String$isEmpty),
8595 _List_fromArray(
8596 [
8597 $rtfeldman$elm_css$Css$Structure$Output$charsetToString(charset),
8598 A2(
8599 $elm$core$String$join,
8600 '\n',
8601 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$importToString, imports)),
8602 A2(
8603 $elm$core$String$join,
8604 '\n',
8605 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$namespaceToString, namespaces)),
8606 A2(
8607 $elm$core$String$join,
8608 '\n\n',
8609 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$prettyPrintDeclaration, declarations))
8610 ])));
8611};
8612var $rtfeldman$elm_css$Css$Structure$CounterStyle = function (a) {
8613 return {$: 'CounterStyle', a: a};
8614};
8615var $rtfeldman$elm_css$Css$Structure$FontFace = function (a) {
8616 return {$: 'FontFace', a: a};
8617};
8618var $rtfeldman$elm_css$Css$Structure$PageRule = F2(
8619 function (a, b) {
8620 return {$: 'PageRule', a: a, b: b};
8621 });
8622var $rtfeldman$elm_css$Css$Structure$Selector = F3(
8623 function (a, b, c) {
8624 return {$: 'Selector', a: a, b: b, c: c};
8625 });
8626var $rtfeldman$elm_css$Css$Structure$StyleBlock = F3(
8627 function (a, b, c) {
8628 return {$: 'StyleBlock', a: a, b: b, c: c};
8629 });
8630var $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration = function (a) {
8631 return {$: 'StyleBlockDeclaration', a: a};
8632};
8633var $rtfeldman$elm_css$Css$Structure$SupportsRule = F2(
8634 function (a, b) {
8635 return {$: 'SupportsRule', a: a, b: b};
8636 });
8637var $rtfeldman$elm_css$Css$Structure$Viewport = function (a) {
8638 return {$: 'Viewport', a: a};
8639};
8640var $rtfeldman$elm_css$Css$Structure$MediaRule = F2(
8641 function (a, b) {
8642 return {$: 'MediaRule', a: a, b: b};
8643 });
8644var $rtfeldman$elm_css$Css$Structure$mapLast = F2(
8645 function (update, list) {
8646 if (!list.b) {
8647 return list;
8648 } else {
8649 if (!list.b.b) {
8650 var only = list.a;
8651 return _List_fromArray(
8652 [
8653 update(only)
8654 ]);
8655 } else {
8656 var first = list.a;
8657 var rest = list.b;
8658 return A2(
8659 $elm$core$List$cons,
8660 first,
8661 A2($rtfeldman$elm_css$Css$Structure$mapLast, update, rest));
8662 }
8663 }
8664 });
8665var $rtfeldman$elm_css$Css$Structure$withPropertyAppended = F2(
8666 function (property, _v0) {
8667 var firstSelector = _v0.a;
8668 var otherSelectors = _v0.b;
8669 var properties = _v0.c;
8670 return A3(
8671 $rtfeldman$elm_css$Css$Structure$StyleBlock,
8672 firstSelector,
8673 otherSelectors,
8674 _Utils_ap(
8675 properties,
8676 _List_fromArray(
8677 [property])));
8678 });
8679var $rtfeldman$elm_css$Css$Structure$appendProperty = F2(
8680 function (property, declarations) {
8681 if (!declarations.b) {
8682 return declarations;
8683 } else {
8684 if (!declarations.b.b) {
8685 switch (declarations.a.$) {
8686 case 'StyleBlockDeclaration':
8687 var styleBlock = declarations.a.a;
8688 return _List_fromArray(
8689 [
8690 $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration(
8691 A2($rtfeldman$elm_css$Css$Structure$withPropertyAppended, property, styleBlock))
8692 ]);
8693 case 'MediaRule':
8694 var _v1 = declarations.a;
8695 var mediaQueries = _v1.a;
8696 var styleBlocks = _v1.b;
8697 return _List_fromArray(
8698 [
8699 A2(
8700 $rtfeldman$elm_css$Css$Structure$MediaRule,
8701 mediaQueries,
8702 A2(
8703 $rtfeldman$elm_css$Css$Structure$mapLast,
8704 $rtfeldman$elm_css$Css$Structure$withPropertyAppended(property),
8705 styleBlocks))
8706 ]);
8707 default:
8708 return declarations;
8709 }
8710 } else {
8711 var first = declarations.a;
8712 var rest = declarations.b;
8713 return A2(
8714 $elm$core$List$cons,
8715 first,
8716 A2($rtfeldman$elm_css$Css$Structure$appendProperty, property, rest));
8717 }
8718 }
8719 });
8720var $rtfeldman$elm_css$Css$Structure$appendToLastSelector = F2(
8721 function (f, styleBlock) {
8722 if (!styleBlock.b.b) {
8723 var only = styleBlock.a;
8724 var properties = styleBlock.c;
8725 return _List_fromArray(
8726 [
8727 A3($rtfeldman$elm_css$Css$Structure$StyleBlock, only, _List_Nil, properties),
8728 A3(
8729 $rtfeldman$elm_css$Css$Structure$StyleBlock,
8730 f(only),
8731 _List_Nil,
8732 _List_Nil)
8733 ]);
8734 } else {
8735 var first = styleBlock.a;
8736 var rest = styleBlock.b;
8737 var properties = styleBlock.c;
8738 var newRest = A2($elm$core$List$map, f, rest);
8739 var newFirst = f(first);
8740 return _List_fromArray(
8741 [
8742 A3($rtfeldman$elm_css$Css$Structure$StyleBlock, first, rest, properties),
8743 A3($rtfeldman$elm_css$Css$Structure$StyleBlock, newFirst, newRest, _List_Nil)
8744 ]);
8745 }
8746 });
8747var $rtfeldman$elm_css$Css$Structure$applyPseudoElement = F2(
8748 function (pseudo, _v0) {
8749 var sequence = _v0.a;
8750 var selectors = _v0.b;
8751 return A3(
8752 $rtfeldman$elm_css$Css$Structure$Selector,
8753 sequence,
8754 selectors,
8755 $elm$core$Maybe$Just(pseudo));
8756 });
8757var $rtfeldman$elm_css$Css$Structure$appendPseudoElementToLastSelector = F2(
8758 function (pseudo, styleBlock) {
8759 return A2(
8760 $rtfeldman$elm_css$Css$Structure$appendToLastSelector,
8761 $rtfeldman$elm_css$Css$Structure$applyPseudoElement(pseudo),
8762 styleBlock);
8763 });
8764var $rtfeldman$elm_css$Css$Structure$CustomSelector = F2(
8765 function (a, b) {
8766 return {$: 'CustomSelector', a: a, b: b};
8767 });
8768var $rtfeldman$elm_css$Css$Structure$TypeSelectorSequence = F2(
8769 function (a, b) {
8770 return {$: 'TypeSelectorSequence', a: a, b: b};
8771 });
8772var $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence = function (a) {
8773 return {$: 'UniversalSelectorSequence', a: a};
8774};
8775var $rtfeldman$elm_css$Css$Structure$appendRepeatable = F2(
8776 function (selector, sequence) {
8777 switch (sequence.$) {
8778 case 'TypeSelectorSequence':
8779 var typeSelector = sequence.a;
8780 var list = sequence.b;
8781 return A2(
8782 $rtfeldman$elm_css$Css$Structure$TypeSelectorSequence,
8783 typeSelector,
8784 _Utils_ap(
8785 list,
8786 _List_fromArray(
8787 [selector])));
8788 case 'UniversalSelectorSequence':
8789 var list = sequence.a;
8790 return $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence(
8791 _Utils_ap(
8792 list,
8793 _List_fromArray(
8794 [selector])));
8795 default:
8796 var str = sequence.a;
8797 var list = sequence.b;
8798 return A2(
8799 $rtfeldman$elm_css$Css$Structure$CustomSelector,
8800 str,
8801 _Utils_ap(
8802 list,
8803 _List_fromArray(
8804 [selector])));
8805 }
8806 });
8807var $rtfeldman$elm_css$Css$Structure$appendRepeatableWithCombinator = F2(
8808 function (selector, list) {
8809 if (!list.b) {
8810 return _List_Nil;
8811 } else {
8812 if (!list.b.b) {
8813 var _v1 = list.a;
8814 var combinator = _v1.a;
8815 var sequence = _v1.b;
8816 return _List_fromArray(
8817 [
8818 _Utils_Tuple2(
8819 combinator,
8820 A2($rtfeldman$elm_css$Css$Structure$appendRepeatable, selector, sequence))
8821 ]);
8822 } else {
8823 var first = list.a;
8824 var rest = list.b;
8825 return A2(
8826 $elm$core$List$cons,
8827 first,
8828 A2($rtfeldman$elm_css$Css$Structure$appendRepeatableWithCombinator, selector, rest));
8829 }
8830 }
8831 });
8832var $rtfeldman$elm_css$Css$Structure$appendRepeatableSelector = F2(
8833 function (repeatableSimpleSelector, selector) {
8834 if (!selector.b.b) {
8835 var sequence = selector.a;
8836 var pseudoElement = selector.c;
8837 return A3(
8838 $rtfeldman$elm_css$Css$Structure$Selector,
8839 A2($rtfeldman$elm_css$Css$Structure$appendRepeatable, repeatableSimpleSelector, sequence),
8840 _List_Nil,
8841 pseudoElement);
8842 } else {
8843 var firstSelector = selector.a;
8844 var tuples = selector.b;
8845 var pseudoElement = selector.c;
8846 return A3(
8847 $rtfeldman$elm_css$Css$Structure$Selector,
8848 firstSelector,
8849 A2($rtfeldman$elm_css$Css$Structure$appendRepeatableWithCombinator, repeatableSimpleSelector, tuples),
8850 pseudoElement);
8851 }
8852 });
8853var $rtfeldman$elm_css$Css$Structure$appendRepeatableToLastSelector = F2(
8854 function (selector, styleBlock) {
8855 return A2(
8856 $rtfeldman$elm_css$Css$Structure$appendToLastSelector,
8857 $rtfeldman$elm_css$Css$Structure$appendRepeatableSelector(selector),
8858 styleBlock);
8859 });
8860var $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors = function (declarations) {
8861 collectSelectors:
8862 while (true) {
8863 if (!declarations.b) {
8864 return _List_Nil;
8865 } else {
8866 if (declarations.a.$ === 'StyleBlockDeclaration') {
8867 var _v1 = declarations.a.a;
8868 var firstSelector = _v1.a;
8869 var otherSelectors = _v1.b;
8870 var rest = declarations.b;
8871 return _Utils_ap(
8872 A2($elm$core$List$cons, firstSelector, otherSelectors),
8873 $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors(rest));
8874 } else {
8875 var rest = declarations.b;
8876 var $temp$declarations = rest;
8877 declarations = $temp$declarations;
8878 continue collectSelectors;
8879 }
8880 }
8881 }
8882};
8883var $rtfeldman$elm_css$Css$Structure$DocumentRule = F5(
8884 function (a, b, c, d, e) {
8885 return {$: 'DocumentRule', a: a, b: b, c: c, d: d, e: e};
8886 });
8887var $rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock = F2(
8888 function (update, declarations) {
8889 _v0$12:
8890 while (true) {
8891 if (!declarations.b) {
8892 return declarations;
8893 } else {
8894 if (!declarations.b.b) {
8895 switch (declarations.a.$) {
8896 case 'StyleBlockDeclaration':
8897 var styleBlock = declarations.a.a;
8898 return A2(
8899 $elm$core$List$map,
8900 $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration,
8901 update(styleBlock));
8902 case 'MediaRule':
8903 if (declarations.a.b.b) {
8904 if (!declarations.a.b.b.b) {
8905 var _v1 = declarations.a;
8906 var mediaQueries = _v1.a;
8907 var _v2 = _v1.b;
8908 var styleBlock = _v2.a;
8909 return _List_fromArray(
8910 [
8911 A2(
8912 $rtfeldman$elm_css$Css$Structure$MediaRule,
8913 mediaQueries,
8914 update(styleBlock))
8915 ]);
8916 } else {
8917 var _v3 = declarations.a;
8918 var mediaQueries = _v3.a;
8919 var _v4 = _v3.b;
8920 var first = _v4.a;
8921 var rest = _v4.b;
8922 var _v5 = A2(
8923 $rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock,
8924 update,
8925 _List_fromArray(
8926 [
8927 A2($rtfeldman$elm_css$Css$Structure$MediaRule, mediaQueries, rest)
8928 ]));
8929 if ((_v5.b && (_v5.a.$ === 'MediaRule')) && (!_v5.b.b)) {
8930 var _v6 = _v5.a;
8931 var newMediaQueries = _v6.a;
8932 var newStyleBlocks = _v6.b;
8933 return _List_fromArray(
8934 [
8935 A2(
8936 $rtfeldman$elm_css$Css$Structure$MediaRule,
8937 newMediaQueries,
8938 A2($elm$core$List$cons, first, newStyleBlocks))
8939 ]);
8940 } else {
8941 var newDeclarations = _v5;
8942 return newDeclarations;
8943 }
8944 }
8945 } else {
8946 break _v0$12;
8947 }
8948 case 'SupportsRule':
8949 var _v7 = declarations.a;
8950 var str = _v7.a;
8951 var nestedDeclarations = _v7.b;
8952 return _List_fromArray(
8953 [
8954 A2(
8955 $rtfeldman$elm_css$Css$Structure$SupportsRule,
8956 str,
8957 A2($rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, update, nestedDeclarations))
8958 ]);
8959 case 'DocumentRule':
8960 var _v8 = declarations.a;
8961 var str1 = _v8.a;
8962 var str2 = _v8.b;
8963 var str3 = _v8.c;
8964 var str4 = _v8.d;
8965 var styleBlock = _v8.e;
8966 return A2(
8967 $elm$core$List$map,
8968 A4($rtfeldman$elm_css$Css$Structure$DocumentRule, str1, str2, str3, str4),
8969 update(styleBlock));
8970 case 'PageRule':
8971 var _v9 = declarations.a;
8972 return declarations;
8973 case 'FontFace':
8974 return declarations;
8975 case 'Keyframes':
8976 return declarations;
8977 case 'Viewport':
8978 return declarations;
8979 case 'CounterStyle':
8980 return declarations;
8981 default:
8982 return declarations;
8983 }
8984 } else {
8985 break _v0$12;
8986 }
8987 }
8988 }
8989 var first = declarations.a;
8990 var rest = declarations.b;
8991 return A2(
8992 $elm$core$List$cons,
8993 first,
8994 A2($rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, update, rest));
8995 });
8996var $elm$core$String$cons = _String_cons;
8997var $rtfeldman$elm_css$ElmCssVendor$Murmur3$HashData = F4(
8998 function (shift, seed, hash, charsProcessed) {
8999 return {charsProcessed: charsProcessed, hash: hash, seed: seed, shift: shift};
9000 });
9001var $rtfeldman$elm_css$ElmCssVendor$Murmur3$c1 = 3432918353;
9002var $rtfeldman$elm_css$ElmCssVendor$Murmur3$c2 = 461845907;
9003var $elm$core$Bitwise$and = _Bitwise_and;
9004var $elm$core$Bitwise$shiftLeftBy = _Bitwise_shiftLeftBy;
9005var $elm$core$Bitwise$shiftRightZfBy = _Bitwise_shiftRightZfBy;
9006var $rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy = F2(
9007 function (b, a) {
9008 return ((a & 65535) * b) + ((((a >>> 16) * b) & 65535) << 16);
9009 });
9010var $elm$core$Bitwise$or = _Bitwise_or;
9011var $rtfeldman$elm_css$ElmCssVendor$Murmur3$rotlBy = F2(
9012 function (b, a) {
9013 return (a << b) | (a >>> (32 - b));
9014 });
9015var $elm$core$Bitwise$xor = _Bitwise_xor;
9016var $rtfeldman$elm_css$ElmCssVendor$Murmur3$finalize = function (data) {
9017 var acc = (!(!data.hash)) ? (data.seed ^ A2(
9018 $rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy,
9019 $rtfeldman$elm_css$ElmCssVendor$Murmur3$c2,
9020 A2(
9021 $rtfeldman$elm_css$ElmCssVendor$Murmur3$rotlBy,
9022 15,
9023 A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, $rtfeldman$elm_css$ElmCssVendor$Murmur3$c1, data.hash)))) : data.seed;
9024 var h0 = acc ^ data.charsProcessed;
9025 var h1 = A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, 2246822507, h0 ^ (h0 >>> 16));
9026 var h2 = A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, 3266489909, h1 ^ (h1 >>> 13));
9027 return (h2 ^ (h2 >>> 16)) >>> 0;
9028};
9029var $elm$core$String$foldl = _String_foldl;
9030var $rtfeldman$elm_css$ElmCssVendor$Murmur3$mix = F2(
9031 function (h1, k1) {
9032 return A2(
9033 $rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy,
9034 5,
9035 A2(
9036 $rtfeldman$elm_css$ElmCssVendor$Murmur3$rotlBy,
9037 13,
9038 h1 ^ A2(
9039 $rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy,
9040 $rtfeldman$elm_css$ElmCssVendor$Murmur3$c2,
9041 A2(
9042 $rtfeldman$elm_css$ElmCssVendor$Murmur3$rotlBy,
9043 15,
9044 A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$multiplyBy, $rtfeldman$elm_css$ElmCssVendor$Murmur3$c1, k1))))) + 3864292196;
9045 });
9046var $rtfeldman$elm_css$ElmCssVendor$Murmur3$hashFold = F2(
9047 function (c, data) {
9048 var res = data.hash | ((255 & $elm$core$Char$toCode(c)) << data.shift);
9049 var _v0 = data.shift;
9050 if (_v0 === 24) {
9051 return {
9052 charsProcessed: data.charsProcessed + 1,
9053 hash: 0,
9054 seed: A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$mix, data.seed, res),
9055 shift: 0
9056 };
9057 } else {
9058 return {charsProcessed: data.charsProcessed + 1, hash: res, seed: data.seed, shift: data.shift + 8};
9059 }
9060 });
9061var $rtfeldman$elm_css$ElmCssVendor$Murmur3$hashString = F2(
9062 function (seed, str) {
9063 return $rtfeldman$elm_css$ElmCssVendor$Murmur3$finalize(
9064 A3(
9065 $elm$core$String$foldl,
9066 $rtfeldman$elm_css$ElmCssVendor$Murmur3$hashFold,
9067 A4($rtfeldman$elm_css$ElmCssVendor$Murmur3$HashData, 0, seed, 0, 0),
9068 str));
9069 });
9070var $rtfeldman$elm_css$Hash$murmurSeed = 15739;
9071var $elm$core$String$fromList = _String_fromList;
9072var $elm$core$Basics$modBy = _Basics_modBy;
9073var $rtfeldman$elm_hex$Hex$unsafeToDigit = function (num) {
9074 unsafeToDigit:
9075 while (true) {
9076 switch (num) {
9077 case 0:
9078 return _Utils_chr('0');
9079 case 1:
9080 return _Utils_chr('1');
9081 case 2:
9082 return _Utils_chr('2');
9083 case 3:
9084 return _Utils_chr('3');
9085 case 4:
9086 return _Utils_chr('4');
9087 case 5:
9088 return _Utils_chr('5');
9089 case 6:
9090 return _Utils_chr('6');
9091 case 7:
9092 return _Utils_chr('7');
9093 case 8:
9094 return _Utils_chr('8');
9095 case 9:
9096 return _Utils_chr('9');
9097 case 10:
9098 return _Utils_chr('a');
9099 case 11:
9100 return _Utils_chr('b');
9101 case 12:
9102 return _Utils_chr('c');
9103 case 13:
9104 return _Utils_chr('d');
9105 case 14:
9106 return _Utils_chr('e');
9107 case 15:
9108 return _Utils_chr('f');
9109 default:
9110 var $temp$num = num;
9111 num = $temp$num;
9112 continue unsafeToDigit;
9113 }
9114 }
9115};
9116var $rtfeldman$elm_hex$Hex$unsafePositiveToDigits = F2(
9117 function (digits, num) {
9118 unsafePositiveToDigits:
9119 while (true) {
9120 if (num < 16) {
9121 return A2(
9122 $elm$core$List$cons,
9123 $rtfeldman$elm_hex$Hex$unsafeToDigit(num),
9124 digits);
9125 } else {
9126 var $temp$digits = A2(
9127 $elm$core$List$cons,
9128 $rtfeldman$elm_hex$Hex$unsafeToDigit(
9129 A2($elm$core$Basics$modBy, 16, num)),
9130 digits),
9131 $temp$num = (num / 16) | 0;
9132 digits = $temp$digits;
9133 num = $temp$num;
9134 continue unsafePositiveToDigits;
9135 }
9136 }
9137 });
9138var $rtfeldman$elm_hex$Hex$toString = function (num) {
9139 return $elm$core$String$fromList(
9140 (num < 0) ? A2(
9141 $elm$core$List$cons,
9142 _Utils_chr('-'),
9143 A2($rtfeldman$elm_hex$Hex$unsafePositiveToDigits, _List_Nil, -num)) : A2($rtfeldman$elm_hex$Hex$unsafePositiveToDigits, _List_Nil, num));
9144};
9145var $rtfeldman$elm_css$Hash$fromString = function (str) {
9146 return A2(
9147 $elm$core$String$cons,
9148 _Utils_chr('_'),
9149 $rtfeldman$elm_hex$Hex$toString(
9150 A2($rtfeldman$elm_css$ElmCssVendor$Murmur3$hashString, $rtfeldman$elm_css$Hash$murmurSeed, str)));
9151};
9152var $elm$core$List$head = function (list) {
9153 if (list.b) {
9154 var x = list.a;
9155 var xs = list.b;
9156 return $elm$core$Maybe$Just(x);
9157 } else {
9158 return $elm$core$Maybe$Nothing;
9159 }
9160};
9161var $rtfeldman$elm_css$Css$Preprocess$Resolve$last = function (list) {
9162 last:
9163 while (true) {
9164 if (!list.b) {
9165 return $elm$core$Maybe$Nothing;
9166 } else {
9167 if (!list.b.b) {
9168 var singleton = list.a;
9169 return $elm$core$Maybe$Just(singleton);
9170 } else {
9171 var rest = list.b;
9172 var $temp$list = rest;
9173 list = $temp$list;
9174 continue last;
9175 }
9176 }
9177 }
9178};
9179var $rtfeldman$elm_css$Css$Preprocess$Resolve$lastDeclaration = function (declarations) {
9180 lastDeclaration:
9181 while (true) {
9182 if (!declarations.b) {
9183 return $elm$core$Maybe$Nothing;
9184 } else {
9185 if (!declarations.b.b) {
9186 var x = declarations.a;
9187 return $elm$core$Maybe$Just(
9188 _List_fromArray(
9189 [x]));
9190 } else {
9191 var xs = declarations.b;
9192 var $temp$declarations = xs;
9193 declarations = $temp$declarations;
9194 continue lastDeclaration;
9195 }
9196 }
9197 }
9198};
9199var $rtfeldman$elm_css$Css$Preprocess$Resolve$oneOf = function (maybes) {
9200 oneOf:
9201 while (true) {
9202 if (!maybes.b) {
9203 return $elm$core$Maybe$Nothing;
9204 } else {
9205 var maybe = maybes.a;
9206 var rest = maybes.b;
9207 if (maybe.$ === 'Nothing') {
9208 var $temp$maybes = rest;
9209 maybes = $temp$maybes;
9210 continue oneOf;
9211 } else {
9212 return maybe;
9213 }
9214 }
9215 }
9216};
9217var $rtfeldman$elm_css$Css$Structure$FontFeatureValues = function (a) {
9218 return {$: 'FontFeatureValues', a: a};
9219};
9220var $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveFontFeatureValues = function (tuples) {
9221 var expandTuples = function (tuplesToExpand) {
9222 if (!tuplesToExpand.b) {
9223 return _List_Nil;
9224 } else {
9225 var properties = tuplesToExpand.a;
9226 var rest = tuplesToExpand.b;
9227 return A2(
9228 $elm$core$List$cons,
9229 properties,
9230 expandTuples(rest));
9231 }
9232 };
9233 var newTuples = expandTuples(tuples);
9234 return _List_fromArray(
9235 [
9236 $rtfeldman$elm_css$Css$Structure$FontFeatureValues(newTuples)
9237 ]);
9238};
9239var $rtfeldman$elm_css$Css$Structure$styleBlockToMediaRule = F2(
9240 function (mediaQueries, declaration) {
9241 if (declaration.$ === 'StyleBlockDeclaration') {
9242 var styleBlock = declaration.a;
9243 return A2(
9244 $rtfeldman$elm_css$Css$Structure$MediaRule,
9245 mediaQueries,
9246 _List_fromArray(
9247 [styleBlock]));
9248 } else {
9249 return declaration;
9250 }
9251 });
9252var $elm$core$List$tail = function (list) {
9253 if (list.b) {
9254 var x = list.a;
9255 var xs = list.b;
9256 return $elm$core$Maybe$Just(xs);
9257 } else {
9258 return $elm$core$Maybe$Nothing;
9259 }
9260};
9261var $elm$core$List$takeReverse = F3(
9262 function (n, list, kept) {
9263 takeReverse:
9264 while (true) {
9265 if (n <= 0) {
9266 return kept;
9267 } else {
9268 if (!list.b) {
9269 return kept;
9270 } else {
9271 var x = list.a;
9272 var xs = list.b;
9273 var $temp$n = n - 1,
9274 $temp$list = xs,
9275 $temp$kept = A2($elm$core$List$cons, x, kept);
9276 n = $temp$n;
9277 list = $temp$list;
9278 kept = $temp$kept;
9279 continue takeReverse;
9280 }
9281 }
9282 }
9283 });
9284var $elm$core$List$takeTailRec = F2(
9285 function (n, list) {
9286 return $elm$core$List$reverse(
9287 A3($elm$core$List$takeReverse, n, list, _List_Nil));
9288 });
9289var $elm$core$List$takeFast = F3(
9290 function (ctr, n, list) {
9291 if (n <= 0) {
9292 return _List_Nil;
9293 } else {
9294 var _v0 = _Utils_Tuple2(n, list);
9295 _v0$1:
9296 while (true) {
9297 _v0$5:
9298 while (true) {
9299 if (!_v0.b.b) {
9300 return list;
9301 } else {
9302 if (_v0.b.b.b) {
9303 switch (_v0.a) {
9304 case 1:
9305 break _v0$1;
9306 case 2:
9307 var _v2 = _v0.b;
9308 var x = _v2.a;
9309 var _v3 = _v2.b;
9310 var y = _v3.a;
9311 return _List_fromArray(
9312 [x, y]);
9313 case 3:
9314 if (_v0.b.b.b.b) {
9315 var _v4 = _v0.b;
9316 var x = _v4.a;
9317 var _v5 = _v4.b;
9318 var y = _v5.a;
9319 var _v6 = _v5.b;
9320 var z = _v6.a;
9321 return _List_fromArray(
9322 [x, y, z]);
9323 } else {
9324 break _v0$5;
9325 }
9326 default:
9327 if (_v0.b.b.b.b && _v0.b.b.b.b.b) {
9328 var _v7 = _v0.b;
9329 var x = _v7.a;
9330 var _v8 = _v7.b;
9331 var y = _v8.a;
9332 var _v9 = _v8.b;
9333 var z = _v9.a;
9334 var _v10 = _v9.b;
9335 var w = _v10.a;
9336 var tl = _v10.b;
9337 return (ctr > 1000) ? A2(
9338 $elm$core$List$cons,
9339 x,
9340 A2(
9341 $elm$core$List$cons,
9342 y,
9343 A2(
9344 $elm$core$List$cons,
9345 z,
9346 A2(
9347 $elm$core$List$cons,
9348 w,
9349 A2($elm$core$List$takeTailRec, n - 4, tl))))) : A2(
9350 $elm$core$List$cons,
9351 x,
9352 A2(
9353 $elm$core$List$cons,
9354 y,
9355 A2(
9356 $elm$core$List$cons,
9357 z,
9358 A2(
9359 $elm$core$List$cons,
9360 w,
9361 A3($elm$core$List$takeFast, ctr + 1, n - 4, tl)))));
9362 } else {
9363 break _v0$5;
9364 }
9365 }
9366 } else {
9367 if (_v0.a === 1) {
9368 break _v0$1;
9369 } else {
9370 break _v0$5;
9371 }
9372 }
9373 }
9374 }
9375 return list;
9376 }
9377 var _v1 = _v0.b;
9378 var x = _v1.a;
9379 return _List_fromArray(
9380 [x]);
9381 }
9382 });
9383var $elm$core$List$take = F2(
9384 function (n, list) {
9385 return A3($elm$core$List$takeFast, 0, n, list);
9386 });
9387var $rtfeldman$elm_css$Css$Preprocess$Resolve$toDocumentRule = F5(
9388 function (str1, str2, str3, str4, declaration) {
9389 if (declaration.$ === 'StyleBlockDeclaration') {
9390 var structureStyleBlock = declaration.a;
9391 return A5($rtfeldman$elm_css$Css$Structure$DocumentRule, str1, str2, str3, str4, structureStyleBlock);
9392 } else {
9393 return declaration;
9394 }
9395 });
9396var $rtfeldman$elm_css$Css$Preprocess$Resolve$toMediaRule = F2(
9397 function (mediaQueries, declaration) {
9398 switch (declaration.$) {
9399 case 'StyleBlockDeclaration':
9400 var structureStyleBlock = declaration.a;
9401 return A2(
9402 $rtfeldman$elm_css$Css$Structure$MediaRule,
9403 mediaQueries,
9404 _List_fromArray(
9405 [structureStyleBlock]));
9406 case 'MediaRule':
9407 var newMediaQueries = declaration.a;
9408 var structureStyleBlocks = declaration.b;
9409 return A2(
9410 $rtfeldman$elm_css$Css$Structure$MediaRule,
9411 _Utils_ap(mediaQueries, newMediaQueries),
9412 structureStyleBlocks);
9413 case 'SupportsRule':
9414 var str = declaration.a;
9415 var declarations = declaration.b;
9416 return A2(
9417 $rtfeldman$elm_css$Css$Structure$SupportsRule,
9418 str,
9419 A2(
9420 $elm$core$List$map,
9421 $rtfeldman$elm_css$Css$Preprocess$Resolve$toMediaRule(mediaQueries),
9422 declarations));
9423 case 'DocumentRule':
9424 var str1 = declaration.a;
9425 var str2 = declaration.b;
9426 var str3 = declaration.c;
9427 var str4 = declaration.d;
9428 var structureStyleBlock = declaration.e;
9429 return A5($rtfeldman$elm_css$Css$Structure$DocumentRule, str1, str2, str3, str4, structureStyleBlock);
9430 case 'PageRule':
9431 return declaration;
9432 case 'FontFace':
9433 return declaration;
9434 case 'Keyframes':
9435 return declaration;
9436 case 'Viewport':
9437 return declaration;
9438 case 'CounterStyle':
9439 return declaration;
9440 default:
9441 return declaration;
9442 }
9443 });
9444var $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet = function (_v0) {
9445 var declarations = _v0.a;
9446 return declarations;
9447};
9448var $rtfeldman$elm_css$Css$Preprocess$Resolve$applyNestedStylesToLast = F4(
9449 function (nestedStyles, rest, f, declarations) {
9450 var withoutParent = function (decls) {
9451 return A2(
9452 $elm$core$Maybe$withDefault,
9453 _List_Nil,
9454 $elm$core$List$tail(decls));
9455 };
9456 var nextResult = A2(
9457 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles,
9458 rest,
9459 A2(
9460 $elm$core$Maybe$withDefault,
9461 _List_Nil,
9462 $rtfeldman$elm_css$Css$Preprocess$Resolve$lastDeclaration(declarations)));
9463 var newDeclarations = function () {
9464 var _v14 = _Utils_Tuple2(
9465 $elm$core$List$head(nextResult),
9466 $rtfeldman$elm_css$Css$Preprocess$Resolve$last(declarations));
9467 if ((_v14.a.$ === 'Just') && (_v14.b.$ === 'Just')) {
9468 var nextResultParent = _v14.a.a;
9469 var originalParent = _v14.b.a;
9470 return _Utils_ap(
9471 A2(
9472 $elm$core$List$take,
9473 $elm$core$List$length(declarations) - 1,
9474 declarations),
9475 _List_fromArray(
9476 [
9477 (!_Utils_eq(originalParent, nextResultParent)) ? nextResultParent : originalParent
9478 ]));
9479 } else {
9480 return declarations;
9481 }
9482 }();
9483 var insertStylesToNestedDecl = function (lastDecl) {
9484 return $elm$core$List$concat(
9485 A2(
9486 $rtfeldman$elm_css$Css$Structure$mapLast,
9487 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles(nestedStyles),
9488 A2(
9489 $elm$core$List$map,
9490 $elm$core$List$singleton,
9491 A2($rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, f, lastDecl))));
9492 };
9493 var initialResult = A2(
9494 $elm$core$Maybe$withDefault,
9495 _List_Nil,
9496 A2(
9497 $elm$core$Maybe$map,
9498 insertStylesToNestedDecl,
9499 $rtfeldman$elm_css$Css$Preprocess$Resolve$lastDeclaration(declarations)));
9500 return _Utils_ap(
9501 newDeclarations,
9502 _Utils_ap(
9503 withoutParent(initialResult),
9504 withoutParent(nextResult)));
9505 });
9506var $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles = F2(
9507 function (styles, declarations) {
9508 if (!styles.b) {
9509 return declarations;
9510 } else {
9511 switch (styles.a.$) {
9512 case 'AppendProperty':
9513 var property = styles.a.a;
9514 var rest = styles.b;
9515 return A2(
9516 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles,
9517 rest,
9518 A2($rtfeldman$elm_css$Css$Structure$appendProperty, property, declarations));
9519 case 'ExtendSelector':
9520 var _v4 = styles.a;
9521 var selector = _v4.a;
9522 var nestedStyles = _v4.b;
9523 var rest = styles.b;
9524 return A4(
9525 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyNestedStylesToLast,
9526 nestedStyles,
9527 rest,
9528 $rtfeldman$elm_css$Css$Structure$appendRepeatableToLastSelector(selector),
9529 declarations);
9530 case 'NestSnippet':
9531 var _v5 = styles.a;
9532 var selectorCombinator = _v5.a;
9533 var snippets = _v5.b;
9534 var rest = styles.b;
9535 var chain = F2(
9536 function (_v9, _v10) {
9537 var originalSequence = _v9.a;
9538 var originalTuples = _v9.b;
9539 var originalPseudoElement = _v9.c;
9540 var newSequence = _v10.a;
9541 var newTuples = _v10.b;
9542 var newPseudoElement = _v10.c;
9543 return A3(
9544 $rtfeldman$elm_css$Css$Structure$Selector,
9545 originalSequence,
9546 _Utils_ap(
9547 originalTuples,
9548 A2(
9549 $elm$core$List$cons,
9550 _Utils_Tuple2(selectorCombinator, newSequence),
9551 newTuples)),
9552 $rtfeldman$elm_css$Css$Preprocess$Resolve$oneOf(
9553 _List_fromArray(
9554 [newPseudoElement, originalPseudoElement])));
9555 });
9556 var expandDeclaration = function (declaration) {
9557 switch (declaration.$) {
9558 case 'StyleBlockDeclaration':
9559 var _v7 = declaration.a;
9560 var firstSelector = _v7.a;
9561 var otherSelectors = _v7.b;
9562 var nestedStyles = _v7.c;
9563 var newSelectors = A2(
9564 $elm$core$List$concatMap,
9565 function (originalSelector) {
9566 return A2(
9567 $elm$core$List$map,
9568 chain(originalSelector),
9569 A2($elm$core$List$cons, firstSelector, otherSelectors));
9570 },
9571 $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors(declarations));
9572 var newDeclarations = function () {
9573 if (!newSelectors.b) {
9574 return _List_Nil;
9575 } else {
9576 var first = newSelectors.a;
9577 var remainder = newSelectors.b;
9578 return _List_fromArray(
9579 [
9580 $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration(
9581 A3($rtfeldman$elm_css$Css$Structure$StyleBlock, first, remainder, _List_Nil))
9582 ]);
9583 }
9584 }();
9585 return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, nestedStyles, newDeclarations);
9586 case 'MediaRule':
9587 var mediaQueries = declaration.a;
9588 var styleBlocks = declaration.b;
9589 return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveMediaRule, mediaQueries, styleBlocks);
9590 case 'SupportsRule':
9591 var str = declaration.a;
9592 var otherSnippets = declaration.b;
9593 return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveSupportsRule, str, otherSnippets);
9594 case 'DocumentRule':
9595 var str1 = declaration.a;
9596 var str2 = declaration.b;
9597 var str3 = declaration.c;
9598 var str4 = declaration.d;
9599 var styleBlock = declaration.e;
9600 return A2(
9601 $elm$core$List$map,
9602 A4($rtfeldman$elm_css$Css$Preprocess$Resolve$toDocumentRule, str1, str2, str3, str4),
9603 $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock));
9604 case 'PageRule':
9605 var str = declaration.a;
9606 var properties = declaration.b;
9607 return _List_fromArray(
9608 [
9609 A2($rtfeldman$elm_css$Css$Structure$PageRule, str, properties)
9610 ]);
9611 case 'FontFace':
9612 var properties = declaration.a;
9613 return _List_fromArray(
9614 [
9615 $rtfeldman$elm_css$Css$Structure$FontFace(properties)
9616 ]);
9617 case 'Viewport':
9618 var properties = declaration.a;
9619 return _List_fromArray(
9620 [
9621 $rtfeldman$elm_css$Css$Structure$Viewport(properties)
9622 ]);
9623 case 'CounterStyle':
9624 var properties = declaration.a;
9625 return _List_fromArray(
9626 [
9627 $rtfeldman$elm_css$Css$Structure$CounterStyle(properties)
9628 ]);
9629 default:
9630 var tuples = declaration.a;
9631 return $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveFontFeatureValues(tuples);
9632 }
9633 };
9634 return $elm$core$List$concat(
9635 _Utils_ap(
9636 _List_fromArray(
9637 [
9638 A2($rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, rest, declarations)
9639 ]),
9640 A2(
9641 $elm$core$List$map,
9642 expandDeclaration,
9643 A2($elm$core$List$concatMap, $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet, snippets))));
9644 case 'WithPseudoElement':
9645 var _v11 = styles.a;
9646 var pseudoElement = _v11.a;
9647 var nestedStyles = _v11.b;
9648 var rest = styles.b;
9649 return A4(
9650 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyNestedStylesToLast,
9651 nestedStyles,
9652 rest,
9653 $rtfeldman$elm_css$Css$Structure$appendPseudoElementToLastSelector(pseudoElement),
9654 declarations);
9655 case 'WithKeyframes':
9656 var str = styles.a.a;
9657 var rest = styles.b;
9658 var name = $rtfeldman$elm_css$Hash$fromString(str);
9659 var newProperty = 'animation-name:' + name;
9660 var newDeclarations = A2(
9661 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles,
9662 rest,
9663 A2($rtfeldman$elm_css$Css$Structure$appendProperty, newProperty, declarations));
9664 return A2(
9665 $elm$core$List$append,
9666 newDeclarations,
9667 _List_fromArray(
9668 [
9669 $rtfeldman$elm_css$Css$Structure$Keyframes(
9670 {declaration: str, name: name})
9671 ]));
9672 case 'WithMedia':
9673 var _v12 = styles.a;
9674 var mediaQueries = _v12.a;
9675 var nestedStyles = _v12.b;
9676 var rest = styles.b;
9677 var extraDeclarations = function () {
9678 var _v13 = $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors(declarations);
9679 if (!_v13.b) {
9680 return _List_Nil;
9681 } else {
9682 var firstSelector = _v13.a;
9683 var otherSelectors = _v13.b;
9684 return A2(
9685 $elm$core$List$map,
9686 $rtfeldman$elm_css$Css$Structure$styleBlockToMediaRule(mediaQueries),
9687 A2(
9688 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles,
9689 nestedStyles,
9690 $elm$core$List$singleton(
9691 $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration(
9692 A3($rtfeldman$elm_css$Css$Structure$StyleBlock, firstSelector, otherSelectors, _List_Nil)))));
9693 }
9694 }();
9695 return _Utils_ap(
9696 A2($rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, rest, declarations),
9697 extraDeclarations);
9698 default:
9699 var otherStyles = styles.a.a;
9700 var rest = styles.b;
9701 return A2(
9702 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles,
9703 _Utils_ap(otherStyles, rest),
9704 declarations);
9705 }
9706 }
9707 });
9708var $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock = function (_v2) {
9709 var firstSelector = _v2.a;
9710 var otherSelectors = _v2.b;
9711 var styles = _v2.c;
9712 return A2(
9713 $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles,
9714 styles,
9715 _List_fromArray(
9716 [
9717 $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration(
9718 A3($rtfeldman$elm_css$Css$Structure$StyleBlock, firstSelector, otherSelectors, _List_Nil))
9719 ]));
9720};
9721var $rtfeldman$elm_css$Css$Preprocess$Resolve$extract = function (snippetDeclarations) {
9722 if (!snippetDeclarations.b) {
9723 return _List_Nil;
9724 } else {
9725 var first = snippetDeclarations.a;
9726 var rest = snippetDeclarations.b;
9727 return _Utils_ap(
9728 $rtfeldman$elm_css$Css$Preprocess$Resolve$toDeclarations(first),
9729 $rtfeldman$elm_css$Css$Preprocess$Resolve$extract(rest));
9730 }
9731};
9732var $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveMediaRule = F2(
9733 function (mediaQueries, styleBlocks) {
9734 var handleStyleBlock = function (styleBlock) {
9735 return A2(
9736 $elm$core$List$map,
9737 $rtfeldman$elm_css$Css$Preprocess$Resolve$toMediaRule(mediaQueries),
9738 $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock));
9739 };
9740 return A2($elm$core$List$concatMap, handleStyleBlock, styleBlocks);
9741 });
9742var $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveSupportsRule = F2(
9743 function (str, snippets) {
9744 var declarations = $rtfeldman$elm_css$Css$Preprocess$Resolve$extract(
9745 A2($elm$core$List$concatMap, $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet, snippets));
9746 return _List_fromArray(
9747 [
9748 A2($rtfeldman$elm_css$Css$Structure$SupportsRule, str, declarations)
9749 ]);
9750 });
9751var $rtfeldman$elm_css$Css$Preprocess$Resolve$toDeclarations = function (snippetDeclaration) {
9752 switch (snippetDeclaration.$) {
9753 case 'StyleBlockDeclaration':
9754 var styleBlock = snippetDeclaration.a;
9755 return $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock);
9756 case 'MediaRule':
9757 var mediaQueries = snippetDeclaration.a;
9758 var styleBlocks = snippetDeclaration.b;
9759 return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveMediaRule, mediaQueries, styleBlocks);
9760 case 'SupportsRule':
9761 var str = snippetDeclaration.a;
9762 var snippets = snippetDeclaration.b;
9763 return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveSupportsRule, str, snippets);
9764 case 'DocumentRule':
9765 var str1 = snippetDeclaration.a;
9766 var str2 = snippetDeclaration.b;
9767 var str3 = snippetDeclaration.c;
9768 var str4 = snippetDeclaration.d;
9769 var styleBlock = snippetDeclaration.e;
9770 return A2(
9771 $elm$core$List$map,
9772 A4($rtfeldman$elm_css$Css$Preprocess$Resolve$toDocumentRule, str1, str2, str3, str4),
9773 $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock));
9774 case 'PageRule':
9775 var str = snippetDeclaration.a;
9776 var properties = snippetDeclaration.b;
9777 return _List_fromArray(
9778 [
9779 A2($rtfeldman$elm_css$Css$Structure$PageRule, str, properties)
9780 ]);
9781 case 'FontFace':
9782 var properties = snippetDeclaration.a;
9783 return _List_fromArray(
9784 [
9785 $rtfeldman$elm_css$Css$Structure$FontFace(properties)
9786 ]);
9787 case 'Viewport':
9788 var properties = snippetDeclaration.a;
9789 return _List_fromArray(
9790 [
9791 $rtfeldman$elm_css$Css$Structure$Viewport(properties)
9792 ]);
9793 case 'CounterStyle':
9794 var properties = snippetDeclaration.a;
9795 return _List_fromArray(
9796 [
9797 $rtfeldman$elm_css$Css$Structure$CounterStyle(properties)
9798 ]);
9799 default:
9800 var tuples = snippetDeclaration.a;
9801 return $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveFontFeatureValues(tuples);
9802 }
9803};
9804var $rtfeldman$elm_css$Css$Preprocess$Resolve$toStructure = function (_v0) {
9805 var charset = _v0.charset;
9806 var imports = _v0.imports;
9807 var namespaces = _v0.namespaces;
9808 var snippets = _v0.snippets;
9809 var declarations = $rtfeldman$elm_css$Css$Preprocess$Resolve$extract(
9810 A2($elm$core$List$concatMap, $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet, snippets));
9811 return {charset: charset, declarations: declarations, imports: imports, namespaces: namespaces};
9812};
9813var $rtfeldman$elm_css$Css$Preprocess$Resolve$compileHelp = function (sheet) {
9814 return $rtfeldman$elm_css$Css$Structure$Output$prettyPrint(
9815 $rtfeldman$elm_css$Css$Structure$compactStylesheet(
9816 $rtfeldman$elm_css$Css$Preprocess$Resolve$toStructure(sheet)));
9817};
9818var $rtfeldman$elm_css$Css$Preprocess$Resolve$compile = function (styles) {
9819 return A2(
9820 $elm$core$String$join,
9821 '\n\n',
9822 A2($elm$core$List$map, $rtfeldman$elm_css$Css$Preprocess$Resolve$compileHelp, styles));
9823};
9824var $rtfeldman$elm_css$Css$Structure$ClassSelector = function (a) {
9825 return {$: 'ClassSelector', a: a};
9826};
9827var $rtfeldman$elm_css$Css$Preprocess$Snippet = function (a) {
9828 return {$: 'Snippet', a: a};
9829};
9830var $rtfeldman$elm_css$Css$Preprocess$StyleBlock = F3(
9831 function (a, b, c) {
9832 return {$: 'StyleBlock', a: a, b: b, c: c};
9833 });
9834var $rtfeldman$elm_css$Css$Preprocess$StyleBlockDeclaration = function (a) {
9835 return {$: 'StyleBlockDeclaration', a: a};
9836};
9837var $rtfeldman$elm_css$VirtualDom$Styled$makeSnippet = F2(
9838 function (styles, sequence) {
9839 var selector = A3($rtfeldman$elm_css$Css$Structure$Selector, sequence, _List_Nil, $elm$core$Maybe$Nothing);
9840 return $rtfeldman$elm_css$Css$Preprocess$Snippet(
9841 _List_fromArray(
9842 [
9843 $rtfeldman$elm_css$Css$Preprocess$StyleBlockDeclaration(
9844 A3($rtfeldman$elm_css$Css$Preprocess$StyleBlock, selector, _List_Nil, styles))
9845 ]));
9846 });
9847var $rtfeldman$elm_css$VirtualDom$Styled$snippetFromPair = function (_v0) {
9848 var classname = _v0.a;
9849 var styles = _v0.b;
9850 return A2(
9851 $rtfeldman$elm_css$VirtualDom$Styled$makeSnippet,
9852 styles,
9853 $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence(
9854 _List_fromArray(
9855 [
9856 $rtfeldman$elm_css$Css$Structure$ClassSelector(classname)
9857 ])));
9858};
9859var $rtfeldman$elm_css$Css$Preprocess$stylesheet = function (snippets) {
9860 return {charset: $elm$core$Maybe$Nothing, imports: _List_Nil, namespaces: _List_Nil, snippets: snippets};
9861};
9862var $rtfeldman$elm_css$VirtualDom$Styled$toDeclaration = function (dict) {
9863 return $rtfeldman$elm_css$Css$Preprocess$Resolve$compile(
9864 $elm$core$List$singleton(
9865 $rtfeldman$elm_css$Css$Preprocess$stylesheet(
9866 A2(
9867 $elm$core$List$map,
9868 $rtfeldman$elm_css$VirtualDom$Styled$snippetFromPair,
9869 $elm$core$Dict$toList(dict)))));
9870};
9871var $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode = function (styles) {
9872 return A3(
9873 $elm$virtual_dom$VirtualDom$node,
9874 'style',
9875 _List_Nil,
9876 $elm$core$List$singleton(
9877 $elm$virtual_dom$VirtualDom$text(
9878 $rtfeldman$elm_css$VirtualDom$Styled$toDeclaration(styles))));
9879};
9880var $rtfeldman$elm_css$VirtualDom$Styled$unstyle = F3(
9881 function (elemType, properties, children) {
9882 var unstyledProperties = A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties);
9883 var initialStyles = $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties(properties);
9884 var _v0 = A3(
9885 $elm$core$List$foldl,
9886 $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml,
9887 _Utils_Tuple2(_List_Nil, initialStyles),
9888 children);
9889 var childNodes = _v0.a;
9890 var styles = _v0.b;
9891 var styleNode = $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode(styles);
9892 return A3(
9893 $elm$virtual_dom$VirtualDom$node,
9894 elemType,
9895 unstyledProperties,
9896 A2(
9897 $elm$core$List$cons,
9898 styleNode,
9899 $elm$core$List$reverse(childNodes)));
9900 });
9901var $rtfeldman$elm_css$VirtualDom$Styled$containsKey = F2(
9902 function (key, pairs) {
9903 containsKey:
9904 while (true) {
9905 if (!pairs.b) {
9906 return false;
9907 } else {
9908 var _v1 = pairs.a;
9909 var str = _v1.a;
9910 var rest = pairs.b;
9911 if (_Utils_eq(key, str)) {
9912 return true;
9913 } else {
9914 var $temp$key = key,
9915 $temp$pairs = rest;
9916 key = $temp$key;
9917 pairs = $temp$pairs;
9918 continue containsKey;
9919 }
9920 }
9921 }
9922 });
9923var $rtfeldman$elm_css$VirtualDom$Styled$getUnusedKey = F2(
9924 function (_default, pairs) {
9925 getUnusedKey:
9926 while (true) {
9927 if (!pairs.b) {
9928 return _default;
9929 } else {
9930 var _v1 = pairs.a;
9931 var firstKey = _v1.a;
9932 var rest = pairs.b;
9933 var newKey = '_' + firstKey;
9934 if (A2($rtfeldman$elm_css$VirtualDom$Styled$containsKey, newKey, rest)) {
9935 var $temp$default = newKey,
9936 $temp$pairs = rest;
9937 _default = $temp$default;
9938 pairs = $temp$pairs;
9939 continue getUnusedKey;
9940 } else {
9941 return newKey;
9942 }
9943 }
9944 }
9945 });
9946var $rtfeldman$elm_css$VirtualDom$Styled$toKeyedStyleNode = F2(
9947 function (allStyles, keyedChildNodes) {
9948 var styleNodeKey = A2($rtfeldman$elm_css$VirtualDom$Styled$getUnusedKey, '_', keyedChildNodes);
9949 var finalNode = $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode(allStyles);
9950 return _Utils_Tuple2(styleNodeKey, finalNode);
9951 });
9952var $rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyed = F3(
9953 function (elemType, properties, keyedChildren) {
9954 var unstyledProperties = A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties);
9955 var initialStyles = $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties(properties);
9956 var _v0 = A3(
9957 $elm$core$List$foldl,
9958 $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml,
9959 _Utils_Tuple2(_List_Nil, initialStyles),
9960 keyedChildren);
9961 var keyedChildNodes = _v0.a;
9962 var styles = _v0.b;
9963 var keyedStyleNode = A2($rtfeldman$elm_css$VirtualDom$Styled$toKeyedStyleNode, styles, keyedChildNodes);
9964 return A3(
9965 $elm$virtual_dom$VirtualDom$keyedNode,
9966 elemType,
9967 unstyledProperties,
9968 A2(
9969 $elm$core$List$cons,
9970 keyedStyleNode,
9971 $elm$core$List$reverse(keyedChildNodes)));
9972 });
9973var $rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyedNS = F4(
9974 function (ns, elemType, properties, keyedChildren) {
9975 var unstyledProperties = A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties);
9976 var initialStyles = $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties(properties);
9977 var _v0 = A3(
9978 $elm$core$List$foldl,
9979 $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml,
9980 _Utils_Tuple2(_List_Nil, initialStyles),
9981 keyedChildren);
9982 var keyedChildNodes = _v0.a;
9983 var styles = _v0.b;
9984 var keyedStyleNode = A2($rtfeldman$elm_css$VirtualDom$Styled$toKeyedStyleNode, styles, keyedChildNodes);
9985 return A4(
9986 $elm$virtual_dom$VirtualDom$keyedNodeNS,
9987 ns,
9988 elemType,
9989 unstyledProperties,
9990 A2(
9991 $elm$core$List$cons,
9992 keyedStyleNode,
9993 $elm$core$List$reverse(keyedChildNodes)));
9994 });
9995var $rtfeldman$elm_css$VirtualDom$Styled$unstyleNS = F4(
9996 function (ns, elemType, properties, children) {
9997 var unstyledProperties = A2($elm$core$List$map, $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute, properties);
9998 var initialStyles = $rtfeldman$elm_css$VirtualDom$Styled$stylesFromProperties(properties);
9999 var _v0 = A3(
10000 $elm$core$List$foldl,
10001 $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml,
10002 _Utils_Tuple2(_List_Nil, initialStyles),
10003 children);
10004 var childNodes = _v0.a;
10005 var styles = _v0.b;
10006 var styleNode = $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode(styles);
10007 return A4(
10008 $elm$virtual_dom$VirtualDom$nodeNS,
10009 ns,
10010 elemType,
10011 unstyledProperties,
10012 A2(
10013 $elm$core$List$cons,
10014 styleNode,
10015 $elm$core$List$reverse(childNodes)));
10016 });
10017var $rtfeldman$elm_css$VirtualDom$Styled$toUnstyled = function (vdom) {
10018 switch (vdom.$) {
10019 case 'Unstyled':
10020 var plainNode = vdom.a;
10021 return plainNode;
10022 case 'Node':
10023 var elemType = vdom.a;
10024 var properties = vdom.b;
10025 var children = vdom.c;
10026 return A3($rtfeldman$elm_css$VirtualDom$Styled$unstyle, elemType, properties, children);
10027 case 'NodeNS':
10028 var ns = vdom.a;
10029 var elemType = vdom.b;
10030 var properties = vdom.c;
10031 var children = vdom.d;
10032 return A4($rtfeldman$elm_css$VirtualDom$Styled$unstyleNS, ns, elemType, properties, children);
10033 case 'KeyedNode':
10034 var elemType = vdom.a;
10035 var properties = vdom.b;
10036 var children = vdom.c;
10037 return A3($rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyed, elemType, properties, children);
10038 default:
10039 var ns = vdom.a;
10040 var elemType = vdom.b;
10041 var properties = vdom.c;
10042 var children = vdom.d;
10043 return A4($rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyedNS, ns, elemType, properties, children);
10044 }
10045};
10046var $rtfeldman$elm_css$Html$Styled$toUnstyled = $rtfeldman$elm_css$VirtualDom$Styled$toUnstyled;
10047var $author$project$Main$LogoutPressed = {$: 'LogoutPressed'};
10048var $rtfeldman$elm_css$Css$Preprocess$AppendProperty = function (a) {
10049 return {$: 'AppendProperty', a: a};
10050};
10051var $rtfeldman$elm_css$Css$property = F2(
10052 function (key, value) {
10053 return $rtfeldman$elm_css$Css$Preprocess$AppendProperty(key + (':' + value));
10054 });
10055var $rtfeldman$elm_css$Css$backgroundColor = function (c) {
10056 return A2($rtfeldman$elm_css$Css$property, 'background-color', c.value);
10057};
10058var $rtfeldman$elm_css$VirtualDom$Styled$murmurSeed = 15739;
10059var $rtfeldman$elm_css$VirtualDom$Styled$getClassname = function (styles) {
10060 return $elm$core$List$isEmpty(styles) ? 'unstyled' : A2(
10061 $elm$core$String$cons,
10062 _Utils_chr('_'),
10063 $rtfeldman$elm_hex$Hex$toString(
10064 A2(
10065 $rtfeldman$elm_css$ElmCssVendor$Murmur3$hashString,
10066 $rtfeldman$elm_css$VirtualDom$Styled$murmurSeed,
10067 $rtfeldman$elm_css$Css$Preprocess$Resolve$compile(
10068 $elm$core$List$singleton(
10069 $rtfeldman$elm_css$Css$Preprocess$stylesheet(
10070 $elm$core$List$singleton(
10071 A2(
10072 $rtfeldman$elm_css$VirtualDom$Styled$makeSnippet,
10073 styles,
10074 $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence(_List_Nil)))))))));
10075};
10076var $rtfeldman$elm_css$Html$Styled$Internal$css = function (styles) {
10077 var classname = $rtfeldman$elm_css$VirtualDom$Styled$getClassname(styles);
10078 var classProperty = A2(
10079 $elm$virtual_dom$VirtualDom$property,
10080 'className',
10081 $elm$json$Json$Encode$string(classname));
10082 return A3($rtfeldman$elm_css$VirtualDom$Styled$Attribute, classProperty, styles, classname);
10083};
10084var $rtfeldman$elm_css$Html$Styled$Attributes$css = $rtfeldman$elm_css$Html$Styled$Internal$css;
10085var $rtfeldman$elm_css$Css$prop1 = F2(
10086 function (key, arg) {
10087 return A2($rtfeldman$elm_css$Css$property, key, arg.value);
10088 });
10089var $rtfeldman$elm_css$Css$display = $rtfeldman$elm_css$Css$prop1('display');
10090var $rtfeldman$elm_css$Css$border = $rtfeldman$elm_css$Css$prop1('border');
10091var $rtfeldman$elm_css$Css$borderRadius = $rtfeldman$elm_css$Css$prop1('border-radius');
10092var $rtfeldman$elm_css$Html$Styled$button = $rtfeldman$elm_css$Html$Styled$node('button');
10093var $rtfeldman$elm_css$Css$color = function (c) {
10094 return A2($rtfeldman$elm_css$Css$property, 'color', c.value);
10095};
10096var $rtfeldman$elm_css$Css$height = $rtfeldman$elm_css$Css$prop1('height');
10097var $rtfeldman$elm_css$Css$Preprocess$ExtendSelector = F2(
10098 function (a, b) {
10099 return {$: 'ExtendSelector', a: a, b: b};
10100 });
10101var $rtfeldman$elm_css$Css$Structure$PseudoClassSelector = function (a) {
10102 return {$: 'PseudoClassSelector', a: a};
10103};
10104var $rtfeldman$elm_css$Css$pseudoClass = function (_class) {
10105 return $rtfeldman$elm_css$Css$Preprocess$ExtendSelector(
10106 $rtfeldman$elm_css$Css$Structure$PseudoClassSelector(_class));
10107};
10108var $rtfeldman$elm_css$Css$hover = $rtfeldman$elm_css$Css$pseudoClass('hover');
10109var $rtfeldman$elm_css$Css$margin = $rtfeldman$elm_css$Css$prop1('margin');
10110var $rtfeldman$elm_css$Css$prop2 = F3(
10111 function (key, argA, argB) {
10112 return A2(
10113 $rtfeldman$elm_css$Css$property,
10114 key,
10115 A2(
10116 $elm$core$String$join,
10117 ' ',
10118 _List_fromArray(
10119 [argA.value, argB.value])));
10120 });
10121var $rtfeldman$elm_css$Css$padding2 = $rtfeldman$elm_css$Css$prop2('padding');
10122var $rtfeldman$elm_css$Css$PxUnits = {$: 'PxUnits'};
10123var $rtfeldman$elm_css$Css$Structure$Compatible = {$: 'Compatible'};
10124var $elm$core$String$fromFloat = _String_fromNumber;
10125var $rtfeldman$elm_css$Css$Internal$lengthConverter = F3(
10126 function (units, unitLabel, numericValue) {
10127 return {
10128 absoluteLength: $rtfeldman$elm_css$Css$Structure$Compatible,
10129 calc: $rtfeldman$elm_css$Css$Structure$Compatible,
10130 flexBasis: $rtfeldman$elm_css$Css$Structure$Compatible,
10131 fontSize: $rtfeldman$elm_css$Css$Structure$Compatible,
10132 length: $rtfeldman$elm_css$Css$Structure$Compatible,
10133 lengthOrAuto: $rtfeldman$elm_css$Css$Structure$Compatible,
10134 lengthOrAutoOrCoverOrContain: $rtfeldman$elm_css$Css$Structure$Compatible,
10135 lengthOrMinMaxDimension: $rtfeldman$elm_css$Css$Structure$Compatible,
10136 lengthOrNone: $rtfeldman$elm_css$Css$Structure$Compatible,
10137 lengthOrNoneOrMinMaxDimension: $rtfeldman$elm_css$Css$Structure$Compatible,
10138 lengthOrNumber: $rtfeldman$elm_css$Css$Structure$Compatible,
10139 lengthOrNumberOrAutoOrNoneOrContent: $rtfeldman$elm_css$Css$Structure$Compatible,
10140 numericValue: numericValue,
10141 textIndent: $rtfeldman$elm_css$Css$Structure$Compatible,
10142 unitLabel: unitLabel,
10143 units: units,
10144 value: _Utils_ap(
10145 $elm$core$String$fromFloat(numericValue),
10146 unitLabel)
10147 };
10148 });
10149var $rtfeldman$elm_css$Css$px = A2($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$PxUnits, 'px');
10150var $rtfeldman$elm_css$Html$Styled$styled = F4(
10151 function (fn, styles, attrs, children) {
10152 return A2(
10153 fn,
10154 A2(
10155 $elm$core$List$cons,
10156 $rtfeldman$elm_css$Html$Styled$Internal$css(styles),
10157 attrs),
10158 children);
10159 });
10160var $author$project$Styles$Theme = F7(
10161 function (primary, secondary, bad, fg, bg, fgLight, bgLight) {
10162 return {bad: bad, bg: bg, bgLight: bgLight, fg: fg, fgLight: fgLight, primary: primary, secondary: secondary};
10163 });
10164var $rtfeldman$elm_css$Css$withPrecedingHash = function (str) {
10165 return A2($elm$core$String$startsWith, '#', str) ? str : A2(
10166 $elm$core$String$cons,
10167 _Utils_chr('#'),
10168 str);
10169};
10170var $rtfeldman$elm_css$Css$erroneousHex = function (str) {
10171 return {
10172 alpha: 1,
10173 blue: 0,
10174 color: $rtfeldman$elm_css$Css$Structure$Compatible,
10175 green: 0,
10176 red: 0,
10177 value: $rtfeldman$elm_css$Css$withPrecedingHash(str)
10178 };
10179};
10180var $elm$core$String$fromChar = function (_char) {
10181 return A2($elm$core$String$cons, _char, '');
10182};
10183var $elm$core$Basics$pow = _Basics_pow;
10184var $rtfeldman$elm_hex$Hex$fromStringHelp = F3(
10185 function (position, chars, accumulated) {
10186 fromStringHelp:
10187 while (true) {
10188 if (!chars.b) {
10189 return $elm$core$Result$Ok(accumulated);
10190 } else {
10191 var _char = chars.a;
10192 var rest = chars.b;
10193 switch (_char.valueOf()) {
10194 case '0':
10195 var $temp$position = position - 1,
10196 $temp$chars = rest,
10197 $temp$accumulated = accumulated;
10198 position = $temp$position;
10199 chars = $temp$chars;
10200 accumulated = $temp$accumulated;
10201 continue fromStringHelp;
10202 case '1':
10203 var $temp$position = position - 1,
10204 $temp$chars = rest,
10205 $temp$accumulated = accumulated + A2($elm$core$Basics$pow, 16, position);
10206 position = $temp$position;
10207 chars = $temp$chars;
10208 accumulated = $temp$accumulated;
10209 continue fromStringHelp;
10210 case '2':
10211 var $temp$position = position - 1,
10212 $temp$chars = rest,
10213 $temp$accumulated = accumulated + (2 * A2($elm$core$Basics$pow, 16, position));
10214 position = $temp$position;
10215 chars = $temp$chars;
10216 accumulated = $temp$accumulated;
10217 continue fromStringHelp;
10218 case '3':
10219 var $temp$position = position - 1,
10220 $temp$chars = rest,
10221 $temp$accumulated = accumulated + (3 * A2($elm$core$Basics$pow, 16, position));
10222 position = $temp$position;
10223 chars = $temp$chars;
10224 accumulated = $temp$accumulated;
10225 continue fromStringHelp;
10226 case '4':
10227 var $temp$position = position - 1,
10228 $temp$chars = rest,
10229 $temp$accumulated = accumulated + (4 * A2($elm$core$Basics$pow, 16, position));
10230 position = $temp$position;
10231 chars = $temp$chars;
10232 accumulated = $temp$accumulated;
10233 continue fromStringHelp;
10234 case '5':
10235 var $temp$position = position - 1,
10236 $temp$chars = rest,
10237 $temp$accumulated = accumulated + (5 * A2($elm$core$Basics$pow, 16, position));
10238 position = $temp$position;
10239 chars = $temp$chars;
10240 accumulated = $temp$accumulated;
10241 continue fromStringHelp;
10242 case '6':
10243 var $temp$position = position - 1,
10244 $temp$chars = rest,
10245 $temp$accumulated = accumulated + (6 * A2($elm$core$Basics$pow, 16, position));
10246 position = $temp$position;
10247 chars = $temp$chars;
10248 accumulated = $temp$accumulated;
10249 continue fromStringHelp;
10250 case '7':
10251 var $temp$position = position - 1,
10252 $temp$chars = rest,
10253 $temp$accumulated = accumulated + (7 * A2($elm$core$Basics$pow, 16, position));
10254 position = $temp$position;
10255 chars = $temp$chars;
10256 accumulated = $temp$accumulated;
10257 continue fromStringHelp;
10258 case '8':
10259 var $temp$position = position - 1,
10260 $temp$chars = rest,
10261 $temp$accumulated = accumulated + (8 * A2($elm$core$Basics$pow, 16, position));
10262 position = $temp$position;
10263 chars = $temp$chars;
10264 accumulated = $temp$accumulated;
10265 continue fromStringHelp;
10266 case '9':
10267 var $temp$position = position - 1,
10268 $temp$chars = rest,
10269 $temp$accumulated = accumulated + (9 * A2($elm$core$Basics$pow, 16, position));
10270 position = $temp$position;
10271 chars = $temp$chars;
10272 accumulated = $temp$accumulated;
10273 continue fromStringHelp;
10274 case 'a':
10275 var $temp$position = position - 1,
10276 $temp$chars = rest,
10277 $temp$accumulated = accumulated + (10 * A2($elm$core$Basics$pow, 16, position));
10278 position = $temp$position;
10279 chars = $temp$chars;
10280 accumulated = $temp$accumulated;
10281 continue fromStringHelp;
10282 case 'b':
10283 var $temp$position = position - 1,
10284 $temp$chars = rest,
10285 $temp$accumulated = accumulated + (11 * A2($elm$core$Basics$pow, 16, position));
10286 position = $temp$position;
10287 chars = $temp$chars;
10288 accumulated = $temp$accumulated;
10289 continue fromStringHelp;
10290 case 'c':
10291 var $temp$position = position - 1,
10292 $temp$chars = rest,
10293 $temp$accumulated = accumulated + (12 * A2($elm$core$Basics$pow, 16, position));
10294 position = $temp$position;
10295 chars = $temp$chars;
10296 accumulated = $temp$accumulated;
10297 continue fromStringHelp;
10298 case 'd':
10299 var $temp$position = position - 1,
10300 $temp$chars = rest,
10301 $temp$accumulated = accumulated + (13 * A2($elm$core$Basics$pow, 16, position));
10302 position = $temp$position;
10303 chars = $temp$chars;
10304 accumulated = $temp$accumulated;
10305 continue fromStringHelp;
10306 case 'e':
10307 var $temp$position = position - 1,
10308 $temp$chars = rest,
10309 $temp$accumulated = accumulated + (14 * A2($elm$core$Basics$pow, 16, position));
10310 position = $temp$position;
10311 chars = $temp$chars;
10312 accumulated = $temp$accumulated;
10313 continue fromStringHelp;
10314 case 'f':
10315 var $temp$position = position - 1,
10316 $temp$chars = rest,
10317 $temp$accumulated = accumulated + (15 * A2($elm$core$Basics$pow, 16, position));
10318 position = $temp$position;
10319 chars = $temp$chars;
10320 accumulated = $temp$accumulated;
10321 continue fromStringHelp;
10322 default:
10323 var nonHex = _char;
10324 return $elm$core$Result$Err(
10325 $elm$core$String$fromChar(nonHex) + ' is not a valid hexadecimal character.');
10326 }
10327 }
10328 }
10329 });
10330var $elm$core$Result$map = F2(
10331 function (func, ra) {
10332 if (ra.$ === 'Ok') {
10333 var a = ra.a;
10334 return $elm$core$Result$Ok(
10335 func(a));
10336 } else {
10337 var e = ra.a;
10338 return $elm$core$Result$Err(e);
10339 }
10340 });
10341var $rtfeldman$elm_hex$Hex$fromString = function (str) {
10342 if ($elm$core$String$isEmpty(str)) {
10343 return $elm$core$Result$Err('Empty strings are not valid hexadecimal strings.');
10344 } else {
10345 var result = function () {
10346 if (A2($elm$core$String$startsWith, '-', str)) {
10347 var list = A2(
10348 $elm$core$Maybe$withDefault,
10349 _List_Nil,
10350 $elm$core$List$tail(
10351 $elm$core$String$toList(str)));
10352 return A2(
10353 $elm$core$Result$map,
10354 $elm$core$Basics$negate,
10355 A3(
10356 $rtfeldman$elm_hex$Hex$fromStringHelp,
10357 $elm$core$List$length(list) - 1,
10358 list,
10359 0));
10360 } else {
10361 return A3(
10362 $rtfeldman$elm_hex$Hex$fromStringHelp,
10363 $elm$core$String$length(str) - 1,
10364 $elm$core$String$toList(str),
10365 0);
10366 }
10367 }();
10368 var formatError = function (err) {
10369 return A2(
10370 $elm$core$String$join,
10371 ' ',
10372 _List_fromArray(
10373 ['\"' + (str + '\"'), 'is not a valid hexadecimal string because', err]));
10374 };
10375 return A2($elm$core$Result$mapError, formatError, result);
10376 }
10377};
10378var $elm$core$String$toLower = _String_toLower;
10379var $rtfeldman$elm_css$Css$validHex = F5(
10380 function (str, _v0, _v1, _v2, _v3) {
10381 var r1 = _v0.a;
10382 var r2 = _v0.b;
10383 var g1 = _v1.a;
10384 var g2 = _v1.b;
10385 var b1 = _v2.a;
10386 var b2 = _v2.b;
10387 var a1 = _v3.a;
10388 var a2 = _v3.b;
10389 var toResult = A2(
10390 $elm$core$Basics$composeR,
10391 $elm$core$String$fromList,
10392 A2($elm$core$Basics$composeR, $elm$core$String$toLower, $rtfeldman$elm_hex$Hex$fromString));
10393 var results = _Utils_Tuple2(
10394 _Utils_Tuple2(
10395 toResult(
10396 _List_fromArray(
10397 [r1, r2])),
10398 toResult(
10399 _List_fromArray(
10400 [g1, g2]))),
10401 _Utils_Tuple2(
10402 toResult(
10403 _List_fromArray(
10404 [b1, b2])),
10405 toResult(
10406 _List_fromArray(
10407 [a1, a2]))));
10408 if ((((results.a.a.$ === 'Ok') && (results.a.b.$ === 'Ok')) && (results.b.a.$ === 'Ok')) && (results.b.b.$ === 'Ok')) {
10409 var _v5 = results.a;
10410 var red = _v5.a.a;
10411 var green = _v5.b.a;
10412 var _v6 = results.b;
10413 var blue = _v6.a.a;
10414 var alpha = _v6.b.a;
10415 return {
10416 alpha: alpha / 255,
10417 blue: blue,
10418 color: $rtfeldman$elm_css$Css$Structure$Compatible,
10419 green: green,
10420 red: red,
10421 value: $rtfeldman$elm_css$Css$withPrecedingHash(str)
10422 };
10423 } else {
10424 return $rtfeldman$elm_css$Css$erroneousHex(str);
10425 }
10426 });
10427var $rtfeldman$elm_css$Css$hex = function (str) {
10428 var withoutHash = A2($elm$core$String$startsWith, '#', str) ? A2($elm$core$String$dropLeft, 1, str) : str;
10429 var _v0 = $elm$core$String$toList(withoutHash);
10430 _v0$4:
10431 while (true) {
10432 if ((_v0.b && _v0.b.b) && _v0.b.b.b) {
10433 if (!_v0.b.b.b.b) {
10434 var r = _v0.a;
10435 var _v1 = _v0.b;
10436 var g = _v1.a;
10437 var _v2 = _v1.b;
10438 var b = _v2.a;
10439 return A5(
10440 $rtfeldman$elm_css$Css$validHex,
10441 str,
10442 _Utils_Tuple2(r, r),
10443 _Utils_Tuple2(g, g),
10444 _Utils_Tuple2(b, b),
10445 _Utils_Tuple2(
10446 _Utils_chr('f'),
10447 _Utils_chr('f')));
10448 } else {
10449 if (!_v0.b.b.b.b.b) {
10450 var r = _v0.a;
10451 var _v3 = _v0.b;
10452 var g = _v3.a;
10453 var _v4 = _v3.b;
10454 var b = _v4.a;
10455 var _v5 = _v4.b;
10456 var a = _v5.a;
10457 return A5(
10458 $rtfeldman$elm_css$Css$validHex,
10459 str,
10460 _Utils_Tuple2(r, r),
10461 _Utils_Tuple2(g, g),
10462 _Utils_Tuple2(b, b),
10463 _Utils_Tuple2(a, a));
10464 } else {
10465 if (_v0.b.b.b.b.b.b) {
10466 if (!_v0.b.b.b.b.b.b.b) {
10467 var r1 = _v0.a;
10468 var _v6 = _v0.b;
10469 var r2 = _v6.a;
10470 var _v7 = _v6.b;
10471 var g1 = _v7.a;
10472 var _v8 = _v7.b;
10473 var g2 = _v8.a;
10474 var _v9 = _v8.b;
10475 var b1 = _v9.a;
10476 var _v10 = _v9.b;
10477 var b2 = _v10.a;
10478 return A5(
10479 $rtfeldman$elm_css$Css$validHex,
10480 str,
10481 _Utils_Tuple2(r1, r2),
10482 _Utils_Tuple2(g1, g2),
10483 _Utils_Tuple2(b1, b2),
10484 _Utils_Tuple2(
10485 _Utils_chr('f'),
10486 _Utils_chr('f')));
10487 } else {
10488 if (_v0.b.b.b.b.b.b.b.b && (!_v0.b.b.b.b.b.b.b.b.b)) {
10489 var r1 = _v0.a;
10490 var _v11 = _v0.b;
10491 var r2 = _v11.a;
10492 var _v12 = _v11.b;
10493 var g1 = _v12.a;
10494 var _v13 = _v12.b;
10495 var g2 = _v13.a;
10496 var _v14 = _v13.b;
10497 var b1 = _v14.a;
10498 var _v15 = _v14.b;
10499 var b2 = _v15.a;
10500 var _v16 = _v15.b;
10501 var a1 = _v16.a;
10502 var _v17 = _v16.b;
10503 var a2 = _v17.a;
10504 return A5(
10505 $rtfeldman$elm_css$Css$validHex,
10506 str,
10507 _Utils_Tuple2(r1, r2),
10508 _Utils_Tuple2(g1, g2),
10509 _Utils_Tuple2(b1, b2),
10510 _Utils_Tuple2(a1, a2));
10511 } else {
10512 break _v0$4;
10513 }
10514 }
10515 } else {
10516 break _v0$4;
10517 }
10518 }
10519 }
10520 } else {
10521 break _v0$4;
10522 }
10523 }
10524 return $rtfeldman$elm_css$Css$erroneousHex(str);
10525};
10526var $author$project$Styles$theme = A7(
10527 $author$project$Styles$Theme,
10528 $rtfeldman$elm_css$Css$hex('fedbd0'),
10529 $rtfeldman$elm_css$Css$hex('feeae6'),
10530 $rtfeldman$elm_css$Css$hex('ff0000'),
10531 $rtfeldman$elm_css$Css$hex('442c2e'),
10532 $rtfeldman$elm_css$Css$hex('ffffff'),
10533 $rtfeldman$elm_css$Css$hex('442c2e'),
10534 $rtfeldman$elm_css$Css$hex('feeae6'));
10535var $author$project$Styles$furbyButton = A2(
10536 $rtfeldman$elm_css$Html$Styled$styled,
10537 $rtfeldman$elm_css$Html$Styled$button,
10538 _List_fromArray(
10539 [
10540 $rtfeldman$elm_css$Css$margin(
10541 $rtfeldman$elm_css$Css$px(12)),
10542 $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fg),
10543 $rtfeldman$elm_css$Css$height(
10544 $rtfeldman$elm_css$Css$px(40)),
10545 $rtfeldman$elm_css$Css$border(
10546 $rtfeldman$elm_css$Css$px(0)),
10547 $rtfeldman$elm_css$Css$borderRadius(
10548 $rtfeldman$elm_css$Css$px(2)),
10549 A2(
10550 $rtfeldman$elm_css$Css$padding2,
10551 $rtfeldman$elm_css$Css$px(6),
10552 $rtfeldman$elm_css$Css$px(12)),
10553 $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.primary),
10554 $rtfeldman$elm_css$Css$hover(
10555 _List_fromArray(
10556 [
10557 $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.secondary),
10558 $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fg),
10559 $rtfeldman$elm_css$Css$margin(
10560 $rtfeldman$elm_css$Css$px(12))
10561 ]))
10562 ]));
10563var $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'};
10564var $rtfeldman$elm_css$Css$padding = $rtfeldman$elm_css$Css$prop1('padding');
10565var $rtfeldman$elm_css$Css$textDecoration = $rtfeldman$elm_css$Css$prop1('text-decoration');
10566var $rtfeldman$elm_css$Css$underline = {textDecorationLine: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'underline'};
10567var $author$project$Styles$headerLink = A2(
10568 $rtfeldman$elm_css$Html$Styled$styled,
10569 $rtfeldman$elm_css$Html$Styled$a,
10570 _List_fromArray(
10571 [
10572 $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fgLight),
10573 $rtfeldman$elm_css$Css$padding(
10574 $rtfeldman$elm_css$Css$px(12)),
10575 $rtfeldman$elm_css$Css$textDecoration($rtfeldman$elm_css$Css$none),
10576 $rtfeldman$elm_css$Css$hover(
10577 _List_fromArray(
10578 [
10579 $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.secondary),
10580 $rtfeldman$elm_css$Css$textDecoration($rtfeldman$elm_css$Css$underline)
10581 ]))
10582 ]));
10583var $rtfeldman$elm_css$Css$inline = {display: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'inline'};
10584var $rtfeldman$elm_css$Css$left = $rtfeldman$elm_css$Css$prop1('left');
10585var $rtfeldman$elm_css$Css$listStyle = $rtfeldman$elm_css$Css$prop1('list-style');
10586var $elm$virtual_dom$VirtualDom$Normal = function (a) {
10587 return {$: 'Normal', a: a};
10588};
10589var $elm$virtual_dom$VirtualDom$on = _VirtualDom_on;
10590var $rtfeldman$elm_css$VirtualDom$Styled$on = F2(
10591 function (eventName, handler) {
10592 return A3(
10593 $rtfeldman$elm_css$VirtualDom$Styled$Attribute,
10594 A2($elm$virtual_dom$VirtualDom$on, eventName, handler),
10595 _List_Nil,
10596 '');
10597 });
10598var $rtfeldman$elm_css$Html$Styled$Events$on = F2(
10599 function (event, decoder) {
10600 return A2(
10601 $rtfeldman$elm_css$VirtualDom$Styled$on,
10602 event,
10603 $elm$virtual_dom$VirtualDom$Normal(decoder));
10604 });
10605var $rtfeldman$elm_css$Html$Styled$Events$onClick = function (msg) {
10606 return A2(
10607 $rtfeldman$elm_css$Html$Styled$Events$on,
10608 'click',
10609 $elm$json$Json$Decode$succeed(msg));
10610};
10611var $rtfeldman$elm_css$Css$paddingBottom = $rtfeldman$elm_css$Css$prop1('padding-bottom');
10612var $rtfeldman$elm_css$Css$paddingTop = $rtfeldman$elm_css$Css$prop1('padding-top');
10613var $rtfeldman$elm_css$VirtualDom$Styled$text = function (str) {
10614 return $rtfeldman$elm_css$VirtualDom$Styled$Unstyled(
10615 $elm$virtual_dom$VirtualDom$text(str));
10616};
10617var $rtfeldman$elm_css$Html$Styled$text = $rtfeldman$elm_css$VirtualDom$Styled$text;
10618var $rtfeldman$elm_css$Css$Preprocess$ApplyStyles = function (a) {
10619 return {$: 'ApplyStyles', a: a};
10620};
10621var $rtfeldman$elm_css$Css$Internal$property = F2(
10622 function (key, value) {
10623 return $rtfeldman$elm_css$Css$Preprocess$AppendProperty(key + (':' + value));
10624 });
10625var $rtfeldman$elm_css$Css$Internal$getOverloadedProperty = F3(
10626 function (functionName, desiredKey, style) {
10627 getOverloadedProperty:
10628 while (true) {
10629 switch (style.$) {
10630 case 'AppendProperty':
10631 var str = style.a;
10632 var key = A2(
10633 $elm$core$Maybe$withDefault,
10634 '',
10635 $elm$core$List$head(
10636 A2($elm$core$String$split, ':', str)));
10637 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, key);
10638 case 'ExtendSelector':
10639 var selector = style.a;
10640 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-selector'));
10641 case 'NestSnippet':
10642 var combinator = style.a;
10643 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-combinator'));
10644 case 'WithPseudoElement':
10645 var pseudoElement = style.a;
10646 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-pseudo-element setter'));
10647 case 'WithMedia':
10648 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-media-query'));
10649 case 'WithKeyframes':
10650 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-keyframes'));
10651 default:
10652 if (!style.a.b) {
10653 return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-empty-Style'));
10654 } else {
10655 if (!style.a.b.b) {
10656 var _v1 = style.a;
10657 var only = _v1.a;
10658 var $temp$functionName = functionName,
10659 $temp$desiredKey = desiredKey,
10660 $temp$style = only;
10661 functionName = $temp$functionName;
10662 desiredKey = $temp$desiredKey;
10663 style = $temp$style;
10664 continue getOverloadedProperty;
10665 } else {
10666 var _v2 = style.a;
10667 var first = _v2.a;
10668 var rest = _v2.b;
10669 var $temp$functionName = functionName,
10670 $temp$desiredKey = desiredKey,
10671 $temp$style = $rtfeldman$elm_css$Css$Preprocess$ApplyStyles(rest);
10672 functionName = $temp$functionName;
10673 desiredKey = $temp$desiredKey;
10674 style = $temp$style;
10675 continue getOverloadedProperty;
10676 }
10677 }
10678 }
10679 }
10680 });
10681var $rtfeldman$elm_css$Css$Internal$IncompatibleUnits = {$: 'IncompatibleUnits'};
10682var $rtfeldman$elm_css$Css$Internal$lengthForOverloadedProperty = A3($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$Internal$IncompatibleUnits, '', 0);
10683var $rtfeldman$elm_css$Css$textAlign = function (fn) {
10684 return A3(
10685 $rtfeldman$elm_css$Css$Internal$getOverloadedProperty,
10686 'textAlign',
10687 'text-align',
10688 fn($rtfeldman$elm_css$Css$Internal$lengthForOverloadedProperty));
10689};
10690var $rtfeldman$elm_css$Html$Styled$ul = $rtfeldman$elm_css$Html$Styled$node('ul');
10691var $author$project$Main$viewHeader = function (model) {
10692 var links = _List_fromArray(
10693 [
10694 _Utils_Tuple2('Catalog', '/catalog'),
10695 _Utils_Tuple2('Cart', '/cart')
10696 ]);
10697 return A2(
10698 $rtfeldman$elm_css$Html$Styled$div,
10699 _List_fromArray(
10700 [
10701 $rtfeldman$elm_css$Html$Styled$Attributes$css(
10702 _List_fromArray(
10703 [
10704 $rtfeldman$elm_css$Css$padding(
10705 $rtfeldman$elm_css$Css$px(40)),
10706 $rtfeldman$elm_css$Css$paddingTop(
10707 $rtfeldman$elm_css$Css$px(3)),
10708 $rtfeldman$elm_css$Css$paddingBottom(
10709 $rtfeldman$elm_css$Css$px(3)),
10710 $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$left),
10711 $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.secondary)
10712 ]))
10713 ]),
10714 _List_fromArray(
10715 [
10716 A2(
10717 $rtfeldman$elm_css$Html$Styled$ul,
10718 _List_fromArray(
10719 [
10720 $rtfeldman$elm_css$Html$Styled$Attributes$css(
10721 _List_fromArray(
10722 [
10723 $rtfeldman$elm_css$Css$listStyle($rtfeldman$elm_css$Css$none),
10724 $rtfeldman$elm_css$Css$padding(
10725 $rtfeldman$elm_css$Css$px(0)),
10726 $rtfeldman$elm_css$Css$margin(
10727 $rtfeldman$elm_css$Css$px(24))
10728 ]))
10729 ]),
10730 _Utils_ap(
10731 A2(
10732 $elm$core$List$map,
10733 function (_v0) {
10734 var name = _v0.a;
10735 var loc = _v0.b;
10736 return A2(
10737 $rtfeldman$elm_css$Html$Styled$li,
10738 _List_fromArray(
10739 [
10740 $rtfeldman$elm_css$Html$Styled$Attributes$css(
10741 _List_fromArray(
10742 [
10743 $rtfeldman$elm_css$Css$display($rtfeldman$elm_css$Css$inline)
10744 ]))
10745 ]),
10746 _List_fromArray(
10747 [
10748 A2(
10749 $author$project$Styles$headerLink,
10750 _List_fromArray(
10751 [
10752 $rtfeldman$elm_css$Html$Styled$Attributes$href(loc)
10753 ]),
10754 _List_fromArray(
10755 [
10756 $rtfeldman$elm_css$Html$Styled$text(name)
10757 ]))
10758 ]));
10759 },
10760 links),
10761 _List_fromArray(
10762 [
10763 (!_Utils_eq(model.loginModel.loginStatus, $author$project$Login$LoggedIn)) ? A2(
10764 $rtfeldman$elm_css$Html$Styled$li,
10765 _List_fromArray(
10766 [
10767 $rtfeldman$elm_css$Html$Styled$Attributes$css(
10768 _List_fromArray(
10769 [
10770 $rtfeldman$elm_css$Css$display($rtfeldman$elm_css$Css$inline)
10771 ]))
10772 ]),
10773 _List_fromArray(
10774 [
10775 A2(
10776 $author$project$Styles$headerLink,
10777 _List_fromArray(
10778 [
10779 $rtfeldman$elm_css$Html$Styled$Attributes$href('/login')
10780 ]),
10781 _List_fromArray(
10782 [
10783 $rtfeldman$elm_css$Html$Styled$text('Login')
10784 ]))
10785 ])) : A2(
10786 $author$project$Styles$furbyButton,
10787 _List_fromArray(
10788 [
10789 $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Main$LogoutPressed)
10790 ]),
10791 _List_fromArray(
10792 [
10793 $rtfeldman$elm_css$Html$Styled$text('Logout')
10794 ]))
10795 ])))
10796 ]));
10797};
10798var $author$project$Main$pageWrap = F2(
10799 function (model, page) {
10800 return $elm$core$List$singleton(
10801 $rtfeldman$elm_css$Html$Styled$toUnstyled(
10802 A2(
10803 $rtfeldman$elm_css$Html$Styled$div,
10804 _List_Nil,
10805 _List_fromArray(
10806 [
10807 $author$project$Main$viewHeader(model),
10808 page
10809 ]))));
10810 });
10811var $author$project$Cart$calculateTotal = function (model) {
10812 var items = model.products;
10813 return A3(
10814 $elm$core$List$foldl,
10815 $elm$core$Basics$add,
10816 0,
10817 A2(
10818 $elm$core$List$map,
10819 function (i) {
10820 return i.quantity * i.productItem.price;
10821 },
10822 items));
10823};
10824var $author$project$Cart$AddToCartPressed = function (a) {
10825 return {$: 'AddToCartPressed', a: a};
10826};
10827var $author$project$Cart$RemoveFromCart = function (a) {
10828 return {$: 'RemoveFromCart', a: a};
10829};
10830var $author$project$Cart$viewCartItemListing = function (listing) {
10831 return A2(
10832 $rtfeldman$elm_css$Html$Styled$div,
10833 _List_Nil,
10834 _List_fromArray(
10835 [
10836 $rtfeldman$elm_css$Html$Styled$text(listing.productItem.name),
10837 A2(
10838 $rtfeldman$elm_css$Html$Styled$div,
10839 _List_Nil,
10840 _List_fromArray(
10841 [
10842 $rtfeldman$elm_css$Html$Styled$text(
10843 A2($elm$core$Maybe$withDefault, '', listing.productItem.kind))
10844 ])),
10845 A2(
10846 $rtfeldman$elm_css$Html$Styled$div,
10847 _List_Nil,
10848 _List_fromArray(
10849 [
10850 $rtfeldman$elm_css$Html$Styled$text(
10851 A2($elm$core$Maybe$withDefault, '', listing.productItem.description))
10852 ])),
10853 A2(
10854 $rtfeldman$elm_css$Html$Styled$div,
10855 _List_Nil,
10856 _List_fromArray(
10857 [
10858 $rtfeldman$elm_css$Html$Styled$text(
10859 $elm$core$String$fromFloat(listing.productItem.price))
10860 ])),
10861 A2(
10862 $rtfeldman$elm_css$Html$Styled$div,
10863 _List_Nil,
10864 _List_fromArray(
10865 [
10866 $rtfeldman$elm_css$Html$Styled$text(
10867 $elm$core$String$fromInt(listing.quantity))
10868 ])),
10869 A2(
10870 $rtfeldman$elm_css$Html$Styled$div,
10871 _List_Nil,
10872 _List_fromArray(
10873 [
10874 A2(
10875 $rtfeldman$elm_css$Html$Styled$button,
10876 _List_fromArray(
10877 [
10878 $rtfeldman$elm_css$Html$Styled$Events$onClick(
10879 $author$project$Cart$AddToCartPressed(listing.productItem.id))
10880 ]),
10881 _List_fromArray(
10882 [
10883 $rtfeldman$elm_css$Html$Styled$text('Add')
10884 ]))
10885 ])),
10886 A2(
10887 $rtfeldman$elm_css$Html$Styled$div,
10888 _List_Nil,
10889 _List_fromArray(
10890 [
10891 A2(
10892 $rtfeldman$elm_css$Html$Styled$button,
10893 _List_fromArray(
10894 [
10895 $rtfeldman$elm_css$Html$Styled$Events$onClick(
10896 $author$project$Cart$RemoveFromCart(listing.productItem.id))
10897 ]),
10898 _List_fromArray(
10899 [
10900 $rtfeldman$elm_css$Html$Styled$text('Remove')
10901 ]))
10902 ])),
10903 A2(
10904 $rtfeldman$elm_css$Html$Styled$div,
10905 _List_Nil,
10906 _List_fromArray(
10907 [
10908 A2(
10909 $rtfeldman$elm_css$Html$Styled$a,
10910 _List_fromArray(
10911 [
10912 $rtfeldman$elm_css$Html$Styled$Attributes$href(
10913 '/product/' + $elm$core$String$fromInt(listing.productItem.id))
10914 ]),
10915 _List_fromArray(
10916 [
10917 $rtfeldman$elm_css$Html$Styled$text('View Product')
10918 ]))
10919 ]))
10920 ]));
10921};
10922var $author$project$Cart$viewStatus = function (s) {
10923 switch (s.$) {
10924 case 'Loading':
10925 return 'Loading';
10926 case 'Loaded':
10927 return 'Ready!';
10928 default:
10929 return 'Not loaded ...';
10930 }
10931};
10932var $author$project$Cart$view = function (model) {
10933 var _v0 = model.pageStatus;
10934 if (_v0.$ === 'Loading') {
10935 return A2(
10936 $rtfeldman$elm_css$Html$Styled$div,
10937 _List_Nil,
10938 _List_fromArray(
10939 [
10940 $rtfeldman$elm_css$Html$Styled$text(
10941 $author$project$Cart$viewStatus($author$project$Cart$Loading))
10942 ]));
10943 } else {
10944 return A2(
10945 $rtfeldman$elm_css$Html$Styled$div,
10946 _List_Nil,
10947 _List_fromArray(
10948 [
10949 function () {
10950 var cart = A2($elm$core$List$map, $author$project$Cart$viewCartItemListing, model.products);
10951 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);
10952 }(),
10953 $rtfeldman$elm_css$Html$Styled$text(
10954 $elm$core$String$fromFloat(
10955 $author$project$Cart$calculateTotal(model))),
10956 A2(
10957 $rtfeldman$elm_css$Html$Styled$a,
10958 _List_fromArray(
10959 [
10960 $rtfeldman$elm_css$Html$Styled$Attributes$href('/checkout')
10961 ]),
10962 _List_fromArray(
10963 [
10964 $rtfeldman$elm_css$Html$Styled$text('Checkout')
10965 ]))
10966 ]));
10967 }
10968};
10969var $rtfeldman$elm_css$Css$fontSize = $rtfeldman$elm_css$Css$prop1('font-size');
10970var $author$project$Styles$bigHeading = $rtfeldman$elm_css$Css$fontSize(
10971 $rtfeldman$elm_css$Css$px(24));
10972var $elm$core$Basics$ge = _Utils_ge;
10973var $author$project$Utils$between = F2(
10974 function (_v0, v) {
10975 var l = _v0.a;
10976 var u = _v0.b;
10977 return (_Utils_cmp(v, l) > -1) && (_Utils_cmp(v, u) < 1);
10978 });
10979var $author$project$Catalog$filterProducts = function (model) {
10980 return A2(
10981 $elm$core$List$filter,
10982 function (p) {
10983 return A2(
10984 $author$project$Utils$between,
10985 model.filters.rating,
10986 A2($elm$core$Maybe$withDefault, 5.0, p.averageRating));
10987 },
10988 A2(
10989 $elm$core$List$filter,
10990 A2(
10991 $elm$core$Basics$composeL,
10992 $author$project$Utils$between(model.filters.price),
10993 function ($) {
10994 return $.price;
10995 }),
10996 model.products));
10997};
10998var $rtfeldman$elm_css$Css$float = function (fn) {
10999 return A3(
11000 $rtfeldman$elm_css$Css$Internal$getOverloadedProperty,
11001 'float',
11002 'float',
11003 fn($rtfeldman$elm_css$Css$Internal$lengthForOverloadedProperty));
11004};
11005var $rtfeldman$elm_css$Css$PercentageUnits = {$: 'PercentageUnits'};
11006var $rtfeldman$elm_css$Css$pct = A2($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$PercentageUnits, '%');
11007var $author$project$Catalog$ChangePriceLower = function (a) {
11008 return {$: 'ChangePriceLower', a: a};
11009};
11010var $author$project$Catalog$ChangePriceUpper = function (a) {
11011 return {$: 'ChangePriceUpper', a: a};
11012};
11013var $author$project$Catalog$ChangeRatingLower = function (a) {
11014 return {$: 'ChangeRatingLower', a: a};
11015};
11016var $author$project$Catalog$ChangeRatingUpper = function (a) {
11017 return {$: 'ChangeRatingUpper', a: a};
11018};
11019var $rtfeldman$elm_css$Css$prop3 = F4(
11020 function (key, argA, argB, argC) {
11021 return A2(
11022 $rtfeldman$elm_css$Css$property,
11023 key,
11024 A2(
11025 $elm$core$String$join,
11026 ' ',
11027 _List_fromArray(
11028 [argA.value, argB.value, argC.value])));
11029 });
11030var $rtfeldman$elm_css$Css$borderBottom3 = $rtfeldman$elm_css$Css$prop3('border-bottom');
11031var $rtfeldman$elm_css$Css$right = $rtfeldman$elm_css$Css$prop1('right');
11032var $rtfeldman$elm_css$Html$Styled$select = $rtfeldman$elm_css$Html$Styled$node('select');
11033var $rtfeldman$elm_css$Css$solid = {borderStyle: $rtfeldman$elm_css$Css$Structure$Compatible, textDecorationStyle: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'solid'};
11034var $author$project$Styles$furbySelect = A2(
11035 $rtfeldman$elm_css$Html$Styled$styled,
11036 $rtfeldman$elm_css$Html$Styled$select,
11037 _List_fromArray(
11038 [
11039 $rtfeldman$elm_css$Css$margin(
11040 $rtfeldman$elm_css$Css$px(6)),
11041 $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fg),
11042 $rtfeldman$elm_css$Css$border(
11043 $rtfeldman$elm_css$Css$px(0)),
11044 A3(
11045 $rtfeldman$elm_css$Css$borderBottom3,
11046 $rtfeldman$elm_css$Css$px(2),
11047 $rtfeldman$elm_css$Css$solid,
11048 $author$project$Styles$theme.bgLight),
11049 $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$right),
11050 A2(
11051 $rtfeldman$elm_css$Css$padding2,
11052 $rtfeldman$elm_css$Css$px(3),
11053 $rtfeldman$elm_css$Css$px(3)),
11054 $rtfeldman$elm_css$Css$backgroundColor($author$project$Styles$theme.bg),
11055 $rtfeldman$elm_css$Css$hover(
11056 _List_fromArray(
11057 [
11058 A3(
11059 $rtfeldman$elm_css$Css$borderBottom3,
11060 $rtfeldman$elm_css$Css$px(2),
11061 $rtfeldman$elm_css$Css$solid,
11062 $author$project$Styles$theme.fg)
11063 ]))
11064 ]));
11065var $rtfeldman$elm_css$Html$Styled$Events$alwaysStop = function (x) {
11066 return _Utils_Tuple2(x, true);
11067};
11068var $elm$virtual_dom$VirtualDom$MayStopPropagation = function (a) {
11069 return {$: 'MayStopPropagation', a: a};
11070};
11071var $rtfeldman$elm_css$Html$Styled$Events$stopPropagationOn = F2(
11072 function (event, decoder) {
11073 return A2(
11074 $rtfeldman$elm_css$VirtualDom$Styled$on,
11075 event,
11076 $elm$virtual_dom$VirtualDom$MayStopPropagation(decoder));
11077 });
11078var $elm$json$Json$Decode$at = F2(
11079 function (fields, decoder) {
11080 return A3($elm$core$List$foldr, $elm$json$Json$Decode$field, decoder, fields);
11081 });
11082var $rtfeldman$elm_css$Html$Styled$Events$targetValue = A2(
11083 $elm$json$Json$Decode$at,
11084 _List_fromArray(
11085 ['target', 'value']),
11086 $elm$json$Json$Decode$string);
11087var $rtfeldman$elm_css$Html$Styled$Events$onInput = function (tagger) {
11088 return A2(
11089 $rtfeldman$elm_css$Html$Styled$Events$stopPropagationOn,
11090 'input',
11091 A2(
11092 $elm$json$Json$Decode$map,
11093 $rtfeldman$elm_css$Html$Styled$Events$alwaysStop,
11094 A2($elm$json$Json$Decode$map, tagger, $rtfeldman$elm_css$Html$Styled$Events$targetValue)));
11095};
11096var $rtfeldman$elm_css$Html$Styled$option = $rtfeldman$elm_css$Html$Styled$node('option');
11097var $author$project$Utils$range = F3(
11098 function (start, stop, step) {
11099 return (_Utils_cmp(start, stop) > -1) ? _List_Nil : A2(
11100 $elm$core$List$cons,
11101 start,
11102 A3($author$project$Utils$range, start + step, stop, step));
11103 });
11104var $elm$json$Json$Encode$bool = _Json_wrap;
11105var $rtfeldman$elm_css$Html$Styled$Attributes$boolProperty = F2(
11106 function (key, bool) {
11107 return A2(
11108 $rtfeldman$elm_css$VirtualDom$Styled$property,
11109 key,
11110 $elm$json$Json$Encode$bool(bool));
11111 });
11112var $rtfeldman$elm_css$Html$Styled$Attributes$selected = $rtfeldman$elm_css$Html$Styled$Attributes$boolProperty('selected');
11113var $elm$virtual_dom$VirtualDom$style = _VirtualDom_style;
11114var $rtfeldman$elm_css$VirtualDom$Styled$style = F2(
11115 function (key, val) {
11116 return A3(
11117 $rtfeldman$elm_css$VirtualDom$Styled$Attribute,
11118 A2($elm$virtual_dom$VirtualDom$style, key, val),
11119 _List_Nil,
11120 '');
11121 });
11122var $rtfeldman$elm_css$Html$Styled$Attributes$style = $rtfeldman$elm_css$VirtualDom$Styled$style;
11123var $elm$core$String$toFloat = _String_toFloat;
11124var $author$project$Catalog$viewFilters = function (model) {
11125 var viewRange = F2(
11126 function (_default, scale) {
11127 return A2(
11128 $elm$core$List$map,
11129 function (i) {
11130 return A2(
11131 $rtfeldman$elm_css$Html$Styled$option,
11132 _List_fromArray(
11133 [
11134 $rtfeldman$elm_css$Html$Styled$Attributes$selected(
11135 _Utils_eq(i, _default))
11136 ]),
11137 _List_fromArray(
11138 [
11139 $rtfeldman$elm_css$Html$Styled$text(
11140 $elm$core$String$fromInt(i))
11141 ]));
11142 },
11143 scale);
11144 });
11145 var ratingRange = A3($author$project$Utils$range, 1, 6, 1);
11146 var priceRange = A3($author$project$Utils$range, 0, 55000, 5000);
11147 var inp = A2(
11148 $elm$core$Basics$composeL,
11149 $elm$core$Maybe$withDefault(0),
11150 $elm$core$String$toFloat);
11151 return A2(
11152 $rtfeldman$elm_css$Html$Styled$div,
11153 _List_Nil,
11154 _List_fromArray(
11155 [
11156 A2(
11157 $rtfeldman$elm_css$Html$Styled$div,
11158 _List_fromArray(
11159 [
11160 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11161 _List_fromArray(
11162 [
11163 $author$project$Styles$bigHeading,
11164 $rtfeldman$elm_css$Css$paddingBottom(
11165 $rtfeldman$elm_css$Css$px(12))
11166 ]))
11167 ]),
11168 _List_fromArray(
11169 [
11170 $rtfeldman$elm_css$Html$Styled$text('Filters')
11171 ])),
11172 A2(
11173 $rtfeldman$elm_css$Html$Styled$div,
11174 _List_Nil,
11175 _List_fromArray(
11176 [
11177 A2(
11178 $rtfeldman$elm_css$Html$Styled$div,
11179 _List_Nil,
11180 _List_fromArray(
11181 [
11182 $rtfeldman$elm_css$Html$Styled$text('Price')
11183 ])),
11184 A2(
11185 $author$project$Styles$furbySelect,
11186 _List_fromArray(
11187 [
11188 $rtfeldman$elm_css$Html$Styled$Events$onInput(
11189 A2($elm$core$Basics$composeL, $author$project$Catalog$ChangePriceLower, inp)),
11190 A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'appearance', 'none')
11191 ]),
11192 A2(viewRange, 0, priceRange)),
11193 $rtfeldman$elm_css$Html$Styled$text('to'),
11194 A2(
11195 $author$project$Styles$furbySelect,
11196 _List_fromArray(
11197 [
11198 $rtfeldman$elm_css$Html$Styled$Events$onInput(
11199 A2($elm$core$Basics$composeL, $author$project$Catalog$ChangePriceUpper, inp)),
11200 A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'appearance', 'none')
11201 ]),
11202 A2(viewRange, 50000, priceRange))
11203 ])),
11204 A2(
11205 $rtfeldman$elm_css$Html$Styled$div,
11206 _List_Nil,
11207 _List_fromArray(
11208 [
11209 A2(
11210 $rtfeldman$elm_css$Html$Styled$div,
11211 _List_Nil,
11212 _List_fromArray(
11213 [
11214 $rtfeldman$elm_css$Html$Styled$text('Rating')
11215 ])),
11216 A2(
11217 $author$project$Styles$furbySelect,
11218 _List_fromArray(
11219 [
11220 $rtfeldman$elm_css$Html$Styled$Events$onInput(
11221 A2($elm$core$Basics$composeL, $author$project$Catalog$ChangeRatingLower, inp)),
11222 A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'appearance', 'none')
11223 ]),
11224 A2(viewRange, 1, ratingRange)),
11225 $rtfeldman$elm_css$Html$Styled$text('to'),
11226 A2(
11227 $author$project$Styles$furbySelect,
11228 _List_fromArray(
11229 [
11230 $rtfeldman$elm_css$Html$Styled$Events$onInput(
11231 A2($elm$core$Basics$composeL, $author$project$Catalog$ChangeRatingUpper, inp)),
11232 A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'appearance', 'none')
11233 ]),
11234 A2(viewRange, 5, ratingRange))
11235 ]))
11236 ]));
11237};
11238var $elm$virtual_dom$VirtualDom$attribute = F2(
11239 function (key, value) {
11240 return A2(
11241 _VirtualDom_attribute,
11242 _VirtualDom_noOnOrFormAction(key),
11243 _VirtualDom_noJavaScriptOrHtmlUri(value));
11244 });
11245var $rtfeldman$elm_css$VirtualDom$Styled$attribute = F2(
11246 function (key, value) {
11247 return A3(
11248 $rtfeldman$elm_css$VirtualDom$Styled$Attribute,
11249 A2($elm$virtual_dom$VirtualDom$attribute, key, value),
11250 _List_Nil,
11251 '');
11252 });
11253var $rtfeldman$elm_css$Html$Styled$Attributes$attribute = $rtfeldman$elm_css$VirtualDom$Styled$attribute;
11254var $author$project$Utils$arIosSrc = function (src) {
11255 return A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'ios-src', src);
11256};
11257var $author$project$Utils$arModes = function (mode) {
11258 return A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'ar-modes', mode);
11259};
11260var $author$project$Utils$arSrc = function (src) {
11261 return A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'src', src);
11262};
11263var $author$project$Utils$autoRotate = A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'auto-rotate', '');
11264var $rtfeldman$elm_css$Css$bold = {fontWeight: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'bold'};
11265var $rtfeldman$elm_css$Css$border3 = $rtfeldman$elm_css$Css$prop3('border');
11266var $author$project$Utils$cameraControls = A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'camera-controls', '');
11267var $author$project$Styles$cardPrimaryText = $rtfeldman$elm_css$Css$fontSize(
11268 $rtfeldman$elm_css$Css$px(18));
11269var $rtfeldman$elm_css$Css$batch = $rtfeldman$elm_css$Css$Preprocess$ApplyStyles;
11270var $author$project$Styles$cardSecondaryText = $rtfeldman$elm_css$Css$batch(
11271 _List_fromArray(
11272 [
11273 $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fgLight),
11274 $rtfeldman$elm_css$Css$fontSize(
11275 $rtfeldman$elm_css$Css$px(12))
11276 ]));
11277var $author$project$Styles$cardSupportingText = $rtfeldman$elm_css$Css$fontSize(
11278 $rtfeldman$elm_css$Css$px(16));
11279var $rtfeldman$elm_css$Css$fontVariant = $rtfeldman$elm_css$Css$prop1('font-variant');
11280var $rtfeldman$elm_css$Css$fontWeight = function (_v0) {
11281 var value = _v0.value;
11282 return A2($rtfeldman$elm_css$Css$property, 'font-weight', value);
11283};
11284var $author$project$Utils$loading = function (mode) {
11285 return A2($rtfeldman$elm_css$Html$Styled$Attributes$attribute, 'loading', mode);
11286};
11287var $rtfeldman$elm_css$Css$marginBottom = $rtfeldman$elm_css$Css$prop1('margin-bottom');
11288var $rtfeldman$elm_css$Css$maxWidth = $rtfeldman$elm_css$Css$prop1('max-width');
11289var $author$project$Utils$modelViewer = F2(
11290 function (attributes, children) {
11291 return A3($rtfeldman$elm_css$Html$Styled$node, 'model-viewer', attributes, children);
11292 });
11293var $rtfeldman$elm_css$Css$Structure$PseudoElement = function (a) {
11294 return {$: 'PseudoElement', a: a};
11295};
11296var $rtfeldman$elm_css$Css$Preprocess$WithPseudoElement = F2(
11297 function (a, b) {
11298 return {$: 'WithPseudoElement', a: a, b: b};
11299 });
11300var $rtfeldman$elm_css$Css$pseudoElement = function (element) {
11301 return $rtfeldman$elm_css$Css$Preprocess$WithPseudoElement(
11302 $rtfeldman$elm_css$Css$Structure$PseudoElement(element));
11303};
11304var $rtfeldman$elm_css$Css$before = $rtfeldman$elm_css$Css$pseudoElement('before');
11305var $author$project$Styles$money = $rtfeldman$elm_css$Css$before(
11306 _List_fromArray(
11307 [
11308 A2($rtfeldman$elm_css$Css$property, 'content', '\"₹ \"')
11309 ]));
11310var $rtfeldman$elm_css$Css$smallCaps = {fontVariant: $rtfeldman$elm_css$Css$Structure$Compatible, fontVariantCaps: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'small-caps'};
11311var $rtfeldman$elm_css$Css$width = $rtfeldman$elm_css$Css$prop1('width');
11312var $author$project$Catalog$viewProduct = function (p) {
11313 return A2(
11314 $rtfeldman$elm_css$Html$Styled$div,
11315 _List_fromArray(
11316 [
11317 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11318 _List_fromArray(
11319 [
11320 $rtfeldman$elm_css$Css$marginBottom(
11321 $rtfeldman$elm_css$Css$px(20)),
11322 A3(
11323 $rtfeldman$elm_css$Css$border3,
11324 $rtfeldman$elm_css$Css$px(1),
11325 $rtfeldman$elm_css$Css$solid,
11326 $author$project$Styles$theme.primary),
11327 $rtfeldman$elm_css$Css$borderRadius(
11328 $rtfeldman$elm_css$Css$px(4)),
11329 $rtfeldman$elm_css$Css$padding(
11330 $rtfeldman$elm_css$Css$px(20)),
11331 $rtfeldman$elm_css$Css$width(
11332 $rtfeldman$elm_css$Css$pct(100)),
11333 $rtfeldman$elm_css$Css$maxWidth(
11334 $rtfeldman$elm_css$Css$px(650))
11335 ]))
11336 ]),
11337 _List_fromArray(
11338 [
11339 A2(
11340 $rtfeldman$elm_css$Html$Styled$div,
11341 _List_fromArray(
11342 [
11343 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11344 _List_fromArray(
11345 [
11346 $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left),
11347 $rtfeldman$elm_css$Css$width(
11348 $rtfeldman$elm_css$Css$pct(50))
11349 ]))
11350 ]),
11351 _List_fromArray(
11352 [
11353 A2(
11354 $author$project$Utils$modelViewer,
11355 _List_fromArray(
11356 [
11357 $author$project$Utils$cameraControls,
11358 $author$project$Utils$autoRotate,
11359 $author$project$Utils$arSrc(p.src),
11360 $author$project$Utils$arIosSrc(p.iosSrc),
11361 $author$project$Utils$loading('eager'),
11362 $author$project$Utils$arModes('webxr')
11363 ]),
11364 _List_Nil)
11365 ])),
11366 A2(
11367 $rtfeldman$elm_css$Html$Styled$div,
11368 _List_fromArray(
11369 [
11370 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11371 _List_fromArray(
11372 [
11373 $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left),
11374 $rtfeldman$elm_css$Css$width(
11375 $rtfeldman$elm_css$Css$pct(50))
11376 ]))
11377 ]),
11378 _List_fromArray(
11379 [
11380 A2(
11381 $rtfeldman$elm_css$Html$Styled$div,
11382 _List_fromArray(
11383 [
11384 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11385 _List_fromArray(
11386 [
11387 $author$project$Styles$cardSecondaryText,
11388 $rtfeldman$elm_css$Css$paddingBottom(
11389 $rtfeldman$elm_css$Css$px(3)),
11390 $rtfeldman$elm_css$Css$fontVariant($rtfeldman$elm_css$Css$smallCaps)
11391 ]))
11392 ]),
11393 _List_fromArray(
11394 [
11395 $rtfeldman$elm_css$Html$Styled$text(
11396 A2($elm$core$Maybe$withDefault, '', p.kind))
11397 ])),
11398 A2(
11399 $rtfeldman$elm_css$Html$Styled$div,
11400 _List_fromArray(
11401 [
11402 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11403 _List_fromArray(
11404 [
11405 $author$project$Styles$cardPrimaryText,
11406 $rtfeldman$elm_css$Css$paddingBottom(
11407 $rtfeldman$elm_css$Css$px(3))
11408 ]))
11409 ]),
11410 _List_fromArray(
11411 [
11412 A2(
11413 $rtfeldman$elm_css$Html$Styled$a,
11414 _List_fromArray(
11415 [
11416 $rtfeldman$elm_css$Html$Styled$Attributes$href(
11417 '/product/' + $elm$core$String$fromInt(p.id))
11418 ]),
11419 _List_fromArray(
11420 [
11421 $rtfeldman$elm_css$Html$Styled$text(p.name)
11422 ]))
11423 ])),
11424 A2(
11425 $rtfeldman$elm_css$Html$Styled$div,
11426 _List_fromArray(
11427 [
11428 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11429 _List_fromArray(
11430 [
11431 $author$project$Styles$cardSecondaryText,
11432 $rtfeldman$elm_css$Css$paddingBottom(
11433 $rtfeldman$elm_css$Css$px(12))
11434 ]))
11435 ]),
11436 _List_fromArray(
11437 [
11438 function () {
11439 var _v0 = p.averageRating;
11440 if (_v0.$ === 'Just') {
11441 var v = _v0.a;
11442 return $rtfeldman$elm_css$Html$Styled$text(
11443 'Avg Rating: ' + $elm$core$String$fromFloat(v));
11444 } else {
11445 return $rtfeldman$elm_css$Html$Styled$text('No Ratings');
11446 }
11447 }()
11448 ])),
11449 A2(
11450 $rtfeldman$elm_css$Html$Styled$div,
11451 _List_fromArray(
11452 [
11453 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11454 _List_fromArray(
11455 [
11456 $author$project$Styles$cardSupportingText,
11457 $rtfeldman$elm_css$Css$paddingBottom(
11458 $rtfeldman$elm_css$Css$px(6))
11459 ]))
11460 ]),
11461 _List_fromArray(
11462 [
11463 $rtfeldman$elm_css$Html$Styled$text(
11464 A2($elm$core$Maybe$withDefault, 'No description provided', p.description))
11465 ])),
11466 A2(
11467 $rtfeldman$elm_css$Html$Styled$div,
11468 _List_fromArray(
11469 [
11470 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11471 _List_fromArray(
11472 [
11473 $rtfeldman$elm_css$Css$fontWeight($rtfeldman$elm_css$Css$bold),
11474 $rtfeldman$elm_css$Css$fontSize(
11475 $rtfeldman$elm_css$Css$px(14)),
11476 $author$project$Styles$money
11477 ]))
11478 ]),
11479 _List_fromArray(
11480 [
11481 $rtfeldman$elm_css$Html$Styled$text(
11482 $elm$core$String$fromFloat(p.price))
11483 ]))
11484 ])),
11485 A2(
11486 $rtfeldman$elm_css$Html$Styled$div,
11487 _List_fromArray(
11488 [
11489 A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'clear', 'both')
11490 ]),
11491 _List_Nil)
11492 ]));
11493};
11494var $author$project$Catalog$viewStatus = function (s) {
11495 switch (s.$) {
11496 case 'Loading':
11497 return 'Loading';
11498 case 'Loaded':
11499 return 'Ready!';
11500 default:
11501 return 'Not loaded ...';
11502 }
11503};
11504var $author$project$Catalog$view = function (model) {
11505 var _v0 = model.pageStatus;
11506 if (_v0.$ === 'Loading') {
11507 return A2(
11508 $rtfeldman$elm_css$Html$Styled$div,
11509 _List_Nil,
11510 _List_fromArray(
11511 [
11512 $rtfeldman$elm_css$Html$Styled$text(
11513 $author$project$Catalog$viewStatus($author$project$Catalog$Loading))
11514 ]));
11515 } else {
11516 return A2(
11517 $rtfeldman$elm_css$Html$Styled$div,
11518 _List_fromArray(
11519 [
11520 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11521 _List_fromArray(
11522 [
11523 $rtfeldman$elm_css$Css$padding(
11524 $rtfeldman$elm_css$Css$px(40))
11525 ]))
11526 ]),
11527 _List_fromArray(
11528 [
11529 A2(
11530 $rtfeldman$elm_css$Html$Styled$div,
11531 _List_fromArray(
11532 [
11533 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11534 _List_fromArray(
11535 [
11536 $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left),
11537 $rtfeldman$elm_css$Css$width(
11538 $rtfeldman$elm_css$Css$pct(20))
11539 ]))
11540 ]),
11541 _List_fromArray(
11542 [
11543 $author$project$Catalog$viewFilters(model)
11544 ])),
11545 A2(
11546 $rtfeldman$elm_css$Html$Styled$div,
11547 _List_fromArray(
11548 [
11549 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11550 _List_fromArray(
11551 [
11552 $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left),
11553 $rtfeldman$elm_css$Css$width(
11554 $rtfeldman$elm_css$Css$pct(80))
11555 ]))
11556 ]),
11557 _List_fromArray(
11558 [
11559 A2(
11560 $rtfeldman$elm_css$Html$Styled$div,
11561 _List_fromArray(
11562 [
11563 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11564 _List_fromArray(
11565 [$author$project$Styles$bigHeading]))
11566 ]),
11567 _List_fromArray(
11568 [
11569 $rtfeldman$elm_css$Html$Styled$text('Products')
11570 ])),
11571 A2(
11572 $rtfeldman$elm_css$Html$Styled$ul,
11573 _List_fromArray(
11574 [
11575 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11576 _List_fromArray(
11577 [
11578 $rtfeldman$elm_css$Css$padding(
11579 $rtfeldman$elm_css$Css$px(0)),
11580 $rtfeldman$elm_css$Css$listStyle($rtfeldman$elm_css$Css$none)
11581 ]))
11582 ]),
11583 A2(
11584 $elm$core$List$map,
11585 $author$project$Catalog$viewProduct,
11586 $author$project$Catalog$filterProducts(model)))
11587 ]))
11588 ]));
11589 }
11590};
11591var $author$project$Checkout$CheckoutPressed = {$: 'CheckoutPressed'};
11592var $author$project$Checkout$PaymentModeSelected = function (a) {
11593 return {$: 'PaymentModeSelected', a: a};
11594};
11595var $author$project$Checkout$viewStatus = function (s) {
11596 switch (s.$) {
11597 case 'Loading':
11598 return 'Loading';
11599 case 'Loaded':
11600 return 'Ready!';
11601 default:
11602 return 'Not loaded ...';
11603 }
11604};
11605var $author$project$Checkout$view = function (model) {
11606 var _v0 = model.pageStatus;
11607 if (_v0.$ === 'Loading') {
11608 return A2(
11609 $rtfeldman$elm_css$Html$Styled$div,
11610 _List_Nil,
11611 _List_fromArray(
11612 [
11613 $rtfeldman$elm_css$Html$Styled$text(
11614 $author$project$Checkout$viewStatus($author$project$Checkout$Loading))
11615 ]));
11616 } else {
11617 return A2(
11618 $rtfeldman$elm_css$Html$Styled$div,
11619 _List_Nil,
11620 _List_fromArray(
11621 [
11622 A2(
11623 $rtfeldman$elm_css$Html$Styled$div,
11624 _List_Nil,
11625 _List_fromArray(
11626 [
11627 $rtfeldman$elm_css$Html$Styled$text(
11628 $elm$core$String$fromFloat(model.cartTotal))
11629 ])),
11630 A2(
11631 $rtfeldman$elm_css$Html$Styled$select,
11632 _List_Nil,
11633 _List_fromArray(
11634 [
11635 A2(
11636 $rtfeldman$elm_css$Html$Styled$option,
11637 _List_fromArray(
11638 [
11639 $rtfeldman$elm_css$Html$Styled$Events$onInput($author$project$Checkout$PaymentModeSelected)
11640 ]),
11641 _List_fromArray(
11642 [
11643 $rtfeldman$elm_css$Html$Styled$text('Cash')
11644 ])),
11645 A2(
11646 $rtfeldman$elm_css$Html$Styled$option,
11647 _List_fromArray(
11648 [
11649 $rtfeldman$elm_css$Html$Styled$Events$onInput($author$project$Checkout$PaymentModeSelected)
11650 ]),
11651 _List_fromArray(
11652 [
11653 $rtfeldman$elm_css$Html$Styled$text('Debit Card')
11654 ])),
11655 A2(
11656 $rtfeldman$elm_css$Html$Styled$option,
11657 _List_fromArray(
11658 [
11659 $rtfeldman$elm_css$Html$Styled$Events$onInput($author$project$Checkout$PaymentModeSelected)
11660 ]),
11661 _List_fromArray(
11662 [
11663 $rtfeldman$elm_css$Html$Styled$text('Credit Card')
11664 ]))
11665 ])),
11666 A2(
11667 $rtfeldman$elm_css$Html$Styled$div,
11668 _List_Nil,
11669 _List_fromArray(
11670 [
11671 A2(
11672 $rtfeldman$elm_css$Html$Styled$a,
11673 _List_fromArray(
11674 [
11675 $rtfeldman$elm_css$Html$Styled$Attributes$href('/cart')
11676 ]),
11677 _List_fromArray(
11678 [
11679 $rtfeldman$elm_css$Html$Styled$text('Cancel')
11680 ]))
11681 ])),
11682 A2(
11683 $rtfeldman$elm_css$Html$Styled$div,
11684 _List_Nil,
11685 _List_fromArray(
11686 [
11687 A2(
11688 $rtfeldman$elm_css$Html$Styled$button,
11689 _List_fromArray(
11690 [
11691 $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Checkout$CheckoutPressed)
11692 ]),
11693 _List_fromArray(
11694 [
11695 $rtfeldman$elm_css$Html$Styled$text('Confirm and Pay')
11696 ]))
11697 ]))
11698 ]));
11699 }
11700};
11701var $author$project$Login$LoginPressed = {$: 'LoginPressed'};
11702var $author$project$Login$PassEntered = function (a) {
11703 return {$: 'PassEntered', a: a};
11704};
11705var $author$project$Login$UserEntered = function (a) {
11706 return {$: 'UserEntered', a: a};
11707};
11708var $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'};
11709var $rtfeldman$elm_css$Css$center = $rtfeldman$elm_css$Css$prop1('center');
11710var $author$project$Login$fieldPadding = $rtfeldman$elm_css$Html$Styled$Attributes$css(
11711 _List_fromArray(
11712 [
11713 $rtfeldman$elm_css$Css$paddingTop(
11714 $rtfeldman$elm_css$Css$px(10)),
11715 $rtfeldman$elm_css$Css$paddingBottom(
11716 $rtfeldman$elm_css$Css$px(10))
11717 ]));
11718var $rtfeldman$elm_css$Css$marginTop = $rtfeldman$elm_css$Css$prop1('margin-top');
11719var $rtfeldman$elm_css$Css$focus = $rtfeldman$elm_css$Css$pseudoClass('focus');
11720var $rtfeldman$elm_css$Html$Styled$input = $rtfeldman$elm_css$Html$Styled$node('input');
11721var $author$project$Styles$loginInputField = A2(
11722 $rtfeldman$elm_css$Html$Styled$styled,
11723 $rtfeldman$elm_css$Html$Styled$input,
11724 _List_fromArray(
11725 [
11726 $rtfeldman$elm_css$Css$width(
11727 $rtfeldman$elm_css$Css$pct(100)),
11728 $rtfeldman$elm_css$Css$color($author$project$Styles$theme.fg),
11729 $rtfeldman$elm_css$Css$border(
11730 $rtfeldman$elm_css$Css$px(0)),
11731 A3(
11732 $rtfeldman$elm_css$Css$borderBottom3,
11733 $rtfeldman$elm_css$Css$px(1),
11734 $rtfeldman$elm_css$Css$solid,
11735 $author$project$Styles$theme.bgLight),
11736 $rtfeldman$elm_css$Css$focus(
11737 _List_fromArray(
11738 [
11739 A3(
11740 $rtfeldman$elm_css$Css$borderBottom3,
11741 $rtfeldman$elm_css$Css$px(2),
11742 $rtfeldman$elm_css$Css$solid,
11743 $author$project$Styles$theme.fg)
11744 ]))
11745 ]));
11746var $rtfeldman$elm_css$Html$Styled$Attributes$placeholder = $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty('placeholder');
11747var $rtfeldman$elm_css$Html$Styled$Attributes$type_ = $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty('type');
11748var $rtfeldman$elm_css$Html$Styled$Attributes$value = $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty('value');
11749var $author$project$Login$viewInput = F4(
11750 function (t, p, v, toMsg) {
11751 return A2(
11752 $author$project$Styles$loginInputField,
11753 _List_fromArray(
11754 [
11755 $rtfeldman$elm_css$Html$Styled$Attributes$type_(t),
11756 $rtfeldman$elm_css$Html$Styled$Attributes$placeholder(p),
11757 $rtfeldman$elm_css$Html$Styled$Attributes$value(v),
11758 $rtfeldman$elm_css$Html$Styled$Events$onInput(toMsg)
11759 ]),
11760 _List_Nil);
11761 });
11762var $author$project$Login$viewStatus = function (ls) {
11763 switch (ls.$) {
11764 case 'NotLoggedIn':
11765 return '';
11766 case 'InvalidLogin':
11767 return 'Invalid Login';
11768 case 'LoggedIn':
11769 return 'Logged in!';
11770 default:
11771 return 'Logging In ...';
11772 }
11773};
11774var $author$project$Login$view = function (model) {
11775 return A2(
11776 $rtfeldman$elm_css$Html$Styled$div,
11777 _List_fromArray(
11778 [
11779 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11780 _List_fromArray(
11781 [
11782 $rtfeldman$elm_css$Css$margin($rtfeldman$elm_css$Css$auto),
11783 $rtfeldman$elm_css$Css$marginTop(
11784 $rtfeldman$elm_css$Css$pct(10)),
11785 $rtfeldman$elm_css$Css$padding(
11786 $rtfeldman$elm_css$Css$px(20)),
11787 $rtfeldman$elm_css$Css$width(
11788 $rtfeldman$elm_css$Css$pct(30))
11789 ]))
11790 ]),
11791 _List_fromArray(
11792 [
11793 A2(
11794 $rtfeldman$elm_css$Html$Styled$div,
11795 _List_fromArray(
11796 [
11797 $author$project$Login$fieldPadding,
11798 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11799 _List_fromArray(
11800 [$author$project$Styles$bigHeading]))
11801 ]),
11802 _List_fromArray(
11803 [
11804 $rtfeldman$elm_css$Html$Styled$text('Login')
11805 ])),
11806 A2(
11807 $rtfeldman$elm_css$Html$Styled$div,
11808 _List_fromArray(
11809 [$author$project$Login$fieldPadding]),
11810 _List_fromArray(
11811 [
11812 A4($author$project$Login$viewInput, 'text', 'Enter name here', model.username, $author$project$Login$UserEntered)
11813 ])),
11814 A2(
11815 $rtfeldman$elm_css$Html$Styled$div,
11816 _List_fromArray(
11817 [$author$project$Login$fieldPadding]),
11818 _List_fromArray(
11819 [
11820 A4($author$project$Login$viewInput, 'password', 'Password', model.password, $author$project$Login$PassEntered)
11821 ])),
11822 A2(
11823 $rtfeldman$elm_css$Html$Styled$div,
11824 _List_fromArray(
11825 [
11826 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11827 _List_fromArray(
11828 [
11829 $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$center)
11830 ])),
11831 $author$project$Login$fieldPadding
11832 ]),
11833 _List_fromArray(
11834 [
11835 A2(
11836 $author$project$Styles$furbyButton,
11837 _List_fromArray(
11838 [
11839 $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Login$LoginPressed)
11840 ]),
11841 _List_fromArray(
11842 [
11843 $rtfeldman$elm_css$Html$Styled$text('Login')
11844 ]))
11845 ])),
11846 A2(
11847 $rtfeldman$elm_css$Html$Styled$div,
11848 _List_fromArray(
11849 [
11850 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11851 _List_fromArray(
11852 [
11853 $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$center)
11854 ]))
11855 ]),
11856 _List_fromArray(
11857 [
11858 $rtfeldman$elm_css$Html$Styled$text(
11859 $author$project$Login$viewStatus(model.loginStatus))
11860 ])),
11861 A2(
11862 $rtfeldman$elm_css$Html$Styled$div,
11863 _List_fromArray(
11864 [$author$project$Login$fieldPadding]),
11865 _List_fromArray(
11866 [
11867 $rtfeldman$elm_css$Html$Styled$text('Don\'t have an account? '),
11868 A2(
11869 $rtfeldman$elm_css$Html$Styled$a,
11870 _List_fromArray(
11871 [
11872 $rtfeldman$elm_css$Html$Styled$Attributes$href('/signup')
11873 ]),
11874 _List_fromArray(
11875 [
11876 $rtfeldman$elm_css$Html$Styled$text('Register now!')
11877 ]))
11878 ]))
11879 ]));
11880};
11881var $author$project$Product$AddRatingComment = function (a) {
11882 return {$: 'AddRatingComment', a: a};
11883};
11884var $author$project$Product$AddRatingPressed = {$: 'AddRatingPressed'};
11885var $author$project$Product$viewInput = F4(
11886 function (t, p, v, toMsg) {
11887 return A2(
11888 $rtfeldman$elm_css$Html$Styled$input,
11889 _List_fromArray(
11890 [
11891 $rtfeldman$elm_css$Html$Styled$Attributes$type_(t),
11892 $rtfeldman$elm_css$Html$Styled$Attributes$placeholder(p),
11893 $rtfeldman$elm_css$Html$Styled$Attributes$value(v),
11894 $rtfeldman$elm_css$Html$Styled$Events$onInput(toMsg)
11895 ]),
11896 _List_Nil);
11897 });
11898var $author$project$Product$AddToCartPressed = {$: 'AddToCartPressed'};
11899var $author$project$Product$viewProduct = function (p) {
11900 return A2(
11901 $rtfeldman$elm_css$Html$Styled$div,
11902 _List_fromArray(
11903 [
11904 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11905 _List_fromArray(
11906 [
11907 $rtfeldman$elm_css$Css$marginBottom(
11908 $rtfeldman$elm_css$Css$px(20)),
11909 $rtfeldman$elm_css$Css$padding(
11910 $rtfeldman$elm_css$Css$px(20)),
11911 $rtfeldman$elm_css$Css$width(
11912 $rtfeldman$elm_css$Css$pct(100))
11913 ]))
11914 ]),
11915 _List_fromArray(
11916 [
11917 A2(
11918 $rtfeldman$elm_css$Html$Styled$div,
11919 _List_fromArray(
11920 [
11921 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11922 _List_fromArray(
11923 [
11924 $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left),
11925 $rtfeldman$elm_css$Css$width(
11926 $rtfeldman$elm_css$Css$pct(50))
11927 ]))
11928 ]),
11929 _List_fromArray(
11930 [
11931 A2(
11932 $author$project$Utils$modelViewer,
11933 _List_fromArray(
11934 [
11935 $author$project$Utils$cameraControls,
11936 $author$project$Utils$autoRotate,
11937 $author$project$Utils$arSrc(p.src),
11938 $author$project$Utils$arIosSrc(p.iosSrc),
11939 $author$project$Utils$loading('eager'),
11940 $author$project$Utils$arModes('webxr')
11941 ]),
11942 _List_Nil)
11943 ])),
11944 A2(
11945 $rtfeldman$elm_css$Html$Styled$div,
11946 _List_fromArray(
11947 [
11948 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11949 _List_fromArray(
11950 [
11951 $rtfeldman$elm_css$Css$float($rtfeldman$elm_css$Css$left),
11952 $rtfeldman$elm_css$Css$width(
11953 $rtfeldman$elm_css$Css$pct(50))
11954 ]))
11955 ]),
11956 _List_fromArray(
11957 [
11958 A2(
11959 $rtfeldman$elm_css$Html$Styled$div,
11960 _List_fromArray(
11961 [
11962 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11963 _List_fromArray(
11964 [
11965 $author$project$Styles$cardSecondaryText,
11966 $rtfeldman$elm_css$Css$paddingBottom(
11967 $rtfeldman$elm_css$Css$px(3)),
11968 $rtfeldman$elm_css$Css$fontVariant($rtfeldman$elm_css$Css$smallCaps)
11969 ]))
11970 ]),
11971 _List_fromArray(
11972 [
11973 $rtfeldman$elm_css$Html$Styled$text(
11974 A2($elm$core$Maybe$withDefault, '', p.kind))
11975 ])),
11976 A2(
11977 $rtfeldman$elm_css$Html$Styled$div,
11978 _List_fromArray(
11979 [
11980 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11981 _List_fromArray(
11982 [
11983 $author$project$Styles$cardPrimaryText,
11984 $rtfeldman$elm_css$Css$paddingBottom(
11985 $rtfeldman$elm_css$Css$px(12))
11986 ]))
11987 ]),
11988 _List_fromArray(
11989 [
11990 $rtfeldman$elm_css$Html$Styled$text(p.name)
11991 ])),
11992 A2(
11993 $rtfeldman$elm_css$Html$Styled$div,
11994 _List_fromArray(
11995 [
11996 $rtfeldman$elm_css$Html$Styled$Attributes$css(
11997 _List_fromArray(
11998 [
11999 $author$project$Styles$cardSupportingText,
12000 $rtfeldman$elm_css$Css$paddingBottom(
12001 $rtfeldman$elm_css$Css$px(6))
12002 ]))
12003 ]),
12004 _List_fromArray(
12005 [
12006 $rtfeldman$elm_css$Html$Styled$text(
12007 A2($elm$core$Maybe$withDefault, 'No description provided', p.description))
12008 ])),
12009 A2(
12010 $rtfeldman$elm_css$Html$Styled$div,
12011 _List_fromArray(
12012 [
12013 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12014 _List_fromArray(
12015 [
12016 $rtfeldman$elm_css$Css$fontWeight($rtfeldman$elm_css$Css$bold),
12017 $rtfeldman$elm_css$Css$fontSize(
12018 $rtfeldman$elm_css$Css$px(14)),
12019 $author$project$Styles$money
12020 ]))
12021 ]),
12022 _List_fromArray(
12023 [
12024 $rtfeldman$elm_css$Html$Styled$text(
12025 $elm$core$String$fromFloat(p.price)),
12026 A2(
12027 $rtfeldman$elm_css$Html$Styled$div,
12028 _List_Nil,
12029 _List_fromArray(
12030 [
12031 A2(
12032 $author$project$Styles$furbyButton,
12033 _List_fromArray(
12034 [
12035 $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Product$AddToCartPressed)
12036 ]),
12037 _List_fromArray(
12038 [
12039 $rtfeldman$elm_css$Html$Styled$text('Add To Cart')
12040 ]))
12041 ]))
12042 ]))
12043 ])),
12044 A2(
12045 $rtfeldman$elm_css$Html$Styled$div,
12046 _List_fromArray(
12047 [
12048 A2($rtfeldman$elm_css$Html$Styled$Attributes$style, 'clear', 'both')
12049 ]),
12050 _List_Nil)
12051 ]));
12052};
12053var $elm$core$List$repeatHelp = F3(
12054 function (result, n, value) {
12055 repeatHelp:
12056 while (true) {
12057 if (n <= 0) {
12058 return result;
12059 } else {
12060 var $temp$result = A2($elm$core$List$cons, value, result),
12061 $temp$n = n - 1,
12062 $temp$value = value;
12063 result = $temp$result;
12064 n = $temp$n;
12065 value = $temp$value;
12066 continue repeatHelp;
12067 }
12068 }
12069 });
12070var $elm$core$List$repeat = F2(
12071 function (n, value) {
12072 return A3($elm$core$List$repeatHelp, _List_Nil, n, value);
12073 });
12074var $rtfeldman$elm_css$VirtualDom$Styled$unstyledNode = $rtfeldman$elm_css$VirtualDom$Styled$Unstyled;
12075var $rtfeldman$elm_css$Html$Styled$fromUnstyled = $rtfeldman$elm_css$VirtualDom$Styled$unstyledNode;
12076var $elm$svg$Svg$Attributes$class = _VirtualDom_attribute('class');
12077var $elm$svg$Svg$Attributes$fill = _VirtualDom_attribute('fill');
12078var $elm$svg$Svg$Attributes$height = _VirtualDom_attribute('height');
12079var $elm$svg$Svg$map = $elm$virtual_dom$VirtualDom$map;
12080var $elm$svg$Svg$Attributes$stroke = _VirtualDom_attribute('stroke');
12081var $elm$svg$Svg$Attributes$strokeLinecap = _VirtualDom_attribute('stroke-linecap');
12082var $elm$svg$Svg$Attributes$strokeLinejoin = _VirtualDom_attribute('stroke-linejoin');
12083var $elm$svg$Svg$Attributes$strokeWidth = _VirtualDom_attribute('stroke-width');
12084var $elm$svg$Svg$trustedNode = _VirtualDom_nodeNS('http://www.w3.org/2000/svg');
12085var $elm$svg$Svg$svg = $elm$svg$Svg$trustedNode('svg');
12086var $elm$svg$Svg$Attributes$viewBox = _VirtualDom_attribute('viewBox');
12087var $elm$svg$Svg$Attributes$width = _VirtualDom_attribute('width');
12088var $1602$elm_feather$FeatherIcons$toHtml = F2(
12089 function (attributes, _v0) {
12090 var src = _v0.a.src;
12091 var attrs = _v0.a.attrs;
12092 var strSize = $elm$core$String$fromFloat(attrs.size);
12093 var baseAttributes = _List_fromArray(
12094 [
12095 $elm$svg$Svg$Attributes$fill('none'),
12096 $elm$svg$Svg$Attributes$height(
12097 _Utils_ap(strSize, attrs.sizeUnit)),
12098 $elm$svg$Svg$Attributes$width(
12099 _Utils_ap(strSize, attrs.sizeUnit)),
12100 $elm$svg$Svg$Attributes$stroke('currentColor'),
12101 $elm$svg$Svg$Attributes$strokeLinecap('round'),
12102 $elm$svg$Svg$Attributes$strokeLinejoin('round'),
12103 $elm$svg$Svg$Attributes$strokeWidth(
12104 $elm$core$String$fromFloat(attrs.strokeWidth)),
12105 $elm$svg$Svg$Attributes$viewBox(attrs.viewBox)
12106 ]);
12107 var combinedAttributes = _Utils_ap(
12108 function () {
12109 var _v1 = attrs._class;
12110 if (_v1.$ === 'Just') {
12111 var c = _v1.a;
12112 return A2(
12113 $elm$core$List$cons,
12114 $elm$svg$Svg$Attributes$class(c),
12115 baseAttributes);
12116 } else {
12117 return baseAttributes;
12118 }
12119 }(),
12120 attributes);
12121 return A2(
12122 $elm$svg$Svg$svg,
12123 combinedAttributes,
12124 A2(
12125 $elm$core$List$map,
12126 $elm$svg$Svg$map($elm$core$Basics$never),
12127 src));
12128 });
12129var $1602$elm_feather$FeatherIcons$Icon = function (a) {
12130 return {$: 'Icon', a: a};
12131};
12132var $1602$elm_feather$FeatherIcons$withSize = F2(
12133 function (size, _v0) {
12134 var attrs = _v0.a.attrs;
12135 var src = _v0.a.src;
12136 return $1602$elm_feather$FeatherIcons$Icon(
12137 {
12138 attrs: _Utils_update(
12139 attrs,
12140 {size: size}),
12141 src: src
12142 });
12143 });
12144var $author$project$Icons$convert = A2(
12145 $elm$core$Basics$composeL,
12146 A2(
12147 $elm$core$Basics$composeL,
12148 $rtfeldman$elm_css$Html$Styled$fromUnstyled,
12149 $1602$elm_feather$FeatherIcons$toHtml(_List_Nil)),
12150 $1602$elm_feather$FeatherIcons$withSize(14));
12151var $1602$elm_feather$FeatherIcons$defaultAttributes = function (name) {
12152 return {
12153 _class: $elm$core$Maybe$Just('feather feather-' + name),
12154 size: 24,
12155 sizeUnit: '',
12156 strokeWidth: 2,
12157 viewBox: '0 0 24 24'
12158 };
12159};
12160var $1602$elm_feather$FeatherIcons$makeBuilder = F2(
12161 function (name, src) {
12162 return $1602$elm_feather$FeatherIcons$Icon(
12163 {
12164 attrs: $1602$elm_feather$FeatherIcons$defaultAttributes(name),
12165 src: src
12166 });
12167 });
12168var $elm$svg$Svg$Attributes$points = _VirtualDom_attribute('points');
12169var $elm$svg$Svg$polygon = $elm$svg$Svg$trustedNode('polygon');
12170var $1602$elm_feather$FeatherIcons$xmlns = function (s) {
12171 return A2(
12172 $elm$virtual_dom$VirtualDom$property,
12173 'xmlns',
12174 $elm$json$Json$Encode$string(s));
12175};
12176var $1602$elm_feather$FeatherIcons$star = A2(
12177 $1602$elm_feather$FeatherIcons$makeBuilder,
12178 'star',
12179 _List_fromArray(
12180 [
12181 A2(
12182 $elm$svg$Svg$svg,
12183 _List_fromArray(
12184 [
12185 $1602$elm_feather$FeatherIcons$xmlns('http://www.w3.org/2000/svg'),
12186 $elm$svg$Svg$Attributes$width('24'),
12187 $elm$svg$Svg$Attributes$height('24'),
12188 $elm$svg$Svg$Attributes$viewBox('0 0 24 24'),
12189 $elm$svg$Svg$Attributes$fill('none'),
12190 $elm$svg$Svg$Attributes$stroke('currentColor'),
12191 $elm$svg$Svg$Attributes$strokeWidth('2'),
12192 $elm$svg$Svg$Attributes$strokeLinecap('round'),
12193 $elm$svg$Svg$Attributes$strokeLinejoin('round'),
12194 $elm$svg$Svg$Attributes$class('feather feather-star')
12195 ]),
12196 _List_fromArray(
12197 [
12198 A2(
12199 $elm$svg$Svg$polygon,
12200 _List_fromArray(
12201 [
12202 $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')
12203 ]),
12204 _List_Nil)
12205 ]))
12206 ]));
12207var $author$project$Icons$starIcon = $author$project$Icons$convert($1602$elm_feather$FeatherIcons$star);
12208var $author$project$Product$viewStarRating = function (i) {
12209 return A2(
12210 $rtfeldman$elm_css$Html$Styled$div,
12211 _List_Nil,
12212 A2($elm$core$List$repeat, i, $author$project$Icons$starIcon));
12213};
12214var $author$project$Product$viewRating = function (r) {
12215 return A2(
12216 $rtfeldman$elm_css$Html$Styled$div,
12217 _List_fromArray(
12218 [
12219 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12220 _List_fromArray(
12221 [
12222 A3(
12223 $rtfeldman$elm_css$Css$border3,
12224 $rtfeldman$elm_css$Css$px(1),
12225 $rtfeldman$elm_css$Css$solid,
12226 $author$project$Styles$theme.primary),
12227 $rtfeldman$elm_css$Css$borderRadius(
12228 $rtfeldman$elm_css$Css$px(4)),
12229 $rtfeldman$elm_css$Css$marginBottom(
12230 $rtfeldman$elm_css$Css$px(20)),
12231 $rtfeldman$elm_css$Css$padding(
12232 $rtfeldman$elm_css$Css$px(20))
12233 ]))
12234 ]),
12235 _List_fromArray(
12236 [
12237 A2(
12238 $rtfeldman$elm_css$Html$Styled$div,
12239 _List_fromArray(
12240 [
12241 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12242 _List_fromArray(
12243 [
12244 $rtfeldman$elm_css$Css$fontSize(
12245 $rtfeldman$elm_css$Css$px(16)),
12246 $rtfeldman$elm_css$Css$fontWeight($rtfeldman$elm_css$Css$bold),
12247 $rtfeldman$elm_css$Css$paddingBottom(
12248 $rtfeldman$elm_css$Css$px(3))
12249 ]))
12250 ]),
12251 _List_fromArray(
12252 [
12253 $rtfeldman$elm_css$Html$Styled$text(r.customerName)
12254 ])),
12255 $author$project$Product$viewStarRating(r.stars),
12256 A2(
12257 $rtfeldman$elm_css$Html$Styled$div,
12258 _List_fromArray(
12259 [
12260 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12261 _List_fromArray(
12262 [
12263 $author$project$Styles$cardSecondaryText,
12264 $rtfeldman$elm_css$Css$paddingBottom(
12265 $rtfeldman$elm_css$Css$px(12))
12266 ]))
12267 ]),
12268 _List_fromArray(
12269 [
12270 $rtfeldman$elm_css$Html$Styled$text('Reviewed on ' + r.commentDate)
12271 ])),
12272 (!_Utils_eq(r.commentText, $elm$core$Maybe$Nothing)) ? A2(
12273 $rtfeldman$elm_css$Html$Styled$div,
12274 _List_fromArray(
12275 [
12276 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12277 _List_fromArray(
12278 [$author$project$Styles$cardSupportingText]))
12279 ]),
12280 _List_fromArray(
12281 [
12282 $rtfeldman$elm_css$Html$Styled$text(
12283 A2($elm$core$Maybe$withDefault, '', r.commentText))
12284 ])) : $rtfeldman$elm_css$Html$Styled$text('')
12285 ]));
12286};
12287var $author$project$Product$AddRatingStars = function (a) {
12288 return {$: 'AddRatingStars', a: a};
12289};
12290var $author$project$Product$viewStars = A2(
12291 $rtfeldman$elm_css$Html$Styled$ul,
12292 _List_Nil,
12293 A2(
12294 $elm$core$List$map,
12295 function (i) {
12296 return A2(
12297 $rtfeldman$elm_css$Html$Styled$button,
12298 _List_fromArray(
12299 [
12300 $rtfeldman$elm_css$Html$Styled$Events$onClick(
12301 $author$project$Product$AddRatingStars(i))
12302 ]),
12303 _List_fromArray(
12304 [
12305 $rtfeldman$elm_css$Html$Styled$text(
12306 $elm$core$String$fromInt(i))
12307 ]));
12308 },
12309 _List_fromArray(
12310 [1, 2, 3, 4, 5])));
12311var $author$project$Product$viewStatus = function (s) {
12312 switch (s.$) {
12313 case 'Loading':
12314 return 'Loading';
12315 case 'Loaded':
12316 return 'Ready!';
12317 default:
12318 return 'Not loaded ...';
12319 }
12320};
12321var $author$project$Product$view = function (model) {
12322 var _v0 = model.pageStatus;
12323 if (_v0.$ === 'Loading') {
12324 return A2(
12325 $rtfeldman$elm_css$Html$Styled$div,
12326 _List_Nil,
12327 _List_fromArray(
12328 [
12329 $rtfeldman$elm_css$Html$Styled$text(
12330 $author$project$Product$viewStatus($author$project$Product$Loading))
12331 ]));
12332 } else {
12333 return A2(
12334 $rtfeldman$elm_css$Html$Styled$div,
12335 _List_fromArray(
12336 [
12337 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12338 _List_fromArray(
12339 [
12340 $rtfeldman$elm_css$Css$width(
12341 $rtfeldman$elm_css$Css$pct(60)),
12342 $rtfeldman$elm_css$Css$margin($rtfeldman$elm_css$Css$auto)
12343 ]))
12344 ]),
12345 _List_fromArray(
12346 [
12347 A2(
12348 $rtfeldman$elm_css$Html$Styled$div,
12349 _List_Nil,
12350 _List_fromArray(
12351 [
12352 $author$project$Product$viewProduct(model.listing)
12353 ])),
12354 A2(
12355 $rtfeldman$elm_css$Html$Styled$div,
12356 _List_fromArray(
12357 [
12358 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12359 _List_fromArray(
12360 [$author$project$Styles$cardPrimaryText]))
12361 ]),
12362 _List_fromArray(
12363 [
12364 $rtfeldman$elm_css$Html$Styled$text('User Reviews')
12365 ])),
12366 _Utils_eq(model.ratings, _List_Nil) ? $rtfeldman$elm_css$Html$Styled$text('Be the first to add a review.') : A2(
12367 $rtfeldman$elm_css$Html$Styled$ul,
12368 _List_fromArray(
12369 [
12370 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12371 _List_fromArray(
12372 [
12373 $rtfeldman$elm_css$Css$padding(
12374 $rtfeldman$elm_css$Css$px(0)),
12375 $rtfeldman$elm_css$Css$listStyle($rtfeldman$elm_css$Css$none)
12376 ]))
12377 ]),
12378 A2($elm$core$List$map, $author$project$Product$viewRating, model.ratings)),
12379 A2(
12380 $rtfeldman$elm_css$Html$Styled$div,
12381 _List_Nil,
12382 _List_fromArray(
12383 [
12384 $rtfeldman$elm_css$Html$Styled$text('Add Rating: ')
12385 ])),
12386 A2(
12387 $rtfeldman$elm_css$Html$Styled$div,
12388 _List_Nil,
12389 _List_fromArray(
12390 [
12391 $author$project$Product$viewStars,
12392 A4($author$project$Product$viewInput, 'text', 'Enter Comment Text', model.ratingText, $author$project$Product$AddRatingComment),
12393 A2(
12394 $rtfeldman$elm_css$Html$Styled$button,
12395 _List_fromArray(
12396 [
12397 $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Product$AddRatingPressed)
12398 ]),
12399 _List_fromArray(
12400 [
12401 $rtfeldman$elm_css$Html$Styled$text('Submit Rating')
12402 ]))
12403 ])),
12404 A2(
12405 $rtfeldman$elm_css$Html$Styled$div,
12406 _List_Nil,
12407 _List_fromArray(
12408 [
12409 A2(
12410 $rtfeldman$elm_css$Html$Styled$a,
12411 _List_fromArray(
12412 [
12413 $rtfeldman$elm_css$Html$Styled$Attributes$href('/catalog')
12414 ]),
12415 _List_fromArray(
12416 [
12417 $rtfeldman$elm_css$Html$Styled$text('Back to catalog')
12418 ]))
12419 ]))
12420 ]));
12421 }
12422};
12423var $author$project$Signup$AddressEntered = function (a) {
12424 return {$: 'AddressEntered', a: a};
12425};
12426var $author$project$Signup$CreatePressed = {$: 'CreatePressed'};
12427var $author$project$Signup$EmailEntered = function (a) {
12428 return {$: 'EmailEntered', a: a};
12429};
12430var $author$project$Signup$PassEntered = function (a) {
12431 return {$: 'PassEntered', a: a};
12432};
12433var $author$project$Signup$PhoneEntered = function (a) {
12434 return {$: 'PhoneEntered', a: a};
12435};
12436var $author$project$Signup$UserEntered = function (a) {
12437 return {$: 'UserEntered', a: a};
12438};
12439var $author$project$Signup$fieldPadding = $rtfeldman$elm_css$Html$Styled$Attributes$css(
12440 _List_fromArray(
12441 [
12442 $rtfeldman$elm_css$Css$paddingTop(
12443 $rtfeldman$elm_css$Css$px(10)),
12444 $rtfeldman$elm_css$Css$paddingBottom(
12445 $rtfeldman$elm_css$Css$px(10))
12446 ]));
12447var $author$project$Signup$viewInput = F4(
12448 function (t, p, v, toMsg) {
12449 return A2(
12450 $author$project$Styles$loginInputField,
12451 _List_fromArray(
12452 [
12453 $rtfeldman$elm_css$Html$Styled$Attributes$type_(t),
12454 $rtfeldman$elm_css$Html$Styled$Attributes$placeholder(p),
12455 $rtfeldman$elm_css$Html$Styled$Attributes$value(v),
12456 $rtfeldman$elm_css$Html$Styled$Events$onInput(toMsg)
12457 ]),
12458 _List_Nil);
12459 });
12460var $author$project$Signup$viewStatus = function (s) {
12461 switch (s.$) {
12462 case 'UsernameTaken':
12463 return 'This username is taken!';
12464 case 'InvalidPhone':
12465 return 'Invalid phone number!';
12466 case 'InvalidEmail':
12467 return 'Invalid email address!';
12468 case 'CreatedSuccessfully':
12469 return 'User created successfully';
12470 case 'CreatingUser':
12471 return 'Creating user ...';
12472 default:
12473 return '';
12474 }
12475};
12476var $author$project$Signup$view = function (model) {
12477 return A2(
12478 $rtfeldman$elm_css$Html$Styled$div,
12479 _List_fromArray(
12480 [
12481 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12482 _List_fromArray(
12483 [
12484 $rtfeldman$elm_css$Css$margin($rtfeldman$elm_css$Css$auto),
12485 $rtfeldman$elm_css$Css$marginTop(
12486 $rtfeldman$elm_css$Css$pct(10)),
12487 $rtfeldman$elm_css$Css$padding(
12488 $rtfeldman$elm_css$Css$px(20)),
12489 $rtfeldman$elm_css$Css$width(
12490 $rtfeldman$elm_css$Css$pct(30))
12491 ]))
12492 ]),
12493 _List_fromArray(
12494 [
12495 A2(
12496 $rtfeldman$elm_css$Html$Styled$div,
12497 _List_fromArray(
12498 [
12499 $author$project$Signup$fieldPadding,
12500 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12501 _List_fromArray(
12502 [$author$project$Styles$bigHeading]))
12503 ]),
12504 _List_fromArray(
12505 [
12506 $rtfeldman$elm_css$Html$Styled$text('Signup')
12507 ])),
12508 A2(
12509 $rtfeldman$elm_css$Html$Styled$div,
12510 _List_fromArray(
12511 [$author$project$Signup$fieldPadding]),
12512 _List_fromArray(
12513 [
12514 A4($author$project$Signup$viewInput, 'text', 'Username', model.username, $author$project$Signup$UserEntered)
12515 ])),
12516 A2(
12517 $rtfeldman$elm_css$Html$Styled$div,
12518 _List_fromArray(
12519 [$author$project$Signup$fieldPadding]),
12520 _List_fromArray(
12521 [
12522 A4($author$project$Signup$viewInput, 'password', 'Password', model.password, $author$project$Signup$PassEntered)
12523 ])),
12524 A2(
12525 $rtfeldman$elm_css$Html$Styled$div,
12526 _List_fromArray(
12527 [$author$project$Signup$fieldPadding]),
12528 _List_fromArray(
12529 [
12530 A4($author$project$Signup$viewInput, 'text', 'Email', model.emailId, $author$project$Signup$EmailEntered)
12531 ])),
12532 A2(
12533 $rtfeldman$elm_css$Html$Styled$div,
12534 _List_fromArray(
12535 [$author$project$Signup$fieldPadding]),
12536 _List_fromArray(
12537 [
12538 A4($author$project$Signup$viewInput, 'text', 'Phone Number', model.phoneNumber, $author$project$Signup$PhoneEntered)
12539 ])),
12540 A2(
12541 $rtfeldman$elm_css$Html$Styled$div,
12542 _List_fromArray(
12543 [$author$project$Signup$fieldPadding]),
12544 _List_fromArray(
12545 [
12546 A4(
12547 $author$project$Signup$viewInput,
12548 'text',
12549 'Shipping Address',
12550 A2($elm$core$Maybe$withDefault, '', model.address),
12551 $author$project$Signup$AddressEntered)
12552 ])),
12553 A2(
12554 $rtfeldman$elm_css$Html$Styled$div,
12555 _List_fromArray(
12556 [
12557 $author$project$Signup$fieldPadding,
12558 $rtfeldman$elm_css$Html$Styled$Attributes$css(
12559 _List_fromArray(
12560 [
12561 $rtfeldman$elm_css$Css$textAlign($rtfeldman$elm_css$Css$center)
12562 ]))
12563 ]),
12564 _List_fromArray(
12565 [
12566 A2(
12567 $author$project$Styles$furbyButton,
12568 _List_fromArray(
12569 [
12570 $rtfeldman$elm_css$Html$Styled$Events$onClick($author$project$Signup$CreatePressed)
12571 ]),
12572 _List_fromArray(
12573 [
12574 $rtfeldman$elm_css$Html$Styled$text('Create Account')
12575 ]))
12576 ])),
12577 A2(
12578 $rtfeldman$elm_css$Html$Styled$div,
12579 _List_fromArray(
12580 [$author$project$Signup$fieldPadding]),
12581 _List_fromArray(
12582 [
12583 $rtfeldman$elm_css$Html$Styled$text('Already have a account? '),
12584 A2(
12585 $rtfeldman$elm_css$Html$Styled$a,
12586 _List_fromArray(
12587 [
12588 $rtfeldman$elm_css$Html$Styled$Attributes$href('/login')
12589 ]),
12590 _List_fromArray(
12591 [
12592 $rtfeldman$elm_css$Html$Styled$text('Login >')
12593 ]))
12594 ])),
12595 $rtfeldman$elm_css$Html$Styled$text(
12596 $author$project$Signup$viewStatus(model.status))
12597 ]));
12598};
12599var $author$project$Main$view = function (model) {
12600 var _v0 = model.location;
12601 switch (_v0.$) {
12602 case 'HomePage':
12603 return {
12604 body: $elm$core$List$singleton(
12605 $rtfeldman$elm_css$Html$Styled$toUnstyled(
12606 A2(
12607 $rtfeldman$elm_css$Html$Styled$div,
12608 _List_Nil,
12609 _List_fromArray(
12610 [
12611 A2(
12612 $rtfeldman$elm_css$Html$Styled$ul,
12613 _List_Nil,
12614 A2(
12615 $elm$core$List$map,
12616 function (l) {
12617 return A2(
12618 $rtfeldman$elm_css$Html$Styled$li,
12619 _List_Nil,
12620 _List_fromArray(
12621 [
12622 A2(
12623 $rtfeldman$elm_css$Html$Styled$a,
12624 _List_fromArray(
12625 [
12626 $rtfeldman$elm_css$Html$Styled$Attributes$href(l)
12627 ]),
12628 _List_fromArray(
12629 [
12630 $rtfeldman$elm_css$Html$Styled$text(l)
12631 ]))
12632 ]));
12633 },
12634 _List_fromArray(
12635 ['/login', '/catalog', '/cart'])))
12636 ])))),
12637 title: 'Login'
12638 };
12639 case 'LoginPage':
12640 return {
12641 body: $elm$core$List$singleton(
12642 $rtfeldman$elm_css$Html$Styled$toUnstyled(
12643 A2(
12644 $rtfeldman$elm_css$Html$Styled$map,
12645 $author$project$Main$LoginMessage,
12646 $author$project$Login$view(model.loginModel)))),
12647 title: 'Login'
12648 };
12649 case 'SignupPage':
12650 return {
12651 body: $elm$core$List$singleton(
12652 $rtfeldman$elm_css$Html$Styled$toUnstyled(
12653 A2(
12654 $rtfeldman$elm_css$Html$Styled$map,
12655 $author$project$Main$SignupMessage,
12656 $author$project$Signup$view(model.signupModel)))),
12657 title: 'Signup'
12658 };
12659 case 'NotFoundPage':
12660 return {
12661 body: $elm$core$List$singleton(
12662 $rtfeldman$elm_css$Html$Styled$toUnstyled(
12663 A2(
12664 $rtfeldman$elm_css$Html$Styled$div,
12665 _List_Nil,
12666 _List_fromArray(
12667 [
12668 $rtfeldman$elm_css$Html$Styled$text('404 - Not Found'),
12669 A2(
12670 $rtfeldman$elm_css$Html$Styled$a,
12671 _List_fromArray(
12672 [
12673 $rtfeldman$elm_css$Html$Styled$Attributes$href('/')
12674 ]),
12675 _List_fromArray(
12676 [
12677 $rtfeldman$elm_css$Html$Styled$text('Go back >')
12678 ]))
12679 ])))),
12680 title: '404 - Not Found'
12681 };
12682 case 'CatalogPage':
12683 return {
12684 body: A2(
12685 $author$project$Main$pageWrap,
12686 model,
12687 A2(
12688 $rtfeldman$elm_css$Html$Styled$map,
12689 $author$project$Main$CatalogMessage,
12690 $author$project$Catalog$view(model.catalogModel))),
12691 title: 'Catalog'
12692 };
12693 case 'CartPage':
12694 return {
12695 body: A2(
12696 $author$project$Main$pageWrap,
12697 model,
12698 A2(
12699 $rtfeldman$elm_css$Html$Styled$map,
12700 $author$project$Main$CartMessage,
12701 $author$project$Cart$view(model.cartModel))),
12702 title: 'Cart'
12703 };
12704 case 'CheckoutPage':
12705 return {
12706 body: A2(
12707 $author$project$Main$pageWrap,
12708 model,
12709 A2(
12710 $rtfeldman$elm_css$Html$Styled$map,
12711 $author$project$Main$CheckoutMessage,
12712 $author$project$Checkout$view(model.checkoutModel))),
12713 title: 'Checkout'
12714 };
12715 default:
12716 var item = _v0.a;
12717 return {
12718 body: A2(
12719 $author$project$Main$pageWrap,
12720 model,
12721 A2(
12722 $rtfeldman$elm_css$Html$Styled$map,
12723 $author$project$Main$ProductMessage,
12724 $author$project$Product$view(model.productModel))),
12725 title: 'Product ' + $elm$core$String$fromInt(item)
12726 };
12727 }
12728};
12729var $author$project$Main$main = $elm$browser$Browser$application(
12730 {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});
12731_Platform_export({'Main':{'init':$author$project$Main$main(
12732 $elm$json$Json$Decode$succeed(_Utils_Tuple0))(0)}});}(this)); \ No newline at end of file