on master help sign in
Update runtime system, and update version number to 0.3.6.
46cb69fevancz
core-js/cat.bat+1−1
@@ -2,6 +2,6 @@ copy /B Guid.js+foreign\JavaScript.js+foreign\JSON.js+Value.js+List.js+Data.js+c
2
2
3cd ..\elm
3cd ..\elm
4
4
5−copy /B ..\elm-mini.js elm-runtime-0.3.5.1.js
5+copy /B ..\elm-mini.js elm-runtime-0.3.6.js
6
6
7cabal install
7cabal install
elm/Elm.cabal+2−2
@@ -1,6 +1,6 @@
1
1
2Name: Elm
2Name: Elm
3−Version: 0.3.5.1
3+Version: 0.3.6
4Synopsis: The Elm language module.
4Synopsis: The Elm language module.
5Description: Elm aims to make client-side web-development more pleasant.
5Description: Elm aims to make client-side web-development more pleasant.
6 It is a statically/strongly typed, functional reactive
6 It is a statically/strongly typed, functional reactive
@@ -22,7 +22,7 @@ Category: Compiler, Language
22Build-type: Simple
22Build-type: Simple
23
23
24Extra-source-files: changelog.txt
24Extra-source-files: changelog.txt
25−Data-files: elm-runtime-0.3.5.1.js
25+Data-files: elm-runtime-0.3.6.js
26Cabal-version: >=1.8
26Cabal-version: >=1.8
27
27
28source-repository head
28source-repository head
elm/elm-runtime-0.3.5.1.jsdeleted−2102
@@ -1,2102 +0,0 @@
1−
2−var Guid = function() {
3− var counter = 0;
4− var guid = function() { counter += 1; return counter; };
5− return {guid : guid};
6−}();
7−var Foreign = function() {
8− var JavaScript = function() {
9− function castJSBoolToBool(b) { return b; }
10− function castBoolToJSBool(b) { return b; }
11−
12− function castJSNumberToFloat(n) { return n; }
13− function castFloatToJSNumber(n) { return n; }
14−
15− function castJSNumberToInt(n) { return ~~n; }
16− function castIntToJSNumber(n) { return n; }
17−
18− function castJSElementToElement(w) { return Element.jsElement(w); }
19− function castElementToJSElement(elem) { return elem; }
20−
21− function castJSArrayToList(arr) {
22− var list = ["Nil"];
23− for (var i = arr.length; i--; ) {
24− list = [ "Cons", arr[i], list ];
25− }
26− return list;
27− }
28− function castListToJSArray(list) {
29− var a = [];
30− while (list[0] === "Cons") {
31− a.push(list[1]);
32− list = list[2];
33− }
34− return a;
35− }
36−
37− var castJSStringToString = castJSArrayToList;
38− function castStringToJSString(str) {
39− if (typeof str === "string") return str;
40− return castListToJSArray(str).join('');
41− }
42−
43− function fromTuple(t) { return t.slice(1); }
44− function toTuple(a) { return a.unshift("Tuple" + a.length); }
45−
46− return {castJSBoolToBool:castJSBoolToBool,
47− castBoolToJSBool:castBoolToJSBool,
48− castJSNumberToFloat:castJSNumberToFloat,
49− castFloatToJSNumber:castFloatToJSNumber,
50− castJSNumberToInt:castJSNumberToInt,
51− castIntToJSNumber:castIntToJSNumber,
52− Experimental : {castJSElementToElement:castJSElementToElement,
53− castElementToJSElement:castElementToJSElement},
54− castJSArrayToList:castJSArrayToList,
55− castListToJSArray:castListToJSArray,
56− castJSStringToString:castJSStringToString,
57− castStringToJSString:castStringToJSString,
58− castTupleToJSTuple2:fromTuple,
59− castTupleToJSTuple3:fromTuple,
60− castTupleToJSTuple4:fromTuple,
61− castTupleToJSTuple5:fromTuple,
62− castJSTupleToTuple2:toTuple,
63− castJSTupleToTuple3:toTuple,
64− castJSTupleToTuple4:toTuple,
65− castJSTupleToTuple5:toTuple
66− };
67− }();
68− return {JavaScript:JavaScript};
69−}();
70−var Value = function(){
71−
72− var eq = function(x,y) {
73− if (typeof x === "object") {
74− if (x === y) return true;
75− if (x.length !== y.length) return false;
76− for (var i = x.length; i--; ) {
77− if (!eq(x[i],y[i])) return false;
78− }
79− return true;
80− }
81− return x === y;
82− };
83−
84− var Tuple = function() {
85− var len = arguments.length;
86− var arr = new Array(len+1);
87− arr[0] = "Tuple" + arguments.length;
88− for (var i = len; i--; ) {
89− arr[i+1] = arguments[i];
90− }
91− return arr;
92− };
93−
94− var listToArray = function(list) {
95− var arr = [];
96− while (list[0] === "Cons") {
97− arr.push(list[1]);
98− list = list[2];
99− }
100− return arr;
101− };
102−
103− var properEscape = function(str) {
104− str.replace('"', """);
105− str.replace("&", "&");
106− str.replace("'", "'");
107− str.replace("<", "&#60;");
108− str.replace(">", "&#62;");
109− return str;
110− };
111−
112− var toText = function(elmList) {
113− if (typeof elmList === "string") return elmList;
114− var a = [];
115− while (elmList[0] === "Cons") {
116− a.push(elmList[1]);
117− elmList = elmList[2];
118− }
119− return properEscape(a.join(''));
120− };
121−
122− var toString = function(v) {
123− if (typeof v === "boolean") {
124− return v ? "True" : "False";
125− } else if (typeof v === "number") {
126− return v+"";
127− } else if (v[0]) {
128− if (v[0].substring(0,5) === "Tuple") {
129− var output = "";
130− for (var i = v.length; --i; ) {
131− output = "," + toString(v[i]) + output;
132− }
133− if (output[0] === ",") output = output.substring(1);
134− return "("+output+")";
135− } else if (v[0] === "Cons") {
136− var start = (typeof v[1] === "string") ? '"' : "[";
137− var end = (typeof v[1] === "string") ? '"' : "]";
138− var div = (typeof v[1] === "string") ? "" : ",";
139− var output = start + toString(v[1]);
140− v = v[2];
141− while (true) {
142− if (v[0] === "Cons") {
143− output += div + toString(v[1]);
144− v = v[2];
145− } else {
146− return output + end;
147− }
148− }
149− } else if (v[0] === "Nil") {
150− return "[]";
151− } else {
152− var output = "";
153− for (var i = v.length; --i; ) {
154− output = " " + toString(v[i]) + output
155− }
156− output = v[0] + output;
157− return (v.length > 1) ? "(" + output + ")" : output;
158− }
159− }
160− return v+"";
161− };
162− var show = function(v) {
163− return Text.monospace(properEscape(toString(v)));
164− };
165− var append = function(xs,ys) {
166− if (typeof xs === "string" && typeof ys === "string") {
167− return xs.concat(ys);
168− }
169− if (xs[0] === "Nil") {
170− return ys;
171− }
172− var root = ["Cons", xs[1], ["Nil"]];
173− var curr = root;
174− xs = xs[2];
175− while (xs[0]==="Cons") {
176− curr[2] = ["Cons", xs[1], ["Nil"]];
177− xs = xs[2];
178− curr = curr[2];
179− }
180− curr[2] = ys;
181− return root;
182− };
183−
184− var str = function(s) {
185− var out = ["Nil"];
186− for (var i = s.length; i--; ) {
187− out = ["Cons", s[i], out];
188− }
189− return out;
190− };
191−
192− return {eq:eq,
193− str:str,
194− show:show,
195− Tuple:Tuple,
196− append:append,
197− listToArray:listToArray,
198− toText : toText,
199− properEscape : properEscape};
200−}();var List = function() {
201−
202− var throwError = function(f) {
203− throw "Function '" + f + "' expecting a list!";
204− }
205−
206− function length(xs) {
207− var out = 0;
208− while (xs[0] === "Cons") {
209− out += 1;
210− xs = xs[2];
211− }
212− return out;
213− };
214− var reverse = foldl(function(x_72) {
215− return function(y_73) {
216− return["Cons", x_72, y_73]
217− }
218− })(["Nil"]);
219− var concat = foldr(function(x_74) {
220− return function(y_75) {
221− return Value.append(x_74, y_75)
222− }
223− })(["Nil"]);
224− var and = foldl(function(x_77) {
225− return function(y_78) {
226− return x_77 && y_78
227− }
228− })(true);
229− var or = foldl(function(x_79) {
230− return function(y_80) {
231− return x_79 || y_80
232− }
233− })(false);
234− var sum = foldl(function(x_89) {
235− return function(y_90) {
236− return x_89 + y_90
237− }
238− })(0);
239− var product = foldl(function(x_91) {
240− return function(y_92) {
241− return x_91 * y_92
242− }
243− })(1);
244− var maximum = foldl1(function(x) { return function(y) { return Math.max(x,y) } });
245− var minimum = foldl1(function(x) { return function(y) { return Math.min(x,y) } });
246− function head(v) {
247− if (v[0] !== "Cons") {
248− throw "Error: 'head' only accepts lists of length greater than one.";
249− }
250− return v[1];
251− }
252− function tail(v) {
253− if (v[0] !== "Cons") {
254− throw "Error: 'tail' only accepts lists of length greater than one.";
255− }
256− return v[2];
257− }
258− function last(v) {
259− if (v[0] !== "Cons") {
260− throw "Error: 'last' only accepts lists of length greater than one.";
261− }
262− var out = v[1];
263− while (v[0] === "Cons") {
264− out = v[1];
265− v = v[2];
266− }
267− return out;
268− }
269− function map(f) {
270− return function(xs) {
271− if (xs[0] === "Nil") { return xs; }
272− if (xs[0] !== "Cons") { throwError('map'); }
273− var root = ["Cons", f(xs[1]), ["Nil"]];
274− var curr = root;
275− xs = xs[2];
276− while (xs[0]==="Cons") {
277− curr[2] = ["Cons", f(xs[1]), ["Nil"]];
278− xs = xs[2];
279− curr = curr[2];
280− }
281− return root;
282− }
283− }
284− function foldl(f) {
285− return function(b) {
286− return function(xs) {
287− var acc = b;
288− if (xs[0] === "Nil") { return acc; }
289− if (xs[0] !== "Cons") { throwError('foldl'); }
290− while (xs[0] === "Cons") {
291− acc = f(xs[1])(acc);
292− xs = xs[2];
293− }
294− return acc;
295− }
296− }
297− }
298− function foldr(f) {
299− return function(b) {
300− return function(xs) {
301− var acc = b;
302− if (xs[0] === "Nil") { return acc; }
303− if (xs[0] !== "Cons") { throwError('foldr'); }
304− var arr = [];
305− while (xs[0] === "Cons") {
306− arr.push(xs[1]);
307− xs = xs[2];
308− }
309− for (var i = arr.length; i--; ) {
310− acc = f(arr[i])(acc);
311− }
312− return acc;
313− }
314− }
315− }
316− function foldl1(f_49) {
317− return function(_temp_50) {
318− return function(v) {
319− if("Cons" !== v[0]) {
320− return undefined
321− }else {
322− var x_51 = v[1];
323− var xs_52 = v[2];
324− return foldl(f_49)(x_51)(xs_52)
325− }
326− }(_temp_50)
327− }
328− }
329− function foldr1(f) {
330− return function(xs) {
331− if (xs[0] === "Nil") { throw "'foldr1' requires an non-empty list." }
332− if (xs[0] !== "Cons") { throwError('foldr1'); }
333− var arr = [];
334− while (xs[0] === "Cons") {
335− arr.push(xs[1]);
336− xs = xs[2];
337− }
338− var acc = arr.pop();
339− for (var i = arr.length; i--; ) {
340− acc = f(arr[i])(acc);
341− }
342− return acc;
343− }
344− }
345− function scanl(f) {
346− return function(b) {
347− return function(xs) {
348− if (xs[0] === "Nil") { return ["Cons",b,["Nil"]]; }
349− if (xs[0] !== "Cons") { throwError('scanl'); }
350− var arr = [b];
351− while (xs[0] === "Cons") {
352− b = f(xs[1])(b);
353− arr.push(b);
354− xs = xs[2];
355− }
356− var out = ["Nil"];
357− for (var i = arr.length; i--; ) {
358− out = ["Cons", arr[i], out];
359− }
360− return out;
361− }
362− }
363− }
364− function scanl1(f) {
365− return function(xs) {
366− if (xs[0] !== "Cons") {
367− throw "Error: 'scanl1' requires a list of at least length 1.";
368− }
369− return scanl(f)(xs[1])(xs[2]);
370− }
371− }
372− function filter(pred) {
373− return function(xs) {
374− if (xs[0] === "Nil") { return xs; }
375− if (xs[0] !== "Cons") { throwError('filter'); }
376− var arr = [];
377− while (xs[0] === "Cons") {
378− if (pred(xs[1])) { arr.push(xs[1]); }
379− xs = xs[2];
380− }
381− var out = ["Nil"];
382− for (var i = arr.length; i--; ) {
383− out = ["Cons", arr[i], out];
384− }
385− return out;
386− }
387− }
388− function concatMap(f_76) {
389− return function(x) {
390− return concat(map(f_76)(x))
391− }
392− }
393− function forall(pred) {
394− return foldl(function(x) { return function(acc) {
395− return acc && pred(x);
396− };})(true);
397− }
398− function exists(pred) {
399− return foldl(function(x) { return function(acc) {
400− return acc || pred(x);
401− };})(false);
402− }
403− function partition(pred_93) {
404− return function(lst_94) {
405− return function() {
406− var v = lst_94;
407− var c = [function(v) {
408− if("Nil" !== v[0]) {
409− return undefined
410− }else {
411− return["Tuple2", ["Nil"], ["Nil"]]
412− }
413− }, function(v) {
414− if("Cons" !== v[0]) {
415− return undefined
416− }else {
417− var x_95 = v[1];
418− var xs_96 = v[2];
419− return function(v) {
420− if("Tuple2" !== v[0]) {
421− return undefined
422− }else {
423− var as_97 = v[1];
424− var bs_98 = v[2];
425− return pred_93(x_95) ? ["Tuple2", ["Cons", x_95, as_97], bs_98] : ["Tuple2", as_97, ["Cons", x_95, bs_98]]
426− }
427− }(partition(pred_93)(xs_96))
428− }
429− }];
430− for(var i = c.length;i--;) {
431− var r = c[i](v);
432− if(r !== undefined) {
433− return r
434− }
435− }
436− }()
437− }
438− }
439− function zipWith(f) {
440− return function(listA) {
441− return function(listB) {
442− if (listA[0] === "Nil" || listB[0] === "Nil") { return ["Nil"]; }
443− if (listA[0] !== "Cons" || listB[0] !== "Cons") { throwError('zipWith'); }
444− var arr = [];
445− while (listA[0] === "Cons" && listB[0] === "Cons") {
446− arr.push(f(listA[1])(listB[1]));
447− listA = listA[2];
448− listB = listB[2];
449− }
450− var out = ["Nil"];
451− for (var i = arr.length; i--; ) {
452− out = ["Cons", arr[i], out];
453− }
454− return out;
455− }
456− }
457− }
458− function zip(listA) {
459− return function(listB) {
460− if (listA[0] === "Nil" || listB[0] === "Nil") { return ["Nil"]; }
461− if (listA[0] !== "Cons" || listB[0] !== "Cons") { throwError('zip'); }
462− var arr = [];
463− while (listA[0] === "Cons" && listB[0] === "Cons") {
464− arr.push(["Tuple2", listA[1], listB[1]]);
465− listA = listA[2];
466− listB = listB[2];
467− }
468− var out = ["Nil"];
469− for (var i = arr.length; i--; ) {
470− out = ["Cons", arr[i], out];
471− }
472− return out;
473− }
474− }
475− function unzip(pairs_112) {
476− return function() {
477− var v = pairs_112;
478− var c = [function(v) {
479− if("Nil" !== v[0]) {
480− return undefined
481− }else {
482− return["Tuple2", ["Nil"], ["Nil"]]
483− }
484− }, function(v) {
485− if("Cons" !== v[0]) {
486− return undefined
487− }else {
488− var p_113 = v[1];
489− var ps_114 = v[2];
490− return function(v) {
491− if("Tuple2" !== v[0]) {
492− return undefined
493− }else {
494− if("Tuple2" !== v[1][0]) {
495− return undefined
496− }else {
497− var x_115 = v[1][1];
498− var y_116 = v[1][2];
499− if("Tuple2" !== v[2][0]) {
500− return undefined
501− }else {
502− var xs_117 = v[2][1];
503− var ys_118 = v[2][2];
504− return["Tuple2", ["Cons", x_115, xs_117], ["Cons", y_116, ys_118]]
505− }
506− }
507− }
508− }(["Tuple2", p_113, unzip(ps_114)])
509− }
510− }];
511− for(var i = c.length;i--;) {
512− var r = c[i](v);
513− if(r !== undefined) {
514− return r
515− }
516− }
517− }()
518− }
519− function intersperse(sep_119) {
520− return function(xs_120) {
521− return function() {
522− var v = xs_120;
523− var c = [function(v) {
524− if("Nil" !== v[0]) {
525− return undefined
526− }else {
527− return["Nil"]
528− }
529− }, function(v) {
530− if("Cons" !== v[0]) {
531− return undefined
532− }else {
533− var a_124 = v[1];
534− if("Nil" !== v[2][0]) {
535− return undefined
536− }else {
537− return["Cons", a_124, ["Nil"]]
538− }
539− }
540− }, function(v) {
541− if("Cons" !== v[0]) {
542− return undefined
543− }else {
544− var a_121 = v[1];
545− if("Cons" !== v[2][0]) {
546− return undefined
547− }else {
548− var b_122 = v[2][1];
549− var cs_123 = v[2][2];
550− return["Cons", a_121, ["Cons", sep_119, intersperse(sep_119)(["Cons", b_122, cs_123])]]
551− }
552− }
553− }];
554− for(var i = c.length;i--;) {
555− var r = c[i](v);
556− if(r !== undefined) {
557− return r
558− }
559− }
560− }()
561− }
562− }
563− function intercalate(sep_125) {
564− return function(xs_126) {
565− return function() {
566− var v = xs_126;
567− var c = [function(v) {
568− if("Nil" !== v[0]) {
569− return undefined
570− }else {
571− return["Nil"]
572− }
573− }, function(v) {
574− if("Cons" !== v[0]) {
575− return undefined
576− }else {
577− var a_130 = v[1];
578− if("Nil" !== v[2][0]) {
579− return undefined
580− }else {
581− return a_130
582− }
583− }
584− }, function(v) {
585− if("Cons" !== v[0]) {
586− return undefined
587− }else {
588− var a_127 = v[1];
589− if("Cons" !== v[2][0]) {
590− return undefined
591− }else {
592− var b_128 = v[2][1];
593− var cs_129 = v[2][2];
594− return Value.append(a_127, Value.append(sep_125, intercalate(sep_125)(["Cons", b_128, cs_129])))
595− }
596− }
597− }];
598− for(var i = c.length;i--;) {
599− var r = c[i](v);
600− if(r !== undefined) {
601− return r
602− }
603− }
604− }()
605− }
606− }
607− function sort(xs) {
608− if (xs[0] === "Nil") { return xs; }
609− if (xs[0] !== "Cons") { throwError('sort'); }
610− var arr = [];
611− while (xs[0] === "Cons") {
612− arr.push(xs[1]);
613− xs = xs[2];
614− }
615− arr.sort(function(a,b) { return a - b});
616− var out = ["Nil"];
617− for (var i = arr.length; i--; ) {
618− out = [ "Cons", arr[i], out ];
619− }
620− return out;
621− }
622− function take(n) { return function(xs) {
623− if (n <= 0) { return ["Nil"]; }
624− if (xs[0] === "Nil") { return xs; }
625− if (xs[0] !== "Cons") { throwError('take'); }
626− var out = [ "Cons", xs[1], ["Nil"] ];
627− var temp = out;
628− xs = xs[2];
629− --n;
630− while (xs[0] === "Cons" && n > 0) {
631− temp[2] = [ "Cons", xs[1], ["Nil"] ];
632− temp = temp[2];
633− xs = xs[2];
634− --n;
635− }
636− return out;
637− };
638− }
639− function drop(n) { return function(xs) {
640− if (xs[0] === "Nil") { return xs; }
641− if (xs[0] !== "Cons") { throwError('drop'); }
642− while (xs[0] === "Cons" && n > 0) {
643− xs = xs[2];
644− --n;
645− }
646− return xs;
647− };
648− }
649− return {head:head,
650− tail:tail,
651− last:last,
652− map:map,
653− foldl:foldl,
654− foldr:foldr,
655− foldl1:foldl1,
656− foldr1:foldr1,
657− scanl:scanl,
658− scanl1:scanl1,
659− filter:filter,
660− length:length,
661− reverse:reverse,
662− concat:concat,
663− concatMap:concatMap,
664− and:and,
665− or:or,
666− forall:forall,
667− exists:exists,
668− sum:sum,
669− product:product,
670− maximum:maximum,
671− minimum:minimum,
672− partition:partition,
673− zipWith:zipWith,
674− zip:zip,
675− unzip:unzip,
676− intersperse:intersperse,
677− intercalate:intercalate,
678− sort:sort,
679− take:take,
680− drop:drop};
681−}();
682−var Data = function() {
683−
684−var Char = function() {
685− return {fromCode : function(c) { return String.fromCharCode(c); },
686− toCode : function(c) { return c.charCodeAt(0); },
687− toUpper : function(c) { return c.toUpperCase(); },
688− toLower : function(c) { return c.toLowerCase(); },
689− toLocaleUpper : function(c) { return c.toLocaleUpperCase(); },
690− toLocaleLower : function(c) { return c.toLocaleLowerCase(); }
691− };
692−}();
693−
694−var Maybe = function() {
695− function consMaybe(x) { return function(xs) {
696− if (x[0] === "Just") return ["Cons", x[1], xs];
697− return xs;
698− };
699− }
700− function fromMaybe(b) { return function(m) {
701− if (m[0] === "Just") return m[1];
702− return b;
703− };
704− }
705− function mapCons(f) { return function(y) { return function(xs) {
706− var x = f(y);
707− if (x[0] === "Just") return ["Cons", x[1], xs];
708− return xs;
709− };
710− };
711− }
712− function maybe(b) { return function(f) { return function(m) {
713− if (m[0] === "Just") return f(m[1]);
714− return b;
715− };
716− };
717− }
718−
719− return {Just : function(x) { return ["Just",x]; },
720− Nothing : ["Nothing"],
721− catMaybes : List.foldr(consMaybe)(["Nil"]),
722− isJust : function(m) { return m[0] === "Just"; },
723− isNothing : function(m) { return m[0] === "Nothing"; },
724− fromMaybe : fromMaybe,
725− consMaybe : consMaybe,
726− mapMaybe : function(f) { return List.foldr(mapCons(f))(["Nil"]); },
727− maybe : maybe
728− };
729−}();
730−
731−/*
732−var String = function() {
733−
734− function append(s1) { return function(s2) {
735− return s1.concat(s2);
736− };
737− }
738− function map(f) { return function(s) {
739− for (var i = s.length; i--; ) { s[i] = f(s[i]); }
740− };
741− }
742−
743− function intercalate(sep) { return function(ss) {
744− return Value.listToArray(ss).join(sep);
745− };
746− }
747− function intersperse(sep) { return function(s) {
748− return s.split("").join(sep);
749− };
750− }
751−
752− function foldl(f) { return function(b) { return function(s) {
753− var acc = b;
754− for (var i = 0, len = s.length; i < len; ++i) { acc = f(s[i])(acc); }
755− return acc;
756− };
757− };
758− }
759− function foldr(f) { return function(b) { return function(s) {
760− var acc = b;
761− for (var i = s.length; i--; ) { acc = f(s[i])(acc); }
762− return acc;
763− };
764− };
765− }
766−
767− function concatMap(f) { return function(s) {
768− var a = s.split("");
769− for (var i = a.length; i--; ) { a[i] = f(a[i]); }
770− return a.join("");
771− };
772− }
773−
774− function forall(pred) { return function(s) {
775− for (var i = s.length; i--; ) { if (!pred(s[i])) {return false}; }
776− return true;
777− };
778− }
779− function exists(pred) { return function(s) {
780− for (var i = s.length; i--; ) { if (pred(s[i])) {return true}; }
781− return false;
782− };
783− }
784−
785− return {cons : append,
786− snoc : append,
787− head : function(s) { return s[0]; },
788− last : function(s) { return s[s.length-1]; },
789− tail : function(s) { return s.slice(1); },
790− length : function(s) { return s.length; },
791− map : map,
792− intercalate : intercalate,
793− intersperse : intersperse,
794− reverse : function(s) { return s.split("").reverse().join(""); },
795− toLower : function(s) { return s.toLowerCase(); },
796− toUpper : function(s) { return s.toUpperCase(); },
797− foldl : foldl,
798− foldr : foldr,
799− concat : function(ss) { return Value.listToArray(ss).join(""); },
800− concatMap : concatMap,
801− forall : forall,
802− exists : exists,
803− //filter : filter,
804− //take:,
805− //drop:,
806− toText : Value.toText,
807− properEscape : Value.properEscape
808− };
809−}();
810−*/
811−return {String: {toText:Value.toText, properEscape:Value.properEscape},
812− Char:Char,
813− Maybe:Maybe,
814− List:List
815− };
816−}();
817−var Color = function() {
818−
819− var create = function(r,g,b,a) {
820− return { r: r,
821− g: g,
822− b: b,
823− a: a };
824− };
825−
826− var extract = function(c) {
827− if (c.a === 1) {
828− return 'rgb(' + c.r + ',' + c.g + ',' + c.b + ')';
829− }
830− return 'rgba(' + c.r + ',' + c.g + ',' + c.b + ',' + c.a + ')';
831− };
832−
833− var rgba = function(r) { return function(g) { return function(b) {
834− return function(a) { return create(r,g,b,a); }; }; };
835− };
836−
837− var rgb = function(r) { return function(g) { return function(b) {
838− return create(r,g,b,1); }; };
839− };
840− return {black: create( 0, 0, 0,1),
841− white: create(255,255,255,1),
842− red : create(255, 0, 0,1),
843− green: create( 0,255, 0,1),
844− blue : create( 0, 0,255,1),
845−
846− gray : create(128,128,128,1),
847− grey : create(128,128,128,1),
848−
849− yellow : create(255,255, 0,1),
850− cyan : create( 0,255,255,1),
851− magenta : create(255, 0,255,1),
852−
853− rgba : rgba,
854− rgb : rgb,
855− Internal : { extract:extract }
856− };
857−}();
858−var Element = function() {
859− var newElement = function(elementType) {
860− var e = document.createElement(elementType);
861− e.id = Guid.guid();
862− e.style.padding = "0";
863− e.style.margin = "0";
864− return e;
865− };
866− var addTo = function(container, elem) {
867− container.appendChild(clone(elem));
868− };
869− var clone = function(e) {
870− return e;
871− };
872− var divify = function(e) {
873− var div = newElement('div');
874− addTo(div, e);
875− return div;
876− };
877−
878− var rectangle = function(w) { return function(h) {
879− var e = newElement('div');
880− e.isElmLeaf = true;
881− e.style.width = w + "px";
882− e.style.height = h + "px";
883− return e;
884− };
885− };
886−
887− var makeText = function(w) { return function(pos) { return function(txt) {
888− var e = newElement('div');
889− e.isElmLeaf = true;
890− e.isElmText = true;
891− e.innerHTML = txt;
892− e.style.textAlign = pos;
893− if (w > 0) e.style.width = w + "px";
894− return e;
895− };
896− };
897− };
898− var correctTextSize = function(e) {
899− var w = e.style.width ? e.style.width.slice(0,-2) : 0;
900−
901− var t = newElement('div');
902− t.innerHTML = e.innerHTML;
903− t.style.textAlign = e.style.textAlign;
904− if (w > 0) { t.style.width = w + "px"; }
905−
906− t.style.visibility = "hidden";
907− t.style.styleFloat = "left";
908− t.style.cssFloat = "left";
909−
910− document.body.appendChild(t);
911− var cStyle = window.getComputedStyle(t);
912− if (w <= 0) e.style.width = cStyle.getPropertyValue("width");
913− e.style.height = cStyle.getPropertyValue("height");
914− document.body.removeChild(t);
915− };
916−
917− var link = function (href) { return function (e) {
918− var a = newElement('a');
919− a.href = Text.fromString(href);
920− addTo(a,e);
921− return divify(a);
922− };
923− };
924−
925− var text = makeText(0)('left');
926− var plainText = function(str) {
927− return makeText(0)("left")(Data.String.toText(str)); };
928− var justifiedText = makeText(0)('justify');
929− var centeredText = makeText(0)('center');
930− var rightedText = makeText(0)('right');
931− var asText = function(v) { return makeText(0)("left")(Value.show(v)); };
932−
933− var image = function(src) {
934− var img = newElement('img');
935− img.isElmLeaf = true;
936− img.onload = function() {
937− if (img.style.width === "" && this.width > 0) {
938− img.style.width = img.width = this.width + "px";
939− }
940− if (img.style.height === "" && this.height > 0) {
941− img.style.height = img.height = this.height + "px";
942− }
943− Dispatcher.adjust()
944− };
945− img.src = Data.String.toText(src);
946− img.name = img.src;
947− return img;
948− };
949− var fittedImage = function(w) { return function(h) { return function(src) {
950− var canvas = newElement('canvas');
951− canvas.style.width = w + 'px';
952− canvas.style.height = h + 'px';
953− canvas.width = w;
954− canvas.height = h;
955− canvas.innerHTML = "Your browser does not support the canvas element.";
956− canvas.isElmLeaf = true;
957−
958− var img = newElement('img');
959− img.onload = function() {
960− if (canvas.getContext) {
961− var ctx = canvas.getContext('2d');
962− var sx = 0, sy = 0, sWidth = this.width, sHeight = this.height;
963− if (w / h > this.width / this.height) {
964− sHeight = this.width * h / w;
965− sy = (this.height - sHeight) / 2
966− } else {
967− sWidth = this.height * w / h;
968− sx = (this.width - sWidth) / 2
969− }
970− ctx.drawImage(img, sx, sy, sWidth, sHeight,
971− 0,0, canvas.width, canvas.height);
972− }
973− };
974− img.src = Data.String.toText(src);
975− return canvas;
976− };
977− };
978− };
979−
980− var video = function(src) {
981− src = Data.String.toText(src);
982− var e = newElement('video');
983− e.controls = "controls";
984− var source = newElement('source');
985− source.src = src;
986− source.type = "video/" + src.substring(src.length - 3, src.length);
987− addTo(e, source);
988− e.isElmLeaf = true;
989− return e;
990− };
991− var audio = function(src) {
992− src = Data.String.toString(src);
993− var e = newElement('video');
994− e.controls = "controls";
995− var source = newElement('source');
996− source.src = src;
997− source.type = "audio/" + src.substring(src.length - 3, src.length);
998− addTo(e, source);
999− e.isElmLeaf = true;
1000− return e;
1001− };
1002− var collage = function(w) { return function(h) { return function(cflist) {
1003− var canvas = newElement('canvas');
1004− canvas.style.width = w + 'px';
1005− canvas.style.height = h + 'px';
1006− canvas.width = w;
1007− canvas.height = h;
1008− if (canvas.getContext) {
1009− var ctx = canvas.getContext('2d');
1010− ctx.clearRect(0,0, canvas.width, canvas.height);
1011− while (cflist[0] === "Cons") {
1012− ctx = cflist[1](ctx);
1013− cflist = cflist[2];
1014− }
1015− return canvas;
1016− }
1017− canvas.innerHTML = "Your browser does not support the canvas element.";
1018− canvas.isElmLeaf = true;
1019− return canvas;
1020− };
1021− };
1022− };
1023−
1024− var goDown = function(e) {
1025− return e.tagName === "DIV" ? e : divify(e);
1026− };
1027− var goRight = function(e) {
1028− e.style.styleFloat = "left";
1029− e.style.cssFloat = "left";
1030− return e;
1031− };
1032− var goIn = function(e) {
1033− e.style.position = 'absolute';
1034− return e;
1035− };
1036− var flowWith = function(dir, f, elist) {
1037− var container = newElement('div');
1038− for (var i = elist.length; i--; ) {
1039− addTo(container, f(elist[i]));
1040− }
1041− container.elmFlowDirection = dir;
1042− return container;
1043− };
1044−
1045− var flow = function(direction) { return function(elist) {
1046− var arr = [];
1047− while (elist[0] === "Cons") {
1048− arr.push(elist[1]);
1049− elist = elist[2];
1050− }
1051− if (direction >= 3) arr.reverse();
1052− var f = function(x) { return x; };
1053− var dir = direction % 3;
1054− if (dir == 0) return flowWith("Y", goDown , arr);
1055− if (dir == 1) return flowWith("X", goRight, arr);
1056− if (dir == 2) return flowWith("Z", goIn , arr);
1057− };
1058− };
1059−
1060− var beside = function(a) { return function(b) {
1061− return flow(4)(["Cons",a,["Cons",b,["Nil"]]]); }; };
1062− var above = function(a) { return function(b) {
1063− return flow(3)(["Cons",a,["Cons",b,["Nil"]]]); }; };
1064− var below = function(a) { return function(b) {
1065− return flow(0)(["Cons",a,["Cons",b,["Nil"]]]); }; };
1066−
1067− var box = function(pos) { return function(e) {
1068− e.style.position = "absolute";
1069− e.style.margin = "auto";
1070− var x = (pos - 1) % 3;
1071− var y = (pos - 1) / 3;
1072− if (x < 2) e.style.left = 0;
1073− if (x > 0) e.style.right = 0;
1074− if (y < 2) e.style.top = 0;
1075− if (y > 0) e.style.bottom = 0;
1076− var div = newElement('div');
1077− div.style.position = "relative";
1078− addTo(div,e);
1079− return div;
1080− };
1081− };
1082−
1083− var width = function(w) { return function(e) {
1084− if (e.tagName === "A") {
1085− width(w)(e.firstChild);
1086− return e;
1087− }
1088− if (e.hasOwnProperty('isElmText')) {
1089− var d = makeText(w)(e.style.textAlign)(e.innerHTML);
1090− e.style.height = d.style.height;
1091− }
1092− e.style.width = w + "px";
1093− return e;
1094− };
1095− };
1096− var height = function(h) { return function(e) {
1097− (e.tagName === "A" ? e.firstChild : e).style.height = h + "px";
1098− return e;
1099− };
1100− };
1101− var size = function(w) { return function(h) { return function(e) {
1102− var d = e.tagName === "A" ? e.firstChild : e;
1103− d.style.width = w + "px";
1104− d.style.height = h + "px";
1105− return e;
1106− };
1107− };
1108− };
1109−
1110− var color = function(c) { return function(e) {
1111− e.style.backgroundColor = Color.Internal.extract(c);
1112− return e;
1113− };
1114− };
1115− var opacity = function(value) { return function(e) {
1116− e.style.opacity = value;
1117− return e;
1118− };
1119− };
1120−
1121− var jsElement = function(w) { return function(h) { return function(elem) {
1122− var e = newElement('div');
1123− e.isElmLeaf = true;
1124− e.style.width = w + "px";
1125− e.style.height = h + "px";
1126− addTo(e,elem);
1127− return e;
1128− };
1129− };
1130− };
1131−
1132− return {text : text,
1133− image : image,
1134− fittedImage : fittedImage,
1135− video : video,
1136− audio : audio,
1137− collage : collage,
1138− flow : flow,
1139− layers : flow(2),
1140− rectangle : rectangle,
1141−
1142− beside : beside,
1143− above : above,
1144− below : below,
1145− box : box,
1146−
1147− width : width,
1148− height : height,
1149− size : size,
1150− color : color,
1151− opacity : opacity,
1152−
1153− link : link,
1154− asText : asText,
1155− plainText : plainText,
1156− justifiedText : justifiedText,
1157− centeredText : centeredText,
1158− rightedText : rightedText,
1159−
1160− // directions
1161− up : 0,
1162− left : 1,
1163− inward : 2,
1164− down : 3,
1165− right : 4,
1166− outward : 5,
1167−
1168− correctTextSize : correctTextSize,
1169− jsElement : jsElement
1170− };
1171−}();
1172−
1173−
1174−
1175−var Text = function() {
1176− var fromString = function(elmList) {
1177− if (typeof elmList === "string") return elmList;
1178− var a = [];
1179− while (elmList[0] === "Cons") {
1180− a.push(elmList[1]);
1181− elmList = elmList[2];
1182− }
1183− return Data.String.properEscape(a.join(''));
1184− };
1185−
1186− var addTag = function(tag) { return function(text) {
1187− return '<' + tag + ' style="padding:0;margin:0">' + text + '</' + tag + '>';
1188− };
1189− };
1190− var addStyle = function(style, value) { return function(text) {
1191− return "<span style='" + style + ":" + value + "'>" + text + "</span>";
1192− };
1193− };
1194−
1195− var typeface = function(name) { return addStyle('font-family', name); };
1196− var size = function(px) {
1197− return addStyle('font-size', px + 'px');
1198− };
1199− var header = addTag('h1');
1200− var height = function(h) { return addStyle('font-size', h+'em'); }
1201− var italic = addStyle('font-style', 'italic');
1202− var bold = addTag('b');
1203− var color = function(c) {
1204− return addStyle('color', Color.Internal.extract(c));
1205− };
1206− var underline = addStyle('text-decoration', 'underline');
1207− var overline = addStyle('text-decoration', 'overline');
1208− var strikeThrough = addStyle('text-decoration', 'line-through');
1209− var link = function(href) { return function(text) {
1210− return "<a href='" + fromString(href) + "'>" + text + "</a>";
1211− };
1212− };
1213−
1214− return {fromString : fromString,
1215− toText: fromString,
1216− header : header,
1217− height : height,
1218− italic : italic,
1219− bold : bold,
1220− underline : underline,
1221− overline : overline,
1222− strikeThrough : strikeThrough,
1223− monospace : typeface('monospace'),
1224− color : color,
1225− link : link };
1226−}();
1227−var Shape = function() {
1228−
1229− var create = function(center, ps, theta, s) {
1230− return { center: center, points: ps, theta: theta, scale: s };
1231− };
1232−
1233− //// Construction ////
1234−
1235− var polygon = function(ps) { return function(center) {
1236− var parr = [];
1237− while (ps[0] === "Cons") {
1238− parr.push([ps[1][1], ps[1][2]]);
1239− ps = ps[2];
1240− }
1241− center = [center[1], center[2]];
1242− return create(center, parr, 0, 1);
1243− };
1244−};
1245− var ngon = function(n) { return function(r) { return function(center) {
1246− var ps = [];
1247− for (var i = n; i--;) {
1248− ps.push([r * Math.cos(Math.PI * 2 * i/n),
1249− r * Math.sin(Math.PI * 2 * i/n)]);
1250− }
1251− center = [center[1], center[2]];
1252− return create(center, ps, 0, 1);
1253− };
1254− };
1255−};
1256− var rect = function(w) { return function(h) { return function(center) {
1257− var ps = [[- w/2, - h/2],
1258− [ w/2, - h/2],
1259− [ w/2, h/2],
1260− [- w/2, h/2]];
1261− center = [center[1], center[2]];
1262− return create(center, ps, 0, 1);
1263− };
1264− };
1265− };
1266− var oval = function(w) { return function(h) { return function(center) {
1267− var ps = [];
1268− for (var theta = 2 * Math.PI; theta > 0; theta -= Math.PI /50) {
1269− ps.push([w/2 * Math.cos(theta), h/2 * Math.sin(theta)]);
1270− }
1271− center = [center[1], center[2]];
1272− return create(center, ps, 0, 1);
1273− };
1274− };
1275− };
1276−
1277−//// Transforms ////
1278−
1279− var move = function(x) { return function(y) { return function(shape) {
1280− var newCenter = [x + shape.center[0],y + shape.center[1]];
1281− return create(newCenter, shape.points, shape.theta, shape.scale);
1282− };
1283− };
1284− };
1285− var rotate = function(theta) { return function(shape) {
1286− var newTheta = shape.theta + 2 * Math.PI * theta;
1287− return create(shape.center, shape.points, newTheta, shape.scale);
1288− };
1289− };
1290− var scale = function(s) { return function(shape) {
1291− return create(shape.center, shape.points, shape.theta, shape.scale * s);
1292− };
1293− };
1294−
1295−
1296− //// Atomize ////
1297−
1298− var draw = function(fill) {
1299− return function(color) { return function(shape) { return function(ctx) {
1300− ctx.save();
1301− ctx.translate(shape.center[0], shape.center[1]);
1302− ctx.rotate(shape.theta);
1303− ctx.scale(shape.scale, shape.scale);
1304− ctx.beginPath();
1305− var points = shape.points;
1306− ctx.moveTo(points[0][0], points[0][1]);
1307− for (var i = points.length; i--; ) {
1308− ctx.lineTo(points[i][0], points[i][1]);
1309− }
1310− ctx.closePath();
1311− if (fill) {
1312− ctx.fillStyle = Color.Internal.extract(color);
1313− ctx.fill();
1314− } else {
1315− ctx.strokeStyle = Color.Internal.extract(color);
1316− ctx.stroke();
1317− }
1318− ctx.restore();
1319− return ctx;
1320− };
1321− };
1322− };
1323− };
1324−
1325− var customOutline = function(p) {
1326− return function(c) { return function(shape) {
1327− shape.points.push(shape.points[0]);
1328− return Line.customLine(p)(c)(shape);
1329− };
1330− };
1331− };
1332− return {polygon:polygon, ngon:ngon, rect:rect, oval:oval,
1333− move:move, rotate:rotate, scale:scale,
1334− filled:draw(true), outlined:draw(false), customOutline:customOutline };
1335−}();
1336−var Line = function() {
1337−
1338− var pair = function(a,b) { return [a,b]; };
1339−
1340− var create = function(center, ps, theta, s) {
1341− return { center: center, points: ps, theta: theta, scale: s };
1342− };
1343−
1344−
1345− //// Construction ////
1346−
1347− var line = function(ps) {
1348− var parr = [];
1349− while (ps[0] === "Cons") {
1350− parr.push(pair(ps[1][1], ps[1][2]));
1351− ps = ps[2];
1352− }
1353− return create(pair(0,0), parr, 0, 1);
1354− };
1355−
1356− //// Atomize ////
1357−
1358− var solid = function(color) { return function(line) { return function(ctx) {
1359− ctx.save();
1360− ctx.beginPath();
1361− ctx.translate(line.center[0], line.center[1]);
1362− ctx.rotate(line.theta);
1363− ctx.scale(line.scale, line.scale);
1364− var points = line.points;
1365− var i = points.length;
1366− ctx.moveTo(points[i-1][0], points[i-1][1]);
1367− while (i--) {
1368− ctx.lineTo(points[i][0], points[i][1]);
1369− }
1370− ctx.strokeStyle = Color.Internal.extract(color);
1371− ctx.stroke();
1372− ctx.restore();
1373− return ctx;
1374− };
1375− };
1376− };
1377−
1378− var customLine = function(pattern) {
1379− return function(color) { return function(line) {
1380− if (typeof pattern[0] === "string") {
1381− var temp = [];
1382− while (pattern[0] === "Cons") {
1383− temp.push(pattern[1]);
1384− pattern = pattern[2];
1385− }
1386− pattern = temp;
1387− }
1388− if (pattern.length === 0) { pattern = [8,4]; }
1389− return function(ctx) {
1390− ctx.save();
1391− ctx.beginPath();
1392− ctx.translate(line.center[0], line.center[1]);
1393− ctx.rotate(line.theta);
1394− ctx.scale(line.scale, line.scale);
1395− customLineHelp(ctx, pattern, line.points);
1396− ctx.strokeStyle = Color.Internal.extract(color);
1397− ctx.stroke();
1398− ctx.restore();
1399− return ctx;
1400− };
1401− };
1402− };
1403− };
1404− var customLineHelp = function(ctx, pattern, points) {
1405− var i = points.length - 1;
1406− var x0 = points[i][0], y0 = points[i][1];
1407− var x1=0, y1=0, dx=0, dy=0, remaining=0, nx=0, ny=0;
1408− var pindex = 0, plen = pattern.length;
1409− var draw = true, segmentLength = pattern[0];
1410− ctx.moveTo(x0,y0);
1411− while (i--) {
1412− x1 = points[i][0]; y1 = points[i][1];
1413− dx = x1 - x0; dy = y1 - y0;
1414− remaining = Math.sqrt(dx * dx + dy * dy);
1415− while (segmentLength <= remaining) {
1416− x0 += dx * segmentLength / remaining;
1417− y0 += dy * segmentLength / remaining;
1418− ctx[draw ? 'lineTo' : 'moveTo'](x0, y0);
1419− // update starting position
1420− dx = x1 - x0; dy = y1 - y0;
1421− remaining = Math.sqrt(dx * dx + dy * dy);
1422− // update pattern
1423− draw = !draw;
1424− pindex = (pindex + 1) % plen;
1425− segmentLength = pattern[pindex];
1426− }
1427− if (remaining > 0) {
1428− ctx[draw ? 'lineTo' : 'moveTo'](x1, y1);
1429− segmentLength -= remaining;
1430− }
1431− x0 = x1; y0 = y1;
1432− }
1433− };
1434−
1435− return {line:line, customLine:customLine, solid:solid,
1436− dashed: customLine([8,4]), dotted: customLine([3,3]) };
1437−}();
1438−
1439−var Elm = function() {
1440− var send = function(node, timestep, changed) {
1441− var kids = node.kids;
1442− for (var i = kids.length; i--; ) {
1443− kids[i].recv(timestep, changed, node.id);
1444− }
1445− };
1446− var input = function(base) {
1447− this.id = Guid.guid();
1448− this.value = base;
1449− this.kids = [];
1450− this.recv = function(timestep, eid, v) {
1451− var changed = eid === this.id;
1452− if (changed) { this.value = v; }
1453− send(this, timestep, changed);
1454− };
1455− Dispatcher.inputs.push(this);
1456− };
1457− var lift = function(func,args) {
1458− this.id = Guid.guid();
1459− this.value = null;
1460− this.kids = [];
1461− this.inbox = {};
1462−
1463− args.reverse();
1464− this.recalc = function() {
1465− var f = func;
1466− for (var i = args.length; i--; ) {
1467− f = f(args[i].value);
1468− }
1469− this.value = f;
1470− };
1471− this.recalc();
1472−
1473− this.recv = function(timestep, changed, parentID) {
1474− if (!this.inbox.hasOwnProperty(timestep)) {
1475− this.inbox[timestep] = { changed: false, count: 0 };
1476− }
1477− var box = this.inbox[timestep];
1478− box.count += 1;
1479− if (changed) { box.changed = true; }
1480− if (box.count == args.length) {
1481− if (box.changed) { this.recalc() }
1482− send(this, timestep, box.changed);
1483− delete this.inbox[timestep];
1484− }
1485− };
1486− for (var i = args.length; i--; ) {
1487− args[i].kids.push(this);
1488− }
1489− };
1490− var fold = function(func,base,input) {
1491− this.id = Guid.guid();
1492− this.value = base;
1493− this.kids = [];
1494− this.recv = function(timestep, changed, parentID) {
1495− if (changed) { this.value = func(input.value)(this.value); }
1496− send(this, timestep, changed);
1497− };
1498− input.kids.push(this);
1499− };
1500−
1501− var dropIf = function(pred,base,input) {
1502− this.id = Guid.guid();
1503− this.value = pred(input.value) ? base : input.value;
1504− this.kids = [];
1505− this.recv = function(timestep, changed, parentID) {
1506− var chng = changed && !pred(input.value);
1507− if (chng) { this.value = input.value; }
1508− send(this, timestep, chng);
1509− };
1510− input.kids.push(this);
1511− };
1512− var dropRepeats = function(input) {
1513− this.id = Guid.guid();
1514− this.value = input.value;
1515− this.kids = [];
1516− this.recv = function(timestep, changed, parentID) {
1517− var chng = changed && !eq(this.value,input.value);
1518− if (chng) { this.value = input.value; }
1519− send(this, timestep, chng);
1520− };
1521− input.kids.push(this);
1522− };
1523−
1524− var dropWhen = function(s1) { return function(b) { return function(s2) {
1525− var pairs = new lift(function(x){return function(y){return [x,y];};},[s1,s2]);
1526− var dropped = new dropIf(function(p){return p[0];},[true,b],pairs);
1527− return new lift(function(p){return p[1];},[dropped]); }; };
1528− };
1529−
1530− var sampleOn = function(s1,s2) {
1531− this.id = Guid.guid();
1532− this.value = s2.value;
1533− this.kids = [];
1534− this.inbox = {};
1535−
1536− this.recv = function(timestep, changed, parentID) {
1537− var chng = changed && parentID === s1.id;
1538− if (chng) { this.value = s2.value; }
1539− send(this, timestep, chng);
1540− };
1541− s1.kids.push(this);
1542− s2.kids.push(this);
1543− };
1544−
1545− return {Input: function(x) {return new input(x);},
1546− Lift: function(f,xs){return new lift(f,xs);},
1547− Fold: function(f,b,x){return new fold(f,b,x);},
1548− keepIf : function(pred) { return function(base) { return function(sig) {
1549− return new dropIf(function(x) { return !pred(x)},base,sig); }; }; },
1550− dropIf : function(pred) { return function(base) { return function(sig) {
1551− return new dropIf(pred,base,sig); }; }; },
1552− keepWhen : function(s) { return dropWhen(new lift(function(b){return !b;},[s])); },
1553− dropWhen : dropWhen,
1554− dropRepeats : function(s) { return new dropRepeats(s);},
1555− sampleOn : function(s1) { return function(s2) { return new sampleOn(s1,s2); }; }
1556− };
1557−}();
1558−
1559−var Dispatcher = function() {
1560− var program = null;
1561− var timestep = 0;
1562− var inputs = [];
1563−
1564− var correctSize = function(e) {
1565− var kids = e.childNodes;
1566− var len = kids.length;
1567− if (e.hasOwnProperty('isElmLeaf')) {
1568− if (e.hasOwnProperty('isElmText')) { Element.correctTextSize(e); }
1569− var w = e.style.width === "" ?
1570− 0 : e.style.width.slice(0,-2) - 0;
1571− var h = e.style.height === "" ?
1572− 0 : e.style.height.slice(0,-2) - 0;
1573− return [w, h];
1574− }
1575− if (len === 1) {
1576− var dim = correctSize(kids[0]);
1577− if (e.style.width !== "") { dim[0] = e.style.width.slice(0,-2) - 0; }
1578− if (e.style.height !== "") { dim[1] = e.style.height.slice(0,-2) - 0; }
1579− if (dim[0] !== 0) { e.style.width = dim[0] + "px"; }
1580− if (dim[1] !== 0) { e.style.height = dim[1] + "px"; }
1581− return dim;
1582− }
1583− var wmax = 0, hmax = 0, wsum = 0, hsum = 0;
1584− var hasWidth = true, hasHeight = true, dim = null;
1585− while (len--) {
1586− dim = correctSize(kids[len]);
1587− wmax = Math.max(wmax, dim[0]);
1588− hmax = Math.max(hmax, dim[1]);
1589− wsum += dim[0];
1590− hsum += dim[1];
1591− hasWidth = hasWidth && dim[0] > 0;
1592− hasHeight = hasHeight && dim[1] > 0;
1593− }
1594− var w = wmax, h = hmax, dir = e.elmFlowDirection;
1595− if (dir === "X") { w = hasWidth ? wsum : 0; }
1596− if (dir === "Y") { h = hasHeight ? hsum : 0; }
1597− if (w > 0) e.style.width = w + "px";
1598− if (h > 0) e.style.height = h + "px";
1599− return [w,h];
1600− };
1601−
1602− var initialize = function() {
1603− program = ElmCode.main();
1604− if (!program.hasOwnProperty('recv')) {
1605− program = Elm.Input(program);
1606− }
1607− var content = document.getElementById('content');
1608− content.appendChild(program.value);
1609− adjust();
1610− var w = document.getElementById('widthChecker').offsetWidth;
1611− if (w !== window.innerWidth) {
1612− Dispatcher.notify(Window.dimensions.id, Value.Tuple(w, window.innerHeight));
1613− }
1614− program = Elm.Lift(function(value) {
1615− var content = document.getElementById('content');
1616− var kid = content.children[0]
1617− content.replaceChild(value, kid);
1618− delete kid;
1619− adjust();
1620− return value;
1621− }, [program]);
1622− };
1623− var adjust = function() {
1624− var content = document.getElementById('content');
1625− correctSize(content.children[0]);
1626− }
1627− var notify = function(id, v) {
1628− timestep += 1;
1629− for (var i = inputs.length; i--; ) {
1630− inputs[i].recv(timestep, id, v);
1631− }
1632− };
1633− return {initialize:initialize, notify:notify, adjust:adjust, inputs:inputs};
1634−}();
1635−var Signal = function() {
1636− function toElmString(str) {
1637− var out = ["Nil"];
1638− for (var i = str.length; i--; ) {
1639− out = ["Cons", str[i], out];
1640− }
1641− return out;
1642− }
1643− var addListener = function() {
1644− if(document.addEventListener) {
1645− return function(element, event, handler) {
1646− element.addEventListener(event, handler, false);
1647− };
1648− }
1649− else {
1650− return function(element, event, handler) {
1651− element.attachEvent('on' + event, handler);
1652− };
1653− }
1654− }();
1655−
1656− var Mouse = function() {
1657− var position = Elm.Input(Value.Tuple(0,0));
1658− var isDown = Elm.Input(false);
1659− var isClicked = Elm.Input(false);
1660− var clicks = Elm.Input(Value.Tuple());
1661−
1662− function getXY(e) {
1663− var posx = 0;
1664− var posy = 0;
1665− if (!e) var e = window.event;
1666− if (e.pageX || e.pageY) {
1667− posx = e.pageX;
1668− posy = e.pageY;
1669− } else if (e.clientX || e.clientY) {
1670− posx = e.clientX + document.body.scrollLeft +
1671− document.documentElement.scrollLeft;
1672− posy = e.clientY + document.body.scrollTop +
1673− document.documentElement.scrollTop;
1674− }
1675− return Value.Tuple(posx, posy);
1676− }
1677−
1678− addListener(document, 'click', function(e) {
1679− Dispatcher.notify(isClicked.id, true);
1680− Dispatcher.notify(clicks.id, Value.Tuple());
1681− Dispatcher.notify(isClicked.id, false);
1682− });
1683− addListener(document, 'mousedown', function(e) {
1684− Dispatcher.notify(isDown.id, true); });
1685− addListener(document, 'mouseup', function(e) {
1686− Dispatcher.notify(isDown.id, false); });
1687− addListener(document, 'mousemove', function(e) {
1688− Dispatcher.notify(position.id, getXY(e)); });
1689− var clickedOn = function(elem) {
1690− var click = Elm.Input(false);
1691− addListener(elem, 'click', function(e) {
1692− Dispatcher.notify(click.id, true);
1693− Dispatcher.notify(click.id, false);
1694− });
1695− return Value.Tuple(elem, click);
1696− };
1697− return {position: position,
1698− x: Elm.Lift(function(p){return p[1];},[position]),
1699− y: Elm.Lift(function(p){return p[2];},[position]),
1700− isClicked: isClicked,
1701− isDown: isDown,
1702− clicks: clicks,
1703− isClickedOn: clickedOn
1704− };
1705− }();
1706−
1707− var Time = function() {
1708− var every = function(t) {
1709− t *= 1000;
1710− var clock = Elm.Input(0);
1711− var time = 0;
1712− setInterval(function() {
1713− time += t;
1714− Dispatcher.notify(clock.id, time/1000);
1715− }, t);
1716− return clock;
1717− };
1718− var after = function(t) {
1719− t *= 1000;
1720− var thread = Elm.Input(false);
1721− setTimeout(function() { Dispatcher.notify(thread.id, true); }, t);
1722− return thread;
1723− };
1724− var before = function(t) {
1725− t *= 1000;
1726− var thread = Elm.Input(true);
1727− setTimeout(function() { Dispatcher.notify(thread.id, false); }, t);
1728− return thread;
1729− };
1730− return {every:every,after:after,before:before};
1731− }();
1732−
1733− var Window = function() {
1734− var dimensions = Elm.Input(Value.Tuple(window.innerWidth,window.innerHeight));
1735− addListener(window, 'resize', function(e) {
1736− var w = document.getElementById('widthChecker').offsetWidth;
1737− Dispatcher.notify(dimensions.id, Value.Tuple(w, window.innerHeight));
1738− });
1739− return {dimensions:dimensions,
1740− width : Elm.Lift(function(p){return p[1];},[dimensions]),
1741− height: Elm.Lift(function(p){return p[2];},[dimensions]) };
1742− }();
1743−
1744− var Keyboard = { Raw : function() {
1745− var keysDown = Elm.Input(["Nil"]);
1746− var charPressed = Elm.Input(["Nothing"]);
1747− function remove(x,xs) {
1748− if (xs[0] === "Nil") return xs;
1749− if (xs[1] === x) return xs[2];
1750− return ["Cons", xs[1], remove(x,xs[2])];
1751− }
1752− function has(x,xs) {
1753− while (xs[0] !== "Nil") {
1754− if (xs[1] === x) return true;
1755− xs = xs[2];
1756− }
1757− return false;
1758− }
1759− addListener(document, 'keydown', function(e) {
1760− if (has(e.keyCode, keysDown.value)) return;
1761− Dispatcher.notify(keysDown.id, ["Cons", e.keyCode, keysDown.value]);
1762− });
1763− addListener(document, 'keyup', function(e) {
1764− var codes = remove(e.keyCode, keysDown.value)
1765− Dispatcher.notify(keysDown.id, codes);
1766− });
1767− addListener(window, 'blur', function(e) {
1768− Dispatcher.notify(keysDown.id, ["Nil"]);
1769− });
1770− addListener(document, 'keypress', function(e) {
1771− Dispatcher.notify(charPressed.id, ["Just",e.charCode || e.keyCode]);
1772− Dispatcher.notify(charPressed.id, ["Nothing"]);
1773− });
1774− return {keysDown:keysDown,
1775− charPressed:charPressed};
1776− }()
1777− };
1778−
1779− var HTTP = function() {
1780− var fetch = function(how) { return function(url) {
1781− var thread = Elm.Input(["Waiting"]);
1782− var request = {};
1783− if (window.XMLHttpRequest) { request = new XMLHttpRequest(); }
1784− else if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); }
1785− request.onreadystatechange = function(e) {
1786− if (request.readyState === 4) {
1787− Dispatcher.notify(thread.id,
1788− request.status === 200
1789− ? ["Success", toElmString(request.responseText)]
1790− : ["Failure", request.status, toElmString(request.statusText)]);
1791− }
1792− };
1793− request.open(how, Data.String.toText(url), true);
1794− request.send(null);
1795− return thread;
1796− };
1797− };
1798− var fetches = function(how) { return function(input) {
1799− var output = Elm.Input(["Nothing"]);
1800− var fetcher = Elm.Lift(update, [input]);
1801− var combine = Elm.Lift(function(x) { return function(y) { return x; } }, [output,fetcher]);
1802− function update(strOpt) {
1803− if (strOpt[0] !== "Just") {
1804− try { Dispatcher.notify(output.id, ["Nothing"]); } catch(e) {}
1805− return [];
1806− }
1807− try {
1808− Dispatcher.notify(output.id, ["Just", ["Waiting"]]);
1809− } catch(e) { output.value = ["Just", ["Waiting"]]; }
1810− var request = {};
1811− if (window.XMLHttpRequest) { request = new XMLHttpRequest(); }
1812− else if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); }
1813− request.onreadystatechange = function(e) {
1814− if (request.readyState === 4) {
1815− Dispatcher.notify(output.id,
1816− ["Just", request.status === 200
1817− ? ["Success", toElmString(request.responseText)]
1818− : ["Failure", request.status, toElmString(request.statusText)]]);
1819− }
1820− };
1821− request.open(how, Data.String.toText(strOpt[1]), true);
1822− request.send(null);
1823− return [];
1824− }
1825− return combine;
1826− };
1827− };
1828− return {get : fetch("GET"), post : fetch("POST"),
1829− gets : fetches("GET"), posts : fetches("POST")
1830− };
1831− }();
1832− var Random = function() {
1833− var inRange = function(min) { return function(max) {
1834− return Elm.Input(Math.floor(Math.random() * (max-min+1)) + min);
1835− };
1836− };
1837− var randomize = function(min) { return function(max) { return function(signal) {
1838− return Elm.Lift(function(x) { return Math.floor(Math.random() * (max-min+1)) + min;},[signal]);
1839− };
1840− };
1841− };
1842− return { inRange:inRange, randomize:randomize };
1843− }();
1844− var Input = function() {
1845− var newTextInput = function(elem, ghostText) {
1846− elem.isElmLeaf = true;
1847− var str = Elm.Input(["Nil"]);
1848− addListener(elem, 'keyup', function(e) {
1849− Dispatcher.notify(str.id, toElmString(elem.value));
1850− elem.focus();
1851− });
1852− return Value.Tuple(elem, str);
1853− };
1854− var newElement = function(name) {
1855− var e = document.createElement(name);
1856− e.id = Guid.guid();
1857− return e;
1858− };
1859− var textArea = function(cols) { return function(rows) {
1860− var textarea = newElement('textarea');
1861− textarea.rows = rows;
1862− textarea.cols = cols;
1863− return newTextInput(textarea, "");
1864− };
1865− };
1866− var textField = function(ghostText) {
1867− var field = newElement('input');
1868− field.type = 'text';
1869− return newTextInput(field, ghostText);
1870− };
1871− var password = function(ghostText) {
1872− var field = newElement('input');
1873− field.type = 'password';
1874− return newTextInput(field, ghostText);
1875− };
1876− var checkbox = function(checked) {
1877− var box = newElement('input');
1878− box.type = 'checkbox';
1879− box.checked = checked;
1880− var status = Elm.Input(checked);
1881− addListener(box, 'change', function(e) {
1882− Dispatcher.notify(status.id, box.checked);
1883− });
1884− return Value.Tuple(box, status);
1885− };
1886− var dropDown = function(options) {
1887− var slct = newElement('select');
1888− var opts = [];
1889− while (options[0] === "Cons") {
1890− var opt = newElement('option');
1891− var str = Text.toText(options[1][1]);
1892− opt.value = str;
1893− opt.innerHTML = str;
1894− slct.appendChild(opt);
1895− opts.push(options[1][2]);
1896− options = options[2];
1897− }
1898− var status = Elm.Input(opts[0]);
1899− addListener(slct, 'change', function(e) {
1900− Dispatcher.notify(status.id, opts[slct.selectedIndex]);
1901− });
1902− return Value.Tuple(slct, status);
1903− };
1904− var stringDropDown = function(opts) {
1905− return dropDown(List.map (function(x) {return Value.Tuple(x,x);}) (opts));
1906− };
1907− var button = function(name) {
1908− var b = newElement('input');
1909− b.type = "button";
1910− b.value = Text.toText(name);
1911− var press = Elm.Input(false);
1912− addListener(b, 'click', function(e) {
1913− Dispatcher.notify(press.id, true);
1914− Dispatcher.notify(press.id, false);
1915− });
1916− return Value.Tuple(b,press);
1917− };
1918− return {textArea:textArea, textField:textField,
1919− password:password, checkbox:checkbox,
1920− dropDown:dropDown, stringDropDown:stringDropDown,
1921− button:button};
1922− }();
1923−
1924− return {addListener:addListener,
1925− Mouse:Mouse,
1926− Keyboard:Keyboard,
1927− Time:Time,
1928− Window:Window,
1929− HTTP:HTTP,
1930− Random:Random,
1931− Input:Input,
1932− constant : function(v) { return Elm.Input(v); },
1933− lift : function(f){return function(e){return Elm.Lift(f,[e]);};},
1934− lift2 : function(f) { return function(e1) { return function(e2) {
1935− return Elm.Lift(f, [e1,e2]); }; }; },
1936− lift3 : function(f) { return function(e1) { return function(e2) {
1937− return function(e3){return Elm.Lift(f,[e1,e2,e3]);};};};},
1938− lift4 : function(f) { return function(e1) { return function(e2) {
1939− return function(e3) { return function(e4) {
1940− return Elm.Lift(f, [e1,e2,e3,e4]); }; }; }; }; },
1941− foldp : function(f) { return function(b) { return function(e) {
1942− return Elm.Fold(f,b,e); }; }; },
1943− count : function(sig){return Elm.Fold(function(_){return function(c){return c+1;};},0,sig)},
1944− keepIf : Elm.keepIf,
1945− dropIf : Elm.dropIf,
1946− keepWhen : Elm.keepWhen,
1947− dropWhen : Elm.dropWhen,
1948− dropRepeats : Elm.dropRepeats,
1949− sampleOn : Elm.sampleOn
1950− };
1951−}();
1952−var Prelude = function() {
1953− var mod = function(x) { return function(y) {
1954− var r = x % y;
1955− var m = x==0 ? 0 : (y>0 ? (x>=0 ? r : r+y) : -mod(-x)(-y));
1956− return m == y ? 0 : m;
1957− }; };
1958−
1959− var min = function(x) { return function(y) { return Math.min(x,y); }; };
1960− var max = function(x) { return function(y) { return Math.max(x,y); }; };
1961−
1962− var flip=function(f){return function(x){return function(y){return f(y)(x);};};};
1963− var clamp = function(lo) { return function(hi) {
1964− return function(x) { return Math.min(hi, Math.max(lo, x)); };
1965− };
1966− };
1967− var curry = function(f) { return function(x) { return function(y) {
1968− return f(["Tuple2",x,y]); }; };
1969− };
1970− var uncurry = function(f) { return function(p) {
1971− if (p[0] !== "Tuple2") {
1972− throw "Function was uncurry'd but was not given a pair.";
1973− }
1974− return f(p[1])(p[2]); };
1975− };
1976−
1977− var logBase=function(b){return function(x){return Math.log(x)/Math.log(b);};};
1978−
1979− return {id : function(x) { return x; },
1980− not : function(b) { return !b; },
1981− fst : function(p) { return p[1]; },
1982− snd : function(p) { return p[2]; },
1983− rem : function(x) { return function(y) { return x % y; }; },
1984− sqrt : Math.sqrt,
1985− abs : Math.abs,
1986− pi : Math.PI,
1987− sin : Math.sin,
1988− cos : Math.cos,
1989− tan : Math.tan,
1990− asin : Math.asin,
1991− acos : Math.acos,
1992− atan : Math.atan,
1993− mod : mod,
1994− min : min,
1995− max : max,
1996− flip : flip,
1997− clamp : clamp,
1998− curry : curry,
1999− uncurry : uncurry,
2000− logBase : logBase,
2001− Just : Data.Maybe.Just,
2002− Nothing : Data.Maybe.Nothing,
2003− maybe : Data.Maybe.maybe,
2004− map : Data.List.map,
2005− filter : Data.List.filter,
2006− head : Data.List.head,
2007− tail : Data.List.tail,
2008− last : Data.List.last,
2009− length : Data.List.length,
2010− reverse : Data.List.reverse,
2011− foldr : Data.List.foldr,
2012− foldr1 : Data.List.foldr1,
2013− foldl : Data.List.foldl,
2014− foldl1 : Data.List.foldl1,
2015− and : Data.List.and,
2016− or : Data.List.or,
2017− forall : Data.List.forall,
2018− exists : Data.List.exists,
2019− sum : Data.List.sum,
2020− product : Data.List.product,
2021− concat : Data.List.concat,
2022− concatMap : Data.List.concatMap,
2023− maximum : Data.List.maximum,
2024− minimum : Data.List.minimum,
2025− scanl : Data.List.scanl,
2026− scanl1 : Data.List.scanl1,
2027− take : Data.List.take,
2028− drop : Data.List.drop,
2029− lift : Signal.lift,
2030− lift2 : Signal.lift2,
2031− lift3 : Signal.lift3,
2032− lift4 : Signal.lift4,
2033− foldp : Signal.foldp,
2034− constant : Signal.constant,
2035− count : Signal.count,
2036− keepIf : Signal.keepIf,
2037− dropIf : Signal.dropIf,
2038− keepWhen : Signal.keepWhen,
2039− dropWhen : Signal.dropWhen,
2040− dropRepeats : Signal.dropRepeats,
2041− sampleOn : Signal.sampleOn
2042− };
2043−}();
2044−var eq = Value.eq;
2045−
2046−Signal.addListener(document, 'elm_log', function(e) { console.log(e.value); });
2047−Signal.addListener(document, 'elm_title', function(e) { document.title = e.value; });
2048−Signal.addListener(document, 'elm_redirect', function(e) {
2049− if (e.value.length > 0) { window.location = e.value; }
2050− });
2051−
2052−var includeGlobal = this;
2053−(function() {
2054− var include = function(library) {
2055− for (var i in library) {
2056− if (i === 'Internal') continue;
2057− try {
2058− includeGlobal[i] = library[i];
2059− } catch (err) {
2060− if (i === 'length') {
2061− includeGlobal.execScript('var length;');
2062− length = library[i];
2063− continue;
2064− }
2065− }
2066− }
2067− };
2068− var includeAs = function(name) { return function(library) {
2069− includeGlobal[name] = includeGlobal[name] || {};
2070− for (var i in library) {
2071− if (i === 'Internal') continue;
2072− includeGlobal[name][i] = library[i];
2073− }
2074− };
2075− };
2076− include (Element);
2077− include (Text);
2078−
2079− color = Element.color;
2080− height = Element.height;
2081− show = Value.show;
2082−
2083− include (Color);
2084− include (Shape);
2085− include (Line);
2086−
2087− includeAs ('Time') (Signal.Time);
2088− includeAs ('Mouse') (Signal.Mouse);
2089− includeAs ('Keyboard') (Signal.Keyboard);
2090− includeAs ('Window') (Signal.Window);
2091− includeAs ('HTTP') (Signal.HTTP);
2092− includeAs ('Input') (Signal.Input);
2093− includeAs ('Random') (Signal.Random);
2094−
2095−}());
2096−
2097−var ElmCode = {};
2098−ElmCode.Data = Data;
2099−ElmCode.Signal = Signal;
2100−ElmCode.Data.List = List;
2101−ElmCode.Foreign = Foreign;
2102−ElmCode.Prelude = Prelude;
elm/elm-runtime-0.3.6.jsnew file+131
@@ -0,0 +1,131 @@
1+var Guid=function(){var d=0;return{guid:function(){return d+=1}}}(),Foreign=function(){var d=function(a){for(var c=["Nil"],b=a.length;b--;)c=["Cons",a[b],c];return c},b=function(a){for(var c=[];"Cons"===a[0];)c.push(a[1]),a=a[2];return c},c=function(a){return a.slice(1)},a=function(a){return["Tuple"+a.length].concat(a)};return{JavaScript:{castJSBoolToBool:function(a){return a},castBoolToJSBool:function(a){return a},castJSNumberToFloat:function(a){return a},castFloatToJSNumber:function(a){return a},
2+castJSNumberToInt:function(a){return~~a},castIntToJSNumber:function(a){return a},Experimental:{castJSElementToElement:function(a){return Element.jsElement(a)},castElementToJSElement:function(a){return a}},castJSArrayToList:d,castListToJSArray:b,castJSStringToString:d,castStringToJSString:function(a){return"string"===typeof a?a:b(a).join("")},castTupleToJSTuple2:c,castTupleToJSTuple3:c,castTupleToJSTuple4:c,castTupleToJSTuple5:c,castJSTupleToTuple2:a,castJSTupleToTuple3:a,castJSTupleToTuple4:a,castJSTupleToTuple5:a}}}(),
3+ElmJSON=function(){function d(a){return function(g){function b(a){switch(a[0]){case "JsonNull":return null;case "JsonString":return c.castStringToJSString(a[1]);case "JsonObject":var g={},a=a[1][1],d;for(d in a)g[d]=b(a[d]);return g;case "JsonArray":g=c.castListToJSArray(a[1]);for(d=g.length;d--;)g[d]=b(g[d]);return g;default:return a[1]}}return JSON.stringify(b(["JsonObject",g]),null,c.castStringToJSString(a))}}function b(a){function g(a){switch(typeof a){case "string":return["JsonString",c.castJSStringToString(a)];
4+case "number":return["JsonNumber",c.castJSNumberToFloat(a)];case "boolean":return["JsonBool",c.castJSBoolToBool(a)];case "object":if(null===a)return["JsonNull"];for(var b in a)a[b]=g(a[b]);return a instanceof Array?["JsonArray",c.castJSArrayToList(a)]:["JsonObject",["JSON",a]]}}var a=JSON.parse(a),b;for(b in a)a[b]=g(a[b]);return["JSON",a]}var c=Foreign.JavaScript;return{empty:["JSON",{}],singleton:function(a){return function(b){var e={};e[c.castStringToJSString(a)]=b;return["JSON",e]}},insert:function(a){return function(b){return function(e){var e=
5+e[1],d={},k;for(k in e)d[k]=e[k];d[c.castStringToJSString(a)]=b;return["JSON",d]}}},lookup:function(a){return function(b){var e=c.castStringToJSString(a);return b[1].hasOwnProperty(e)?Just(b[1][e]):Nothing}},lookupWithDefault:function(a){return function(b){return function(e){var d=c.castStringToJSString(b);return e[1].hasOwnProperty(d)?e[1][d]:a}}},remove:function(a){return function(b){var b=b[1],e={},d;for(d in b)e[d]=b[d];delete e[c.castStringToJSString(a)];return["JSON",e]}},toPrettyJSString:d,
6+toJSString:d(""),fromJSString:b,toPrettyString:function(a){return function(b){return c.castJSStringToString(d(a)(b))}},toString:function(a){return c.castJSStringToString(d("")(a))},fromString:function(a){return b(c.castStringToJSString(a))},toList:function(a){var a=a[1],b=[],e;for(e in a)b.push(Value.Tuple(c.castJSStringToString(e),a[e]));return c.castJSArrayToList(b)},fromList:function(a){for(var a=c.castListToJSArray(a),b={},e=a.length;e--;)b[c.castStringToJSString(a[e][1])]=a[e][2];return["JSON",
7+b]},JsonString:function(a){return["JsonString",a]},JsonNumber:function(a){return["JsonNumber",a]},JsonBool:function(a){return["JsonBool",a]},JsonNull:["JsonNull"],JsonArray:function(a){return["JsonArray",a]},JsonObject:function(a){return["JsonObject",a]}}}();Foreign.JavaScript.JSON=ElmJSON;
8+var Value=function(){var d=function(a,c){if("object"===typeof a){if(a===c)return!0;if(a.length!==c.length)return!1;for(var b=a.length;b--;)if(!d(a[b],c[b]))return!1;return!0}return a===c},b=function(a){a.replace('"',"&#34;");a.replace("&","&#38;");a.replace("'","&#39;");a.replace("<","&#60;");a.replace(">","&#62;");return a},c=function(a){if("boolean"===typeof a)return a?"True":"False";if("number"!==typeof a&&a[0]){if("Tuple"===a[0].substring(0,5)){for(var b="",e=a.length;--e;)b=","+c(a[e])+b;","===
9+b[0]&&(b=b.substring(1));return"("+b+")"}if("Cons"===a[0])for(var e="string"===typeof a[1]?'"':"]",d="string"===typeof a[1]?"":",",b=("string"===typeof a[1]?'"':"[")+c(a[1]),a=a[2];;)if("Cons"===a[0])b+=d+c(a[1]),a=a[2];else return b+e;else{if("Nil"===a[0])return"[]";if("JSON"===a[0])return"(JSON.fromList "+c(ElmJSON.toList(a))+")";b="";for(e=a.length;--e;)b=" "+c(a[e])+b;b=a[0]+b;return 1<a.length?"("+b+")":b}}return a+""};return{eq:d,str:function(a){for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],
10+b];return b},show:function(a){return Text.monospace(b(c(a)))},Tuple:function(){var a=arguments.length,b=Array(a+1);for(b[0]="Tuple"+arguments.length;a--;)b[a+1]=arguments[a];return b},append:function(a,b){if("string"===typeof a&&"string"===typeof b)return a.concat(b);if("Nil"===a[0])return b;for(var c=["Cons",a[1],["Nil"]],d=c,a=a[2];"Cons"===a[0];)d[2]=["Cons",a[1],["Nil"]],a=a[2],d=d[2];d[2]=b;return c},listToArray:function(a){for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return b},toText:function(a){if("string"===
11+typeof a)return a;for(var c=[];"Cons"===a[0];)c.push(a[1]),a=a[2];return b(c.join(""))},properEscape:b}}(),List=function(){function d(a){return function(f){if("Nil"===f[0])return f;"Cons"!==f[0]&&h("map");for(var b=["Cons",a(f[1]),["Nil"]],c=b,f=f[2];"Cons"===f[0];)c[2]=["Cons",a(f[1]),["Nil"]],f=f[2],c=c[2];return b}}function b(a){return function(f){return function(b){var c=f;if("Nil"===b[0])return c;for("Cons"!==b[0]&&h("foldl");"Cons"===b[0];)c=a(b[1])(c),b=b[2];return c}}}function c(a){return function(f){return function(b){var c=
12+f;if("Nil"===b[0])return c;"Cons"!==b[0]&&h("foldr");for(var d=[];"Cons"===b[0];)d.push(b[1]),b=b[2];for(b=d.length;b--;)c=a(d[b])(c);return c}}}function a(a){return function(f){var c;"Cons"!==f[0]?c=void 0:(c=f[1],f=f[2],c=b(a)(c)(f));return c}}function g(a){return function(f){return function(b){if("Nil"===b[0])return["Cons",f,["Nil"]];"Cons"!==b[0]&&h("scanl");for(var c=[f];"Cons"===b[0];)f=a(b[1])(f),c.push(f),b=b[2];for(var b=["Nil"],d=c.length;d--;)b=["Cons",c[d],b];return b}}}function e(a){return function(f){a:{for(var b=
13+[function(a){return"Nil"!==a[0]?void 0:["Tuple2",["Nil"],["Nil"]]},function(f){if("Cons"===f[0]){var b=f[1],f=f[2];var c=e(a)(f);"Tuple2"!==c[0]?b=void 0:(f=c[1],c=c[2],b=a(b)?["Tuple2",["Cons",b,f],c]:["Tuple2",f,["Cons",b,c]]);return b}}],c=b.length;c--;){var d=b[c](f);if(void 0!==d){f=d;break a}}f=void 0}return f}}function i(a){a:{for(var f=[function(a){return"Nil"!==a[0]?void 0:["Tuple2",["Nil"],["Nil"]]},function(a){if("Cons"!==a[0])a=void 0;else if(a=["Tuple2",a[1],i(a[2])],"Tuple2"!==a[0]||
14+"Tuple2"!==a[1][0])a=void 0;else var f=a[1][1],b=a[1][2],a="Tuple2"!==a[2][0]?void 0:["Tuple2",["Cons",f,a[2][1]],["Cons",b,a[2][2]]];return a}],b=f.length;b--;){var c=f[b](a);if(void 0!==c){a=c;break a}}a=void 0}return a}function k(a){return function(f){a:{for(var b=[function(a){return"Nil"!==a[0]?void 0:["Nil"]},function(a){if("Cons"===a[0]){var f=a[1];return"Nil"!==a[2][0]?void 0:["Cons",f,["Nil"]]}},function(f){if("Cons"===f[0]){var b=f[1];if("Cons"===f[2][0]){var c=f[2][1],f=f[2][2];return["Cons",
15+b,["Cons",a,k(a)(["Cons",c,f])]]}}}],c=b.length;c--;){var d=b[c](f);if(void 0!==d){f=d;break a}}f=void 0}return f}}function o(a){return function(f){a:{for(var b=[function(a){return"Nil"!==a[0]?void 0:["Nil"]},function(a){if("Cons"===a[0]){var f=a[1];return"Nil"!==a[2][0]?void 0:f}},function(f){if("Cons"===f[0]){var b=f[1];if("Cons"===f[2][0]){var c=f[2][1],f=f[2][2];return Value.append(b,Value.append(a,o(a)(["Cons",c,f])))}}}],c=b.length;c--;){var d=b[c](f);if(void 0!==d){f=d;break a}}f=void 0}return f}}
16+var h=function(a){throw"Function '"+a+"' expecting a list!";},l=b(function(a){return function(f){return["Cons",a,f]}})(["Nil"]),j=c(function(a){return function(f){return Value.append(a,f)}})(["Nil"]),n=b(function(a){return function(f){return a&&f}})(!0),p=b(function(a){return function(f){return a||f}})(!1),m=b(function(a){return function(f){return a+f}})(0),q=b(function(a){return function(f){return a*f}})(1),t=a(function(a){return function(f){return Math.max(a,f)}}),r=a(function(a){return function(f){return Math.min(a,
17+f)}});return{head:function(a){if("Cons"!==a[0])throw"Error: 'head' only accepts lists of length greater than one.";return a[1]},tail:function(a){if("Cons"!==a[0])throw"Error: 'tail' only accepts lists of length greater than one.";return a[2]},last:function(a){if("Cons"!==a[0])throw"Error: 'last' only accepts lists of length greater than one.";for(var f=a[1];"Cons"===a[0];)f=a[1],a=a[2];return f},map:d,foldl:b,foldr:c,foldl1:a,foldr1:function(a){return function(f){if("Nil"===f[0])throw"'foldr1' requires an non-empty list.";
18+"Cons"!==f[0]&&h("foldr1");for(var b=[];"Cons"===f[0];)b.push(f[1]),f=f[2];for(var f=b.pop(),c=b.length;c--;)f=a(b[c])(f);return f}},scanl:g,scanl1:function(a){return function(f){if("Cons"!==f[0])throw"Error: 'scanl1' requires a list of at least length 1.";return g(a)(f[1])(f[2])}},filter:function(a){return function(f){if("Nil"===f[0])return f;"Cons"!==f[0]&&h("filter");for(var b=[];"Cons"===f[0];)a(f[1])&&b.push(f[1]),f=f[2];for(var f=["Nil"],c=b.length;c--;)f=["Cons",b[c],f];return f}},length:function(a){for(var f=
19+0;"Cons"===a[0];)f+=1,a=a[2];return f},reverse:l,concat:j,concatMap:function(a){return function(f){return j(d(a)(f))}},and:n,or:p,forall:function(a){return b(function(f){return function(b){return b&&a(f)}})(!0)},exists:function(a){return b(function(f){return function(b){return b||a(f)}})(!1)},sum:m,product:q,maximum:t,minimum:r,partition:e,zipWith:function(a){return function(f){return function(b){if("Nil"===f[0]||"Nil"===b[0])return["Nil"];("Cons"!==f[0]||"Cons"!==b[0])&&h("zipWith");for(var c=[];"Cons"===
20+f[0]&&"Cons"===b[0];)c.push(a(f[1])(b[1])),f=f[2],b=b[2];for(var b=["Nil"],d=c.length;d--;)b=["Cons",c[d],b];return b}}},zip:function(a){return function(b){if("Nil"===a[0]||"Nil"===b[0])return["Nil"];("Cons"!==a[0]||"Cons"!==b[0])&&h("zip");for(var c=[];"Cons"===a[0]&&"Cons"===b[0];)c.push(["Tuple2",a[1],b[1]]),a=a[2],b=b[2];for(var b=["Nil"],d=c.length;d--;)b=["Cons",c[d],b];return b}},unzip:i,intersperse:k,intercalate:o,sort:function(a){if("Nil"===a[0])return a;"Cons"!==a[0]&&h("sort");for(var b=
21+[];"Cons"===a[0];)b.push(a[1]),a=a[2];b.sort(function(a,b){return a-b});for(var a=["Nil"],c=b.length;c--;)a=["Cons",b[c],a];return a},take:function(a){return function(b){if(0>=a)return["Nil"];if("Nil"===b[0])return b;"Cons"!==b[0]&&h("take");var c=["Cons",b[1],["Nil"]],d=c,b=b[2];for(--a;"Cons"===b[0]&&0<a;)d[2]=["Cons",b[1],["Nil"]],d=d[2],b=b[2],--a;return c}},drop:function(a){return function(b){if("Nil"===b[0])return b;for("Cons"!==b[0]&&h("drop");"Cons"===b[0]&&0<a;)b=b[2],--a;return b}}}}(),
22+Data=function(){var d;d=function(b){return function(a){return"Just"===b[0]?["Cons",b[1],a]:a}};var b=function(b){return function(a){return function(d){var e=b(a);return"Just"===e[0]?["Cons",e[1],d]:d}}};d={Just:function(b){return["Just",b]},Nothing:["Nothing"],catMaybes:List.foldr(d)(["Nil"]),isJust:function(b){return"Just"===b[0]},isNothing:function(b){return"Nothing"===b[0]},fromMaybe:function(b){return function(a){return"Just"===a[0]?a[1]:b}},consMaybe:d,mapMaybe:function(c){return List.foldr(b(c))(["Nil"])},
23+maybe:function(b){return function(a){return function(d){return"Just"===d[0]?a(d[1]):b}}}};return{String:{toText:Value.toText,properEscape:Value.properEscape},Char:{fromCode:function(b){return String.fromCharCode(b)},toCode:function(b){return b.charCodeAt(0)},toUpper:function(b){return b.toUpperCase()},toLower:function(b){return b.toLowerCase()},toLocaleUpper:function(b){return b.toLocaleUpperCase()},toLocaleLower:function(b){return b.toLocaleLowerCase()}},Maybe:d,List:List}}(),Color=function(){var d=
24+function(b,c,a,d){return{r:b,g:c,b:a,a:d}};return{black:d(0,0,0,1),white:d(255,255,255,1),red:d(255,0,0,1),green:d(0,255,0,1),blue:d(0,0,255,1),gray:d(128,128,128,1),grey:d(128,128,128,1),yellow:d(255,255,0,1),cyan:d(0,255,255,1),magenta:d(255,0,255,1),rgba:function(b){return function(c){return function(a){return function(g){return d(b,c,a,g)}}}},rgb:function(b){return function(c){return function(a){return d(b,c,a,1)}}},Internal:{extract:function(b){return 1===b.a?"rgb("+b.r+","+b.g+","+b.b+")":"rgba("+
25+b.r+","+b.g+","+b.b+","+b.a+")"}}}}(),Element=function(){var d=function(a){a=document.createElement(a);a.id=Guid.guid();a.style.padding="0";a.style.margin="0";return a},b=function(a){var b=d("div");b.appendChild(a);return b},c=function(a){return function(b){return function(c){var e=d("div");e.isElmLeaf=!0;e.isElmText=!0;e.innerHTML=c;e.style.textAlign=b;0<a&&(e.style.width=a+"px");return e}}},a=c(0)("left"),g=c(0)("justify"),e=c(0)("center"),i=c(0)("right"),k=function(a){return"DIV"===a.tagName?a:
26+b(a)},o=function(a){a.style.styleFloat="left";a.style.cssFloat="left";return a},h=function(a){a.style.position="absolute";return a},l=function(a,b,c){for(var e=d("div"),g=c.length;g--;){var h=b(c[g]);e.appendChild(h)}e.elmFlowDirection=a;return e},j=function(a){return function(b){for(var c=[];"Cons"===b[0];)c.push(b[1]),b=b[2];3<=a&&c.reverse();b=a%3;if(0==b)return l("Y",k,c);if(1==b)return l("X",o,c);if(2==b)return l("Z",h,c)}},n=function(a){return function(b){if("A"===b.tagName)return n(a)(b.firstChild),
27+b;if(b.hasOwnProperty("isElmText")){var d=c(a)(b.style.textAlign)(b.innerHTML);b.style.height=d.style.height}b.style.width=a+"px";return b}};return{text:a,image:function(a){var b=d("img");b.isElmLeaf=!0;b.onload=function(){""===b.style.width&&0<this.width&&(b.style.width=b.width=this.width+"px");""===b.style.height&&0<this.height&&(b.style.height=b.height=this.height+"px");Dispatcher.adjust()};b.src=Data.String.toText(a);b.name=b.src;return b},fittedImage:function(a){return function(b){return function(c){var e=
28+d("canvas");e.style.width=a+"px";e.style.height=b+"px";e.width=a;e.height=b;e.innerHTML="Your browser does not support the canvas element.";e.isElmLeaf=!0;var g=d("img");g.onload=function(){if(e.getContext){var c=e.getContext("2d"),f=0,d=0,h=this.width,o=this.height;a/b>this.width/this.height?(o=this.width*b/a,d=(this.height-o)/2):(h=this.height*a/b,f=(this.width-h)/2);c.drawImage(g,f,d,h,o,0,0,e.width,e.height)}};g.src=Data.String.toText(c);return e}}},video:function(a){var a=Data.String.toText(a),
29+b=d("video");b.controls="controls";var c=d("source");c.src=a;c.type="video/"+a.substring(a.length-3,a.length);b.appendChild(c);b.isElmLeaf=!0;return b},audio:function(a){var a=Data.String.toString(a),b=d("video");b.controls="controls";var c=d("source");c.src=a;c.type="audio/"+a.substring(a.length-3,a.length);b.appendChild(c);b.isElmLeaf=!0;return b},collage:function(a){return function(b){return function(c){var e=d("canvas");e.style.width=a+"px";e.style.height=b+"px";e.width=a;e.height=b;if(e.getContext){var g=
30+e.getContext("2d");for(g.clearRect(0,0,e.width,e.height);"Cons"===c[0];)g=c[1](g),c=c[2];return e}e.innerHTML="Your browser does not support the canvas element.";e.isElmLeaf=!0;return e}}},flow:j,layers:j(2),rectangle:function(a){return function(b){var c=d("div");c.isElmLeaf=!0;c.style.width=a+"px";c.style.height=b+"px";return c}},beside:function(a){return function(b){return j(4)(["Cons",a,["Cons",b,["Nil"]]])}},above:function(a){return function(b){return j(3)(["Cons",a,["Cons",b,["Nil"]]])}},below:function(a){return function(b){return j(0)(["Cons",
31+a,["Cons",b,["Nil"]]])}},box:function(a){return function(b){b.style.position="absolute";b.style.margin="auto";var c=(a-1)%3,e=(a-1)/3;2>c&&(b.style.left=0);0<c&&(b.style.right=0);2>e&&(b.style.top=0);0<e&&(b.style.bottom=0);c=d("div");c.style.position="relative";c.appendChild(b);return c}},width:n,height:function(a){return function(b){("A"===b.tagName?b.firstChild:b).style.height=a+"px";return b}},size:function(a){return function(b){return function(c){var d="A"===c.tagName?c.firstChild:c;d.style.width=
32+a+"px";d.style.height=b+"px";return c}}},color:function(a){return function(b){b.style.backgroundColor=Color.Internal.extract(a);return b}},opacity:function(a){return function(b){b.style.opacity=a;return b}},link:function(a){return function(c){var e=d("a");e.href=Text.fromString(a);e.appendChild(c);return b(e)}},asText:function(a){return c(0)("left")(Value.show(a))},plainText:function(a){return c(0)("left")(Data.String.toText(a))},justifiedText:g,centeredText:e,rightedText:i,up:0,left:1,inward:2,down:3,
33+right:4,outward:5,correctTextSize:function(a){var b=a.style.width?a.style.width.slice(0,-2):0,c=d("div");c.innerHTML=a.innerHTML;c.style.textAlign=a.style.textAlign;0<b&&(c.style.width=b+"px");c.style.visibility="hidden";c.style.styleFloat="left";c.style.cssFloat="left";document.body.appendChild(c);var e=window.getComputedStyle(c);0>=b&&(a.style.width=e.getPropertyValue("width"));a.style.height=e.getPropertyValue("height");document.body.removeChild(c)},jsElement:function(a){return function(b){return function(c){var e=
34+d("div");e.isElmLeaf=!0;e.style.width=a+"px";e.style.height=b+"px";e.appendChild(c);return e}}}}}(),Text=function(){var d=function(a){if("string"===typeof a)return a;for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return Data.String.properEscape(b.join(""))},b=function(a){return function(b){return"<"+a+' style="padding:0;margin:0">'+b+"</"+a+">"}},c=function(a,b){return function(c){return"<span style='"+a+":"+b+"'>"+c+"</span>"}},a=b("h1"),g=c("font-style","italic"),b=b("b"),e=c("text-decoration",
35+"underline"),i=c("text-decoration","overline"),k=c("text-decoration","line-through");return{fromString:d,toText:d,header:a,height:function(a){return c("font-size",a+"em")},italic:g,bold:b,underline:e,overline:i,strikeThrough:k,monospace:c("font-family","monospace"),color:function(a){return c("color",Color.Internal.extract(a))},link:function(a){return function(b){return"<a href='"+d(a)+"'>"+b+"</a>"}}}}(),Shape=function(){var d=function(b,a,d,e){return{center:b,points:a,theta:d,scale:e}},b=function(b){return function(a){return function(d){return function(e){e.save();
36+e.translate(d.center[0],d.center[1]);e.rotate(d.theta);e.scale(d.scale,d.scale);e.beginPath();var i=d.points;e.moveTo(i[0][0],i[0][1]);for(var k=i.length;k--;)e.lineTo(i[k][0],i[k][1]);e.closePath();b?(e.fillStyle=Color.Internal.extract(a),e.fill()):(e.strokeStyle=Color.Internal.extract(a),e.stroke());e.restore();return e}}}};return{polygon:function(b){return function(a){for(var g=[];"Cons"===b[0];)g.push([b[1][1],b[1][2]]),b=b[2];a=[a[1],a[2]];return d(a,g,0,1)}},ngon:function(b){return function(a){return function(g){for(var e=
37+[],i=b;i--;)e.push([a*Math.cos(2*Math.PI*i/b),a*Math.sin(2*Math.PI*i/b)]);g=[g[1],g[2]];return d(g,e,0,1)}}},rect:function(b){return function(a){return function(g){var e=[[-b/2,-a/2],[b/2,-a/2],[b/2,a/2],[-b/2,a/2]],g=[g[1],g[2]];return d(g,e,0,1)}}},oval:function(b){return function(a){return function(g){for(var e=[],i=2*Math.PI;0<i;i-=Math.PI/50)e.push([b/2*Math.cos(i),a/2*Math.sin(i)]);g=[g[1],g[2]];return d(g,e,0,1)}}},move:function(b){return function(a){return function(g){return d([b+g.center[0],
38+a+g.center[1]],g.points,g.theta,g.scale)}}},rotate:function(b){return function(a){return d(a.center,a.points,a.theta+2*Math.PI*b,a.scale)}},scale:function(b){return function(a){return d(a.center,a.points,a.theta,a.scale*b)}},filled:b(!0),outlined:b(!1),customOutline:function(b){return function(a){return function(d){d.points.push(d.points[0]);return Line.customLine(b)(a)(d)}}}}}(),Line=function(){var d=function(b){return function(c){return function(a){if("string"===typeof b[0]){for(var d=[];"Cons"===
39+b[0];)d.push(b[1]),b=b[2];b=d}0===b.length&&(b=[8,4]);return function(d){d.save();d.beginPath();d.translate(a.center[0],a.center[1]);d.rotate(a.theta);d.scale(a.scale,a.scale);var g=b,k=a.points,o=k.length-1,h=k[o][0],l=k[o][1],j=0,n=0,p=0,m=0,q=0,t=0,r=g.length,u=!0,f=g[0];for(d.moveTo(h,l);o--;){j=k[o][0];n=k[o][1];p=j-h;m=n-l;for(q=Math.sqrt(p*p+m*m);f<=q;)h+=p*f/q,l+=m*f/q,d[u?"lineTo":"moveTo"](h,l),p=j-h,m=n-l,q=Math.sqrt(p*p+m*m),u=!u,t=(t+1)%r,f=g[t];0<q&&(d[u?"lineTo":"moveTo"](j,n),f-=q);
40+h=j;l=n}d.strokeStyle=Color.Internal.extract(c);d.stroke();d.restore();return d}}}};return{line:function(b){for(var c=[];"Cons"===b[0];)c.push([b[1][1],b[1][2]]),b=b[2];return{center:[0,0],points:c,theta:0,scale:1}},customLine:d,solid:function(b){return function(c){return function(a){a.save();a.beginPath();a.translate(c.center[0],c.center[1]);a.rotate(c.theta);a.scale(c.scale,c.scale);var d=c.points,e=d.length;for(a.moveTo(d[e-1][0],d[e-1][1]);e--;)a.lineTo(d[e][0],d[e][1]);a.strokeStyle=Color.Internal.extract(b);
41+a.stroke();a.restore();return a}}},dashed:d([8,4]),dotted:d([3,3])}}(),Elm=function(){var d=function(a,b,c){for(var d=a.kids,e=d.length;e--;)d[e].recv(b,c,a.id)},b=function(a){this.id=Guid.guid();this.value=a;this.kids=[];this.recv=function(a,b,c){if(b=b===this.id)this.value=c;d(this,a,b)};Dispatcher.inputs.push(this)},c=function(a,b){this.id=Guid.guid();this.value=null;this.kids=[];this.inbox={};b.reverse();this.recalc=function(){for(var c=a,d=b.length;d--;)c=c(b[d].value);this.value=c};this.recalc();
42+this.recv=function(a,c){this.inbox.hasOwnProperty(a)||(this.inbox[a]={changed:!1,count:0});var e=this.inbox[a];e.count+=1;c&&(e.changed=!0);e.count==b.length&&(e.changed&&this.recalc(),d(this,a,e.changed),delete this.inbox[a])};for(var c=b.length;c--;)b[c].kids.push(this)},a=function(a,b,c){this.id=Guid.guid();this.value=b;this.kids=[];this.recv=function(b,e){e&&(this.value=a(c.value)(this.value));d(this,b,e)};c.kids.push(this)},g=function(a,b,c){this.id=Guid.guid();this.value=a(c.value)?b:c.value;
43+this.kids=[];this.recv=function(b,e){var g=e&&!a(c.value);g&&(this.value=c.value);d(this,b,g)};c.kids.push(this)},e=function(a){this.id=Guid.guid();this.value=a.value;this.kids=[];this.recv=function(b,c){var e=c&&!eq(this.value,a.value);e&&(this.value=a.value);d(this,b,e)};a.kids.push(this)},i=function(a){return function(b){return function(d){d=new c(function(a){return function(b){return[a,b]}},[a,d]);d=new g(function(a){return a[0]},[!0,b],d);return new c(function(a){return a[1]},[d])}}},k=function(a,
44+b){this.id=Guid.guid();this.value=b.value;this.kids=[];this.inbox={};this.recv=function(c,e,g){if(e=e&&g===a.id)this.value=b.value;d(this,c,e)};a.kids.push(this);b.kids.push(this)};return{Input:function(a){return new b(a)},Lift:function(a,b){return new c(a,b)},Fold:function(b,c,d){return new a(b,c,d)},keepIf:function(a){return function(b){return function(c){return new g(function(b){return!a(b)},b,c)}}},dropIf:function(a){return function(b){return function(c){return new g(a,b,c)}}},keepWhen:function(a){return i(new c(function(a){return!a},
45+[a]))},dropWhen:i,dropRepeats:function(a){return new e(a)},sampleOn:function(a){return function(b){return new k(a,b)}}}}(),Dispatcher=function(){var d=null,b=0,c=[],a=function(b){var c=b.childNodes,d=c.length;if(b.hasOwnProperty("isElmLeaf")){b.hasOwnProperty("isElmText")&&Element.correctTextSize(b);var c=""===b.style.width?0:b.style.width.slice(0,-2)-0,g=""===b.style.height?0:b.style.height.slice(0,-2)-0;return[c,g]}if(1===d){var h=a(c[0]);b.style.hasOwnProperty("width")&&0<b.style.width.length&&
46+(h[0]=b.style.width.slice(0,-2)-0);b.style.hasOwnProperty("height")&&0<b.style.height.length&&(h[1]=b.style.height.slice(0,-2)-0);0!==h[0]&&(b.style.width=h[0]+"px");0!==h[1]&&(b.style.height=h[1]+"px");return h}for(var l=0,j=g=0,n=0,p=!0,m=!0;d--;)h=a(c[d]),l=Math.max(l,h[0]),g=Math.max(g,h[1]),j+=h[0],n+=h[1],p=p&&0<h[0],m=m&&0<h[1];c=l;d=b.elmFlowDirection;"X"===d&&(c=p?j:0);"Y"===d&&(g=m?n:0);0<c&&(b.style.width=c+"px");0<g&&(b.style.height=g+"px");return[c,g]},g=function(){var b=document.getElementById("content");
47+a(b.children[0])};return{initialize:function(){d=ElmCode.main();d.hasOwnProperty("recv")||(d=Elm.Input(d));document.getElementById("content").appendChild(d.value);g();var a=document.getElementById("widthChecker").offsetWidth;a!==window.innerWidth&&Dispatcher.notify(Window.dimensions.id,Value.Tuple(a,window.innerHeight));d=Elm.Lift(function(a){var b=document.getElementById("content"),c=b.children[0];b.replaceChild(a,c);delete c;g();return a},[d])},notify:function(a,d){b+=1;for(var g=c.length;g--;)c[g].recv(b,
48+a,d)},adjust:g,inputs:c}}(),Signal=function(){function d(a){for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],b];return b}var b;b=document.addEventListener?function(a,b,c){a.addEventListener(b,c,!1)}:function(a,b,c){a.attachEvent("on"+b,c)};var c,a=function(a){var b=0,c=0;a||(a=window.event);if(a.pageX||a.pageY)b=a.pageX,c=a.pageY;else if(a.clientX||a.clientY)b=a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,c=a.clientY+document.body.scrollTop+document.documentElement.scrollTop;
49+return Value.Tuple(b,c)},g=Elm.Input(Value.Tuple(0,0)),e=Elm.Input(!1),i=Elm.Input(!1),k=Elm.Input(Value.Tuple());b(document,"click",function(){Dispatcher.notify(i.id,!0);Dispatcher.notify(k.id,Value.Tuple());Dispatcher.notify(i.id,!1)});b(document,"mousedown",function(){Dispatcher.notify(e.id,!0)});b(document,"mouseup",function(){Dispatcher.notify(e.id,!1)});b(document,"mousemove",function(b){Dispatcher.notify(g.id,a(b))});c={position:g,x:Elm.Lift(function(a){return a[1]},[g]),y:Elm.Lift(function(a){return a[2]},
50+[g]),isClicked:i,isDown:e,clicks:k,isClickedOn:function(a){var c=Elm.Input(!1);b(a,"click",function(){Dispatcher.notify(c.id,!0);Dispatcher.notify(c.id,!1)});return Value.Tuple(a,c)}};var o,h=Elm.Input(Value.Tuple(window.innerWidth,window.innerHeight));b(window,"resize",function(){var a=document.getElementById("widthChecker").offsetWidth;Dispatcher.notify(h.id,Value.Tuple(a,window.innerHeight))});o={dimensions:h,width:Elm.Lift(function(a){return a[1]},[h]),height:Elm.Lift(function(a){return a[2]},
51+[h])};var l=function(a,b){return"Nil"===b[0]?b:b[1]===a?b[2]:["Cons",b[1],l(a,b[2])]},j=Elm.Input(["Nil"]),n=Elm.Input(["Nothing"]);b(document,"keydown",function(a){var b;a:{for(b=j.value;"Nil"!==b[0];){if(b[1]===a.keyCode){b=!0;break a}b=b[2]}b=!1}b||Dispatcher.notify(j.id,["Cons",a.keyCode,j.value])});b(document,"keyup",function(a){a=l(a.keyCode,j.value);Dispatcher.notify(j.id,a)});b(window,"blur",function(){Dispatcher.notify(j.id,["Nil"])});b(document,"keypress",function(a){Dispatcher.notify(n.id,
52+["Just",a.charCode||a.keyCode]);Dispatcher.notify(n.id,["Nothing"])});var p={Raw:{keysDown:j,charPressed:n}},m;m=function(a){return function(b){var c=Elm.Input(["Waiting"]),e={};window.XMLHttpRequest?e=new XMLHttpRequest:window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLHTTP"));e.onreadystatechange=function(){4===e.readyState&&Dispatcher.notify(c.id,200===e.status?["Success",d(e.responseText)]:["Failure",e.status,d(e.statusText)])};e.open(a,Data.String.toText(b),!0);e.send(null);return c}};
53+var q=function(a){return function(b){var c=Elm.Input(["Nothing"]),b=Elm.Lift(function(b){if("Just"!==b[0]){try{Dispatcher.notify(c.id,["Nothing"])}catch(e){}return[]}try{Dispatcher.notify(c.id,["Just",["Waiting"]])}catch(g){c.value=["Just",["Waiting"]]}var s={};window.XMLHttpRequest?s=new XMLHttpRequest:window.ActiveXObject&&(s=new ActiveXObject("Microsoft.XMLHTTP"));s.onreadystatechange=function(){4===s.readyState&&Dispatcher.notify(c.id,["Just",200===s.status?["Success",d(s.responseText)]:["Failure",
54+s.status,d(s.statusText)]])};s.open(a,Data.String.toText(b[1]),!0);s.send(null);return[]},[b]);return Elm.Lift(function(a){return function(){return a}},[c,b])}};m={get:m("GET"),post:m("POST"),gets:q("GET"),posts:q("POST")};var t=function(a){a.isElmLeaf=!0;var c=Elm.Input(["Nil"]);b(a,"keyup",function(){Dispatcher.notify(c.id,d(a.value));a.focus()});return Value.Tuple(a,c)},r=function(a){a=document.createElement(a);a.id=Guid.guid();return a},u=function(a){for(var c=r("select"),d=[];"Cons"===a[0];){var e=
55+r("option"),g=Text.toText(a[1][1]);e.value=g;e.innerHTML=g;c.appendChild(e);d.push(a[1][2]);a=a[2]}var h=Elm.Input(d[0]);b(c,"change",function(){Dispatcher.notify(h.id,d[c.selectedIndex])});return Value.Tuple(c,h)};return{addListener:b,Mouse:c,Keyboard:p,Time:{every:function(a){var a=1E3*a,b=Elm.Input(0),c=0;setInterval(function(){c+=a;Dispatcher.notify(b.id,c/1E3)},a);return b},after:function(a){var a=1E3*a,b=Elm.Input(!1);setTimeout(function(){Dispatcher.notify(b.id,!0)},a);return b},before:function(a){var a=
56+1E3*a,b=Elm.Input(!0);setTimeout(function(){Dispatcher.notify(b.id,!1)},a);return b}},Window:o,HTTP:m,Random:{inRange:function(a){return function(b){return Elm.Input(Math.floor(Math.random()*(b-a+1))+a)}},randomize:function(a){return function(b){return function(c){return Elm.Lift(function(){return Math.floor(Math.random()*(b-a+1))+a},[c])}}}},Input:{textArea:function(a){return function(b){var c=r("textarea");c.rows=b;c.cols=a;return t(c,"")}},textField:function(a){var b=r("input");b.type="text";return t(b,
57+a)},password:function(a){var b=r("input");b.type="password";return t(b,a)},checkbox:function(a){var c=r("input");c.type="checkbox";c.checked=a;var d=Elm.Input(a);b(c,"change",function(){Dispatcher.notify(d.id,c.checked)});return Value.Tuple(c,d)},dropDown:u,stringDropDown:function(a){return u(List.map(function(a){return Value.Tuple(a,a)})(a))},button:function(a){var c=r("input");c.type="button";c.value=Text.toText(a);var d=Elm.Input(!1);b(c,"click",function(){Dispatcher.notify(d.id,!0);Dispatcher.notify(d.id,
58+!1)});return Value.Tuple(c,d)}},constant:function(a){return Elm.Input(a)},lift:function(a){return function(b){return Elm.Lift(a,[b])}},lift2:function(a){return function(b){return function(c){return Elm.Lift(a,[b,c])}}},lift3:function(a){return function(b){return function(c){return function(d){return Elm.Lift(a,[b,c,d])}}}},lift4:function(a){return function(b){return function(c){return function(d){return function(e){return Elm.Lift(a,[b,c,d,e])}}}}},foldp:function(a){return function(b){return function(c){return Elm.Fold(a,
59+b,c)}}},count:function(a){return Elm.Fold(function(){return function(a){return a+1}},0,a)},keepIf:Elm.keepIf,dropIf:Elm.dropIf,keepWhen:Elm.keepWhen,dropWhen:Elm.dropWhen,dropRepeats:Elm.dropRepeats,sampleOn:Elm.sampleOn}}(),Prelude=function(){var d=function(b){return function(c){var a=b%c,a=0==b?0:0<c?0<=b?a:a+c:-d(-b)(-c);return a==c?0:a}};return{id:function(b){return b},not:function(b){return!b},fst:function(b){return b[1]},snd:function(b){return b[2]},rem:function(b){return function(c){return b%
60+c}},div:function(b){return function(c){return~~(b/c)}},compare:function(b){return function(c){b="object"===typeof b?toText(b):b;c="object"===typeof c?toText(c):c;return[b===c?"EQ":b<c?"LT":"GT"]}},toFloat:function(b){return b},round:function(b){return Math.round(b)},floor:function(b){return Math.floor(b)},ceiling:function(b){return Math.ceil(b)},truncate:function(b){return~~b},sqrt:Math.sqrt,abs:Math.abs,pi:Math.PI,e:Math.E,sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,
61+mod:d,min:function(b){return function(c){return Math.min(b,c)}},max:function(b){return function(c){return Math.max(b,c)}},flip:function(b){return function(c){return function(a){return b(a)(c)}}},clamp:function(b){return function(c){return function(a){return Math.min(c,Math.max(b,a))}}},curry:function(b){return function(c){return function(a){return b(["Tuple2",c,a])}}},uncurry:function(b){return function(c){if("Tuple2"!==c[0])throw"Function was uncurry'd but was not given a pair.";return b(c[1])(c[2])}},
62+logBase:function(b){return function(c){return Math.log(c)/Math.log(b)}},Just:Data.Maybe.Just,Nothing:Data.Maybe.Nothing,maybe:Data.Maybe.maybe,map:Data.List.map,filter:Data.List.filter,head:Data.List.head,tail:Data.List.tail,last:Data.List.last,length:Data.List.length,reverse:Data.List.reverse,foldr:Data.List.foldr,foldr1:Data.List.foldr1,foldl:Data.List.foldl,foldl1:Data.List.foldl1,and:Data.List.and,or:Data.List.or,forall:Data.List.forall,exists:Data.List.exists,sum:Data.List.sum,product:Data.List.product,
63+concat:Data.List.concat,concatMap:Data.List.concatMap,maximum:Data.List.maximum,minimum:Data.List.minimum,scanl:Data.List.scanl,scanl1:Data.List.scanl1,take:Data.List.take,drop:Data.List.drop,lift:Signal.lift,lift2:Signal.lift2,lift3:Signal.lift3,lift4:Signal.lift4,foldp:Signal.foldp,constant:Signal.constant,count:Signal.count,keepIf:Signal.keepIf,dropIf:Signal.dropIf,keepWhen:Signal.keepWhen,dropWhen:Signal.dropWhen,dropRepeats:Signal.dropRepeats,sampleOn:Signal.sampleOn}}(),eq=Value.eq;
64+Signal.addListener(document,"elm_log",function(d){console.log(d.value)});Signal.addListener(document,"elm_title",function(d){document.title=d.value});Signal.addListener(document,"elm_redirect",function(d){0<d.value.length&&(window.location=d.value)});var includeGlobal=this;
65+(function(){var d=function(b){for(var a in b)if("Internal"!==a)try{includeGlobal[a]=b[a]}catch(d){"length"===a&&(includeGlobal.execScript("var length;"),length=b[a])}},b=function(b){return function(a){includeGlobal[b]=includeGlobal[b]||{};for(var d in a)"Internal"!==d&&(includeGlobal[b][d]=a[d])}};d(Element);d(Text);color=Element.color;height=Element.height;show=Value.show;d(Color);d(Shape);d(Line);b("Time")(Signal.Time);b("Mouse")(Signal.Mouse);b("Keyboard")(Signal.Keyboard);b("Window")(Signal.Window);
66+b("HTTP")(Signal.HTTP);b("Input")(Signal.Input);b("Random")(Signal.Random)})();var ElmCode={};ElmCode.Data=Data;ElmCode.Signal=Signal;ElmCode.Data.List=List;ElmCode.Foreign=Foreign;ElmCode.Prelude=Prelude;var Guid=function(){var d=0;return{guid:function(){return d+=1}}}(),Foreign=function(){var d=function(a){for(var c=["Nil"],b=a.length;b--;)c=["Cons",a[b],c];return c},b=function(a){for(var c=[];"Cons"===a[0];)c.push(a[1]),a=a[2];return c},c=function(a){return a.slice(1)},a=function(a){return["Tuple"+a.length].concat(a)};return{JavaScript:{castJSBoolToBool:function(a){return a},castBoolToJSBool:function(a){return a},castJSNumberToFloat:function(a){return a},castFloatToJSNumber:function(a){return a},
67+castJSNumberToInt:function(a){return~~a},castIntToJSNumber:function(a){return a},Experimental:{castJSElementToElement:function(a){return Element.jsElement(a)},castElementToJSElement:function(a){return a}},castJSArrayToList:d,castListToJSArray:b,castJSStringToString:d,castStringToJSString:function(a){return"string"===typeof a?a:b(a).join("")},castTupleToJSTuple2:c,castTupleToJSTuple3:c,castTupleToJSTuple4:c,castTupleToJSTuple5:c,castJSTupleToTuple2:a,castJSTupleToTuple3:a,castJSTupleToTuple4:a,castJSTupleToTuple5:a}}}(),
68+ElmJSON=function(){function d(a){return function(g){function b(a){switch(a[0]){case "JsonNull":return null;case "JsonString":return c.castStringToJSString(a[1]);case "JsonObject":var g={},a=a[1][1],d;for(d in a)g[d]=b(a[d]);return g;case "JsonArray":g=c.castListToJSArray(a[1]);for(d=g.length;d--;)g[d]=b(g[d]);return g;default:return a[1]}}return JSON.stringify(b(["JsonObject",g]),null,c.castStringToJSString(a))}}function b(a){function g(a){switch(typeof a){case "string":return["JsonString",c.castJSStringToString(a)];
69+case "number":return["JsonNumber",c.castJSNumberToFloat(a)];case "boolean":return["JsonBool",c.castJSBoolToBool(a)];case "object":if(null===a)return["JsonNull"];for(var b in a)a[b]=g(a[b]);return a instanceof Array?["JsonArray",c.castJSArrayToList(a)]:["JsonObject",["JSON",a]]}}var a=JSON.parse(a),b;for(b in a)a[b]=g(a[b]);return["JSON",a]}var c=Foreign.JavaScript;return{empty:["JSON",{}],singleton:function(a){return function(b){var e={};e[c.castStringToJSString(a)]=b;return["JSON",e]}},insert:function(a){return function(b){return function(e){var e=
70+e[1],d={},k;for(k in e)d[k]=e[k];d[c.castStringToJSString(a)]=b;return["JSON",d]}}},lookup:function(a){return function(b){var e=c.castStringToJSString(a);return b[1].hasOwnProperty(e)?Just(b[1][e]):Nothing}},lookupWithDefault:function(a){return function(b){return function(e){var d=c.castStringToJSString(b);return e[1].hasOwnProperty(d)?e[1][d]:a}}},remove:function(a){return function(b){var b=b[1],e={},d;for(d in b)e[d]=b[d];delete e[c.castStringToJSString(a)];return["JSON",e]}},toPrettyJSString:d,
71+toJSString:d(""),fromJSString:b,toPrettyString:function(a){return function(b){return c.castJSStringToString(d(a)(b))}},toString:function(a){return c.castJSStringToString(d("")(a))},fromString:function(a){return b(c.castStringToJSString(a))},toList:function(a){var a=a[1],b=[],e;for(e in a)b.push(Value.Tuple(c.castJSStringToString(e),a[e]));return c.castJSArrayToList(b)},fromList:function(a){for(var a=c.castListToJSArray(a),b={},e=a.length;e--;)b[c.castStringToJSString(a[e][1])]=a[e][2];return["JSON",
72+b]},JsonString:function(a){return["JsonString",a]},JsonNumber:function(a){return["JsonNumber",a]},JsonBool:function(a){return["JsonBool",a]},JsonNull:["JsonNull"],JsonArray:function(a){return["JsonArray",a]},JsonObject:function(a){return["JsonObject",a]}}}();Foreign.JavaScript.JSON=ElmJSON;
73+var Value=function(){var d=function(a,c){if("object"===typeof a){if(a===c)return!0;if(a.length!==c.length)return!1;for(var b=a.length;b--;)if(!d(a[b],c[b]))return!1;return!0}return a===c},b=function(a){a.replace('"',"&#34;");a.replace("&","&#38;");a.replace("'","&#39;");a.replace("<","&#60;");a.replace(">","&#62;");return a},c=function(a){if("boolean"===typeof a)return a?"True":"False";if("number"!==typeof a&&a[0]){if("Tuple"===a[0].substring(0,5)){for(var b="",e=a.length;--e;)b=","+c(a[e])+b;","===
74+b[0]&&(b=b.substring(1));return"("+b+")"}if("Cons"===a[0])for(var e="string"===typeof a[1]?'"':"]",d="string"===typeof a[1]?"":",",b=("string"===typeof a[1]?'"':"[")+c(a[1]),a=a[2];;)if("Cons"===a[0])b+=d+c(a[1]),a=a[2];else return b+e;else{if("Nil"===a[0])return"[]";if("JSON"===a[0])return"(JSON.fromList "+c(ElmJSON.toList(a))+")";b="";for(e=a.length;--e;)b=" "+c(a[e])+b;b=a[0]+b;return 1<a.length?"("+b+")":b}}return a+""};return{eq:d,str:function(a){for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],
75+b];return b},show:function(a){return Text.monospace(b(c(a)))},Tuple:function(){var a=arguments.length,b=Array(a+1);for(b[0]="Tuple"+arguments.length;a--;)b[a+1]=arguments[a];return b},append:function(a,b){if("string"===typeof a&&"string"===typeof b)return a.concat(b);if("Nil"===a[0])return b;for(var c=["Cons",a[1],["Nil"]],d=c,a=a[2];"Cons"===a[0];)d[2]=["Cons",a[1],["Nil"]],a=a[2],d=d[2];d[2]=b;return c},listToArray:function(a){for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return b},toText:function(a){if("string"===
76+typeof a)return a;for(var c=[];"Cons"===a[0];)c.push(a[1]),a=a[2];return b(c.join(""))},properEscape:b}}(),List=function(){function d(a){return function(f){if("Nil"===f[0])return f;"Cons"!==f[0]&&h("map");for(var b=["Cons",a(f[1]),["Nil"]],c=b,f=f[2];"Cons"===f[0];)c[2]=["Cons",a(f[1]),["Nil"]],f=f[2],c=c[2];return b}}function b(a){return function(f){return function(b){var c=f;if("Nil"===b[0])return c;for("Cons"!==b[0]&&h("foldl");"Cons"===b[0];)c=a(b[1])(c),b=b[2];return c}}}function c(a){return function(f){return function(b){var c=
77+f;if("Nil"===b[0])return c;"Cons"!==b[0]&&h("foldr");for(var d=[];"Cons"===b[0];)d.push(b[1]),b=b[2];for(b=d.length;b--;)c=a(d[b])(c);return c}}}function a(a){return function(f){var c;"Cons"!==f[0]?c=void 0:(c=f[1],f=f[2],c=b(a)(c)(f));return c}}function g(a){return function(f){return function(b){if("Nil"===b[0])return["Cons",f,["Nil"]];"Cons"!==b[0]&&h("scanl");for(var c=[f];"Cons"===b[0];)f=a(b[1])(f),c.push(f),b=b[2];for(var b=["Nil"],d=c.length;d--;)b=["Cons",c[d],b];return b}}}function e(a){return function(f){a:{for(var b=
78+[function(a){return"Nil"!==a[0]?void 0:["Tuple2",["Nil"],["Nil"]]},function(f){if("Cons"===f[0]){var b=f[1],f=f[2];var c=e(a)(f);"Tuple2"!==c[0]?b=void 0:(f=c[1],c=c[2],b=a(b)?["Tuple2",["Cons",b,f],c]:["Tuple2",f,["Cons",b,c]]);return b}}],c=b.length;c--;){var d=b[c](f);if(void 0!==d){f=d;break a}}f=void 0}return f}}function i(a){a:{for(var f=[function(a){return"Nil"!==a[0]?void 0:["Tuple2",["Nil"],["Nil"]]},function(a){if("Cons"!==a[0])a=void 0;else if(a=["Tuple2",a[1],i(a[2])],"Tuple2"!==a[0]||
79+"Tuple2"!==a[1][0])a=void 0;else var f=a[1][1],b=a[1][2],a="Tuple2"!==a[2][0]?void 0:["Tuple2",["Cons",f,a[2][1]],["Cons",b,a[2][2]]];return a}],b=f.length;b--;){var c=f[b](a);if(void 0!==c){a=c;break a}}a=void 0}return a}function k(a){return function(f){a:{for(var b=[function(a){return"Nil"!==a[0]?void 0:["Nil"]},function(a){if("Cons"===a[0]){var f=a[1];return"Nil"!==a[2][0]?void 0:["Cons",f,["Nil"]]}},function(f){if("Cons"===f[0]){var b=f[1];if("Cons"===f[2][0]){var c=f[2][1],f=f[2][2];return["Cons",
80+b,["Cons",a,k(a)(["Cons",c,f])]]}}}],c=b.length;c--;){var d=b[c](f);if(void 0!==d){f=d;break a}}f=void 0}return f}}function o(a){return function(f){a:{for(var b=[function(a){return"Nil"!==a[0]?void 0:["Nil"]},function(a){if("Cons"===a[0]){var f=a[1];return"Nil"!==a[2][0]?void 0:f}},function(f){if("Cons"===f[0]){var b=f[1];if("Cons"===f[2][0]){var c=f[2][1],f=f[2][2];return Value.append(b,Value.append(a,o(a)(["Cons",c,f])))}}}],c=b.length;c--;){var d=b[c](f);if(void 0!==d){f=d;break a}}f=void 0}return f}}
81+var h=function(a){throw"Function '"+a+"' expecting a list!";},l=b(function(a){return function(f){return["Cons",a,f]}})(["Nil"]),j=c(function(a){return function(f){return Value.append(a,f)}})(["Nil"]),n=b(function(a){return function(f){return a&&f}})(!0),p=b(function(a){return function(f){return a||f}})(!1),m=b(function(a){return function(f){return a+f}})(0),q=b(function(a){return function(f){return a*f}})(1),t=a(function(a){return function(f){return Math.max(a,f)}}),r=a(function(a){return function(f){return Math.min(a,
82+f)}});return{head:function(a){if("Cons"!==a[0])throw"Error: 'head' only accepts lists of length greater than one.";return a[1]},tail:function(a){if("Cons"!==a[0])throw"Error: 'tail' only accepts lists of length greater than one.";return a[2]},last:function(a){if("Cons"!==a[0])throw"Error: 'last' only accepts lists of length greater than one.";for(var f=a[1];"Cons"===a[0];)f=a[1],a=a[2];return f},map:d,foldl:b,foldr:c,foldl1:a,foldr1:function(a){return function(f){if("Nil"===f[0])throw"'foldr1' requires an non-empty list.";
83+"Cons"!==f[0]&&h("foldr1");for(var b=[];"Cons"===f[0];)b.push(f[1]),f=f[2];for(var f=b.pop(),c=b.length;c--;)f=a(b[c])(f);return f}},scanl:g,scanl1:function(a){return function(f){if("Cons"!==f[0])throw"Error: 'scanl1' requires a list of at least length 1.";return g(a)(f[1])(f[2])}},filter:function(a){return function(f){if("Nil"===f[0])return f;"Cons"!==f[0]&&h("filter");for(var b=[];"Cons"===f[0];)a(f[1])&&b.push(f[1]),f=f[2];for(var f=["Nil"],c=b.length;c--;)f=["Cons",b[c],f];return f}},length:function(a){for(var f=
84+0;"Cons"===a[0];)f+=1,a=a[2];return f},reverse:l,concat:j,concatMap:function(a){return function(f){return j(d(a)(f))}},and:n,or:p,forall:function(a){return b(function(f){return function(b){return b&&a(f)}})(!0)},exists:function(a){return b(function(f){return function(b){return b||a(f)}})(!1)},sum:m,product:q,maximum:t,minimum:r,partition:e,zipWith:function(a){return function(f){return function(b){if("Nil"===f[0]||"Nil"===b[0])return["Nil"];("Cons"!==f[0]||"Cons"!==b[0])&&h("zipWith");for(var c=[];"Cons"===
85+f[0]&&"Cons"===b[0];)c.push(a(f[1])(b[1])),f=f[2],b=b[2];for(var b=["Nil"],d=c.length;d--;)b=["Cons",c[d],b];return b}}},zip:function(a){return function(b){if("Nil"===a[0]||"Nil"===b[0])return["Nil"];("Cons"!==a[0]||"Cons"!==b[0])&&h("zip");for(var c=[];"Cons"===a[0]&&"Cons"===b[0];)c.push(["Tuple2",a[1],b[1]]),a=a[2],b=b[2];for(var b=["Nil"],d=c.length;d--;)b=["Cons",c[d],b];return b}},unzip:i,intersperse:k,intercalate:o,sort:function(a){if("Nil"===a[0])return a;"Cons"!==a[0]&&h("sort");for(var b=
86+[];"Cons"===a[0];)b.push(a[1]),a=a[2];b.sort(function(a,b){return a-b});for(var a=["Nil"],c=b.length;c--;)a=["Cons",b[c],a];return a},take:function(a){return function(b){if(0>=a)return["Nil"];if("Nil"===b[0])return b;"Cons"!==b[0]&&h("take");var c=["Cons",b[1],["Nil"]],d=c,b=b[2];for(--a;"Cons"===b[0]&&0<a;)d[2]=["Cons",b[1],["Nil"]],d=d[2],b=b[2],--a;return c}},drop:function(a){return function(b){if("Nil"===b[0])return b;for("Cons"!==b[0]&&h("drop");"Cons"===b[0]&&0<a;)b=b[2],--a;return b}}}}(),
87+Data=function(){var d;d=function(b){return function(a){return"Just"===b[0]?["Cons",b[1],a]:a}};var b=function(b){return function(a){return function(d){var e=b(a);return"Just"===e[0]?["Cons",e[1],d]:d}}};d={Just:function(b){return["Just",b]},Nothing:["Nothing"],catMaybes:List.foldr(d)(["Nil"]),isJust:function(b){return"Just"===b[0]},isNothing:function(b){return"Nothing"===b[0]},fromMaybe:function(b){return function(a){return"Just"===a[0]?a[1]:b}},consMaybe:d,mapMaybe:function(c){return List.foldr(b(c))(["Nil"])},
88+maybe:function(b){return function(a){return function(d){return"Just"===d[0]?a(d[1]):b}}}};return{String:{toText:Value.toText,properEscape:Value.properEscape},Char:{fromCode:function(b){return String.fromCharCode(b)},toCode:function(b){return b.charCodeAt(0)},toUpper:function(b){return b.toUpperCase()},toLower:function(b){return b.toLowerCase()},toLocaleUpper:function(b){return b.toLocaleUpperCase()},toLocaleLower:function(b){return b.toLocaleLowerCase()}},Maybe:d,List:List}}(),Color=function(){var d=
89+function(b,c,a,d){return{r:b,g:c,b:a,a:d}};return{black:d(0,0,0,1),white:d(255,255,255,1),red:d(255,0,0,1),green:d(0,255,0,1),blue:d(0,0,255,1),gray:d(128,128,128,1),grey:d(128,128,128,1),yellow:d(255,255,0,1),cyan:d(0,255,255,1),magenta:d(255,0,255,1),rgba:function(b){return function(c){return function(a){return function(g){return d(b,c,a,g)}}}},rgb:function(b){return function(c){return function(a){return d(b,c,a,1)}}},Internal:{extract:function(b){return 1===b.a?"rgb("+b.r+","+b.g+","+b.b+")":"rgba("+
90+b.r+","+b.g+","+b.b+","+b.a+")"}}}}(),Element=function(){var d=function(a){a=document.createElement(a);a.id=Guid.guid();a.style.padding="0";a.style.margin="0";return a},b=function(a){var b=d("div");b.appendChild(a);return b},c=function(a){return function(b){return function(c){var e=d("div");e.isElmLeaf=!0;e.isElmText=!0;e.innerHTML=c;e.style.textAlign=b;0<a&&(e.style.width=a+"px");return e}}},a=c(0)("left"),g=c(0)("justify"),e=c(0)("center"),i=c(0)("right"),k=function(a){return"DIV"===a.tagName?a:
91+b(a)},o=function(a){a.style.styleFloat="left";a.style.cssFloat="left";return a},h=function(a){a.style.position="absolute";return a},l=function(a,b,c){for(var e=d("div"),g=c.length;g--;){var h=b(c[g]);e.appendChild(h)}e.elmFlowDirection=a;return e},j=function(a){return function(b){for(var c=[];"Cons"===b[0];)c.push(b[1]),b=b[2];3<=a&&c.reverse();b=a%3;if(0==b)return l("Y",k,c);if(1==b)return l("X",o,c);if(2==b)return l("Z",h,c)}},n=function(a){return function(b){if("A"===b.tagName)return n(a)(b.firstChild),
92+b;if(b.hasOwnProperty("isElmText")){var d=c(a)(b.style.textAlign)(b.innerHTML);b.style.height=d.style.height}b.style.width=a+"px";return b}};return{text:a,image:function(a){var b=d("img");b.isElmLeaf=!0;b.onload=function(){""===b.style.width&&0<this.width&&(b.style.width=b.width=this.width+"px");""===b.style.height&&0<this.height&&(b.style.height=b.height=this.height+"px");Dispatcher.adjust()};b.src=Data.String.toText(a);b.name=b.src;return b},fittedImage:function(a){return function(b){return function(c){var e=
93+d("canvas");e.style.width=a+"px";e.style.height=b+"px";e.width=a;e.height=b;e.innerHTML="Your browser does not support the canvas element.";e.isElmLeaf=!0;var g=d("img");g.onload=function(){if(e.getContext){var c=e.getContext("2d"),f=0,d=0,h=this.width,o=this.height;a/b>this.width/this.height?(o=this.width*b/a,d=(this.height-o)/2):(h=this.height*a/b,f=(this.width-h)/2);c.drawImage(g,f,d,h,o,0,0,e.width,e.height)}};g.src=Data.String.toText(c);return e}}},video:function(a){var a=Data.String.toText(a),
94+b=d("video");b.controls="controls";var c=d("source");c.src=a;c.type="video/"+a.substring(a.length-3,a.length);b.appendChild(c);b.isElmLeaf=!0;return b},audio:function(a){var a=Data.String.toString(a),b=d("video");b.controls="controls";var c=d("source");c.src=a;c.type="audio/"+a.substring(a.length-3,a.length);b.appendChild(c);b.isElmLeaf=!0;return b},collage:function(a){return function(b){return function(c){var e=d("canvas");e.style.width=a+"px";e.style.height=b+"px";e.width=a;e.height=b;if(e.getContext){var g=
95+e.getContext("2d");for(g.clearRect(0,0,e.width,e.height);"Cons"===c[0];)g=c[1](g),c=c[2];return e}e.innerHTML="Your browser does not support the canvas element.";e.isElmLeaf=!0;return e}}},flow:j,layers:j(2),rectangle:function(a){return function(b){var c=d("div");c.isElmLeaf=!0;c.style.width=a+"px";c.style.height=b+"px";return c}},beside:function(a){return function(b){return j(4)(["Cons",a,["Cons",b,["Nil"]]])}},above:function(a){return function(b){return j(3)(["Cons",a,["Cons",b,["Nil"]]])}},below:function(a){return function(b){return j(0)(["Cons",
96+a,["Cons",b,["Nil"]]])}},box:function(a){return function(b){b.style.position="absolute";b.style.margin="auto";var c=(a-1)%3,e=(a-1)/3;2>c&&(b.style.left=0);0<c&&(b.style.right=0);2>e&&(b.style.top=0);0<e&&(b.style.bottom=0);c=d("div");c.style.position="relative";c.appendChild(b);return c}},width:n,height:function(a){return function(b){("A"===b.tagName?b.firstChild:b).style.height=a+"px";return b}},size:function(a){return function(b){return function(c){var d="A"===c.tagName?c.firstChild:c;d.style.width=
97+a+"px";d.style.height=b+"px";return c}}},color:function(a){return function(b){b.style.backgroundColor=Color.Internal.extract(a);return b}},opacity:function(a){return function(b){b.style.opacity=a;return b}},link:function(a){return function(c){var e=d("a");e.href=Text.fromString(a);e.appendChild(c);return b(e)}},asText:function(a){return c(0)("left")(Value.show(a))},plainText:function(a){return c(0)("left")(Data.String.toText(a))},justifiedText:g,centeredText:e,rightedText:i,up:0,left:1,inward:2,down:3,
98+right:4,outward:5,correctTextSize:function(a){var b=a.style.width?a.style.width.slice(0,-2):0,c=d("div");c.innerHTML=a.innerHTML;c.style.textAlign=a.style.textAlign;0<b&&(c.style.width=b+"px");c.style.visibility="hidden";c.style.styleFloat="left";c.style.cssFloat="left";document.body.appendChild(c);var e=window.getComputedStyle(c);0>=b&&(a.style.width=e.getPropertyValue("width"));a.style.height=e.getPropertyValue("height");document.body.removeChild(c)},jsElement:function(a){return function(b){return function(c){var e=
99+d("div");e.isElmLeaf=!0;e.style.width=a+"px";e.style.height=b+"px";e.appendChild(c);return e}}}}}(),Text=function(){var d=function(a){if("string"===typeof a)return a;for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return Data.String.properEscape(b.join(""))},b=function(a){return function(b){return"<"+a+' style="padding:0;margin:0">'+b+"</"+a+">"}},c=function(a,b){return function(c){return"<span style='"+a+":"+b+"'>"+c+"</span>"}},a=b("h1"),g=c("font-style","italic"),b=b("b"),e=c("text-decoration",
100+"underline"),i=c("text-decoration","overline"),k=c("text-decoration","line-through");return{fromString:d,toText:d,header:a,height:function(a){return c("font-size",a+"em")},italic:g,bold:b,underline:e,overline:i,strikeThrough:k,monospace:c("font-family","monospace"),color:function(a){return c("color",Color.Internal.extract(a))},link:function(a){return function(b){return"<a href='"+d(a)+"'>"+b+"</a>"}}}}(),Shape=function(){var d=function(b,a,d,e){return{center:b,points:a,theta:d,scale:e}},b=function(b){return function(a){return function(d){return function(e){e.save();
101+e.translate(d.center[0],d.center[1]);e.rotate(d.theta);e.scale(d.scale,d.scale);e.beginPath();var i=d.points;e.moveTo(i[0][0],i[0][1]);for(var k=i.length;k--;)e.lineTo(i[k][0],i[k][1]);e.closePath();b?(e.fillStyle=Color.Internal.extract(a),e.fill()):(e.strokeStyle=Color.Internal.extract(a),e.stroke());e.restore();return e}}}};return{polygon:function(b){return function(a){for(var g=[];"Cons"===b[0];)g.push([b[1][1],b[1][2]]),b=b[2];a=[a[1],a[2]];return d(a,g,0,1)}},ngon:function(b){return function(a){return function(g){for(var e=
102+[],i=b;i--;)e.push([a*Math.cos(2*Math.PI*i/b),a*Math.sin(2*Math.PI*i/b)]);g=[g[1],g[2]];return d(g,e,0,1)}}},rect:function(b){return function(a){return function(g){var e=[[-b/2,-a/2],[b/2,-a/2],[b/2,a/2],[-b/2,a/2]],g=[g[1],g[2]];return d(g,e,0,1)}}},oval:function(b){return function(a){return function(g){for(var e=[],i=2*Math.PI;0<i;i-=Math.PI/50)e.push([b/2*Math.cos(i),a/2*Math.sin(i)]);g=[g[1],g[2]];return d(g,e,0,1)}}},move:function(b){return function(a){return function(g){return d([b+g.center[0],
103+a+g.center[1]],g.points,g.theta,g.scale)}}},rotate:function(b){return function(a){return d(a.center,a.points,a.theta+2*Math.PI*b,a.scale)}},scale:function(b){return function(a){return d(a.center,a.points,a.theta,a.scale*b)}},filled:b(!0),outlined:b(!1),customOutline:function(b){return function(a){return function(d){d.points.push(d.points[0]);return Line.customLine(b)(a)(d)}}}}}(),Line=function(){var d=function(b){return function(c){return function(a){if("string"===typeof b[0]){for(var d=[];"Cons"===
104+b[0];)d.push(b[1]),b=b[2];b=d}0===b.length&&(b=[8,4]);return function(d){d.save();d.beginPath();d.translate(a.center[0],a.center[1]);d.rotate(a.theta);d.scale(a.scale,a.scale);var g=b,k=a.points,o=k.length-1,h=k[o][0],l=k[o][1],j=0,n=0,p=0,m=0,q=0,t=0,r=g.length,u=!0,f=g[0];for(d.moveTo(h,l);o--;){j=k[o][0];n=k[o][1];p=j-h;m=n-l;for(q=Math.sqrt(p*p+m*m);f<=q;)h+=p*f/q,l+=m*f/q,d[u?"lineTo":"moveTo"](h,l),p=j-h,m=n-l,q=Math.sqrt(p*p+m*m),u=!u,t=(t+1)%r,f=g[t];0<q&&(d[u?"lineTo":"moveTo"](j,n),f-=q);
105+h=j;l=n}d.strokeStyle=Color.Internal.extract(c);d.stroke();d.restore();return d}}}};return{line:function(b){for(var c=[];"Cons"===b[0];)c.push([b[1][1],b[1][2]]),b=b[2];return{center:[0,0],points:c,theta:0,scale:1}},customLine:d,solid:function(b){return function(c){return function(a){a.save();a.beginPath();a.translate(c.center[0],c.center[1]);a.rotate(c.theta);a.scale(c.scale,c.scale);var d=c.points,e=d.length;for(a.moveTo(d[e-1][0],d[e-1][1]);e--;)a.lineTo(d[e][0],d[e][1]);a.strokeStyle=Color.Internal.extract(b);
106+a.stroke();a.restore();return a}}},dashed:d([8,4]),dotted:d([3,3])}}(),Elm=function(){var d=function(a,b,c){for(var d=a.kids,e=d.length;e--;)d[e].recv(b,c,a.id)},b=function(a){this.id=Guid.guid();this.value=a;this.kids=[];this.recv=function(a,b,c){if(b=b===this.id)this.value=c;d(this,a,b)};Dispatcher.inputs.push(this)},c=function(a,b){this.id=Guid.guid();this.value=null;this.kids=[];this.inbox={};b.reverse();this.recalc=function(){for(var c=a,d=b.length;d--;)c=c(b[d].value);this.value=c};this.recalc();
107+this.recv=function(a,c){this.inbox.hasOwnProperty(a)||(this.inbox[a]={changed:!1,count:0});var e=this.inbox[a];e.count+=1;c&&(e.changed=!0);e.count==b.length&&(e.changed&&this.recalc(),d(this,a,e.changed),delete this.inbox[a])};for(var c=b.length;c--;)b[c].kids.push(this)},a=function(a,b,c){this.id=Guid.guid();this.value=b;this.kids=[];this.recv=function(b,e){e&&(this.value=a(c.value)(this.value));d(this,b,e)};c.kids.push(this)},g=function(a,b,c){this.id=Guid.guid();this.value=a(c.value)?b:c.value;
108+this.kids=[];this.recv=function(b,e){var g=e&&!a(c.value);g&&(this.value=c.value);d(this,b,g)};c.kids.push(this)},e=function(a){this.id=Guid.guid();this.value=a.value;this.kids=[];this.recv=function(b,c){var e=c&&!eq(this.value,a.value);e&&(this.value=a.value);d(this,b,e)};a.kids.push(this)},i=function(a){return function(b){return function(d){d=new c(function(a){return function(b){return[a,b]}},[a,d]);d=new g(function(a){return a[0]},[!0,b],d);return new c(function(a){return a[1]},[d])}}},k=function(a,
109+b){this.id=Guid.guid();this.value=b.value;this.kids=[];this.inbox={};this.recv=function(c,e,g){if(e=e&&g===a.id)this.value=b.value;d(this,c,e)};a.kids.push(this);b.kids.push(this)};return{Input:function(a){return new b(a)},Lift:function(a,b){return new c(a,b)},Fold:function(b,c,d){return new a(b,c,d)},keepIf:function(a){return function(b){return function(c){return new g(function(b){return!a(b)},b,c)}}},dropIf:function(a){return function(b){return function(c){return new g(a,b,c)}}},keepWhen:function(a){return i(new c(function(a){return!a},
110+[a]))},dropWhen:i,dropRepeats:function(a){return new e(a)},sampleOn:function(a){return function(b){return new k(a,b)}}}}(),Dispatcher=function(){var d=null,b=0,c=[],a=function(b){var c=b.childNodes,d=c.length;if(b.hasOwnProperty("isElmLeaf")){b.hasOwnProperty("isElmText")&&Element.correctTextSize(b);var c=""===b.style.width?0:b.style.width.slice(0,-2)-0,g=""===b.style.height?0:b.style.height.slice(0,-2)-0;return[c,g]}if(1===d){var h=a(c[0]);b.style.hasOwnProperty("width")&&0<b.style.width.length&&
111+(h[0]=b.style.width.slice(0,-2)-0);b.style.hasOwnProperty("height")&&0<b.style.height.length&&(h[1]=b.style.height.slice(0,-2)-0);0!==h[0]&&(b.style.width=h[0]+"px");0!==h[1]&&(b.style.height=h[1]+"px");return h}for(var l=0,j=g=0,n=0,p=!0,m=!0;d--;)h=a(c[d]),l=Math.max(l,h[0]),g=Math.max(g,h[1]),j+=h[0],n+=h[1],p=p&&0<h[0],m=m&&0<h[1];c=l;d=b.elmFlowDirection;"X"===d&&(c=p?j:0);"Y"===d&&(g=m?n:0);0<c&&(b.style.width=c+"px");0<g&&(b.style.height=g+"px");return[c,g]},g=function(){var b=document.getElementById("content");
112+a(b.children[0])};return{initialize:function(){d=ElmCode.main();d.hasOwnProperty("recv")||(d=Elm.Input(d));document.getElementById("content").appendChild(d.value);g();var a=document.getElementById("widthChecker").offsetWidth;a!==window.innerWidth&&Dispatcher.notify(Window.dimensions.id,Value.Tuple(a,window.innerHeight));d=Elm.Lift(function(a){var b=document.getElementById("content"),c=b.children[0];b.replaceChild(a,c);delete c;g();return a},[d])},notify:function(a,d){b+=1;for(var g=c.length;g--;)c[g].recv(b,
113+a,d)},adjust:g,inputs:c}}(),Signal=function(){function d(a){for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],b];return b}var b;b=document.addEventListener?function(a,b,c){a.addEventListener(b,c,!1)}:function(a,b,c){a.attachEvent("on"+b,c)};var c,a=function(a){var b=0,c=0;a||(a=window.event);if(a.pageX||a.pageY)b=a.pageX,c=a.pageY;else if(a.clientX||a.clientY)b=a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,c=a.clientY+document.body.scrollTop+document.documentElement.scrollTop;
114+return Value.Tuple(b,c)},g=Elm.Input(Value.Tuple(0,0)),e=Elm.Input(!1),i=Elm.Input(!1),k=Elm.Input(Value.Tuple());b(document,"click",function(){Dispatcher.notify(i.id,!0);Dispatcher.notify(k.id,Value.Tuple());Dispatcher.notify(i.id,!1)});b(document,"mousedown",function(){Dispatcher.notify(e.id,!0)});b(document,"mouseup",function(){Dispatcher.notify(e.id,!1)});b(document,"mousemove",function(b){Dispatcher.notify(g.id,a(b))});c={position:g,x:Elm.Lift(function(a){return a[1]},[g]),y:Elm.Lift(function(a){return a[2]},
115+[g]),isClicked:i,isDown:e,clicks:k,isClickedOn:function(a){var c=Elm.Input(!1);b(a,"click",function(){Dispatcher.notify(c.id,!0);Dispatcher.notify(c.id,!1)});return Value.Tuple(a,c)}};var o,h=Elm.Input(Value.Tuple(window.innerWidth,window.innerHeight));b(window,"resize",function(){var a=document.getElementById("widthChecker").offsetWidth;Dispatcher.notify(h.id,Value.Tuple(a,window.innerHeight))});o={dimensions:h,width:Elm.Lift(function(a){return a[1]},[h]),height:Elm.Lift(function(a){return a[2]},
116+[h])};var l=function(a,b){return"Nil"===b[0]?b:b[1]===a?b[2]:["Cons",b[1],l(a,b[2])]},j=Elm.Input(["Nil"]),n=Elm.Input(["Nothing"]);b(document,"keydown",function(a){var b;a:{for(b=j.value;"Nil"!==b[0];){if(b[1]===a.keyCode){b=!0;break a}b=b[2]}b=!1}b||Dispatcher.notify(j.id,["Cons",a.keyCode,j.value])});b(document,"keyup",function(a){a=l(a.keyCode,j.value);Dispatcher.notify(j.id,a)});b(window,"blur",function(){Dispatcher.notify(j.id,["Nil"])});b(document,"keypress",function(a){Dispatcher.notify(n.id,
117+["Just",a.charCode||a.keyCode]);Dispatcher.notify(n.id,["Nothing"])});var p={Raw:{keysDown:j,charPressed:n}},m;m=function(a){return function(b){var c=Elm.Input(["Waiting"]),e={};window.XMLHttpRequest?e=new XMLHttpRequest:window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLHTTP"));e.onreadystatechange=function(){4===e.readyState&&Dispatcher.notify(c.id,200===e.status?["Success",d(e.responseText)]:["Failure",e.status,d(e.statusText)])};e.open(a,Data.String.toText(b),!0);e.send(null);return c}};
118+var q=function(a){return function(b){var c=Elm.Input(["Nothing"]),b=Elm.Lift(function(b){if("Just"!==b[0]){try{Dispatcher.notify(c.id,["Nothing"])}catch(e){}return[]}try{Dispatcher.notify(c.id,["Just",["Waiting"]])}catch(g){c.value=["Just",["Waiting"]]}var s={};window.XMLHttpRequest?s=new XMLHttpRequest:window.ActiveXObject&&(s=new ActiveXObject("Microsoft.XMLHTTP"));s.onreadystatechange=function(){4===s.readyState&&Dispatcher.notify(c.id,["Just",200===s.status?["Success",d(s.responseText)]:["Failure",
119+s.status,d(s.statusText)]])};s.open(a,Data.String.toText(b[1]),!0);s.send(null);return[]},[b]);return Elm.Lift(function(a){return function(){return a}},[c,b])}};m={get:m("GET"),post:m("POST"),gets:q("GET"),posts:q("POST")};var t=function(a){a.isElmLeaf=!0;var c=Elm.Input(["Nil"]);b(a,"keyup",function(){Dispatcher.notify(c.id,d(a.value));a.focus()});return Value.Tuple(a,c)},r=function(a){a=document.createElement(a);a.id=Guid.guid();return a},u=function(a){for(var c=r("select"),d=[];"Cons"===a[0];){var e=
120+r("option"),g=Text.toText(a[1][1]);e.value=g;e.innerHTML=g;c.appendChild(e);d.push(a[1][2]);a=a[2]}var h=Elm.Input(d[0]);b(c,"change",function(){Dispatcher.notify(h.id,d[c.selectedIndex])});return Value.Tuple(c,h)};return{addListener:b,Mouse:c,Keyboard:p,Time:{every:function(a){var a=1E3*a,b=Elm.Input(0),c=0;setInterval(function(){c+=a;Dispatcher.notify(b.id,c/1E3)},a);return b},after:function(a){var a=1E3*a,b=Elm.Input(!1);setTimeout(function(){Dispatcher.notify(b.id,!0)},a);return b},before:function(a){var a=
121+1E3*a,b=Elm.Input(!0);setTimeout(function(){Dispatcher.notify(b.id,!1)},a);return b}},Window:o,HTTP:m,Random:{inRange:function(a){return function(b){return Elm.Input(Math.floor(Math.random()*(b-a+1))+a)}},randomize:function(a){return function(b){return function(c){return Elm.Lift(function(){return Math.floor(Math.random()*(b-a+1))+a},[c])}}}},Input:{textArea:function(a){return function(b){var c=r("textarea");c.rows=b;c.cols=a;return t(c,"")}},textField:function(a){var b=r("input");b.type="text";return t(b,
122+a)},password:function(a){var b=r("input");b.type="password";return t(b,a)},checkbox:function(a){var c=r("input");c.type="checkbox";c.checked=a;var d=Elm.Input(a);b(c,"change",function(){Dispatcher.notify(d.id,c.checked)});return Value.Tuple(c,d)},dropDown:u,stringDropDown:function(a){return u(List.map(function(a){return Value.Tuple(a,a)})(a))},button:function(a){var c=r("input");c.type="button";c.value=Text.toText(a);var d=Elm.Input(!1);b(c,"click",function(){Dispatcher.notify(d.id,!0);Dispatcher.notify(d.id,
123+!1)});return Value.Tuple(c,d)}},constant:function(a){return Elm.Input(a)},lift:function(a){return function(b){return Elm.Lift(a,[b])}},lift2:function(a){return function(b){return function(c){return Elm.Lift(a,[b,c])}}},lift3:function(a){return function(b){return function(c){return function(d){return Elm.Lift(a,[b,c,d])}}}},lift4:function(a){return function(b){return function(c){return function(d){return function(e){return Elm.Lift(a,[b,c,d,e])}}}}},foldp:function(a){return function(b){return function(c){return Elm.Fold(a,
124+b,c)}}},count:function(a){return Elm.Fold(function(){return function(a){return a+1}},0,a)},keepIf:Elm.keepIf,dropIf:Elm.dropIf,keepWhen:Elm.keepWhen,dropWhen:Elm.dropWhen,dropRepeats:Elm.dropRepeats,sampleOn:Elm.sampleOn}}(),Prelude=function(){var d=function(b){return function(c){var a=b%c,a=0==b?0:0<c?0<=b?a:a+c:-d(-b)(-c);return a==c?0:a}};return{id:function(b){return b},not:function(b){return!b},fst:function(b){return b[1]},snd:function(b){return b[2]},rem:function(b){return function(c){return b%
125+c}},div:function(b){return function(c){return~~(b/c)}},compare:function(b){return function(c){b="object"===typeof b?toText(b):b;c="object"===typeof c?toText(c):c;return[b===c?"EQ":b<c?"LT":"GT"]}},toFloat:function(b){return b},round:function(b){return Math.round(b)},floor:function(b){return Math.floor(b)},ceiling:function(b){return Math.ceil(b)},truncate:function(b){return~~b},sqrt:Math.sqrt,abs:Math.abs,pi:Math.PI,e:Math.E,sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,
126+mod:d,min:function(b){return function(c){return Math.min(b,c)}},max:function(b){return function(c){return Math.max(b,c)}},flip:function(b){return function(c){return function(a){return b(a)(c)}}},clamp:function(b){return function(c){return function(a){return Math.min(c,Math.max(b,a))}}},curry:function(b){return function(c){return function(a){return b(["Tuple2",c,a])}}},uncurry:function(b){return function(c){if("Tuple2"!==c[0])throw"Function was uncurry'd but was not given a pair.";return b(c[1])(c[2])}},
127+logBase:function(b){return function(c){return Math.log(c)/Math.log(b)}},Just:Data.Maybe.Just,Nothing:Data.Maybe.Nothing,maybe:Data.Maybe.maybe,map:Data.List.map,filter:Data.List.filter,head:Data.List.head,tail:Data.List.tail,last:Data.List.last,length:Data.List.length,reverse:Data.List.reverse,foldr:Data.List.foldr,foldr1:Data.List.foldr1,foldl:Data.List.foldl,foldl1:Data.List.foldl1,and:Data.List.and,or:Data.List.or,forall:Data.List.forall,exists:Data.List.exists,sum:Data.List.sum,product:Data.List.product,
128+concat:Data.List.concat,concatMap:Data.List.concatMap,maximum:Data.List.maximum,minimum:Data.List.minimum,scanl:Data.List.scanl,scanl1:Data.List.scanl1,take:Data.List.take,drop:Data.List.drop,lift:Signal.lift,lift2:Signal.lift2,lift3:Signal.lift3,lift4:Signal.lift4,foldp:Signal.foldp,constant:Signal.constant,count:Signal.count,keepIf:Signal.keepIf,dropIf:Signal.dropIf,keepWhen:Signal.keepWhen,dropWhen:Signal.dropWhen,dropRepeats:Signal.dropRepeats,sampleOn:Signal.sampleOn}}(),eq=Value.eq;
129+Signal.addListener(document,"elm_log",function(d){console.log(d.value)});Signal.addListener(document,"elm_title",function(d){document.title=d.value});Signal.addListener(document,"elm_redirect",function(d){0<d.value.length&&(window.location=d.value)});var includeGlobal=this;
130+(function(){var d=function(b){for(var a in b)if("Internal"!==a)try{includeGlobal[a]=b[a]}catch(d){"length"===a&&(includeGlobal.execScript("var length;"),length=b[a])}},b=function(b){return function(a){includeGlobal[b]=includeGlobal[b]||{};for(var d in a)"Internal"!==d&&(includeGlobal[b][d]=a[d])}};d(Element);d(Text);color=Element.color;height=Element.height;show=Value.show;d(Color);d(Shape);d(Line);b("Time")(Signal.Time);b("Mouse")(Signal.Mouse);b("Keyboard")(Signal.Keyboard);b("Window")(Signal.Window);
131+b("HTTP")(Signal.HTTP);b("Input")(Signal.Input);b("Random")(Signal.Random)})();var ElmCode={};ElmCode.Data=Data;ElmCode.Signal=Signal;ElmCode.Data.List=List;ElmCode.Foreign=Foreign;ElmCode.Prelude=Prelude;
elm/src/Compiler.hs+2−2
@@ -35,11 +35,11 @@ elm = ELM { make = False &= help "automatically compile dependencies."
35 , generate_noscript = False &= help "Add generated <noscript> tag to HTML output."
35 , generate_noscript = False &= help "Add generated <noscript> tag to HTML output."
36 } &=
36 } &=
37 help "Compile Elm programs to HTML, CSS, and JavaScript." &=
37 help "Compile Elm programs to HTML, CSS, and JavaScript." &=
38− summary "The Elm Compiler v0.3.5.1, (c) Evan Czaplicki"
38+ summary "The Elm Compiler v0.3.6, (c) Evan Czaplicki"
39
39
40main = do
40main = do
41 args <- cmdArgs elm
41 args <- cmdArgs elm
42− mini <- getDataFileName "elm-runtime-0.3.5.1.js"
42+ mini <- getDataFileName "elm-runtime-0.3.6.js"
43 compileArgs mini args
43 compileArgs mini args
44
44
45compileArgs mini (ELM _ [] _ _ _ _ _) =
45compileArgs mini (ELM _ [] _ _ _ _ _) =