Elm-0.10.0.1: data/elm-runtime.js
var Elm = {}; Elm.Native = {}; Elm.Native.Graphics = {};
var ElmRuntime = {}; ElmRuntime.Render = {};
Elm.Native.Basics = {};
Elm.Native.Basics.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Basics = elm.Native.Basics || {};
if (elm.Native.Basics.values) return elm.Native.Basics.values;
var JS = Elm.Native.JavaScript.make(elm);
var Utils = Elm.Native.Utils.make(elm);
function div(a,b) { return (a/b)|0; }
function rem(a,b) { return a % b; }
var mod = Utils.mod;
function abs(x) { return x < 0 ? -x : x; }
function logBase(base,n) { return Math.log(n) / Math.log(base); }
function min(a,b) { return Utils.cmp(a,b) < 0 ? a : b; }
function max(a,b) { return Utils.cmp(a,b) > 0 ? a : b; }
function clamp(lo,hi,n) {
return Utils.cmp(n,lo) < 0 ? lo : Utils.cmp(n,hi) > 0 ? hi : n; }
function xor(a,b) { return a !== b; }
function not(b) { return !b; }
function truncate(n) { return n|0; }
function curry(f,a,b) { return f(Utils.Tuple2(a,b)); }
function uncurry(f,v) { return A2(f,v._0,v._1); }
function fst(t) { return t._0; }
function snd(t) { return t._1; }
var basics = {
div:F2(div),
rem:F2(rem),
mod:mod,
pi:Math.PI,
e:Math.E,
cos:Math.cos,
sin:Math.sin,
tan:Math.tan,
acos:Math.acos,
asin:Math.asin,
atan:Math.atan,
atan2:F2(Math.atan2),
sqrt:Math.sqrt,
abs:abs,
logBase:F2(logBase),
min:F2(min),
max:F2(max),
clamp:F3(clamp),
compare:Utils.compare,
xor:F2(xor),
not:not,
truncate:truncate,
ceiling:Math.ceil,
floor:Math.floor,
round:Math.round,
toFloat:function(x) { return x; },
curry:F3(curry),
uncurry:F2(uncurry),
fst:fst,
snd:snd
};
return elm.Native.Basics.values = basics;
};
Elm.Native.Char = {};
Elm.Native.Char.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Char = elm.Native.Char || {};
if (elm.Native.Char.values) return elm.Native.Char.values;
function isBetween(lo,hi) { return function(chr) {
var c = chr.charCodeAt(0);
return lo <= c && c <= hi;
};
}
var isDigit = isBetween('0'.charCodeAt(0),'9'.charCodeAt(0));
var chk1 = isBetween('a'.charCodeAt(0),'f'.charCodeAt(0));
var chk2 = isBetween('A'.charCodeAt(0),'F'.charCodeAt(0));
return elm.Native.Char.values = {
fromCode : function(c) { return String.fromCharCode(c); },
toCode : function(c) { return c.toUpperCase().charCodeAt(0); },
toUpper : function(c) { return c.toUpperCase(); },
toLower : function(c) { return c.toLowerCase(); },
toLocaleUpper : function(c) { return c.toLocaleUpperCase(); },
toLocaleLower : function(c) { return c.toLocaleLowerCase(); },
isLower : isBetween('a'.charCodeAt(0),'z'.charCodeAt(0)),
isUpper : isBetween('A'.charCodeAt(0),'Z'.charCodeAt(0)),
isDigit : isDigit,
isOctDigit : isBetween('0'.charCodeAt(0),'7'.charCodeAt(0)),
isHexDigit : function(c) { return isDigit(c) || chk1(c) || chk2(c); }
};
};
Elm.Native.Color = {};
Elm.Native.Color.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Color = elm.Native.Color || {};
if (elm.Native.Color.values) return elm.Native.Color.values;
var Utils = Elm.Native.Utils.make(elm);
function complement(rgb) {
var hsv = toHSV(rgb);
hsv.hue = (hsv.hue + 180) % 360;
return toRGB(hsv);
}
function hsva(h,s,v,a) {
var degree = A2(Utils.mod, h * 180 / Math.PI, 360);
var clr = toRGB({hue:degree, saturation:s, value:v});
clr._3 = a;
return clr;
}
function hsv(h,s,v) {
var degree = A2(Utils.mod, h * 180 / Math.PI, 360);
return toRGB({hue:degree, saturation:s, value:v});
}
function toHSV(rgb) {
var hsv = {};
var r = rgb._0 / 255.0, g = rgb._1 / 255.0, b = rgb._2 / 255.0;
var M = Math.max(r,g,b);
var m = Math.min(r,g,b);
var c = M - m;
var h = 0;
if (c === 0) { h = 0; }
else if (M === r) { h = ((g - b) / c) % 6; }
else if (M === g) { h = ((b - r) / c) + 2; }
else if (M === b) { h = ((r - g) / c) + 4; }
h *= 60;
return { value : M, hue : h, saturation : (M === 0 ? 0 : c / M) };
}
function between(lo,hi,x) { return lo <= x && x < hi; }
function norm(n) { return Math.round(n*255); }
function toRGB(hsv) {
var c = hsv.value * hsv.saturation;
var hue = hsv.hue / 60;
var x = c * (1 - Math.abs((hue % 2) - 1));
var r = 0, g = 0, b = 0;
if (between(0,1,hue)) { r = c; g = x; b = 0; }
else if (between(1,2,hue)) { r = x; g = c; b = 0; }
else if (between(2,3,hue)) { r = 0; g = c; b = x; }
else if (between(3,4,hue)) { r = 0; g = x; b = c; }
else if (between(4,5,hue)) { r = x; g = 0; b = c; }
else if (between(5,6,hue)) { r = c; g = 0; b = x; }
var m = hsv.value - c;
return { ctor:"Color", _0:norm(r+m), _1:norm(g+m), _2:norm(b+m), _3:1 };
}
return elm.Native.Color.values = {
hsva:F4(hsva),
hsv:F3(hsv),
complement:complement
};
};Elm.Native.Date = {};
Elm.Native.Date.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Date = elm.Native.Date || {};
if (elm.Native.Date.values) return elm.Native.Date.values;
var JS = Elm.JavaScript.make(elm);
var Maybe = Elm.Maybe.make(elm);
function dateNow() { return new window.Date; }
function readDate(str) {
var d = new window.Date(JS.fromString(str));
if (isNaN(d.getTime())) return Maybe.Nothing;
return Maybe.Just(d);
}
var dayTable = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
var monthTable = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
return elm.Native.Date.values = {
read : readDate,
year : function(d) { return d.getFullYear(); },
month : function(d) { return { ctor:monthTable[d.getMonth()] }; },
day : function(d) { return d.getDate(); },
hour : function(d) { return d.getHours(); },
minute : function(d) { return d.getMinutes(); },
second : function(d) { return d.getSeconds(); },
toTime : function(d) { return d.getTime(); },
dayOfWeek : function(d) { return { ctor:dayTable[d.getDay()] }; }
};
};
Elm.Native.Error = {};
Elm.Native.Error.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Error = elm.Native.Error || {};
if (elm.Native.Error.values) return elm.Native.Error.values;
var fromString = Elm.Native.JavaScript.make(elm).fromString;
function indent(lines) {
var msg = '';
for (var i = 0; i < lines.length; ++i) {
msg += '<br/> ' + lines[i];
}
return msg;
}
function Case(moduleName, span) {
var msg = indent(['Non-exhaustive pattern match in case-expression.',
'Make sure your patterns cover every case!']);
throw new Error('Runtime error in module ' + moduleName + ' (' + span + '):' + msg);
}
function If(moduleName, span) {
var msg = indent(['Non-exhaustive pattern match in multi-way-if expression.',
'It is best to use \'otherwise\' as the last branch of multi-way-if.']);
throw new Error('Runtime error in module ' + moduleName + ' (' + span + '):' + msg);
}
function raise(str) { throw new Error(fromString(str)); }
return elm.Native.Error.values = { Case: Case, If: If, raise: raise };
};
function F2(fun) {
function wrapper(a) { return function(b) { return fun(a,b) } }
wrapper.arity = 2;
wrapper.func = fun;
return wrapper;
}
function F3(fun) {
function wrapper(a) {
return function(b) { return function(c) { return fun(a,b,c) }}
}
wrapper.arity = 3;
wrapper.func = fun;
return wrapper;
}
function F4(fun) {
function wrapper(a) { return function(b) { return function(c) {
return function(d) { return fun(a,b,c,d) }}}
}
wrapper.arity = 4;
wrapper.func = fun;
return wrapper;
}
function F5(fun) {
function wrapper(a) { return function(b) { return function(c) {
return function(d) { return function(e) { return fun(a,b,c,d,e) }}}}
}
wrapper.arity = 5;
wrapper.func = fun;
return wrapper;
}
function F6(fun) {
function wrapper(a) { return function(b) { return function(c) {
return function(d) { return function(e) { return function(f) {
return fun(a,b,c,d,e,f) }}}}}
}
wrapper.arity = 6;
wrapper.func = fun;
return wrapper;
}
function F7(fun) {
function wrapper(a) { return function(b) { return function(c) {
return function(d) { return function(e) { return function(f) {
return function(g) { return fun(a,b,c,d,e,f,g) }}}}}}
}
wrapper.arity = 7;
wrapper.func = fun;
return wrapper;
}
function F8(fun) {
function wrapper(a) { return function(b) { return function(c) {
return function(d) { return function(e) { return function(f) {
return function(g) { return function(h) {return fun(a,b,c,d,e,f,g,h)}}}}}}}
}
wrapper.arity = 8;
wrapper.func = fun;
return wrapper;
}
function F9(fun) {
function wrapper(a) { return function(b) { return function(c) {
return function(d) { return function(e) { return function(f) {
return function(g) { return function(h) { return function(i) {
return fun(a,b,c,d,e,f,g,h,i) }}}}}}}}
}
wrapper.arity = 9;
wrapper.func = fun;
return wrapper;
}
function A2(fun,a,b) {
return fun.arity === 2 ? fun.func(a,b) : fun(a)(b);
}
function A3(fun,a,b,c) {
return fun.arity === 3 ? fun.func(a,b,c) : fun(a)(b)(c);
}
function A4(fun,a,b,c,d) {
return fun.arity === 4 ? fun.func(a,b,c,d) : fun(a)(b)(c)(d);
}
function A5(fun,a,b,c,d,e) {
return fun.arity === 5 ? fun.func(a,b,c,d,e) : fun(a)(b)(c)(d)(e);
}
function A6(fun,a,b,c,d,e,f) {
return fun.arity === 6 ? fun.func(a,b,c,d,e,f) : fun(a)(b)(c)(d)(e)(f);
}
function A7(fun,a,b,c,d,e,f,g) {
return fun.arity === 7 ? fun.func(a,b,c,d,e,f,g) : fun(a)(b)(c)(d)(e)(f)(g);
}
function A8(fun,a,b,c,d,e,f,g,h) {
return fun.arity === 8 ? fun.func(a,b,c,d,e,f,g,h) : fun(a)(b)(c)(d)(e)(f)(g)(h);
}
function A9(fun,a,b,c,d,e,f,g,h,i) {
return fun.arity === 9 ? fun.func(a,b,c,d,e,f,g,h,i)
: fun(a)(b)(c)(d)(e)(f)(g)(h)(i);
}
Elm.Native.JavaScript = {};
Elm.Native.JavaScript.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.JavaScript = elm.Native.JavaScript || {};
if (elm.Native.JavaScript.values) return elm.Native.JavaScript.values;
var List = Elm.Native.List.make(elm);
var Render = ElmRuntime.use(ElmRuntime.Render.Element);
function fromJS(v) {
var type = typeof v;
if (type === 'number' ) return v;
if (type === 'boolean') return v;
if (type === 'string' ) return v;
if (v instanceof Array) {
var arr = [];
var len = v.length;
for (var i = 0; i < len; ++i) {
var x = fromJS(v[i]);
if (x !== null) arr.push(x);
}
return List.fromArray(arr);
}
if (type === 'object') {
var rec = { _:{} };
for (var f in v) {
var x = fromJS(v[f]);
if (x !== null) rec[f] = x;
}
return rec;
}
return null;
}
function toJS(v) {
var type = typeof v;
if (type === 'number' || type === 'boolean') return v;
if (type === 'object' && '_' in v) {
var obj = {};
for (var k in v) {
var x = toJS(v[k]);
if (x !== null) obj[k] = x;
}
return obj;
}
if (type === 'object' && (v.ctor === '::' || v.ctor === '[]')) {
var array = List.toArray(v);
for (var i = array.length; i--; ) {
array[i] = toJS(array[i]);
}
return array;
}
return null;
}
function fromRecord(r) {
if (typeof r === 'object' && '_' in r) {
return toJS(r);
}
throw new Error("'fromRecord' must be called on a record.");
}
function id(n) { return n; }
function toElement(w,h,domNode) {
return A3( newElement, w, h, {
ctor: 'Custom',
type: 'DomNode',
render: function(node) { return node; },
update: function(node,oldNode,newNode) {
if (node === newNode) return;
node.parentNode.replaceChild(newNode, node);
},
model: domNode
});
}
function fromElement(element) {
return Render.render(element);
}
return elm.Native.JavaScript.values = {
toInt : function(n) { return n|0; },
toFloat : function(n) { return +n; },
toBool : id,
toString : id,
toList : List.fromArray,
fromString : id,
fromList : List.toArray,
fromInt : id,
fromFloat : id,
fromBool : id,
toElement : toElement,
fromElement : fromElement,
toRecord : fromJS,
fromRecord : fromRecord
};
};
Elm.Native.Json = {};
Elm.Native.Json.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Json = elm.Native.Json || {};
if (elm.Native.Json.values) return elm.Native.Json.values;
var Maybe = Elm.Maybe.make(elm);
var Dict = Elm.Dict.make(elm);
var List = Elm.List.make(elm);
var JS = Elm.JavaScript.make(elm);
var Utils = Elm.Native.Utils.make(elm);
function fromValue(v) {
switch (v.ctor) {
case 'Null' : return null;
case 'String' : return JS.fromString(v._0);
case 'Object' :
var obj = {};
var array = JS.fromList(Dict.toList(v._0));
for (var i = array.length; i--; ) {
obj[JS.fromString(array[i]._0)] = fromValue(array[i]._1);
}
return obj;
case 'Array' :
var array = JS.fromList(v._0);
for (var i = array.length; i--; ) {
array[i] = fromValue(array[i]);
}
return array;
default :
return v._0;
}
}
function toPrettyJSString(sep, obj) {
return JSON.stringify(fromValue(obj), null, JS.fromString(sep));
}
function toValue(v) {
switch (typeof v) {
case 'string' : return { ctor:"String", _0: JS.toString(v) };
case 'number' : return { ctor:"Number", _0: JS.toFloat(v) };
case 'boolean': return { ctor:"Bool" , _0: JS.toBool(v) };
case 'object' :
if (v === null) return { ctor:"Null" };
if (v instanceof Array) {
for (var i = v.length; i--; ) { v[i] = toValue(v[i]); }
return { ctor:"Array", _0: JS.toList(v) };
}
var array = [];
for (var k in v) array.push(Utils.Tuple2(JS.toString(k), toValue(v[k])));
return { ctor:"Object", _0: Dict.fromList(JS.toList(array)) };
}
}
function fromJSString(str) {
try {
return Maybe.Just(toValue(JSON.parse(str)));
} catch (e) {
return Maybe.Nothing;
}
}
return elm.Native.Json.values = {
toJSString : F2(toPrettyJSString),
fromJSString : fromJSString,
toJSObject : fromValue,
fromJSObject : toValue
};
};
Elm.Native.List = {};
Elm.Native.List.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.List = elm.Native.List || {};
if (elm.Native.List.values) return elm.Native.List.values;
if ('values' in Elm.Native.List)
return elm.Native.List.values = Elm.Native.List.values;
var Utils = Elm.Native.Utils.make(elm);
// TODO: Improve Nil handling
// We can change places like: if (xs.ctor === '[]') ... to if (xs === Nil) ...
// but only if we're confident Nil can only be defined once.
// Currently (27Mar2013) each module can have different instantiations, so multiple Nil objects can exist
// (and if they're used interchangeably then direct object comparison fails where ctor doesn't).
// So, this can only be fixed when modules initialisation is also fixed.
// The performance overhead of the .ctor calls is 5-10% according to jsperf (depending on fn + list size)
// (on firefox 19)
var Nil = { ctor:'[]' };
// using freeze for every cons would be nice but is a huge (9x on firefox 19)
// performance penalty
function Cons(hd,tl) { return { ctor:"::", _0:hd, _1:tl }; }
function throwError(f) {
throw new Error("Function '" + f + "' expects a non-empty list!");
}
function toArray(xs) {
var out = [];
while (xs.ctor !== '[]') {
out.push(xs._0);
xs = xs._1;
}
return out;
}
function fromArray(arr) {
var out = Nil;
for (var i = arr.length; i--; ) {
out = Cons(arr[i], out);
}
return out;
}
function range(lo,hi) {
var lst = Nil;
if (lo <= hi) {
do { lst = Cons(hi,lst) } while (hi-->lo);
}
return lst
}
function append(xs,ys) {
if (xs.isText) return Utils.txt(xs.concat(ys));
if (typeof xs === "string") return xs.concat(ys);
if (xs.ctor === '[]') { return ys; }
var root = Cons(xs._0, Nil);
var curr = root;
xs = xs._1;
while (xs.ctor !== '[]') {
curr._1 = Cons(xs._0, Nil);
xs = xs._1;
curr = curr._1;
}
curr._1 = ys;
return root;
}
function head(v) { return v.ctor === '[]' ? throwError('head') : v._0; }
function tail(v) { return v.ctor === '[]' ? throwError('tail') : v._1; }
function last(xs) {
if (xs.ctor === '[]') { throwError('last'); }
var out = xs._0;
while (xs.ctor !== '[]') {
out = xs._0;
xs = xs._1;
}
return out;
}
function map(f, xs) {
var arr = [];
while (xs.ctor !== '[]') {
arr.push(f(xs._0));
xs = xs._1;
}
return fromArray(arr);
}
// f defined similarly for both foldl and foldr (NB: different from Haskell)
// ie, foldl : (a -> b -> b) -> b -> [a] -> b
function foldl(f, b, xs) {
var acc = b;
while (xs.ctor !== '[]') {
acc = A2(f, xs._0, acc);
xs = xs._1;
}
return acc;
}
function foldr(f, b, xs) {
var arr = toArray(xs);
var acc = b;
for (var i = arr.length; i--; ) {
acc = A2(f, arr[i], acc);
}
return acc;
}
function foldl1(f, xs) {
return xs.ctor === '[]' ? throwError('foldl1') : foldl(f, xs._0, xs._1);
}
function foldr1(f, xs) {
if (xs.ctor === '[]') { throwError('foldr1'); }
var arr = toArray(xs);
var acc = arr.pop();
for (var i = arr.length; i--; ) {
acc = A2(f, arr[i], acc);
}
return acc;
}
function scanl(f, b, xs) {
var arr = toArray(xs);
arr.unshift(b);
var len = arr.length;
for (var i = 1; i < len; ++i) {
arr[i] = A2(f, arr[i], arr[i-1]);
}
return fromArray(arr);
}
function scanl1(f, xs) {
return xs.ctor === '[]' ? throwError('scanl1') : scanl(f, xs._0, xs._1);
}
function filter(pred, xs) {
var arr = [];
while (xs.ctor !== '[]') {
if (pred(xs._0)) { arr.push(xs._0); }
xs = xs._1;
}
return fromArray(arr);
}
function length(xs) {
var out = 0;
while (xs.ctor !== '[]') {
out += 1;
xs = xs._1;
}
return out;
}
function member(x, xs) {
while (xs.ctor !== '[]') {
if (Utils.eq(x,xs._0)) return true;
xs = xs._1;
}
return false;
}
function reverse(xs) { return fromArray(toArray(xs).reverse()); }
function concat(xss) {
if (xss.ctor === '[]') return xss;
var arr = toArray(xss);
var xs = arr[arr.length-1];
for (var i = arr.length-1; i--; ) {
xs = append(arr[i], xs);
}
return xs;
}
function all(pred, xs) {
while (xs.ctor !== '[]') {
if (!pred(xs._0)) return false;
xs = xs._1;
}
return true;
}
function any(pred, xs) {
while (xs.ctor !== '[]') {
if (pred(xs._0)) return true;
xs = xs._1;
}
return false;
}
function zipWith(f, xs, ys) {
var arr = [];
while (xs.ctor !== '[]' && ys.ctor !== '[]') {
arr.push(A2(f, xs._0, ys._0));
xs = xs._1;
ys = ys._1;
}
return fromArray(arr);
}
function zip(xs, ys) {
var arr = [];
while (xs.ctor !== '[]' && ys.ctor !== '[]') {
arr.push(Utils.Tuple2(xs._0, ys._0));
xs = xs._1;
ys = ys._1;
}
return fromArray(arr);
}
function sort(xs) {
function cmp(a,b) {
var ord = Utils.compare(a,b).ctor;
return ord=== 'EQ' ? 0 : ord === 'LT' ? -1 : 1;
}
return fromArray(toArray(xs).sort(cmp));
}
function nth(xs, n) {
return toArray(xs)[n];
}
function take(n, xs) {
var arr = [];
while (xs.ctor !== '[]' && n > 0) {
arr.push(xs._0);
xs = xs._1;
--n;
}
return fromArray(arr);
}
function drop(n, xs) {
while (xs.ctor !== '[]' && n > 0) {
xs = xs._1;
--n;
}
return xs;
}
function repeat(n, x) {
var arr = [];
var pattern = [x];
while (n > 0) {
if (n & 1) arr = arr.concat(pattern);
n >>= 1, pattern = pattern.concat(pattern);
}
return fromArray(arr);
}
function join(sep, xss) {
if (sep.isText) return Utils.txt(toArray(xss).join(sep));
if (typeof sep === 'string') return toArray(xss).join(sep);
if (xss.ctor === '[]') return Nil;
var s = toArray(sep);
var out = toArray(xss._0);
xss = xss._1;
while (xss.ctor !== '[]') {
out = out.concat(s, toArray(xss._0));
xss = xss._1;
}
return fromArray(out);
}
Elm.Native.List.values = {
Nil:Nil,
Cons:Cons,
cons:F2(Cons),
toArray:toArray,
fromArray:fromArray,
range:range,
append:append,
head:head,
tail:tail,
last:last,
map:F2(map),
foldl:F3(foldl),
foldr:F3(foldr),
foldl1:F2(foldl1),
foldr1:F2(foldr1),
scanl:F3(scanl),
scanl1:F2(scanl1),
filter:F2(filter),
length:length,
member:F2(member),
reverse:reverse,
concat:concat,
all:F2(all),
any:F2(any),
zipWith:F3(zipWith),
zip:F2(zip),
sort:sort,
nth:F2(nth),
take:F2(take),
drop:F2(drop),
repeat:F2(repeat),
join:F2(join)
};
return elm.Native.List.values = Elm.Native.List.values;
};
Elm.Native.Prelude = {};
Elm.Native.Prelude.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Prelude = elm.Native.Prelude || {};
if (elm.Native.Prelude.values) return elm.Native.Prelude.values;
var JS = Elm.Native.JavaScript.make(elm);
var Maybe = Elm.Maybe.make(elm);
var Char = Elm.Char.make(elm);
function readInt(str) {
var s = JS.fromString(str);
var len = s.length;
if (len === 0) { return Maybe.Nothing; }
var start = 0;
if (s[0] == '-') {
if (len === 1) { return Maybe.Nothing; }
start = 1;
}
for (var i = start; i < len; ++i) {
if (!Char.isDigit(s[i])) { return Maybe.Nothing; }
}
return Maybe.Just(parseInt(s, 10));
}
function readFloat(str) {
var s = JS.fromString(str);
var len = s.length;
if (len === 0) { return Maybe.Nothing; }
var start = 0;
if (s[0] == '-') {
if (len === 1) { return Maybe.Nothing; }
start = 1;
}
var dotCount = 0;
for (var i = start; i < len; ++i) {
if (Char.isDigit(s[i])) { continue; }
if (s[i] === '.') {
dotCount += 1;
if (dotCount <= 1) { continue; }
}
return Maybe.Nothing;
}
return Maybe.Just(parseFloat(s));
}
return elm.Native.Prelude.values = {
readInt:readInt,
readFloat:readFloat
};
};
Elm.Native.Show = {};
Elm.Native.Show.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Show = elm.Native.Show || {};
if (elm.Native.Show.values) return elm.Native.Show.values;
var NList = Elm.Native.List.make(elm);
var List = Elm.List.make(elm);
var Maybe = Elm.Maybe.make(elm);
var JS = Elm.JavaScript.make(elm);
var Dict = Elm.Dict.make(elm);
var Json = Elm.Json.make(elm);
var Tuple2 = Elm.Native.Utils.make(elm).Tuple2;
var toString = function(v) {
var type = typeof v;
if (type === "function") {
var name = v.func ? v.func.name : v.name;
return '<function' + (name === '' ? '' : ': ') + name + '>';
} else if (type === "boolean") {
return v ? "True" : "False";
} else if (type === "number") {
return v+"";
} else if ((v instanceof String) && v.isChar) {
return "'" + addSlashes(v) + "'";
} else if (type === "string") {
return '"' + addSlashes(v) + '"';
} else if (type === "object" && '_' in v) {
var output = [];
for (var k in v._) {
for (var i = v._[k].length; i--; ) {
output.push(k + " = " + toString(v._[k][i]));
}
}
for (var k in v) {
if (k === '_') continue;
output.push(k + " = " + toString(v[k]));
}
if (output.length === 0) return "{}";
return "{ " + output.join(", ") + " }";
} else if (type === "object" && 'ctor' in v) {
if (v.ctor.substring(0,6) === "_Tuple") {
var output = [];
for (var k in v) {
if (k === 'ctor') continue;
output.push(toString(v[k]));
}
return "(" + output.join(",") + ")";
} else if (v.ctor === "::") {
var output = '[' + toString(v._0);
v = v._1;
while (v.ctor === "::") {
output += "," + toString(v._0);
v = v._1;
}
return output + ']';
} else if (v.ctor === "[]") {
return "[]";
} else if (v.ctor === "RBNode" || v.ctor === "RBEmpty") {
var cons = F3(function(k,v,acc){return NList.Cons(Tuple2(k,v),acc)});
var list = A3(Dict.foldr, cons, NList.Nil, v);
var name = "Dict";
if (list.ctor === "::" && list._0._1.ctor === "_Tuple0") {
name = "Set";
list = A2(List.map, function(x){return x._0}, list);
}
return name + ".fromList " + toString(list);
} else {
var output = "";
for (var i in v) {
if (i === 'ctor') continue;
var str = toString(v[i]);
var parenless = str[0] === '{' || str[0] === '<' || str.indexOf(' ') < 0;
output += ' ' + (parenless ? str : '(' + str + ')');
}
return v.ctor + output;
}
}
if (type === 'object' && 'recv' in v) return '<signal>';
return "<internal structure>";
};
function addSlashes(str) {
return str.replace(/\\/g, '\\\\')
.replace(/\n/g, '\\n')
.replace(/\t/g, '\\t')
.replace(/\r/g, '\\r')
.replace(/\v/g, '\\v')
.replace(/\0/g, '\\0')
.replace(/\'/g, "\\'")
.replace(/\"/g, '\\"');
}
return elm.Native.Show.values = { show:toString };
};
Elm.Native.String = {};
Elm.Native.String.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.String = elm.Native.String || {};
if (elm.Native.String.values) return elm.Native.String.values;
if ('values' in Elm.Native.String)
return elm.Native.String.values = Elm.Native.String.values;
var Char = Elm.Char.make(elm);
var Maybe = Elm.Maybe.make(elm);
var JS = Elm.JavaScript.make(elm);
var Utils = Elm.Native.Utils.make(elm);
function isEmpty(str) {
return str.length === 0;
}
function cons(chr,str) {
return chr + str;
}
function uncons(str) {
var hd;
return (hd = str[0]) ? Maybe.Just(Utils.Tuple2(Utils.chr(hd), str.slice(1)))
: Maybe.Nothing;
}
function append(a,b) {
return a + b;
}
function concat(strs) {
return JS.fromList(strs).join('');
}
function length(str) {
return str.length;
}
function map(f,str) {
var out = str.split('');
for (var i = out.length; i--; ) {
out[i] = f(Utils.chr(out[i]));
}
return out.join('');
}
function filter(pred,str) {
return str.split('').map(Utils.chr).filter(pred).join('');
}
function reverse(str) {
return str.split('').reverse().join('');
}
function foldl(f,b,str) {
var len = str.length;
for (var i = 0; i < len; ++i) {
b = A2(f, Utils.chr(str[i]), b);
}
return b;
}
function foldr(f,b,str) {
for (var i = str.length; i--; ) {
b = A2(f, Utils.chr(str[i]), b);
}
return b;
}
function split(sep, str) {
return JS.toList(str.split(sep));
}
function join(sep, strs) {
return JS.fromList(strs).join(sep);
}
function repeat(n, str) {
var result = '';
while (n > 0) {
if (n & 1) result += str;
n >>= 1, str += str;
}
return result;
}
function sub(start, end, str) {
return str.slice(start,end);
}
function left(n, str) {
return n < 1 ? "" : str.slice(0,n);
}
function right(n, str) {
return n < 1 ? "" : str.slice(-n);
}
function dropLeft(n, str) {
return n < 1 ? str : str.slice(n);
}
function dropRight(n, str) {
return n < 1 ? str : str.slice(0,-n);
}
function pad(n,chr,str) {
var half = (n - str.length) / 2;
return repeat(Math.ceil(half),chr) + str + repeat(half|0,chr);
}
function padRight(n,chr,str) {
return str + repeat(n - str.length, chr);
}
function padLeft(n,chr,str) {
return repeat(n - str.length, chr) + str;
}
function trim(str) {
return str.trim();
}
function trimLeft(str) {
return str.trimLeft();
}
function trimRight(str) {
return str.trimRight();
}
function words(str) {
return JS.toList(str.split(/\s+/g));
}
function lines(str) {
return JS.toList(str.split(/\r\n|\r|\n/g));
}
function toUpper(str) {
return str.toUpperCase();
}
function toLower(str) {
return str.toLowerCase();
}
function any(pred, str) {
for (var i = str.length; i--; ) {
if (pred(Utils.chr(str[i]))) return true;
}
return false;
}
function all(pred, str) {
for (var i = str.length; i--; ) {
if (!pred(Utils.chr(str[i]))) return false;
}
return true;
}
function contains(sub, str) {
return str.indexOf(sub) > -1;
}
function startsWith(sub, str) {
return str.indexOf(sub) === 0;
}
function endsWith(sub, str) {
return str.lastIndexOf(sub) === str.length - sub.length;
}
function indexes(sub, str) {
var subLen = sub.length;
var i = 0;
var is = [];
while ((i = str.indexOf(sub, i)) > -1) {
is.push(i);
i = i + subLen;
}
return JS.toList(is);
}
function toInt(s) {
var len = s.length;
if (len === 0) { return Maybe.Nothing; }
var start = 0;
if (s[0] == '-') {
if (len === 1) { return Maybe.Nothing; }
start = 1;
}
for (var i = start; i < len; ++i) {
if (!Char.isDigit(s[i])) { return Maybe.Nothing; }
}
return Maybe.Just(parseInt(s, 10));
}
function toFloat(s) {
var len = s.length;
if (len === 0) { return Maybe.Nothing; }
var start = 0;
if (s[0] == '-') {
if (len === 1) { return Maybe.Nothing; }
start = 1;
}
var dotCount = 0;
for (var i = start; i < len; ++i) {
if (Char.isDigit(s[i])) { continue; }
if (s[i] === '.') {
dotCount += 1;
if (dotCount <= 1) { continue; }
}
return Maybe.Nothing;
}
return Maybe.Just(parseFloat(s));
}
function toList(str) {
return JS.toList(str.split('').map(Utils.chr));
}
function fromList(chars) {
return JS.fromList(chars).join('');
}
return Elm.Native.String.values = {
isEmpty: isEmpty,
cons: F2(cons),
uncons: uncons,
append: F2(append),
concat: concat,
length: length,
map: F2(map),
filter: F2(filter),
reverse: reverse,
foldl: F3(foldl),
foldr: F3(foldr),
split: F2(split),
join: F2(join),
repeat: F2(repeat),
sub: F3(sub),
left: F2(left),
right: F2(right),
dropLeft: F2(dropLeft),
dropRight: F2(dropRight),
pad: F3(pad),
padLeft: F3(padLeft),
padRight: F3(padRight),
trim: trim,
trimLeft: trimLeft,
trimRight: trimRight,
words: words,
lines: lines,
toUpper: toUpper,
toLower: toLower,
any: F2(any),
all: F2(all),
contains: F2(contains),
startsWith: F2(startsWith),
endsWith: F2(endsWith),
indexes: F2(indexes),
toInt: toInt,
toFloat: toFloat,
toList: toList,
fromList: fromList,
};
};Elm.Native.Text = {};
Elm.Native.Text.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Text = elm.Native.Text || {};
if (elm.Native.Text.values) return elm.Native.Text.values;
var JS = Elm.JavaScript.make(elm);
var Utils = Elm.Native.Utils.make(elm);
var Color = Elm.Native.Color.make(elm);
var Element = Elm.Graphics.Element.make(elm);
var show = Elm.Native.Show.make(elm).show;
function makeSpaces(s) {
if (s.length == 0) { return s; }
var arr = s.split('');
if (arr[0] == ' ') { arr[0] = " " }
for (var i = arr.length; --i; ) {
if (arr[i][0] == ' ' && arr[i-1] == ' ') {
arr[i-1] = arr[i-1] + arr[i];
arr[i] = '';
}
}
for (var i = arr.length; i--; ) {
if (arr[i].length > 1 && arr[i][0] == ' ') {
var spaces = arr[i].split('');
for (var j = spaces.length - 2; j >= 0; j -= 2) {
spaces[j] = ' ';
}
arr[i] = spaces.join('');
}
}
arr = arr.join('');
if (arr[arr.length-1] === " ") {
return arr.slice(0,-1) + ' ';
}
return arr;
}
function properEscape(str) {
if (str.length == 0) return str;
str = str //.replace(/&/g, "&")
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/\n/g, "<br/>");
var arr = str.split('<br/>');
for (var i = arr.length; i--; ) {
arr[i] = makeSpaces(arr[i]);
}
return arr.join('<br/>');
}
function toText(str) { return Utils.txt(properEscape(JS.fromString(str))); }
function addTag(tag) {
return function(text) {
return Utils.txt('<' + tag + '>' + text + '</' + tag + '>');
}
}
function addStyle(style, value, text) {
return Utils.txt("<span style='" + style + ":" + value + "'>" + text + "</span>");
}
function typeface(name, text) {
return addStyle('font-family', JS.fromString(name), text);
}
function monospace(text) {
return addStyle('font-family', 'monospace', text);
}
function size(px, text) { return addStyle('font-size', px + 'px', text) }
var header = addTag('h1');
function height(h, text) { return addStyle('font-size', h+'px', text) }
function italic(text) { return addStyle('font-style', 'italic', text) }
var bold = addTag('b');
function extract(c) {
if (c._3 === 1) { return 'rgb(' + c._0 + ', ' + c._1 + ', ' + c._2 + ')'; }
return 'rgba(' + c._0 + ', ' + c._1 + ', ' + c._2 + ', ' + c._3 + ')';
}
function color(c, text) {
return addStyle('color', extract(c), text);
}
function underline(text) { return addStyle('text-decoration', 'underline', text) }
function overline(text) { return addStyle('text-decoration', 'overline', text) }
function strikeThrough(text) {
return addStyle('text-decoration', 'line-through', text);
}
function link(href, text) {
return Utils.txt("<a href='" + toText(href) + "'>" + text + "</a>");
}
function position(pos) {
return function(text) {
var e = {ctor:'RawHtml',
_0: '<div style="padding:0;margin:0;text-align:' +
pos + '">' + text + '</div>'
};
var p = A2(Utils.htmlHeight, 0, text);
return A3(Element.newElement, p._0, p._1, e);
}
}
function asText(v) {
return position('left')(monospace(toText(show(v))));
}
function plainText(v) {
return position('left')(toText(v));
}
return elm.Native.Text.values = {
toText: toText,
header : header,
height : F2(height),
italic : italic,
bold : bold,
underline : underline,
overline : overline,
strikeThrough : strikeThrough,
monospace : monospace,
typeface : F2(typeface),
color : F2(color),
link : F2(link),
justified : position('justify'),
centered : position('center'),
righted : position('right'),
text : position('left'),
plainText : plainText,
asText : asText
};
};Elm.Native.Transform2D = {};
Elm.Native.Transform2D.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Transform2D = elm.Native.Transform2D || {};
if (elm.Native.Transform2D.values) return elm.Native.Transform2D.values;
var A;
if (typeof Float32Array === 'undefined') {
A = function(arr) {
this.length = arr.length;
this[0] = arr[0];
this[1] = arr[1];
this[2] = arr[2];
this[3] = arr[3];
this[4] = arr[4];
this[5] = arr[5];
};
} else {
A = Float32Array;
}
// layout of matrix in an array is
//
// | m11 m12 dx |
// | m21 m22 dy |
// | 0 0 1 |
//
// new A([ m11, m12, dx, m21, m22, dy ])
var identity = new A([1,0,0,0,1,0]);
function matrix(m11, m12, m21, m22, dx, dy) {
return new A([m11, m12, dx, m21, m22, dy]);
}
function rotation(t) {
var c = Math.cos(t);
var s = Math.sin(t);
return new A([c, -s, 0, s, c, 0]);
}
function rotate(t,m) {
var c = Math.cos(t);
var s = Math.sin(t);
var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];
return new A([m11*c + m12*s, -m11*s + m12*c, m[2],
m21*c + m22*s, -m21*s + m22*c, m[5]]);
}
/*
function move(xy,m) {
var x = xy._0;
var y = xy._1;
var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];
return new A([m11, m12, m11*x + m12*y + m[2],
m21, m22, m21*x + m22*y + m[5]]);
}
function scale(s,m) { return new A([m[0]*s, m[1]*s, m[2], m[3]*s, m[4]*s, m[5]]); }
function scaleX(x,m) { return new A([m[0]*x, m[1], m[2], m[3]*x, m[4], m[5]]); }
function scaleY(y,m) { return new A([m[0], m[1]*y, m[2], m[3], m[4]*y, m[5]]); }
function reflectX(m) { return new A([-m[0], m[1], m[2], -m[3], m[4], m[5]]); }
function reflectY(m) { return new A([m[0], -m[1], m[2], m[3], -m[4], m[5]]); }
function transform(m11, m21, m12, m22, mdx, mdy, n) {
var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];
return new A([m11*n11 + m12*n21,
m11*n12 + m12*n22,
m11*ndx + m12*ndy + mdx,
m21*n11 + m22*n21,
m21*n12 + m22*n22,
m21*ndx + m22*ndy + mdy]);
}
*/
function multiply(m, n) {
var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4], mdx = m[2], mdy = m[5];
var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];
return new A([m11*n11 + m12*n21,
m11*n12 + m12*n22,
m11*ndx + m12*ndy + mdx,
m21*n11 + m22*n21,
m21*n12 + m22*n22,
m21*ndx + m22*ndy + mdy]);
}
return elm.Native.Transform2D.values = {
identity:identity,
matrix:F6(matrix),
rotation:rotation,
multiply:F2(multiply)
/*
transform:F7(transform),
rotate:F2(rotate),
move:F2(move),
scale:F2(scale),
scaleX:F2(scaleX),
scaleY:F2(scaleY),
reflectX:reflectX,
reflectY:reflectY
*/
};
};
Elm.Native.Utils = {};
Elm.Native.Utils.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Utils = elm.Native.Utils || {};
if (elm.Native.Utils.values) return elm.Native.Utils.values;
function eq(x,y) {
if (x === y) return true;
if (typeof x === "object") {
var c = 0;
for (var i in x) { ++c; if (!eq(x[i],y[i])) return false; }
return c === Object.keys(y).length;
}
if (typeof x === 'function') {
throw new Error('Equality error: general function equality is ' +
'undecidable, and therefore, unsupported');
}
return x === y;
}
// code in Generate/JavaScript.hs depends on the particular
// integer values assigned to LT, EQ, and GT
var LT = -1, EQ = 0, GT = 1, ord = ['LT','EQ','GT'];
function compare(x,y) { return { ctor: ord[cmp(x,y)+1] } }
function cmp(x,y) {
var ord;
if (typeof x !== 'object') return x === y ? EQ : x < y ? LT : GT;
if (x.ctor === "::" || x.ctor === "[]") {
while (true) {
if (x.ctor === "[]" && y.ctor === "[]") return EQ;
if (x.ctor !== y.ctor) return x.ctor === '[]' ? LT : GT;
ord = cmp(x._0, y._0);
if (ord !== EQ) return ord;
x = x._1;
y = y._1;
}
}
if (x.ctor.slice(0,6) === '_Tuple') {
var n = x.ctor.slice(6) - 0;
var err = 'cannot compare tuples with more than 6 elements.';
if (n === 0) return EQ;
if (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord;
if (n >= 2) { ord = cmp(x._1, y._1); if (ord !== EQ) return ord;
if (n >= 3) { ord = cmp(x._2, y._2); if (ord !== EQ) return ord;
if (n >= 4) { ord = cmp(x._3, y._3); if (ord !== EQ) return ord;
if (n >= 5) { ord = cmp(x._4, y._4); if (ord !== EQ) return ord;
if (n >= 6) { ord = cmp(x._5, y._5); if (ord !== EQ) return ord;
if (n >= 7) throw new Error('Comparison error: ' + err); } } } } } }
return EQ;
}
throw new Error('Comparison error: comparison is only defined on ints, ' +
'floats, times, chars, strings, lists of comparable values, ' +
'and tuples of comparable values.')
}
var Tuple0 = { ctor: "_Tuple0" };
function Tuple2(x,y) { return { ctor:"_Tuple2", _0:x, _1:y } }
function chr(c) {
var x = new String(c);
x.isChar = true;
return x;
}
function txt(str) {
var t = new String(str);
t.isText = true;
return t;
}
var count = 0;
function guid(_) { return count++ }
function copy(r) {
var o = {};
for (var i in r) { o[i] = r[i]; }
return o;
}
function remove(x,r) {
var o = copy(r);
if (x in o._) {
o[x] = o._[x][0];
o._[x] = o._[x].slice(1);
if (o._[x].length === 0) { delete o._[x]; }
} else {
delete o[x];
}
return o;
}
function replace(kvs,r) {
var o = copy(r);
for (var i = kvs.length; i--; ) {
var kvsi = kvs[i];
o[kvsi[0]] = kvsi[1];
}
return o;
}
function insert(x,v,r) {
var o = copy(r);
if (x in o) o._[x] = [o[x]].concat(x in o._ ? o._[x].slice(0) : []);
o[x] = v;
return o;
}
function max(a,b) { return a > b ? a : b }
function min(a,b) { return a < b ? a : b }
function mod(a,b) {
if (b === 0) {
throw new Error("Cannot perform mod 0. Division by zero error.");
}
var r = a % b;
var m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r+b) : -mod(-a,-b));
return m === b ? 0 : m;
}
function htmlHeight(width, html) {
var t = document.createElement('div');
t.innerHTML = html;
if (width > 0) { t.style.width = width + "px"; }
t.style.visibility = "hidden";
t.style.styleFloat = "left";
t.style.cssFloat = "left";
document.body.appendChild(t);
var style = window.getComputedStyle(t, null);
var w = Math.ceil(style.getPropertyValue("width").slice(0,-2) - 0);
var h = Math.ceil(style.getPropertyValue("height").slice(0,-2) - 0);
document.body.removeChild(t);
return Tuple2(w,h);
}
function getXY(e) {
var posx = 0;
var posy = 0;
if (e.pageX || e.pageY) {
posx = e.pageX;
posy = e.pageY;
} else if (e.clientX || e.clientY) {
posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
}
if (elm.display === ElmRuntime.Display.COMPONENT) {
var rect = elm.node.getBoundingClientRect();
var relx = rect.left + document.body.scrollLeft + document.documentElement.scrollLeft;
var rely = rect.top + document.body.scrollTop + document.documentElement.scrollTop;
// TODO: figure out if there is a way to avoid rounding here
posx = posx - Math.round(relx) - elm.node.clientLeft;
posy = posy - Math.round(rely) - elm.node.clientTop;
}
return Tuple2(posx, posy);
}
return elm.Native.Utils.values = {
eq:eq,
cmp:cmp,
compare:F2(compare),
Tuple0:Tuple0,
Tuple2:Tuple2,
chr:chr,
txt:txt,
copy: copy,
remove: remove,
replace: replace,
insert: insert,
guid: guid,
max : F2(max),
min : F2(min),
mod : F2(mod),
htmlHeight: F2(htmlHeight),
getXY: getXY,
toFloat: function(x) { return +x; }
};
};
Elm.Native.Graphics.Collage = {};
Elm.Native.Graphics.Collage.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Graphics = elm.Native.Graphics || {};
elm.Native.Graphics.Collage = elm.Native.Graphics.Collage || {};
if (elm.Native.Graphics.Collage.values) return elm.Native.Graphics.Collage.values;
var newElement = Elm.Graphics.Element.make(elm).newElement;
var C = ElmRuntime.use(ElmRuntime.Render.Collage);
function collage(w,h,forms) {
return A3(newElement, w, h, {
ctor: 'Custom',
type: 'Collage',
render: C.render,
update: C.update,
model: {w:w, h:h, forms:forms}
});
}
return elm.Native.Graphics.Collage.values = { collage:F3(collage) };
};Elm.Native.Graphics.Input = {};
Elm.Native.Graphics.Input.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Graphics = elm.Native.Graphics || {};
elm.Native.Graphics.Input = elm.Native.Graphics.Input || {};
if (elm.Native.Graphics.Input.values) return elm.Native.Graphics.Input.values;
var Render = ElmRuntime.use(ElmRuntime.Render.Element);
var newNode = ElmRuntime.use(ElmRuntime.Render.Utils).newElement;
var Signal = Elm.Signal.make(elm);
var newElement = Elm.Graphics.Element.make(elm).newElement;
var JS = Elm.Native.JavaScript.make(elm);
var Utils = Elm.Native.Utils.make(elm);
var Tuple2 = Utils.Tuple2;
function dropDown(values) {
var entries = JS.fromList(values);
var events = Signal.constant(entries[0]._1);
var drop = newNode('select');
drop.style.border = '0 solid';
for (var i = 0; i < entries.length; ++i) {
var option = newNode('option');
var name = JS.fromString(entries[i]._0);
option.value = name;
option.innerHTML = name;
drop.appendChild(option);
}
drop.addEventListener('change', function() {
elm.notify(events.id, entries[drop.selectedIndex]._1);
});
var t = drop.cloneNode(true);
t.style.visibility = "hidden";
elm.node.appendChild(t);
var style = window.getComputedStyle(t, null);
var w = Math.ceil(style.getPropertyValue("width").slice(0,-2) - 0);
var h = Math.ceil(style.getPropertyValue("height").slice(0,-2) - 0);
elm.node.removeChild(t);
console.log(w,h);
var element = A3(newElement, w, h, {
ctor: 'Custom',
type: 'DropDown',
render: function render(model) { return drop; },
update: function update(node, oldModel, newModel) {},
model: {}
});
return Tuple2(Signal.constant(element), events);
}
function buttons(defaultValue) {
var events = Signal.constant(defaultValue);
function render(model) {
var b = newNode('button');
b.style.display = 'block';
b.elmEvent = model.event;
function click() { elm.notify(events.id, b.elmEvent); }
b.addEventListener('click', click);
b.innerHTML = model.text;
return b;
}
function update(node, oldModel, newModel) {
node.elmEvent = newModel.event;
var txt = newModel.text;
if (oldModel.text !== txt) node.innerHTML = txt;
}
function button(evnt, txt) {
return A3(newElement, 100, 40, {
ctor: 'Custom',
type: 'Button',
render: render,
update: update,
model: { event:evnt, text:JS.fromString(txt) }
});
}
return { _:{}, button:F2(button), events:events };
}
function customButtons(defaultValue) {
var events = Signal.constant(defaultValue);
function render(model) {
var btn = newNode('div');
btn.elmEvent = model.event;
btn.elmUp = Render.render(model.up);
btn.elmHover = Render.render(model.hover);
btn.elmDown = Render.render(model.down);
function replace(node) {
if (node !== btn.firstChild) btn.replaceChild(node, btn.firstChild);
}
var overCount = 0;
function over(e) {
if (overCount++ > 0) return;
replace(btn.elmHover);
}
function out(e) {
if (btn.contains(e.toElement || e.relatedTarget)) return;
overCount = 0;
replace(btn.elmUp);
}
function up() {
replace(btn.elmHover);
elm.notify(events.id, btn.elmEvent);
}
function down() { replace(btn.elmDown); }
btn.addEventListener('mouseover', over);
btn.addEventListener('mouseout' , out);
btn.addEventListener('mousedown', down);
btn.addEventListener('mouseup' , up);
btn.appendChild(btn.elmUp);
var clicker = newNode('div');
clicker.style.width = btn.elmUp.style.width;
clicker.style.height = btn.elmUp.style.height;
clicker.style.position = 'absolute';
clicker.style.top = 0;
btn.appendChild(clicker);
return btn;
}
function update(node, oldModel, newModel) {
node.elmEvent = newModel.event;
Render.update(node.elmUp, oldModel.up, newModel.up)
Render.update(node.elmHover, oldModel.hover, newModel.hover)
Render.update(node.elmDown, oldModel.down, newModel.down)
}
function button(evnt, up, hover, down) {
return A3(newElement,
Math.max(up.props.width, hover.props.width, down.props.width),
Math.max(up.props.height, hover.props.height, down.props.height),
{ ctor: 'Custom',
type: 'CustomButton',
render: render,
update: update,
model: { event:evnt, up:up, hover:hover, down:down }
});
}
return { _:{}, customButton:F4(button), events:events };
}
function hoverables(defaultValue) {
var events = Signal.constant(defaultValue);
function hoverable(handler, elem) {
function onHover(bool) {
elm.notify(events.id, handler(bool));
}
var props = Utils.replace([['hover',onHover]], elem.props);
return { props:props, element:elem.element };
}
return { _:{}, hoverable:F2(hoverable), events:events };
}
function checkboxes(defaultValue) {
var events = Signal.constant(defaultValue);
function render(model) {
var b = newNode('input');
b.type = 'checkbox';
b.checked = model.checked;
b.style.display = 'block';
b.elmHandler = model.handler;
function change() { elm.notify(events.id, b.elmHandler(b.checked)); }
b.addEventListener('change', change);
return b;
}
function update(node, oldModel, newModel) {
node.elmHandler = newModel.handler;
node.checked = newModel.checked;
return true;
}
function box(handler, checked) {
return A3(newElement, 13, 13, {
ctor: 'Custom',
type: 'CheckBox',
render: render,
update: update,
model: { checked:checked, handler:handler }
});
}
return { _:{}, checkbox:F2(box), events:events };
}
function setRange(node, start, end, dir) {
if (node.parentNode) {
node.setSelectionRange(start, end, dir);
} else {
setTimeout(function(){node.setSelectionRange(start, end, dir);}, 0);
}
}
function mkTextPool(type) { return function fields(defaultValue) {
var events = Signal.constant(defaultValue);
var state = null;
function render(model) {
var field = newNode('input');
field.elmHandler = model.handler;
field.id = 'test';
field.type = type;
field.placeholder = JS.fromString(model.placeHolder);
field.value = JS.fromString(model.state.string);
setRange(field, model.state.selectionStart, model.state.selectionEnd, 'forward');
field.style.border = 'none';
state = model.state;
function update() {
var start = field.selectionStart,
end = field.selectionEnd;
if (field.selectionDirection === 'backward') {
start = end;
end = field.selectionStart;
}
state = { _:{},
string:JS.toString(field.value),
selectionStart:start,
selectionEnd:end };
elm.notify(events.id, field.elmHandler(state));
}
function mousedown() {
update();
elm.node.addEventListener('mouseup', mouseup);
}
function mouseup() {
update();
elm.node.removeEventListener('mouseup', mouseup)
}
field.addEventListener('keyup', update);
field.addEventListener('mousedown', mousedown);
return field;
}
function update(node, oldModel, newModel) {
node.elmHandler = newModel.handler;
if (state === newModel.state) return;
var newStr = JS.fromString(newModel.state.string);
if (node.value !== newStr) node.value = newStr;
var start = newModel.state.selectionStart;
var end = newModel.state.selectionEnd;
var direction = 'forward';
if (end < start) {
start = end;
end = newModel.state.selectionStart;
direction = 'backward';
}
if (node.selectionStart !== start
|| node.selectionEnd !== end
|| node.selectionDirection !== direction) {
setRange(node, start, end, direction);
}
}
function field(handler, placeHolder, state) {
return A3(newElement, 200, 30,
{ ctor: 'Custom',
type: type + 'Input',
render: render,
update: update,
model: { handler:handler,
placeHolder:placeHolder,
state:state }
});
}
return { _:{}, field:F3(field), events:events };
}
}
return elm.Native.Graphics.Input.values = {
buttons:buttons,
customButtons:customButtons,
hoverables:hoverables,
checkboxes:checkboxes,
fields:mkTextPool('text'),
emails:mkTextPool('email'),
passwords:mkTextPool('password'),
dropDown:dropDown
};
};
Elm.Native.Http = {};
Elm.Native.Http.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Http = elm.Native.Http || {};
if (elm.Native.Http.values) return elm.Native.Http.values;
var JS = Elm.JavaScript.make(elm);
var List = Elm.List.make(elm);
var Signal = Elm.Signal.make(elm);
function registerReq(queue,responses) { return function(req) {
if (req.url.ctor !== '[]') { sendReq(queue,responses,req); }
};
}
function updateQueue(queue,responses) {
if (queue.length > 0) {
elm.notify(responses.id, queue[0].value);
if (queue[0].value.ctor !== 'Waiting') {
queue.shift();
setTimeout(function() { updateQueue(queue,responses); }, 0);
}
}
}
function setHeader(pair) {
request.setRequestHeader( JS.fromString(pair._0), JS.fromString(pair._1) );
}
function sendReq(queue,responses,req) {
var response = { value: { ctor:'Waiting' } };
queue.push(response);
var request = null;
if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); }
if (window.XMLHttpRequest) { request = new XMLHttpRequest(); }
request.onreadystatechange = function(e) {
if (request.readyState === 4) {
response.value = (request.status >= 200 && request.status < 300 ?
{ ctor:'Success', _0:JS.toString(request.responseText) } :
{ ctor:'Failure', _0:request.status, _1:JS.toString(request.statusText) });
setTimeout(function() { updateQueue(queue,responses); }, 0);
}
};
request.open(JS.fromString(req.verb), JS.fromString(req.url), true);
List.map(setHeader)(req.headers);
request.send(JS.fromString(req.body));
}
function send(requests) {
var responses = Signal.constant(elm.Http.values.Waiting);
var sender = A2( Signal.lift, registerReq([],responses), requests );
function f(x) { return function(y) { return x; } }
return A3( Signal.lift2, f, responses, sender );
}
return elm.Native.Http.values = {send:send};
};
Elm.Native.Keyboard = {};
Elm.Native.Keyboard.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Keyboard = elm.Native.Keyboard || {};
if (elm.Native.Keyboard.values) return elm.Native.Keyboard.values;
// Duplicated from Native.Signal
function send(node, timestep, changed) {
var kids = node.kids;
for (var i = kids.length; i--; ) {
kids[i].recv(timestep, changed, node.id);
}
}
var Signal = Elm.Signal.make(elm);
var NList = Elm.Native.List.make(elm);
var Utils = Elm.Native.Utils.make(elm);
var downEvents = Signal.constant(0);
var upEvents = Signal.constant(0);
var blurEvents = Signal.constant(0);
elm.addListener([downEvents.id], document, 'keydown', function down(e) {
elm.notify(downEvents.id, e.keyCode);
});
elm.addListener([upEvents.id], document, 'keyup', function up(e) {
elm.notify(upEvents.id, e.keyCode);
});
elm.addListener([blurEvents.id], document, 'blur', function blur(e) {
elm.notify(blurEvents.id, NList.Nil);
});
function KeyMerge(down, up, blur) {
var args = [down,up,blur];
this.id = Utils.guid();
// Ignore starting values here
this.value = NList.Nil
this.kids = [];
var n = args.length;
var count = 0;
var isChanged = false;
this.recv = function(timestep, changed, parentID) {
++count;
if (changed) {
// We know this a change must only be one of the following cases
if (parentID === down.id && !(NList.member(down.value)(this.value))) {
isChanged = true;
this.value = NList.Cons(down.value, this.value);
}
if (parentID === up.id) {
isChanged = true;
var notEq = function(kc) { return kc !== up.value };
this.value = NList.filter(notEq)(this.value);
}
if (parentID === blur.id) {
isChanged = true;
this.value = NList.Nil;
}
}
if (count == n) {
send(this, timestep, isChanged);
isChanged = false;
count = 0;
}
};
for (var i = n; i--; ) { args[i].kids.push(this); }
}
var keysDown = Signal.dropRepeats(new KeyMerge(downEvents,upEvents,blurEvents));
function keySignal(f) {
var signal = A2(Signal.lift, f, keysDown);
// must set the default number of kids to make it possible to filter
// these signals if they are not actually used.
keysDown.defaultNumberOfKids += 1;
signal.defaultNumberOfKids = 1;
var filtered = Signal.dropRepeats(signal)
filtered.defaultNumberOfKids = 0;
return filtered;
}
function dir(up, down, left, right) {
function f(ks) {
var x = 0, y = 0;
while (ks.ctor === "::") {
switch (ks._0) {
case left : --x; break;
case right: ++x; break;
case up : ++y; break;
case down : --y; break;
}
ks = ks._1;
}
return { _:{}, x:x, y:y };
}
return keySignal(f);
}
function is(key) { return keySignal(NList.member(key)); }
var lastPressed = Signal.dropRepeats(downEvents);
return elm.Native.Keyboard.values = {
isDown:is,
directions:F4(dir),
keysDown:keysDown,
lastPressed:lastPressed
};
};
Elm.Native.Mouse = {};
Elm.Native.Mouse.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Mouse = elm.Native.Mouse || {};
if (elm.Native.Mouse.values) return elm.Native.Mouse.values;
var Signal = Elm.Signal.make(elm);
var Utils = Elm.Native.Utils.make(elm);
var position = Signal.constant(Utils.Tuple2(0,0));
position.defaultNumberOfKids = 2;
// do not move x and y into Elm. By setting their default number
// of kids, it is possible to detatch the mouse listeners if
// they are not needed.
var x = A2( Signal.lift, function(p){return p._0}, position);
x.defaultNumberOfKids = 0;
var y = A2( Signal.lift, function(p){return p._1}, position);
y.defaultNumberOfKids = 0;
var isDown = Signal.constant(false);
var isClicked = Signal.constant(false);
var clicks = Signal.constant(Utils.Tuple0);
var node = elm.display === ElmRuntime.Display.FULLSCREEN ? document : elm.node;
elm.addListener([isClicked.id, clicks.id], node, 'click', function click() {
elm.notify(isClicked.id, true);
elm.notify(clicks.id, Utils.Tuple0);
elm.notify(isClicked.id, false);
});
elm.addListener([isDown.id], node, 'mousedown', function down() {
elm.notify(isDown.id, true);
});
elm.addListener([isDown.id], node, 'mouseup', function up() {
elm.notify(isDown.id, false);
});
elm.addListener([position.id], node, 'mousemove', function move(e) {
elm.notify(position.id, Utils.getXY(e));
});
return elm.Native.Mouse.values = {
position: position,
x:x,
y:y,
isClicked: isClicked,
isDown: isDown,
clicks: clicks
};
};Elm.Native.Random = {};
Elm.Native.Random.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Random = elm.Native.Random || {};
if (elm.Native.Random.values) return elm.Native.Random.values;
var Signal = Elm.Signal.make(elm);
var List = Elm.Native.List.make(elm);
function range(min, max, signal) {
function f(x) { return Math.floor(Math.random() * (max-min+1)) + min; }
return A2( Signal.lift, f, signal );
}
function float_(signal) {
function f(x) { return Math.random(); }
return A2( Signal.lift, f, signal );
}
function floatList(signal) {
function f(n) {
if (n < 0) return List.Nil;
var arr = new Array(n);
for (var i = n; i--; ) {
arr[i] = Math.random();
}
return List.fromArray(arr);
}
return A2( Signal.lift, f, signal );
}
return elm.Native.Random.values = {
range: F3(range),
float_: float_,
floatList: floatList
};
};
Elm.Native.Signal = {};
Elm.Native.Signal.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Signal = elm.Native.Signal || {};
if (elm.Native.Signal.values) return elm.Native.Signal.values;
var Utils = Elm.Native.Utils.make(elm);
var foldr1 = Elm.List.make(elm).foldr1;
function send(node, timestep, changed) {
var kids = node.kids;
for (var i = kids.length; i--; ) {
kids[i].recv(timestep, changed, node.id);
}
}
function Input(base) {
this.id = Utils.guid();
this.value = base;
this.kids = [];
this.defaultNumberOfKids = 0;
this.recv = function(timestep, eid, v) {
var changed = eid === this.id;
if (changed) { this.value = v; }
send(this, timestep, changed);
return changed;
};
elm.inputs.push(this);
}
function LiftN(update, args) {
this.id = Utils.guid();
this.value = update();
this.kids = [];
var n = args.length;
var count = 0;
var isChanged = false;
this.recv = function(timestep, changed, parentID) {
++count;
if (changed) { isChanged = true; }
if (count == n) {
if (isChanged) { this.value = update(); }
send(this, timestep, isChanged);
isChanged = false;
count = 0;
}
};
for (var i = n; i--; ) { args[i].kids.push(this); }
}
function lift(func, a) {
function update() { return func(a.value); }
return new LiftN(update, [a]);
}
function lift2(func, a, b) {
function update() { return A2( func, a.value, b.value ); }
return new LiftN(update, [a,b]);
}
function lift3(func, a, b, c) {
function update() { return A3( func, a.value, b.value, c.value ); }
return new LiftN(update, [a,b,c]);
}
function lift4(func, a, b, c, d) {
function update() { return A4( func, a.value, b.value, c.value, d.value ); }
return new LiftN(update, [a,b,c,d]);
}
function lift5(func, a, b, c, d, e) {
function update() { return A5( func, a.value, b.value, c.value, d.value, e.value ); }
return new LiftN(update, [a,b,c,d,e]);
}
function lift6(func, a, b, c, d, e, f) {
function update() { return A6( func, a.value, b.value, c.value, d.value, e.value, f.value ); }
return new LiftN(update, [a,b,c,d,e,f]);
}
function lift7(func, a, b, c, d, e, f, g) {
function update() { return A7( func, a.value, b.value, c.value, d.value, e.value, f.value, g.value ); }
return new LiftN(update, [a,b,c,d,e,f,g]);
}
function lift8(func, a, b, c, d, e, f, g, h) {
function update() { return A8( func, a.value, b.value, c.value, d.value, e.value, f.value, g.value, h.value ); }
return new LiftN(update, [a,b,c,d,e,f,g,h]);
}
function Foldp(step, state, input) {
this.id = Utils.guid();
this.value = state;
this.kids = [];
this.recv = function(timestep, changed, parentID) {
if (changed) {
this.value = A2( step, input.value, this.value );
}
send(this, timestep, changed);
};
input.kids.push(this);
}
function foldp(step, state, input) {
return new Foldp(step, state, input);
}
function DropIf(pred,base,input) {
this.id = Utils.guid();
this.value = pred(input.value) ? base : input.value;
this.kids = [];
this.recv = function(timestep, changed, parentID) {
var chng = changed && !pred(input.value);
if (chng) { this.value = input.value; }
send(this, timestep, chng);
};
input.kids.push(this);
}
function DropRepeats(input) {
this.id = Utils.guid();
this.value = input.value;
this.kids = [];
this.recv = function(timestep, changed, parentID) {
var chng = changed && !Utils.eq(this.value,input.value);
if (chng) { this.value = input.value; }
send(this, timestep, chng);
};
input.kids.push(this);
}
function dropWhen(s1,b,s2) {
var pairs = lift2( F2(function(x,y){return {x:x,y:y};}), s1, s2 );
var dropped = new DropIf(function(p){return p.x;},{x:true,y:b},pairs);
return lift(function(p){return p.y;}, dropped);
}
function timestamp(a) {
function update() { return Utils.Tuple2(Date.now(), a.value); }
return new LiftN(update, [a]);
}
function SampleOn(s1,s2) {
this.id = Utils.guid();
this.value = s2.value;
this.kids = [];
var count = 0;
var isChanged = false;
this.recv = function(timestep, changed, parentID) {
if (parentID === s1.id) isChanged = changed;
++count;
if (count == 2) {
if (isChanged) { this.value = s2.value; }
send(this, timestep, isChanged);
count = 0;
isChanged = false;
}
};
s1.kids.push(this);
s2.kids.push(this);
}
function sampleOn(s1,s2) { return new SampleOn(s1,s2); }
function delay(t,s) {
var delayed = new Input(s.value);
var firstEvent = true;
function update(v) {
if (firstEvent) { firstEvent = false; return; }
setTimeout(function() { elm.notify(delayed.id, v); }, t);
}
function first(a,b) { return a; }
return new SampleOn(delayed, lift2(F2(first), delayed, lift(update,s)));
}
function Merge(s1,s2) {
this.id = Utils.guid();
this.value = s1.value;
this.kids = [];
var next = null;
var count = 0;
var isChanged = false;
this.recv = function(timestep, changed, parentID) {
++count;
if (changed) {
isChanged = true;
if (parentID == s2.id && next === null) { next = s2.value; }
if (parentID == s1.id) { next = s1.value; }
}
if (count == 2) {
if (isChanged) { this.value = next; next = null; }
send(this, timestep, isChanged);
isChanged = false;
count = 0;
}
};
s1.kids.push(this);
s2.kids.push(this);
}
function merge(s1,s2) { return new Merge(s1,s2); }
function merges(ss) { return A2(foldr1, F2(merge), ss); }
return elm.Native.Signal.values = {
constant : function(v) { return new Input(v); },
lift : F2(lift ),
lift2 : F3(lift2),
lift3 : F4(lift3),
lift4 : F5(lift4),
lift5 : F6(lift5),
lift6 : F7(lift6),
lift7 : F8(lift7),
lift8 : F9(lift8),
foldp : F3(foldp),
delay : F2(delay),
merge : F2(merge),
merges : merges,
count : function(s) { return foldp(F2(function(_,c) { return c+1; }), 0, s); },
countIf : F2(function(pred,s) {
return foldp(F2(function(x,c){
return pred(x) ? c+1 : c; }), 0, s)}),
keepIf : F3(function(pred,base,sig) {
return new DropIf(function(x) {return !pred(x);},base,sig); }),
dropIf : F3(function(pred,base,sig) { return new DropIf(pred,base,sig); }),
keepWhen : F3(function(s1,b,s2) {
return dropWhen(lift(function(b){return !b;},s1), b, s2); }),
dropWhen : F3(dropWhen),
dropRepeats : function(s) { return new DropRepeats(s);},
sampleOn : F2(sampleOn),
timestamp : timestamp
};
};
Elm.Native.Time = {};
Elm.Native.Time.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Time = elm.Native.Time || {};
if (elm.Native.Time.values) return elm.Native.Time.values;
var Signal = Elm.Signal.make(elm);
var NS = Elm.Native.Signal.make(elm);
var Maybe = Elm.Maybe.make(elm);
var Utils = Elm.Native.Utils.make(elm);
function fpsWhen(desiredFPS, isOn) {
var msPerFrame = 1000 / desiredFPS;
var prev = Date.now(), curr = prev, diff = 0, wasOn = true;
var ticker = Signal.constant(diff);
function tick(zero) { return function() {
curr = Date.now();
diff = zero ? 0 : curr - prev;
prev = curr;
elm.notify(ticker.id, diff);
};
}
var timeoutID = 0;
function f(isOn, t) {
if (isOn) {
timeoutID = setTimeout(tick(!wasOn && isOn), msPerFrame);
} else if (wasOn) {
clearTimeout(timeoutID);
}
wasOn = isOn;
return t;
}
return A3( Signal.lift2, F2(f), isOn, ticker );
}
function everyWhen(t, isOn) {
var clock = Signal.constant(Date.now());
var id = setInterval(function tellTime() {
if (!elm.notify(clock.id, Date.now())) {
clearInterval(id);
}
}, t);
return clock;
}
function since(t, s) {
function cmp(a,b) { return !Utils.eq(a,b); }
var dcount = Signal.count(A2(NS.delay, t, s));
return A3( Signal.lift2, F2(cmp), Signal.count(s), dcount );
}
function read(s) {
var t = Date.parse(s);
return isNaN(t) ? Maybe.Nothing : Maybe.Just(t);
}
return elm.Native.Time.values = {
fpsWhen : F2(fpsWhen),
fps : function(t) { return fpsWhen(t, Signal.constant(true)); },
every : function(t) { return everyWhen(t, Signal.constant(true)) },
delay : NS.delay,
timestamp : NS.timestamp,
since : F2(since),
toDate : function(t) { return new window.Date(t); },
read : read
};
};
Elm.Native.Touch = {};
Elm.Native.Touch.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Touch = elm.Native.Touch || {};
if (elm.Native.Touch.values) return elm.Native.Touch.values;
var Signal = Elm.Signal.make(elm);
var JS = Elm.JavaScript.make(elm);
var Utils = Elm.Native.Utils.make(elm);
function Dict() {
this.keys = [];
this.values = [];
this.insert = function(key,value) {
this.keys.push(key);
this.values.push(value);
};
this.lookup = function(key) {
var i = this.keys.indexOf(key)
return i >= 0 ? this.values[i] : {x:0,y:0,t:0};
};
this.remove = function(key) {
var i = this.keys.indexOf(key);
if (i < 0) return;
var t = this.values[i];
this.keys.splice(i,1);
this.values.splice(i,1);
return t;
};
this.clear = function() {
this.keys = [];
this.values = [];
};
}
var root = Signal.constant([]),
tapTime = 500,
hasTap = false,
tap = {_:{},x:0,y:0},
dict = new Dict();
function touch(t) {
var r = dict.lookup(t.identifier);
var point = Utils.getXY(t);
return {_ : {},
id: t.identifier,
x : point._0,
y : point._1,
x0: r.x,
y0: r.y,
t0: r.t
};
}
var node = elm.display === ElmRuntime.Display.FULLSCREEN ? document : elm.node;
function start(e) {
var point = Utils.getXY(e);
dict.insert(e.identifier,
{x: point._0,
y: point._1,
t: Date.now()});
}
function end(e) {
var t = dict.remove(e.identifier);
if (Date.now() - t.t < tapTime) {
hasTap = true;
tap = {_:{}, x:t.x, y:t.y};
}
}
function listen(name, f) {
function update(e) {
for (var i = e.changedTouches.length; i--; ) { f(e.changedTouches[i]); }
var ts = new Array(e.touches.length);
for (var i = e.touches.length; i--; ) { ts[i] = touch(e.touches[i]); }
elm.notify(root.id, ts);
e.preventDefault();
}
elm.addListener([root.id], node, name, update);
}
listen("touchstart", start);
listen("touchmove", function(_){});
listen("touchend", end);
listen("touchcancel", end);
listen("touchleave", end);
var mouseID = -1;
function move(e) {
var point = Utils.getXY(e);
for (var i = root.value.length; i--; ) {
if (root.value[i].id === mouseID) {
root.value[i].x = point._0;
root.value[i].y = point._1;
elm.notify(root.id, root.value);
break;
}
}
}
elm.addListener([root.id], node, "mousedown", function down(e) {
node.addEventListener("mousemove", move);
e.identifier = mouseID;
start(e);
root.value.push(touch(e));
elm.notify(root.id, root.value);
});
elm.addListener([root.id], node, "mouseup", function up(e) {
node.removeEventListener("mousemove", move);
e.identifier = mouseID;
end(e);
for (var i = root.value.length; i--; ) {
if (root.value[i].id === mouseID) {
root.value.splice(i, 1);
--mouseID;
break;
}
}
elm.notify(root.id, root.value);
});
elm.addListener([root.id], node, "blur", function blur(e) {
node.removeEventListener("mousemove", move);
if (root.value.length > 0) {
elm.notify(root.id, []);
--mouseID;
}
dict.clear();
});
function dependency(f) {
var sig = A2( Signal.lift, f, root );
root.defaultNumberOfKids += 1;
sig.defaultNumberOfKids = 0;
return sig;
}
var touches = dependency(JS.toList);
var taps = function() {
var sig = dependency(function(_) { return tap; });
sig.defaultNumberOfKids = 1;
function pred(_) { var b = hasTap; hasTap = false; return b; }
var sig2 = A3( Signal.keepIf, pred, {_:{},x:0,y:0}, sig);
sig2.defaultNumberOfKids = 0;
return sig2;
}();
return elm.Native.Touch.values = { touches: touches, taps: taps };
};Elm.Native.WebSocket = {};
Elm.Native.WebSocket.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.WebSocket = elm.Native.WebSocket || {};
if (elm.Native.WebSocket.values) return elm.Native.WebSocket.values;
var Signal = Elm.Signal.make(elm);
var JS = Elm.JavaScript.make(elm);
var List = Elm.Native.List.make(elm);
function open(url, outgoing) {
var incoming = Signal.constant(List.Nil);
var ws = new WebSocket(JS.fromString(url));
var pending = [];
var ready = false;
ws.onopen = function(e) {
var len = pending.length;
for (var i = 0; i < len; ++i) { ws.send(pending[i]); }
ready = true;
};
ws.onmessage = function(event) {
elm.notify(incoming.id, JS.toString(event.data));
};
function send(msg) {
var s = JS.fromString(msg);
ready ? ws.send(s) : pending.push(s);
}
function take1(x,y) { return x }
return A3(Signal.lift2, F2(take1), incoming, A2(Signal.lift, send, outgoing));
}
return elm.Native.WebSocket.values = { connect: F2(open) };
};
Elm.Native.Window = {};
Elm.Native.Window.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Window = elm.Native.Window || {};
if (elm.Native.Window.values) return elm.Native.Window.values;
var Signal = Elm.Signal.make(elm);
var Tuple2 = Elm.Native.Utils.make(elm).Tuple2;
function getWidth() { return elm.node.clientWidth; }
function getHeight() {
if (elm.display === ElmRuntime.Display.FULLSCREEN) {
return window.innerHeight;
}
return elm.node.clientHeight;
}
var dimensions = Signal.constant(Tuple2(getWidth(), getHeight()));
dimensions.defaultNumberOfKids = 2;
// Do not move width and height into Elm. By setting the default number of kids,
// the resize listener can be detached.
var width = A2(Signal.lift, function(p){return p._0;}, dimensions);
width.defaultNumberOfKids = 0;
var height = A2(Signal.lift, function(p){return p._1;}, dimensions);
height.defaultNumberOfKids = 0;
function resizeIfNeeded() {
var w = getWidth();
var h = getHeight();
if (dimensions.value._0 === w && dimensions.value._1 === h) return;
elm.notify(dimensions.id, Tuple2(w,h));
}
elm.addListener([dimensions.id], window, 'resize', resizeIfNeeded);
return elm.Native.Window.values = {
dimensions:dimensions,
width:width,
height:height,
resizeIfNeeded:resizeIfNeeded
};
};
Elm.Automaton = Elm.Automaton || {};
Elm.Automaton.make = function (elm)
{
elm.Automaton = elm.Automaton || {};
if (elm.Automaton.values)
return elm.Automaton.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Automaton";
var Basics = Elm.Basics.make(elm);
var Signal = Elm.Signal.make(elm);
var List = Elm.List.make(elm);
var Maybe = Elm.Maybe.make(elm);
var _op = {};
var enqueue = F2(function (x,arg0)
{
return function ()
{
switch (arg0.ctor)
{case
"_Tuple2" :
return {ctor: "_Tuple2", _0: {ctor: "::", _0: x, _1: arg0._0}, _1: arg0._1}}
_E.Case($moduleName,
"on line 95, column 22 to 31");
}()
});
var empty = {ctor: "_Tuple2", _0: _J.toList([]), _1: _J.toList([])};
var dequeue = function (q)
{
return function ()
{
switch (q.ctor)
{case
"_Tuple2" :
switch (q._0.ctor)
{case
"[]" :
switch (q._1.ctor)
{case
"[]" :
return Maybe.Nothing}
break;}
switch (q._1.ctor)
{case
"::" :
return Maybe.Just({ctor: "_Tuple2", _0: q._1._0, _1: {ctor: "_Tuple2", _0: q._0, _1: q._1._1}})
case
"[]" :
return dequeue({ctor: "_Tuple2", _0: _J.toList([]), _1: List.reverse(q._0)})}
break;}
_E.Case($moduleName,"between lines 96 and 101");
}()
};
var Step = function (a)
{
return {ctor: "Step", _0: a}
};
var hiddenState = F2(function (s,f)
{
return Step(function (x)
{
return function ()
{
var $ = A2(f,x,s),
s$ = $._0,
out = $._1;
return {ctor: "_Tuple2", _0: A2(hiddenState,
s$,
f), _1: out}
}()
})
});
var average = function (k)
{
return function ()
{
var stepFull = F2(function (n,arg0)
{
return function ()
{
switch (arg0.ctor)
{case
"_Tuple3" :
return function ()
{
var _case12 = dequeue(arg0._0);
switch (_case12.ctor)
{case
"Just" :
switch (_case12._0.ctor)
{case
"_Tuple2" :
return function ()
{
var sum$ = arg0._2 + n - _case12._0._0;
return {ctor: "_Tuple2", _0: {ctor: "_Tuple3", _0: A2(enqueue,
n,
_case12._0._1), _1: arg0._1, _2: sum$}, _1: sum$ / Basics.toFloat(arg0._1)}
}()}
break;
case
"Nothing" :
return {ctor: "_Tuple2", _0: {ctor: "_Tuple3", _0: arg0._0, _1: arg0._1, _2: arg0._2}, _1: 0}}
_E.Case($moduleName,
"between lines 108 and 112");
}()}
_E.Case($moduleName,
"between lines 108 and 112");
}()
});
var step = F2(function (n,arg0)
{
return function ()
{
switch (arg0.ctor)
{case
"_Tuple3" :
return _N.eq(arg0._1,
k) ? A2(stepFull,
n,
{ctor: "_Tuple3", _0: arg0._0, _1: arg0._1, _2: arg0._2}) : {ctor: "_Tuple2", _0: {ctor: "_Tuple3", _0: A2(enqueue,
n,
arg0._0), _1: arg0._1 + 1, _2: arg0._2 + n}, _1: (arg0._2 + n) / (Basics.toFloat(arg0._1) + 1)}}
_E.Case($moduleName,
"between lines 105 and 106");
}()
});
return A2(hiddenState,
{ctor: "_Tuple3", _0: empty, _1: 0, _2: 0},
step)
}()
};
var pure = function (f)
{
return Step(function (x)
{
return {ctor: "_Tuple2", _0: pure(f), _1: f(x)}
})
};
var run = F3(function (auto,base,inputs)
{
return function ()
{
var step = F2(function (a,arg0)
{
return function ()
{
switch (arg0.ctor)
{case
"_Tuple2" :
switch (arg0._0.ctor)
{case
"Step" :
return arg0._0._0(a)}
break;}
_E.Case($moduleName,
"on line 35, column 28 to 31");
}()
});
return A2(Signal.lift,
function (arg0)
{
return function ()
{
switch (arg0.ctor)
{case
"_Tuple2" :
return arg0._1}
_E.Case($moduleName,
"on line 36, column 23 to 24");
}()
},
A3(Signal.foldp,
step,
{ctor: "_Tuple2", _0: auto, _1: base},
inputs))
}()
});
var state = F2(function (s,f)
{
return Step(function (x)
{
return function ()
{
var s$ = A2(f,x,s);
return {ctor: "_Tuple2", _0: A2(state,
s$,
f), _1: s$}
}()
})
});
var count = A2(state,
0,
F2(function (arg1,c)
{
return function ()
{
return c + 1
}()
}));
var step = F2(function (a,arg0)
{
return function ()
{
switch (arg0.ctor)
{case
"Step" :
return arg0._0(a)}
_E.Case($moduleName,"on line 40, column 19 to 22");
}()
});
var combine = function (autos)
{
return Step(function (a)
{
return function ()
{
var $ = List.unzip(A2(List.map,
step(a),
autos)),
autos$ = $._0,
bs = $._1;
return {ctor: "_Tuple2", _0: combine(autos$), _1: bs}
}()
})
};
_op[">>>"] = F2(function (f,g)
{
return Step(function (a)
{
return function ()
{
var $ = A2(step,a,f),
f$ = $._0,
b = $._1;
var $ = A2(step,b,g),
g$ = $._0,
c = $._1;
return {ctor: "_Tuple2", _0: A2(_op[">>>"],
f$,
g$), _1: c}
}()
})
});
_op["<<<"] = F2(function (g,f)
{
return A2(_op[">>>"],f,g)
});
elm.Automaton.values = {_op: _op, pure: pure, state: state, hiddenState: hiddenState, run: run, step: step, combine: combine, count: count, average: average};
return elm.Automaton.values
};Elm.Basics = Elm.Basics || {};
Elm.Basics.make = function (elm)
{
elm.Basics = elm.Basics || {};
if (elm.Basics.values)
return elm.Basics.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Basics";
var Native = Native || {};
Native.Basics = Elm.Native.Basics.make(elm);
var _op = {};
_op["||"] = Native.Basics.or;
_op["|>"] = F2(function (x,f)
{
return f(x)
});
var xor = Native.Basics.xor;
var uncurry = Native.Basics.uncurry;
var truncate = Native.Basics.truncate;
var toFloat = Native.Basics.toFloat;
var tan = Native.Basics.tan;
var sqrt = Native.Basics.sqrt;
var snd = Native.Basics.snd;
var sin = Native.Basics.sin;
var round = Native.Basics.round;
var rem = Native.Basics.rem;
var radians = function (t)
{
return t
};
var pi = Native.Basics.pi;
var otherwise = true;
var not = Native.Basics.not;
var mod = Native.Basics.mod;
var min = Native.Basics.min;
var max = Native.Basics.max;
var logBase = Native.Basics.logBase;
var id = function (x)
{
return x
};
var fst = Native.Basics.fst;
var floor = Native.Basics.floor;
var flip = F3(function (f,b,a)
{
return A2(f,a,b)
});
var e = Native.Basics.e;
var div = Native.Basics.div;
var curry = Native.Basics.curry;
var cos = Native.Basics.cos;
var compare = Native.Basics.compare;
var clamp = Native.Basics.clamp;
var ceiling = Native.Basics.ceiling;
var atan2 = Native.Basics.atan2;
var atan = Native.Basics.atan;
var asin = Native.Basics.asin;
var acos = Native.Basics.acos;
var abs = Native.Basics.abs;
_op["^"] = Native.Basics.exp;
var LT = {ctor: "LT"};
var GT = {ctor: "GT"};
var EQ = {ctor: "EQ"};
_op[">="] = Native.Basics.ge;
_op[">"] = Native.Basics.gt;
_op["=="] = Native.Basics.eq;
_op["<|"] = F2(function (f,x)
{
return f(x)
});
_op["<="] = Native.Basics.le;
_op["<"] = Native.Basics.lt;
_op["/="] = Native.Basics.neq;
_op["/"] = Native.Basics.floatDiv;
_op["."] = F3(function (f,g,x)
{
return f(g(x))
});
_op["-"] = Native.Basics.sub;
_op["+"] = Native.Basics.add;
var toPolar = function (arg0)
{
return function ()
{
switch (arg0.ctor)
{case
"_Tuple2" :
return {ctor: "_Tuple2", _0: Native.Basics.sqrt(Math.pow(arg0._0,
2) + Math.pow(arg0._1,
2)), _1: A2(Native.Basics.atan2,
arg0._1,
arg0._0)}}
_E.Case($moduleName,"on line 76, column 18 to 73");
}()
};
_op["*"] = Native.Basics.mul;
var degrees = function (d)
{
return d * Native.Basics.pi / 180
};
var fromPolar = function (arg0)
{
return function ()
{
switch (arg0.ctor)
{case
"_Tuple2" :
return {ctor: "_Tuple2", _0: arg0._0 * Native.Basics.cos(arg0._1), _1: arg0._0 * Native.Basics.sin(arg0._1)}}
_E.Case($moduleName,"on line 70, column 20 to 68");
}()
};
var turns = function (r)
{
return 2 * Native.Basics.pi * r
};
_op["&&"] = Native.Basics.and;
elm.Basics.values = {_op: _op, radians: radians, degrees: degrees, turns: turns, fromPolar: fromPolar, toPolar: toPolar, div: div, rem: rem, mod: mod, cos: cos, sin: sin, tan: tan, acos: acos, asin: asin, atan: atan, atan2: atan2, sqrt: sqrt, abs: abs, logBase: logBase, clamp: clamp, pi: pi, e: e, compare: compare, min: min, max: max, xor: xor, not: not, otherwise: otherwise, round: round, truncate: truncate, floor: floor, ceiling: ceiling, toFloat: toFloat, id: id, fst: fst, snd: snd, flip: flip, curry: curry, uncurry: uncurry, LT: LT, EQ: EQ, GT: GT};
return elm.Basics.values
};Elm.Char = Elm.Char || {};
Elm.Char.make = function (elm)
{
elm.Char = elm.Char || {};
if (elm.Char.values)
return elm.Char.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Char";
var Native = Native || {};
Native.Char = Elm.Native.Char.make(elm);
var _op = {};
var toUpper = Native.Char.toUpper;
var toLower = Native.Char.toLower;
var toLocaleUpper = Native.Char.toLocaleUpper;
var toLocaleLower = Native.Char.toLocaleLower;
var toCode = Native.Char.toCode;
var isUpper = Native.Char.isUpper;
var isOctDigit = Native.Char.isOctDigit;
var isLower = Native.Char.isLower;
var isHexDigit = Native.Char.isHexDigit;
var isDigit = Native.Char.isDigit;
var fromCode = Native.Char.fromCode;
elm.Char.values = {_op: _op, isUpper: isUpper, isLower: isLower, isDigit: isDigit, isOctDigit: isOctDigit, isHexDigit: isHexDigit, toUpper: toUpper, toLower: toLower, toLocaleUpper: toLocaleUpper, toLocaleLower: toLocaleLower, toCode: toCode, fromCode: fromCode};
return elm.Char.values
};Elm.Color = Elm.Color || {};
Elm.Color.make = function (elm)
{
elm.Color = elm.Color || {};
if (elm.Color.values)
return elm.Color.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Color";
var Native = Native || {};
Native.Color = Elm.Native.Color.make(elm);
var Basics = Elm.Basics.make(elm);
var _op = {};
var hsva = Native.Color.hsva;
var hsv = Native.Color.hsv;
var greyscale = function (p)
{
return A3(hsv,0,0,1 - p)
};
var grayscale = function (p)
{
return A3(hsv,0,0,1 - p)
};
var complement = Native.Color.complement;
var Radial = F5(function (a,b,c,d,e)
{
return {ctor: "Radial", _0: a, _1: b, _2: c, _3: d, _4: e}
});
var radial = Radial;
var Linear = F3(function (a,b,c)
{
return {ctor: "Linear", _0: a, _1: b, _2: c}
});
var linear = Linear;
var Color = F4(function (a,b,c,d)
{
return {ctor: "Color", _0: a, _1: b, _2: c, _3: d}
});
var black = A4(Color,0,0,0,1);
var blue = A4(Color,52,101,164,1);
var brown = A4(Color,193,125,17,1);
var charcoal = A4(Color,85,87,83,1);
var darkBlue = A4(Color,32,74,135,1);
var darkBrown = A4(Color,143,89,2,1);
var darkCharcoal = A4(Color,46,52,54,1);
var darkGray = A4(Color,186,189,182,1);
var darkGreen = A4(Color,78,154,6,1);
var darkGrey = A4(Color,186,189,182,1);
var darkOrange = A4(Color,206,92,0,1);
var darkPurple = A4(Color,92,53,102,1);
var darkRed = A4(Color,164,0,0,1);
var darkYellow = A4(Color,196,160,0,1);
var gray = A4(Color,211,215,207,1);
var green = A4(Color,115,210,22,1);
var grey = A4(Color,211,215,207,1);
var lightBlue = A4(Color,114,159,207,1);
var lightBrown = A4(Color,233,185,110,1);
var lightCharcoal = A4(Color,136,138,133,1);
var lightGray = A4(Color,238,238,236,1);
var lightGreen = A4(Color,138,226,52,1);
var lightGrey = A4(Color,238,238,236,1);
var lightOrange = A4(Color,252,175,62,1);
var lightPurple = A4(Color,173,127,168,1);
var lightRed = A4(Color,239,41,41,1);
var lightYellow = A4(Color,255,233,79,1);
var orange = A4(Color,245,121,0,1);
var purple = A4(Color,117,80,123,1);
var red = A4(Color,204,0,0,1);
var rgb = F3(function (r,g,b)
{
return A4(Color,r,g,b,1)
});
var rgba = Color;
var white = A4(Color,255,255,255,1);
var yellow = A4(Color,237,212,0,1);
elm.Color.values = {_op: _op, rgba: rgba, rgb: rgb, lightRed: lightRed, red: red, darkRed: darkRed, lightOrange: lightOrange, orange: orange, darkOrange: darkOrange, lightYellow: lightYellow, yellow: yellow, darkYellow: darkYellow, lightGreen: lightGreen, green: green, darkGreen: darkGreen, lightBlue: lightBlue, blue: blue, darkBlue: darkBlue, lightPurple: lightPurple, purple: purple, darkPurple: darkPurple, lightBrown: lightBrown, brown: brown, darkBrown: darkBrown, black: black, white: white, lightGrey: lightGrey, grey: grey, darkGrey: darkGrey, lightGray: lightGray, gray: gray, darkGray: darkGray, lightCharcoal: lightCharcoal, charcoal: charcoal, darkCharcoal: darkCharcoal, grayscale: grayscale, greyscale: greyscale, complement: complement, hsva: hsva, hsv: hsv, linear: linear, radial: radial, Color: Color, Linear: Linear, Radial: Radial};
return elm.Color.values
};Elm.Date = Elm.Date || {};
Elm.Date.make = function (elm)
{
elm.Date = elm.Date || {};
if (elm.Date.values)
return elm.Date.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Date";
var Native = Native || {};
Native.Date = Elm.Native.Date.make(elm);
var Time = Elm.Time.make(elm);
var Maybe = Elm.Maybe.make(elm);
var _op = {};
var year = Native.Date.year;
var toTime = Native.Date.toTime;
var second = Native.Date.second;
var read = Native.Date.read;
var month = Native.Date.month;
var minute = Native.Date.minute;
var hour = Native.Date.hour;
var dayOfWeek = Native.Date.dayOfWeek;
var day = Native.Date.day;
var Wed = {ctor: "Wed"};
var Tue = {ctor: "Tue"};
var Thu = {ctor: "Thu"};
var Sun = {ctor: "Sun"};
var Sep = {ctor: "Sep"};
var Sat = {ctor: "Sat"};
var Oct = {ctor: "Oct"};
var Nov = {ctor: "Nov"};
var Mon = {ctor: "Mon"};
var May = {ctor: "May"};
var Mar = {ctor: "Mar"};
var Jun = {ctor: "Jun"};
var Jul = {ctor: "Jul"};
var Jan = {ctor: "Jan"};
var Fri = {ctor: "Fri"};
var Feb = {ctor: "Feb"};
var Dec = {ctor: "Dec"};
var Date = {ctor: "Date"};
var Aug = {ctor: "Aug"};
var Apr = {ctor: "Apr"};
elm.Date.values = {_op: _op, read: read, toTime: toTime, year: year, month: month, day: day, dayOfWeek: dayOfWeek, hour: hour, minute: minute, second: second, Date: Date, Mon: Mon, Tue: Tue, Wed: Wed, Thu: Thu, Fri: Fri, Sat: Sat, Sun: Sun, Jan: Jan, Feb: Feb, Mar: Mar, Apr: Apr, May: May, Jun: Jun, Jul: Jul, Aug: Aug, Sep: Sep, Oct: Oct, Nov: Nov, Dec: Dec};
return elm.Date.values
};Elm.Dict = Elm.Dict || {};
Elm.Dict.make = function (elm)
{
elm.Dict = elm.Dict || {};
if (elm.Dict.values)
return elm.Dict.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Dict";
var Basics = Elm.Basics.make(elm);
var Maybe = Elm.Maybe.make(elm);
var Native = Native || {};
Native.Error = Elm.Native.Error.make(elm);
var List = Elm.List.make(elm);
var Native = Native || {};
Native.Utils = Elm.Native.Utils.make(elm);
var _op = {};
var Red = {ctor: "Red"};
var RBNode = F5(function (a,b,c,d,e)
{
return {ctor: "RBNode", _0: a, _1: b, _2: c, _3: d, _4: e}
});
var rotateLeft = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBNode" :
switch (t._4.ctor)
{case
"RBNode" :
return A5(RBNode,
t._0,
t._4._1,
t._4._2,
A5(RBNode,Red,t._1,t._2,t._3,t._4._3),
t._4._4)}
break;}
return Native.Error.raise("rotateLeft of a node without enough children")
}()
};
var rotateLeftIfNeeded = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBNode" :
switch (t._4.ctor)
{case
"RBNode" :
switch (t._4._0.ctor)
{case
"Red" :
return rotateLeft(t)}
break;}
break;}
return t
}()
};
var rotateRight = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBNode" :
switch (t._3.ctor)
{case
"RBNode" :
return A5(RBNode,
t._0,
t._3._1,
t._3._2,
t._3._3,
A5(RBNode,
Red,
t._1,
t._2,
t._3._4,
t._4))}
break;}
return Native.Error.raise("rotateRight of a node without enough children")
}()
};
var rotateRightIfNeeded = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBNode" :
switch (t._3.ctor)
{case
"RBNode" :
switch (t._3._0.ctor)
{case
"Red" :
switch (t._3._3.ctor)
{case
"RBNode" :
switch (t._3._3._0.ctor)
{case
"Red" :
return rotateRight(t)}
break;}
break;}
break;}
break;}
return t
}()
};
var RBEmpty = function (a)
{
return {ctor: "RBEmpty", _0: a}
};
var max = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
return Native.Error.raise("(max Empty) is not defined")
case
"RBNode" :
switch (t._4.ctor)
{case
"RBEmpty" :
return {ctor: "_Tuple2", _0: t._1, _1: t._2}}
return max(t._4)}
_E.Case($moduleName,"between lines 63 and 68");
}()
};
var redden = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
return Native.Error.raise("can\'t make a Leaf red")
case
"RBNode" :
return A5(RBNode,Red,t._1,t._2,t._3,t._4)}
_E.Case($moduleName,"between lines 285 and 290");
}()
};
var NBlack = {ctor: "NBlack"};
var LBlack = {ctor: "LBlack"};
var empty = RBEmpty(LBlack);
var findWithDefault = F3(function (base,k,t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
switch (t._0.ctor)
{case
"LBlack" :
return base}
break;
case
"RBNode" :
return function ()
{
var _case71 = A2(Native.Utils.compare,
k,
t._1);
switch (_case71.ctor)
{case
"EQ" :
return t._2
case
"GT" :
return A3(findWithDefault,
base,
k,
t._4)
case
"LT" :
return A3(findWithDefault,
base,
k,
t._3)}
_E.Case($moduleName,
"between lines 86 and 91");
}()}
_E.Case($moduleName,
"between lines 83 and 91");
}()
});
var foldl = F3(function (f,acc,t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
switch (t._0.ctor)
{case
"LBlack" :
return acc}
break;
case
"RBNode" :
return A3(foldl,
f,
A3(f,t._1,t._2,A3(foldl,f,acc,t._3)),
t._4)}
_E.Case($moduleName,"between lines 305 and 310");
}()
});
var foldr = F3(function (f,acc,t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
switch (t._0.ctor)
{case
"LBlack" :
return acc}
break;
case
"RBNode" :
return A3(foldr,
f,
A3(f,t._1,t._2,A3(foldr,f,acc,t._4)),
t._3)}
_E.Case($moduleName,"between lines 313 and 318");
}()
});
var keys = function (t)
{
return A3(foldr,
F3(function (k,v,acc)
{
return {ctor: "::", _0: k, _1: acc}
}),
_J.toList([]),
t)
};
var toList = function (t)
{
return A3(foldr,
F3(function (k,v,acc)
{
return {ctor: "::", _0: {ctor: "_Tuple2", _0: k, _1: v}, _1: acc}
}),
_J.toList([]),
t)
};
var values = function (t)
{
return A3(foldr,
F3(function (k,v,acc)
{
return {ctor: "::", _0: v, _1: acc}
}),
_J.toList([]),
t)
};
var lookup = F2(function (k,t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
switch (t._0.ctor)
{case
"LBlack" :
return Maybe.Nothing}
break;
case
"RBNode" :
return function ()
{
var _case93 = A2(Native.Utils.compare,
k,
t._1);
switch (_case93.ctor)
{case
"EQ" :
return Maybe.Just(t._2)
case
"GT" :
return A2(lookup,k,t._4)
case
"LT" :
return A2(lookup,k,t._3)}
_E.Case($moduleName,
"between lines 74 and 80");
}()}
_E.Case($moduleName,"between lines 71 and 80");
}()
});
var member = F2(function (k,t)
{
return Maybe.isJust(A2(lookup,k,t))
});
var map = F2(function (f,t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
switch (t._0.ctor)
{case
"LBlack" :
return RBEmpty(LBlack)}
break;
case
"RBNode" :
return A5(RBNode,
t._0,
t._1,
f(t._2),
A2(map,f,t._3),
A2(map,f,t._4))}
_E.Case($moduleName,"between lines 297 and 302");
}()
});
var min = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
switch (t._0.ctor)
{case
"LBlack" :
return Native.Error.raise("(min Empty) is not defined")}
break;
case
"RBNode" :
switch (t._3.ctor)
{case
"RBEmpty" :
switch (t._3._0.ctor)
{case
"LBlack" :
return {ctor: "_Tuple2", _0: t._1, _1: t._2}}
break;}
return min(t._3)}
_E.Case($moduleName,"between lines 56 and 59");
}()
};
var LBBlack = {ctor: "LBBlack"};
var Black = {ctor: "Black"};
var blacken = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
return RBEmpty(LBlack)
case
"RBNode" :
return A5(RBNode,Black,t._1,t._2,t._3,t._4)}
_E.Case($moduleName,"between lines 279 and 281");
}()
};
var ensureBlackRoot = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
switch (t._0.ctor)
{case
"LBlack" :
return t}
break;
case
"RBNode" :
switch (t._0.ctor)
{case
"Black" :
return t
case
"Red" :
return A5(RBNode,
Black,
t._1,
t._2,
t._3,
t._4)}
break;}
_E.Case($moduleName,"between lines 143 and 149");
}()
};
var otherColor = function (c)
{
return function ()
{
switch (c.ctor)
{case
"Black" :
return Red
case
"Red" :
return Black}
_E.Case($moduleName,"on line 122, column 16 to 57");
}()
};
var color_flip = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBNode" :
switch (t._3.ctor)
{case
"RBNode" :
switch (t._4.ctor)
{case
"RBNode" :
return A5(RBNode,
otherColor(t._0),
t._1,
t._2,
A5(RBNode,
otherColor(t._3._0),
t._3._1,
t._3._2,
t._3._3,
t._3._4),
A5(RBNode,
otherColor(t._4._0),
t._4._1,
t._4._2,
t._4._3,
t._4._4))}
break;}
break;}
return Native.Error.raise("color_flip called on a Empty or Node with a Empty child")
}()
};
var color_flipIfNeeded = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBNode" :
switch (t._3.ctor)
{case
"RBNode" :
switch (t._3._0.ctor)
{case
"Red" :
switch (t._4.ctor)
{case
"RBNode" :
switch (t._4._0.ctor)
{case
"Red" :
return color_flip(t)}
break;}
break;}
break;}
break;}
return t
}()
};
var fixUp = function (t)
{
return color_flipIfNeeded(rotateRightIfNeeded(rotateLeftIfNeeded(t)))
};
var insert = F3(function (k,v,t)
{
return function ()
{
var ins = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
switch (t._0.ctor)
{case
"LBlack" :
return A5(RBNode,
Red,
k,
v,
RBEmpty(LBlack),
RBEmpty(LBlack))}
break;
case
"RBNode" :
return function ()
{
var h = function ()
{
var _case163 = A2(Native.Utils.compare,
k,
t._1);
switch (_case163.ctor)
{case
"EQ" :
return A5(RBNode,
t._0,
t._1,
v,
t._3,
t._4)
case
"GT" :
return A5(RBNode,
t._0,
t._1,
t._2,
t._3,
ins(t._4))
case
"LT" :
return A5(RBNode,
t._0,
t._1,
t._2,
ins(t._3),
t._4)}
_E.Case($moduleName,
"between lines 156 and 160");
}();
return fixUp(h)
}()}
_E.Case($moduleName,
"between lines 153 and 161");
}()
};
return ensureBlackRoot(ins(t))
}()
});
var fromList = function (assocs)
{
return A3(List.foldl,
F2(function (arg1,d)
{
return function ()
{
switch (arg1.ctor)
{case
"_Tuple2" :
return A3(insert,arg1._0,arg1._1,d)}
_E.Case($moduleName,
"on line 348, column 43 to 55");
}()
}),
empty,
assocs)
};
var intersect = F2(function (t1,t2)
{
return function ()
{
var combine = F3(function (k,v,t)
{
return A2(member,
k,
t2) ? A3(insert,
k,
v,
t) : t
});
return A3(foldl,combine,empty,t1)
}()
});
var singleton = F2(function (k,v)
{
return A3(insert,k,v,RBEmpty(LBlack))
});
var union = F2(function (t1,t2)
{
return A3(foldl,insert,t2,t1)
});
var BBlack = {ctor: "BBlack"};
var blackish = function (arg0)
{
return function ()
{
switch (arg0.ctor)
{case
"RBNode" :
return _N.eq(arg0._0,Black) || _N.eq(arg0._0,BBlack)}
_E.Case($moduleName,"on line 243, column 31 to 56");
}()
};
var isBBlack = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
switch (t._0.ctor)
{case
"LBBlack" :
return true}
break;
case
"RBNode" :
return function ()
{
switch (t._0.ctor)
{case
"BBlack" :
return true}
return false
}()}
return false
}()
};
var lessBlack = function (c)
{
return function ()
{
switch (c.ctor)
{case
"BBlack" :
return Black
case
"Black" :
return Red
case
"NBlack" :
return NBlack
case
"Red" :
return NBlack}
_E.Case($moduleName,"between lines 185 and 189");
}()
};
var balance_node = function (t)
{
return function ()
{
var assemble = function (col)
{
return function (xk)
{
return function (xv)
{
return function (yk)
{
return function (yv)
{
return function (zk)
{
return function (zv)
{
return function (a)
{
return function (b)
{
return function (c)
{
return function (d)
{
return A5(RBNode,
lessBlack(col),
yk,
yv,
A5(RBNode,
Black,
xk,
xv,
a,
b),
A5(RBNode,
Black,
zk,
zv,
c,
d))
}
}
}
}
}
}
}
}
}
}
};
return blackish(t) ? function ()
{
switch (t.ctor)
{case
"RBNode" :
switch (t._3.ctor)
{case
"RBNode" :
switch (t._3._0.ctor)
{case
"Red" :
switch (t._3._3.ctor)
{case
"RBNode" :
switch (t._3._3._0.ctor)
{case
"Red" :
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)}
break;}
switch (t._3._4.ctor)
{case
"RBNode" :
switch (t._3._4._0.ctor)
{case
"Red" :
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)}
break;}
break;}
break;}
switch (t._4.ctor)
{case
"RBNode" :
switch (t._4._0.ctor)
{case
"Red" :
switch (t._4._3.ctor)
{case
"RBNode" :
switch (t._4._3._0.ctor)
{case
"Red" :
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)}
break;}
switch (t._4._4.ctor)
{case
"RBNode" :
switch (t._4._4._0.ctor)
{case
"Red" :
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)}
break;}
break;}
break;}
switch (t._0.ctor)
{case
"BBlack" :
switch (t._4.ctor)
{case
"RBNode" :
switch (t._4._0.ctor)
{case
"NBlack" :
switch (t._4._3.ctor)
{case
"RBNode" :
switch (t._4._3._0.ctor)
{case
"Black" :
return function ()
{
switch (t._4._4.ctor)
{case
"RBNode" :
switch (t._4._4._0.ctor)
{case
"Black" :
return A5(RBNode,
Black,
t._4._3._1,
t._4._3._2,
A5(RBNode,
Black,
t._1,
t._2,
t._3,
t._4._3._3),
A5(balance,
Black,
t._4._1,
t._4._2,
t._4._3._4,
redden(t._4._4)))}
break;}
return t
}()}
break;}
break;}
break;}
switch (t._3.ctor)
{case
"RBNode" :
switch (t._3._0.ctor)
{case
"NBlack" :
switch (t._3._4.ctor)
{case
"RBNode" :
switch (t._3._4._0.ctor)
{case
"Black" :
return function ()
{
switch (t._3._3.ctor)
{case
"RBNode" :
switch (t._3._3._0.ctor)
{case
"Black" :
return A5(RBNode,
Black,
t._3._4._1,
t._3._4._2,
A5(balance,
Black,
t._3._1,
t._3._2,
redden(t._3._3),
t._3._4._3),
A5(RBNode,
Black,
t._1,
t._2,
t._3._4._4,
t._4))}
break;}
return t
}()}
break;}
break;}
break;}
break;}
break;}
return t
}() : t
}()
};
var balance = F5(function (c,k,v,l,r)
{
return balance_node(A5(RBNode,c,k,v,l,r))
});
var lessBlackTree = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
return RBEmpty(LBlack)
case
"RBNode" :
return A5(RBNode,
lessBlack(t._0),
t._1,
t._2,
t._3,
t._4)}
_E.Case($moduleName,"between lines 197 and 199");
}()
};
var moreBlack = function (c)
{
return function ()
{
switch (c.ctor)
{case
"BBlack" :
return BBlack
case
"Black" :
return BBlack
case
"NBlack" :
return Red
case
"Red" :
return Black}
_E.Case($moduleName,"between lines 179 and 183");
}()
};
var bubble = F5(function (c,k,v,l,r)
{
return isBBlack(l) || isBBlack(r) ? A5(balance,
moreBlack(c),
k,
v,
lessBlackTree(l),
lessBlackTree(r)) : A5(RBNode,
c,
k,
v,
l,
r)
});
var remove_max = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBNode" :
switch (t._4.ctor)
{case
"RBEmpty" :
return rem(t)}
return A5(bubble,
t._0,
t._1,
t._2,
t._3,
remove_max(t._4))}
_E.Case($moduleName,"between lines 234 and 236");
}()
};
var rem = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBNode" :
switch (t._3.ctor)
{case
"RBEmpty" :
switch (t._4.ctor)
{case
"RBEmpty" :
return function ()
{
switch (t._0.ctor)
{case
"Black" :
return RBEmpty(LBBlack)
case
"Red" :
return RBEmpty(LBlack)}
_E.Case($moduleName,
"between lines 213 and 216");
}()}
break;}
switch (t._0.ctor)
{case
"Black" :
switch (t._3.ctor)
{case
"RBEmpty" :
switch (t._4.ctor)
{case
"RBNode" :
return A5(RBNode,
Black,
t._4._1,
t._4._2,
t._4._3,
t._4._4)}
break;
case
"RBNode" :
switch (t._4.ctor)
{case
"RBEmpty" :
return A5(RBNode,
Black,
t._3._1,
t._3._2,
t._3._3,
t._3._4)}
break;}
break;}
return function ()
{
var l$ = remove_max(t._3);
var $ = max(t._3),k = $._0,v = $._1;
return A5(bubble,t._0,k,v,l$,t._4)
}()}
_E.Case($moduleName,"between lines 212 and 224");
}()
};
var del = F2(function (k,t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
return t
case
"RBNode" :
return function ()
{
var _case293 = A2(Native.Utils.compare,
k,
t._1);
switch (_case293.ctor)
{case
"EQ" :
return rem(t)
case
"GT" :
return A5(bubble,
t._0,
t._1,
t._2,
t._3,
A2(del,k,t._4))
case
"LT" :
return A5(bubble,
t._0,
t._1,
t._2,
A2(del,k,t._3),
t._4)}
_E.Case($moduleName,
"between lines 205 and 208");
}()}
_E.Case($moduleName,"between lines 203 and 208");
}()
});
var remove = F2(function (k,t)
{
return blacken(A2(del,k,t))
});
var diff = F2(function (t1,t2)
{
return A3(foldl,
F3(function (k,v,t)
{
return A2(remove,k,t)
}),
t1,
t2)
});
var moreBlackTree = function (t)
{
return function ()
{
switch (t.ctor)
{case
"RBEmpty" :
return RBEmpty(LBBlack)
case
"RBNode" :
return A5(RBNode,
moreBlack(t._0),
t._1,
t._2,
t._3,
t._4)}
_E.Case($moduleName,"between lines 192 and 194");
}()
};
elm.Dict.values = {_op: _op, empty: empty, singleton: singleton, insert: insert, lookup: lookup, findWithDefault: findWithDefault, remove: remove, member: member, foldl: foldl, foldr: foldr, map: map, union: union, intersect: intersect, diff: diff, keys: keys, values: values, toList: toList, fromList: fromList};
return elm.Dict.values
};Elm.Either = Elm.Either || {};
Elm.Either.make = function (elm)
{
elm.Either = elm.Either || {};
if (elm.Either.values)
return elm.Either.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Either";
var List = Elm.List.make(elm);
var _op = {};
var Right = function (a)
{
return {ctor: "Right", _0: a}
};
var isRight = function (e)
{
return function ()
{
switch (e.ctor)
{case
"Right" :
return true}
return false
}()
};
var Left = function (a)
{
return {ctor: "Left", _0: a}
};
var consEither = F2(function (e,arg0)
{
return function ()
{
switch (arg0.ctor)
{case
"_Tuple2" :
return function ()
{
switch (e.ctor)
{case
"Left" :
return {ctor: "_Tuple2", _0: {ctor: "::", _0: e._0, _1: arg0._0}, _1: arg0._1}
case
"Right" :
return {ctor: "_Tuple2", _0: arg0._0, _1: {ctor: "::", _0: e._0, _1: arg0._1}}}
_E.Case($moduleName,
"between lines 66 and 68");
}()}
_E.Case($moduleName,"between lines 66 and 68");
}()
});
var partition = function (es)
{
return A3(List.foldr,
consEither,
{ctor: "_Tuple2", _0: _J.toList([]), _1: _J.toList([])},
es)
};
var consLeft = F2(function (e,vs)
{
return function ()
{
switch (e.ctor)
{case
"Left" :
return {ctor: "::", _0: e._0, _1: vs}
case
"Right" :
return vs}
_E.Case($moduleName,"between lines 56 and 58");
}()
});
var lefts = function (es)
{
return A3(List.foldr,consLeft,_J.toList([]),es)
};
var consRight = F2(function (e,vs)
{
return function ()
{
switch (e.ctor)
{case
"Left" :
return vs
case
"Right" :
return {ctor: "::", _0: e._0, _1: vs}}
_E.Case($moduleName,"between lines 61 and 63");
}()
});
var rights = function (es)
{
return A3(List.foldr,consRight,_J.toList([]),es)
};
var either = F3(function (f,g,e)
{
return function ()
{
switch (e.ctor)
{case
"Left" :
return f(e._0)
case
"Right" :
return g(e._0)}
_E.Case($moduleName,"on line 31, column 16 to 60");
}()
});
var isLeft = function (e)
{
return function ()
{
switch (e.ctor)
{case
"Left" :
return true}
return false
}()
};
elm.Either.values = {_op: _op, either: either, isLeft: isLeft, isRight: isRight, lefts: lefts, rights: rights, partition: partition, consLeft: consLeft, consRight: consRight, consEither: consEither, Left: Left, Right: Right};
return elm.Either.values
};Elm.Http = Elm.Http || {};
Elm.Http.make = function (elm)
{
elm.Http = elm.Http || {};
if (elm.Http.values)
return elm.Http.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Http";
var Signal = Elm.Signal.make(elm);
var Native = Native || {};
Native.Http = Elm.Native.Http.make(elm);
var _op = {};
var send = Native.Http.send;
var Waiting = {ctor: "Waiting"};
var Success = function (a)
{
return {ctor: "Success", _0: a}
};
var Request = F4(function (a,b,c,d)
{
return {_: {}, body: c, headers: d, url: b, verb: a}
});
var get = function (url)
{
return A4(Request,"GET",url,"",_J.toList([]))
};
var sendGet = function (reqs)
{
return send(A2(Signal.lift,get,reqs))
};
var post = F2(function (url,body)
{
return A4(Request,"POST",url,body,_J.toList([]))
});
var request = Request;
var Failure = F2(function (a,b)
{
return {ctor: "Failure", _0: a, _1: b}
});
elm.Http.values = {_op: _op, request: request, get: get, post: post, send: send, sendGet: sendGet, Success: Success, Waiting: Waiting, Failure: Failure, Request: Request};
return elm.Http.values
};Elm.JavaScript = Elm.JavaScript || {};
Elm.JavaScript.make = function (elm)
{
elm.JavaScript = elm.JavaScript || {};
if (elm.JavaScript.values)
return elm.JavaScript.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "JavaScript";
var Native = Native || {};
Native.JavaScript = Elm.Native.JavaScript.make(elm);
var _op = {};
var toString = Native.JavaScript.toString;
var toList = Native.JavaScript.toList;
var toInt = Native.JavaScript.toInt;
var toFloat = Native.JavaScript.toFloat;
var toBool = Native.JavaScript.toBool;
var fromString = Native.JavaScript.fromString;
var fromList = Native.JavaScript.fromList;
var fromInt = Native.JavaScript.fromInt;
var fromFloat = Native.JavaScript.fromFloat;
var fromBool = Native.JavaScript.fromBool;
var JSString = {ctor: "JSString"};
var JSObject = {ctor: "JSObject"};
var JSNumber = {ctor: "JSNumber"};
var JSDomNode = {ctor: "JSDomNode"};
var JSBool = {ctor: "JSBool"};
var JSArray = function (a)
{
return {ctor: "JSArray", _0: a}
};
elm.JavaScript.values = {_op: _op, toList: toList, toInt: toInt, toFloat: toFloat, toBool: toBool, toString: toString, fromList: fromList, fromInt: fromInt, fromFloat: fromFloat, fromBool: fromBool, fromString: fromString, JSNumber: JSNumber, JSBool: JSBool, JSString: JSString, JSArray: JSArray, JSDomNode: JSDomNode, JSObject: JSObject};
return elm.JavaScript.values
};Elm.Json = Elm.Json || {};
Elm.Json.make = function (elm)
{
elm.Json = elm.Json || {};
if (elm.Json.values)
return elm.Json.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Json";
var Basics = Elm.Basics.make(elm);
var Dict = Elm.Dict.make(elm);
var Maybe = Elm.Maybe.make(elm);
var JavaScript = Elm.JavaScript.make(elm);
var Native = Native || {};
Native.Json = Elm.Native.Json.make(elm);
var JavaScript = Elm.JavaScript.make(elm);
var _op = {};
var toString = F2(function (sep,v)
{
return JavaScript.toString(A2(Native.Json.toJSString,sep,v))
});
var toJSString = Native.Json.toJSString;
var toJSObject = Native.Json.toJSObject;
var fromString = function (s)
{
return Native.Json.fromJSString(JavaScript.fromString(s))
};
var fromJSString = Native.Json.fromJSString;
var fromJSObject = Native.Json.fromJSObject;
var String = function (a)
{
return {ctor: "String", _0: a}
};
var Object = function (a)
{
return {ctor: "Object", _0: a}
};
var Number = function (a)
{
return {ctor: "Number", _0: a}
};
var Null = {ctor: "Null"};
var Boolean = function (a)
{
return {ctor: "Boolean", _0: a}
};
var Array = function (a)
{
return {ctor: "Array", _0: a}
};
elm.Json.values = {_op: _op, toString: toString, toJSString: toJSString, fromString: fromString, fromJSString: fromJSString, fromJSObject: fromJSObject, toJSObject: toJSObject, String: String, Number: Number, Boolean: Boolean, Null: Null, Array: Array, Object: Object};
return elm.Json.values
};Elm.Keyboard = Elm.Keyboard || {};
Elm.Keyboard.make = function (elm)
{
elm.Keyboard = elm.Keyboard || {};
if (elm.Keyboard.values)
return elm.Keyboard.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Keyboard";
var Signal = Elm.Signal.make(elm);
var Native = Native || {};
Native.Keyboard = Elm.Native.Keyboard.make(elm);
var _op = {};
var lastPressed = Native.Keyboard.lastPressed;
var keysDown = Native.Keyboard.keysDown;
var isDown = Native.Keyboard.isDown;
var shift = isDown(16);
var space = isDown(32);
var enter = isDown(13);
var directions = Native.Keyboard.directions;
var wasd = A4(directions,87,83,65,68);
var ctrl = isDown(17);
var arrows = A4(directions,38,40,37,39);
elm.Keyboard.values = {_op: _op, directions: directions, arrows: arrows, wasd: wasd, isDown: isDown, shift: shift, ctrl: ctrl, space: space, enter: enter, keysDown: keysDown, lastPressed: lastPressed};
return elm.Keyboard.values
};Elm.List = Elm.List || {};
Elm.List.make = function (elm)
{
elm.List = elm.List || {};
if (elm.List.values)
return elm.List.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "List";
var Basics = Elm.Basics.make(elm);
var Native = Native || {};
Native.List = Elm.Native.List.make(elm);
var _op = {};
var zipWith = Native.List.zipWith;
var zip = Native.List.zip;
var take = Native.List.take;
var tail = Native.List.tail;
var scanl1 = Native.List.scanl1;
var scanl = Native.List.scanl;
var reverse = Native.List.reverse;
var repeat = Native.List.repeat;
var map = Native.List.map;
var length = Native.List.length;
var last = Native.List.last;
var join = Native.List.join;
var isEmpty = function (xs)
{
return function ()
{
switch (xs.ctor)
{case
"[]" :
return true}
return false
}()
};
var head = Native.List.head;
var foldr1 = Native.List.foldr1;
var foldr = Native.List.foldr;
var foldl1 = Native.List.foldl1;
var maximum = foldl1(Basics.max);
var minimum = foldl1(Basics.min);
var foldl = Native.List.foldl;
var or = A2(foldl,
F2(function (x,y)
{
return x || y
}),
false);
var product = A2(foldl,
F2(function (x,y)
{
return x * y
}),
1);
var sum = A2(foldl,
F2(function (x,y)
{
return x + y
}),
0);
var filter = Native.List.filter;
var drop = Native.List.drop;
var concat = Native.List.concat;
var concatMap = F2(function (f,list)
{
return concat(A2(map,f,list))
});
var any = Native.List.any;
var and = A2(foldl,
F2(function (x,y)
{
return x && y
}),
true);
var all = Native.List.all;
_op["::"] = Native.List.cons;
var intersperse = F2(function (sep,xs)
{
return function ()
{
switch (xs.ctor)
{case
"::" :
switch (xs._1.ctor)
{case
"::" :
return {ctor: "::", _0: xs._0, _1: {ctor: "::", _0: sep, _1: A2(intersperse,
sep,
{ctor: "::", _0: xs._1._0, _1: xs._1._1})}}
case
"[]" :
return _J.toList([xs._0])}
break;
case
"[]" :
return _J.toList([])}
_E.Case($moduleName,"between lines 209 and 214");
}()
});
var partition = F2(function (pred,lst)
{
return function ()
{
switch (lst.ctor)
{case
"::" :
return function ()
{
var $ = A2(partition,pred,lst._1),
bs = $._0,
cs = $._1;
return pred(lst._0) ? {ctor: "_Tuple2", _0: {ctor: "::", _0: lst._0, _1: bs}, _1: cs} : {ctor: "_Tuple2", _0: bs, _1: {ctor: "::", _0: lst._0, _1: cs}}
}()
case
"[]" :
return {ctor: "_Tuple2", _0: _J.toList([]), _1: _J.toList([])}}
_E.Case($moduleName,"between lines 166 and 176");
}()
});
var unzip = function (pairs)
{
return function ()
{
switch (pairs.ctor)
{case
"::" :
switch (pairs._0.ctor)
{case
"_Tuple2" :
return function ()
{
var $ = unzip(pairs._1),xs = $._0,ys = $._1;
return {ctor: "_Tuple2", _0: {ctor: "::", _0: pairs._0._0, _1: xs}, _1: {ctor: "::", _0: pairs._0._1, _1: ys}}
}()}
break;
case
"[]" :
return {ctor: "_Tuple2", _0: _J.toList([]), _1: _J.toList([])}}
_E.Case($moduleName,"between lines 191 and 199");
}()
};
_op["++"] = Native.List.append;
elm.List.values = {_op: _op, head: head, tail: tail, last: last, isEmpty: isEmpty, map: map, foldl: foldl, foldr: foldr, foldl1: foldl1, foldr1: foldr1, scanl: scanl, scanl1: scanl1, filter: filter, length: length, reverse: reverse, all: all, any: any, and: and, or: or, concat: concat, concatMap: concatMap, sum: sum, product: product, maximum: maximum, minimum: minimum, partition: partition, zip: zip, zipWith: zipWith, unzip: unzip, join: join, intersperse: intersperse, take: take, drop: drop, repeat: repeat};
return elm.List.values
};Elm.Maybe = Elm.Maybe || {};
Elm.Maybe.make = function (elm)
{
elm.Maybe = elm.Maybe || {};
if (elm.Maybe.values)
return elm.Maybe.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Maybe";
var Basics = Elm.Basics.make(elm);
var List = Elm.List.make(elm);
var _op = {};
var Nothing = {ctor: "Nothing"};
var Just = function (a)
{
return {ctor: "Just", _0: a}
};
var maybe = F3(function (b,f,m)
{
return function ()
{
switch (m.ctor)
{case
"Just" :
return f(m._0)
case
"Nothing" :
return b}
_E.Case($moduleName,"between lines 28 and 33");
}()
});
var cons = F2(function (mx,xs)
{
return A3(maybe,
xs,
function (x)
{
return {ctor: "::", _0: x, _1: xs}
},
mx)
});
var justs = A2(List.foldr,cons,_J.toList([]));
var isJust = A2(maybe,
false,
function (arg0)
{
return function ()
{
return true
}()
});
var isNothing = function ($)
{
return Basics.not(isJust($))
};
elm.Maybe.values = {_op: _op, maybe: maybe, isJust: isJust, isNothing: isNothing, cons: cons, justs: justs, Just: Just, Nothing: Nothing};
return elm.Maybe.values
};Elm.Mouse = Elm.Mouse || {};
Elm.Mouse.make = function (elm)
{
elm.Mouse = elm.Mouse || {};
if (elm.Mouse.values)
return elm.Mouse.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Mouse";
var Signal = Elm.Signal.make(elm);
var Native = Native || {};
Native.Mouse = Elm.Native.Mouse.make(elm);
var _op = {};
var y = Native.Mouse.y;
var x = Native.Mouse.x;
var position = Native.Mouse.position;
var isDown = Native.Mouse.isDown;
var isClicked = Native.Mouse.isClicked;
var clicks = Native.Mouse.clicks;
elm.Mouse.values = {_op: _op, position: position, x: x, y: y, isDown: isDown, isClicked: isClicked, clicks: clicks};
return elm.Mouse.values
};Elm.Prelude = Elm.Prelude || {};
Elm.Prelude.make = function (elm)
{
elm.Prelude = elm.Prelude || {};
if (elm.Prelude.values)
return elm.Prelude.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Prelude";
var Basics = Elm.Basics.make(elm);
var Maybe = Elm.Maybe.make(elm);
var Native = Native || {};
Native.Prelude = Elm.Native.Prelude.make(elm);
var Native = Native || {};
Native.Show = Elm.Native.Show.make(elm);
var _op = {};
var show = Native.Show.show;
var readInt = Native.Prelude.readInt;
var readFloat = Native.Prelude.readFloat;
elm.Prelude.values = {_op: _op, show: show, readInt: readInt, readFloat: readFloat};
return elm.Prelude.values
};Elm.Random = Elm.Random || {};
Elm.Random.make = function (elm)
{
elm.Random = elm.Random || {};
if (elm.Random.values)
return elm.Random.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Random";
var Signal = Elm.Signal.make(elm);
var Native = Native || {};
Native.Random = Elm.Native.Random.make(elm);
var _op = {};
var range = Native.Random.range;
var floatList = Native.Random.floatList;
var $float = Native.Random.float_;
elm.Random.values = {_op: _op, range: range, $float: $float, floatList: floatList};
return elm.Random.values
};Elm.Set = Elm.Set || {};
Elm.Set.make = function (elm)
{
elm.Set = elm.Set || {};
if (elm.Set.values)
return elm.Set.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Set";
var Maybe = Elm.Maybe.make(elm);
var Dict = Elm.Dict.make(elm);
var List = Elm.List.make(elm);
var _op = {};
var union = Dict.union;
var toList = Dict.keys;
var singleton = function (k)
{
return A2(Dict.singleton,k,{ctor: "_Tuple0"})
};
var remove = Dict.remove;
var member = Dict.member;
var intersect = Dict.intersect;
var insert = function (k)
{
return A2(Dict.insert,k,{ctor: "_Tuple0"})
};
var foldr = F3(function (f,b,s)
{
return A3(Dict.foldr,
F3(function (k,arg1,b)
{
return function ()
{
return A2(f,k,b)
}()
}),
b,
s)
});
var foldl = F3(function (f,b,s)
{
return A3(Dict.foldl,
F3(function (k,arg1,b)
{
return function ()
{
return A2(f,k,b)
}()
}),
b,
s)
});
var empty = Dict.empty;
var fromList = function (xs)
{
return A3(List.foldl,insert,empty,xs)
};
var map = F2(function (f,s)
{
return fromList(A2(List.map,f,toList(s)))
});
var diff = Dict.diff;
elm.Set.values = {_op: _op, empty: empty, singleton: singleton, insert: insert, remove: remove, member: member, foldl: foldl, foldr: foldr, map: map, union: union, intersect: intersect, diff: diff, toList: toList, fromList: fromList};
return elm.Set.values
};Elm.Signal = Elm.Signal || {};
Elm.Signal.make = function (elm)
{
elm.Signal = elm.Signal || {};
if (elm.Signal.values)
return elm.Signal.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Signal";
var Native = Native || {};
Native.Signal = Elm.Native.Signal.make(elm);
var List = Elm.List.make(elm);
var _op = {};
_op["~"] = F2(function (sf,s)
{
return A3(Native.Signal.lift2,
F2(function (f,x)
{
return f(x)
}),
sf,
s)
});
var sampleOn = Native.Signal.sampleOn;
var merges = Native.Signal.merges;
var merge = Native.Signal.merge;
var lift8 = Native.Signal.lift8;
var lift7 = Native.Signal.lift7;
var lift6 = Native.Signal.lift6;
var lift5 = Native.Signal.lift5;
var lift4 = Native.Signal.lift4;
var lift3 = Native.Signal.lift3;
var lift2 = Native.Signal.lift2;
var lift = Native.Signal.lift;
var keepWhen = Native.Signal.keepWhen;
var keepIf = Native.Signal.keepIf;
var foldp = Native.Signal.foldp;
var dropWhen = Native.Signal.dropWhen;
var dropRepeats = Native.Signal.dropRepeats;
var dropIf = Native.Signal.dropIf;
var countIf = Native.Signal.countIf;
var count = Native.Signal.count;
var constant = Native.Signal.constant;
var combine = A2(List.foldr,
Native.Signal.lift2(F2(function (x,y)
{
return {ctor: "::", _0: x, _1: y}
})),
Native.Signal.constant(_J.toList([])));
var Signal = {ctor: "Signal"};
_op["<~"] = F2(function (f,s)
{
return A2(Native.Signal.lift,f,s)
});
elm.Signal.values = {_op: _op, constant: constant, lift: lift, lift2: lift2, lift3: lift3, lift4: lift4, lift5: lift5, lift6: lift6, lift7: lift7, lift8: lift8, foldp: foldp, merge: merge, merges: merges, combine: combine, count: count, countIf: countIf, keepIf: keepIf, dropIf: dropIf, keepWhen: keepWhen, dropWhen: dropWhen, dropRepeats: dropRepeats, sampleOn: sampleOn, Signal: Signal};
return elm.Signal.values
};Elm.String = Elm.String || {};
Elm.String.make = function (elm)
{
elm.String = elm.String || {};
if (elm.String.values)
return elm.String.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "String";
var Native = Native || {};
Native.String = Elm.Native.String.make(elm);
var Maybe = Elm.Maybe.make(elm);
var _op = {};
var words = Native.String.words;
var uncons = Native.String.uncons;
var trimRight = Native.String.trimRight;
var trimLeft = Native.String.trimLeft;
var trim = Native.String.trim;
var toUpper = Native.String.toUpper;
var toLower = Native.String.toLower;
var toList = Native.String.toList;
var toInt = Native.String.toInt;
var toFloat = Native.String.toFloat;
var sub = Native.String.sub;
var startsWith = Native.String.startsWith;
var split = Native.String.split;
var right = Native.String.right;
var reverse = Native.String.reverse;
var repeat = Native.String.repeat;
var padRight = Native.String.padRight;
var padLeft = Native.String.padLeft;
var pad = Native.String.pad;
var map = Native.String.map;
var lines = Native.String.lines;
var length = Native.String.length;
var left = Native.String.left;
var join = Native.String.join;
var isEmpty = Native.String.isEmpty;
var indices = Native.String.indexes;
var indexes = Native.String.indexes;
var fromList = Native.String.fromList;
var foldr = Native.String.foldr;
var foldl = Native.String.foldl;
var filter = Native.String.filter;
var endsWith = Native.String.endsWith;
var dropRight = Native.String.dropRight;
var dropLeft = Native.String.dropLeft;
var contains = Native.String.contains;
var cons = Native.String.cons;
var concat = Native.String.concat;
var append = Native.String.append;
var any = Native.String.any;
var all = Native.String.all;
elm.String.values = {_op: _op, isEmpty: isEmpty, cons: cons, uncons: uncons, append: append, concat: concat, length: length, map: map, filter: filter, reverse: reverse, foldl: foldl, foldr: foldr, split: split, join: join, repeat: repeat, sub: sub, left: left, right: right, dropLeft: dropLeft, dropRight: dropRight, pad: pad, padLeft: padLeft, padRight: padRight, trim: trim, trimLeft: trimLeft, trimRight: trimRight, words: words, lines: lines, toUpper: toUpper, toLower: toLower, any: any, all: all, contains: contains, startsWith: startsWith, endsWith: endsWith, indexes: indexes, indices: indices, toInt: toInt, toFloat: toFloat, toList: toList, fromList: fromList};
return elm.String.values
};Elm.Text = Elm.Text || {};
Elm.Text.make = function (elm)
{
elm.Text = elm.Text || {};
if (elm.Text.values)
return elm.Text.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Text";
var Basics = Elm.Basics.make(elm);
var Color = Elm.Color.make(elm);
var Graphics = Graphics || {};
Graphics.Element = Elm.Graphics.Element.make(elm);
var Maybe = Elm.Maybe.make(elm);
var JavaScript = Elm.JavaScript.make(elm);
var Native = Native || {};
Native.Text = Elm.Native.Text.make(elm);
var _op = {};
var underline = Native.Text.underline;
var typeface = Native.Text.typeface;
var toText = Native.Text.toText;
var text = Native.Text.text;
var strikeThrough = Native.Text.strikeThrough;
var righted = Native.Text.righted;
var plainText = Native.Text.plainText;
var overline = Native.Text.overline;
var monospace = Native.Text.monospace;
var markdown = Native.Text.markdown;
var link = Native.Text.link;
var justified = Native.Text.justified;
var italic = Native.Text.italic;
var height = Native.Text.height;
var header = Native.Text.header;
var color = Native.Text.color;
var centered = Native.Text.centered;
var bold = Native.Text.bold;
var asText = Native.Text.asText;
var Text = {ctor: "Text"};
elm.Text.values = {_op: _op, toText: toText, typeface: typeface, monospace: monospace, header: header, link: link, height: height, color: color, bold: bold, italic: italic, overline: overline, underline: underline, strikeThrough: strikeThrough, justified: justified, centered: centered, righted: righted, text: text, plainText: plainText, markdown: markdown, asText: asText, Text: Text};
return elm.Text.values
};Elm.Time = Elm.Time || {};
Elm.Time.make = function (elm)
{
elm.Time = elm.Time || {};
if (elm.Time.values)
return elm.Time.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Time";
var Basics = Elm.Basics.make(elm);
var Native = Native || {};
Native.Time = Elm.Native.Time.make(elm);
var Signal = Elm.Signal.make(elm);
var _op = {};
var timestamp = Native.Time.timestamp;
var since = Native.Time.since;
var millisecond = 1;
var second = 1000 * millisecond;
var minute = 60 * second;
var inSeconds = function (t)
{
return t / second
};
var inMinutes = function (t)
{
return t / minute
};
var inMilliseconds = function (t)
{
return t
};
var hour = 60 * minute;
var inHours = function (t)
{
return t / hour
};
var fpsWhen = Native.Time.fpsWhen;
var fps = Native.Time.fps;
var every = Native.Time.every;
var delay = Native.Time.delay;
elm.Time.values = {_op: _op, millisecond: millisecond, second: second, minute: minute, hour: hour, inMilliseconds: inMilliseconds, inSeconds: inSeconds, inMinutes: inMinutes, inHours: inHours, fps: fps, fpsWhen: fpsWhen, every: every, since: since, timestamp: timestamp, delay: delay};
return elm.Time.values
};Elm.Touch = Elm.Touch || {};
Elm.Touch.make = function (elm)
{
elm.Touch = elm.Touch || {};
if (elm.Touch.values)
return elm.Touch.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Touch";
var Signal = Elm.Signal.make(elm);
var Native = Native || {};
Native.Touch = Elm.Native.Touch.make(elm);
var Time = Elm.Time.make(elm);
var _op = {};
var touches = Native.Touch.touches;
var taps = Native.Touch.taps;
var Touch = F6(function (a,b,c,d,e,f)
{
return {_: {}, id: c, t0: f, x: a, x0: d, y: b, y0: e}
});
elm.Touch.values = {_op: _op, touches: touches, taps: taps, Touch: Touch};
return elm.Touch.values
};Elm.Transform2D = Elm.Transform2D || {};
Elm.Transform2D.make = function (elm)
{
elm.Transform2D = elm.Transform2D || {};
if (elm.Transform2D.values)
return elm.Transform2D.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Transform2D";
var Native = Native || {};
Native.Transform2D = Elm.Native.Transform2D.make(elm);
var _op = {};
var rotation = Native.Transform2D.rotation;
var multiply = Native.Transform2D.multiply;
var matrix = Native.Transform2D.matrix;
var identity = Native.Transform2D.identity;
var Transform2D = {ctor: "Transform2D"};
elm.Transform2D.values = {_op: _op, identity: identity, matrix: matrix, rotation: rotation, multiply: multiply, Transform2D: Transform2D};
return elm.Transform2D.values
};Elm.WebSocket = Elm.WebSocket || {};
Elm.WebSocket.make = function (elm)
{
elm.WebSocket = elm.WebSocket || {};
if (elm.WebSocket.values)
return elm.WebSocket.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "WebSocket";
var Signal = Elm.Signal.make(elm);
var Basics = Elm.Basics.make(elm);
var Native = Native || {};
Native.WebSocket = Elm.Native.WebSocket.make(elm);
var _op = {};
var connect = Native.WebSocket.connect;
elm.WebSocket.values = {_op: _op, connect: connect};
return elm.WebSocket.values
};Elm.Window = Elm.Window || {};
Elm.Window.make = function (elm)
{
elm.Window = elm.Window || {};
if (elm.Window.values)
return elm.Window.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Window";
var Signal = Elm.Signal.make(elm);
var Native = Native || {};
Native.Window = Elm.Native.Window.make(elm);
var _op = {};
var width = Native.Window.width;
var height = Native.Window.height;
var dimensions = Native.Window.dimensions;
elm.Window.values = {_op: _op, dimensions: dimensions, width: width, height: height};
return elm.Window.values
};Elm.Graphics = Elm.Graphics || {};
Elm.Graphics.Collage = Elm.Graphics.Collage || {};
Elm.Graphics.Collage.make = function (elm)
{
elm.Graphics = elm.Graphics || {};
elm.Graphics.Collage = elm.Graphics.Collage || {};
if (elm.Graphics.Collage.values)
return elm.Graphics.Collage.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Graphics.Collage";
var Basics = Elm.Basics.make(elm);
var List = Elm.List.make(elm);
var Either = Elm.Either.make(elm);
var Transform2D = Elm.Transform2D.make(elm);
var Native = Native || {};
Native.Graphics = Native.Graphics || {};
Native.Graphics.Collage = Elm.Native.Graphics.Collage.make(elm);
var Graphics = Graphics || {};
Graphics.Element = Elm.Graphics.Element.make(elm);
var Color = Elm.Color.make(elm);
var Maybe = Elm.Maybe.make(elm);
var JavaScript = Elm.JavaScript.make(elm);
var _op = {};
var segment = F2(function (p1,p2)
{
return _J.toList([p1,p2])
});
var scale = F2(function (s,f)
{
return _N.replace([["scale",f.scale * s]],f)
});
var rotate = F2(function (t,f)
{
return _N.replace([["theta",f.theta + t]],f)
});
var rect = F2(function (w,h)
{
return function ()
{
var hw = w / 2;
var hh = h / 2;
return _J.toList([{ctor: "_Tuple2", _0: 0 - hw, _1: 0 - hh},
{ctor: "_Tuple2", _0: 0 - hw, _1: hh},
{ctor: "_Tuple2", _0: hw, _1: hh},
{ctor: "_Tuple2", _0: hw, _1: 0 - hh}])
}()
});
var square = function (n)
{
return A2(rect,n,n)
};
var polygon = function (points)
{
return points
};
var path = function (ps)
{
return ps
};
var oval = F2(function (w,h)
{
return function ()
{
var n = 50;
var t = 2 * Basics.pi / n;
var hw = w / 2;
var hh = h / 2;
var f = function (i)
{
return {ctor: "_Tuple2", _0: hw * Basics.cos(t * i), _1: hh * Basics.sin(t * i)}
};
return A2(List.map,f,_L.range(0,n - 1))
}()
});
var ngon = F2(function (n,r)
{
return function ()
{
var m = Basics.toFloat(n);
var t = 2 * Basics.pi / m;
var f = function (i)
{
return {ctor: "_Tuple2", _0: r * Basics.cos(t * i), _1: r * Basics.sin(t * i)}
};
return A2(List.map,f,_L.range(0,m - 1))
}()
});
var moveY = F2(function (y,f)
{
return _N.replace([["y",f.y + y]],f)
});
var moveX = F2(function (x,f)
{
return _N.replace([["x",f.x + x]],f)
});
var move = F2(function (arg1,f)
{
return function ()
{
switch (arg1.ctor)
{case
"_Tuple2" :
return _N.replace([["x",f.x + arg1._0],
["y",f.y + arg1._1]],
f)}
_E.Case($moduleName,
"on line 182, column 20 to 48");
}()
});
var form = function (f)
{
return {_: {}, alpha: 1, form: f, scale: 1, theta: 0, x: 0, y: 0}
};
var collage = Native.Graphics.Collage.collage;
var circle = function (r)
{
return A2(oval,2 * r,2 * r)
};
var alpha = F2(function (a,f)
{
return _N.replace([["alpha",a]],f)
});
var Texture = function (a)
{
return {ctor: "Texture", _0: a}
};
var Solid = function (a)
{
return {ctor: "Solid", _0: a}
};
var Smooth = {ctor: "Smooth"};
var Sharp = function (a)
{
return {ctor: "Sharp", _0: a}
};
var Round = {ctor: "Round"};
var Padded = {ctor: "Padded"};
var LineStyle = F6(function (a,b,c,d,e,f)
{
return {_: {}, cap: c, color: a, dashOffset: f, dashing: e, join: d, width: b}
});
var Grad = function (a)
{
return {ctor: "Grad", _0: a}
};
var Form = F6(function (a,b,c,d,e,f)
{
return {_: {}, alpha: e, form: f, scale: b, theta: a, x: c, y: d}
});
var Flat = {ctor: "Flat"};
var defaultLine = {_: {}, cap: Flat, color: Color.black, dashOffset: 0, dashing: _J.toList([]), join: Sharp(10), width: 1};
var dashed = function (clr)
{
return _N.replace([["color",clr],
["dashing",_J.toList([8,4])]],
defaultLine)
};
var dotted = function (clr)
{
return _N.replace([["color",clr],
["dashing",_J.toList([3,3])]],
defaultLine)
};
var solid = function (clr)
{
return _N.replace([["color",clr]],defaultLine)
};
var FShape = F2(function (a,b)
{
return {ctor: "FShape", _0: a, _1: b}
});
var fill = F2(function (style,shape)
{
return form(A2(FShape,Either.Right(style),shape))
});
var filled = F2(function (color,shape)
{
return A2(fill,Solid(color),shape)
});
var gradient = F2(function (grad,shape)
{
return A2(fill,Grad(grad),shape)
});
var textured = F2(function (src,shape)
{
return A2(fill,Texture(src),shape)
});
var outlined = F2(function (style,shape)
{
return form(A2(FShape,Either.Left(style),shape))
});
var FPath = F2(function (a,b)
{
return {ctor: "FPath", _0: a, _1: b}
});
var traced = F2(function (style,path)
{
return form(A2(FPath,style,path))
});
var FImage = F4(function (a,b,c,d)
{
return {ctor: "FImage", _0: a, _1: b, _2: c, _3: d}
});
var sprite = F4(function (w,h,pos,src)
{
return form(A4(FImage,w,h,pos,src))
});
var FGroup = F2(function (a,b)
{
return {ctor: "FGroup", _0: a, _1: b}
});
var group = function (fs)
{
return form(A2(FGroup,Transform2D.identity,fs))
};
var groupTransform = F2(function (matrix,fs)
{
return form(A2(FGroup,matrix,fs))
});
var FElement = function (a)
{
return {ctor: "FElement", _0: a}
};
var toForm = function (e)
{
return form(FElement(e))
};
var Clipped = {ctor: "Clipped"};
elm.Graphics.Collage.values = {_op: _op, defaultLine: defaultLine, solid: solid, dashed: dashed, dotted: dotted, form: form, fill: fill, filled: filled, textured: textured, gradient: gradient, outlined: outlined, traced: traced, sprite: sprite, toForm: toForm, group: group, groupTransform: groupTransform, rotate: rotate, scale: scale, move: move, moveX: moveX, moveY: moveY, alpha: alpha, collage: collage, path: path, segment: segment, polygon: polygon, rect: rect, square: square, oval: oval, circle: circle, ngon: ngon, Solid: Solid, Texture: Texture, Grad: Grad, Flat: Flat, Round: Round, Padded: Padded, Smooth: Smooth, Sharp: Sharp, Clipped: Clipped, FPath: FPath, FShape: FShape, FImage: FImage, FElement: FElement, FGroup: FGroup, Form: Form, LineStyle: LineStyle};
return elm.Graphics.Collage.values
};Elm.Graphics = Elm.Graphics || {};
Elm.Graphics.Element = Elm.Graphics.Element || {};
Elm.Graphics.Element.make = function (elm)
{
elm.Graphics = elm.Graphics || {};
elm.Graphics.Element = elm.Graphics.Element || {};
if (elm.Graphics.Element.values)
return elm.Graphics.Element.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Graphics.Element";
var Basics = Elm.Basics.make(elm);
var Native = Native || {};
Native.Utils = Elm.Native.Utils.make(elm);
var JavaScript = Elm.JavaScript.make(elm);
var JavaScript = Elm.JavaScript.make(elm);
var List = Elm.List.make(elm);
var Color = Elm.Color.make(elm);
var Maybe = Elm.Maybe.make(elm);
var _op = {};
var widthOf = function (e)
{
return e.props.width
};
var tag = F2(function (name,e)
{
return function ()
{
var p = e.props;
return {_: {}, element: e.element, props: _N.replace([["tag",
JavaScript.fromString(name)]],
p)}
}()
});
var sizeOf = function (e)
{
return {ctor: "_Tuple2", _0: e.props.width, _1: e.props.height}
};
var opacity = F2(function (o,e)
{
return function ()
{
var p = e.props;
return {_: {}, element: e.element, props: _N.replace([["opacity",
o]],
p)}
}()
});
var link = F2(function (href,e)
{
return function ()
{
var p = e.props;
return {_: {}, element: e.element, props: _N.replace([["href",
JavaScript.fromString(href)]],
p)}
}()
});
var heightOf = function (e)
{
return e.props.height
};
var emptyStr = JavaScript.fromString("");
var color = F2(function (c,e)
{
return function ()
{
var p = e.props;
return {_: {}, element: e.element, props: _N.replace([["color",
Maybe.Just(c)]],
p)}
}()
});
var Z = {ctor: "Z"};
var middleAt = F2(function (x,y)
{
return {_: {}, horizontal: Z, vertical: Z, x: x, y: y}
});
var Tiled = {ctor: "Tiled"};
var Spacer = {ctor: "Spacer"};
var Relative = function (a)
{
return {ctor: "Relative", _0: a}
};
var middle = {_: {}, horizontal: Z, vertical: Z, x: Relative(0.5), y: Relative(0.5)};
var relative = Relative;
var RawHtml = function (a)
{
return {ctor: "RawHtml", _0: a}
};
var Properties = F8(function (a,b,c,d,e,f,g,h)
{
return {_: {}, color: e, height: c, hover: h, href: f, id: a, opacity: d, tag: g, width: b}
});
var newElement = F3(function (w,h,e)
{
return {_: {}, element: e, props: A8(Properties,
Native.Utils.guid({ctor: "_Tuple0"}),
w,
h,
1,
Maybe.Nothing,
emptyStr,
emptyStr,
{ctor: "_Tuple0"})}
});
var spacer = F2(function (w,h)
{
return A3(newElement,w,h,Spacer)
});
var Position = F4(function (a,b,c,d)
{
return {_: {}, horizontal: a, vertical: b, x: c, y: d}
});
var Plain = {ctor: "Plain"};
var P = {ctor: "P"};
var midRightAt = F2(function (x,y)
{
return {_: {}, horizontal: P, vertical: Z, x: x, y: y}
});
var midTopAt = F2(function (x,y)
{
return {_: {}, horizontal: Z, vertical: P, x: x, y: y}
});
var topRightAt = F2(function (x,y)
{
return {_: {}, horizontal: P, vertical: P, x: x, y: y}
});
var N = {ctor: "N"};
var bottomLeftAt = F2(function (x,y)
{
return {_: {}, horizontal: N, vertical: N, x: x, y: y}
});
var bottomRightAt = F2(function (x,y)
{
return {_: {}, horizontal: P, vertical: N, x: x, y: y}
});
var midBottomAt = F2(function (x,y)
{
return {_: {}, horizontal: Z, vertical: N, x: x, y: y}
});
var midLeftAt = F2(function (x,y)
{
return {_: {}, horizontal: N, vertical: Z, x: x, y: y}
});
var topLeftAt = F2(function (x,y)
{
return {_: {}, horizontal: N, vertical: P, x: x, y: y}
});
var Image = F4(function (a,b,c,d)
{
return {ctor: "Image", _0: a, _1: b, _2: c, _3: d}
});
var height = F2(function (nh,e)
{
return function ()
{
var p = e.props;
var props = function ()
{
var _case0 = e.element;
switch (_case0.ctor)
{case
"Image" :
return _N.replace([["width",
Basics.round(Basics.toFloat(_case0._1) / Basics.toFloat(_case0._2) * Basics.toFloat(nh))]],
p)}
return p
}();
return {_: {}, element: e.element, props: _N.replace([["height",
nh]],
p)}
}()
});
var image = F3(function (w,h,src)
{
return A3(newElement,
w,
h,
A4(Image,
Plain,
w,
h,
JavaScript.fromString(src)))
});
var tiledImage = F3(function (w,h,src)
{
return A3(newElement,
w,
h,
A4(Image,
Tiled,
w,
h,
JavaScript.fromString(src)))
});
var width = F2(function (nw,e)
{
return function ()
{
var p = e.props;
var props = function ()
{
var _case5 = e.element;
switch (_case5.ctor)
{case
"Image" :
return _N.replace([["height",
Basics.round(Basics.toFloat(_case5._2) / Basics.toFloat(_case5._1) * Basics.toFloat(nw))]],
p)
case
"RawHtml" :
return _N.replace([["height",
Basics.snd(A2(Native.Utils.htmlHeight,
nw,
_case5._0))]],
p)}
return p
}();
return {_: {}, element: e.element, props: _N.replace([["width",
nw]],
props)}
}()
});
var size = F3(function (w,h,e)
{
return A2(height,h,A2(width,w,e))
});
var Flow = F2(function (a,b)
{
return {ctor: "Flow", _0: a, _1: b}
});
var Fitted = {ctor: "Fitted"};
var fittedImage = F3(function (w,h,src)
{
return A3(newElement,
w,
h,
A4(Image,
Fitted,
w,
h,
JavaScript.fromString(src)))
});
var Element = F2(function (a,b)
{
return {_: {}, element: b, props: a}
});
var DUp = {ctor: "DUp"};
var up = DUp;
var DRight = {ctor: "DRight"};
var right = DRight;
var beside = F2(function (lft,rht)
{
return A3(newElement,
widthOf(lft) + widthOf(rht),
A2(Basics.max,
heightOf(lft),
heightOf(rht)),
A2(Flow,right,_J.toList([lft,rht])))
});
var DOut = {ctor: "DOut"};
var layers = function (es)
{
return function ()
{
var ws = A2(List.map,widthOf,es);
var hs = A2(List.map,heightOf,es);
return A3(newElement,
List.maximum(ws),
List.maximum(hs),
A2(Flow,DOut,es))
}()
};
var outward = DOut;
var DLeft = {ctor: "DLeft"};
var left = DLeft;
var DIn = {ctor: "DIn"};
var inward = DIn;
var DDown = {ctor: "DDown"};
var above = F2(function (hi,lo)
{
return A3(newElement,
A2(Basics.max,widthOf(hi),widthOf(lo)),
heightOf(hi) + heightOf(lo),
A2(Flow,DDown,_J.toList([hi,lo])))
});
var below = F2(function (lo,hi)
{
return A3(newElement,
A2(Basics.max,widthOf(hi),widthOf(lo)),
heightOf(hi) + heightOf(lo),
A2(Flow,DDown,_J.toList([hi,lo])))
});
var down = DDown;
var flow = F2(function (dir,es)
{
return function ()
{
var ws = A2(List.map,widthOf,es);
var newFlow = F2(function (w,h)
{
return A3(newElement,
w,
h,
A2(Flow,dir,es))
});
var hs = A2(List.map,heightOf,es);
return _N.eq(es,_J.toList([])) ? A2(spacer,
0,
0) : function ()
{
switch (dir.ctor)
{case
"DDown" :
return A2(newFlow,
List.maximum(ws),
List.sum(hs))
case
"DIn" :
return A2(newFlow,
List.maximum(ws),
List.maximum(hs))
case
"DLeft" :
return A2(newFlow,
List.sum(ws),
List.maximum(hs))
case
"DOut" :
return A2(newFlow,
List.maximum(ws),
List.maximum(hs))
case
"DRight" :
return A2(newFlow,
List.sum(ws),
List.maximum(hs))
case
"DUp" :
return A2(newFlow,
List.maximum(ws),
List.sum(hs))}
_E.Case($moduleName,
"between lines 199 and 209");
}()
}()
});
var Custom = {ctor: "Custom"};
var Cropped = function (a)
{
return {ctor: "Cropped", _0: a}
};
var croppedImage = F4(function (pos,w,h,src)
{
return A3(newElement,
w,
h,
A4(Image,
Cropped(pos),
w,
h,
JavaScript.fromString(src)))
});
var Container = F2(function (a,b)
{
return {ctor: "Container", _0: a, _1: b}
});
var container = F4(function (w,h,pos,e)
{
return A3(newElement,w,h,A2(Container,pos,e))
});
var Absolute = function (a)
{
return {ctor: "Absolute", _0: a}
};
var absolute = Absolute;
var midLeft = _N.replace([["horizontal",N],["x",Absolute(0)]],
middle);
var midRight = _N.replace([["horizontal",P]],midLeft);
var midTop = _N.replace([["vertical",P],["y",Absolute(0)]],middle);
var midBottom = _N.replace([["vertical",N]],midTop);
var topLeft = {_: {}, horizontal: N, vertical: P, x: Absolute(0), y: Absolute(0)};
var bottomLeft = _N.replace([["vertical",N]],topLeft);
var bottomRight = _N.replace([["horizontal",P]],bottomLeft);
var topRight = _N.replace([["horizontal",P]],topLeft);
elm.Graphics.Element.values = {_op: _op, widthOf: widthOf, heightOf: heightOf, sizeOf: sizeOf, width: width, height: height, size: size, opacity: opacity, color: color, tag: tag, link: link, emptyStr: emptyStr, newElement: newElement, image: image, fittedImage: fittedImage, croppedImage: croppedImage, tiledImage: tiledImage, container: container, spacer: spacer, flow: flow, above: above, below: below, beside: beside, layers: layers, absolute: absolute, relative: relative, middle: middle, topLeft: topLeft, topRight: topRight, bottomLeft: bottomLeft, bottomRight: bottomRight, midLeft: midLeft, midRight: midRight, midTop: midTop, midBottom: midBottom, middleAt: middleAt, topLeftAt: topLeftAt, topRightAt: topRightAt, bottomLeftAt: bottomLeftAt, bottomRightAt: bottomRightAt, midLeftAt: midLeftAt, midRightAt: midRightAt, midTopAt: midTopAt, midBottomAt: midBottomAt, up: up, down: down, left: left, right: right, inward: inward, outward: outward, Image: Image, Container: Container, Flow: Flow, Spacer: Spacer, RawHtml: RawHtml, Custom: Custom, Plain: Plain, Fitted: Fitted, Cropped: Cropped, Tiled: Tiled, P: P, Z: Z, N: N, Absolute: Absolute, Relative: Relative, DUp: DUp, DDown: DDown, DLeft: DLeft, DRight: DRight, DIn: DIn, DOut: DOut, Properties: Properties, Element: Element, Position: Position};
return elm.Graphics.Element.values
};Elm.Graphics = Elm.Graphics || {};
Elm.Graphics.Input = Elm.Graphics.Input || {};
Elm.Graphics.Input.make = function (elm)
{
elm.Graphics = elm.Graphics || {};
elm.Graphics.Input = elm.Graphics.Input || {};
if (elm.Graphics.Input.values)
return elm.Graphics.Input.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "Graphics.Input";
var Basics = Elm.Basics.make(elm);
var Signal = Elm.Signal.make(elm);
var Native = Native || {};
Native.Graphics = Native.Graphics || {};
Native.Graphics.Input = Elm.Native.Graphics.Input.make(elm);
var List = Elm.List.make(elm);
var Graphics = Graphics || {};
Graphics.Element = Elm.Graphics.Element.make(elm);
var Maybe = Elm.Maybe.make(elm);
var JavaScript = Elm.JavaScript.make(elm);
var _op = {};
var id = function (x)
{
return x
};
var hoverables = Native.Graphics.Input.hoverables;
var hoverable = function (elem)
{
return function ()
{
var pool = hoverables(false);
return {ctor: "_Tuple2", _0: A2(pool.hoverable,
id,
elem), _1: pool.events}
}()
};
var fields = Native.Graphics.Input.fields;
var emptyFieldState = {_: {}, selectionEnd: 0, selectionStart: 0, string: ""};
var field = function (placeHolder)
{
return function ()
{
var tfs = fields(emptyFieldState);
var changes = Signal.dropRepeats(tfs.events);
return {ctor: "_Tuple2", _0: A2(Signal.lift,
A2(tfs.field,
id,
placeHolder),
changes), _1: Signal.dropRepeats(A2(Signal.lift,
function (_)
{
return _.string
},
changes))}
}()
};
var password = function (placeHolder)
{
return function ()
{
var tfs = Native.Graphics.Input.passwords(emptyFieldState);
var changes = Signal.dropRepeats(tfs.events);
return {ctor: "_Tuple2", _0: A2(Signal.lift,
A2(tfs.field,
id,
placeHolder),
changes), _1: Signal.dropRepeats(A2(Signal.lift,
function (_)
{
return _.string
},
changes))}
}()
};
var email = function (placeHolder)
{
return function ()
{
var tfs = Native.Graphics.Input.emails(emptyFieldState);
var changes = Signal.dropRepeats(tfs.events);
return {ctor: "_Tuple2", _0: A2(Signal.lift,
A2(tfs.field,
id,
placeHolder),
changes), _1: Signal.dropRepeats(A2(Signal.lift,
function (_)
{
return _.string
},
changes))}
}()
};
var dropDown = Native.Graphics.Input.dropDown;
var stringDropDown = function (strs)
{
return dropDown(A2(List.map,
function (s)
{
return {ctor: "_Tuple2", _0: s, _1: s}
},
strs))
};
var customButtons = Native.Graphics.Input.customButtons;
var customButton = F3(function (up,hover,down)
{
return function ()
{
var pool = customButtons({ctor: "_Tuple0"});
return {ctor: "_Tuple2", _0: A4(pool.customButton,
{ctor: "_Tuple0"},
up,
hover,
down), _1: pool.events}
}()
});
var checkboxes = Native.Graphics.Input.checkboxes;
var checkbox = function (b)
{
return function ()
{
var cbs = checkboxes(b);
return {ctor: "_Tuple2", _0: A2(Signal.lift,
cbs.checkbox(id),
cbs.events), _1: cbs.events}
}()
};
var buttons = Native.Graphics.Input.buttons;
var button = function (txt)
{
return function ()
{
var pool = buttons({ctor: "_Tuple0"});
return {ctor: "_Tuple2", _0: A2(pool.button,
{ctor: "_Tuple0"},
txt), _1: pool.events}
}()
};
var FieldState = F3(function (a,b,c)
{
return {_: {}, selectionEnd: c, selectionStart: b, string: a}
});
elm.Graphics.Input.values = {_op: _op, id: id, buttons: buttons, button: button, customButtons: customButtons, customButton: customButton, checkboxes: checkboxes, checkbox: checkbox, hoverables: hoverables, hoverable: hoverable, fields: fields, emptyFieldState: emptyFieldState, field: field, password: password, email: email, dropDown: dropDown, stringDropDown: stringDropDown, FieldState: FieldState};
return elm.Graphics.Input.values
};Elm.JavaScript = Elm.JavaScript || {};
Elm.JavaScript.Experimental = Elm.JavaScript.Experimental || {};
Elm.JavaScript.Experimental.make = function (elm)
{
elm.JavaScript = elm.JavaScript || {};
elm.JavaScript.Experimental = elm.JavaScript.Experimental || {};
if (elm.JavaScript.Experimental.values)
return elm.JavaScript.Experimental.values
var N = Elm.Native,
_N = N.Utils.make(elm),
_L = N.List.make(elm),
_E = N.Error.make(elm),
_J = N.JavaScript.make(elm),
$moduleName = "JavaScript.Experimental";
var JavaScript = Elm.JavaScript.make(elm);
var Native = Native || {};
Native.JavaScript = Elm.Native.JavaScript.make(elm);
var _op = {};
var toRecord = Native.JavaScript.toRecord;
var fromRecord = Native.JavaScript.fromRecord;
elm.JavaScript.Experimental.values = {_op: _op, toRecord: toRecord, fromRecord: fromRecord};
return elm.JavaScript.Experimental.values
};(function() {
// Returns boolean indicating if the swap was successful.
// Requires that the two signal graphs have exactly the same
// structure.
ElmRuntime.swap = function(from, to) {
function similar(nodeOld,nodeNew) {
idOkay = nodeOld.id === nodeNew.id;
lengthOkay = nodeOld.kids.length === nodeNew.kids.length;
return idOkay && lengthOkay;
}
function swap(nodeOld,nodeNew) {
nodeNew.value = nodeOld.value;
return true;
}
var canSwap = depthFirstTraversals(similar, from.inputs, to.inputs);
if (canSwap) { depthFirstTraversals(swap, from.inputs, to.inputs); }
from.node.parentNode.replaceChild(to.node, from.node);
return canSwap;
}
// Returns false if the node operation f ever fails.
function depthFirstTraversals(f, queueOld, queueNew) {
if (queueOld.length !== queueNew.length) return false;
queueOld = queueOld.slice(0);
queueNew = queueNew.slice(0);
var seen = [];
while (queueOld.length > 0 && queueNew.length > 0) {
var nodeOld = queueOld.pop();
var nodeNew = queueNew.pop();
if (seen.indexOf(nodeOld.id) < 0) {
if (!f(nodeOld, nodeNew)) return false;
queueOld = queueOld.concat(nodeOld.kids);
queueNew = queueNew.concat(nodeNew.kids);
seen.push(nodeOld.id);
}
}
return true;
}
}());
(function() {
'use strict';
Elm.fullscreen = function(module) {
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = "html,head,body { padding:0; margin:0; }" +
"body { font-family: calibri, helvetica, arial, sans-serif; }";
document.head.appendChild(style);
var container = document.createElement('div');
document.body.appendChild(container);
return init(ElmRuntime.Display.FULLSCREEN, container, module);
};
Elm.embed = function(module, container) {
var tag = container.tagName;
if (tag !== 'DIV') {
throw new Error('Elm.node must be given a DIV, not a ' + tag + '.');
} else if (container.hasChildNodes()) {
throw new Error('Elm.node must be given an empty DIV. No children allowed!');
}
return init(ElmRuntime.Display.COMPONENT, container, module);
};
Elm.worker = function(module) {
return init(ElmRuntime.Display.NONE, {}, module);
};
function init(display, container, module, moduleToReplace) {
// defining state needed for an instance of the Elm RTS
var inputs = [];
function notify(id, v) {
var timestep = Date.now();
var changed = false;
for (var i = inputs.length; i--; ) {
// order is important here to avoid short-circuiting
changed = inputs[i].recv(timestep, id, v) || changed;
}
return changed;
}
var listeners = [];
function addListener(relevantInputs, domNode, eventName, func) {
domNode.addEventListener(eventName, func);
var listener = {
relevantInputs: relevantInputs,
domNode: domNode,
eventName: eventName,
func: func
};
listeners.push(listener);
}
// create the actual RTS. Any impure modules will attach themselves to this
// object. This permits many Elm programs to be embedded per document.
var elm = {
notify:notify,
node:container,
display:display,
id:ElmRuntime.guid(),
addListener:addListener,
inputs:inputs
};
// Set up methods to communicate with Elm program from JS.
function send(name, value) {
if (typeof value === 'undefined') return function(v) { return send(name,v); };
var e = document.createEvent('Event');
e.initEvent(name + '_' + elm.id, true, true);
e.value = value;
document.dispatchEvent(e);
}
function recv(name, handler) {
document.addEventListener(name + '_' + elm.id, handler);
}
recv('log', function(e) {console.log(e.value)});
recv('title', function(e) {document.title = e.value});
recv('redirect', function(e) {
if (e.value.length > 0) { window.location = e.value; }
});
function swap(newModule) {
removeListeners(listeners);
var div = document.createElement('div');
var newElm = init(display, div, newModule, elm);
inputs = [];
// elm.send = newElm.send;
// elm.recv = newElm.recv;
// elm.swap = newElm.swap;
return newElm;
}
var Module = {};
var reportAnyErrors = function() {};
try {
Module = module.make(elm);
} catch(e) {
var directions = "<br/> Open the developer console for more details."
Module.main = Elm.Text.make(elm).text('<code>' + e.message + directions + '</code>');
reportAnyErrors = function() { throw e; }
}
inputs = ElmRuntime.filterDeadInputs(inputs);
filterListeners(inputs, listeners);
if (display !== ElmRuntime.Display.NONE) {
var graphicsNode = initGraphics(elm, Module);
}
if (typeof moduleToReplace !== 'undefined') {
ElmRuntime.swap(moduleToReplace, elm);
// rerender scene if graphics are enabled.
if (typeof graphicsNode !== 'undefined') {
graphicsNode.recv(0, true, 0);
}
}
reportAnyErrors();
return { send:send, recv:recv, swap:swap };
};
function filterListeners(inputs, listeners) {
loop:
for (var i = listeners.length; i--; ) {
var listener = listeners[i];
for (var j = inputs.length; j--; ) {
if (listener.relevantInputs.indexOf(inputs[j].id) >= 0) {
continue loop;
}
}
listener.domNode.removeEventListener(listener.eventName, listener.func);
}
}
function removeListeners(listeners) {
for (var i = listeners.length; i--; ) {
var listener = listeners[i];
listener.domNode.removeEventListener(listener.eventName, listener.func);
}
}
function initGraphics(elm, Module) {
if (!('main' in Module))
throw new Error("'main' is missing! What do I display?!");
var signalGraph = Module.main;
// make sure the signal graph is actually a signal & extract the visual model
var Signal = Elm.Signal.make(elm);
if (!('recv' in signalGraph)) {
signalGraph = Signal.constant(signalGraph);
}
var currentScene = signalGraph.value;
// Add the currentScene to the DOM
var Render = ElmRuntime.use(ElmRuntime.Render.Element);
elm.node.appendChild(Render.render(currentScene));
// set up updates so that the DOM is adjusted as necessary.
function domUpdate(newScene, currentScene) {
ElmRuntime.draw(function(_) {
Render.update(elm.node.firstChild, currentScene, newScene);
if (elm.Native.Window) elm.Native.Window.values.resizeIfNeeded();
});
return newScene;
}
var renderer = A3(Signal.foldp, F2(domUpdate), currentScene, signalGraph);
// must check for resize after 'renderer' is created so
// that changes show up.
if (elm.Native.Window) elm.Native.Window.values.resizeIfNeeded();
return renderer;
}
}());
(function() {
'use strict';
ElmRuntime.Display = { FULLSCREEN: 0, COMPONENT: 1, NONE: 2 };
ElmRuntime.counter = 0;
ElmRuntime.guid = function() { return ElmRuntime.counter++; }
ElmRuntime.use = function(M) {
if (typeof M === 'function') M = M();
return M;
};
function isAlive(input) {
if (!('defaultNumberOfKids' in input)) return true;
var len = input.kids.length;
if (len === 0) return false;
if (len > input.defaultNumberOfKids) return true;
var alive = false;
for (var i = len; i--; ) {
alive = alive || isAlive(input.kids[i]);
}
return alive;
}
ElmRuntime.filterDeadInputs = function(inputs) {
var temp = [];
for (var i = inputs.length; i--; ) {
if (isAlive(inputs[i])) temp.push(inputs[i]);
}
return temp;
};
// define the draw function
var vendors = ['ms', 'moz', 'webkit', 'o'];
for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {
window.requestAnimationFrame = window[vendors[i]+'RequestAnimationFrame'];
window.cancelAnimationFrame = window[vendors[i]+'CancelAnimationFrame'] ||
window[vendors[i]+'CancelRequestAnimationFrame'];
}
if (window.requestAnimationFrame && window.cancelAnimationFrame) {
var previous = 0;
ElmRuntime.draw = function(callback) {
window.cancelAnimationFrame(previous);
previous = window.requestAnimationFrame(callback);
};
} else {
ElmRuntime.draw = function(callback) { callback(); };
}
}());
ElmRuntime.Render.Collage = function() {
var Render = ElmRuntime.use(ElmRuntime.Render.Element);
var Transform = Elm.Transform2D.make({});
var Utils = ElmRuntime.use(ElmRuntime.Render.Utils);
var newElement = Utils.newElement,
extract = Utils.extract, fromList = Utils.fromList,
fromString = Utils.fromString, addTransform = Utils.addTransform;
function trace(ctx, path) {
var points = fromList(path);
var i = points.length - 1;
if (i <= 0) return;
ctx.moveTo(points[i]._0, points[i]._1);
while (i--) { ctx.lineTo(points[i]._0, points[i]._1); }
if (path.closed) {
i = points.length - 1;
ctx.lineTo(points[i]._0, points[i]._1);
}
}
function line(ctx,style,path) {
style.dashing.ctor === 'Nil' ? trace(ctx, path) : customLineHelp(ctx, style, path);
ctx.scale(1,-1);
ctx.stroke();
}
function customLineHelp(ctx, style, path) {
var points = fromList(path);
if (path.closed) points.push(points[0]);
var pattern = fromList(style.dashing);
var i = points.length - 1;
if (i <= 0) return;
var x0 = points[i]._0, y0 = points[i]._1;
var x1=0, y1=0, dx=0, dy=0, remaining=0, nx=0, ny=0;
var pindex = 0, plen = pattern.length;
var draw = true, segmentLength = pattern[0];
ctx.moveTo(x0,y0);
while (i--) {
x1 = points[i]._0; y1 = points[i]._1;
dx = x1 - x0; dy = y1 - y0;
remaining = Math.sqrt(dx * dx + dy * dy);
while (segmentLength <= remaining) {
x0 += dx * segmentLength / remaining;
y0 += dy * segmentLength / remaining;
ctx[draw ? 'lineTo' : 'moveTo'](x0, y0);
// update starting position
dx = x1 - x0; dy = y1 - y0;
remaining = Math.sqrt(dx * dx + dy * dy);
// update pattern
draw = !draw;
pindex = (pindex + 1) % plen;
segmentLength = pattern[pindex];
}
if (remaining > 0) {
ctx[draw ? 'lineTo' : 'moveTo'](x1, y1);
segmentLength -= remaining;
}
x0 = x1; y0 = y1;
}
}
function drawLine(ctx, style, path) {
ctx.lineWidth = style.width;
var cap = style.cap.ctor;
ctx.lineCap = cap === 'Flat' ? 'butt' :
cap === 'Round' ? 'round' : 'square';
var join = style.join.ctor;
ctx.lineJoin = join === 'Smooth' ? 'round' :
join === 'Sharp' ? 'miter' : 'bevel';
ctx.miterLimit = style.join._0 || 10;
ctx.strokeStyle = extract(style.color);
return line(ctx, style, path);
}
function texture(redo, ctx, src) {
var img = new Image();
img.src = fromString(src);
img.onload = redo;
return ctx.createPattern(img, 'repeat');
}
function gradient(ctx, grad) {
var g;
var stops = [];
if (grad.ctor === 'Linear') {
var p0 = grad._0, p1 = grad._1;
g = ctx.createLinearGradient(p0._0, -p0._1, p1._0, -p1._1);
stops = fromList(grad._2);
} else {
var p0 = grad._0, p2 = grad._2;
g = ctx.createRadialGradient(p0._0, -p0._1, grad._1, p2._0, -p2._1, grad._3);
stops = fromList(grad._4);
}
var len = stops.length;
for (var i = 0; i < len; ++i) {
var stop = stops[i];
g.addColorStop(stop._0, extract(stop._1));
}
return g;
}
function drawShape(redo, ctx, style, path) {
trace(ctx, path);
var sty = style.ctor;
ctx.fillStyle =
sty === 'Solid' ? extract(style._0) :
sty === 'Texture' ? texture(redo, ctx, style._0) : gradient(ctx, style._0);
ctx.scale(1,-1);
ctx.fill();
}
function drawImage(redo, ctx, form) {
var img = new Image();
img.onload = redo;
img.src = fromString(form._3);
var w = form._0,
h = form._1,
pos = form._2,
srcX = pos._0,
srcY = pos._1,
srcW = w,
srcH = h,
destX = -w/2,
destY = -h/2,
destW = w,
destH = h;
ctx.scale(1,-1);
ctx.drawImage(img, srcX, srcY, srcW, srcH, destX, destY, destW, destH);
}
function renderForm(redo, ctx, form) {
ctx.save();
var x = form.x, y = form.y, theta = form.theta, scale = form.scale;
if (x !== 0 || y !== 0) ctx.translate(x, y);
if (theta !== 0) ctx.rotate(theta);
if (scale !== 1) ctx.scale(scale,scale);
if (form.alpha !== 1) ctx.globalAlpha = ctx.globalAlpha * form.alpha;
ctx.beginPath();
var f = form.form;
switch(f.ctor) {
case 'FPath' : drawLine(ctx, f._0, f._1); break;
case 'FImage': drawImage(redo, ctx, f); break;
case 'FShape':
if (f._0.ctor === 'Left') {
f._1.closed = true;
drawLine(ctx, f._0._0, f._1);
} else {
drawShape(redo, ctx, f._0._0, f._1);
}
break;
}
ctx.restore();
}
function formToMatrix(form) {
var scale = form.scale;
var matrix = A6( Transform.matrix, scale, 0, 0, scale, form.x, form.y );
var theta = form.theta
if (theta !== 0)
matrix = A2( Transform.multiply, matrix, Transform.rotation(theta) );
return matrix;
}
function str(n) {
if (n < 0.00001 && n > -0.00001) return 0;
return n;
}
function makeTransform(w, h, form, matrices) {
var props = form.form._0.props;
var m = A6( Transform.matrix, 1, 0, 0, 1,
(w - props.width)/2,
(h - props.height)/2 );
var len = matrices.length;
for (var i = 0; i < len; ++i) { m = A2( Transform.multiply, m, matrices[i] ); }
m = A2( Transform.multiply, m, formToMatrix(form) );
return 'matrix(' + str( m[0]) + ',' + str( m[3]) + ',' +
str(-m[1]) + ',' + str(-m[4]) + ',' +
str( m[2]) + ',' + str( m[5]) + ')';
}
function stepperHelp(list) {
var arr = fromList(list);
var i = 0;
function peekNext() {
return i < arr.length ? arr[i].form.ctor : '';
}
// assumes that there is a next element
function next() {
var out = arr[i];
++i;
return out;
}
return { peekNext:peekNext, next:next };
}
function stepper(forms) {
var ps = [stepperHelp(forms)];
var matrices = [];
var alphas = [];
function peekNext() {
var len = ps.length;
var formType = '';
for (var i = 0; i < len; ++i ) {
if (formType = ps[i].peekNext()) return formType;
}
return '';
}
// assumes that there is a next element
function next(ctx) {
while (!ps[0].peekNext()) {
ps.shift();
matrices.pop();
alphas.shift();
if (ctx) { ctx.restore(); }
}
var out = ps[0].next();
var f = out.form;
if (f.ctor === 'FGroup') {
ps.unshift(stepperHelp(f._1));
var m = A2(Transform.multiply, f._0, formToMatrix(out));
ctx.save();
ctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]);
matrices.push(m);
var alpha = (alphas[0] || 1) * out.alpha;
alphas.unshift(alpha);
ctx.globalAlpha = alpha;
}
return out;
}
function transforms() { return matrices; }
function alpha() { return alphas[0] || 1; }
return { peekNext:peekNext, next:next, transforms:transforms, alpha:alpha };
}
function makeCanvas(w,h) {
var canvas = newElement('canvas');
canvas.style.width = w + 'px';
canvas.style.height = h + 'px';
canvas.style.display = "block";
canvas.style.position = "absolute";
canvas.width = w;
canvas.height = h;
return canvas;
}
function render(model) {
var div = newElement('div');
update(div, model, model);
return div;
}
function updateTracker(w,h,div) {
var kids = div.childNodes;
var i = 0;
function transform(transforms, ctx) {
ctx.translate(w/2, h/2);
ctx.scale(1,-1);
var len = transforms.length;
for (var i = 0; i < len; ++i) {
var m = transforms[i];
ctx.save();
ctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]);
}
return ctx;
}
function getContext(transforms) {
while (i < kids.length) {
var node = kids[i];
if (node.getContext) {
node.width = w;
node.height = h;
node.style.width = w + 'px';
node.style.height = h + 'px';
++i;
return transform(transforms, node.getContext('2d'));
}
div.removeChild(node);
}
var canvas = makeCanvas(w,h);
div.appendChild(canvas);
// we have added a new node, so we must step our position
++i;
return transform(transforms, canvas.getContext('2d'));
}
function element(matrices, alpha, form) {
var container = kids[i];
if (!container || container.getContext) {
container = newElement('div');
container.style.overflow = 'hidden';
container.style.position = 'absolute';
addTransform(container.style, 'scaleY(-1)');
var kid = kids[i];
kid ? div.insertBefore(container, kid)
: div.appendChild(container);
}
// we have added a new node, so we must step our position
++i;
container.style.width = w + 'px';
container.style.height = h + 'px';
container.style.opacity = alpha * form.alpha;
var elem = form.form._0;
var node = container.firstChild;
if (node) {
Render.update(node, node.oldElement, elem);
node = container.firstChild;
} else {
node = Render.render(elem);
container.appendChild(node);
}
node.oldElement = elem;
addTransform(node.style, makeTransform(w, h, form, matrices));
}
function clearRest() {
while (i < kids.length) {
div.removeChild(kids[i]);
}
}
return { getContext:getContext, element:element, clearRest:clearRest };
}
function update(div, _, model) {
var w = model.w;
var h = model.h;
div.style.width = w + 'px';
div.style.height = h + 'px';
if (model.forms.ctor === 'Nil') {
while (div.hasChildNodes()) {
div.removeChild(div.lastChild);
}
}
var stpr = stepper(model.forms);
var tracker = updateTracker(w,h,div);
var ctx = null;
var formType = '';
while (formType = stpr.peekNext()) {
if (ctx === null && formType !== 'FElement') {
ctx = tracker.getContext(stpr.transforms());
ctx.globalAlpha = stpr.alpha();
}
var form = stpr.next(ctx);
if (formType === 'FElement') {
tracker.element(stpr.transforms(), stpr.alpha(), form);
ctx = null;
} else if (formType !== 'FGroup') {
renderForm(function() { update(div, model, model); }, ctx, form);
}
}
tracker.clearRest();
return false;
}
return { render:render, update:update };
};
ElmRuntime.Render.Element = function() {
'use strict';
var Utils = ElmRuntime.use(ElmRuntime.Render.Utils);
var newElement = Utils.newElement, extract = Utils.extract,
addTransform = Utils.addTransform, removeTransform = Utils.removeTransform,
fromList = Utils.fromList, eq = Utils.eq;
function setProps(props, e) {
e.style.width = (props.width |0) + 'px';
e.style.height = (props.height|0) + 'px';
if (props.opacity !== 1) { e.style.opacity = props.opacity; }
if (props.color.ctor === 'Just') {
e.style.backgroundColor = extract(props.color._0);
}
if (props.tag !== '') { e.id = props.tag; }
if (props.href !== '') {
var a = newElement('a');
a.href = props.href;
a.style.width = '100%';
a.style.height = '100%';
a.style.top = 0;
a.style.left = 0;
a.style.display = 'block';
a.style.position = 'absolute';
e.style.position = 'relative';
e.appendChild(a);
}
if (props.hover.ctor !== '_Tuple0') {
var overCount = 0;
e.addEventListener('mouseover', function() {
if (overCount++ > 0) return;
props.hover(true);
});
e.addEventListener('mouseout', function(evt) {
if (e.contains(evt.toElement || evt.relatedTarget)) return;
overCount = 0;
props.hover(false);
});
}
return e;
}
function image(props, img) {
switch (img._0.ctor) {
case 'Plain': return plainImage(img._3);
case 'Fitted': return fittedImage(props.width, props.height, img._3);
case 'Cropped': return croppedImage(img,props.width,props.height,img._3);
case 'Tiled': return tiledImage(img._3);
}
}
function plainImage(src) {
var img = newElement('img');
img.src = src;
img.name = src;
img.style.display = "block";
return img;
}
function tiledImage(src) {
var div = newElement('div');
div.style.backgroundImage = 'url(' + src + ')';
return div;
}
function fittedImage(w, h, src) {
var div = newElement('div');
div.style.background = 'url(' + src + ') no-repeat center';
div.style.webkitBackgroundSize = 'cover';
div.style.MozBackgroundSize = 'cover';
div.style.OBackgroundSize = 'cover';
div.style.backgroundSize = 'cover';
return div;
}
function croppedImage(elem, w, h, src) {
var pos = elem._0._0;
var e = newElement('div');
e.style.overflow = "hidden";
var img = newElement('img');
img.onload = function() {
var sw = w / elem._1, sh = h / elem._2;
img.style.width = ((this.width * sw)|0) + 'px';
img.style.height = ((this.height * sh)|0) + 'px';
img.style.marginLeft = ((- pos._0 * sw)|0) + 'px';
img.style.marginTop = ((- pos._1 * sh)|0) + 'px';
};
img.src = src;
img.name = src;
e.appendChild(img);
return e;
}
function goIn(e) { e.style.position = 'absolute'; return e; }
function goDown(e) { return e }
function goRight(e) { e.style.styleFloat = e.style.cssFloat = "left"; return e; }
function flowWith(f, array) {
var container = newElement('div');
for (var i = array.length; i--; ) {
container.appendChild(f(render(array[i])));
}
return container;
}
function flow(dir,elist) {
var array = fromList(elist);
switch(dir.ctor) {
case "DDown": array.reverse();
case "DUp": return flowWith(goDown,array);
case "DRight": array.reverse();
case "DLeft": return flowWith(goRight,array);
case "DOut": array.reverse();
case "DIn": return flowWith(goIn,array);
}
}
function toPos(pos) {
switch(pos.ctor) {
case "Absolute": return pos._0 + "px";
case "Relative": return (pos._0 * 100) + "%";
}
}
// must clear right, left, top, bottom, and transform
// before calling this function
function setPos(pos,w,h,e) {
e.style.position = 'absolute';
e.style.margin = 'auto';
var transform = '';
switch(pos.horizontal.ctor) {
case 'P': e.style.right = toPos(pos.x); e.style.removeProperty('left'); break;
case 'Z': transform = 'translateX(' + ((-w/2)|0) + 'px) ';
case 'N': e.style.left = toPos(pos.x); e.style.removeProperty('right'); break;
}
switch(pos.vertical.ctor) {
case 'N': e.style.bottom = toPos(pos.y); e.style.removeProperty('top'); break;
case 'Z': transform += 'translateY(' + ((-h/2)|0) + 'px)';
case 'P': e.style.top = toPos(pos.y); e.style.removeProperty('bottom'); break;
}
if (transform !== '') addTransform(e.style, transform);
return e;
}
function container(pos,elem) {
var e = render(elem);
setPos(pos, elem.props.width, elem.props.height, e);
var div = newElement('div');
div.style.position = 'relative';
div.style.overflow = 'hidden';
div.appendChild(e);
return div;
}
function rawHtml(html) {
var e = newElement('div');
e.innerHTML = html;
return e;
}
function render(elem) { return setProps(elem.props, makeElement(elem)); }
function makeElement(e) {
var elem = e.element;
switch(elem.ctor) {
case 'Image': return image(e.props, elem);
case 'Flow': return flow(elem._0, elem._1);
case 'Container': return container(elem._0, elem._1);
case 'Spacer': return newElement('div');
case 'RawHtml': return rawHtml(elem._0);
case 'Custom': return elem.render(elem.model);
}
}
function update(node, curr, next) {
if (node.tagName === 'A') { node = node.firstChild; }
if (curr.props.id === next.props.id) return updateProps(node, curr, next);
if (curr.element.ctor !== next.element.ctor) {
node.parentNode.replaceChild(render(next),node);
return true;
}
var nextE = next.element, currE = curr.element;
switch(nextE.ctor) {
case "Spacer": break;
case "RawHtml":
if (nextE._0 !== currE._0) node.innerHTML = nextE._0;
break;
case "Image":
if (nextE._0.ctor === 'Plain') {
if (nextE._3 !== currE._3) node.src = nextE._3;
} else if (!eq(nextE,currE) ||
next.props.width !== curr.props.width ||
next.props.height !== curr.props.height) {
node.parentNode.replaceChild(render(next),node);
return true;
}
break;
case "Flow":
var arr = fromList(nextE._1);
for (var i = arr.length; i--; ) { arr[i] = arr[i].element.ctor; }
if (nextE._0.ctor !== currE._0.ctor) {
node.parentNode.replaceChild(render(next),node);
return true;
}
var nexts = fromList(nextE._1);
var kids = node.childNodes;
if (nexts.length !== kids.length) {
node.parentNode.replaceChild(render(next),node);
return true;
}
var currs = fromList(currE._1);
var goDir = function(x) { return x; };
switch(nextE._0.ctor) {
case "DDown": case "DUp": goDir = goDown; break;
case "DRight": case "DLeft": goDir = goRight; break;
case "DOut": case "DIn": goDir = goIn; break;
}
for (var i = kids.length; i-- ;) {
update(kids[i],currs[i],nexts[i]);
goDir(kids[i]);
}
break;
case "Container":
update(node.firstChild, currE._1, nextE._1)
setPos(nextE._0, nextE._1.props.width, nextE._1.props.height, node.firstChild);
break;
case "Custom":
if (currE.type === nextE.type) {
var done = nextE.update(node, currE.model, nextE.model);
if (done) return;
} else {
return node.parentNode.replaceChild(render(next), node);
}
}
updateProps(node, curr, next);
}
function updateProps(node, curr, next) {
var props = next.props, currP = curr.props, e = node;
if (props.width !== currP.width) e.style.width = (props.width |0) + 'px';
if (props.height !== currP.height) e.style.height = (props.height|0) + 'px';
if (props.opacity !== 1 && props.opacity !== currP.opacity) {
e.style.opacity = props.opacity;
}
var nextColor = (props.color.ctor === 'Just' ?
extract(props.color._0) : '');
if (e.style.backgroundColor !== nextColor) {
e.style.backgroundColor = (nextColor === '' ? 'transparent' : nextColor);
}
if (props.tag !== currP.tag) { e.id = props.tag; }
if (props.href !== currP.href) {
if (currP.href === '') {
var a = newElement('a');
a.href = props.href;
a.style.width = '100%';
a.style.height = '100%';
a.style.top = 0;
a.style.left = 0;
a.style.display = 'block';
a.style.position = 'absolute';
e.style.position = 'relative';
e.appendChild(a);
} else {
node.lastNode.href = props.href;
}
}
}
return { render:render, update:update };
};
ElmRuntime.Render.Utils = function() {
function newElement(elementType) {
var e = document.createElement(elementType);
e.style.padding = "0";
e.style.margin = "0";
return e;
}
function addTo(container, elem) {
container.appendChild(elem);
}
function extract(c) {
if (c._3 === 1) { return 'rgb(' + c._0 + ', ' + c._1 + ', ' + c._2 + ')'; }
return 'rgba(' + c._0 + ', ' + c._1 + ', ' + c._2 + ', ' + c._3 + ')';
}
function addTransform(style, trans) {
style.transform = trans;
style.msTransform = trans;
style.MozTransform = trans;
style.webkitTransform = trans;
style.OTransform = trans;
}
function removeTransform(style) {
style.transform = 'none';
style.msTransform = 'none';
style.MozTransform = 'none';
style.webkitTransform = 'none';
style.OTransform = 'none';
}
var List = Elm.Native.List.make({});
return {addTo:addTo,
newElement:newElement,
extract : extract,
fromList: List.toArray,
fromString: function(s) { return s; },
toString: function(s) { return s; },
eq: Elm.Native.Utils.make({}).eq,
addTransform: addTransform,
removeTransform: removeTransform
};
};