aboutsummaryrefslogtreecommitdiff
path: root/frontend/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/main.js')
-rw-r--r--frontend/main.js12732
1 files changed, 0 insertions, 12732 deletions
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