@@ -1,10164 +0,0 @@
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);