@@ -0,0 +1,10164 @@
1+var jsdom = require("jsdom");
2+var callback = function(errors, window) {
3+ var document = window.document;
6+var Elm = {}; Elm.Native = {}; Elm.Native.Graphics = {};
7+var ElmRuntime = {}; ElmRuntime.Render = {};
8+Elm.Native.JavaScript = {};
9+Elm.Native.JavaScript.make = function(elm) {
10+ elm.Native = elm.Native || {};
11+ elm.Native.JavaScript = elm.Native.JavaScript || {};
12+ if (elm.Native.JavaScript.values) return elm.Native.JavaScript.values;
14+ var List = Elm.Native.List.make(elm);
15+ var Render = ElmRuntime.use(ElmRuntime.Render.Element);
19+ if (type === 'number' ) return v;
20+ if (type === 'boolean') return v;
21+ if (type === 'string' ) return v;
22+ if (v instanceof Array) {
25+ for (var i = 0; i < len; ++i) {
26+ var x = fromJS(v[i]);
27+ if (x !== null) arr.push(x);
29+ return List.fromArray(arr);
31+ if (type === 'object') {
34+ var x = fromJS(v[f]);
35+ if (x !== null) rec[f] = x;
44+ if (type === 'number' || type === 'boolean' || type === 'string') return v;
45+ if (type === 'object' && '_' in v) {
49+ if (x !== null) obj[k] = x;
53+ if (type === 'object' && (v.ctor === '::' || v.ctor === '[]')) {
54+ var array = List.toArray(v);
55+ for (var i = array.length; i--; ) {
56+ array[i] = toJS(array[i]);
63+ function fromRecord(r) {
64+ if (typeof r === 'object' && '_' in r) {
67+ throw new Error("'fromRecord' must be called on a record.");
70+ return elm.Native.JavaScript.values = {
72+ fromRecord : fromRecord
76+Elm.Native.Regex = {};
77+Elm.Native.Regex.make = function(elm) {
78+ elm.Native = elm.Native || {};
79+ elm.Native.Regex = elm.Native.Regex || {};
80+ if (elm.Native.Regex.values) return elm.Native.Regex.values;
81+ if ('values' in Elm.Native.Regex)
82+ return elm.Native.Regex.values = Elm.Native.Regex.values;
84+ var List = Elm.Native.List.make(elm);
85+ var Maybe = Elm.Maybe.make(elm);
87+ function escape(str) {
88+ return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
90+ function caseInsensitive(re) {
91+ return new RegExp(re.source, 'gi');
93+ function regex(raw) {
94+ return new RegExp(raw, 'g');
97+ function contains(re, string) {
98+ return string.match(re) !== null;
101+ function find(n, re, str) {
102+ n = n.ctor === "All" ? Infinity : n._0;
107+ while (number++ < n && (result = re.exec(string))) {
108+ var i = result.length - 1;
109+ var subs = new Array(i);
111+ var submatch = result[i];
112+ subs[--i] = submatch === undefined
114+ : Maybe.Just(submatch);
119+ submatches: List.fromArray(subs),
120+ index: result.index,
124+ return List.fromArray(out);
127+ function replace(n, re, replacer, string) {
128+ n = n.ctor === "All" ? Infinity : n._0;
130+ function jsReplacer(match) {
131+ if (count++ > n) return match;
132+ var i = arguments.length-3;
133+ var submatches = new Array(i);
135+ var submatch = arguments[i];
136+ submatches[--i] = submatch === undefined
138+ : Maybe.Just(submatch);
143+ submatches:List.fromArray(submatches),
144+ index:arguments[i-1],
148+ return string.replace(re, jsReplacer);
151+ function split(n, re, str) {
152+ if (n === Infinity) {
153+ return List.fromArray(string.split(re));
158+ var start = re.lastIndex;
160+ if (!(result = re.exec(string))) break;
161+ out.push(string.slice(start, result.index));
162+ start = re.lastIndex;
164+ out.push(string.slice(start));
165+ return List.fromArray(out);
168+ return Elm.Native.Regex.values = {
170+ caseInsensitive: caseInsensitive,
173+ contains: F2(contains),
175+ replace: F4(replace),
179+Elm.Native.Array = {};
180+Elm.Native.Array.make = function(elm) {
181+ elm.Native = elm.Native || {};
182+ elm.Native.Array = elm.Native.Array || {};
183+ if (elm.Native.Array.values) return elm.Native.Array.values;
184+ if ('values' in Elm.Native.Array)
185+ return elm.Native.Array.values = Elm.Native.Array.values;
187+ var List = Elm.Native.List.make(elm);
189+ // A RRB-Tree has two distinct data types.
190+ // Leaf -> "height" is always 0
191+ // "table" is an array of elements
192+ // Node -> "height" is always greater than 0
193+ // "table" is an array of child nodes
194+ // "lengths" is an array of accumulated lengths of the child nodes
196+ // M is the maximal table size. 32 seems fast. E is the allowed increase
197+ // of search steps when concatting to find an index. Lower values will
198+ // decrease balancing, but will increase search steps.
203+ var empty = { ctor:"_Array", height:0, table:new Array() };
205+ // Gets the value at index i recursively.
206+ function get(i, a) {
207+ if (a.height == 0) {
208+ if (i < a.table.length) {
211+ throw new Error("Index "+ i +" is out of range. Check the length of your array first or use getSafe or getMaybe.");
215+ var slot = getSlot(i, a);
216+ var sub = slot > 0 ? a.lengths[slot-1] : 0;
217+ return get(i - sub, a.table[slot]);
220+ // Sets the value at the index i. Only the nodes leading to i will get
221+ // copied and updated.
222+ function set(i, item, a) {
223+ if (length(a) <= i) {
226+ var newA = nodeCopy(a);
227+ newA.table = a.table.slice();
229+ if (a.height == 0) {
230+ newA.table[i] = item;
232+ var slot = getSlot(i, a);
233+ var sub = slot > 0 ? a.lengths[slot-1] : 0;
234+ newA.table[slot] = set(i - sub, item, a.table[slot]);
239+ // Pushes an item via push_ to the bottom right of a tree.
240+ function push(item, a) {
241+ var pushed = push_(item, a);
242+ if (pushed !== null) {
246+ newTree = create(item, a.height);
247+ return siblise(a, newTree);
250+ // Recursively tries to push an item to the bottom-right most
251+ // tree possible. If there is no space left for the item,
252+ // null will be returned.
253+ function push_(item, a) {
254+ // Handle resursion stop at leaf level.
255+ if (a.height == 0) {
256+ if (a.table.length < M) {
257+ var newA = { ctor:"_Array", height:0, table:a.table.slice() };
258+ newA.table.push(item);
266+ var pushed = push_(item, botRight(a));
268+ // There was space in the bottom right tree, so the slot will
270+ if (pushed != null) {
271+ var newA = nodeCopy(a);
272+ newA.table[newA.table.length - 1] = pushed;
273+ newA.lengths[newA.lengths.length - 1]++;
277+ // When there was no space left, check if there is space left
278+ // for a new slot with a tree which contains only the item
280+ if (a.table.length < M) {
281+ var newSlot = create(item, a.height - 1);
282+ var newA = nodeCopy(a);
283+ newA.table.push(newSlot);
284+ newA.lengths.push(newA.lengths[newA.lengths.length - 1] + length(newSlot));
291+ // Converts an array into a list of elements.
292+ function toList(a) {
293+ return toList_(List.Nil, a);
296+ function toList_(list, a) {
297+ for (var i = a.table.length - 1; i >= 0; i--) {
298+ list = a.height == 0 ? List.Cons(a.table[i], list) : toList_(list, a.table[i]);
303+ // Maps a function over the elements of an array.
304+ function map(f, a) {
305+ var newA = { ctor:"_Array", height:a.height, table:new Array(a.table) };
306+ if (a.height > 0) { newA.lengths = a.lengths; }
307+ for (var i = 0; i < a.table.length; i++) {
308+ newA.table[i] = a.height == 0 ? f(a.table[i]) : map(f, a.table[i]);
313+ // Maps a function over the elements with their index as first argument.
314+ function indexedMap(f, a) {
315+ var newA = { ctor:"_Array", height:a.height, table:new Array(a.table) };
316+ if (a.height > 0) { newA.lengths = a.lengths; }
317+ for (var i = 0; i < a.table.length; i++) {
318+ newA.table[i] = a.height == 0 ? A2(f, i, a.table[i]) : indexedMap(f, a.table[i]);
323+ function foldl(f, b, a) {
324+ for (var i = a.table.length - 1; i >= 0; i--) {
325+ b = A2(f, a.height == 0 ? a.table[i] : foldl(f, b, a.table[i]), b);
330+ function foldr(f, b, a) {
331+ for (var i = 0; i < a.table.length; i++) {
332+ b = A2(f, a.height == 0 ? a.table[i] : foldr(f, b, a.table[i]), b);
337+ // Returns a sliced tree. "to" is inclusive, but this may change,
338+ // when I understand, why e.g. JS does not handle it this way. :-)
339+ // If "from" or "to" is negative, they will select from the end on.
340+ // TODO: currently, it slices the right, then the left. This can be
342+ function slice(from, to, a) {
343+ if (from < 0) { from += length(a); }
344+ if (to < 0) { to += length(a); }
345+ return sliceLeft(from, sliceRight(to, a));
348+ function sliceRight(to, a) {
349+ if (to == length(a)) {
353+ // Handle leaf level.
354+ if (a.height == 0) {
355+ var newA = { ctor:"_Array", height:0 };
356+ newA.table = a.table.slice(0, to + 1);
360+ // Slice the right recursively.
361+ var right = getSlot(to, a);
362+ var sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]);
364+ // Maybe the a node is not even needed, as sliced contains the whole slice.
370+ var newA = { ctor:"_Array", height:a.height
371+ , table:a.table.slice(0, right + 1)
372+ , lengths:a.lengths.slice(0, right + 1) };
373+ newA.table[right] = sliced;
374+ newA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0);
378+ function sliceLeft(from, a) {
383+ // Handle leaf level.
384+ if (a.height == 0) {
385+ var newA = { ctor:"_Array", height:0 };
386+ newA.table = a.table.slice(from, a.table.length + 1);
390+ // Slice the left recursively.
391+ var left = getSlot(from, a);
392+ var sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]);
394+ // Maybe the a node is not even needed, as sliced contains the whole slice.
395+ if (left == a.table.length - 1) {
400+ var newA = { ctor:"_Array", height:a.height
401+ , table:a.table.slice(left, a.table.length + 1)
402+ , lengths:new Array(a.table.length - left) };
403+ newA.table[left] = sliced;
405+ for (var i = 0; i < newA.table.length; i++) {
406+ len += length(newA.table[i]);
407+ newA.lengths[i] = len;
413+ // Concats two trees.
414+ // TODO: Add support for concatting trees of different sizes. Current
415+ // behavior will just rise the lower tree and then concat them.
416+ function concat(a, b) {
417+ if (b.height > a.height) { return concat(parentise(a, b.height), b); }
418+ if (a.height > b.height) { return concat(a, parentise(b, a.height)); }
419+ if (a.height == 0) { return concat(parentise(a, 1), parentise(b, 1)); }
421+ var c = concat_(a, b);
422+ if (c[1].table.length > 0) {
423+ return siblise(c[0], c[1]);
429+ // Returns an array of two nodes. The second node _may_ be empty. This case
430+ // needs to be handled by the function, that called concat_. May be only
431+ // called for trees with an minimal height of 1.
432+ function concat_(a, b) {
433+ if (a.height == 1) {
434+ // Check if balancing is needed and return based on that.
435+ var toRemove = calcToRemove(a, b);
436+ if (toRemove <= E) {
440+ return shuffle(a, b, toRemove);
443+ var concated = concat_(botRight(a), botLeft(b));
444+ a = nodeCopy(a), b = nodeCopy(b);
446+ // Adjust the bottom right side of the new tree.
447+ a.table[a.table.length - 1] = concated[0];
448+ a.lengths[a.lengths.length - 1] = length(concated[0])
449+ a.lengths[a.lengths.length - 1] += a.lengths.length > 1 ? a.lengths[a.lengths.length - 2] : 0;
451+ // Adjust the bottom left side of the new tree.
452+ if (concated[1].table.length > 0) {
453+ b.table[0] = concated[1];
454+ b.lengths[0] = length(concated[1]);
455+ for (var i = 1, len = length(b.table[0]); i < b.lengths.length; i++) {
456+ len += length(b.table[i]);
461+ for (var i = 1; i < b.lengths.length; i++) {
462+ b.lengths[i] = b.lengths[i] - b.lengths[0];
467+ // Check if balancing is needed and return based on that.
468+ var toRemove = calcToRemove(a, b);
469+ if (toRemove <= E || b.table.length == 0) {
473+ return shuffle(a, b, toRemove);
476+ // Returns the extra search steps for E. Refer to the paper.
477+ function calcToRemove(a, b) {
479+ for (var i = 0; i < a.table.length; i++) {
480+ subLengths += a.table[i].table.length;
482+ for (var i = 0; i < b.table.length; i++) {
483+ subLengths += b.table[i].table.length;
486+ var toRemove = a.table.length + b.table.length
487+ return toRemove - (Math.floor((subLengths - 1) / M) + 1);
490+ // get2, set2 and saveSlot are helpers for accessing elements over two arrays.
491+ function get2(a, b, index) {
492+ return index < a.length ? a[index] : b[index - a.length];
495+ function set2(a, b, index, value) {
496+ if (index < a.length) {
499+ b[index - a.length] = value;
503+ function saveSlot(a, b, index, slot) {
504+ set2(a.table, b.table, index, slot);
506+ var l = (index == 0 || index == a.lengths.length) ?
507+ 0 : get2(a.lengths, a.lengths, index - 1);
508+ set2(a.lengths, b.lengths, index, l + length(slot));
511+ // Creates a node or leaf with a given length at their arrays for perfomance.
512+ // Is only used by shuffle.
513+ function createNode(h, length) {
514+ if (length < 0) { length = 0; }
515+ var a = { ctor:"_Array", height:h, table:new Array(length) };
517+ a.lengths = new Array(length);
522+ // Returns an array of two balanced nodes.
523+ function shuffle(a, b, toRemove) {
524+ var newA = createNode(a.height, Math.min(M, a.table.length + b.table.length - toRemove));
525+ var newB = createNode(a.height, newA.table.length - (a.table.length + b.table.length - toRemove));
527+ // Skip the slots with size M. More precise: copy the slot references
530+ while (get2(a.table, b.table, read).table.length % M == 0) {
531+ set2(newA.table, newB.table, read, get2(a.table, b.table, read));
532+ set2(newA.lengths, newB.lengths, read, get2(a.lengths, b.lengths, read));
536+ // Pulling items from left to right, caching in a slot before writing
537+ // it into the new nodes.
539+ var slot = new createNode(a.height - 1, 0);
542+ // If the current slot is still containing data, then there will be at
543+ // least one more write, so we do not break this loop yet.
544+ while (read - write - (slot.table.length > 0 ? 1 : 0) < toRemove) {
545+ // Find out the max possible items for copying.
546+ var source = get2(a.table, b.table, read);
547+ var to = Math.min(M - slot.table.length, source.table.length)
549+ // Copy and adjust size table.
550+ slot.table = slot.table.concat(source.table.slice(from, to));
551+ if (slot.height > 0) {
552+ var len = slot.lengths.length;
553+ for (var i = len; i < len + to - from; i++) {
554+ slot.lengths[i] = length(slot.table[i]);
555+ slot.lengths[i] += (i > 0 ? slot.lengths[i - 1] : 0);
561+ // Only proceed to next slots[i] if the current one was
563+ if (source.table.length <= to) {
567+ // Only create a new slot if the current one is filled up.
568+ if (slot.table.length == M) {
569+ saveSlot(newA, newB, write, slot);
570+ slot = createNode(a.height - 1,0);
575+ // Cleanup after the loop. Copy the last slot into the new nodes.
576+ if (slot.table.length > 0) {
577+ saveSlot(newA, newB, write, slot);
581+ // Shift the untouched slots to the left
582+ while (read < a.table.length + b.table.length ) {
583+ saveSlot(newA, newB, write, get2(a.table, b.table, read));
587+ return [newA, newB];
590+ // Navigation functions
591+ function botRight(a) { return a.table[a.table.length - 1]; }
592+ function botLeft(a) { return a.table[0]; }
594+ // Copies a node for updating. Note that you should not use this if
595+ // only updating only one of "table" or "lengths" for performance reasons.
596+ function nodeCopy(a) {
597+ var newA = { ctor:"_Array", height:a.height
598+ , table:a.table.slice() };
599+ if (a.height > 0) { newA.lengths = a.lengths.slice(); }
603+ // Returns how many items are in the tree.
604+ function length(a) {
605+ if (a.height == 0) {
606+ return a.table.length;
608+ return a.lengths[a.lengths.length - 1];
612+ // Calculates in which slot of "table" the item probably is, then
613+ // find the exact slot via forward searching in "lengths". Returns the index.
614+ function getSlot(i, a) {
615+ var slot = Math.floor(i / (Math.pow(M, a.height)));
616+ while (a.lengths[slot] <= i) {
622+ // Recursively creates a tree with a given height containing
623+ // only the given item.
624+ function create(item, h) {
626+ return { ctor:"_Array", height:0
629+ return { ctor:"_Array", height:h
630+ , table:[create(item, h - 1)]
635+ // Recursively creates a tree that contains the given tree.
636+ function parentise(tree, h) {
637+ if (h == tree.height) {
640+ return { ctor:"_Array", height:h
641+ , table:[parentise(tree, h - 1)]
642+ , lengths:[length(tree)] };
646+ // Emphasizes blood brotherhood beneath two trees.
647+ function siblise(a, b) {
648+ return { ctor:"_Array", height:a.height + 1
650+ , lengths:[length(a), length(a) + length(b)] };
653+ Elm.Native.Array.values = {
662+ indexedMap:F2(indexedMap),
668+ return elm.Native.Array.values = Elm.Native.Array.values;
670+Elm.Native.Show = {};
671+Elm.Native.Show.make = function(elm) {
672+ elm.Native = elm.Native || {};
673+ elm.Native.Show = elm.Native.Show || {};
674+ if (elm.Native.Show.values) return elm.Native.Show.values;
676+ var NList = Elm.Native.List.make(elm);
677+ var Array = Elm.Array.make(elm);
678+ var List = Elm.List.make(elm);
679+ var Dict = Elm.Dict.make(elm);
680+ var Tuple2 = Elm.Native.Utils.make(elm).Tuple2;
682+ var toString = function(v) {
683+ var type = typeof v;
684+ if (type === "function") {
685+ var name = v.func ? v.func.name : v.name;
686+ return '<function' + (name === '' ? '' : ': ') + name + '>';
687+ } else if (type === "boolean") {
688+ return v ? "True" : "False";
689+ } else if (type === "number") {
691+ } else if ((v instanceof String) && v.isChar) {
692+ return "'" + addSlashes(v) + "'";
693+ } else if (type === "string") {
694+ return '"' + addSlashes(v) + '"';
695+ } else if (type === "object" && '_' in v && probablyPublic(v)) {
697+ for (var k in v._) {
698+ for (var i = v._[k].length; i--; ) {
699+ output.push(k + " = " + toString(v._[k][i]));
703+ if (k === '_') continue;
704+ output.push(k + " = " + toString(v[k]));
706+ if (output.length === 0) return "{}";
707+ return "{ " + output.join(", ") + " }";
708+ } else if (type === "object" && 'ctor' in v) {
709+ if (v.ctor.substring(0,6) === "_Tuple") {
712+ if (k === 'ctor') continue;
713+ output.push(toString(v[k]));
715+ return "(" + output.join(",") + ")";
716+ } else if (v.ctor === "_Array") {
717+ var list = Array.toList(v);
718+ return "Array.fromList " + toString(list);
719+ } else if (v.ctor === "::") {
720+ var output = '[' + toString(v._0);
722+ while (v.ctor === "::") {
723+ output += "," + toString(v._0);
726+ return output + ']';
727+ } else if (v.ctor === "[]") {
729+ } else if (v.ctor === "RBNode" || v.ctor === "RBEmpty") {
730+ var cons = F3(function(k,v,acc){return NList.Cons(Tuple2(k,v),acc)});
731+ var list = A3(Dict.foldr, cons, NList.Nil, v);
733+ if (list.ctor === "::" && list._0._1.ctor === "_Tuple0") {
735+ list = A2(List.map, function(x){return x._0}, list);
737+ return name + ".fromList " + toString(list);
741+ if (i === 'ctor') continue;
742+ var str = toString(v[i]);
743+ var parenless = str[0] === '{' || str[0] === '<' || str.indexOf(' ') < 0;
744+ output += ' ' + (parenless ? str : '(' + str + ')');
746+ return v.ctor + output;
749+ if (type === 'object' && 'recv' in v) return '<signal>';
750+ return "<internal structure>";
753+ function addSlashes(str) {
754+ return str.replace(/\\/g, '\\\\')
755+ .replace(/\n/g, '\\n')
756+ .replace(/\t/g, '\\t')
757+ .replace(/\r/g, '\\r')
758+ .replace(/\v/g, '\\v')
759+ .replace(/\0/g, '\\0')
760+ .replace(/\'/g, "\\'")
761+ .replace(/\"/g, '\\"');
764+ function probablyPublic(v) {
765+ var keys = Object.keys(v);
766+ var len = keys.length;
769+ && 'element' in v) return false;
771+ && 'horizontal' in v
774+ && 'y' in v) return false;
781+ && 'form' in v) return false;
785+ return elm.Native.Show.values = { show:toString };
787+Elm.Native.Debug = {};
788+Elm.Native.Debug.make = function(elm) {
789+ elm.Native = elm.Native || {};
790+ elm.Native.Debug = elm.Native.Debug || {};
791+ if (elm.Native.Debug.values) return elm.Native.Debug.values;
793+ var show = Elm.Native.Show.make(elm).show;
795+ function log(tag,value) {
796+ var msg = tag + ': ' + show(value);
797+ var process = process || {};
798+ if (process.stdout) {
799+ process.stdout.write(msg);
806+ return elm.Native.Debug.values = {
811+Elm.Native.Transform2D = {};
812+Elm.Native.Transform2D.make = function(elm) {
814+ elm.Native = elm.Native || {};
815+ elm.Native.Transform2D = elm.Native.Transform2D || {};
816+ if (elm.Native.Transform2D.values) return elm.Native.Transform2D.values;
819+ if (typeof Float32Array === 'undefined') {
821+ this.length = arr.length;
833+ // layout of matrix in an array is
839+ // new A([ m11, m12, dx, m21, m22, dy ])
841+ var identity = new A([1,0,0,0,1,0]);
842+ function matrix(m11, m12, m21, m22, dx, dy) {
843+ return new A([m11, m12, dx, m21, m22, dy]);
845+ function rotation(t) {
846+ var c = Math.cos(t);
847+ var s = Math.sin(t);
848+ return new A([c, -s, 0, s, c, 0]);
850+ function rotate(t,m) {
851+ var c = Math.cos(t);
852+ var s = Math.sin(t);
853+ var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];
854+ return new A([m11*c + m12*s, -m11*s + m12*c, m[2],
855+ m21*c + m22*s, -m21*s + m22*c, m[5]]);
858+ function move(xy,m) {
861+ var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];
862+ return new A([m11, m12, m11*x + m12*y + m[2],
863+ m21, m22, m21*x + m22*y + m[5]]);
865+ function scale(s,m) { return new A([m[0]*s, m[1]*s, m[2], m[3]*s, m[4]*s, m[5]]); }
866+ function scaleX(x,m) { return new A([m[0]*x, m[1], m[2], m[3]*x, m[4], m[5]]); }
867+ function scaleY(y,m) { return new A([m[0], m[1]*y, m[2], m[3], m[4]*y, m[5]]); }
868+ function reflectX(m) { return new A([-m[0], m[1], m[2], -m[3], m[4], m[5]]); }
869+ function reflectY(m) { return new A([m[0], -m[1], m[2], m[3], -m[4], m[5]]); }
871+ function transform(m11, m21, m12, m22, mdx, mdy, n) {
872+ var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];
873+ return new A([m11*n11 + m12*n21,
875+ m11*ndx + m12*ndy + mdx,
878+ m21*ndx + m22*ndy + mdy]);
881+ function multiply(m, n) {
882+ var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4], mdx = m[2], mdy = m[5];
883+ var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];
884+ return new A([m11*n11 + m12*n21,
886+ m11*ndx + m12*ndy + mdx,
889+ m21*ndx + m22*ndy + mdy]);
892+ return elm.Native.Transform2D.values = {
896+ multiply:F2(multiply)
898+ transform:F7(transform),
911+Elm.Native.Basics = {};
912+Elm.Native.Basics.make = function(elm) {
913+ elm.Native = elm.Native || {};
914+ elm.Native.Basics = elm.Native.Basics || {};
915+ if (elm.Native.Basics.values) return elm.Native.Basics.values;
917+ var JS = Elm.Native.JavaScript.make(elm);
918+ var Utils = Elm.Native.Utils.make(elm);
920+ function div(a,b) { return (a/b)|0; }
921+ function rem(a,b) { return a % b; }
922+ var mod = Utils.mod;
923+ function abs(x) { return x < 0 ? -x : x; }
924+ function logBase(base,n) { return Math.log(n) / Math.log(base); }
925+ function min(a,b) { return Utils.cmp(a,b) < 0 ? a : b; }
926+ function max(a,b) { return Utils.cmp(a,b) > 0 ? a : b; }
927+ function clamp(lo,hi,n) {
928+ return Utils.cmp(n,lo) < 0 ? lo : Utils.cmp(n,hi) > 0 ? hi : n; }
929+ function xor(a,b) { return a !== b; }
930+ function not(b) { return !b; }
931+ function isInfinite(n) { return n === Infinity || n === -Infinity }
933+ function truncate(n) { return n|0; }
948+ atan2:F2(Math.atan2),
952+ logBase:F2(logBase),
956+ compare:Utils.compare,
965+ toFloat:function(x) { return x; },
967+ isInfinite:isInfinite
970+ return elm.Native.Basics.values = basics;
972+Elm.Native.Text = {};
973+Elm.Native.Text.make = function(elm) {
974+ elm.Native = elm.Native || {};
975+ elm.Native.Text = elm.Native.Text || {};
976+ if (elm.Native.Text.values) return elm.Native.Text.values;
978+ var toCss = Elm.Native.Color.make(elm).toCss;
979+ var Element = Elm.Graphics.Element.make(elm);
980+ var List = Elm.Native.List.make(elm);
981+ var Utils = Elm.Native.Utils.make(elm);
983+ function makeSpaces(s) {
984+ if (s.length == 0) { return s; }
985+ var arr = s.split('');
986+ if (arr[0] == ' ') { arr[0] = " " }
987+ for (var i = arr.length; --i; ) {
988+ if (arr[i][0] == ' ' && arr[i-1] == ' ') {
989+ arr[i-1] = arr[i-1] + arr[i];
993+ for (var i = arr.length; i--; ) {
994+ if (arr[i].length > 1 && arr[i][0] == ' ') {
995+ var spaces = arr[i].split('');
996+ for (var j = spaces.length - 2; j >= 0; j -= 2) {
997+ spaces[j] = ' ';
999+ arr[i] = spaces.join('');
1002+ arr = arr.join('');
1003+ if (arr[arr.length-1] === " ") {
1004+ return arr.slice(0,-1) + ' ';
1009+ function properEscape(str) {
1010+ if (str.length == 0) return str;
1011+ str = str //.replace(/&/g, "&")
1012+ .replace(/"/g, '"')
1013+ .replace(/'/g, "'")
1014+ .replace(/</g, "<")
1015+ .replace(/>/g, ">")
1016+ .replace(/\n/g, "<br/>");
1017+ var arr = str.split('<br/>');
1018+ for (var i = arr.length; i--; ) {
1019+ arr[i] = makeSpaces(arr[i]);
1021+ return arr.join('<br/>');
1024+ function toText(str) { return Utils.txt(properEscape(str)); }
1026+ // conversions from Elm values to CSS
1027+ function toTypefaces(list) {
1028+ var typefaces = List.toArray(list);
1029+ for (var i = typefaces.length; i--; ) {
1030+ var typeface = typefaces[i];
1031+ if (typeface.indexOf(' ') > -1) {
1032+ typefaces[i] = "'" + typeface + "'";
1035+ return typefaces.join(',');
1037+ function toLine(line) {
1038+ var ctor = line.ctor;
1039+ return ctor === 'Under' ? 'underline' :
1040+ ctor === 'Over' ? 'overline' : 'line-through';
1043+ // setting styles of Text
1044+ function style(style, text) {
1045+ var newText = '<span style="color:' + toCss(style.color) + ';'
1046+ if (style.typeface.ctor !== '[]') {
1047+ newText += 'font-family:' + toTypefaces(style.typeface) + ';'
1049+ if (style.height.ctor !== "Nothing") {
1050+ newText += 'font-size:' + style.height._0 + 'px;';
1053+ newText += 'font-weight:bold;';
1055+ if (style.italic) {
1056+ newText += 'font-style:italic;';
1058+ if (style.line.ctor !== 'Nothing') {
1059+ newText += 'text-decoration:' + toLine(style.line._0) + ';';
1061+ newText += '">' + Utils.makeText(text) + '</span>'
1062+ return Utils.txt(newText);
1064+ function height(px, text) {
1065+ return { style: 'font-size:' + px + 'px;', text:text }
1067+ function typeface(names, text) {
1068+ return { style: 'font-family:' + toTypefaces(names) + ';', text:text }
1070+ function monospace(text) {
1071+ return { style: 'font-family:monospace;', text:text }
1073+ function italic(text) {
1074+ return { style: 'font-style:italic;', text:text }
1076+ function bold(text) {
1077+ return { style: 'font-weight:bold;', text:text }
1079+ function link(href, text) {
1080+ return { href: toText(href), text:text };
1082+ function line(line, text) {
1083+ return { style: 'text-decoration:' + toLine(line) + ';', text:text };
1086+ function color(color, text) {
1087+ return { style: 'color:' + toCss(color) + ';', text:text };
1090+ function block(align) {
1091+ return function(text) {
1094+ html : Utils.makeText(text),
1099+ var pos = A2(Utils.htmlHeight, 0, raw);
1100+ return A3(Element.newElement, pos._0, pos._1, raw);
1104+ function markdown(text, guid) {
1112+ var pos = A2(Utils.htmlHeight, 0, raw);
1113+ return A3(Element.newElement, pos._0, pos._1, raw);
1116+ return elm.Native.Text.values = {
1119+ height : F2(height),
1123+ monospace : monospace,
1124+ typeface : F2(typeface),
1128+ leftAligned : block('left'),
1129+ rightAligned : block('right'),
1130+ centered : block('center'),
1131+ justified : block('justify'),
1132+ markdown : markdown,
1134+ toTypefaces:toTypefaces,
1138+Elm.Native.Trampoline = {};
1139+Elm.Native.Trampoline.make = function(elm) {
1140+ elm.Native = elm.Native || {};
1141+ elm.Native.Trampoline = elm.Native.Trampoline || {};
1142+ if (elm.Native.Trampoline.values) return elm.Native.Trampoline.values;
1144+ // trampoline : Trampoline a -> a
1145+ function trampoline(t) {
1148+ switch(tramp.ctor) {
1152+ tramp = tramp._0({ctor: "_Tuple0"});
1158+ return elm.Native.Trampoline.values = {
1159+ trampoline:trampoline
1162+Elm.Native.Ports = {};
1163+Elm.Native.Ports.make = function(elm) {
1164+ elm.Native = elm.Native || {};
1165+ elm.Native.Ports = elm.Native.Ports || {};
1166+ if (elm.Native.Ports.values) return elm.Native.Ports.values;
1168+ var Signal = Elm.Signal.make(elm);
1170+ function incomingSignal(converter) {
1171+ converter.isSignal = true;
1175+ function outgoingSignal(converter) {
1176+ return function(signal) {
1177+ var subscribers = []
1178+ function subscribe(handler) {
1179+ subscribers.push(handler);
1181+ function unsubscribe(handler) {
1182+ subscribers.pop(subscribers.indexOf(handler));
1184+ A2( Signal.lift, function(value) {
1185+ var val = converter(value);
1186+ var len = subscribers.length;
1187+ for (var i = 0; i < len; ++i) {
1188+ subscribers[i](val);
1191+ return { subscribe:subscribe, unsubscribe:unsubscribe };
1195+ function portIn(name, converter) {
1196+ var jsValue = elm.ports.incoming[name];
1197+ if (jsValue === undefined) {
1198+ throw new Error("Initialization Error: port '" + name +
1199+ "' was not given an input!");
1201+ elm.ports.uses[name] += 1;
1203+ var elmValue = converter(jsValue);
1205+ throw new Error("Initialization Error on port '" + name + "': \n" + e.message);
1208+ // just return a static value if it is not a signal
1209+ if (!converter.isSignal) {
1213+ // create a signal if necessary
1214+ var signal = Signal.constant(elmValue);
1215+ function send(jsValue) {
1217+ var elmValue = converter(jsValue);
1219+ throw new Error("Error sending to port '" + name + "': \n" + e.message);
1221+ setTimeout(function() {
1222+ elm.notify(signal.id, elmValue);
1225+ elm.ports.outgoing[name] = { send:send };
1229+ function portOut(name, converter, value) {
1231+ elm.ports.outgoing[name] = converter(value);
1233+ throw new Error("Initialization Error on port '" + name + "': \n" + e.message);
1238+ return elm.Native.Ports.values = {
1239+ incomingSignal: incomingSignal,
1240+ outgoingSignal: outgoingSignal,
1245+Elm.Native.Color = {};
1246+Elm.Native.Color.make = function(elm) {
1247+ elm.Native = elm.Native || {};
1248+ elm.Native.Color = elm.Native.Color || {};
1249+ if (elm.Native.Color.values) return elm.Native.Color.values;
1251+ var Utils = Elm.Native.Utils.make(elm);
1253+ function toCss(c) {
1254+ return (c._3 === 1)
1255+ ? ('rgb(' + c._0 + ', ' + c._1 + ', ' + c._2 + ')')
1256+ : ('rgba(' + c._0 + ', ' + c._1 + ', ' + c._2 + ', ' + c._3 + ')');
1259+ function complement(rgb) {
1260+ var hsv = toHSV(rgb);
1261+ hsv.hue = (hsv.hue + 180) % 360;
1265+ function hsva(h,s,v,a) {
1266+ var degree = A2(Utils.mod, h * 180 / Math.PI, 360);
1267+ var clr = toRGB({hue:degree, saturation:s, value:v});
1272+ function hsv(h,s,v) {
1273+ var degree = A2(Utils.mod, h * 180 / Math.PI, 360);
1274+ return toRGB({hue:degree, saturation:s, value:v});
1277+ function toHSV(rgb) {
1279+ var r = rgb._0 / 255.0, g = rgb._1 / 255.0, b = rgb._2 / 255.0;
1280+ var M = Math.max(r,g,b);
1281+ var m = Math.min(r,g,b);
1285+ if (c === 0) { h = 0; }
1286+ else if (M === r) { h = ((g - b) / c) % 6; }
1287+ else if (M === g) { h = ((b - r) / c) + 2; }
1288+ else if (M === b) { h = ((r - g) / c) + 4; }
1291+ return { value : M, hue : h, saturation : (M === 0 ? 0 : c / M) };
1294+ function between(lo,hi,x) { return lo <= x && x < hi; }
1295+ function norm(n) { return Math.round(n*255); }
1297+ function toRGB(hsv) {
1298+ var c = hsv.value * hsv.saturation;
1299+ var hue = hsv.hue / 60;
1300+ var x = c * (1 - Math.abs((hue % 2) - 1));
1301+ var r = 0, g = 0, b = 0;
1302+ if (between(0,1,hue)) { r = c; g = x; b = 0; }
1303+ else if (between(1,2,hue)) { r = x; g = c; b = 0; }
1304+ else if (between(2,3,hue)) { r = 0; g = c; b = x; }
1305+ else if (between(3,4,hue)) { r = 0; g = x; b = c; }
1306+ else if (between(4,5,hue)) { r = x; g = 0; b = c; }
1307+ else if (between(5,6,hue)) { r = c; g = 0; b = x; }
1309+ var m = hsv.value - c;
1310+ return { ctor:"Color", _0:norm(r+m), _1:norm(g+m), _2:norm(b+m), _3:1 };
1313+ return elm.Native.Color.values = {
1316+ complement:complement,
1321+Elm.Native.Date = {};
1322+Elm.Native.Date.make = function(elm) {
1323+ elm.Native = elm.Native || {};
1324+ elm.Native.Date = elm.Native.Date || {};
1325+ if (elm.Native.Date.values) return elm.Native.Date.values;
1327+ var Maybe = Elm.Maybe.make(elm);
1329+ function dateNow() { return new window.Date; }
1330+ function readDate(str) {
1331+ var d = new window.Date(str);
1332+ if (isNaN(d.getTime())) return Maybe.Nothing;
1333+ return Maybe.Just(d);
1336+ var dayTable = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
1337+ var monthTable = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
1338+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
1340+ return elm.Native.Date.values = {
1342+ year : function(d) { return d.getFullYear(); },
1343+ month : function(d) { return { ctor:monthTable[d.getMonth()] }; },
1344+ day : function(d) { return d.getDate(); },
1345+ hour : function(d) { return d.getHours(); },
1346+ minute : function(d) { return d.getMinutes(); },
1347+ second : function(d) { return d.getSeconds(); },
1348+ toTime : function(d) { return d.getTime(); },
1349+ fromTime: function(t) { return new window.Date(t); },
1350+ dayOfWeek : function(d) { return { ctor:dayTable[d.getDay()] }; }
1354+Elm.Native.Error = {};
1355+Elm.Native.Error.make = function(elm) {
1356+ elm.Native = elm.Native || {};
1357+ elm.Native.Error = elm.Native.Error || {};
1358+ if (elm.Native.Error.values) return elm.Native.Error.values;
1360+ var fromString = Elm.Native.JavaScript.make(elm).fromString;
1362+ function indent(lines) {
1364+ for (var i = 0; i < lines.length; ++i) {
1365+ msg += '<br/> ' + lines[i];
1370+ function Case(moduleName, span) {
1371+ var msg = indent(['Non-exhaustive pattern match in case-expression.',
1372+ 'Make sure your patterns cover every case!']);
1373+ throw new Error('Runtime error in module ' + moduleName + ' (' + span + '):' + msg);
1376+ function If(moduleName, span) {
1377+ var msg = indent(['Non-exhaustive pattern match in multi-way-if expression.',
1378+ 'It is best to use \'otherwise\' as the last branch of multi-way-if.']);
1379+ throw new Error('Runtime error in module ' + moduleName + ' (' + span + '):' + msg);
1382+ function raise(str) { throw new Error(fromString(str)); }
1384+ return elm.Native.Error.values = { Case: Case, If: If, raise: raise };
1385+};Elm.Native.List = {};
1386+Elm.Native.List.make = function(elm) {
1387+ elm.Native = elm.Native || {};
1388+ elm.Native.List = elm.Native.List || {};
1389+ if (elm.Native.List.values) return elm.Native.List.values;
1390+ if ('values' in Elm.Native.List)
1391+ return elm.Native.List.values = Elm.Native.List.values;
1393+ var Utils = Elm.Native.Utils.make(elm);
1395+ // TODO: Improve Nil handling
1396+ // We can change places like: if (xs.ctor === '[]') ... to if (xs === Nil) ...
1397+ // but only if we're confident Nil can only be defined once.
1398+ // Currently (27Mar2013) each module can have different instantiations, so multiple Nil objects can exist
1399+ // (and if they're used interchangeably then direct object comparison fails where ctor doesn't).
1400+ // So, this can only be fixed when modules initialisation is also fixed.
1401+ // The performance overhead of the .ctor calls is 5-10% according to jsperf (depending on fn + list size)
1404+ var Nil = { ctor:'[]' };
1406+ // using freeze for every cons would be nice but is a huge (9x on firefox 19)
1407+ // performance penalty
1408+ function Cons(hd,tl) { return { ctor:"::", _0:hd, _1:tl }; }
1410+ function throwError(f) {
1411+ throw new Error("Function '" + f + "' expects a non-empty list!");
1414+ function toArray(xs) {
1416+ while (xs.ctor !== '[]') {
1423+ function fromArray(arr) {
1425+ for (var i = arr.length; i--; ) {
1426+ out = Cons(arr[i], out);
1431+ function range(lo,hi) {
1434+ do { lst = Cons(hi,lst) } while (hi-->lo);
1439+ function append(xs,ys) {
1441+ if (xs.text || ys.text) {
1442+ return Utils.txt(Utils.makeText(xs) + Utils.makeText(ys));
1446+ if (typeof xs === "string") return xs + ys;
1449+ if (xs.ctor === '[]') { return ys; }
1450+ var root = Cons(xs._0, Nil);
1453+ while (xs.ctor !== '[]') {
1454+ curr._1 = Cons(xs._0, Nil);
1462+ function head(v) { return v.ctor === '[]' ? throwError('head') : v._0; }
1463+ function tail(v) { return v.ctor === '[]' ? throwError('tail') : v._1; }
1465+ function last(xs) {
1466+ if (xs.ctor === '[]') { throwError('last'); }
1468+ while (xs.ctor !== '[]') {
1475+ function map(f, xs) {
1477+ while (xs.ctor !== '[]') {
1478+ arr.push(f(xs._0));
1481+ return fromArray(arr);
1484+ // f defined similarly for both foldl and foldr (NB: different from Haskell)
1485+ // ie, foldl : (a -> b -> b) -> b -> [a] -> b
1486+ function foldl(f, b, xs) {
1488+ while (xs.ctor !== '[]') {
1489+ acc = A2(f, xs._0, acc);
1495+ function foldr(f, b, xs) {
1496+ var arr = toArray(xs);
1498+ for (var i = arr.length; i--; ) {
1499+ acc = A2(f, arr[i], acc);
1504+ function foldl1(f, xs) {
1505+ return xs.ctor === '[]' ? throwError('foldl1') : foldl(f, xs._0, xs._1);
1508+ function foldr1(f, xs) {
1509+ if (xs.ctor === '[]') { throwError('foldr1'); }
1510+ var arr = toArray(xs);
1511+ var acc = arr.pop();
1512+ for (var i = arr.length; i--; ) {
1513+ acc = A2(f, arr[i], acc);
1518+ function scanl(f, b, xs) {
1519+ var arr = toArray(xs);
1521+ var len = arr.length;
1522+ for (var i = 1; i < len; ++i) {
1523+ arr[i] = A2(f, arr[i], arr[i-1]);
1525+ return fromArray(arr);
1528+ function scanl1(f, xs) {
1529+ return xs.ctor === '[]' ? throwError('scanl1') : scanl(f, xs._0, xs._1);
1532+ function filter(pred, xs) {
1534+ while (xs.ctor !== '[]') {
1535+ if (pred(xs._0)) { arr.push(xs._0); }
1538+ return fromArray(arr);
1541+ function length(xs) {
1543+ while (xs.ctor !== '[]') {
1550+ function member(x, xs) {
1551+ while (xs.ctor !== '[]') {
1552+ if (Utils.eq(x,xs._0)) return true;
1558+ function reverse(xs) { return fromArray(toArray(xs).reverse()); }
1560+ function concat(xss) {
1561+ if (xss.ctor === '[]') return xss;
1562+ var arr = toArray(xss);
1563+ var xs = arr[arr.length-1];
1564+ for (var i = arr.length-1; i--; ) {
1565+ xs = append(arr[i], xs);
1570+ function all(pred, xs) {
1571+ while (xs.ctor !== '[]') {
1572+ if (!pred(xs._0)) return false;
1578+ function any(pred, xs) {
1579+ while (xs.ctor !== '[]') {
1580+ if (pred(xs._0)) return true;
1586+ function zipWith(f, xs, ys) {
1588+ while (xs.ctor !== '[]' && ys.ctor !== '[]') {
1589+ arr.push(A2(f, xs._0, ys._0));
1593+ return fromArray(arr);
1596+ function zip(xs, ys) {
1598+ while (xs.ctor !== '[]' && ys.ctor !== '[]') {
1599+ arr.push(Utils.Tuple2(xs._0, ys._0));
1603+ return fromArray(arr);
1606+ function sort(xs) {
1607+ return fromArray(toArray(xs).sort(Utils.cmp));
1610+ function sortBy(f, xs) {
1611+ return fromArray(toArray(xs).sort(function(a,b){
1612+ return Utils.cmp(f(a), f(b));
1616+ function sortWith(f, xs) {
1617+ return fromArray(toArray(xs).sort(function(a,b){
1618+ var ord = f(a)(b).ctor;
1619+ return ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1;
1623+ function nth(xs, n) {
1624+ return toArray(xs)[n];
1627+ function take(n, xs) {
1629+ while (xs.ctor !== '[]' && n > 0) {
1634+ return fromArray(arr);
1637+ function drop(n, xs) {
1638+ while (xs.ctor !== '[]' && n > 0) {
1645+ function repeat(n, x) {
1649+ if (n & 1) arr = arr.concat(pattern);
1650+ n >>= 1, pattern = pattern.concat(pattern);
1652+ return fromArray(arr);
1655+ function join(sep, xss) {
1657+ sep = Utils.makeText(sep);
1658+ xss = toArray(xss);
1659+ for (var i = xss.length; i--; ) {
1660+ xss[i] = Utils.makeText(xss[i]);
1662+ return Utils.txt(xss.join(sep));
1664+ if (typeof sep === 'string') return toArray(xss).join(sep);
1665+ if (xss.ctor === '[]') return Nil;
1666+ var s = toArray(sep);
1667+ var out = toArray(xss._0);
1669+ while (xss.ctor !== '[]') {
1670+ out = out.concat(s, toArray(xss._0));
1673+ return fromArray(out);
1676+ Elm.Native.List.values = {
1681+ fromArray:fromArray,
1705+ zipWith:F3(zipWith),
1709+ sortWith:F2(sortWith),
1717+ return elm.Native.List.values = Elm.Native.List.values;
1720+Elm.Native.Json = {};
1721+Elm.Native.Json.make = function(elm) {
1723+ elm.Native = elm.Native || {};
1724+ elm.Native.Json = elm.Native.Json || {};
1725+ if (elm.Native.Json.values) return elm.Native.Json.values;
1727+ var Maybe = Elm.Maybe.make(elm);
1728+ var Dict = Elm.Dict.make(elm);
1729+ var List = Elm.Native.List.make(elm);
1730+ var Utils = Elm.Native.Utils.make(elm);
1734+ case 'Null' : return null;
1735+ case 'String' : return v._0;
1736+ case 'Number' : return v._0;
1737+ case 'Boolean': return v._0;
1740+ var array = List.toArray(Dict.toList(v._0));
1741+ for (var i = array.length; i--; ) {
1742+ var entry = array[i];
1743+ obj[entry._0] = toJS(entry._1);
1747+ var array = List.toArray(v._0);
1748+ for (var i = array.length; i--; ) {
1749+ array[i] = toJS(array[i]);
1755+ function toString(sep, value) {
1756+ return JSON.stringify(toJS(value), null, sep);
1759+ function fromJS(v) {
1760+ switch (typeof v) {
1761+ case 'string' : return { ctor:"String" , _0: v };
1762+ case 'number' : return { ctor:"Number" , _0: v };
1763+ case 'boolean': return { ctor:"Boolean", _0: v };
1765+ if (v === null) return { ctor:"Null" };
1766+ if (v instanceof Array) {
1767+ var array = new Array(v.length);
1768+ for (var i = v.length; i--; ) {
1769+ array[i] = fromJS(v[i]);
1773+ _0: List.fromArray(array)
1777+ for (var key in v) {
1778+ var value = fromJS(v[key]);
1779+ array.push(Utils.Tuple2(key, value));
1781+ var list = List.fromArray(array);
1784+ _0: Dict.fromList(list)
1789+ function fromString(str) {
1791+ return Maybe.Just(fromJS(JSON.parse(str)));
1793+ return Maybe.Nothing;
1797+ return elm.Native.Json.values = {
1798+ toString : F2(toString),
1799+ fromString : fromString,
1805+Elm.Native.String = {};
1806+Elm.Native.String.make = function(elm) {
1807+ elm.Native = elm.Native || {};
1808+ elm.Native.String = elm.Native.String || {};
1809+ if (elm.Native.String.values) return elm.Native.String.values;
1810+ if ('values' in Elm.Native.String)
1811+ return elm.Native.String.values = Elm.Native.String.values;
1813+ var Char = Elm.Char.make(elm);
1814+ var Maybe = Elm.Maybe.make(elm);
1815+ var List = Elm.Native.List.make(elm);
1816+ var Utils = Elm.Native.Utils.make(elm);
1818+ function isEmpty(str) {
1819+ return str.length === 0;
1821+ function cons(chr,str) {
1824+ function uncons(str) {
1826+ return (hd = str[0]) ? Maybe.Just(Utils.Tuple2(Utils.chr(hd), str.slice(1)))
1829+ function append(a,b) {
1832+ function concat(strs) {
1833+ return List.toArray(strs).join('');
1835+ function length(str) {
1838+ function map(f,str) {
1839+ var out = str.split('');
1840+ for (var i = out.length; i--; ) {
1841+ out[i] = f(Utils.chr(out[i]));
1843+ return out.join('');
1845+ function filter(pred,str) {
1846+ return str.split('').map(Utils.chr).filter(pred).join('');
1848+ function reverse(str) {
1849+ return str.split('').reverse().join('');
1851+ function foldl(f,b,str) {
1852+ var len = str.length;
1853+ for (var i = 0; i < len; ++i) {
1854+ b = A2(f, Utils.chr(str[i]), b);
1858+ function foldr(f,b,str) {
1859+ for (var i = str.length; i--; ) {
1860+ b = A2(f, Utils.chr(str[i]), b);
1865+ function split(sep, str) {
1866+ return List.fromArray(str.split(sep));
1868+ function join(sep, strs) {
1869+ return List.toArray(strs).join(sep);
1871+ function repeat(n, str) {
1874+ if (n & 1) result += str;
1875+ n >>= 1, str += str;
1880+ function sub(start, end, str) {
1881+ return str.slice(start,end);
1883+ function left(n, str) {
1884+ return n < 1 ? "" : str.slice(0,n);
1886+ function right(n, str) {
1887+ return n < 1 ? "" : str.slice(-n);
1889+ function dropLeft(n, str) {
1890+ return n < 1 ? str : str.slice(n);
1892+ function dropRight(n, str) {
1893+ return n < 1 ? str : str.slice(0,-n);
1896+ function pad(n,chr,str) {
1897+ var half = (n - str.length) / 2;
1898+ return repeat(Math.ceil(half),chr) + str + repeat(half|0,chr);
1900+ function padRight(n,chr,str) {
1901+ return str + repeat(n - str.length, chr);
1903+ function padLeft(n,chr,str) {
1904+ return repeat(n - str.length, chr) + str;
1907+ function trim(str) {
1910+ function trimLeft(str) {
1911+ return str.trimLeft();
1913+ function trimRight(str) {
1914+ return str.trimRight();
1917+ function words(str) {
1918+ return List.fromArray(str.split(/\s+/g));
1920+ function lines(str) {
1921+ return List.fromArray(str.split(/\r\n|\r|\n/g));
1924+ function toUpper(str) {
1925+ return str.toUpperCase();
1927+ function toLower(str) {
1928+ return str.toLowerCase();
1931+ function any(pred, str) {
1932+ for (var i = str.length; i--; ) {
1933+ if (pred(Utils.chr(str[i]))) return true;
1937+ function all(pred, str) {
1938+ for (var i = str.length; i--; ) {
1939+ if (!pred(Utils.chr(str[i]))) return false;
1944+ function contains(sub, str) {
1945+ return str.indexOf(sub) > -1;
1947+ function startsWith(sub, str) {
1948+ return str.indexOf(sub) === 0;
1950+ function endsWith(sub, str) {
1951+ return str.length >= sub.length &&
1952+ str.lastIndexOf(sub) === str.length - sub.length;
1954+ function indexes(sub, str) {
1955+ var subLen = sub.length;
1958+ while ((i = str.indexOf(sub, i)) > -1) {
1962+ return List.fromArray(is);
1965+ function toInt(s) {
1966+ var len = s.length;
1967+ if (len === 0) { return Maybe.Nothing; }
1970+ if (len === 1) { return Maybe.Nothing; }
1973+ for (var i = start; i < len; ++i) {
1974+ if (!Char.isDigit(s[i])) { return Maybe.Nothing; }
1976+ return Maybe.Just(parseInt(s, 10));
1979+ function toFloat(s) {
1980+ var len = s.length;
1981+ if (len === 0) { return Maybe.Nothing; }
1984+ if (len === 1) { return Maybe.Nothing; }
1988+ for (var i = start; i < len; ++i) {
1989+ if (Char.isDigit(s[i])) { continue; }
1990+ if (s[i] === '.') {
1992+ if (dotCount <= 1) { continue; }
1994+ return Maybe.Nothing;
1996+ return Maybe.Just(parseFloat(s));
1999+ function toList(str) {
2000+ return List.fromArray(str.split('').map(Utils.chr));
2002+ function fromList(chars) {
2003+ return List.toArray(chars).join('');
2006+ return Elm.Native.String.values = {
2010+ append: F2(append),
2014+ filter: F2(filter),
2021+ repeat: F2(repeat),
2026+ dropLeft: F2(dropLeft),
2027+ dropRight: F2(dropRight),
2030+ padLeft: F3(padLeft),
2031+ padRight: F3(padRight),
2034+ trimLeft: trimLeft,
2035+ trimRight: trimRight,
2046+ contains: F2(contains),
2047+ startsWith: F2(startsWith),
2048+ endsWith: F2(endsWith),
2049+ indexes: F2(indexes),
2054+ fromList: fromList,
2057+Elm.Native.Char = {};
2058+Elm.Native.Char.make = function(elm) {
2059+ elm.Native = elm.Native || {};
2060+ elm.Native.Char = elm.Native.Char || {};
2061+ if (elm.Native.Char.values) return elm.Native.Char.values;
2063+ function isBetween(lo,hi) { return function(chr) {
2064+ var c = chr.charCodeAt(0);
2065+ return lo <= c && c <= hi;
2068+ var isDigit = isBetween('0'.charCodeAt(0),'9'.charCodeAt(0));
2069+ var chk1 = isBetween('a'.charCodeAt(0),'f'.charCodeAt(0));
2070+ var chk2 = isBetween('A'.charCodeAt(0),'F'.charCodeAt(0));
2072+ return elm.Native.Char.values = {
2073+ fromCode : function(c) { return String.fromCharCode(c); },
2074+ toCode : function(c) { return c.toUpperCase().charCodeAt(0); },
2075+ toUpper : function(c) { return c.toUpperCase(); },
2076+ toLower : function(c) { return c.toLowerCase(); },
2077+ toLocaleUpper : function(c) { return c.toLocaleUpperCase(); },
2078+ toLocaleLower : function(c) { return c.toLocaleLowerCase(); },
2079+ isLower : isBetween('a'.charCodeAt(0),'z'.charCodeAt(0)),
2080+ isUpper : isBetween('A'.charCodeAt(0),'Z'.charCodeAt(0)),
2082+ isOctDigit : isBetween('0'.charCodeAt(0),'7'.charCodeAt(0)),
2083+ isHexDigit : function(c) { return isDigit(c) || chk1(c) || chk2(c); }
2086+Elm.Native.Utils = {};
2087+Elm.Native.Utils.make = function(elm) {
2089+ elm.Native = elm.Native || {};
2090+ elm.Native.Utils = elm.Native.Utils || {};
2091+ if (elm.Native.Utils.values) return elm.Native.Utils.values;
2094+ if (x === y) return true;
2095+ if (typeof x === "object") {
2099+ if (!eq(x[i],y[i])) {
2103+ return c === Object.keys(y).length;
2105+ if (typeof x === 'function') {
2106+ throw new Error('Equality error: general function equality is ' +
2107+ 'undecidable, and therefore, unsupported');
2112+ // code in Generate/JavaScript.hs depends on the particular
2113+ // integer values assigned to LT, EQ, and GT
2114+ var LT = -1, EQ = 0, GT = 1, ord = ['LT','EQ','GT'];
2115+ function compare(x,y) { return { ctor: ord[cmp(x,y)+1] } }
2116+ function cmp(x,y) {
2118+ if (typeof x !== 'object' || x instanceof String){
2119+ return x === y ? EQ : x < y ? LT : GT;
2122+ if (x.ctor === "::" || x.ctor === "[]") {
2124+ if (x.ctor === "[]" && y.ctor === "[]") return EQ;
2125+ if (x.ctor !== y.ctor) return x.ctor === '[]' ? LT : GT;
2126+ ord = cmp(x._0, y._0);
2127+ if (ord !== EQ) return ord;
2133+ if (x.ctor.slice(0,6) === '_Tuple') {
2134+ var n = x.ctor.slice(6) - 0;
2135+ var err = 'cannot compare tuples with more than 6 elements.';
2136+ if (n === 0) return EQ;
2137+ if (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord;
2138+ if (n >= 2) { ord = cmp(x._1, y._1); if (ord !== EQ) return ord;
2139+ if (n >= 3) { ord = cmp(x._2, y._2); if (ord !== EQ) return ord;
2140+ if (n >= 4) { ord = cmp(x._3, y._3); if (ord !== EQ) return ord;
2141+ if (n >= 5) { ord = cmp(x._4, y._4); if (ord !== EQ) return ord;
2142+ if (n >= 6) { ord = cmp(x._5, y._5); if (ord !== EQ) return ord;
2143+ if (n >= 7) throw new Error('Comparison error: ' + err); } } } } } }
2146+ throw new Error('Comparison error: comparison is only defined on ints, ' +
2147+ 'floats, times, chars, strings, lists of comparable values, ' +
2148+ 'and tuples of comparable values.')
2152+ var Tuple0 = { ctor: "_Tuple0" };
2153+ function Tuple2(x,y) { return { ctor:"_Tuple2", _0:x, _1:y } }
2156+ var x = new String(c);
2161+ function txt(str) {
2162+ var t = new String(str);
2167+ function makeText(text) {
2172+ style += text.style;
2181+ if (href) text = '<a href="' + href + '">' + text + '</a>';
2182+ if (style) text = '<span style="' + style + '">' + text + '</span>';
2188+ function guid(_) { return count++ }
2192+ for (var i in r) { o[i] = r[i]; }
2196+ function remove(x,r) {
2200+ o._[x] = o._[x].slice(1);
2201+ if (o._[x].length === 0) { delete o._[x]; }
2208+ function replace(kvs,r) {
2210+ for (var i = kvs.length; i--; ) {
2212+ o[kvsi[0]] = kvsi[1];
2217+ function insert(x,v,r) {
2219+ if (x in o) o._[x] = [o[x]].concat(x in o._ ? o._[x].slice(0) : []);
2224+ function max(a,b) { return a > b ? a : b }
2225+ function min(a,b) { return a < b ? a : b }
2227+ function mod(a,b) {
2229+ throw new Error("Cannot perform mod 0. Division by zero error.");
2232+ var m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r+b) : -mod(-a,-b));
2234+ return m === b ? 0 : m;
2237+ function htmlHeight(width, rawHtml) {
2238+ // create dummy node
2239+ var html = rawHtml.html;
2240+ var t = document.createElement('div');
2241+ t.innerHTML = html;
2242+ if (width > 0) { t.style.width = width + "px"; }
2243+ t.style.visibility = "hidden";
2244+ t.style.styleFloat = "left";
2245+ t.style.cssFloat = "left";
2247+ document.body.appendChild(t);
2249+ // insert interpolated values
2250+ var args = rawHtml.args;
2251+ var guid = rawHtml.guid;
2252+ for (var i = args.length; i--; ) {
2254+ var span = document.getElementById('md-' + guid + '-' + i);
2255+ if (arg.isElement) {
2256+ span.style.width = arg.props.width + 'px';
2257+ span.style.height = arg.props.height + 'px';
2259+ span.innerHTML = arg;
2264+ var style = window.getComputedStyle(t, null);
2265+ var w = Math.ceil(style.getPropertyValue("width").slice(0,-2) - 0);
2266+ var h = Math.ceil(style.getPropertyValue("height").slice(0,-2) - 0);
2267+ document.body.removeChild(t);
2268+ return Tuple2(w,h);
2271+ function getXY(e) {
2274+ if (e.pageX || e.pageY) {
2277+ } else if (e.clientX || e.clientY) {
2278+ posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
2279+ posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
2282+ if (elm.display === ElmRuntime.Display.COMPONENT) {
2283+ var rect = elm.node.getBoundingClientRect();
2284+ var relx = rect.left + document.body.scrollLeft + document.documentElement.scrollLeft;
2285+ var rely = rect.top + document.body.scrollTop + document.documentElement.scrollTop;
2286+ // TODO: figure out if there is a way to avoid rounding here
2287+ posx = posx - Math.round(relx) - elm.node.clientLeft;
2288+ posy = posy - Math.round(rely) - elm.node.clientTop;
2290+ return Tuple2(posx, posy);
2293+ return elm.Native.Utils.values = {
2296+ compare:F2(compare),
2310+ htmlHeight: F2(htmlHeight),
2312+ toFloat: function(x) { return +x; }
2315+Elm.Native.Bitwise = {};
2316+Elm.Native.Bitwise.make = function(elm) {
2317+ elm.Native = elm.Native || {};
2318+ elm.Native.Bitwise = elm.Native.Bitwise || {};
2319+ if (elm.Native.Bitwise.values) return elm.Native.Bitwise.values;
2321+ function and(a,b) { return a & b; }
2322+ function or (a,b) { return a | b; }
2323+ function xor(a,b) { return a ^ b; }
2324+ function not(a) { return ~a; }
2325+ function sll(a,offset) { return a << offset; }
2326+ function sra(a,offset) { return a >> offset; }
2327+ function srl(a,offset) { return a >>> offset; }
2329+ return elm.Native.Bitwise.values = {
2334+ shiftLeft : F2(sll),
2335+ shiftRightArithmatic: F2(sra),
2336+ shiftRightLogical : F2(srl),
2342+ function wrapper(a) { return function(b) { return fun(a,b) } }
2344+ wrapper.func = fun;
2349+ function wrapper(a) {
2350+ return function(b) { return function(c) { return fun(a,b,c) }}
2353+ wrapper.func = fun;
2358+ function wrapper(a) { return function(b) { return function(c) {
2359+ return function(d) { return fun(a,b,c,d) }}}
2362+ wrapper.func = fun;
2367+ function wrapper(a) { return function(b) { return function(c) {
2368+ return function(d) { return function(e) { return fun(a,b,c,d,e) }}}}
2371+ wrapper.func = fun;
2376+ function wrapper(a) { return function(b) { return function(c) {
2377+ return function(d) { return function(e) { return function(f) {
2378+ return fun(a,b,c,d,e,f) }}}}}
2381+ wrapper.func = fun;
2386+ function wrapper(a) { return function(b) { return function(c) {
2387+ return function(d) { return function(e) { return function(f) {
2388+ return function(g) { return fun(a,b,c,d,e,f,g) }}}}}}
2391+ wrapper.func = fun;
2396+ function wrapper(a) { return function(b) { return function(c) {
2397+ return function(d) { return function(e) { return function(f) {
2398+ return function(g) { return function(h) {return fun(a,b,c,d,e,f,g,h)}}}}}}}
2401+ wrapper.func = fun;
2406+ function wrapper(a) { return function(b) { return function(c) {
2407+ return function(d) { return function(e) { return function(f) {
2408+ return function(g) { return function(h) { return function(i) {
2409+ return fun(a,b,c,d,e,f,g,h,i) }}}}}}}}
2412+ wrapper.func = fun;
2416+function A2(fun,a,b) {
2417+ return fun.arity === 2 ? fun.func(a,b) : fun(a)(b);
2419+function A3(fun,a,b,c) {
2420+ return fun.arity === 3 ? fun.func(a,b,c) : fun(a)(b)(c);
2422+function A4(fun,a,b,c,d) {
2423+ return fun.arity === 4 ? fun.func(a,b,c,d) : fun(a)(b)(c)(d);
2425+function A5(fun,a,b,c,d,e) {
2426+ return fun.arity === 5 ? fun.func(a,b,c,d,e) : fun(a)(b)(c)(d)(e);
2428+function A6(fun,a,b,c,d,e,f) {
2429+ return fun.arity === 6 ? fun.func(a,b,c,d,e,f) : fun(a)(b)(c)(d)(e)(f);
2431+function A7(fun,a,b,c,d,e,f,g) {
2432+ return fun.arity === 7 ? fun.func(a,b,c,d,e,f,g) : fun(a)(b)(c)(d)(e)(f)(g);
2434+function A8(fun,a,b,c,d,e,f,g,h) {
2435+ return fun.arity === 8 ? fun.func(a,b,c,d,e,f,g,h) : fun(a)(b)(c)(d)(e)(f)(g)(h);
2437+function A9(fun,a,b,c,d,e,f,g,h,i) {
2438+ return fun.arity === 9 ? fun.func(a,b,c,d,e,f,g,h,i)
2439+ : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);
2441+Elm.Native.Graphics.Input = {};
2442+Elm.Native.Graphics.Input.make = function(elm) {
2443+ elm.Native = elm.Native || {};
2444+ elm.Native.Graphics = elm.Native.Graphics || {};
2445+ elm.Native.Graphics.Input = elm.Native.Graphics.Input || {};
2446+ if (elm.Native.Graphics.Input.values) return elm.Native.Graphics.Input.values;
2448+ var Render = ElmRuntime.use(ElmRuntime.Render.Element);
2449+ var newNode = ElmRuntime.use(ElmRuntime.Render.Utils).newElement;
2451+ var toCss = Elm.Native.Color.make(elm).toCss;
2452+ var Text = Elm.Native.Text.make(elm);
2453+ var Signal = Elm.Signal.make(elm);
2454+ var newElement = Elm.Graphics.Element.make(elm).newElement;
2455+ var List = Elm.Native.List.make(elm);
2456+ var Utils = Elm.Native.Utils.make(elm);
2457+ var Tuple2 = Utils.Tuple2;
2459+ function input(initialValue) {
2460+ var signal = Signal.constant(initialValue);
2461+ return { _:{}, signal:signal, handle:signal };
2464+ function renderDropDown(signal, values) {
2465+ return function(_) {
2466+ var entries = List.toArray(values);
2468+ var drop = newNode('select');
2469+ drop.style.border = '0 solid';
2470+ drop.style.pointerEvents = 'auto';
2471+ for (var i = 0; i < entries.length; ++i) {
2472+ var option = newNode('option');
2473+ var name = entries[i]._0;
2474+ option.value = name;
2475+ option.innerHTML = name;
2476+ drop.appendChild(option);
2478+ drop.addEventListener('change', function() {
2479+ elm.notify(signal.id, entries[drop.selectedIndex]._1);
2482+ var t = drop.cloneNode(true);
2483+ t.style.visibility = "hidden";
2485+ elm.node.appendChild(t);
2486+ var style = window.getComputedStyle(t, null);
2487+ var w = Math.ceil(style.getPropertyValue("width").slice(0,-2) - 0);
2488+ var h = Math.ceil(style.getPropertyValue("height").slice(0,-2) - 0);
2489+ elm.node.removeChild(t);
2494+ function updateDropDown(node, oldModel, newModel) {
2497+ function dropDown(signal, values) {
2498+ return A3(newElement, 100, 24, {
2501+ render: renderDropDown(signal,values),
2502+ update: updateDropDown,
2507+ function renderButton(model) {
2508+ var node = newNode('button');
2509+ node.style.display = 'block';
2510+ node.style.pointerEvents = 'auto';
2511+ node.elm_signal = model.signal;
2512+ node.elm_value = model.value;
2514+ elm.notify(node.elm_signal.id, node.elm_value);
2516+ node.addEventListener('click', click);
2517+ node.innerHTML = model.text;
2521+ function updateButton(node, oldModel, newModel) {
2522+ node.elm_signal = newModel.signal;
2523+ node.elm_value = newModel.value;
2524+ var txt = newModel.text;
2525+ if (oldModel.text !== txt) node.innerHTML = txt;
2528+ function button(signal, value, text) {
2529+ return A3(newElement, 100, 40, {
2532+ render: renderButton,
2533+ update: updateButton,
2534+ model: { signal:signal, value:value, text:text }
2538+ function renderCustomButton(model) {
2539+ var btn = newNode('div');
2540+ btn.style.pointerEvents = 'auto';
2541+ btn.elm_signal = model.signal;
2542+ btn.elm_value = model.value;
2544+ btn.elm_up = Render.render(model.up);
2545+ btn.elm_hover = Render.render(model.hover);
2546+ btn.elm_down = Render.render(model.down);
2548+ function replace(node) {
2549+ if (node !== btn.firstChild) {
2550+ btn.replaceChild(node, btn.firstChild);
2555+ if (overCount++ > 0) return;
2556+ replace(btn.elm_hover);
2559+ if (btn.contains(e.toElement || e.relatedTarget)) return;
2561+ replace(btn.elm_up);
2564+ replace(btn.elm_hover);
2565+ elm.notify(btn.elm_signal.id, btn.elm_value);
2568+ replace(btn.elm_down);
2570+ btn.addEventListener('mouseover', over);
2571+ btn.addEventListener('mouseout' , out);
2572+ btn.addEventListener('mousedown', down);
2573+ btn.addEventListener('mouseup' , up);
2575+ btn.appendChild(btn.elm_up);
2577+ var clicker = newNode('div');
2578+ clicker.style.width = btn.elm_up.style.width;
2579+ clicker.style.height = btn.elm_up.style.height;
2580+ clicker.style.position = 'absolute';
2581+ clicker.style.top = 0;
2582+ btn.appendChild(clicker);
2587+ function updateCustomButton(node, oldModel, newModel) {
2588+ var signal = newModel.signal;
2589+ node.elm_up.elm_signal = signal;
2590+ node.elm_hover.elm_signal = signal;
2591+ node.elm_down.elm_signal = signal;
2593+ var value = newModel.value;
2594+ node.elm_up.elm_value = value;
2595+ node.elm_hover.elm_value = value;
2596+ node.elm_down.elm_value = value;
2598+ Render.update(node.elm_up, oldModel.up, newModel.up)
2599+ Render.update(node.elm_hover, oldModel.hover, newModel.hover)
2600+ Render.update(node.elm_down, oldModel.down, newModel.down)
2603+ function max3(a,b,c) {
2604+ var ab = a > b ? a : b;
2605+ return ab > c ? ab : c;
2608+ function customButton(signal, value, up, hover, down) {
2609+ return A3(newElement,
2610+ max3(up.props.width, hover.props.width, down.props.width),
2611+ max3(up.props.height, hover.props.height, down.props.height),
2613+ type: 'CustomButton',
2614+ render: renderCustomButton,
2615+ update: updateCustomButton,
2616+ model: { signal:signal, value:value, up:up, hover:hover, down:down }
2620+ function renderCheckbox(model) {
2621+ var node = newNode('input');
2622+ node.type = 'checkbox';
2623+ node.checked = model.checked;
2624+ node.style.display = 'block';
2625+ node.style.pointerEvents = 'auto';
2626+ node.elm_signal = model.signal;
2627+ node.elm_handler = model.handler;
2628+ function change() {
2629+ elm.notify(node.elm_signal.id, node.elm_handler(node.checked));
2631+ node.addEventListener('change', change);
2635+ function updateCheckbox(node, oldModel, newModel) {
2636+ node.elm_signal = newModel.signal;
2637+ node.elm_handler = newModel.handler;
2638+ node.checked = newModel.checked;
2642+ function checkbox(signal, handler, checked) {
2643+ return A3(newElement, 13, 13, {
2646+ render: renderCheckbox,
2647+ update: updateCheckbox,
2648+ model: { signal:signal, handler:handler, checked:checked }
2652+ function setRange(node, start, end, dir) {
2653+ if (node.parentNode) {
2654+ node.setSelectionRange(start, end, dir);
2656+ setTimeout(function(){node.setSelectionRange(start, end, dir);}, 0);
2660+ function updateIfNeeded(css, attribute, latestAttribute) {
2661+ if (css[attribute] !== latestAttribute) {
2662+ css[attribute] = latestAttribute;
2665+ function cssDimensions(dimensions) {
2666+ return dimensions.top + 'px ' +
2667+ dimensions.right + 'px ' +
2668+ dimensions.bottom + 'px ' +
2669+ dimensions.left + 'px';
2671+ function updateFieldStyle(css, style) {
2672+ updateIfNeeded(css, 'padding', cssDimensions(style.padding));
2674+ var outline = style.outline;
2675+ updateIfNeeded(css, 'border-width', cssDimensions(outline.width));
2676+ updateIfNeeded(css, 'border-color', toCss(outline.color));
2677+ updateIfNeeded(css, 'border-radius', outline.radius + 'px');
2679+ var highlight = style.highlight;
2680+ if (highlight.width === 0) {
2681+ css.outline = 'none';
2683+ updateIfNeeded(css, 'outline-width', highlight.width + 'px');
2684+ updateIfNeeded(css, 'outline-color', toCss(highlight.color));
2687+ var textStyle = style.style;
2688+ updateIfNeeded(css, 'color', toCss(textStyle.color));
2689+ if (textStyle.typeface.ctor !== '[]') {
2690+ updateIfNeeded(css, 'font-family', Text.toTypefaces(textStyle.typeface));
2692+ if (textStyle.height.ctor !== "Nothing") {
2693+ updateIfNeeded(css, 'font-size', textStyle.height._0 + 'px');
2695+ updateIfNeeded(css, 'font-weight', textStyle.bold ? 'bold' : 'normal');
2696+ updateIfNeeded(css, 'font-style', textStyle.italic ? 'italic' : 'normal');
2697+ if (textStyle.line.ctor !== 'Nothing') {
2698+ updateIfNeeded(css, 'text-decoration', Text.toLine(textStyle.line._0));
2702+ function renderField(model) {
2703+ var field = newNode('input');
2704+ updateFieldStyle(field.style, model.style);
2705+ field.style.borderStyle = 'solid';
2706+ field.style.pointerEvents = 'auto';
2708+ field.type = model.type;
2709+ field.placeholder = model.placeHolder;
2710+ field.value = model.content.string;
2712+ field.elm_signal = model.signal;
2713+ field.elm_handler = model.handler;
2714+ field.elm_old_value = field.value;
2716+ function inputUpdate(event) {
2717+ var curr = field.elm_old_value;
2718+ var next = field.value;
2719+ if (curr === next) {
2723+ var direction = field.selectionDirection === 'forward' ? 'Forward' : 'Backward';
2724+ var start = field.selectionStart;
2725+ var end = field.selectionEnd;
2726+ field.value = field.elm_old_value;
2728+ elm.notify(field.elm_signal.id, field.elm_handler({
2735+ direction: { ctor: direction }
2740+ function mouseUpdate(event) {
2741+ var direction = field.selectionDirection === 'forward' ? 'Forward' : 'Backward';
2742+ elm.notify(field.elm_signal.id, field.elm_handler({
2744+ string: field.value,
2747+ start: field.selectionStart,
2748+ end: field.selectionEnd,
2749+ direction: { ctor: direction }
2753+ function mousedown(event) {
2754+ mouseUpdate(event);
2755+ elm.node.addEventListener('mouseup', mouseup);
2757+ function mouseup(event) {
2758+ mouseUpdate(event);
2759+ elm.node.removeEventListener('mouseup', mouseup)
2761+ field.addEventListener('input', inputUpdate);
2762+ field.addEventListener('mousedown', mousedown);
2763+ field.addEventListener('focus', function() {
2764+ field.elm_hasFocus = true;
2766+ field.addEventListener('blur', function() {
2767+ field.elm_hasFocus = false;
2773+ function updateField(field, oldModel, newModel) {
2774+ if (oldModel.style !== newModel.style) {
2775+ updateFieldStyle(field.style, newModel.style);
2777+ field.elm_signal = newModel.signal;
2778+ field.elm_handler = newModel.handler;
2780+ field.type = newModel.type;
2781+ field.placeholder = newModel.placeHolder;
2782+ var value = newModel.content.string;
2783+ field.value = value;
2784+ field.elm_old_value = value;
2785+ if (field.elm_hasFocus) {
2786+ var selection = newModel.content.selection;
2787+ var direction = selection.direction.ctor === 'Forward' ? 'forward' : 'backward';
2788+ setRange(field, selection.start, selection.end, direction);
2792+ function mkField(type) {
2793+ function field(style, signal, handler, placeHolder, content) {
2794+ var padding = style.padding;
2795+ var outline = style.outline.width;
2796+ var adjustWidth = padding.left + padding.right + outline.left + outline.right;
2797+ var adjustHeight = padding.top + padding.bottom + outline.top + outline.bottom;
2798+ return A3(newElement, 200, 30, {
2800+ type: type + 'Field',
2801+ adjustWidth: adjustWidth,
2802+ adjustHeight: adjustHeight,
2803+ render: renderField,
2804+ update: updateField,
2808+ placeHolder:placeHolder,
2818+ function hoverable(signal, handler, elem) {
2819+ function onHover(bool) {
2820+ elm.notify(signal.id, handler(bool));
2822+ var props = Utils.replace([['hover',onHover]], elem.props);
2823+ return { props:props, element:elem.element };
2826+ function clickable(signal, value, elem) {
2827+ function onClick(bool) {
2828+ elm.notify(signal.id, value);
2830+ var props = Utils.replace([['click',onClick]], elem.props);
2831+ return { props:props, element:elem.element };
2834+ return elm.Native.Graphics.Input.values = {
2837+ customButton:F5(customButton),
2838+ checkbox:F3(checkbox),
2839+ dropDown:F2(dropDown),
2840+ field:mkField('text'),
2841+ email:mkField('email'),
2842+ password:mkField('password'),
2843+ hoverable:F3(hoverable),
2844+ clickable:F3(clickable)
2848+Elm.Native.Graphics.Collage = {};
2849+Elm.Native.Graphics.Collage.make = function(elm) {
2851+ elm.Native = elm.Native || {};
2852+ elm.Native.Graphics = elm.Native.Graphics || {};
2853+ elm.Native.Graphics.Collage = elm.Native.Graphics.Collage || {};
2854+ if (elm.Native.Graphics.Collage.values) return elm.Native.Graphics.Collage.values;
2856+ var newElement = Elm.Graphics.Element.make(elm).newElement;
2857+ var C = ElmRuntime.use(ElmRuntime.Render.Collage);
2859+ function collage(w,h,forms) {
2860+ return A3(newElement, w, h, {
2865+ model: {w:w, h:h, forms:forms}
2868+ return elm.Native.Graphics.Collage.values = { collage:F3(collage) };
2870+};Elm.Native.Mouse = {};
2871+Elm.Native.Mouse.make = function(elm) {
2873+ elm.Native = elm.Native || {};
2874+ elm.Native.Mouse = elm.Native.Mouse || {};
2875+ if (elm.Native.Mouse.values) return elm.Native.Mouse.values;
2877+ var Signal = Elm.Signal.make(elm);
2878+ var Utils = Elm.Native.Utils.make(elm);
2880+ var position = Signal.constant(Utils.Tuple2(0,0));
2881+ position.defaultNumberOfKids = 2;
2883+ // do not move x and y into Elm. By setting their default number
2884+ // of kids, it is possible to detatch the mouse listeners if
2885+ // they are not needed.
2886+ var x = A2( Signal.lift, function(p){return p._0}, position);
2887+ x.defaultNumberOfKids = 0;
2888+ var y = A2( Signal.lift, function(p){return p._1}, position);
2889+ y.defaultNumberOfKids = 0;
2891+ var isDown = Signal.constant(false);
2892+ var clicks = Signal.constant(Utils.Tuple0);
2894+ var node = elm.display === ElmRuntime.Display.FULLSCREEN ? document : elm.node;
2896+ elm.addListener([clicks.id], node, 'click', function click() {
2897+ elm.notify(clicks.id, Utils.Tuple0);
2899+ elm.addListener([isDown.id], node, 'mousedown', function down() {
2900+ elm.notify(isDown.id, true);
2902+ elm.addListener([isDown.id], node, 'mouseup', function up() {
2903+ elm.notify(isDown.id, false);
2905+ elm.addListener([position.id], node, 'mousemove', function move(e) {
2906+ elm.notify(position.id, Utils.getXY(e));
2909+ return elm.Native.Mouse.values = {
2910+ position: position,
2917+Elm.Native.Time = {};
2918+Elm.Native.Time.make = function(elm) {
2920+ elm.Native = elm.Native || {};
2921+ elm.Native.Time = elm.Native.Time || {};
2922+ if (elm.Native.Time.values) return elm.Native.Time.values;
2924+ var Signal = Elm.Signal.make(elm);
2925+ var NS = Elm.Native.Signal.make(elm);
2926+ var Maybe = Elm.Maybe.make(elm);
2927+ var Utils = Elm.Native.Utils.make(elm);
2929+ function fpsWhen(desiredFPS, isOn) {
2930+ var msPerFrame = 1000 / desiredFPS;
2931+ var prev = Date.now(), curr = prev, diff = 0, wasOn = true;
2932+ var ticker = Signal.constant(diff);
2933+ function tick(zero) { return function() {
2935+ diff = zero ? 0 : curr - prev;
2937+ elm.notify(ticker.id, diff);
2941+ function f(isOn, t) {
2943+ timeoutID = setTimeout(tick(!wasOn && isOn), msPerFrame);
2944+ } else if (wasOn) {
2945+ clearTimeout(timeoutID);
2950+ return A3( Signal.lift2, F2(f), isOn, ticker );
2953+ function every(t) {
2954+ var clock = Signal.constant(Date.now());
2955+ setInterval(function() {
2956+ elm.notify(clock.id, Date.now());
2961+ function since(t, s) {
2962+ function cmp(a,b) { return !Utils.eq(a,b); }
2963+ var dcount = Signal.count(A2(NS.delay, t, s));
2964+ return A3( Signal.lift2, F2(cmp), Signal.count(s), dcount );
2967+ var t = Date.parse(s);
2968+ return isNaN(t) ? Maybe.Nothing : Maybe.Just(t);
2970+ return elm.Native.Time.values = {
2971+ fpsWhen : F2(fpsWhen),
2972+ fps : function(t) { return fpsWhen(t, Signal.constant(true)); },
2975+ timestamp : NS.timestamp,
2977+ toDate : function(t) { return new window.Date(t); },
2982+Elm.Native.WebSocket = {};
2983+Elm.Native.WebSocket.make = function(elm) {
2985+ elm.Native = elm.Native || {};
2986+ elm.Native.WebSocket = elm.Native.WebSocket || {};
2987+ if (elm.Native.WebSocket.values) return elm.Native.WebSocket.values;
2989+ var Signal = Elm.Signal.make(elm);
2990+ var List = Elm.Native.List.make(elm);
2992+ function open(url, outgoing) {
2993+ var incoming = Signal.constant(List.Nil);
2994+ var ws = new WebSocket(url);
2999+ ws.onopen = function(e) {
3000+ var len = pending.length;
3001+ for (var i = 0; i < len; ++i) { ws.send(pending[i]); }
3004+ ws.onmessage = function(event) {
3005+ elm.notify(incoming.id, event.data);
3008+ function send(msg) {
3009+ ready ? ws.send(msg) : pending.push(msg);
3012+ function take1(x,y) { return x }
3013+ return A3(Signal.lift2, F2(take1), incoming, A2(Signal.lift, send, outgoing));
3016+ return elm.Native.WebSocket.values = { connect: F2(open) };
3018+Elm.Native.Http = {};
3019+Elm.Native.Http.make = function(elm) {
3021+ elm.Native = elm.Native || {};
3022+ elm.Native.Http = elm.Native.Http || {};
3023+ if (elm.Native.Http.values) return elm.Native.Http.values;
3025+ var List = Elm.List.make(elm);
3026+ var Signal = Elm.Signal.make(elm);
3028+ function registerReq(queue,responses) {
3029+ return function(req) {
3030+ if (req.url.length > 0) {
3031+ sendReq(queue,responses,req);
3036+ function updateQueue(queue,responses) {
3037+ if (queue.length > 0) {
3038+ elm.notify(responses.id, queue[0].value);
3039+ if (queue[0].value.ctor !== 'Waiting') {
3041+ setTimeout(function() { updateQueue(queue,responses); }, 0);
3046+ function sendReq(queue,responses,req) {
3047+ var response = { value: { ctor:'Waiting' } };
3048+ queue.push(response);
3050+ var request = (window.ActiveXObject
3051+ ? new ActiveXObject("Microsoft.XMLHTTP")
3052+ : new XMLHttpRequest());
3054+ request.onreadystatechange = function(e) {
3055+ if (request.readyState === 4) {
3056+ response.value = (request.status >= 200 && request.status < 300 ?
3057+ { ctor:'Success', _0:request.responseText } :
3058+ { ctor:'Failure', _0:request.status, _1:request.statusText });
3059+ setTimeout(function() { updateQueue(queue,responses); }, 0);
3062+ request.open(req.verb, req.url, true);
3063+ function setHeader(pair) {
3064+ request.setRequestHeader( pair._0, pair._1 );
3066+ A2( List.map, setHeader, req.headers );
3067+ request.send(req.body);
3070+ function send(requests) {
3071+ var responses = Signal.constant(elm.Http.values.Waiting);
3072+ var sender = A2( Signal.lift, registerReq([],responses), requests );
3073+ function f(x) { return function(y) { return x; } }
3074+ return A3( Signal.lift2, f, responses, sender );
3077+ return elm.Native.Http.values = {
3082+Elm.Native.Signal = {};
3083+Elm.Native.Signal.make = function(elm) {
3085+ elm.Native = elm.Native || {};
3086+ elm.Native.Signal = elm.Native.Signal || {};
3087+ if (elm.Native.Signal.values) return elm.Native.Signal.values;
3089+ var Utils = Elm.Native.Utils.make(elm);
3090+ var foldr1 = Elm.List.make(elm).foldr1;
3092+ function send(node, timestep, changed) {
3093+ var kids = node.kids;
3094+ for (var i = kids.length; i--; ) {
3095+ kids[i].recv(timestep, changed, node.id);
3099+ function Input(base) {
3100+ this.id = Utils.guid();
3103+ this.defaultNumberOfKids = 0;
3104+ this.recv = function(timestep, eid, v) {
3105+ var changed = eid === this.id;
3106+ if (changed) { this.value = v; }
3107+ send(this, timestep, changed);
3110+ elm.inputs.push(this);
3113+ function LiftN(update, args) {
3114+ this.id = Utils.guid();
3115+ this.value = update();
3118+ var n = args.length;
3120+ var isChanged = false;
3122+ this.recv = function(timestep, changed, parentID) {
3124+ if (changed) { isChanged = true; }
3126+ if (isChanged) { this.value = update(); }
3127+ send(this, timestep, isChanged);
3132+ for (var i = n; i--; ) { args[i].kids.push(this); }
3135+ function lift(func, a) {
3136+ function update() { return func(a.value); }
3137+ return new LiftN(update, [a]);
3139+ function lift2(func, a, b) {
3140+ function update() { return A2( func, a.value, b.value ); }
3141+ return new LiftN(update, [a,b]);
3143+ function lift3(func, a, b, c) {
3144+ function update() { return A3( func, a.value, b.value, c.value ); }
3145+ return new LiftN(update, [a,b,c]);
3147+ function lift4(func, a, b, c, d) {
3148+ function update() { return A4( func, a.value, b.value, c.value, d.value ); }
3149+ return new LiftN(update, [a,b,c,d]);
3151+ function lift5(func, a, b, c, d, e) {
3152+ function update() { return A5( func, a.value, b.value, c.value, d.value, e.value ); }
3153+ return new LiftN(update, [a,b,c,d,e]);
3155+ function lift6(func, a, b, c, d, e, f) {
3156+ function update() { return A6( func, a.value, b.value, c.value, d.value, e.value, f.value ); }
3157+ return new LiftN(update, [a,b,c,d,e,f]);
3159+ function lift7(func, a, b, c, d, e, f, g) {
3160+ function update() { return A7( func, a.value, b.value, c.value, d.value, e.value, f.value, g.value ); }
3161+ return new LiftN(update, [a,b,c,d,e,f,g]);
3163+ function lift8(func, a, b, c, d, e, f, g, h) {
3164+ function update() { return A8( func, a.value, b.value, c.value, d.value, e.value, f.value, g.value, h.value ); }
3165+ return new LiftN(update, [a,b,c,d,e,f,g,h]);
3168+ function Foldp(step, state, input) {
3169+ this.id = Utils.guid();
3170+ this.value = state;
3173+ this.recv = function(timestep, changed, parentID) {
3175+ this.value = A2( step, input.value, this.value );
3177+ send(this, timestep, changed);
3179+ input.kids.push(this);
3182+ function foldp(step, state, input) {
3183+ return new Foldp(step, state, input);
3186+ function DropIf(pred,base,input) {
3187+ this.id = Utils.guid();
3188+ this.value = pred(input.value) ? base : input.value;
3190+ this.recv = function(timestep, changed, parentID) {
3191+ var chng = changed && !pred(input.value);
3192+ if (chng) { this.value = input.value; }
3193+ send(this, timestep, chng);
3195+ input.kids.push(this);
3198+ function DropRepeats(input) {
3199+ this.id = Utils.guid();
3200+ this.value = input.value;
3202+ this.recv = function(timestep, changed, parentID) {
3203+ var chng = changed && !Utils.eq(this.value,input.value);
3204+ if (chng) { this.value = input.value; }
3205+ send(this, timestep, chng);
3207+ input.kids.push(this);
3210+ function timestamp(a) {
3211+ function update() { return Utils.Tuple2(Date.now(), a.value); }
3212+ return new LiftN(update, [a]);
3215+ function SampleOn(s1,s2) {
3216+ this.id = Utils.guid();
3217+ this.value = s2.value;
3221+ var isChanged = false;
3223+ this.recv = function(timestep, changed, parentID) {
3224+ if (parentID === s1.id) isChanged = changed;
3227+ if (isChanged) { this.value = s2.value; }
3228+ send(this, timestep, isChanged);
3233+ s1.kids.push(this);
3234+ s2.kids.push(this);
3237+ function sampleOn(s1,s2) { return new SampleOn(s1,s2); }
3239+ function delay(t,s) {
3240+ var delayed = new Input(s.value);
3241+ var firstEvent = true;
3242+ function update(v) {
3243+ if (firstEvent) { firstEvent = false; return; }
3244+ setTimeout(function() { elm.notify(delayed.id, v); }, t);
3246+ function first(a,b) { return a; }
3247+ return new SampleOn(delayed, lift2(F2(first), delayed, lift(update,s)));
3250+ function Merge(s1,s2) {
3251+ this.id = Utils.guid();
3252+ this.value = s1.value;
3257+ var isChanged = false;
3259+ this.recv = function(timestep, changed, parentID) {
3263+ if (parentID == s2.id && next === null) { next = s2.value; }
3264+ if (parentID == s1.id) { next = s1.value; }
3268+ if (isChanged) { this.value = next; next = null; }
3269+ send(this, timestep, isChanged);
3274+ s1.kids.push(this);
3275+ s2.kids.push(this);
3278+ function merge(s1,s2) { return new Merge(s1,s2); }
3279+ function merges(ss) { return A2(foldr1, F2(merge), ss); }
3281+ return elm.Native.Signal.values = {
3282+ constant : function(v) { return new Input(v); },
3295+ count : function(s) { return foldp(F2(function(_,c) { return c+1; }), 0, s); },
3296+ countIf : F2(function(pred,s) {
3297+ return foldp(F2(function(x,c){
3298+ return pred(x) ? c+1 : c; }), 0, s)}),
3299+ keepIf : F3(function(pred,base,sig) {
3300+ return new DropIf(function(x) {return !pred(x);},base,sig); }),
3301+ dropIf : F3(function(pred,base,sig) { return new DropIf(pred,base,sig); }),
3302+ dropRepeats : function(s) { return new DropRepeats(s);},
3303+ sampleOn : F2(sampleOn),
3304+ timestamp : timestamp
3307+Elm.Native.Random = {};
3308+Elm.Native.Random.make = function(elm) {
3310+ elm.Native = elm.Native || {};
3311+ elm.Native.Random = elm.Native.Random || {};
3312+ if (elm.Native.Random.values) return elm.Native.Random.values;
3314+ var Signal = Elm.Signal.make(elm);
3315+ var List = Elm.Native.List.make(elm);
3317+ function range(min, max, signal) {
3318+ function f(x) { return Math.floor(Math.random() * (max-min+1)) + min; }
3319+ return A2( Signal.lift, f, signal );
3322+ function float_(signal) {
3323+ function f(x) { return Math.random(); }
3324+ return A2( Signal.lift, f, signal );
3327+ function floatList(signal) {
3329+ if (n < 0) return List.Nil;
3330+ var arr = new Array(n);
3331+ for (var i = n; i--; ) {
3332+ arr[i] = Math.random();
3334+ return List.fromArray(arr);
3336+ return A2( Signal.lift, f, signal );
3339+ return elm.Native.Random.values = {
3342+ floatList: floatList
3346+Elm.Native.Window = {};
3347+Elm.Native.Window.make = function(elm) {
3349+ elm.Native = elm.Native || {};
3350+ elm.Native.Window = elm.Native.Window || {};
3351+ if (elm.Native.Window.values) return elm.Native.Window.values;
3353+ var Signal = Elm.Signal.make(elm);
3354+ var Tuple2 = Elm.Native.Utils.make(elm).Tuple2;
3356+ function getWidth() { return elm.node.clientWidth; }
3357+ function getHeight() {
3358+ if (elm.display === ElmRuntime.Display.FULLSCREEN) {
3359+ return window.innerHeight;
3361+ return elm.node.clientHeight;
3364+ var dimensions = Signal.constant(Tuple2(getWidth(), getHeight()));
3365+ dimensions.defaultNumberOfKids = 2;
3367+ // Do not move width and height into Elm. By setting the default number of kids,
3368+ // the resize listener can be detached.
3369+ var width = A2(Signal.lift, function(p){return p._0;}, dimensions);
3370+ width.defaultNumberOfKids = 0;
3372+ var height = A2(Signal.lift, function(p){return p._1;}, dimensions);
3373+ height.defaultNumberOfKids = 0;
3375+ function resizeIfNeeded() {
3376+ // Do not trigger event if the dimensions have not changed.
3377+ // This should be most of the time.
3378+ var w = getWidth();
3379+ var h = getHeight();
3380+ if (dimensions.value._0 === w && dimensions.value._1 === h) return;
3382+ setTimeout(function () {
3383+ // Check again to see if the dimensions have changed.
3384+ // It is conceivable that the dimensions have changed
3385+ // again while some other event was being processed.
3386+ var w = getWidth();
3387+ var h = getHeight();
3388+ if (dimensions.value._0 === w && dimensions.value._1 === h) return;
3389+ elm.notify(dimensions.id, Tuple2(w,h));
3392+ elm.addListener([dimensions.id], window, 'resize', resizeIfNeeded);
3394+ return elm.Native.Window.values = {
3395+ dimensions:dimensions,
3398+ resizeIfNeeded:resizeIfNeeded
3402+Elm.Native.Touch = {};
3403+Elm.Native.Touch.make = function(elm) {
3405+ elm.Native = elm.Native || {};
3406+ elm.Native.Touch = elm.Native.Touch || {};
3407+ if (elm.Native.Touch.values) return elm.Native.Touch.values;
3409+ var Signal = Elm.Signal.make(elm);
3410+ var List = Elm.Native.List.make(elm);
3411+ var Utils = Elm.Native.Utils.make(elm);
3417+ this.insert = function(key,value) {
3418+ this.keys.push(key);
3419+ this.values.push(value);
3421+ this.lookup = function(key) {
3422+ var i = this.keys.indexOf(key)
3423+ return i >= 0 ? this.values[i] : {x:0,y:0,t:0};
3425+ this.remove = function(key) {
3426+ var i = this.keys.indexOf(key);
3428+ var t = this.values[i];
3429+ this.keys.splice(i,1);
3430+ this.values.splice(i,1);
3433+ this.clear = function() {
3439+ var root = Signal.constant([]),
3442+ tap = {_:{},x:0,y:0},
3445+ function touch(t) {
3446+ var r = dict.lookup(t.identifier);
3447+ var point = Utils.getXY(t);
3458+ var node = elm.display === ElmRuntime.Display.FULLSCREEN ? document : elm.node;
3460+ function start(e) {
3461+ var point = Utils.getXY(e);
3462+ dict.insert(e.identifier,
3468+ var t = dict.remove(e.identifier);
3469+ if (Date.now() - t.t < tapTime) {
3471+ tap = {_:{}, x:t.x, y:t.y};
3475+ function listen(name, f) {
3476+ function update(e) {
3477+ for (var i = e.changedTouches.length; i--; ) { f(e.changedTouches[i]); }
3478+ var ts = new Array(e.touches.length);
3479+ for (var i = e.touches.length; i--; ) { ts[i] = touch(e.touches[i]); }
3480+ elm.notify(root.id, ts);
3481+ e.preventDefault();
3483+ elm.addListener([root.id], node, name, update);
3486+ listen("touchstart", start);
3487+ listen("touchmove", function(_){});
3488+ listen("touchend", end);
3489+ listen("touchcancel", end);
3490+ listen("touchleave", end);
3494+ var point = Utils.getXY(e);
3495+ for (var i = root.value.length; i--; ) {
3496+ if (root.value[i].id === mouseID) {
3497+ root.value[i].x = point._0;
3498+ root.value[i].y = point._1;
3499+ elm.notify(root.id, root.value);
3504+ elm.addListener([root.id], node, "mousedown", function down(e) {
3505+ node.addEventListener("mousemove", move);
3506+ e.identifier = mouseID;
3508+ root.value.push(touch(e));
3509+ elm.notify(root.id, root.value);
3511+ elm.addListener([root.id], node, "mouseup", function up(e) {
3512+ node.removeEventListener("mousemove", move);
3513+ e.identifier = mouseID;
3515+ for (var i = root.value.length; i--; ) {
3516+ if (root.value[i].id === mouseID) {
3517+ root.value.splice(i, 1);
3522+ elm.notify(root.id, root.value);
3524+ elm.addListener([root.id], node, "blur", function blur(e) {
3525+ node.removeEventListener("mousemove", move);
3526+ if (root.value.length > 0) {
3527+ elm.notify(root.id, []);
3533+ function dependency(f) {
3534+ var sig = A2( Signal.lift, f, root );
3535+ root.defaultNumberOfKids += 1;
3536+ sig.defaultNumberOfKids = 0;
3540+ var touches = dependency(List.fromArray);
3542+ var taps = function() {
3543+ var sig = dependency(function(_) { return tap; });
3544+ sig.defaultNumberOfKids = 1;
3545+ function pred(_) { var b = hasTap; hasTap = false; return b; }
3546+ var sig2 = A3( Signal.keepIf, pred, {_:{},x:0,y:0}, sig);
3547+ sig2.defaultNumberOfKids = 0;
3551+ return elm.Native.Touch.values = { touches: touches, taps: taps };
3554+Elm.Native.Keyboard = {};
3555+Elm.Native.Keyboard.make = function(elm) {
3557+ elm.Native = elm.Native || {};
3558+ elm.Native.Keyboard = elm.Native.Keyboard || {};
3559+ if (elm.Native.Keyboard.values) return elm.Native.Keyboard.values;
3561+ // Duplicated from Native.Signal
3562+ function send(node, timestep, changed) {
3563+ var kids = node.kids;
3564+ for (var i = kids.length; i--; ) {
3565+ kids[i].recv(timestep, changed, node.id);
3569+ var Signal = Elm.Signal.make(elm);
3570+ var NList = Elm.Native.List.make(elm);
3571+ var Utils = Elm.Native.Utils.make(elm);
3573+ var downEvents = Signal.constant(0);
3574+ var upEvents = Signal.constant(0);
3575+ var blurEvents = Signal.constant(0);
3577+ elm.addListener([downEvents.id], document, 'keydown', function down(e) {
3578+ elm.notify(downEvents.id, e.keyCode);
3581+ elm.addListener([upEvents.id], document, 'keyup', function up(e) {
3582+ elm.notify(upEvents.id, e.keyCode);
3585+ elm.addListener([blurEvents.id], document, 'blur', function blur(e) {
3586+ elm.notify(blurEvents.id, NList.Nil);
3589+ function KeyMerge(down, up, blur) {
3590+ var args = [down,up,blur];
3591+ this.id = Utils.guid();
3592+ // Ignore starting values here
3593+ this.value = NList.Nil
3596+ var n = args.length;
3598+ var isChanged = false;
3600+ this.recv = function(timestep, changed, parentID) {
3603+ // We know this a change must only be one of the following cases
3604+ if (parentID === down.id && !(NList.member(down.value)(this.value))) {
3606+ this.value = NList.Cons(down.value, this.value);
3608+ if (parentID === up.id) {
3610+ var notEq = function(kc) { return kc !== up.value };
3611+ this.value = NList.filter(notEq)(this.value);
3613+ if (parentID === blur.id) {
3615+ this.value = NList.Nil;
3619+ send(this, timestep, isChanged);
3625+ for (var i = n; i--; ) { args[i].kids.push(this); }
3629+ var keysDown = Signal.dropRepeats(new KeyMerge(downEvents,upEvents,blurEvents));
3631+ function keySignal(f) {
3632+ var signal = A2(Signal.lift, f, keysDown);
3633+ // must set the default number of kids to make it possible to filter
3634+ // these signals if they are not actually used.
3635+ keysDown.defaultNumberOfKids += 1;
3636+ signal.defaultNumberOfKids = 1;
3637+ var filtered = Signal.dropRepeats(signal)
3638+ filtered.defaultNumberOfKids = 0;
3642+ function dir(up, down, left, right) {
3645+ while (ks.ctor === "::") {
3647+ case left : --x; break;
3648+ case right: ++x; break;
3649+ case up : ++y; break;
3650+ case down : --y; break;
3654+ return { _:{}, x:x, y:y };
3656+ return keySignal(f);
3659+ function is(key) { return keySignal(NList.member(key)); }
3661+ var lastPressed = downEvents;
3663+ return elm.Native.Keyboard.values = {
3665+ directions:F4(dir),
3667+ lastPressed:lastPressed
3671+Elm.Bitwise = Elm.Bitwise || {};
3672+Elm.Bitwise.make = function (_elm) {
3674+ _elm.Bitwise = _elm.Bitwise || {};
3675+ if (_elm.Bitwise.values)
3676+ return _elm.Bitwise.values;
3677+ var _N = Elm.Native,
3678+ _U = _N.Utils.make(_elm),
3679+ _L = _N.List.make(_elm),
3680+ _E = _N.Error.make(_elm),
3681+ $moduleName = "Bitwise";
3682+ var Native = Native || {};
3683+ Native.Bitwise = Elm.Native.Bitwise.make(_elm);
3685+ var shiftRightLogical = Native.Bitwise.shiftRightLogical;
3686+ var shiftRight = Native.Bitwise.shiftRightArithmatic;
3687+ var shiftLeft = Native.Bitwise.shiftLeft;
3688+ var complement = Native.Bitwise.complement;
3689+ var xor = Native.Bitwise.xor;
3690+ var or = Native.Bitwise.or;
3691+ var and = Native.Bitwise.and;
3692+ _elm.Bitwise.values = {_op: _op
3696+ ,complement: complement
3697+ ,shiftLeft: shiftLeft
3698+ ,shiftRight: shiftRight
3699+ ,shiftRightLogical: shiftRightLogical};
3700+ return _elm.Bitwise.values;
3701+};Elm.Random = Elm.Random || {};
3702+Elm.Random.make = function (_elm) {
3704+ _elm.Random = _elm.Random || {};
3705+ if (_elm.Random.values)
3706+ return _elm.Random.values;
3707+ var _N = Elm.Native,
3708+ _U = _N.Utils.make(_elm),
3709+ _L = _N.List.make(_elm),
3710+ _E = _N.Error.make(_elm),
3711+ $moduleName = "Random";
3712+ var Native = Native || {};
3713+ Native.Random = Elm.Native.Random.make(_elm);
3714+ var Signal = Elm.Signal.make(_elm);
3716+ var floatList = Native.Random.floatList;
3717+ var $float = Native.Random.float_;
3718+ var range = Native.Random.range;
3719+ _elm.Random.values = {_op: _op
3722+ ,floatList: floatList};
3723+ return _elm.Random.values;
3724+};Elm.WebSocket = Elm.WebSocket || {};
3725+Elm.WebSocket.make = function (_elm) {
3727+ _elm.WebSocket = _elm.WebSocket || {};
3728+ if (_elm.WebSocket.values)
3729+ return _elm.WebSocket.values;
3730+ var _N = Elm.Native,
3731+ _U = _N.Utils.make(_elm),
3732+ _L = _N.List.make(_elm),
3733+ _E = _N.Error.make(_elm),
3734+ $moduleName = "WebSocket";
3735+ var Basics = Elm.Basics.make(_elm);
3736+ var Native = Native || {};
3737+ Native.WebSocket = Elm.Native.WebSocket.make(_elm);
3738+ var Signal = Elm.Signal.make(_elm);
3740+ var connect = Native.WebSocket.connect;
3741+ _elm.WebSocket.values = {_op: _op
3742+ ,connect: connect};
3743+ return _elm.WebSocket.values;
3744+};Elm.Signal = Elm.Signal || {};
3745+Elm.Signal.make = function (_elm) {
3747+ _elm.Signal = _elm.Signal || {};
3748+ if (_elm.Signal.values)
3749+ return _elm.Signal.values;
3750+ var _N = Elm.Native,
3751+ _U = _N.Utils.make(_elm),
3752+ _L = _N.List.make(_elm),
3753+ _E = _N.Error.make(_elm),
3754+ $moduleName = "Signal";
3755+ var Basics = Elm.Basics.make(_elm);
3756+ var List = Elm.List.make(_elm);
3757+ var Maybe = Elm.Maybe.make(_elm);
3758+ var Native = Native || {};
3759+ Native.Error = Elm.Native.Error.make(_elm);
3760+ var Native = Native || {};
3761+ Native.Signal = Elm.Native.Signal.make(_elm);
3763+ _op["~"] = F2(function (sf,s) {
3764+ return A3(Native.Signal.lift2,
3765+ F2(function (f,x) {
3771+ _op["<~"] = F2(function (f,s) {
3772+ return A2(Native.Signal.lift,
3776+ var sampleOn = Native.Signal.sampleOn;
3777+ var dropRepeats = Native.Signal.dropRepeats;
3778+ var dropIf = Native.Signal.dropIf;
3779+ var keepIf = Native.Signal.keepIf;
3780+ var keepWhen = F3(function (bs,
3783+ return A2(_op["<~"],
3792+ F2(function (v0,v1) {
3793+ return {ctor: "_Tuple2"
3797+ A2(sampleOn,sig,bs)),
3800+ var dropWhen = function (bs) {
3801+ return keepWhen(A2(_op["<~"],
3805+ var countIf = Native.Signal.countIf;
3806+ var count = Native.Signal.count;
3807+ var combine = A2(List.foldr,
3808+ Native.Signal.lift2(F2(function (x,
3814+ Native.Signal.constant(_L.fromArray([])));
3815+ var merges = Native.Signal.merges;
3816+ var merge = Native.Signal.merge;
3817+ var foldp = Native.Signal.foldp;
3818+ var lift8 = Native.Signal.lift8;
3819+ var lift7 = Native.Signal.lift7;
3820+ var lift6 = Native.Signal.lift6;
3821+ var lift5 = Native.Signal.lift5;
3822+ var lift4 = Native.Signal.lift4;
3823+ var lift3 = Native.Signal.lift3;
3824+ var lift2 = Native.Signal.lift2;
3825+ var lift = Native.Signal.lift;
3826+ var constant = Native.Signal.constant;
3827+ var Signal = {ctor: "Signal"};
3828+ _elm.Signal.values = {_op: _op
3829+ ,constant: constant
3846+ ,keepWhen: keepWhen
3847+ ,dropWhen: dropWhen
3848+ ,dropRepeats: dropRepeats
3849+ ,sampleOn: sampleOn
3851+ return _elm.Signal.values;
3852+};Elm.Time = Elm.Time || {};
3853+Elm.Time.make = function (_elm) {
3855+ _elm.Time = _elm.Time || {};
3856+ if (_elm.Time.values)
3857+ return _elm.Time.values;
3858+ var _N = Elm.Native,
3859+ _U = _N.Utils.make(_elm),
3860+ _L = _N.List.make(_elm),
3861+ _E = _N.Error.make(_elm),
3862+ $moduleName = "Time";
3863+ var Basics = Elm.Basics.make(_elm);
3864+ var Native = Native || {};
3865+ Native.Time = Elm.Native.Time.make(_elm);
3866+ var Signal = Elm.Signal.make(_elm);
3868+ var delay = Native.Time.delay;
3869+ var timestamp = Native.Time.timestamp;
3870+ var since = Native.Time.since;
3871+ var every = Native.Time.every;
3872+ var fpsWhen = Native.Time.fpsWhen;
3873+ var fps = Native.Time.fps;
3874+ var inMilliseconds = function (t) {
3877+ var millisecond = 1;
3878+ var second = 1000 * millisecond;
3879+ var minute = 60 * second;
3880+ var hour = 60 * minute;
3881+ var inHours = function (t) {
3884+ var inMinutes = function (t) {
3887+ var inSeconds = function (t) {
3890+ _elm.Time.values = {_op: _op
3891+ ,millisecond: millisecond
3895+ ,inMilliseconds: inMilliseconds
3896+ ,inSeconds: inSeconds
3897+ ,inMinutes: inMinutes
3903+ ,timestamp: timestamp
3905+ return _elm.Time.values;
3906+};Elm.Dict = Elm.Dict || {};
3907+Elm.Dict.make = function (_elm) {
3909+ _elm.Dict = _elm.Dict || {};
3910+ if (_elm.Dict.values)
3911+ return _elm.Dict.values;
3912+ var _N = Elm.Native,
3913+ _U = _N.Utils.make(_elm),
3914+ _L = _N.List.make(_elm),
3915+ _E = _N.Error.make(_elm),
3916+ $moduleName = "Dict";
3917+ var Basics = Elm.Basics.make(_elm);
3918+ var List = Elm.List.make(_elm);
3919+ var Maybe = Elm.Maybe.make(_elm);
3920+ var Native = Native || {};
3921+ Native.Error = Elm.Native.Error.make(_elm);
3922+ var Native = Native || {};
3923+ Native.Utils = Elm.Native.Utils.make(_elm);
3925+ var Same = {ctor: "Same"};
3926+ var Remove = {ctor: "Remove"};
3927+ var Insert = {ctor: "Insert"};
3928+ var showFlag = function (f) {
3929+ return function () {
3931+ {case "Insert": return "Insert";
3932+ case "Remove": return "Remove";
3933+ case "Same": return "Same";}
3934+ _E.Case($moduleName,
3935+ "between lines 136 and 141");
3938+ var RBEmpty = function (a) {
3939+ return {ctor: "RBEmpty"
3942+ var RBNode = F5(function (a,
3947+ return {ctor: "RBNode"
3954+ var max = function (t) {
3955+ return function () {
3958+ return Native.Error.raise("(max Empty) is not defined");
3962+ return {ctor: "_Tuple2"
3966+ _E.Case($moduleName,
3967+ "between lines 82 and 87");
3970+ var LBBlack = {ctor: "LBBlack"};
3971+ var LBlack = {ctor: "LBlack"};
3972+ var showLColor = function (c) {
3973+ return function () {
3977+ case "LBlack": return "LBlack";}
3978+ _E.Case($moduleName,
3979+ "between lines 62 and 64");
3982+ var empty = RBEmpty(LBlack);
3983+ var min = function (t) {
3984+ return function () {
3989+ return Native.Error.raise("(min Empty) is not defined");}
3994+ switch (t._3._0.ctor)
3996+ return {ctor: "_Tuple2"
4001+ _E.Case($moduleName,
4002+ "between lines 75 and 78");
4005+ var lookup = F2(function (k,t) {
4006+ return function () {
4011+ return Maybe.Nothing;}
4014+ return function () {
4015+ var _v25 = A2(Native.Utils.compare,
4020+ return Maybe.Just(t._2);
4021+ case "GT": return A2(lookup,
4024+ case "LT": return A2(lookup,
4027+ _E.Case($moduleName,
4028+ "between lines 93 and 99");
4030+ _E.Case($moduleName,
4031+ "between lines 90 and 99");
4034+ var member = F2(function (k,t) {
4035+ return Maybe.isJust(A2(lookup,
4039+ var findWithDefault = F3(function (base,
4042+ return function () {
4046+ {case "LBlack": return base;}
4049+ return function () {
4050+ var _v33 = A2(Native.Utils.compare,
4054+ {case "EQ": return t._2;
4056+ return A3(findWithDefault,
4061+ return A3(findWithDefault,
4065+ _E.Case($moduleName,
4066+ "between lines 105 and 110");
4068+ _E.Case($moduleName,
4069+ "between lines 102 and 110");
4072+ var map = F2(function (f,t) {
4073+ return function () {
4078+ return RBEmpty(LBlack);}
4080+ case "RBNode": return A5(RBNode,
4086+ _E.Case($moduleName,
4087+ "between lines 302 and 307");
4090+ var foldl = F3(function (f,
4093+ return function () {
4097+ {case "LBlack": return acc;}
4099+ case "RBNode": return A3(foldl,
4104+ A3(foldl,f,acc,t._3)),
4106+ _E.Case($moduleName,
4107+ "between lines 310 and 315");
4110+ var foldr = F3(function (f,
4113+ return function () {
4117+ {case "LBlack": return acc;}
4119+ case "RBNode": return A3(foldr,
4124+ A3(foldr,f,acc,t._4)),
4126+ _E.Case($moduleName,
4127+ "between lines 318 and 323");
4130+ var keys = function (t) {
4132+ F3(function (k,v,acc) {
4140+ var values = function (t) {
4142+ F3(function (k,v,acc) {
4150+ var toList = function (t) {
4152+ F3(function (k,v,acc) {
4154+ ,_0: {ctor: "_Tuple2"
4162+ var NBlack = {ctor: "NBlack"};
4163+ var BBlack = {ctor: "BBlack"};
4164+ var isBBlack = function (t) {
4165+ return function () {
4169+ {case "LBBlack": return true;}
4173+ {case "BBlack": return true;}
4178+ var Black = {ctor: "Black"};
4179+ var blackish = function (t) {
4180+ return function () {
4182+ {case "RBEmpty": return true;
4185+ Black) || _U.eq(t._0,BBlack);}
4186+ _E.Case($moduleName,
4187+ "between lines 253 and 255");
4190+ var blacken = function (t) {
4191+ return function () {
4194+ return RBEmpty(LBlack);
4195+ case "RBNode": return A5(RBNode,
4201+ _E.Case($moduleName,
4202+ "between lines 289 and 291");
4205+ var Red = {ctor: "Red"};
4206+ var showNColor = function (c) {
4207+ return function () {
4209+ {case "BBlack": return "BBlack";
4210+ case "Black": return "Black";
4211+ case "NBlack": return "NBlack";
4212+ case "Red": return "Red";}
4213+ _E.Case($moduleName,
4214+ "between lines 51 and 55");
4217+ var reportRemBug = F4(function (msg,
4221+ return Native.Error.raise(List.concat(_L.fromArray(["Internal red-black tree invariant violated, expected "
4229+ ,"\nPlease report this bug to https://github.com/evancz/Elm/issues"])));
4231+ var ensureBlackRoot = function (t) {
4232+ return function () {
4236+ {case "LBlack": return t;}
4240+ {case "Black": return t;
4241+ case "Red": return A5(RBNode,
4248+ _E.Case($moduleName,
4249+ "between lines 117 and 123");
4252+ var moreBlack = function (c) {
4253+ return function () {
4256+ return Native.Error.raise("Can\'t make a double black node more black!");
4257+ case "Black": return BBlack;
4258+ case "NBlack": return Red;
4259+ case "Red": return Black;}
4260+ _E.Case($moduleName,
4261+ "between lines 179 and 183");
4264+ var lessBlack = function (c) {
4265+ return function () {
4267+ {case "BBlack": return Black;
4268+ case "Black": return Red;
4270+ return Native.Error.raise("Can\'t make a negative black node less black!");
4271+ case "Red": return NBlack;}
4272+ _E.Case($moduleName,
4273+ "between lines 186 and 190");
4276+ var lessBlackTree = function (t) {
4277+ return function () {
4282+ return RBEmpty(LBlack);}
4284+ case "RBNode": return A5(RBNode,
4290+ _E.Case($moduleName,
4291+ "between lines 193 and 195");
4294+ var redden = function (t) {
4295+ return function () {
4298+ return Native.Error.raise("can\'t make a Leaf red");
4299+ case "RBNode": return A5(RBNode,
4305+ _E.Case($moduleName,
4306+ "between lines 295 and 299");
4309+ var balance_node = function (t) {
4310+ return function () {
4311+ var assemble = function (col) {
4312+ return function (xk) {
4313+ return function (xv) {
4314+ return function (yk) {
4315+ return function (yv) {
4316+ return function (zk) {
4317+ return function (zv) {
4318+ return function (a) {
4319+ return function (b) {
4320+ return function (c) {
4321+ return function (d) {
4326+ A5(RBNode,Black,xk,xv,a,b),
4327+ A5(RBNode,Black,zk,zv,c,d));
4339+ return blackish(t) ? function () {
4344+ switch (t._3._0.ctor)
4346+ switch (t._3._3.ctor)
4348+ switch (t._3._3._0.ctor)
4350+ return assemble(t._0)(t._3._3._1)(t._3._3._2)(t._3._1)(t._3._2)(t._1)(t._2)(t._3._3._3)(t._3._3._4)(t._3._4)(t._4);}
4352+ switch (t._3._4.ctor)
4354+ switch (t._3._4._0.ctor)
4356+ return assemble(t._0)(t._3._1)(t._3._2)(t._3._4._1)(t._3._4._2)(t._1)(t._2)(t._3._3)(t._3._4._3)(t._3._4._4)(t._4);}
4362+ switch (t._4._0.ctor)
4364+ switch (t._4._3.ctor)
4366+ switch (t._4._3._0.ctor)
4368+ return assemble(t._0)(t._1)(t._2)(t._4._3._1)(t._4._3._2)(t._4._1)(t._4._2)(t._3)(t._4._3._3)(t._4._3._4)(t._4._4);}
4370+ switch (t._4._4.ctor)
4372+ switch (t._4._4._0.ctor)
4374+ return assemble(t._0)(t._1)(t._2)(t._4._1)(t._4._2)(t._4._4._1)(t._4._4._2)(t._3)(t._4._3)(t._4._4._3)(t._4._4._4);}
4382+ switch (t._4._0.ctor)
4384+ switch (t._4._3.ctor)
4386+ switch (t._4._3._0.ctor)
4388+ return function () {
4389+ switch (t._4._4.ctor)
4391+ switch (t._4._4._0.ctor)
4408+ redden(t._4._4)));}
4417+ switch (t._3._0.ctor)
4419+ switch (t._3._4.ctor)
4421+ switch (t._3._4._0.ctor)
4423+ return function () {
4424+ switch (t._3._3.ctor)
4426+ switch (t._3._3._0.ctor)
4456+ var balance = F5(function (c,
4461+ return balance_node(A5(RBNode,
4468+ var bubble = F5(function (c,
4473+ return isBBlack(l) || isBBlack(r) ? A5(balance,
4478+ lessBlackTree(r)) : A5(RBNode,
4485+ var remove_max = F5(function (c,
4490+ return function () {
4492+ {case "RBEmpty": return A3(rem,
4496+ case "RBNode": return A5(bubble,
4507+ _E.Case($moduleName,
4508+ "between lines 241 and 244");
4511+ var rem = F3(function (c,l,r) {
4512+ return function () {
4513+ var _v175 = {ctor: "_Tuple2"
4516+ switch (_v175.ctor)
4518+ switch (_v175._0.ctor)
4520+ switch (_v175._1.ctor)
4522+ return function () {
4525+ return RBEmpty(LBBlack);
4527+ return RBEmpty(LBlack);}
4528+ _E.Case($moduleName,
4529+ "between lines 214 and 217");
4532+ return function () {
4533+ var _v197 = {ctor: "_Tuple3"
4537+ switch (_v197.ctor)
4539+ switch (_v197._0.ctor)
4541+ switch (_v197._1.ctor)
4543+ switch (_v197._2.ctor)
4544+ {case "Red": return A5(RBNode,
4553+ return A4(reportRemBug,
4554+ "Black, LBlack, Red",
4556+ showLColor(_v175._0._0),
4557+ showNColor(_v175._1._0));
4561+ switch (_v175._1.ctor)
4563+ return function () {
4564+ var _v201 = {ctor: "_Tuple3"
4568+ switch (_v201.ctor)
4570+ switch (_v201._0.ctor)
4572+ switch (_v201._1.ctor)
4574+ switch (_v201._2.ctor)
4585+ return A4(reportRemBug,
4586+ "Black, Red, LBlack",
4588+ showNColor(_v175._0._0),
4589+ showLColor(_v175._1._0));
4592+ return function () {
4593+ var l$ = A5(remove_max,
4614+ return A5(bubble,c,k,v,l$,r);
4618+ _E.Case($moduleName,
4619+ "between lines 213 and 231");
4622+ var update = F3(function (k,
4625+ return function () {
4626+ var up = function (t) {
4627+ return function () {
4632+ return function () {
4633+ var _v212 = u(Maybe.Nothing);
4634+ switch (_v212.ctor)
4636+ return {ctor: "_Tuple2"
4645+ return {ctor: "_Tuple2"
4648+ _E.Case($moduleName,
4649+ "between lines 145 and 148");
4653+ return function () {
4654+ var _v214 = A2(Native.Utils.compare,
4657+ switch (_v214.ctor)
4658+ {case "EQ": return function () {
4659+ var _v215 = u(Maybe.Just(t._2));
4660+ switch (_v215.ctor)
4662+ return {ctor: "_Tuple2"
4671+ return {ctor: "_Tuple2"
4673+ ,_1: A3(rem,t._0,t._3,t._4)};}
4674+ _E.Case($moduleName,
4675+ "between lines 149 and 152");
4677+ case "GT": return function () {
4681+ return function () {
4684+ return {ctor: "_Tuple2"
4693+ return {ctor: "_Tuple2"
4702+ return {ctor: "_Tuple2"
4710+ _E.Case($moduleName,
4711+ "between lines 158 and 162");
4714+ case "LT": return function () {
4718+ return function () {
4721+ return {ctor: "_Tuple2"
4730+ return {ctor: "_Tuple2"
4739+ return {ctor: "_Tuple2"
4747+ _E.Case($moduleName,
4748+ "between lines 153 and 157");
4751+ _E.Case($moduleName,
4752+ "between lines 148 and 162");
4754+ _E.Case($moduleName,
4755+ "between lines 144 and 162");
4761+ return function () {
4764+ return ensureBlackRoot(t$);
4766+ return blacken(t$);
4767+ case "Same": return t$;}
4768+ _E.Case($moduleName,
4769+ "between lines 163 and 168");
4773+ var insert = F3(function (k,
4776+ return function () {
4777+ var u = function (_v220) {
4778+ return function () {
4779+ return Maybe.Just(v);
4782+ return A3(update,k,u,t);
4785+ var singleton = F2(function (k,
4792+ var union = F2(function (t1,
4799+ var intersect = F2(function (t1,
4801+ return function () {
4802+ var combine = F3(function (k,
4807+ t2) ? A3(insert,k,v,t) : t;
4815+ var fromList = function (assocs) {
4816+ return A3(List.foldl,
4817+ F2(function (_v222,d) {
4818+ return function () {
4819+ switch (_v222.ctor)
4825+ _E.Case($moduleName,
4826+ "on line 353, column 43 to 55");
4832+ var remove = F2(function (k,t) {
4833+ return function () {
4834+ var u = function (_v226) {
4835+ return function () {
4836+ return Maybe.Nothing;
4839+ return A3(update,k,u,t);
4842+ var diff = F2(function (t1,t2) {
4844+ F3(function (k,v,t) {
4845+ return A2(remove,k,t);
4850+ _elm.Dict.values = {_op: _op
4852+ ,singleton: singleton
4856+ ,findWithDefault: findWithDefault
4863+ ,intersect: intersect
4868+ ,fromList: fromList};
4869+ return _elm.Dict.values;
4870+};Elm.Char = Elm.Char || {};
4871+Elm.Char.make = function (_elm) {
4873+ _elm.Char = _elm.Char || {};
4874+ if (_elm.Char.values)
4875+ return _elm.Char.values;
4876+ var _N = Elm.Native,
4877+ _U = _N.Utils.make(_elm),
4878+ _L = _N.List.make(_elm),
4879+ _E = _N.Error.make(_elm),
4880+ $moduleName = "Char";
4881+ var Native = Native || {};
4882+ Native.Char = Elm.Native.Char.make(_elm);
4884+ var fromCode = Native.Char.fromCode;
4885+ var toCode = Native.Char.toCode;
4886+ var toLocaleLower = Native.Char.toLocaleLower;
4887+ var toLocaleUpper = Native.Char.toLocaleUpper;
4888+ var toLower = Native.Char.toLower;
4889+ var toUpper = Native.Char.toUpper;
4890+ var isHexDigit = Native.Char.isHexDigit;
4891+ var isOctDigit = Native.Char.isOctDigit;
4892+ var isDigit = Native.Char.isDigit;
4893+ var isLower = Native.Char.isLower;
4894+ var isUpper = Native.Char.isUpper;
4895+ _elm.Char.values = {_op: _op
4899+ ,isOctDigit: isOctDigit
4900+ ,isHexDigit: isHexDigit
4903+ ,toLocaleUpper: toLocaleUpper
4904+ ,toLocaleLower: toLocaleLower
4906+ ,fromCode: fromCode};
4907+ return _elm.Char.values;
4908+};Elm.Either = Elm.Either || {};
4909+Elm.Either.make = function (_elm) {
4911+ _elm.Either = _elm.Either || {};
4912+ if (_elm.Either.values)
4913+ return _elm.Either.values;
4914+ var _N = Elm.Native,
4915+ _U = _N.Utils.make(_elm),
4916+ _L = _N.List.make(_elm),
4917+ _E = _N.Error.make(_elm),
4918+ $moduleName = "Either";
4919+ var List = Elm.List.make(_elm);
4921+ var Right = function (a) {
4922+ return {ctor: "Right",_0: a};
4924+ var isRight = function (e) {
4925+ return function () {
4927+ {case "Right": return true;}
4931+ var Left = function (a) {
4932+ return {ctor: "Left",_0: a};
4934+ var either = F3(function (f,
4937+ return function () {
4939+ {case "Left": return f(e._0);
4940+ case "Right": return g(e._0);}
4941+ _E.Case($moduleName,
4942+ "on line 37, column 16 to 60");
4945+ var isLeft = function (e) {
4946+ return function () {
4948+ {case "Left": return true;}
4952+ var consLeft = F2(function (e,
4954+ return function () {
4956+ {case "Left": return {ctor: "::"
4959+ case "Right": return vs;}
4960+ _E.Case($moduleName,
4961+ "between lines 78 and 80");
4964+ var lefts = function (es) {
4965+ return A3(List.foldr,
4970+ var consRight = F2(function (e,
4972+ return function () {
4974+ {case "Left": return vs;
4975+ case "Right": return {ctor: "::"
4978+ _E.Case($moduleName,
4979+ "between lines 83 and 85");
4982+ var rights = function (es) {
4983+ return A3(List.foldr,
4988+ var consEither = F2(function (e,
4990+ return function () {
4993+ return function () {
4996+ return {ctor: "_Tuple2"
5002+ return {ctor: "_Tuple2"
5007+ _E.Case($moduleName,
5008+ "between lines 88 and 90");
5010+ _E.Case($moduleName,
5011+ "between lines 88 and 90");
5014+ var partition = function (es) {
5015+ return A3(List.foldr,
5018+ ,_0: _L.fromArray([])
5019+ ,_1: _L.fromArray([])},
5022+ _elm.Either.values = {_op: _op
5028+ ,partition: partition
5029+ ,consLeft: consLeft
5030+ ,consRight: consRight
5031+ ,consEither: consEither
5034+ return _elm.Either.values;
5035+};Elm.Transform2D = Elm.Transform2D || {};
5036+Elm.Transform2D.make = function (_elm) {
5038+ _elm.Transform2D = _elm.Transform2D || {};
5039+ if (_elm.Transform2D.values)
5040+ return _elm.Transform2D.values;
5041+ var _N = Elm.Native,
5042+ _U = _N.Utils.make(_elm),
5043+ _L = _N.List.make(_elm),
5044+ _E = _N.Error.make(_elm),
5045+ $moduleName = "Transform2D";
5046+ var Native = Native || {};
5047+ Native.Transform2D = Elm.Native.Transform2D.make(_elm);
5049+ var multiply = Native.Transform2D.multiply;
5050+ var rotation = Native.Transform2D.rotation;
5051+ var matrix = Native.Transform2D.matrix;
5052+ var translation = F2(function (x,
5062+ var scale = function (s) {
5071+ var scaleX = function (x) {
5080+ var scaleY = function (y) {
5089+ var identity = Native.Transform2D.identity;
5090+ var Transform2D = {ctor: "Transform2D"};
5091+ _elm.Transform2D.values = {_op: _op
5092+ ,identity: identity
5094+ ,rotation: rotation
5095+ ,translation: translation
5099+ ,multiply: multiply
5100+ ,Transform2D: Transform2D};
5101+ return _elm.Transform2D.values;
5102+};Elm.Basics = Elm.Basics || {};
5103+Elm.Basics.make = function (_elm) {
5105+ _elm.Basics = _elm.Basics || {};
5106+ if (_elm.Basics.values)
5107+ return _elm.Basics.values;
5108+ var _N = Elm.Native,
5109+ _U = _N.Utils.make(_elm),
5110+ _L = _N.List.make(_elm),
5111+ _E = _N.Error.make(_elm),
5112+ $moduleName = "Basics";
5113+ var Native = Native || {};
5114+ Native.Basics = Elm.Native.Basics.make(_elm);
5116+ var uncurry = F2(function (f,
5118+ return function () {
5120+ {case "_Tuple2": return A2(f,
5123+ _E.Case($moduleName,
5124+ "on line 381, column 19 to 24");
5127+ var curry = F3(function (f,
5130+ return f({ctor: "_Tuple2"
5134+ var flip = F3(function (f,b,a) {
5137+ var snd = function (_v4) {
5138+ return function () {
5140+ {case "_Tuple2": return _v4._1;}
5141+ _E.Case($moduleName,
5142+ "on line 365, column 13 to 14");
5145+ var fst = function (_v8) {
5146+ return function () {
5148+ {case "_Tuple2": return _v8._0;}
5149+ _E.Case($moduleName,
5150+ "on line 361, column 13 to 14");
5153+ var always = F2(function (a,
5155+ return function () {
5159+ var id = function (x) {
5162+ _op["<|"] = F2(function (f,x) {
5165+ _op["|>"] = F2(function (x,f) {
5168+ _op["."] = F3(function (f,g,x) {
5171+ var isInfinite = Native.Basics.isInfinite;
5172+ var isNaN = Native.Basics.isNaN;
5173+ var toFloat = Native.Basics.toFloat;
5174+ var ceiling = Native.Basics.ceiling;
5175+ var floor = Native.Basics.floor;
5176+ var truncate = Native.Basics.truncate;
5177+ var round = Native.Basics.round;
5178+ var otherwise = true;
5179+ var not = Native.Basics.not;
5180+ var xor = Native.Basics.xor;
5181+ _op["||"] = Native.Basics.or;
5182+ _op["&&"] = Native.Basics.and;
5183+ var max = Native.Basics.max;
5184+ var min = Native.Basics.min;
5185+ var GT = {ctor: "GT"};
5186+ var EQ = {ctor: "EQ"};
5187+ var LT = {ctor: "LT"};
5188+ var compare = Native.Basics.compare;
5189+ _op[">="] = Native.Basics.ge;
5190+ _op["<="] = Native.Basics.le;
5191+ _op[">"] = Native.Basics.gt;
5192+ _op["<"] = Native.Basics.lt;
5193+ _op["/="] = Native.Basics.neq;
5194+ _op["=="] = Native.Basics.eq;
5195+ var e = Native.Basics.e;
5196+ var pi = Native.Basics.pi;
5197+ var clamp = Native.Basics.clamp;
5198+ var logBase = Native.Basics.logBase;
5199+ var abs = Native.Basics.abs;
5200+ var sqrt = Native.Basics.sqrt;
5201+ var atan2 = Native.Basics.atan2;
5202+ var atan = Native.Basics.atan;
5203+ var asin = Native.Basics.asin;
5204+ var acos = Native.Basics.acos;
5205+ var tan = Native.Basics.tan;
5206+ var sin = Native.Basics.sin;
5207+ var cos = Native.Basics.cos;
5208+ _op["^"] = Native.Basics.exp;
5209+ var mod = Native.Basics.mod;
5210+ var rem = Native.Basics.rem;
5211+ var div = Native.Basics.div;
5212+ _op["/"] = Native.Basics.floatDiv;
5213+ _op["*"] = Native.Basics.mul;
5214+ _op["-"] = Native.Basics.sub;
5215+ _op["+"] = Native.Basics.add;
5216+ var toPolar = function (_v14) {
5217+ return function () {
5220+ return {ctor: "_Tuple2"
5221+ ,_0: Native.Basics.sqrt(Math.pow(_v14._0,
5222+ 2) + Math.pow(_v14._1,2))
5223+ ,_1: A2(Native.Basics.atan2,
5226+ _E.Case($moduleName,
5227+ "on line 79, column 18 to 73");
5230+ var fromPolar = function (_v18) {
5231+ return function () {
5234+ return {ctor: "_Tuple2"
5235+ ,_0: _v18._0 * Native.Basics.cos(_v18._1)
5236+ ,_1: _v18._0 * Native.Basics.sin(_v18._1)};}
5237+ _E.Case($moduleName,
5238+ "on line 73, column 20 to 68");
5241+ var turns = function (r) {
5242+ return 2 * Native.Basics.pi * r;
5244+ var degrees = function (d) {
5245+ return d * Native.Basics.pi / 180;
5247+ var radians = function (t) {
5250+ _elm.Basics.values = {_op: _op
5254+ ,fromPolar: fromPolar
5277+ ,otherwise: otherwise
5279+ ,truncate: truncate
5284+ ,isInfinite: isInfinite
5295+ return _elm.Basics.values;
5296+};Elm.Date = Elm.Date || {};
5297+Elm.Date.make = function (_elm) {
5299+ _elm.Date = _elm.Date || {};
5300+ if (_elm.Date.values)
5301+ return _elm.Date.values;
5302+ var _N = Elm.Native,
5303+ _U = _N.Utils.make(_elm),
5304+ _L = _N.List.make(_elm),
5305+ _E = _N.Error.make(_elm),
5306+ $moduleName = "Date";
5307+ var Maybe = Elm.Maybe.make(_elm);
5308+ var Native = Native || {};
5309+ Native.Date = Elm.Native.Date.make(_elm);
5310+ var Time = Elm.Time.make(_elm);
5312+ var second = Native.Date.second;
5313+ var minute = Native.Date.minute;
5314+ var hour = Native.Date.hour;
5315+ var dayOfWeek = Native.Date.dayOfWeek;
5316+ var day = Native.Date.day;
5317+ var month = Native.Date.month;
5318+ var year = Native.Date.year;
5319+ var fromTime = Native.Date.fromTime;
5320+ var toTime = Native.Date.toTime;
5321+ var read = Native.Date.read;
5322+ var Dec = {ctor: "Dec"};
5323+ var Nov = {ctor: "Nov"};
5324+ var Oct = {ctor: "Oct"};
5325+ var Sep = {ctor: "Sep"};
5326+ var Aug = {ctor: "Aug"};
5327+ var Jul = {ctor: "Jul"};
5328+ var Jun = {ctor: "Jun"};
5329+ var May = {ctor: "May"};
5330+ var Apr = {ctor: "Apr"};
5331+ var Mar = {ctor: "Mar"};
5332+ var Feb = {ctor: "Feb"};
5333+ var Jan = {ctor: "Jan"};
5334+ var Sun = {ctor: "Sun"};
5335+ var Sat = {ctor: "Sat"};
5336+ var Fri = {ctor: "Fri"};
5337+ var Thu = {ctor: "Thu"};
5338+ var Wed = {ctor: "Wed"};
5339+ var Tue = {ctor: "Tue"};
5340+ var Mon = {ctor: "Mon"};
5341+ var Date = {ctor: "Date"};
5342+ _elm.Date.values = {_op: _op
5345+ ,fromTime: fromTime
5349+ ,dayOfWeek: dayOfWeek
5373+ return _elm.Date.values;
5374+};Elm.Debug = Elm.Debug || {};
5375+Elm.Debug.make = function (_elm) {
5377+ _elm.Debug = _elm.Debug || {};
5378+ if (_elm.Debug.values)
5379+ return _elm.Debug.values;
5380+ var _N = Elm.Native,
5381+ _U = _N.Utils.make(_elm),
5382+ _L = _N.List.make(_elm),
5383+ _E = _N.Error.make(_elm),
5384+ $moduleName = "Debug";
5385+ var Native = Native || {};
5386+ Native.Debug = Elm.Native.Debug.make(_elm);
5388+ var log = Native.Debug.log;
5389+ _elm.Debug.values = {_op: _op
5391+ return _elm.Debug.values;
5392+};Elm.Http = Elm.Http || {};
5393+Elm.Http.make = function (_elm) {
5395+ _elm.Http = _elm.Http || {};
5396+ if (_elm.Http.values)
5397+ return _elm.Http.values;
5398+ var _N = Elm.Native,
5399+ _U = _N.Utils.make(_elm),
5400+ _L = _N.List.make(_elm),
5401+ _E = _N.Error.make(_elm),
5402+ $moduleName = "Http";
5403+ var Native = Native || {};
5404+ Native.Http = Elm.Native.Http.make(_elm);
5405+ var Signal = Elm.Signal.make(_elm);
5407+ var send = Native.Http.send;
5408+ var Request = F4(function (a,
5418+ var request = Request;
5419+ var get = function (url) {
5426+ var sendGet = function (reqs) {
5427+ return send(A2(Signal.lift,
5431+ var post = F2(function (url,
5439+ var Failure = F2(function (a,
5441+ return {ctor: "Failure"
5445+ var Waiting = {ctor: "Waiting"};
5446+ var Success = function (a) {
5447+ return {ctor: "Success"
5450+ _elm.Http.values = {_op: _op
5459+ ,Request: Request};
5460+ return _elm.Http.values;
5461+};Elm.Text = Elm.Text || {};
5462+Elm.Text.make = function (_elm) {
5464+ _elm.Text = _elm.Text || {};
5465+ if (_elm.Text.values)
5466+ return _elm.Text.values;
5467+ var _N = Elm.Native,
5468+ _U = _N.Utils.make(_elm),
5469+ _L = _N.List.make(_elm),
5470+ _E = _N.Error.make(_elm),
5471+ $moduleName = "Text";
5472+ var Basics = Elm.Basics.make(_elm);
5473+ var Color = Elm.Color.make(_elm);
5474+ var Graphics = Graphics || {};
5475+ Graphics.Element = Elm.Graphics.Element.make(_elm);
5476+ var Maybe = Elm.Maybe.make(_elm);
5477+ var Native = Native || {};
5478+ Native.Show = Elm.Native.Show.make(_elm);
5479+ var Native = Native || {};
5480+ Native.Text = Elm.Native.Text.make(_elm);
5481+ var String = Elm.String.make(_elm);
5483+ var markdown = Native.Text.markdown;
5484+ var justified = Native.Text.justified;
5485+ var centered = Native.Text.centered;
5486+ var rightAligned = Native.Text.rightAligned;
5487+ var leftAligned = Native.Text.leftAligned;
5488+ var line = Native.Text.line;
5489+ var italic = Native.Text.italic;
5490+ var bold = Native.Text.bold;
5491+ var color = Native.Text.color;
5492+ var height = Native.Text.height;
5493+ var link = Native.Text.link;
5494+ var monospace = Native.Text.monospace;
5495+ var typeface = Native.Text.typeface;
5496+ var style = Native.Text.style;
5497+ var toText = Native.Text.toText;
5498+ var plainText = function (str) {
5499+ return leftAligned(toText(str));
5501+ var asText = function (value) {
5502+ return leftAligned(monospace(toText(Native.Show.show(value))));
5504+ var defaultStyle = {_: {}
5506+ ,color: Color.black
5507+ ,height: Maybe.Nothing
5509+ ,line: Maybe.Nothing
5510+ ,typeface: _L.fromArray([])};
5511+ var Style = F6(function (a,
5525+ var Through = {ctor: "Through"};
5526+ var Over = {ctor: "Over"};
5527+ var Under = {ctor: "Under"};
5528+ var Text = {ctor: "Text"};
5529+ _elm.Text.values = {_op: _op
5530+ ,defaultStyle: defaultStyle
5533+ ,typeface: typeface
5534+ ,monospace: monospace
5541+ ,leftAligned: leftAligned
5542+ ,rightAligned: rightAligned
5543+ ,centered: centered
5544+ ,justified: justified
5545+ ,plainText: plainText
5546+ ,markdown: markdown
5553+ return _elm.Text.values;
5554+};Elm.Json = Elm.Json || {};
5555+Elm.Json.make = function (_elm) {
5557+ _elm.Json = _elm.Json || {};
5558+ if (_elm.Json.values)
5559+ return _elm.Json.values;
5560+ var _N = Elm.Native,
5561+ _U = _N.Utils.make(_elm),
5562+ _L = _N.List.make(_elm),
5563+ _E = _N.Error.make(_elm),
5564+ $moduleName = "Json";
5565+ var Dict = Elm.Dict.make(_elm);
5566+ var Maybe = Elm.Maybe.make(_elm);
5567+ var Native = Native || {};
5568+ Native.Json = Elm.Native.Json.make(_elm);
5570+ var fromString = function (str) {
5571+ return Native.Json.fromString(str);
5573+ var toString = F2(function (sep,
5575+ return A2(Native.Json.toString,
5579+ var Object = function (a) {
5580+ return {ctor: "Object"
5583+ var Array = function (a) {
5584+ return {ctor: "Array",_0: a};
5586+ var Null = {ctor: "Null"};
5587+ var Boolean = function (a) {
5588+ return {ctor: "Boolean"
5591+ var Number = function (a) {
5592+ return {ctor: "Number"
5595+ var String = function (a) {
5596+ return {ctor: "String"
5599+ _elm.Json.values = {_op: _op
5600+ ,toString: toString
5601+ ,fromString: fromString
5608+ return _elm.Json.values;
5609+};Elm.String = Elm.String || {};
5610+Elm.String.make = function (_elm) {
5612+ _elm.String = _elm.String || {};
5613+ if (_elm.String.values)
5614+ return _elm.String.values;
5615+ var _N = Elm.Native,
5616+ _U = _N.Utils.make(_elm),
5617+ _L = _N.List.make(_elm),
5618+ _E = _N.Error.make(_elm),
5619+ $moduleName = "String";
5620+ var Maybe = Elm.Maybe.make(_elm);
5621+ var Native = Native || {};
5622+ Native.Show = Elm.Native.Show.make(_elm);
5623+ var Native = Native || {};
5624+ Native.String = Elm.Native.String.make(_elm);
5626+ var fromList = Native.String.fromList;
5627+ var toList = Native.String.toList;
5628+ var toFloat = Native.String.toFloat;
5629+ var toInt = Native.String.toInt;
5630+ var show = Native.Show.show;
5631+ var indices = Native.String.indexes;
5632+ var indexes = Native.String.indexes;
5633+ var endsWith = Native.String.endsWith;
5634+ var startsWith = Native.String.startsWith;
5635+ var contains = Native.String.contains;
5636+ var all = Native.String.all;
5637+ var any = Native.String.any;
5638+ var toLower = Native.String.toLower;
5639+ var toUpper = Native.String.toUpper;
5640+ var lines = Native.String.lines;
5641+ var words = Native.String.words;
5642+ var trimRight = Native.String.trimRight;
5643+ var trimLeft = Native.String.trimLeft;
5644+ var trim = Native.String.trim;
5645+ var padRight = Native.String.padRight;
5646+ var padLeft = Native.String.padLeft;
5647+ var pad = Native.String.pad;
5648+ var dropRight = Native.String.dropRight;
5649+ var dropLeft = Native.String.dropLeft;
5650+ var right = Native.String.right;
5651+ var left = Native.String.left;
5652+ var sub = Native.String.sub;
5653+ var repeat = Native.String.repeat;
5654+ var join = Native.String.join;
5655+ var split = Native.String.split;
5656+ var foldr = Native.String.foldr;
5657+ var foldl = Native.String.foldl;
5658+ var reverse = Native.String.reverse;
5659+ var filter = Native.String.filter;
5660+ var map = Native.String.map;
5661+ var length = Native.String.length;
5662+ var concat = Native.String.concat;
5663+ var append = Native.String.append;
5664+ var uncons = Native.String.uncons;
5665+ var cons = Native.String.cons;
5666+ var isEmpty = Native.String.isEmpty;
5667+ _elm.String.values = {_op: _op
5685+ ,dropLeft: dropLeft
5686+ ,dropRight: dropRight
5689+ ,padRight: padRight
5691+ ,trimLeft: trimLeft
5692+ ,trimRight: trimRight
5699+ ,contains: contains
5700+ ,startsWith: startsWith
5701+ ,endsWith: endsWith
5708+ ,fromList: fromList};
5709+ return _elm.String.values;
5710+};Elm.Window = Elm.Window || {};
5711+Elm.Window.make = function (_elm) {
5713+ _elm.Window = _elm.Window || {};
5714+ if (_elm.Window.values)
5715+ return _elm.Window.values;
5716+ var _N = Elm.Native,
5717+ _U = _N.Utils.make(_elm),
5718+ _L = _N.List.make(_elm),
5719+ _E = _N.Error.make(_elm),
5720+ $moduleName = "Window";
5721+ var Native = Native || {};
5722+ Native.Window = Elm.Native.Window.make(_elm);
5723+ var Signal = Elm.Signal.make(_elm);
5725+ var height = Native.Window.height;
5726+ var width = Native.Window.width;
5727+ var dimensions = Native.Window.dimensions;
5728+ _elm.Window.values = {_op: _op
5729+ ,dimensions: dimensions
5732+ return _elm.Window.values;
5733+};Elm.Regex = Elm.Regex || {};
5734+Elm.Regex.make = function (_elm) {
5736+ _elm.Regex = _elm.Regex || {};
5737+ if (_elm.Regex.values)
5738+ return _elm.Regex.values;
5739+ var _N = Elm.Native,
5740+ _U = _N.Utils.make(_elm),
5741+ _L = _N.List.make(_elm),
5742+ _E = _N.Error.make(_elm),
5743+ $moduleName = "Regex";
5744+ var Maybe = Elm.Maybe.make(_elm);
5745+ var Native = Native || {};
5746+ Native.Regex = Elm.Native.Regex.make(_elm);
5748+ var split = Native.Regex.split;
5749+ var replace = Native.Regex.replace;
5750+ var find = Native.Regex.find;
5751+ var AtMost = function (a) {
5752+ return {ctor: "AtMost"
5755+ var All = {ctor: "All"};
5756+ var Match = F4(function (a,
5766+ var contains = Native.Regex.contains;
5767+ var caseInsensitive = Native.Regex.caseInsensitive;
5768+ var regex = Native.Regex.regex;
5769+ var escape = Native.Regex.escape;
5770+ var Regex = {ctor: "Regex"};
5771+ _elm.Regex.values = {_op: _op
5774+ ,caseInsensitive: caseInsensitive
5775+ ,contains: contains
5783+ return _elm.Regex.values;
5784+};Elm.Color = Elm.Color || {};
5785+Elm.Color.make = function (_elm) {
5787+ _elm.Color = _elm.Color || {};
5788+ if (_elm.Color.values)
5789+ return _elm.Color.values;
5790+ var _N = Elm.Native,
5791+ _U = _N.Utils.make(_elm),
5792+ _L = _N.List.make(_elm),
5793+ _E = _N.Error.make(_elm),
5794+ $moduleName = "Color";
5795+ var Basics = Elm.Basics.make(_elm);
5796+ var Native = Native || {};
5797+ Native.Color = Elm.Native.Color.make(_elm);
5799+ var Radial = F5(function (a,
5804+ return {ctor: "Radial"
5811+ var radial = Radial;
5812+ var Linear = F3(function (a,
5815+ return {ctor: "Linear"
5820+ var linear = Linear;
5821+ var hsv = Native.Color.hsv;
5822+ var hsva = Native.Color.hsva;
5823+ var complement = Native.Color.complement;
5824+ var greyscale = function (p) {
5825+ return A3(hsv,0,0,1 - p);
5827+ var grayscale = function (p) {
5828+ return A3(hsv,0,0,1 - p);
5830+ var Color = F4(function (a,
5834+ return {ctor: "Color"
5841+ var rgb = F3(function (r,g,b) {
5842+ return A4(Color,r,g,b,1);
5844+ var lightRed = A4(Color,
5849+ var red = A4(Color,204,0,0,1);
5850+ var darkRed = A4(Color,
5855+ var lightOrange = A4(Color,
5860+ var orange = A4(Color,
5865+ var darkOrange = A4(Color,
5870+ var lightYellow = A4(Color,
5875+ var yellow = A4(Color,
5880+ var darkYellow = A4(Color,
5885+ var lightGreen = A4(Color,
5890+ var green = A4(Color,
5895+ var darkGreen = A4(Color,
5900+ var lightBlue = A4(Color,
5905+ var blue = A4(Color,
5910+ var darkBlue = A4(Color,
5915+ var lightPurple = A4(Color,
5920+ var purple = A4(Color,
5925+ var darkPurple = A4(Color,
5930+ var lightBrown = A4(Color,
5935+ var brown = A4(Color,
5940+ var darkBrown = A4(Color,
5945+ var black = A4(Color,0,0,0,1);
5946+ var white = A4(Color,
5951+ var lightGrey = A4(Color,
5956+ var grey = A4(Color,
5961+ var darkGrey = A4(Color,
5966+ var lightGray = A4(Color,
5971+ var gray = A4(Color,
5976+ var darkGray = A4(Color,
5981+ var lightCharcoal = A4(Color,
5986+ var charcoal = A4(Color,
5991+ var darkCharcoal = A4(Color,
5996+ _elm.Color.values = {_op: _op
5999+ ,lightRed: lightRed
6002+ ,lightOrange: lightOrange
6004+ ,darkOrange: darkOrange
6005+ ,lightYellow: lightYellow
6007+ ,darkYellow: darkYellow
6008+ ,lightGreen: lightGreen
6010+ ,darkGreen: darkGreen
6011+ ,lightBlue: lightBlue
6013+ ,darkBlue: darkBlue
6014+ ,lightPurple: lightPurple
6016+ ,darkPurple: darkPurple
6017+ ,lightBrown: lightBrown
6019+ ,darkBrown: darkBrown
6022+ ,lightGrey: lightGrey
6024+ ,darkGrey: darkGrey
6025+ ,lightGray: lightGray
6027+ ,darkGray: darkGray
6028+ ,lightCharcoal: lightCharcoal
6029+ ,charcoal: charcoal
6030+ ,darkCharcoal: darkCharcoal
6031+ ,grayscale: grayscale
6032+ ,greyscale: greyscale
6033+ ,complement: complement
6041+ return _elm.Color.values;
6042+};Elm.Maybe = Elm.Maybe || {};
6043+Elm.Maybe.make = function (_elm) {
6045+ _elm.Maybe = _elm.Maybe || {};
6046+ if (_elm.Maybe.values)
6047+ return _elm.Maybe.values;
6048+ var _N = Elm.Native,
6049+ _U = _N.Utils.make(_elm),
6050+ _L = _N.List.make(_elm),
6051+ _E = _N.Error.make(_elm),
6052+ $moduleName = "Maybe";
6053+ var Basics = Elm.Basics.make(_elm);
6054+ var List = Elm.List.make(_elm);
6056+ var Nothing = {ctor: "Nothing"};
6057+ var Just = function (a) {
6058+ return {ctor: "Just",_0: a};
6060+ var maybe = F3(function (b,
6063+ return function () {
6065+ {case "Just": return f(m._0);
6066+ case "Nothing": return b;}
6067+ _E.Case($moduleName,
6068+ "between lines 35 and 44");
6071+ var isJust = A2(maybe,
6074+ return function () {
6078+ var isNothing = function ($) {
6079+ return Basics.not(isJust($));
6081+ var cons = F2(function (mx,xs) {
6091+ var justs = A2(List.foldr,
6094+ _elm.Maybe.values = {_op: _op
6097+ ,isNothing: isNothing
6101+ ,Nothing: Nothing};
6102+ return _elm.Maybe.values;
6103+};Elm.Touch = Elm.Touch || {};
6104+Elm.Touch.make = function (_elm) {
6106+ _elm.Touch = _elm.Touch || {};
6107+ if (_elm.Touch.values)
6108+ return _elm.Touch.values;
6109+ var _N = Elm.Native,
6110+ _U = _N.Utils.make(_elm),
6111+ _L = _N.List.make(_elm),
6112+ _E = _N.Error.make(_elm),
6113+ $moduleName = "Touch";
6114+ var Native = Native || {};
6115+ Native.Touch = Elm.Native.Touch.make(_elm);
6116+ var Signal = Elm.Signal.make(_elm);
6117+ var Time = Elm.Time.make(_elm);
6119+ var taps = Native.Touch.taps;
6120+ var touches = Native.Touch.touches;
6121+ var Touch = F6(function (a,
6135+ _elm.Touch.values = {_op: _op
6139+ return _elm.Touch.values;
6140+};Elm.Mouse = Elm.Mouse || {};
6141+Elm.Mouse.make = function (_elm) {
6143+ _elm.Mouse = _elm.Mouse || {};
6144+ if (_elm.Mouse.values)
6145+ return _elm.Mouse.values;
6146+ var _N = Elm.Native,
6147+ _U = _N.Utils.make(_elm),
6148+ _L = _N.List.make(_elm),
6149+ _E = _N.Error.make(_elm),
6150+ $moduleName = "Mouse";
6151+ var Native = Native || {};
6152+ Native.Mouse = Elm.Native.Mouse.make(_elm);
6153+ var Signal = Elm.Signal.make(_elm);
6155+ var clicks = Native.Mouse.clicks;
6156+ var isDown = Native.Mouse.isDown;
6157+ var y = Native.Mouse.y;
6158+ var x = Native.Mouse.x;
6159+ var position = Native.Mouse.position;
6160+ _elm.Mouse.values = {_op: _op
6161+ ,position: position
6166+ return _elm.Mouse.values;
6167+};Elm.Array = Elm.Array || {};
6168+Elm.Array.make = function (_elm) {
6170+ _elm.Array = _elm.Array || {};
6171+ if (_elm.Array.values)
6172+ return _elm.Array.values;
6173+ var _N = Elm.Native,
6174+ _U = _N.Utils.make(_elm),
6175+ _L = _N.List.make(_elm),
6176+ _E = _N.Error.make(_elm),
6177+ $moduleName = "Array";
6178+ var Basics = Elm.Basics.make(_elm);
6179+ var List = Elm.List.make(_elm);
6180+ var Maybe = Elm.Maybe.make(_elm);
6181+ var Native = Native || {};
6182+ Native.Array = Elm.Native.Array.make(_elm);
6184+ var concat = Native.Array.concat;
6185+ var length = Native.Array.length;
6186+ var slice = Native.Array.slice;
6187+ var updates = F2(function (us,
6189+ return A3(List.foldl,
6190+ Basics.uncurry(Native.Array.set),
6194+ var set = Native.Array.set;
6195+ var getSafe = F3(function ($default,
6198+ return _U.cmp(Native.Array.length(array),
6199+ i) > 0 ? A2(Native.Array.get,
6203+ var getMaybe = F2(function (i,
6205+ return _U.cmp(Native.Array.length(array),
6206+ i) > 0 ? Maybe.Just(A2(Native.Array.get,
6208+ array)) : Maybe.Nothing;
6210+ var get = Native.Array.get;
6211+ var push = Native.Array.push;
6212+ var empty = Native.Array.empty;
6213+ var foldr = Native.Array.foldr;
6214+ var foldl = Native.Array.foldl;
6215+ var indexedMap = Native.Array.indexedMap;
6216+ var map = Native.Array.map;
6217+ var indices = function (a) {
6219+ Native.Array.length(a) - 1);
6221+ var toIndexedList = function (a) {
6222+ return A2(List.zip,
6224+ Native.Array.toList(a));
6226+ var toList = Native.Array.toList;
6227+ var fromList = A2(List.foldl,
6229+ Native.Array.empty);
6230+ var zipWith = F3(function (f,
6233+ return fromList(A3(List.zipWith,
6235+ Native.Array.toList(a),
6236+ Native.Array.toList(b)));
6238+ var zip = zipWith(F2(function (v0,
6240+ return {ctor: "_Tuple2"
6244+ var fill = F2(function (len,e) {
6245+ return fromList(A2(List.map,
6249+ var Array = {ctor: "Array"};
6250+ _elm.Array.values = {_op: _op
6252+ ,fromList: fromList
6255+ ,toIndexedList: toIndexedList
6257+ ,indexedMap: indexedMap
6265+ ,getMaybe: getMaybe
6273+ return _elm.Array.values;
6274+};Elm.Trampoline = Elm.Trampoline || {};
6275+Elm.Trampoline.make = function (_elm) {
6277+ _elm.Trampoline = _elm.Trampoline || {};
6278+ if (_elm.Trampoline.values)
6279+ return _elm.Trampoline.values;
6280+ var _N = Elm.Native,
6281+ _U = _N.Utils.make(_elm),
6282+ _L = _N.List.make(_elm),
6283+ _E = _N.Error.make(_elm),
6284+ $moduleName = "Trampoline";
6285+ var Native = Native || {};
6286+ Native.Trampoline = Elm.Native.Trampoline.make(_elm);
6288+ var trampoline = Native.Trampoline.trampoline;
6289+ var Continue = function (a) {
6290+ return {ctor: "Continue"
6293+ var Done = function (a) {
6294+ return {ctor: "Done",_0: a};
6296+ _elm.Trampoline.values = {_op: _op
6297+ ,trampoline: trampoline
6299+ ,Continue: Continue};
6300+ return _elm.Trampoline.values;
6301+};Elm.Keyboard = Elm.Keyboard || {};
6302+Elm.Keyboard.make = function (_elm) {
6304+ _elm.Keyboard = _elm.Keyboard || {};
6305+ if (_elm.Keyboard.values)
6306+ return _elm.Keyboard.values;
6307+ var _N = Elm.Native,
6308+ _U = _N.Utils.make(_elm),
6309+ _L = _N.List.make(_elm),
6310+ _E = _N.Error.make(_elm),
6311+ $moduleName = "Keyboard";
6312+ var Native = Native || {};
6313+ Native.Keyboard = Elm.Native.Keyboard.make(_elm);
6314+ var Signal = Elm.Signal.make(_elm);
6316+ var lastPressed = Native.Keyboard.lastPressed;
6317+ var keysDown = Native.Keyboard.keysDown;
6318+ var isDown = Native.Keyboard.isDown;
6319+ var shift = isDown(16);
6320+ var ctrl = isDown(17);
6321+ var space = isDown(32);
6322+ var enter = isDown(13);
6323+ var directions = Native.Keyboard.directions;
6324+ var arrows = A4(directions,
6329+ var wasd = A4(directions,
6334+ _elm.Keyboard.values = {_op: _op
6335+ ,directions: directions
6343+ ,keysDown: keysDown
6344+ ,lastPressed: lastPressed};
6345+ return _elm.Keyboard.values;
6346+};Elm.Set = Elm.Set || {};
6347+Elm.Set.make = function (_elm) {
6349+ _elm.Set = _elm.Set || {};
6350+ if (_elm.Set.values)
6351+ return _elm.Set.values;
6352+ var _N = Elm.Native,
6353+ _U = _N.Utils.make(_elm),
6354+ _L = _N.List.make(_elm),
6355+ _E = _N.Error.make(_elm),
6356+ $moduleName = "Set";
6357+ var Dict = Elm.Dict.make(_elm);
6358+ var List = Elm.List.make(_elm);
6359+ var Maybe = Elm.Maybe.make(_elm);
6361+ var foldr = F3(function (f,
6364+ return A3(Dict.foldr,
6365+ F3(function (k,_v0,b) {
6366+ return function () {
6373+ var foldl = F3(function (f,
6376+ return A3(Dict.foldl,
6377+ F3(function (k,_v2,b) {
6378+ return function () {
6385+ var toList = Dict.keys;
6386+ var diff = Dict.diff;
6387+ var intersect = Dict.intersect;
6388+ var union = Dict.union;
6389+ var member = Dict.member;
6390+ var remove = Dict.remove;
6391+ var insert = function (k) {
6392+ return A2(Dict.insert,
6394+ {ctor: "_Tuple0"});
6396+ var singleton = function (k) {
6397+ return A2(Dict.singleton,
6399+ {ctor: "_Tuple0"});
6401+ var empty = Dict.empty;
6402+ var fromList = function (xs) {
6403+ return A3(List.foldl,
6408+ var map = F2(function (f,s) {
6409+ return fromList(A2(List.map,
6413+ _elm.Set.values = {_op: _op
6415+ ,singleton: singleton
6423+ ,intersect: intersect
6426+ ,fromList: fromList};
6427+ return _elm.Set.values;
6428+};Elm.List = Elm.List || {};
6429+Elm.List.make = function (_elm) {
6431+ _elm.List = _elm.List || {};
6432+ if (_elm.List.values)
6433+ return _elm.List.values;
6434+ var _N = Elm.Native,
6435+ _U = _N.Utils.make(_elm),
6436+ _L = _N.List.make(_elm),
6437+ _E = _N.Error.make(_elm),
6438+ $moduleName = "List";
6439+ var Basics = Elm.Basics.make(_elm);
6440+ var Native = Native || {};
6441+ Native.List = Elm.Native.List.make(_elm);
6443+ var sortWith = Native.List.sortWith;
6444+ var sortBy = Native.List.sortBy;
6445+ var sort = Native.List.sort;
6446+ var repeat = Native.List.repeat;
6447+ var drop = Native.List.drop;
6448+ var take = Native.List.take;
6449+ var join = Native.List.join;
6450+ var zipWith = Native.List.zipWith;
6451+ var zip = Native.List.zip;
6452+ var concat = Native.List.concat;
6453+ var any = Native.List.any;
6454+ var all = Native.List.all;
6455+ var reverse = Native.List.reverse;
6456+ var length = Native.List.length;
6457+ var filter = Native.List.filter;
6458+ var scanl1 = Native.List.scanl1;
6459+ var scanl = Native.List.scanl;
6460+ var foldr1 = Native.List.foldr1;
6461+ var foldl1 = Native.List.foldl1;
6462+ var maximum = foldl1(Basics.max);
6463+ var minimum = foldl1(Basics.min);
6464+ var foldr = Native.List.foldr;
6465+ var foldl = Native.List.foldl;
6466+ var and = A2(foldl,
6467+ F2(function (x,y) {
6472+ F2(function (x,y) {
6476+ var sum = A2(foldl,
6477+ F2(function (x,y) {
6481+ var product = A2(foldl,
6482+ F2(function (x,y) {
6486+ var map = Native.List.map;
6487+ var concatMap = F2(function (f,
6489+ return concat(A2(map,
6493+ var isEmpty = function (xs) {
6494+ return function () {
6496+ {case "[]": return true;}
6500+ var last = Native.List.last;
6501+ var tail = Native.List.tail;
6502+ var head = Native.List.head;
6503+ _op["++"] = Native.List.append;
6504+ _op["::"] = Native.List.cons;
6505+ var partition = F2(function (pred,
6507+ return function () {
6509+ {case "::": return function () {
6510+ var $ = A2(partition,
6515+ return pred(lst._0) ? {ctor: "_Tuple2"
6519+ ,_1: cs} : {ctor: "_Tuple2"
6526+ return {ctor: "_Tuple2"
6527+ ,_0: _L.fromArray([])
6528+ ,_1: _L.fromArray([])};}
6529+ _E.Case($moduleName,
6530+ "between lines 169 and 179");
6533+ var unzip = function (pairs) {
6534+ return function () {
6535+ switch (pairs.ctor)
6537+ switch (pairs._0.ctor)
6539+ return function () {
6540+ var $ = unzip(pairs._1),
6543+ return {ctor: "_Tuple2"
6553+ return {ctor: "_Tuple2"
6554+ ,_0: _L.fromArray([])
6555+ ,_1: _L.fromArray([])};}
6556+ _E.Case($moduleName,
6557+ "between lines 194 and 202");
6560+ var intersperse = F2(function (sep,
6562+ return function () {
6564+ {case "::": switch (xs._1.ctor)
6565+ {case "::": return {ctor: "::"
6569+ ,_1: A2(intersperse,
6575+ return _L.fromArray([xs._0]);}
6578+ return _L.fromArray([]);}
6579+ _E.Case($moduleName,
6580+ "between lines 212 and 217");
6583+ _elm.List.values = {_op: _op
6603+ ,concatMap: concatMap
6608+ ,partition: partition
6613+ ,intersperse: intersperse
6619+ ,sortWith: sortWith};
6620+ return _elm.List.values;
6621+};Elm.JavaScript = Elm.JavaScript || {};
6622+Elm.JavaScript.Experimental = Elm.JavaScript.Experimental || {};
6623+Elm.JavaScript.Experimental.make = function (_elm) {
6625+ _elm.JavaScript = _elm.JavaScript || {};
6626+ _elm.JavaScript.Experimental = _elm.JavaScript.Experimental || {};
6627+ if (_elm.JavaScript.Experimental.values)
6628+ return _elm.JavaScript.Experimental.values;
6629+ var _N = Elm.Native,
6630+ _U = _N.Utils.make(_elm),
6631+ _L = _N.List.make(_elm),
6632+ _E = _N.Error.make(_elm),
6633+ $moduleName = "JavaScript.Experimental";
6634+ var Json = Elm.Json.make(_elm);
6635+ var Native = Native || {};
6636+ Native.JavaScript = Elm.Native.JavaScript.make(_elm);
6638+ var fromJson = Native.Json.toJS;
6639+ var toJson = Native.Json.fromJS;
6640+ var fromRecord = Native.JavaScript.fromRecord;
6641+ var toRecord = Native.JavaScript.toRecord;
6642+ var RawObject = {ctor: "RawObject"};
6643+ _elm.JavaScript.Experimental.values = {_op: _op
6644+ ,toRecord: toRecord
6645+ ,fromRecord: fromRecord
6647+ ,fromJson: fromJson
6648+ ,RawObject: RawObject};
6649+ return _elm.JavaScript.Experimental.values;
6650+};Elm.Graphics = Elm.Graphics || {};
6651+Elm.Graphics.Collage = Elm.Graphics.Collage || {};
6652+Elm.Graphics.Collage.make = function (_elm) {
6654+ _elm.Graphics = _elm.Graphics || {};
6655+ _elm.Graphics.Collage = _elm.Graphics.Collage || {};
6656+ if (_elm.Graphics.Collage.values)
6657+ return _elm.Graphics.Collage.values;
6658+ var _N = Elm.Native,
6659+ _U = _N.Utils.make(_elm),
6660+ _L = _N.List.make(_elm),
6661+ _E = _N.Error.make(_elm),
6662+ $moduleName = "Graphics.Collage";
6663+ var Basics = Elm.Basics.make(_elm);
6664+ var Color = Elm.Color.make(_elm);
6665+ var Either = Elm.Either.make(_elm);
6666+ var Graphics = Graphics || {};
6667+ Graphics.Element = Elm.Graphics.Element.make(_elm);
6668+ var List = Elm.List.make(_elm);
6669+ var Maybe = Elm.Maybe.make(_elm);
6670+ var Native = Native || {};
6671+ Native.Graphics = Native.Graphics || {};
6672+ Native.Graphics.Collage = Elm.Native.Graphics.Collage.make(_elm);
6673+ var Transform2D = Elm.Transform2D.make(_elm);
6675+ var ngon = F2(function (n,r) {
6676+ return function () {
6677+ var m = Basics.toFloat(n);
6678+ var t = 2 * Basics.pi / m;
6679+ var f = function (i) {
6680+ return {ctor: "_Tuple2"
6681+ ,_0: r * Basics.cos(t * i)
6682+ ,_1: r * Basics.sin(t * i)};
6684+ return A2(List.map,
6686+ _L.range(0,m - 1));
6689+ var oval = F2(function (w,h) {
6690+ return function () {
6694+ var t = 2 * Basics.pi / n;
6695+ var f = function (i) {
6696+ return {ctor: "_Tuple2"
6697+ ,_0: hw * Basics.cos(t * i)
6698+ ,_1: hh * Basics.sin(t * i)};
6700+ return A2(List.map,
6702+ _L.range(0,n - 1));
6705+ var circle = function (r) {
6706+ return A2(oval,2 * r,2 * r);
6708+ var rect = F2(function (w,h) {
6709+ return function () {
6712+ return _L.fromArray([{ctor: "_Tuple2"
6718+ ,{ctor: "_Tuple2",_0: hw,_1: hh}
6724+ var square = function (n) {
6725+ return A2(rect,n,n);
6727+ var polygon = function (points) {
6730+ var segment = F2(function (p1,
6732+ return _L.fromArray([p1,p2]);
6734+ var path = function (ps) {
6737+ var collage = Native.Graphics.Collage.collage;
6738+ var alpha = F2(function (a,f) {
6739+ return _U.replace([["alpha"
6743+ var rotate = F2(function (t,f) {
6744+ return _U.replace([["theta"
6748+ var scale = F2(function (s,f) {
6749+ return _U.replace([["scale"
6753+ var moveY = F2(function (y,f) {
6754+ return _U.replace([["y"
6758+ var moveX = F2(function (x,f) {
6759+ return _U.replace([["x"
6763+ var move = F2(function (_v0,f) {
6764+ return function () {
6767+ return _U.replace([["x"
6769+ ,["y",f.y + _v0._1]],
6771+ _E.Case($moduleName,
6772+ "on line 169, column 20 to 48");
6775+ var form = function (f) {
6784+ var FGroup = F2(function (a,b) {
6785+ return {ctor: "FGroup"
6789+ var group = function (fs) {
6790+ return form(A2(FGroup,
6791+ Transform2D.identity,
6794+ var groupTransform = F2(function (matrix,
6796+ return form(A2(FGroup,
6800+ var FElement = function (a) {
6801+ return {ctor: "FElement"
6804+ var toForm = function (e) {
6805+ return form(FElement(e));
6807+ var FImage = F4(function (a,
6811+ return {ctor: "FImage"
6817+ var sprite = F4(function (w,
6821+ return form(A4(FImage,
6827+ var FShape = F2(function (a,b) {
6828+ return {ctor: "FShape"
6832+ var fill = F2(function (style,
6834+ return form(A2(FShape,
6835+ Either.Right(style),
6838+ var outlined = F2(function (style,
6840+ return form(A2(FShape,
6841+ Either.Left(style),
6844+ var FPath = F2(function (a,b) {
6845+ return {ctor: "FPath"
6849+ var traced = F2(function (style,
6851+ return form(A2(FPath,
6855+ var LineStyle = F6(function (a,
6869+ var Clipped = {ctor: "Clipped"};
6870+ var Sharp = function (a) {
6871+ return {ctor: "Sharp",_0: a};
6873+ var Smooth = {ctor: "Smooth"};
6874+ var Padded = {ctor: "Padded"};
6875+ var Round = {ctor: "Round"};
6876+ var Flat = {ctor: "Flat"};
6877+ var defaultLine = {_: {}
6879+ ,color: Color.black
6881+ ,dashing: _L.fromArray([])
6884+ var solid = function (clr) {
6885+ return _U.replace([["color"
6889+ var dashed = function (clr) {
6890+ return _U.replace([["color"
6893+ ,_L.fromArray([8,4])]],
6896+ var dotted = function (clr) {
6897+ return _U.replace([["color"
6900+ ,_L.fromArray([3,3])]],
6903+ var Grad = function (a) {
6904+ return {ctor: "Grad",_0: a};
6906+ var gradient = F2(function (grad,
6912+ var Texture = function (a) {
6913+ return {ctor: "Texture"
6916+ var textured = F2(function (src,
6922+ var Solid = function (a) {
6923+ return {ctor: "Solid",_0: a};
6925+ var filled = F2(function (color,
6931+ var Form = F6(function (a,
6945+ _elm.Graphics.Collage.values = {_op: _op
6946+ ,defaultLine: defaultLine
6953+ ,textured: textured
6954+ ,gradient: gradient
6955+ ,outlined: outlined
6960+ ,groupTransform: groupTransform
6988+ ,FElement: FElement
6991+ ,LineStyle: LineStyle};
6992+ return _elm.Graphics.Collage.values;
6993+};Elm.Graphics = Elm.Graphics || {};
6994+Elm.Graphics.Input = Elm.Graphics.Input || {};
6995+Elm.Graphics.Input.make = function (_elm) {
6997+ _elm.Graphics = _elm.Graphics || {};
6998+ _elm.Graphics.Input = _elm.Graphics.Input || {};
6999+ if (_elm.Graphics.Input.values)
7000+ return _elm.Graphics.Input.values;
7001+ var _N = Elm.Native,
7002+ _U = _N.Utils.make(_elm),
7003+ _L = _N.List.make(_elm),
7004+ _E = _N.Error.make(_elm),
7005+ $moduleName = "Graphics.Input";
7006+ var Graphics = Graphics || {};
7007+ Graphics.Element = Elm.Graphics.Element.make(_elm);
7008+ var Native = Native || {};
7009+ Native.Graphics = Native.Graphics || {};
7010+ Native.Graphics.Input = Elm.Native.Graphics.Input.make(_elm);
7011+ var Signal = Elm.Signal.make(_elm);
7013+ var clickable = Native.Graphics.Input.clickable;
7014+ var hoverable = Native.Graphics.Input.hoverable;
7015+ var dropDown = Native.Graphics.Input.dropDown;
7016+ var checkbox = Native.Graphics.Input.checkbox;
7017+ var customButton = Native.Graphics.Input.customButton;
7018+ var button = Native.Graphics.Input.button;
7019+ var input = Native.Graphics.Input.input;
7020+ var Handle = {ctor: "Handle"};
7021+ var Input = F2(function (a,b) {
7026+ _elm.Graphics.Input.values = {_op: _op
7029+ ,customButton: customButton
7030+ ,checkbox: checkbox
7031+ ,dropDown: dropDown
7032+ ,hoverable: hoverable
7033+ ,clickable: clickable
7036+ return _elm.Graphics.Input.values;
7037+};Elm.Graphics = Elm.Graphics || {};
7038+Elm.Graphics.Element = Elm.Graphics.Element || {};
7039+Elm.Graphics.Element.make = function (_elm) {
7041+ _elm.Graphics = _elm.Graphics || {};
7042+ _elm.Graphics.Element = _elm.Graphics.Element || {};
7043+ if (_elm.Graphics.Element.values)
7044+ return _elm.Graphics.Element.values;
7045+ var _N = Elm.Native,
7046+ _U = _N.Utils.make(_elm),
7047+ _L = _N.List.make(_elm),
7048+ _E = _N.Error.make(_elm),
7049+ $moduleName = "Graphics.Element";
7050+ var Basics = Elm.Basics.make(_elm);
7051+ var Color = Elm.Color.make(_elm);
7052+ var List = Elm.List.make(_elm);
7053+ var Maybe = Elm.Maybe.make(_elm);
7054+ var Native = Native || {};
7055+ Native.Utils = Elm.Native.Utils.make(_elm);
7057+ var DOut = {ctor: "DOut"};
7058+ var outward = DOut;
7059+ var DIn = {ctor: "DIn"};
7061+ var DRight = {ctor: "DRight"};
7062+ var right = DRight;
7063+ var DLeft = {ctor: "DLeft"};
7065+ var DDown = {ctor: "DDown"};
7067+ var DUp = {ctor: "DUp"};
7069+ var Position = F4(function (a,
7079+ var Relative = function (a) {
7080+ return {ctor: "Relative"
7083+ var relative = Relative;
7084+ var Absolute = function (a) {
7085+ return {ctor: "Absolute"
7088+ var absolute = Absolute;
7089+ var N = {ctor: "N"};
7090+ var bottomLeftAt = F2(function (x,
7098+ var Z = {ctor: "Z"};
7099+ var middle = {_: {}
7103+ ,y: Relative(0.5)};
7104+ var midLeft = _U.replace([["horizontal"
7106+ ,["x",Absolute(0)]],
7108+ var middleAt = F2(function (x,
7116+ var midLeftAt = F2(function (x,
7124+ var midBottomAt = F2(function (x,
7132+ var P = {ctor: "P"};
7133+ var topLeft = {_: {}
7138+ var bottomLeft = _U.replace([["vertical"
7141+ var topRight = _U.replace([["horizontal"
7144+ var bottomRight = _U.replace([["horizontal"
7147+ var midRight = _U.replace([["horizontal"
7150+ var midTop = _U.replace([["vertical"
7152+ ,["y",Absolute(0)]],
7154+ var midBottom = _U.replace([["vertical"
7157+ var topLeftAt = F2(function (x,
7165+ var topRightAt = F2(function (x,
7173+ var bottomRightAt = F2(function (x,
7181+ var midRightAt = F2(function (x,
7189+ var midTopAt = F2(function (x,
7197+ var Tiled = {ctor: "Tiled"};
7198+ var Cropped = function (a) {
7199+ return {ctor: "Cropped"
7202+ var Fitted = {ctor: "Fitted"};
7203+ var Plain = {ctor: "Plain"};
7204+ var Custom = {ctor: "Custom"};
7205+ var RawHtml = {ctor: "RawHtml"};
7206+ var Spacer = {ctor: "Spacer"};
7207+ var Flow = F2(function (a,b) {
7208+ return {ctor: "Flow"
7212+ var Container = F2(function (a,
7214+ return {ctor: "Container"
7218+ var Image = F4(function (a,
7222+ return {ctor: "Image"
7228+ var link = F2(function (href,
7230+ return function () {
7233+ ,element: e.element
7234+ ,props: _U.replace([["href"
7239+ var tag = F2(function (name,e) {
7240+ return function () {
7243+ ,element: e.element
7244+ ,props: _U.replace([["tag"
7249+ var color = F2(function (c,e) {
7250+ return function () {
7253+ ,element: e.element
7254+ ,props: _U.replace([["color"
7259+ var opacity = F2(function (o,
7261+ return function () {
7264+ ,element: e.element
7265+ ,props: _U.replace([["opacity"
7270+ var height = F2(function (nh,
7272+ return function () {
7274+ var props = function () {
7275+ var _v0 = e.element;
7278+ return _U.replace([["width"
7279+ ,Basics.round(Basics.toFloat(_v0._1) / Basics.toFloat(_v0._2) * Basics.toFloat(nh))]],
7284+ ,element: e.element
7285+ ,props: _U.replace([["height"
7290+ var width = F2(function (nw,e) {
7291+ return function () {
7293+ var props = function () {
7294+ var _v5 = e.element;
7297+ return _U.replace([["height"
7298+ ,Basics.round(Basics.toFloat(_v5._2) / Basics.toFloat(_v5._1) * Basics.toFloat(nw))]],
7301+ return _U.replace([["height"
7302+ ,Basics.snd(A2(Native.Utils.htmlHeight,
7309+ ,element: e.element
7310+ ,props: _U.replace([["width"
7315+ var size = F3(function (w,h,e) {
7320+ var sizeOf = function (e) {
7321+ return {ctor: "_Tuple2"
7323+ ,_1: e.props.height};
7325+ var heightOf = function (e) {
7326+ return e.props.height;
7328+ var widthOf = function (e) {
7329+ return e.props.width;
7331+ var Element = F2(function (a,
7337+ var Properties = F9(function (a,
7357+ var newElement = F3(function (w,
7362+ ,props: A9(Properties,
7363+ Native.Utils.guid({ctor: "_Tuple0"}),
7371+ {ctor: "_Tuple0"})};
7373+ var image = F3(function (w,
7376+ return A3(newElement,
7379+ A4(Image,Plain,w,h,src));
7381+ var fittedImage = F3(function (w,
7384+ return A3(newElement,
7387+ A4(Image,Fitted,w,h,src));
7389+ var croppedImage = F4(function (pos,
7393+ return A3(newElement,
7396+ A4(Image,Cropped(pos),w,h,src));
7398+ var tiledImage = F3(function (w,
7401+ return A3(newElement,
7404+ A4(Image,Tiled,w,h,src));
7406+ var container = F4(function (w,
7410+ return A3(newElement,
7413+ A2(Container,pos,e));
7415+ var spacer = F2(function (w,h) {
7416+ return A3(newElement,
7421+ var empty = A2(spacer,0,0);
7422+ var flow = F2(function (dir,
7424+ return function () {
7425+ var newFlow = F2(function (w,
7427+ return A3(newElement,
7432+ var hs = A2(List.map,
7435+ var ws = A2(List.map,
7439+ _L.fromArray([])) ? empty : function () {
7445+ case "DIn": return A2(newFlow,
7448+ case "DLeft": return A2(newFlow,
7451+ case "DOut": return A2(newFlow,
7458+ case "DUp": return A2(newFlow,
7461+ _E.Case($moduleName,
7462+ "between lines 206 and 216");
7466+ var above = F2(function (hi,
7468+ return A3(newElement,
7472+ heightOf(hi) + heightOf(lo),
7475+ _L.fromArray([hi,lo])));
7477+ var below = F2(function (lo,
7479+ return A3(newElement,
7483+ heightOf(hi) + heightOf(lo),
7486+ _L.fromArray([hi,lo])));
7488+ var beside = F2(function (lft,
7490+ return A3(newElement,
7491+ widthOf(lft) + widthOf(rht),
7497+ _L.fromArray([lft,rht])));
7499+ var layers = function (es) {
7500+ return function () {
7501+ var hs = A2(List.map,
7504+ var ws = A2(List.map,
7507+ return A3(newElement,
7513+ _elm.Graphics.Element.values = {_op: _op
7516+ ,heightOf: heightOf
7525+ ,newElement: newElement
7527+ ,fittedImage: fittedImage
7528+ ,croppedImage: croppedImage
7529+ ,tiledImage: tiledImage
7530+ ,container: container
7537+ ,absolute: absolute
7538+ ,relative: relative
7541+ ,topRight: topRight
7542+ ,bottomLeft: bottomLeft
7543+ ,bottomRight: bottomRight
7545+ ,midRight: midRight
7547+ ,midBottom: midBottom
7548+ ,middleAt: middleAt
7549+ ,topLeftAt: topLeftAt
7550+ ,topRightAt: topRightAt
7551+ ,bottomLeftAt: bottomLeftAt
7552+ ,bottomRightAt: bottomRightAt
7553+ ,midLeftAt: midLeftAt
7554+ ,midRightAt: midRightAt
7555+ ,midTopAt: midTopAt
7556+ ,midBottomAt: midBottomAt
7564+ ,Container: Container
7576+ ,Absolute: Absolute
7577+ ,Relative: Relative
7584+ ,Properties: Properties
7586+ ,Position: Position};
7587+ return _elm.Graphics.Element.values;
7588+};Elm.Graphics = Elm.Graphics || {};
7589+Elm.Graphics.Input = Elm.Graphics.Input || {};
7590+Elm.Graphics.Input.Field = Elm.Graphics.Input.Field || {};
7591+Elm.Graphics.Input.Field.make = function (_elm) {
7593+ _elm.Graphics = _elm.Graphics || {};
7594+ _elm.Graphics.Input = _elm.Graphics.Input || {};
7595+ _elm.Graphics.Input.Field = _elm.Graphics.Input.Field || {};
7596+ if (_elm.Graphics.Input.Field.values)
7597+ return _elm.Graphics.Input.Field.values;
7598+ var _N = Elm.Native,
7599+ _U = _N.Utils.make(_elm),
7600+ _L = _N.List.make(_elm),
7601+ _E = _N.Error.make(_elm),
7602+ $moduleName = "Graphics.Input.Field";
7603+ var Color = Elm.Color.make(_elm);
7604+ var Graphics = Graphics || {};
7605+ Graphics.Element = Elm.Graphics.Element.make(_elm);
7606+ var Graphics = Graphics || {};
7607+ Graphics.Input = Elm.Graphics.Input.make(_elm);
7608+ var Native = Native || {};
7609+ Native.Graphics = Native.Graphics || {};
7610+ Native.Graphics.Input = Elm.Native.Graphics.Input.make(_elm);
7611+ var Text = Elm.Text.make(_elm);
7613+ var email = Native.Graphics.Input.email;
7614+ var password = Native.Graphics.Input.password;
7615+ var field = Native.Graphics.Input.field;
7616+ var Backward = {ctor: "Backward"};
7617+ var Forward = {ctor: "Forward"};
7618+ var Selection = F3(function (a,
7626+ var Content = F2(function (a,
7632+ var noContent = A2(Content,
7634+ A3(Selection,0,0,Forward));
7635+ var Style = F4(function (a,
7645+ var Highlight = F2(function (a,
7651+ var noHighlight = A2(Highlight,
7654+ var Outline = F3(function (a,
7662+ var Dimensions = F4(function (a,
7672+ var uniformly = function (n) {
7673+ return A4(Dimensions,
7679+ var noOutline = A3(Outline,
7683+ var defaultStyle = {_: {}
7684+ ,highlight: A2(Highlight,
7687+ ,outline: A3(Outline,
7691+ ,padding: uniformly(4)
7692+ ,style: Text.defaultStyle};
7693+ _elm.Graphics.Input.Field.values = {_op: _op
7694+ ,uniformly: uniformly
7695+ ,noOutline: noOutline
7696+ ,noHighlight: noHighlight
7697+ ,defaultStyle: defaultStyle
7698+ ,noContent: noContent
7700+ ,password: password
7703+ ,Backward: Backward
7704+ ,Dimensions: Dimensions
7706+ ,Highlight: Highlight
7709+ ,Selection: Selection};
7710+ return _elm.Graphics.Input.Field.values;
7715+Elm.fullscreen = function(module, ports) {
7716+ var style = document.createElement('style');
7717+ style.type = 'text/css';
7718+ style.innerHTML = "html,head,body { padding:0; margin:0; }" +
7719+ "body { font-family: calibri, helvetica, arial, sans-serif; }";
7720+ document.head.appendChild(style);
7721+ var container = document.createElement('div');
7722+ document.body.appendChild(container);
7723+ return init(ElmRuntime.Display.FULLSCREEN, container, module, ports || {});
7726+Elm.embed = function(module, container, ports) {
7727+ var tag = container.tagName;
7728+ if (tag !== 'DIV') {
7729+ throw new Error('Elm.node must be given a DIV, not a ' + tag + '.');
7730+ } else if (container.hasChildNodes()) {
7731+ throw new Error('Elm.node must be given an empty DIV. No children allowed!');
7733+ return init(ElmRuntime.Display.COMPONENT, container, module, ports || {});
7736+Elm.worker = function(module, ports) {
7737+ return init(ElmRuntime.Display.NONE, {}, module, ports || {});
7740+function init(display, container, module, ports, moduleToReplace) {
7741+ // defining state needed for an instance of the Elm RTS
7744+ var updateInProgress = false;
7745+ function notify(id, v) {
7746+ if (updateInProgress) {
7748+ 'The notify function has been called synchronously!\n' +
7749+ 'This can lead to frames being dropped.\n' +
7750+ 'Definitely report this to <https://github.com/evancz/Elm/issues>\n');
7752+ updateInProgress = true;
7753+ var timestep = Date.now();
7754+ for (var i = inputs.length; i--; ) {
7755+ inputs[i].recv(timestep, id, v);
7757+ updateInProgress = false;
7760+ var listeners = [];
7761+ function addListener(relevantInputs, domNode, eventName, func) {
7762+ domNode.addEventListener(eventName, func);
7764+ relevantInputs: relevantInputs,
7766+ eventName: eventName,
7769+ listeners.push(listener);
7773+ for (var key in ports) {
7776+ // create the actual RTS. Any impure modules will attach themselves to this
7777+ // object. This permits many Elm programs to be embedded per document.
7782+ id:ElmRuntime.guid(),
7783+ addListener:addListener,
7785+ ports: { incoming:ports, outgoing:{}, uses:portUses }
7788+ function swap(newModule) {
7789+ removeListeners(listeners);
7790+ var div = document.createElement('div');
7791+ var newElm = init(display, div, newModule, ports, elm);
7793+ // elm.swap = newElm.swap;
7798+ var reportAnyErrors = function() {};
7800+ Module = module.make(elm);
7803+ var directions = "<br/> Open the developer console for more details."
7804+ Module.main = Elm.Text.make(elm).leftAligned('<code>' + e.message + directions + '</code>');
7805+ reportAnyErrors = function() { throw e; }
7807+ inputs = ElmRuntime.filterDeadInputs(inputs);
7808+ filterListeners(inputs, listeners);
7809+ addReceivers(elm.ports.outgoing);
7810+ if (display !== ElmRuntime.Display.NONE) {
7811+ var graphicsNode = initGraphics(elm, Module);
7813+ if (typeof moduleToReplace !== 'undefined') {
7814+ ElmRuntime.swap(moduleToReplace, elm);
7816+ // rerender scene if graphics are enabled.
7817+ if (typeof graphicsNode !== 'undefined') {
7818+ graphicsNode.recv(0, true, 0);
7823+ return { swap:swap, ports:elm.ports.outgoing };
7826+function checkPorts(elm) {
7827+ var portUses = elm.ports.uses;
7828+ for (var key in portUses) {
7829+ var uses = portUses[key]
7832+ "Initialization Error: provided port '" + key +
7833+ "' to a module that does not take it as in input.\n" +
7834+ "Remove '" + key + "' from the module initialization code.");
7835+ } else if (uses > 1) {
7837+ "Initialization Error: port '" + key +
7838+ "' has been declared multiple times in the Elm code.\n" +
7839+ "Remove declarations until there is exactly one.");
7844+function filterListeners(inputs, listeners) {
7846+ for (var i = listeners.length; i--; ) {
7847+ var listener = listeners[i];
7848+ for (var j = inputs.length; j--; ) {
7849+ if (listener.relevantInputs.indexOf(inputs[j].id) >= 0) {
7853+ listener.domNode.removeEventListener(listener.eventName, listener.func);
7857+function removeListeners(listeners) {
7858+ for (var i = listeners.length; i--; ) {
7859+ var listener = listeners[i];
7860+ listener.domNode.removeEventListener(listener.eventName, listener.func);
7864+// add receivers for built-in ports if they are defined
7865+function addReceivers(ports) {
7866+ if ('log' in ports) {
7867+ ports.log.subscribe(function(v) { console.log(v) });
7869+ if ('stdout' in ports) {
7870+ var process = process || {};
7871+ var handler = process.stdout
7872+ ? function(v) { process.stdout.write(v); }
7873+ : function(v) { console.log(v); };
7874+ ports.stdout.subscribe(handler);
7876+ if ('stderr' in ports) {
7877+ var process = process || {};
7878+ var handler = process.stderr
7879+ ? function(v) { process.stderr.write(v); }
7880+ : function(v) { console.log('Error:' + v); };
7881+ ports.stderr.subscribe(handler);
7883+ if ('title' in ports) {
7884+ if (typeof ports.title === 'string') {
7885+ document.title = ports.title;
7887+ ports.title.subscribe(function(v) { document.title = v; });
7890+ if ('redirect' in ports) {
7891+ ports.redirect.subscribe(function(v) {
7892+ if (v.length > 0) window.location = v;
7895+ if ('favicon' in ports) {
7896+ if (typeof ports.favicon === 'string') {
7897+ changeFavicon(ports.favicon);
7899+ ports.favicon.subscribe(changeFavicon);
7902+ function changeFavicon(src) {
7903+ var link = document.createElement('link');
7904+ var oldLink = document.getElementById('elm-favicon');
7905+ link.id = 'elm-favicon';
7906+ link.rel = 'shortcut icon';
7909+ document.head.removeChild(oldLink);
7911+ document.head.appendChild(link);
7915+function initGraphics(elm, Module) {
7916+ if (!('main' in Module))
7917+ throw new Error("'main' is missing! What do I display?!");
7919+ var signalGraph = Module.main;
7921+ // make sure the signal graph is actually a signal & extract the visual model
7922+ var Signal = Elm.Signal.make(elm);
7923+ if (!('recv' in signalGraph)) {
7924+ signalGraph = Signal.constant(signalGraph);
7926+ var currentScene = signalGraph.value;
7928+ // Add the currentScene to the DOM
7929+ var Render = ElmRuntime.use(ElmRuntime.Render.Element);
7930+ elm.node.appendChild(Render.render(currentScene));
7932+ // set up updates so that the DOM is adjusted as necessary.
7933+ var savedScene = currentScene;
7934+ function domUpdate(newScene) {
7935+ ElmRuntime.draw(function(_) {
7936+ Render.update(elm.node.firstChild, savedScene, newScene);
7937+ if (elm.Native.Window) elm.Native.Window.values.resizeIfNeeded();
7938+ savedScene = newScene;
7941+ var renderer = A2(Signal.lift, domUpdate, signalGraph);
7943+ // must check for resize after 'renderer' is created so
7944+ // that changes show up.
7945+ if (elm.Native.Window) elm.Native.Window.values.resizeIfNeeded();
7955+ElmRuntime.Display = { FULLSCREEN: 0, COMPONENT: 1, NONE: 2 };
7957+ElmRuntime.counter = 0;
7958+ElmRuntime.guid = function() { return ElmRuntime.counter++; }
7960+ElmRuntime.use = function(M) {
7961+ if (typeof M === 'function') M = M();
7965+function isAlive(input) {
7966+ if (!('defaultNumberOfKids' in input)) return true;
7967+ var len = input.kids.length;
7968+ if (len === 0) return false;
7969+ if (len > input.defaultNumberOfKids) return true;
7971+ for (var i = len; i--; ) {
7972+ alive = alive || isAlive(input.kids[i]);
7977+ElmRuntime.filterDeadInputs = function(inputs) {
7979+ for (var i = inputs.length; i--; ) {
7980+ if (isAlive(inputs[i])) temp.push(inputs[i]);
7985+// define the draw function
7986+var vendors = ['ms', 'moz', 'webkit', 'o'];
7987+var win = typeof window !== 'undefined' ? window : {};
7988+for (var i = 0; i < vendors.length && !win.requestAnimationFrame; ++i) {
7989+ win.requestAnimationFrame = win[vendors[i]+'RequestAnimationFrame'];
7990+ win.cancelAnimationFrame = win[vendors[i]+'CancelAnimationFrame'] ||
7991+ win[vendors[i]+'CancelRequestAnimationFrame'];
7994+if (win.requestAnimationFrame && win.cancelAnimationFrame) {
7996+ ElmRuntime.draw = function(callback) {
7997+ win.cancelAnimationFrame(previous);
7998+ previous = win.requestAnimationFrame(callback);
8001+ ElmRuntime.draw = function(callback) { callback(); };
8007+// Returns boolean indicating if the swap was successful.
8008+// Requires that the two signal graphs have exactly the same
8010+ElmRuntime.swap = function(from, to) {
8011+ function similar(nodeOld,nodeNew) {
8012+ var idOkay = nodeOld.id === nodeNew.id;
8013+ var lengthOkay = nodeOld.kids.length === nodeNew.kids.length;
8014+ return idOkay && lengthOkay;
8016+ function swap(nodeOld,nodeNew) {
8017+ nodeNew.value = nodeOld.value;
8020+ var canSwap = depthFirstTraversals(similar, from.inputs, to.inputs);
8021+ if (canSwap) { depthFirstTraversals(swap, from.inputs, to.inputs); }
8022+ from.node.parentNode.replaceChild(to.node, from.node);
8026+// Returns false if the node operation f ever fails.
8027+function depthFirstTraversals(f, queueOld, queueNew) {
8028+ if (queueOld.length !== queueNew.length) return false;
8029+ queueOld = queueOld.slice(0);
8030+ queueNew = queueNew.slice(0);
8033+ while (queueOld.length > 0 && queueNew.length > 0) {
8034+ var nodeOld = queueOld.pop();
8035+ var nodeNew = queueNew.pop();
8036+ if (seen.indexOf(nodeOld.id) < 0) {
8037+ if (!f(nodeOld, nodeNew)) return false;
8038+ queueOld = queueOld.concat(nodeOld.kids);
8039+ queueNew = queueNew.concat(nodeNew.kids);
8040+ seen.push(nodeOld.id);
8048+ElmRuntime.Render.Element = function() {
8051+var Utils = ElmRuntime.use(ElmRuntime.Render.Utils);
8052+var newElement = Utils.newElement, extract = Utils.extract,
8053+ addTransform = Utils.addTransform, removeTransform = Utils.removeTransform,
8054+ fromList = Utils.fromList, eq = Utils.eq;
8056+function setProps(elem, e) {
8057+ var props = elem.props;
8058+ var element = elem.element;
8059+ var width = props.width - (element.adjustWidth || 0);
8060+ var height = props.height - (element.adjustHeight || 0);
8061+ e.style.width = (width |0) + 'px';
8062+ e.style.height = (height|0) + 'px';
8063+ if (props.opacity !== 1) {
8064+ e.style.opacity = props.opacity;
8066+ if (props.color.ctor === 'Just') {
8067+ e.style.backgroundColor = extract(props.color._0);
8069+ if (props.tag !== '') { e.id = props.tag; }
8070+ if (props.href !== '') {
8071+ var a = newElement('a');
8072+ a.href = props.href;
8073+ a.style.width = '100%';
8074+ a.style.height = '100%';
8077+ a.style.display = 'block';
8078+ a.style.position = 'absolute';
8079+ e.style.position = 'relative';
8082+ if (props.hover.ctor !== '_Tuple0') {
8083+ addHover(e, props.hover);
8085+ if (props.click.ctor !== '_Tuple0') {
8086+ addClick(e, props.click);
8091+function addClick(e, handler) {
8092+ e.style.pointerEvents = 'auto';
8093+ e.elm_click_handler = handler;
8094+ function trigger() {
8095+ e.elm_click_handler(Utils.Tuple0);
8097+ e.elm_click_trigger = trigger;
8098+ e.addEventListener('click', trigger);
8101+function removeClick(e, handler) {
8102+ if (e.elm_click_trigger) {
8103+ e.removeEventListener('click', e.elm_click_trigger);
8107+function addHover(e, handler) {
8108+ e.style.pointerEvents = 'auto';
8109+ e.elm_hover_handler = handler;
8110+ e.elm_hover_count = 0;
8113+ if (e.elm_hover_count++ > 0) return;
8114+ e.elm_hover_handler(true);
8116+ function out(evt) {
8117+ if (e.contains(evt.toElement || evt.relatedTarget)) return;
8118+ e.elm_hover_count = 0;
8119+ e.elm_hover_handler(false);
8121+ e.elm_hover_over = over;
8122+ e.elm_hover_out = out;
8123+ e.addEventListener('mouseover', over);
8124+ e.addEventListener('mouseout', out);
8127+function removeHover(e) {
8128+ if (e.elm_hover_over) {
8129+ e.removeEventListener('mouseover', e.elm_hover_over);
8131+ if (e.elm_hover_out) {
8132+ e.removeEventListener('mouseout', e.elm_hover_out);
8136+function image(props, img) {
8137+ switch (img._0.ctor) {
8138+ case 'Plain': return plainImage(img._3);
8139+ case 'Fitted': return fittedImage(props.width, props.height, img._3);
8140+ case 'Cropped': return croppedImage(img,props.width,props.height,img._3);
8141+ case 'Tiled': return tiledImage(img._3);
8145+function plainImage(src) {
8146+ var img = newElement('img');
8149+ img.style.display = "block";
8153+function tiledImage(src) {
8154+ var div = newElement('div');
8155+ div.style.backgroundImage = 'url(' + src + ')';
8159+function fittedImage(w, h, src) {
8160+ var div = newElement('div');
8161+ div.style.background = 'url(' + src + ') no-repeat center';
8162+ div.style.webkitBackgroundSize = 'cover';
8163+ div.style.MozBackgroundSize = 'cover';
8164+ div.style.OBackgroundSize = 'cover';
8165+ div.style.backgroundSize = 'cover';
8169+function croppedImage(elem, w, h, src) {
8170+ var pos = elem._0._0;
8171+ var e = newElement('div');
8172+ e.style.overflow = "hidden";
8174+ var img = newElement('img');
8175+ img.onload = function() {
8176+ var sw = w / elem._1, sh = h / elem._2;
8177+ img.style.width = ((this.width * sw)|0) + 'px';
8178+ img.style.height = ((this.height * sh)|0) + 'px';
8179+ img.style.marginLeft = ((- pos._0 * sw)|0) + 'px';
8180+ img.style.marginTop = ((- pos._1 * sh)|0) + 'px';
8184+ e.appendChild(img);
8188+function goIn(e) { e.style.position = 'absolute'; return e; }
8189+function goDown(e) { return e }
8190+function goRight(e) { e.style.styleFloat = e.style.cssFloat = "left"; return e; }
8191+function flowWith(f, array) {
8192+ var container = newElement('div');
8193+ if (f == goIn) container.style.pointerEvents = 'none';
8195+ for (var i = array.length; i--; ) {
8196+ container.appendChild(f(render(array[i])));
8201+function flow(dir,elist) {
8202+ var array = fromList(elist);
8204+ case "DDown": array.reverse();
8205+ case "DUp": return flowWith(goDown,array);
8206+ case "DRight": array.reverse();
8207+ case "DLeft": return flowWith(goRight,array);
8208+ case "DOut": array.reverse();
8209+ case "DIn": return flowWith(goIn,array);
8213+function toPos(pos) {
8215+ case "Absolute": return pos._0 + "px";
8216+ case "Relative": return (pos._0 * 100) + "%";
8220+// must clear right, left, top, bottom, and transform
8221+// before calling this function
8222+function setPos(pos,elem,e) {
8223+ var element = elem.element;
8224+ var props = elem.props;
8225+ var w = props.width + (element.adjustWidth ? element.adjustWidth : 0);
8226+ var h = props.height + (element.adjustHeight ? element.adjustHeight : 0);
8228+ e.style.position = 'absolute';
8229+ e.style.margin = 'auto';
8230+ var transform = '';
8231+ switch(pos.horizontal.ctor) {
8232+ case 'P': e.style.right = toPos(pos.x); e.style.removeProperty('left'); break;
8233+ case 'Z': transform = 'translateX(' + ((-w/2)|0) + 'px) ';
8234+ case 'N': e.style.left = toPos(pos.x); e.style.removeProperty('right'); break;
8236+ switch(pos.vertical.ctor) {
8237+ case 'N': e.style.bottom = toPos(pos.y); e.style.removeProperty('top'); break;
8238+ case 'Z': transform += 'translateY(' + ((-h/2)|0) + 'px)';
8239+ case 'P': e.style.top = toPos(pos.y); e.style.removeProperty('bottom'); break;
8241+ if (transform !== '') addTransform(e.style, transform);
8245+function container(pos,elem) {
8246+ var e = render(elem);
8247+ setPos(pos, elem, e);
8248+ var div = newElement('div');
8249+ div.style.position = 'relative';
8250+ div.style.overflow = 'hidden';
8251+ div.appendChild(e);
8255+function rawHtml(elem) {
8256+ var html = elem.html;
8257+ var args = elem.args;
8258+ var guid = elem.guid;
8259+ var align = elem.align;
8261+ var div = newElement('div');
8262+ div.innerHTML = html;
8263+ div.style.visibility = "hidden";
8264+ if (align) div.style.textAlign = align;
8265+ document.body.appendChild(div);
8267+ for (var i = args.length; i--; ) {
8269+ var span = document.getElementById('md-' + guid + '-' + i);
8271+ span.innerHTML = arg;
8273+ span.style.display = 'block';
8274+ span.style.width = arg.props.width + 'px';
8275+ span.style.height = arg.props.height + 'px';
8276+ span.appendChild(render(arg));
8279+ document.body.removeChild(div);
8280+ div.style.visibility = 'visible';
8284+function render(elem) { return setProps(elem, makeElement(elem)); }
8285+function makeElement(e) {
8286+ var elem = e.element;
8287+ switch(elem.ctor) {
8288+ case 'Image': return image(e.props, elem);
8289+ case 'Flow': return flow(elem._0, elem._1);
8290+ case 'Container': return container(elem._0, elem._1);
8291+ case 'Spacer': return newElement('div');
8292+ case 'RawHtml': return rawHtml(elem);
8293+ case 'Custom': return elem.render(elem.model);
8297+function update(node, curr, next) {
8298+ if (node.tagName === 'A') { node = node.firstChild; }
8299+ if (curr.props.id === next.props.id) return updateProps(node, curr, next);
8300+ if (curr.element.ctor !== next.element.ctor) {
8301+ node.parentNode.replaceChild(render(next),node);
8304+ var nextE = next.element, currE = curr.element;
8305+ switch(nextE.ctor) {
8306+ case "Spacer": break;
8308+ // only markdown blocks have guids, so this must be a text block
8309+ if (nextE.guid === null) {
8310+ if(currE.html.valueOf() !== nextE.html.valueOf()) {
8311+ node.innerHTML = nextE.html;
8315+ if (nextE.guid !== currE.guid) {
8316+ node.parentNode.replaceChild(render(next),node);
8319+ var nargs = nextE.args;
8320+ var cargs = currE.args;
8321+ for (var i = nargs.length; i--; ) {
8322+ var narg = nargs[i];
8323+ var carg = cargs[i]
8324+ if (narg == carg) continue;
8325+ var span = document.getElementById('md-' + currE.guid + '-' + i);
8326+ if (narg.isElement) {
8327+ if (carg.isElement) {
8328+ update(span, carg, narg);
8330+ span.style.display = 'block';
8331+ var e = render(narg);
8332+ span.innerHTML = '';
8333+ span.appendChild(e);
8336+ span.style.display = 'inline';
8337+ span.innerHTML = narg;
8342+ if (nextE._0.ctor === 'Plain') {
8343+ if (nextE._3 !== currE._3) node.src = nextE._3;
8344+ } else if (!eq(nextE,currE) ||
8345+ next.props.width !== curr.props.width ||
8346+ next.props.height !== curr.props.height) {
8347+ node.parentNode.replaceChild(render(next),node);
8352+ var arr = fromList(nextE._1);
8353+ for (var i = arr.length; i--; ) { arr[i] = arr[i].element.ctor; }
8354+ if (nextE._0.ctor !== currE._0.ctor) {
8355+ node.parentNode.replaceChild(render(next),node);
8358+ var nexts = fromList(nextE._1);
8359+ var kids = node.childNodes;
8360+ if (nexts.length !== kids.length) {
8361+ node.parentNode.replaceChild(render(next),node);
8364+ var currs = fromList(currE._1);
8365+ var goDir = function(x) { return x; };
8366+ switch(nextE._0.ctor) {
8367+ case "DDown": case "DUp": goDir = goDown; break;
8368+ case "DRight": case "DLeft": goDir = goRight; break;
8369+ case "DOut": case "DIn": goDir = goIn; break;
8371+ for (var i = kids.length; i-- ;) {
8372+ update(kids[i],currs[i],nexts[i]);
8377+ update(node.firstChild, currE._1, nextE._1);
8378+ setPos(nextE._0, nextE._1, node.firstChild);
8381+ if (currE.type === nextE.type) {
8382+ var done = nextE.update(node, currE.model, nextE.model);
8385+ return node.parentNode.replaceChild(render(next), node);
8388+ updateProps(node, curr, next);
8391+function updateProps(node, curr, next) {
8392+ var props = next.props;
8393+ var currP = curr.props;
8395+ var element = next.element;
8396+ var width = props.width - (element.adjustWidth || 0);
8397+ var height = props.height - (element.adjustHeight || 0);
8398+ if (width !== currP.width) {
8399+ e.style.width = (width|0) + 'px';
8401+ if (height !== currP.height) {
8402+ e.style.height = (height|0) + 'px';
8404+ if (props.opacity !== currP.opacity) {
8405+ e.style.opacity = props.opacity;
8407+ var nextColor = (props.color.ctor === 'Just' ?
8408+ extract(props.color._0) : '');
8409+ if (e.style.backgroundColor !== nextColor) {
8410+ e.style.backgroundColor = (nextColor === '' ? 'transparent' : nextColor);
8412+ if (props.tag !== currP.tag) { e.id = props.tag; }
8413+ if (props.href !== currP.href) {
8414+ if (currP.href === '') {
8415+ var a = newElement('a');
8416+ a.href = props.href;
8417+ a.style.width = '100%';
8418+ a.style.height = '100%';
8421+ a.style.display = 'block';
8422+ a.style.position = 'absolute';
8423+ e.style.position = 'relative';
8426+ node.lastNode.href = props.href;
8430+ // update hover handlers
8431+ if (props.hover.ctor === '_Tuple0') {
8433+ } else if (e.elm_hover_handler) {
8434+ e.elm_hover_handler = props.hover;
8436+ addHover(e, props.hover);
8439+ // update click handlers
8440+ if (props.click.ctor === '_Tuple0') {
8442+ } else if (e.elm_click_handler) {
8443+ e.elm_click_handler = props.click;
8445+ addClick(e, props.click);
8449+return { render:render, update:update };
8452+ElmRuntime.Render.Utils = function() {
8453+ function newElement(elementType) {
8454+ var e = document.createElement(elementType);
8455+ e.style.padding = "0";
8456+ e.style.margin = "0";
8460+ function addTo(container, elem) {
8461+ container.appendChild(elem);
8464+ function extract(c) {
8465+ if (c._3 === 1) { return 'rgb(' + c._0 + ', ' + c._1 + ', ' + c._2 + ')'; }
8466+ return 'rgba(' + c._0 + ', ' + c._1 + ', ' + c._2 + ', ' + c._3 + ')';
8469+ function addTransform(style, trans) {
8470+ style.transform = trans;
8471+ style.msTransform = trans;
8472+ style.MozTransform = trans;
8473+ style.webkitTransform = trans;
8474+ style.OTransform = trans;
8477+ function removeTransform(style) {
8478+ style.transform = 'none';
8479+ style.msTransform = 'none';
8480+ style.MozTransform = 'none';
8481+ style.webkitTransform = 'none';
8482+ style.OTransform = 'none';
8485+ var List = Elm.Native.List.make({});
8487+ return {addTo:addTo,
8488+ newElement:newElement,
8490+ fromList: List.toArray,
8491+ fromString: function(s) { return s; },
8492+ toString: function(s) { return s; },
8493+ eq: Elm.Native.Utils.make({}).eq,
8494+ addTransform: addTransform,
8495+ removeTransform: removeTransform};
8498+ElmRuntime.Render.Collage = function() {
8500+var Render = ElmRuntime.use(ElmRuntime.Render.Element);
8501+var Transform = Elm.Transform2D.make({});
8502+var Utils = ElmRuntime.use(ElmRuntime.Render.Utils);
8503+var newElement = Utils.newElement,
8504+ extract = Utils.extract, fromList = Utils.fromList,
8505+ fromString = Utils.fromString, addTransform = Utils.addTransform;
8507+function trace(ctx, path) {
8508+ var points = fromList(path);
8509+ var i = points.length - 1;
8510+ if (i <= 0) return;
8511+ ctx.moveTo(points[i]._0, points[i]._1);
8512+ while (i--) { ctx.lineTo(points[i]._0, points[i]._1); }
8514+ i = points.length - 1;
8515+ ctx.lineTo(points[i]._0, points[i]._1);
8519+function line(ctx,style,path) {
8520+ style.dashing.ctor === 'Nil' ? trace(ctx, path) : customLineHelp(ctx, style, path);
8525+function customLineHelp(ctx, style, path) {
8526+ var points = fromList(path);
8527+ if (path.closed) points.push(points[0]);
8528+ var pattern = fromList(style.dashing);
8529+ var i = points.length - 1;
8530+ if (i <= 0) return;
8531+ var x0 = points[i]._0, y0 = points[i]._1;
8532+ var x1=0, y1=0, dx=0, dy=0, remaining=0, nx=0, ny=0;
8533+ var pindex = 0, plen = pattern.length;
8534+ var draw = true, segmentLength = pattern[0];
8537+ x1 = points[i]._0; y1 = points[i]._1;
8538+ dx = x1 - x0; dy = y1 - y0;
8539+ remaining = Math.sqrt(dx * dx + dy * dy);
8540+ while (segmentLength <= remaining) {
8541+ x0 += dx * segmentLength / remaining;
8542+ y0 += dy * segmentLength / remaining;
8543+ ctx[draw ? 'lineTo' : 'moveTo'](x0, y0);
8544+ // update starting position
8545+ dx = x1 - x0; dy = y1 - y0;
8546+ remaining = Math.sqrt(dx * dx + dy * dy);
8549+ pindex = (pindex + 1) % plen;
8550+ segmentLength = pattern[pindex];
8552+ if (remaining > 0) {
8553+ ctx[draw ? 'lineTo' : 'moveTo'](x1, y1);
8554+ segmentLength -= remaining;
8560+function drawLine(ctx, style, path) {
8561+ ctx.lineWidth = style.width;
8562+ var cap = style.cap.ctor;
8563+ ctx.lineCap = cap === 'Flat' ? 'butt' :
8564+ cap === 'Round' ? 'round' : 'square';
8565+ var join = style.join.ctor;
8566+ ctx.lineJoin = join === 'Smooth' ? 'round' :
8567+ join === 'Sharp' ? 'miter' : 'bevel';
8568+ ctx.miterLimit = style.join._0 || 10;
8569+ ctx.strokeStyle = extract(style.color);
8570+ return line(ctx, style, path);
8573+function texture(redo, ctx, src) {
8574+ var img = new Image();
8575+ img.src = fromString(src);
8577+ return ctx.createPattern(img, 'repeat');
8580+function gradient(ctx, grad) {
8583+ if (grad.ctor === 'Linear') {
8584+ var p0 = grad._0, p1 = grad._1;
8585+ g = ctx.createLinearGradient(p0._0, -p0._1, p1._0, -p1._1);
8586+ stops = fromList(grad._2);
8588+ var p0 = grad._0, p2 = grad._2;
8589+ g = ctx.createRadialGradient(p0._0, -p0._1, grad._1, p2._0, -p2._1, grad._3);
8590+ stops = fromList(grad._4);
8592+ var len = stops.length;
8593+ for (var i = 0; i < len; ++i) {
8594+ var stop = stops[i];
8595+ g.addColorStop(stop._0, extract(stop._1));
8600+function drawShape(redo, ctx, style, path) {
8602+ var sty = style.ctor;
8604+ sty === 'Solid' ? extract(style._0) :
8605+ sty === 'Texture' ? texture(redo, ctx, style._0) : gradient(ctx, style._0);
8610+function drawImage(redo, ctx, form) {
8611+ var img = new Image();
8613+ img.src = fromString(form._3);
8627+ ctx.drawImage(img, srcX, srcY, srcW, srcH, destX, destY, destW, destH);
8630+function renderForm(redo, ctx, form) {
8632+ var x = form.x, y = form.y, theta = form.theta, scale = form.scale;
8633+ if (x !== 0 || y !== 0) ctx.translate(x, y);
8634+ if (theta !== 0) ctx.rotate(theta);
8635+ if (scale !== 1) ctx.scale(scale,scale);
8636+ if (form.alpha !== 1) ctx.globalAlpha = ctx.globalAlpha * form.alpha;
8640+ case 'FPath' : drawLine(ctx, f._0, f._1); break;
8641+ case 'FImage': drawImage(redo, ctx, f); break;
8643+ if (f._0.ctor === 'Left') {
8644+ f._1.closed = true;
8645+ drawLine(ctx, f._0._0, f._1);
8647+ drawShape(redo, ctx, f._0._0, f._1);
8654+function formToMatrix(form) {
8655+ var scale = form.scale;
8656+ var matrix = A6( Transform.matrix, scale, 0, 0, scale, form.x, form.y );
8658+ var theta = form.theta
8660+ matrix = A2( Transform.multiply, matrix, Transform.rotation(theta) );
8666+ if (n < 0.00001 && n > -0.00001) return 0;
8670+function makeTransform(w, h, form, matrices) {
8671+ var props = form.form._0.props;
8672+ var m = A6( Transform.matrix, 1, 0, 0, -1,
8673+ (w - props.width ) / 2,
8674+ (h - props.height) / 2 );
8675+ var len = matrices.length;
8676+ for (var i = 0; i < len; ++i) { m = A2( Transform.multiply, m, matrices[i] ); }
8677+ m = A2( Transform.multiply, m, formToMatrix(form) );
8679+ return 'matrix(' + str( m[0]) + ', ' + str( m[3]) + ', ' +
8680+ str(-m[1]) + ', ' + str(-m[4]) + ', ' +
8681+ str( m[2]) + ', ' + str( m[5]) + ')';
8684+function stepperHelp(list) {
8685+ var arr = fromList(list);
8687+ function peekNext() {
8688+ return i < arr.length ? arr[i].form.ctor : '';
8690+ // assumes that there is a next element
8696+ return { peekNext:peekNext, next:next };
8699+function formStepper(forms) {
8700+ var ps = [stepperHelp(forms)];
8703+ function peekNext() {
8704+ var len = ps.length;
8706+ for (var i = 0; i < len; ++i ) {
8707+ if (formType = ps[i].peekNext()) return formType;
8711+ // assumes that there is a next element
8712+ function next(ctx) {
8713+ while (!ps[0].peekNext()) {
8717+ if (ctx) { ctx.restore(); }
8719+ var out = ps[0].next();
8721+ if (f.ctor === 'FGroup') {
8722+ ps.unshift(stepperHelp(f._1));
8723+ var m = A2(Transform.multiply, f._0, formToMatrix(out));
8725+ ctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]);
8728+ var alpha = (alphas[0] || 1) * out.alpha;
8729+ alphas.unshift(alpha);
8730+ ctx.globalAlpha = alpha;
8734+ function transforms() { return matrices; }
8735+ function alpha() { return alphas[0] || 1; }
8736+ return { peekNext:peekNext, next:next, transforms:transforms, alpha:alpha };
8739+function makeCanvas(w,h) {
8740+ var canvas = newElement('canvas');
8741+ canvas.style.width = w + 'px';
8742+ canvas.style.height = h + 'px';
8743+ canvas.style.display = "block";
8744+ canvas.style.position = "absolute";
8750+function render(model) {
8751+ var div = newElement('div');
8752+ div.style.overflow = 'hidden';
8753+ div.style.position = 'relative';
8754+ update(div, model, model);
8758+function nodeStepper(w,h,div) {
8759+ var kids = div.childNodes;
8761+ function transform(transforms, ctx) {
8762+ ctx.translate(w/2, h/2);
8764+ var len = transforms.length;
8765+ for (var i = 0; i < len; ++i) {
8766+ var m = transforms[i];
8768+ ctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]);
8772+ function nextContext(transforms) {
8773+ while (i < kids.length) {
8774+ var node = kids[i];
8775+ if (node.getContext) {
8778+ node.style.width = w + 'px';
8779+ node.style.height = h + 'px';
8781+ return transform(transforms, node.getContext('2d'));
8783+ div.removeChild(node);
8785+ var canvas = makeCanvas(w,h);
8786+ div.appendChild(canvas);
8787+ // we have added a new node, so we must step our position
8789+ return transform(transforms, canvas.getContext('2d'));
8791+ function addElement(matrices, alpha, form) {
8793+ var elem = form.form._0;
8795+ var node = (!kid || kid.getContext)
8796+ ? Render.render(elem)
8797+ : (Render.update(kid, kid.oldElement, elem), kids[i]);
8799+ node.style.position = 'absolute';
8800+ node.style.opacity = alpha * form.alpha;
8801+ addTransform(node.style, makeTransform(w, h, form, matrices));
8802+ node.oldElement = elem;
8805+ div.appendChild(node);
8806+ } else if (kid.getContext) {
8807+ div.insertBefore(node, kid);
8810+ function clearRest() {
8811+ while (i < kids.length) {
8812+ div.removeChild(kids[i]);
8815+ return { nextContext:nextContext, addElement:addElement, clearRest:clearRest };
8819+function update(div, _, model) {
8823+ var forms = formStepper(model.forms);
8824+ var nodes = nodeStepper(w,h,div);
8828+ while (formType = forms.peekNext()) {
8829+ // make sure we have context if we need it
8830+ if (ctx === null && formType !== 'FElement') {
8831+ ctx = nodes.nextContext(forms.transforms());
8832+ ctx.globalAlpha = forms.alpha();
8835+ var form = forms.next(ctx);
8836+ // if it is FGroup, all updates are made within formStepper when next is called.
8837+ if (formType === 'FElement') {
8838+ // update or insert an element, get a new context
8839+ nodes.addElement(forms.transforms(), forms.alpha(), form);
8841+ } else if (formType !== 'FGroup') {
8842+ renderForm(function() { update(div, model, model); }, ctx, form);
8849+return { render:render, update:update };
8852+Elm.Main = Elm.Main || {};
8853+Elm.Main.make = function (_elm) {
8855+ _elm.Main = _elm.Main || {};
8856+ if (_elm.Main.values)
8857+ return _elm.Main.values;
8858+ var _N = Elm.Native,
8859+ _U = _N.Utils.make(_elm),
8860+ _L = _N.List.make(_elm),
8861+ _E = _N.Error.make(_elm),
8862+ $moduleName = "Main";
8863+ var Basics = Elm.Basics.make(_elm);
8864+ var Color = Elm.Color.make(_elm);
8865+ var ElmTest = ElmTest || {};
8866+ ElmTest.Assertion = Elm.ElmTest.Assertion.make(_elm);
8867+ var ElmTest = ElmTest || {};
8868+ ElmTest.Run = Elm.ElmTest.Run.make(_elm);
8869+ var ElmTest = ElmTest || {};
8870+ ElmTest.Runner = ElmTest.Runner || {};
8871+ ElmTest.Runner.Console = Elm.ElmTest.Runner.Console.make(_elm);
8872+ var ElmTest = ElmTest || {};
8873+ ElmTest.Test = Elm.ElmTest.Test.make(_elm);
8874+ var Graphics = Graphics || {};
8875+ Graphics.Collage = Elm.Graphics.Collage.make(_elm);
8876+ var Graphics = Graphics || {};
8877+ Graphics.Element = Elm.Graphics.Element.make(_elm);
8879+ IO.IO = Elm.IO.IO.make(_elm);
8881+ IO.Runner = Elm.IO.Runner.make(_elm);
8882+ var List = Elm.List.make(_elm);
8883+ var Maybe = Elm.Maybe.make(_elm);
8884+ var Native = Native || {};
8885+ Native.Json = Elm.Native.Json.make(_elm);
8886+ var Native = Native || {};
8887+ Native.Ports = Elm.Native.Ports.make(_elm);
8888+ var Signal = Elm.Signal.make(_elm);
8889+ var String = Elm.String.make(_elm);
8890+ var Text = Elm.Text.make(_elm);
8891+ var Time = Elm.Time.make(_elm);
8893+ var responses = Native.Ports.portIn("responses",
8894+ Native.Ports.incomingSignal(function (v) {
8895+ return v === null ? Maybe.Nothing : Maybe.Just(typeof v === "string" || typeof v === "object" && v instanceof String ? v : _E.raise("invalid input, expecting JSString but got " + v));
8897+ var tests = _L.fromArray([A2(ElmTest.Test.equals,
8900+ var console = ElmTest.Runner.Console.runDisplay(tests);
8901+ var requests = Native.Ports.portOut("requests",
8902+ Native.Ports.outgoingSignal(function (v) {
8903+ return _L.toArray(v).map(function (v) {
8904+ return {mPut: v.mPut.ctor === "Nothing" ? null : v.mPut._0
8905+ ,mExit: v.mExit.ctor === "Nothing" ? null : v.mExit._0
8912+ _elm.Main.values = {_op: _op
8914+ ,console: console};
8915+ return _elm.Main.values;
8916+};Elm.IO = Elm.IO || {};
8917+Elm.IO.Runner = Elm.IO.Runner || {};
8918+Elm.IO.Runner.make = function (_elm) {
8920+ _elm.IO = _elm.IO || {};
8921+ _elm.IO.Runner = _elm.IO.Runner || {};
8922+ if (_elm.IO.Runner.values)
8923+ return _elm.IO.Runner.values;
8924+ var _N = Elm.Native,
8925+ _U = _N.Utils.make(_elm),
8926+ _L = _N.List.make(_elm),
8927+ _E = _N.Error.make(_elm),
8928+ $moduleName = "IO.Runner";
8929+ var Automaton = Elm.Automaton.make(_elm);
8930+ var Basics = Elm.Basics.make(_elm);
8931+ var Color = Elm.Color.make(_elm);
8932+ var Either = Elm.Either.make(_elm);
8933+ var Graphics = Graphics || {};
8934+ Graphics.Collage = Elm.Graphics.Collage.make(_elm);
8935+ var Graphics = Graphics || {};
8936+ Graphics.Element = Elm.Graphics.Element.make(_elm);
8938+ IO.IO = Elm.IO.IO.make(_elm);
8939+ var List = Elm.List.make(_elm);
8940+ var Maybe = Elm.Maybe.make(_elm);
8941+ var Native = Native || {};
8942+ Native.Json = Elm.Native.Json.make(_elm);
8943+ var Native = Native || {};
8944+ Native.Ports = Elm.Native.Ports.make(_elm);
8945+ var Signal = Elm.Signal.make(_elm);
8946+ var String = Elm.String.make(_elm);
8947+ var Text = Elm.Text.make(_elm);
8948+ var Time = Elm.Time.make(_elm);
8950+ var put = F2(function (s,_v0) {
8951+ return function () {
8952+ return {ctor: "_Tuple2"
8954+ ,_1: {ctor: "_Tuple0"}};
8957+ var ask = function (s) {
8958+ return {ctor: "_Tuple2"
8962+ _op[">>="] = F3(function (f,
8965+ return function () {
8972+ var pure = F2(function (x,s) {
8973+ return {ctor: "_Tuple2"
8978+ ,mExit: Maybe.Nothing
8980+ ,mPut: Maybe.Nothing};
8981+ var putS = function (s) {
8982+ return _U.replace([["mPut"
8986+ var exit = function (n) {
8987+ return _U.replace([["mExit"
8991+ var getS = _U.replace([["mGet"
8994+ var extractRequests = function (io) {
8995+ return function () {
8998+ return function () {
8999+ switch (io._0.ctor)
9001+ return pure({ctor: "_Tuple2"
9002+ ,_0: _L.fromArray([exit(io._0._0)])
9005+ return A2(_op[">>="],
9008+ return function () {
9009+ var _v10 = String.uncons(st.buffer);
9012+ switch (_v10._0.ctor)
9014+ return A2(_op[">>="],
9015+ put({_: {},buffer: _v10._0._1}),
9017+ return function () {
9018+ return extractRequests(io._0._0(_v10._0._0));
9023+ return pure({ctor: "_Tuple2"
9024+ ,_0: _L.fromArray([getS])
9026+ _E.Case($moduleName,
9027+ "between lines 51 and 55");
9031+ return A2(_op[">>="],
9032+ extractRequests(io._0._1),
9034+ return function () {
9037+ return pure({ctor: "_Tuple2"
9039+ ,_0: putS(A2(String.cons,
9044+ _E.Case($moduleName,
9045+ "on line 47, column 22 to 61");
9048+ _E.Case($moduleName,
9049+ "between lines 45 and 55");
9052+ return pure({ctor: "_Tuple2"
9053+ ,_0: _L.fromArray([exit(0)])
9054+ ,_1: IO.IO.Pure(io._0)});}
9055+ _E.Case($moduleName,
9056+ "between lines 43 and 55");
9059+ var step = F2(function (resp,
9061+ return function () {
9064+ return function () {
9065+ var newST = function () {
9068+ return _U.replace([["buffer"
9073+ case "Nothing": return _v20._1;}
9074+ _E.Case($moduleName,
9075+ "between lines 59 and 62");
9077+ var _ = A2(extractRequests,
9080+ var k = function () {
9087+ _E.Case($moduleName,
9088+ "on line 62, column 27 to 51");
9090+ var newST$ = function () {
9094+ {case "_Tuple2": return _._0;}
9096+ _E.Case($moduleName,
9097+ "on line 62, column 27 to 51");
9099+ var rs = function () {
9106+ _E.Case($moduleName,
9107+ "on line 62, column 27 to 51");
9109+ return {ctor: "_Tuple2"
9110+ ,_0: {ctor: "_Tuple2"
9115+ _E.Case($moduleName,
9116+ "between lines 59 and 63");
9119+ var start = {_: {},buffer: ""};
9120+ var run = F2(function (resps,
9122+ return A3(Automaton.run,
9123+ A2(Automaton.hiddenState,
9131+ var orSig = F2(function (s1,
9133+ return A2(Signal.merge,
9134+ A2(Signal._op["<~"],
9137+ A2(Signal._op["<~"],
9141+ var IOState = function (a) {
9142+ return {_: {},buffer: a};
9144+ var Request = F3(function (a,
9152+ _elm.IO.Runner.values = {_op: _op
9160+ ,extractRequests: extractRequests
9166+ ,IOState: IOState};
9167+ return _elm.IO.Runner.values;
9168+};Elm.Automaton = Elm.Automaton || {};
9169+Elm.Automaton.make = function (_elm) {
9171+ _elm.Automaton = _elm.Automaton || {};
9172+ if (_elm.Automaton.values)
9173+ return _elm.Automaton.values;
9174+ var _N = Elm.Native,
9175+ _U = _N.Utils.make(_elm),
9176+ _L = _N.List.make(_elm),
9177+ _E = _N.Error.make(_elm),
9178+ $moduleName = "Automaton";
9179+ var Basics = Elm.Basics.make(_elm);
9180+ var Color = Elm.Color.make(_elm);
9181+ var Graphics = Graphics || {};
9182+ Graphics.Collage = Elm.Graphics.Collage.make(_elm);
9183+ var Graphics = Graphics || {};
9184+ Graphics.Element = Elm.Graphics.Element.make(_elm);
9185+ var List = Elm.List.make(_elm);
9186+ var Maybe = Elm.Maybe.make(_elm);
9187+ var Native = Native || {};
9188+ Native.Json = Elm.Native.Json.make(_elm);
9189+ var Native = Native || {};
9190+ Native.Ports = Elm.Native.Ports.make(_elm);
9191+ var Signal = Elm.Signal.make(_elm);
9192+ var String = Elm.String.make(_elm);
9193+ var Text = Elm.Text.make(_elm);
9194+ var Time = Elm.Time.make(_elm);
9196+ var dequeue = function (q) {
9197+ return function () {
9201+ {case "[]": switch (q._1.ctor)
9203+ return Maybe.Nothing;}
9207+ return Maybe.Just({ctor: "_Tuple2"
9209+ ,_1: {ctor: "_Tuple2"
9213+ return dequeue({ctor: "_Tuple2"
9214+ ,_0: _L.fromArray([])
9215+ ,_1: List.reverse(q._0)});}
9217+ _E.Case($moduleName,
9218+ "between lines 116 and 121");
9221+ var enqueue = F2(function (x,
9223+ return function () {
9226+ return {ctor: "_Tuple2"
9231+ _E.Case($moduleName,
9232+ "on line 115, column 22 to 31");
9235+ var empty = {ctor: "_Tuple2"
9236+ ,_0: _L.fromArray([])
9237+ ,_1: _L.fromArray([])};
9238+ var Step = function (a) {
9239+ return {ctor: "Step",_0: a};
9241+ var run = F3(function (auto,
9244+ return function () {
9245+ var step = F2(function (a,
9247+ return function () {
9250+ switch (_v9._0.ctor)
9252+ return _v9._0._0(a);}
9254+ _E.Case($moduleName,
9255+ "on line 43, column 28 to 31");
9258+ return A2(Signal.lift,
9260+ return function () {
9264+ _E.Case($moduleName,
9265+ "on line 44, column 23 to 24");
9276+ var step = F2(function (a,
9278+ return function () {
9281+ return _v18._0(a);}
9282+ _E.Case($moduleName,
9283+ "on line 48, column 19 to 22");
9286+ var andThen = F2(function (f,
9288+ return Step(function (a) {
9289+ return function () {
9290+ var $ = A2(step,a,f),
9293+ var $ = A2(step,b,g),
9296+ return {ctor: "_Tuple2"
9297+ ,_0: A2(andThen,f$,g$)
9302+ var loop = F2(function (state,
9304+ return Step(function (input) {
9305+ return function () {
9311+ var auto$ = function () {
9315+ {case "_Tuple2": return _._0;}
9317+ _E.Case($moduleName,
9318+ "on line 68, column 54 to 77");
9320+ var output = function () {
9327+ _E.Case($moduleName,
9328+ "on line 68, column 54 to 77");
9330+ var state$ = function () {
9337+ _E.Case($moduleName,
9338+ "on line 68, column 54 to 77");
9340+ return {ctor: "_Tuple2"
9341+ ,_0: A2(loop,state$,auto$)
9346+ var combine = function (autos) {
9347+ return Step(function (a) {
9348+ return function () {
9349+ var $ = List.unzip(A2(List.map,
9354+ return {ctor: "_Tuple2"
9355+ ,_0: combine(autos$)
9360+ var pure = function (f) {
9361+ return Step(function (x) {
9362+ return {ctor: "_Tuple2"
9367+ var state = F2(function (s,f) {
9368+ return Step(function (x) {
9369+ return function () {
9370+ var s$ = A2(f,x,s);
9371+ return {ctor: "_Tuple2"
9372+ ,_0: A2(state,s$,f)
9377+ var count = A2(state,
9379+ F2(function (_v36,c) {
9380+ return function () {
9384+ var hiddenState = F2(function (s,
9386+ return Step(function (x) {
9387+ return function () {
9391+ return {ctor: "_Tuple2"
9392+ ,_0: A2(hiddenState,s$,f)
9397+ var average = function (k) {
9398+ return function () {
9399+ var stepFull = F2(function (n,
9401+ return function () {
9404+ return function () {
9405+ var _v43 = dequeue(_v38._0);
9408+ switch (_v43._0.ctor)
9410+ return function () {
9411+ var sum$ = _v38._2 + n - _v43._0._0;
9412+ return {ctor: "_Tuple2"
9413+ ,_0: {ctor: "_Tuple3"
9414+ ,_0: A2(enqueue,n,_v43._0._1)
9417+ ,_1: sum$ / Basics.toFloat(_v38._1)};
9421+ return {ctor: "_Tuple2"
9422+ ,_0: {ctor: "_Tuple3"
9427+ _E.Case($moduleName,
9428+ "between lines 128 and 132");
9430+ _E.Case($moduleName,
9431+ "between lines 128 and 132");
9434+ var step = F2(function (n,
9436+ return function () {
9439+ return _U.eq(_v47._1,
9445+ ,_2: _v47._2}) : {ctor: "_Tuple2"
9446+ ,_0: {ctor: "_Tuple3"
9447+ ,_0: A2(enqueue,n,_v47._0)
9450+ ,_1: (_v47._2 + n) / (Basics.toFloat(_v47._1) + 1)};}
9451+ _E.Case($moduleName,
9452+ "between lines 125 and 126");
9455+ return A2(hiddenState,
9463+ _elm.Automaton.values = {_op: _op
9466+ ,hiddenState: hiddenState
9473+ ,average: average};
9474+ return _elm.Automaton.values;
9475+};Elm.ElmTest = Elm.ElmTest || {};
9476+Elm.ElmTest.Runner = Elm.ElmTest.Runner || {};
9477+Elm.ElmTest.Runner.Console = Elm.ElmTest.Runner.Console || {};
9478+Elm.ElmTest.Runner.Console.make = function (_elm) {
9480+ _elm.ElmTest = _elm.ElmTest || {};
9481+ _elm.ElmTest.Runner = _elm.ElmTest.Runner || {};
9482+ _elm.ElmTest.Runner.Console = _elm.ElmTest.Runner.Console || {};
9483+ if (_elm.ElmTest.Runner.Console.values)
9484+ return _elm.ElmTest.Runner.Console.values;
9485+ var _N = Elm.Native,
9486+ _U = _N.Utils.make(_elm),
9487+ _L = _N.List.make(_elm),
9488+ _E = _N.Error.make(_elm),
9489+ $moduleName = "ElmTest.Runner.Console";
9490+ var Basics = Elm.Basics.make(_elm);
9491+ var Color = Elm.Color.make(_elm);
9492+ var ElmTest = ElmTest || {};
9493+ ElmTest.Runner = ElmTest.Runner || {};
9494+ ElmTest.Runner.String = Elm.ElmTest.Runner.String.make(_elm);
9495+ var ElmTest = ElmTest || {};
9496+ ElmTest.Test = Elm.ElmTest.Test.make(_elm);
9497+ var Graphics = Graphics || {};
9498+ Graphics.Collage = Elm.Graphics.Collage.make(_elm);
9499+ var Graphics = Graphics || {};
9500+ Graphics.Element = Elm.Graphics.Element.make(_elm);
9502+ IO.IO = Elm.IO.IO.make(_elm);
9503+ var List = Elm.List.make(_elm);
9504+ var Maybe = Elm.Maybe.make(_elm);
9505+ var Native = Native || {};
9506+ Native.Json = Elm.Native.Json.make(_elm);
9507+ var Native = Native || {};
9508+ Native.Ports = Elm.Native.Ports.make(_elm);
9509+ var Signal = Elm.Signal.make(_elm);
9510+ var String = Elm.String.make(_elm);
9511+ var Text = Elm.Text.make(_elm);
9512+ var Time = Elm.Time.make(_elm);
9514+ var runDisplay = function (tests) {
9515+ return function () {
9516+ var $ = ElmTest.Runner.String.runDisplay(tests),
9519+ return A2(IO.IO._op[">>"],
9520+ IO.IO.putStrLn(results),
9524+ return IO.IO.exit(1);
9526+ return IO.IO.exit(0);}
9527+ _E.Case($moduleName,
9528+ "between lines 23 and 25");
9532+ _elm.ElmTest.Runner.Console.values = {_op: _op
9533+ ,runDisplay: runDisplay};
9534+ return _elm.ElmTest.Runner.Console.values;
9535+};Elm.ElmTest = Elm.ElmTest || {};
9536+Elm.ElmTest.Runner = Elm.ElmTest.Runner || {};
9537+Elm.ElmTest.Runner.String = Elm.ElmTest.Runner.String || {};
9538+Elm.ElmTest.Runner.String.make = function (_elm) {
9540+ _elm.ElmTest = _elm.ElmTest || {};
9541+ _elm.ElmTest.Runner = _elm.ElmTest.Runner || {};
9542+ _elm.ElmTest.Runner.String = _elm.ElmTest.Runner.String || {};
9543+ if (_elm.ElmTest.Runner.String.values)
9544+ return _elm.ElmTest.Runner.String.values;
9545+ var _N = Elm.Native,
9546+ _U = _N.Utils.make(_elm),
9547+ _L = _N.List.make(_elm),
9548+ _E = _N.Error.make(_elm),
9549+ $moduleName = "ElmTest.Runner.String";
9550+ var Basics = Elm.Basics.make(_elm);
9551+ var Color = Elm.Color.make(_elm);
9552+ var ElmTest = ElmTest || {};
9553+ ElmTest.Run = Elm.ElmTest.Run.make(_elm);
9554+ var ElmTest = ElmTest || {};
9555+ ElmTest.Test = Elm.ElmTest.Test.make(_elm);
9556+ var Graphics = Graphics || {};
9557+ Graphics.Collage = Elm.Graphics.Collage.make(_elm);
9558+ var Graphics = Graphics || {};
9559+ Graphics.Element = Elm.Graphics.Element.make(_elm);
9560+ var List = Elm.List.make(_elm);
9561+ var Maybe = Elm.Maybe.make(_elm);
9562+ var Native = Native || {};
9563+ Native.Json = Elm.Native.Json.make(_elm);
9564+ var Native = Native || {};
9565+ Native.Ports = Elm.Native.Ports.make(_elm);
9566+ var Signal = Elm.Signal.make(_elm);
9567+ var String = Elm.String.make(_elm);
9568+ var Text = Elm.Text.make(_elm);
9569+ var Time = Elm.Time.make(_elm);
9571+ var pretty = F2(function (_v0,
9573+ return function () {
9576+ return function () {
9579+ return _L.append(_v0._0,
9580+ _L.append(": FAILED. ",r._0));
9582+ return _L.append(_v0._0,
9584+ _E.Case($moduleName,
9585+ "between lines 29 and 33");
9587+ _E.Case($moduleName,
9588+ "between lines 29 and 33");
9591+ var replicate = F2(function (n,
9593+ return function () {
9594+ var go = function (n) {
9596+ 0) < 1 ? _L.fromArray([]) : {ctor: "::"
9600+ return String.fromList(go(n));
9603+ var vcat = function ($) {
9604+ return List.concat(List.intersperse("\n")($));
9606+ var indent = function (n) {
9607+ return function () {
9608+ var indents = A2(replicate,
9611+ return function ($) {
9612+ return vcat(List.map(String.append(indents))(String.lines($)));
9616+ var runDisplay = function (ts) {
9617+ return function () {
9618+ var r = ElmTest.Run.report(ts);
9619+ var passed = List.length(r.passes);
9620+ var failed = List.length(r.failures);
9621+ var summary = vcat(List.map(indent(2))(_L.fromArray([_L.append(String.show(List.length(ts)),
9623+ ,_L.append(String.show(passed),
9625+ ,_L.append(String.show(failed),
9626+ " tests failed")])));
9627+ var pass = _U.eq(failed,0);
9628+ var results = pass ? _L.fromArray([]) : A3(List.zipWith,
9632+ return {ctor: "_Tuple2"
9634+ ,_1: vcat({ctor: "::"
9639+ _elm.ElmTest.Runner.String.values = {_op: _op
9640+ ,runDisplay: runDisplay};
9641+ return _elm.ElmTest.Runner.String.values;
9642+};Elm.ElmTest = Elm.ElmTest || {};
9643+Elm.ElmTest.Run = Elm.ElmTest.Run || {};
9644+Elm.ElmTest.Run.make = function (_elm) {
9646+ _elm.ElmTest = _elm.ElmTest || {};
9647+ _elm.ElmTest.Run = _elm.ElmTest.Run || {};
9648+ if (_elm.ElmTest.Run.values)
9649+ return _elm.ElmTest.Run.values;
9650+ var _N = Elm.Native,
9651+ _U = _N.Utils.make(_elm),
9652+ _L = _N.List.make(_elm),
9653+ _E = _N.Error.make(_elm),
9654+ $moduleName = "ElmTest.Run";
9655+ var Basics = Elm.Basics.make(_elm);
9656+ var Color = Elm.Color.make(_elm);
9657+ var ElmTest = ElmTest || {};
9658+ ElmTest.Assertion = Elm.ElmTest.Assertion.make(_elm);
9659+ var ElmTest = ElmTest || {};
9660+ ElmTest.Test = Elm.ElmTest.Test.make(_elm);
9661+ var Graphics = Graphics || {};
9662+ Graphics.Collage = Elm.Graphics.Collage.make(_elm);
9663+ var Graphics = Graphics || {};
9664+ Graphics.Element = Elm.Graphics.Element.make(_elm);
9665+ var List = Elm.List.make(_elm);
9666+ var Maybe = Elm.Maybe.make(_elm);
9667+ var Native = Native || {};
9668+ Native.Json = Elm.Native.Json.make(_elm);
9669+ var Native = Native || {};
9670+ Native.Ports = Elm.Native.Ports.make(_elm);
9671+ var Signal = Elm.Signal.make(_elm);
9672+ var String = Elm.String.make(_elm);
9673+ var Text = Elm.Text.make(_elm);
9674+ var Time = Elm.Time.make(_elm);
9676+ var pass = function (m) {
9677+ return function () {
9679+ {case "Just": return false;
9680+ case "Nothing": return true;}
9681+ _E.Case($moduleName,
9682+ "between lines 33 and 37");
9685+ var fail = function ($) {
9686+ return Basics.not(pass($));
9688+ var run = function (_v2) {
9689+ return function () {
9692+ return function () {
9693+ var runAssertion = F2(function (t,
9695+ return t({ctor: "_Tuple0"}) ? Maybe.Nothing : Maybe.Just(m);
9697+ return function () {
9698+ switch (_v2._1.ctor)
9699+ {case "AssertEqual":
9700+ return runAssertion(_v2._1._0)(_L.append("Expected: ",
9701+ _L.append(_v2._1._1,
9702+ _L.append("; got: ",
9704+ case "AssertFalse":
9705+ return runAssertion(_v2._1._0)("not False");
9706+ case "AssertNotEqual":
9707+ return runAssertion(_v2._1._0)(_L.append(_v2._1._1,
9708+ _L.append(" equals ",
9711+ return runAssertion(_v2._1._0)("not True");}
9712+ _E.Case($moduleName,
9713+ "between lines 25 and 31");
9716+ _E.Case($moduleName,
9717+ "between lines 22 and 31");
9720+ var report = function (ts) {
9721+ return function () {
9722+ var results = A2(List.map,
9725+ var $ = A2(List.partition,
9733+ ,results: results};
9736+ var Report = F3(function (a,
9744+ _elm.ElmTest.Run.values = {_op: _op
9750+ return _elm.ElmTest.Run.values;
9751+};Elm.ElmTest = Elm.ElmTest || {};
9752+Elm.ElmTest.Test = Elm.ElmTest.Test || {};
9753+Elm.ElmTest.Test.make = function (_elm) {
9755+ _elm.ElmTest = _elm.ElmTest || {};
9756+ _elm.ElmTest.Test = _elm.ElmTest.Test || {};
9757+ if (_elm.ElmTest.Test.values)
9758+ return _elm.ElmTest.Test.values;
9759+ var _N = Elm.Native,
9760+ _U = _N.Utils.make(_elm),
9761+ _L = _N.List.make(_elm),
9762+ _E = _N.Error.make(_elm),
9763+ $moduleName = "ElmTest.Test";
9764+ var Basics = Elm.Basics.make(_elm);
9765+ var Color = Elm.Color.make(_elm);
9766+ var ElmTest = ElmTest || {};
9767+ ElmTest.Assertion = Elm.ElmTest.Assertion.make(_elm);
9768+ var Graphics = Graphics || {};
9769+ Graphics.Collage = Elm.Graphics.Collage.make(_elm);
9770+ var Graphics = Graphics || {};
9771+ Graphics.Element = Elm.Graphics.Element.make(_elm);
9772+ var List = Elm.List.make(_elm);
9773+ var Maybe = Elm.Maybe.make(_elm);
9774+ var Native = Native || {};
9775+ Native.Json = Elm.Native.Json.make(_elm);
9776+ var Native = Native || {};
9777+ Native.Ports = Elm.Native.Ports.make(_elm);
9778+ var Signal = Elm.Signal.make(_elm);
9779+ var String = Elm.String.make(_elm);
9780+ var Text = Elm.Text.make(_elm);
9781+ var Time = Elm.Time.make(_elm);
9783+ var TestCase = F2(function (a,
9785+ return {ctor: "TestCase"
9789+ var test = F2(function (name,
9791+ return A2(TestCase,name,a);
9793+ var defaultTest = function (a) {
9794+ return function () {
9795+ var name = function () {
9797+ {case "AssertEqual":
9798+ return _L.append(a._1,
9799+ _L.append(" == ",a._2));
9800+ case "AssertNotEqual":
9801+ return _L.append(a._1,
9802+ _L.append(" /= ",a._2));
9805+ _E.Case($moduleName,
9806+ "between lines 25 and 30");
9808+ return A2(test,name,a);
9811+ var equals = F2(function (a,b) {
9812+ return defaultTest(A2(ElmTest.Assertion.assertEqual,
9816+ _elm.ElmTest.Test.values = {_op: _op
9819+ ,defaultTest: defaultTest
9820+ ,TestCase: TestCase};
9821+ return _elm.ElmTest.Test.values;
9822+};Elm.ElmTest = Elm.ElmTest || {};
9823+Elm.ElmTest.Assertion = Elm.ElmTest.Assertion || {};
9824+Elm.ElmTest.Assertion.make = function (_elm) {
9826+ _elm.ElmTest = _elm.ElmTest || {};
9827+ _elm.ElmTest.Assertion = _elm.ElmTest.Assertion || {};
9828+ if (_elm.ElmTest.Assertion.values)
9829+ return _elm.ElmTest.Assertion.values;
9830+ var _N = Elm.Native,
9831+ _U = _N.Utils.make(_elm),
9832+ _L = _N.List.make(_elm),
9833+ _E = _N.Error.make(_elm),
9834+ $moduleName = "ElmTest.Assertion";
9835+ var Basics = Elm.Basics.make(_elm);
9836+ var Color = Elm.Color.make(_elm);
9837+ var Graphics = Graphics || {};
9838+ Graphics.Collage = Elm.Graphics.Collage.make(_elm);
9839+ var Graphics = Graphics || {};
9840+ Graphics.Element = Elm.Graphics.Element.make(_elm);
9841+ var List = Elm.List.make(_elm);
9842+ var Maybe = Elm.Maybe.make(_elm);
9843+ var Native = Native || {};
9844+ Native.Json = Elm.Native.Json.make(_elm);
9845+ var Native = Native || {};
9846+ Native.Ports = Elm.Native.Ports.make(_elm);
9847+ var Signal = Elm.Signal.make(_elm);
9848+ var String = Elm.String.make(_elm);
9849+ var Text = Elm.Text.make(_elm);
9850+ var Time = Elm.Time.make(_elm);
9852+ var AssertNotEqual = F3(function (a,
9855+ return {ctor: "AssertNotEqual"
9860+ var assertNotEqual = F2(function (a,
9862+ return A3(AssertNotEqual,
9864+ return function () {
9865+ return !_U.eq(a,b);
9871+ var AssertEqual = F3(function (a,
9874+ return {ctor: "AssertEqual"
9879+ var assertEqual = F2(function (a,
9881+ return A3(AssertEqual,
9883+ return function () {
9890+ var assertionList = F2(function (xs,
9892+ return A3(List.zipWith,
9897+ var AssertFalse = function (a) {
9898+ return {ctor: "AssertFalse"
9901+ var AssertTrue = function (a) {
9902+ return {ctor: "AssertTrue"
9905+ var assertT = AssertTrue;
9906+ var assert = function (b) {
9907+ return AssertTrue(function (_v4) {
9908+ return function () {
9913+ _elm.ElmTest.Assertion.values = {_op: _op
9916+ ,assertEqual: assertEqual
9917+ ,assertionList: assertionList
9918+ ,assertNotEqual: assertNotEqual
9919+ ,AssertTrue: AssertTrue
9920+ ,AssertFalse: AssertFalse
9921+ ,AssertEqual: AssertEqual
9922+ ,AssertNotEqual: AssertNotEqual};
9923+ return _elm.ElmTest.Assertion.values;
9924+};Elm.IO = Elm.IO || {};
9925+Elm.IO.IO = Elm.IO.IO || {};
9926+Elm.IO.IO.make = function (_elm) {
9928+ _elm.IO = _elm.IO || {};
9929+ _elm.IO.IO = _elm.IO.IO || {};
9930+ if (_elm.IO.IO.values)
9931+ return _elm.IO.IO.values;
9932+ var _N = Elm.Native,
9933+ _U = _N.Utils.make(_elm),
9934+ _L = _N.List.make(_elm),
9935+ _E = _N.Error.make(_elm),
9936+ $moduleName = "IO.IO";
9937+ var Basics = Elm.Basics.make(_elm);
9938+ var Color = Elm.Color.make(_elm);
9939+ var Graphics = Graphics || {};
9940+ Graphics.Collage = Elm.Graphics.Collage.make(_elm);
9941+ var Graphics = Graphics || {};
9942+ Graphics.Element = Elm.Graphics.Element.make(_elm);
9943+ var List = Elm.List.make(_elm);
9944+ var Maybe = Elm.Maybe.make(_elm);
9945+ var Native = Native || {};
9946+ Native.Json = Elm.Native.Json.make(_elm);
9947+ var Native = Native || {};
9948+ Native.Ports = Elm.Native.Ports.make(_elm);
9949+ var Signal = Elm.Signal.make(_elm);
9950+ var String = Elm.String.make(_elm);
9951+ var Text = Elm.Text.make(_elm);
9952+ var Time = Elm.Time.make(_elm);
9954+ var Impure = function (a) {
9955+ return {ctor: "Impure"
9958+ var Pure = function (a) {
9959+ return {ctor: "Pure",_0: a};
9961+ var Exit = function (a) {
9962+ return {ctor: "Exit",_0: a};
9964+ var GetC = function (a) {
9965+ return {ctor: "GetC",_0: a};
9967+ var PutC = F2(function (a,b) {
9968+ return {ctor: "PutC"
9972+ var mapF = F2(function (f,iof) {
9973+ return function () {
9976+ return Exit(iof._0);
9978+ return GetC(function ($) {
9979+ return f(iof._0($));
9981+ case "PutC": return A2(PutC,
9984+ _E.Case($moduleName,
9985+ "between lines 77 and 80");
9988+ var foldIO = F3(function (pur,
9991+ return function () {
9994+ return impur(A2(mapF,
9995+ A2(foldIO,pur,impur),
9997+ case "Pure": return pur(io._0);}
9998+ _E.Case($moduleName,
9999+ "between lines 84 and 86");
10002+ var bind = F2(function (io,f) {
10003+ return function () {
10006+ return Impure(A2(mapF,
10007+ A2(Basics.flip,bind,f),
10009+ case "Pure": return f(io._0);}
10010+ _E.Case($moduleName,
10011+ "between lines 52 and 54");
10014+ _op[">>="] = bind;
10015+ var seq = F2(function (x,y) {
10016+ return A2(_op[">>="],
10019+ return function () {
10025+ var forever = function (m) {
10026+ return A2(_op[">>="],
10029+ return function () {
10030+ return forever(m);
10035+ var apply = F2(function (iof,
10037+ return A2(_op[">>="],
10040+ return A2(_op[">>="],
10043+ return pure(f(m));
10047+ _op["<*>"] = apply;
10048+ var mapIO = F2(function (f,xs) {
10049+ return A3(List.foldr,
10051+ return F2(function (x,y) {
10052+ return A2(_op[">>"],x,y);
10055+ pure({ctor: "_Tuple0"}),
10058+ var map = F2(function (f,io) {
10059+ return function () {
10062+ return Impure(A2(mapF,
10066+ return Pure(f(io._0));}
10067+ _E.Case($moduleName,
10068+ "between lines 33 and 35");
10071+ var exit = function ($) {
10072+ return Impure(Exit($));
10074+ var getChar = Impure(GetC(Pure));
10075+ var readUntil = function (end) {
10076+ return function () {
10077+ var go = function (s) {
10078+ return A2(_op[">>="],
10082+ end) ? pure(s) : go(A2(String.append,
10084+ A2(String.cons,c,"")));
10090+ var getLine = readUntil(_U.chr("\n"));
10091+ var putChar = function (c) {
10092+ return Impure(A2(PutC,
10094+ Pure({ctor: "_Tuple0"})));
10096+ var putStr = function ($) {
10097+ return mapIO(putChar)(String.toList($));
10099+ var putStrLn = function (s) {
10100+ return A2(_op[">>"],
10102+ putChar(_U.chr("\n")));
10104+ _elm.IO.IO.values = {_op: _op
10109+ ,putStrLn: putStrLn
10110+ ,readUntil: readUntil
10126+ return _elm.IO.IO.values;
10128+// Elm goes there ^
10130+ var stdin = process.stdin;
10131+ var handle = function(request) {
10133+ //console.log("Bleh: %j", request);
10134+ if (!(request.mPut === null)) {
10135+ process.stdout.write(request.mPut);
10136+ } else if (!(request.mExit === null)) {
10137+ process.exit(request.mExit);
10138+ } else if (request.mGet) {
10142+ var handler = function(reqs) {
10143+ for (var i = 0; i < reqs.length; i++) {
10147+ var worker = Elm.worker(Elm.Main
10148+ , {responses: null }
10150+ worker.ports.requests.subscribe(handler);
10153+ stdin.on('data', function(chunk) {
10154+ //console.log('Got' + chunk);
10156+ worker.ports.responses.send(chunk.toString());
10160+ worker.ports.responses.send(null);
10162+} // Close the callback
10164+jsdom.env('<p>bleh</p>', [], callback);