Elm 0.7 → 0.7.1
raw patch · 10 files changed
+4212/−170 lines, 10 filesdep ~pandocPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: pandoc
API changes (from Hackage documentation)
Files
- Elm.cabal +4/−4
- elm-runtime-0.7.1.js +4149/−0
- elm-runtime-0.7.js +0/−135
- src/Gen/CompileToJS.hs +8/−9
- src/Gen/ExtractNoscript.hs +1/−1
- src/Parse/Expr.hs +1/−1
- src/Parse/Patterns.hs +4/−4
- src/Rename.hs +1/−1
- src/Types/Hints.hs +40/−15
- src/Types/Types.hs +4/−0
Elm.cabal view
@@ -1,6 +1,6 @@ Name: Elm-Version: 0.7+Version: 0.7.1 Synopsis: The Elm language module. Description: Elm aims to make client-side web-development more pleasant. It is a statically/strongly typed, functional reactive@@ -22,7 +22,7 @@ Build-type: Simple Extra-source-files: changelog.txt-Data-files: elm-runtime-0.7.js+Data-files: elm-runtime-0.7.1.js Cabal-version: >=1.8 source-repository head@@ -71,7 +71,7 @@ text, template-haskell, shakespeare >= 1,- pandoc,+ pandoc >= 1.10, bytestring, hjsmin, indents,@@ -116,7 +116,7 @@ blaze-markup == 0.5.1.*, deepseq, cmdargs,- pandoc,+ pandoc >= 1.10, bytestring, hjsmin, indents,
+ elm-runtime-0.7.1.js view
@@ -0,0 +1,4149 @@++Elm = {};++var Guid = function() {+ var counter = 0;+ var guid = function() { counter += 1; return counter; };+ return {guid : guid};+}();+Elm.JavaScript = function() {+ function castJSBoolToBool(b) { return b; }+ function castBoolToJSBool(b) { return b; }++ function castJSNumberToFloat(n) { return n; }+ function castFloatToJSNumber(n) { return n; }+ + function castJSNumberToInt(n) { return ~~n; }+ function castIntToJSNumber(n) { return n; }++ function castJSElementToElement(w) {+ return function(h) {+ return function(node) {+ return ["Element",Guid.guid(),+ ["EExternalHtml",node],+ w,h,1,["Nothing"],["Nothing"]];+ }+ }+ }+ function castElementToJSElement(elem) { return Render.render(elem); }++ function castJSArrayToList(arr) {+ var list = ["Nil"];+ for (var i = arr.length; i--; ) {+ list = [ "Cons", arr[i], list ];+ }+ return list;+ }+ function castListToJSArray(list) {+ var a = [];+ while (list[0] === "Cons") {+ a.push(list[1]);+ list = list[2];+ }+ return a;+ }+ + var castJSStringToString = castJSArrayToList;+ function castStringToJSString(str) {+ if (typeof str === "string") return str;+ return castListToJSArray(str).join('');+ }+ + function fromTuple(t) { return t.slice(1); }+ function toTuple(a) { return ["Tuple" + a.length].concat(a); }+ + return {castJSBoolToBool:castJSBoolToBool,+ castBoolToJSBool:castBoolToJSBool,+ castJSNumberToFloat:castJSNumberToFloat,+ castFloatToJSNumber:castFloatToJSNumber,+ castJSNumberToInt:castJSNumberToInt,+ castIntToJSNumber:castIntToJSNumber,+ Experimental : {castJSElementToElement:castJSElementToElement,+ castElementToJSElement:castElementToJSElement},+ castJSArrayToList:castJSArrayToList,+ castListToJSArray:castListToJSArray,+ castJSStringToString:castJSStringToString,+ castStringToJSString:castStringToJSString,+ castTupleToJSTuple2:fromTuple,+ castTupleToJSTuple3:fromTuple,+ castTupleToJSTuple4:fromTuple,+ castTupleToJSTuple5:fromTuple,+ castJSTupleToTuple2:toTuple,+ castJSTupleToTuple3:toTuple,+ castJSTupleToTuple4:toTuple,+ castJSTupleToTuple5:toTuple+ };+}();++var JSjson = window.JSON;+Elm.JSON = function() {+ var JS = Elm.JavaScript;+ var empty = ['JSON',{}];+ function singleton(k) { return function(v) {+ var obj = {};+ obj[JS.castStringToJSString(k)] = v;+ return ['JSON', obj ];+ };+ }+ function insert(k) { return function(v) { return function(inObj) {+ var obj = inObj[1];+ var outObj = {};+ for (var i in obj) {+ outObj[i] = obj[i];+ }+ outObj[JS.castStringToJSString(k)] = v;+ return ['JSON', outObj ];+ };+ };+ }++ function lookup(key) { return function(obj) {+ var k = JS.castStringToJSString(key);+ return obj[1].hasOwnProperty(k) ? ["Just", obj[1][k]] : ["Nothing"] ;+ };+ }+ function find(tipe,base) { return function (key) { return function(obj) {+ var k = JS.castStringToJSString(key);+ if (obj[1].hasOwnProperty(k)) {+ var v = obj[1][k];+ if (v[0] === tipe) { return v[1]; }+ }+ return base;+ };+ }+ }+ function lookupWithDefault(base) { return function(key) { return function(obj) {+ var k = JS.castStringToJSString(key);+ return obj[1].hasOwnProperty(k) ? obj[1][k] : base ;+ };+ };+ }++ function remove(k) { return function(inObj) {+ var obj = inObj[1];+ var outObj = {};+ for (var i in obj) {+ outObj[i] = obj[i];+ }+ delete outObj[JS.castStringToJSString(k)];+ return ['JSON', outObj];+ };+ }++ function JsonString(v) { return [ "JsonString", v ]; }+ function JsonNumber(v) { return [ "JsonNumber", v ]; }+ function JsonBool(v) { return [ "JsonBool", v ]; }+ var JsonNull = [ "JsonNull" ];+ function JsonArray(v) { return [ "JsonArray", v ]; }+ function JsonObject(v) { return [ "JsonObject", v ]; }++ function toList(json) {+ var obj = json[1];+ var arr = [];+ for (var i in obj) {+ arr.push(Value.Tuple(JS.castJSStringToString(i), obj[i]));+ }+ return JS.castJSArrayToList(arr);+ }+ function fromList(list) {+ var arr = JS.castListToJSArray(list);+ var obj = {};+ for (var i = arr.length; i--; ) {+ obj[JS.castStringToJSString(arr[i][1])] = arr[i][2];+ }+ return [ "JSON", obj ];+ }++ function toPrettyJSString(sep) { return function (obj) {+ function fromValue(v) {+ switch (v[0]) {+ case 'JsonNull' : return null;+ case 'JsonString' : return JS.castStringToJSString(v[1]);+ case 'JsonObject' :+ var o = {};+ var from = v[1][1];+ for (var i in from) {+ o[i] = fromValue(from[i]);+ }+ return o;+ case 'JsonArray' :+ var a = JS.castListToJSArray(v[1]);+ for (var i = a.length; i--; ) {+ a[i] = fromValue(a[i]);+ }+ return a;+ default :+ return v[1];+ }+ }+ return JSjson.stringify(fromValue([ 'JsonObject', obj ]), null, JS.castStringToJSString(sep));+ };+ }+ function fromJSString(str) {+ var obj = JSjson.parse(str);+ function toValue(v) {+ switch (typeof v) {+ case 'string' : return [ "JsonString", JS.castJSStringToString(v) ];+ case 'number' : return [ "JsonNumber", JS.castJSNumberToFloat(v) ];+ case 'boolean' : return [ "JsonBool", JS.castJSBoolToBool(v) ];+ case 'object' :+ if (v === null) return [ "JsonNull" ];+ for (var i in v) {+ v[i] = toValue(v[i]);+ }+ if (v instanceof Array) return [ "JsonArray", JS.castJSArrayToList(v) ];+ return [ "JsonObject", [ "JSON", v ] ];+ }+ }+ for (var i in obj) {+ obj[i] = toValue(obj[i]);+ }+ return ['JSON',obj];+ }+ return {empty : empty,+ singleton : singleton,+ insert : insert,+ lookup : lookup,+ findString : find("JsonString",["Nil"]),+ findObject : find("JsonObject", empty ),+ findArray : find("JsonArray" ,["Nil"]),+ findWithDefault : lookupWithDefault,+ remove : remove,+ toPrettyJSString : toPrettyJSString,+ toJSString : toPrettyJSString(''),+ fromJSString : fromJSString,+ toPrettyString : function(sep) { return function(v) {+ return JS.castJSStringToString(toPrettyJSString(sep)(v)); }; },+ toString : function(v) { return JS.castJSStringToString(toPrettyJSString('')(v)); },+ fromString : function(v) { return fromJSString(JS.castStringToJSString(v)); },+ toList : toList,+ fromList : fromList,+ JsonString : JsonString,+ JsonNumber : JsonNumber,+ JsonBool : JsonBool,+ JsonNull : JsonNull,+ JsonArray : JsonArray,+ JsonObject : JsonObject+ };+}();++var Value = function(){++ var eq = function(x,y) {+ if (typeof x === "object") {+ if (x.hasOwnProperty('_')) {+ for (var i in x) { if (x[i] != y[i]) return false; }+ for (var i in y) { if (x[i] != y[i]) return false; }+ return true;+ }+ if (x === y) return true;+ if (x.length !== y.length) return false;+ for (var i = x.length; i--; ) {+ if (!eq(x[i],y[i])) return false;+ }+ return true;+ }+ return x === y;+ };++ var Tuple = function() {+ var len = arguments.length;+ var arr = new Array(len+1);+ arr[0] = "Tuple" + arguments.length;+ for (var i = len; i--; ) {+ arr[i+1] = arguments[i];+ }+ return arr;+ };++ var listToArray = function(list) {+ var arr = [];+ while (list[0] === "Cons") {+ arr.push(list[1]);+ list = list[2];+ }+ return arr;+ };++ function makeSpaces(s) {+ if (s.length == 0) { return s; }+ var arr = s.split('');+ if (arr[0] == ' ') { arr[0] = " " } + for (var i = arr.length; --i; ) {+ if (arr[i][0] == ' ' && arr[i-1] == ' ') {+ arr[i-1] = arr[i-1] + arr[i];+ arr[i] = '';+ }+ }+ for (var i = arr.length; i--; ) {+ if (arr[i].length > 1 && arr[i][0] == ' ') {+ var spaces = arr[i].split('');+ for (var j = spaces.length - 2; j >= 0; j -= 2) {+ spaces[j] = ' ';+ }+ arr[i] = spaces.join('');+ }+ }+ arr = arr.join('');+ if (arr[arr.length-1] === " ") {+ return arr.slice(0,-1) + ' ';+ }+ return arr;+ }++ function properEscape(str) {+ if (str.length == 0) return str;+ str = str //.replace(/&/g, "&")+ .replace(/"/g, /*"*/ """)+ .replace(/'/g, /*'*/ "'")+ .replace(/</g, "<")+ .replace(/>/g, ">")+ .replace(/\n/g, "<br/>");+ var arr = str.split('<br/>');+ for (var i = arr.length; i--; ) {+ arr[i] = makeSpaces(arr[i]);+ }+ return arr.join('<br/>');+ }++ var toText = function(elmList) {+ if (typeof elmList === "string") return properEscape(elmList);+ var a = [];+ while (elmList[0] === "Cons") {+ a.push(elmList[1]);+ elmList = elmList[2];+ }+ return properEscape(a.join(''));+ };++ function getTextSize(w,h,txt) {+ var t = document.createElement('div');+ t.innerHTML = txt;+ t.style.textAlign = 'left';+ if (w > 0) { t.style.width = w + "px"; }+ + t.style.visibility = "hidden";+ t.style.styleFloat = "left";+ t.style.cssFloat = "left";+ + document.body.appendChild(t);+ var cStyle = window.getComputedStyle(t,null);+ var realW = cStyle.getPropertyValue("width").slice(0,-2) - 0;+ var realH = cStyle.getPropertyValue("height").slice(0,-2) - 0;+ document.body.removeChild(t);+ //delete t;+ return [Math.ceil(realW),Math.ceil(Math.max(h,realH))];+ }++ function getSize(e) {+ var t = e.cloneNode(true);+ + t.style.visibility = "hidden";+ t.style.styleFloat = "left";+ t.style.cssFloat = "left";+ + document.body.appendChild(t);+ var w = t.offsetWidth;+ var h = t.offsetHeight;+ document.body.removeChild(t);+ //delete t;+ return [w,h];+ }++ function getExcess(e) {+ var t = e.cloneNode(true);+ + t.style.visibility = "hidden";+ t.style.styleFloat = "left";+ t.style.cssFloat = "left";+ + document.body.appendChild(t);+ var ow = t.offsetWidth;+ var oh = t.offsetHeight;+ var cStyle = window.getComputedStyle(t,null);+ var w = cStyle.getPropertyValue("width").slice(0,-2) - 0;+ var h = cStyle.getPropertyValue("height").slice(0,-2) - 0;+ document.body.removeChild(t);+ //delete t;+ return [ow-w,oh-h];+ }+++ function groupForms(forms) {+ forms = Elm.JavaScript.castListToJSArray(forms);+ var groups = [];+ var arr = [];+ for (var i = forms.length; i--; ) {+ var f = forms[i];+ switch(f[4][0]) {+ case "FElement":+ if (arr.length > 0) {+ groups.push(arr);+ arr = [];+ }+ groups.push(f);+ break;+ default:+ arr.push(f);+ }+ }+ if (arr.length > 0) groups.push(arr);+ return groups;+ }++ var toString = function(v) {+ if (typeof v === "function") {+ return "<function>";+ } else if (typeof v === "boolean") {+ return v ? "True" : "False";+ } else if (typeof v === "number") {+ return v+"";+ } else if (typeof v === "string" && v.length < 2) {+ return "'"+v+"'";+ } else if (typeof v === "object" && v.hasOwnProperty('_')) {+ var output = []+ for (var k in v) {+ if (k == '_') continue;+ for (var i = v[k].length; i--; ) {+ output.push(k + " = " + toString(v[k][i]));+ }+ }+ if (output.length === 0) return "{}";+ return "{ " + output.join(", ") + " }";+ } else if (v[0]) {+ if (v[0].substring(0,5) === "Tuple") {+ var output = new Array(v.length-1);+ for (var i = v.length; --i; ) { output[i-1] = toString(v[i]); }+ return "(" + output.join(",") + ")";+ } else if (v[0] === "Cons") {+ var start = (typeof v[1] === "string") ? '"' : "[";+ var end = (typeof v[1] === "string") ? '"' : "]";+ var div = (typeof v[1] === "string") ? "" : ",";+ var f = (typeof v[1] === "string") ? function(x){return x} : toString;+ var output = start + f(v[1]);+ v = v[2];+ while (true) {+ if (v[0] === "Cons") {+ output += div + f(v[1]);+ v = v[2];+ } else {+ return output + end;+ }+ }+ } else if (v[0] === "Nil") {+ return "[]";+ } else if (v[0] === "JSON") {+ return "(JSON.fromList " + toString(Elm.JSON.toList(v)) + ")";+ } else if (v[0] === "RBNode" || v[0] === "RBEmpty") {+ function cons(k){ return function(v) { return function(acc) { return ["Cons",["Tuple2",k,v],acc]; }; }; }+ var list = Elm.Dict.foldr(cons)(["Nil"])(v);+ var name = "Dict";+ if (list[0] === "Cons" && list[1][2][0] === "Tuple0") {+ name = "Set";+ list = Elm.List.map(function(x) { return x[1]; })(list);+ }+ return "(" + name + ".fromList " + toString(list) + ")";+ } else {+ var output = "";+ for (var i = v.length; --i; ) { output = ' ' + toString(v[i]) + output; }+ output = v[0] + output;+ return (v.length > 1) ? "(" + output + ")" : output;+ }+ }+ return v+"";+ };+ var show = function(v) { return str(toString(v)); };+ var append = function(xs,ys) {+ if (typeof xs === "string" && typeof ys === "string") {+ return xs.concat(ys);+ }+ if (xs[0] === "Nil") {+ return ys;+ }+ var root = ["Cons", xs[1], ["Nil"]];+ var curr = root;+ xs = xs[2];+ while (xs[0]==="Cons") {+ curr[2] = ["Cons", xs[1], ["Nil"]];+ xs = xs[2];+ curr = curr[2];+ }+ curr[2] = ys;+ return root;+ };++ var str = function(s) {+ var out = ["Nil"];+ for (var i = s.length; i--; ) {+ out = ["Cons", s[i], out];+ }+ return out;+ };+ + function wrap(elem) {+ var p = Value.getSize(elem);+ return ["Element", Guid.guid(), ["EHtml",elem],+ p[0], p[1], 1, ["Nothing"], ["Nothing"]];+ }+ var addListener = function() {+ if(document.addEventListener) {+ return function(element, event, handler) {+ element.addEventListener(event, handler, false);+ };+ } else {+ return function(element, event, handler) {+ element.attachEvent('on' + event, handler);+ };+ }+ }();++ return {eq:eq,+ str:str,+ show:show,+ Tuple:Tuple,+ append:append,+ listToArray:listToArray,+ toText : toText,+ properEscape : properEscape,+ getTextSize : getTextSize,+ getSize : getSize,+ getExcess : getExcess,+ groupForms : groupForms,+ wrap : wrap,+ addListener : addListener+ };+}();Elm.List = function() {++ var throwError = function(f) {+ throw "Function '" + f + "' expecting a list!";+ }++ function length(xs) {+ var out = 0;+ while (xs[0] === "Cons") {+ out += 1;+ xs = xs[2];+ }+ return out;+ };+ var reverse = foldl(function(x_72) {+ return function(y_73) {+ return["Cons", x_72, y_73]+ }+ })(["Nil"]);+ var concat = foldr(function(x_74) {+ return function(y_75) {+ return Value.append(x_74, y_75)+ }+ })(["Nil"]);+ var and = foldl(function(x_77) {+ return function(y_78) {+ return x_77 && y_78+ }+ })(true);+ var or = foldl(function(x_79) {+ return function(y_80) {+ return x_79 || y_80+ }+ })(false);+ var sum = foldl(function(x_89) {+ return function(y_90) {+ return x_89 + y_90+ }+ })(0);+ var product = foldl(function(x_91) {+ return function(y_92) {+ return x_91 * y_92+ }+ })(1);+ var maximum = foldl1(function(x) { return function(y) { return Math.max(x,y) } });+ var minimum = foldl1(function(x) { return function(y) { return Math.min(x,y) } });+ function head(v) {+ if (v[0] !== "Cons") {+ throw "Error: 'head' only accepts lists of length greater than one.";+ }+ return v[1];+ }+ function tail(v) {+ if (v[0] !== "Cons") {+ throw "Error: 'tail' only accepts lists of length greater than one.";+ }+ return v[2];+ }+ function last(v) {+ if (v[0] !== "Cons") {+ throw "Error: 'last' only accepts lists of length greater than one.";+ }+ var out = v[1];+ while (v[0] === "Cons") {+ out = v[1];+ v = v[2];+ }+ return out;+ }+ function map(f) {+ return function(xs) {+ if (xs[0] === "Nil") { return xs; }+ if (xs[0] !== "Cons") { throwError('map'); }+ var root = ["Cons", f(xs[1]), ["Nil"]];+ var curr = root;+ xs = xs[2];+ while (xs[0]==="Cons") {+ curr[2] = ["Cons", f(xs[1]), ["Nil"]];+ xs = xs[2];+ curr = curr[2];+ }+ return root;+ }+ }+ function foldl(f) {+ return function(b) {+ return function(xs) {+ var acc = b;+ if (xs[0] === "Nil") { return acc; }+ if (xs[0] !== "Cons") { throwError('foldl'); }+ while (xs[0] === "Cons") {+ acc = f(xs[1])(acc);+ xs = xs[2];+ }+ return acc;+ }+ }+ }+ function foldr(f) {+ return function(b) {+ return function(xs) {+ var acc = b;+ if (xs[0] === "Nil") { return acc; }+ if (xs[0] !== "Cons") { throwError('foldr'); }+ var arr = [];+ while (xs[0] === "Cons") {+ arr.push(xs[1]);+ xs = xs[2];+ }+ for (var i = arr.length; i--; ) {+ acc = f(arr[i])(acc);+ }+ return acc;+ }+ }+ }+ function foldl1(f_49) {+ return function(_temp_50) {+ return function(v) {+ if("Cons" !== v[0]) {+ return undefined+ }else {+ var x_51 = v[1];+ var xs_52 = v[2];+ return foldl(f_49)(x_51)(xs_52)+ }+ }(_temp_50)+ }+ }+ function foldr1(f) {+ return function(xs) {+ if (xs[0] === "Nil") { throw "'foldr1' requires an non-empty list." }+ if (xs[0] !== "Cons") { throwError('foldr1'); }+ var arr = [];+ while (xs[0] === "Cons") {+ arr.push(xs[1]);+ xs = xs[2];+ }+ var acc = arr.pop();+ for (var i = arr.length; i--; ) {+ acc = f(arr[i])(acc);+ }+ return acc;+ }+ }+ function scanl(f) {+ return function(b) {+ return function(xs) {+ if (xs[0] === "Nil") { return ["Cons",b,["Nil"]]; }+ if (xs[0] !== "Cons") { throwError('scanl'); }+ var arr = [b];+ while (xs[0] === "Cons") {+ b = f(xs[1])(b);+ arr.push(b);+ xs = xs[2];+ }+ var out = ["Nil"];+ for (var i = arr.length; i--; ) {+ out = ["Cons", arr[i], out];+ }+ return out;+ }+ }+ }+ function scanl1(f) {+ return function(xs) {+ if (xs[0] !== "Cons") {+ throw "Error: 'scanl1' requires a list of at least length 1.";+ }+ return scanl(f)(xs[1])(xs[2]);+ }+ }+ function filter(pred) {+ return function(xs) {+ if (xs[0] === "Nil") { return xs; }+ if (xs[0] !== "Cons") { throwError('filter'); }+ var arr = [];+ while (xs[0] === "Cons") {+ if (pred(xs[1])) { arr.push(xs[1]); }+ xs = xs[2];+ }+ var out = ["Nil"];+ for (var i = arr.length; i--; ) {+ out = ["Cons", arr[i], out];+ }+ return out;+ }+ }+ function concatMap(f_76) {+ return function(x) {+ return concat(map(f_76)(x))+ }+ }+ function all(pred) {+ return foldl(function(x) { return function(acc) {+ return acc && pred(x);+ };})(true);+ }+ function any(pred) {+ return foldl(function(x) { return function(acc) {+ return acc || pred(x);+ };})(false);+ }+ function partition(pred_93) {+ return function(lst_94) {+ return function() {+ var v = lst_94;+ var c = [function(v) {+ if("Nil" !== v[0]) {+ return undefined+ }else {+ return["Tuple2", ["Nil"], ["Nil"]]+ }+ }, function(v) {+ if("Cons" !== v[0]) {+ return undefined+ }else {+ var x_95 = v[1];+ var xs_96 = v[2];+ return function(v) {+ if("Tuple2" !== v[0]) {+ return undefined+ }else {+ var as_97 = v[1];+ var bs_98 = v[2];+ return pred_93(x_95) ? ["Tuple2", ["Cons", x_95, as_97], bs_98] : ["Tuple2", as_97, ["Cons", x_95, bs_98]]+ }+ }(partition(pred_93)(xs_96))+ }+ }];+ for(var i = c.length;i--;) {+ var r = c[i](v);+ if(r !== undefined) {+ return r+ }+ }+ }()+ }+ }+ function zipWith(f) {+ return function(listA) {+ return function(listB) {+ if (listA[0] === "Nil" || listB[0] === "Nil") { return ["Nil"]; }+ if (listA[0] !== "Cons" || listB[0] !== "Cons") { throwError('zipWith'); }+ var arr = [];+ while (listA[0] === "Cons" && listB[0] === "Cons") {+ arr.push(f(listA[1])(listB[1]));+ listA = listA[2];+ listB = listB[2];+ }+ var out = ["Nil"];+ for (var i = arr.length; i--; ) {+ out = ["Cons", arr[i], out];+ }+ return out;+ }+ }+ }+ function zip(listA) {+ return function(listB) {+ if (listA[0] === "Nil" || listB[0] === "Nil") { return ["Nil"]; }+ if (listA[0] !== "Cons" || listB[0] !== "Cons") { throwError('zip'); }+ var arr = [];+ while (listA[0] === "Cons" && listB[0] === "Cons") {+ arr.push(["Tuple2", listA[1], listB[1]]);+ listA = listA[2];+ listB = listB[2];+ }+ var out = ["Nil"];+ for (var i = arr.length; i--; ) {+ out = ["Cons", arr[i], out];+ }+ return out;+ }+ }+ function unzip(pairs_112) {+ return function() {+ var v = pairs_112;+ var c = [function(v) {+ if("Nil" !== v[0]) {+ return undefined+ }else {+ return["Tuple2", ["Nil"], ["Nil"]]+ }+ }, function(v) {+ if("Cons" !== v[0]) {+ return undefined+ }else {+ var p_113 = v[1];+ var ps_114 = v[2];+ return function(v) {+ if("Tuple2" !== v[0]) {+ return undefined+ }else {+ if("Tuple2" !== v[1][0]) {+ return undefined+ }else {+ var x_115 = v[1][1];+ var y_116 = v[1][2];+ if("Tuple2" !== v[2][0]) {+ return undefined+ }else {+ var xs_117 = v[2][1];+ var ys_118 = v[2][2];+ return["Tuple2", ["Cons", x_115, xs_117], ["Cons", y_116, ys_118]]+ }+ }+ }+ }(["Tuple2", p_113, unzip(ps_114)])+ }+ }];+ for(var i = c.length;i--;) {+ var r = c[i](v);+ if(r !== undefined) {+ return r+ }+ }+ }()+ }+ function intersperse(sep_119) {+ return function(xs_120) {+ return function() {+ var v = xs_120;+ var c = [function(v) {+ if("Nil" !== v[0]) {+ return undefined+ }else {+ return["Nil"]+ }+ }, function(v) {+ if("Cons" !== v[0]) {+ return undefined+ }else {+ var a_124 = v[1];+ if("Nil" !== v[2][0]) {+ return undefined+ }else {+ return["Cons", a_124, ["Nil"]]+ }+ }+ }, function(v) {+ if("Cons" !== v[0]) {+ return undefined+ }else {+ var a_121 = v[1];+ if("Cons" !== v[2][0]) {+ return undefined+ }else {+ var b_122 = v[2][1];+ var cs_123 = v[2][2];+ return["Cons", a_121, ["Cons", sep_119, intersperse(sep_119)(["Cons", b_122, cs_123])]]+ }+ }+ }];+ for(var i = c.length;i--;) {+ var r = c[i](v);+ if(r !== undefined) {+ return r+ }+ }+ }()+ }+ }+ function intercalate(sep_125) {+ return function(xs_126) {+ return function() {+ var v = xs_126;+ var c = [function(v) {+ if("Nil" !== v[0]) {+ return undefined+ }else {+ return["Nil"]+ }+ }, function(v) {+ if("Cons" !== v[0]) {+ return undefined+ }else {+ var a_130 = v[1];+ if("Nil" !== v[2][0]) {+ return undefined+ }else {+ return a_130+ }+ }+ }, function(v) {+ if("Cons" !== v[0]) {+ return undefined+ }else {+ var a_127 = v[1];+ if("Cons" !== v[2][0]) {+ return undefined+ }else {+ var b_128 = v[2][1];+ var cs_129 = v[2][2];+ return Value.append(a_127, Value.append(sep_125, intercalate(sep_125)(["Cons", b_128, cs_129])))+ }+ }+ }];+ for(var i = c.length;i--;) {+ var r = c[i](v);+ if(r !== undefined) {+ return r+ }+ }+ }()+ }+ }+ function sort(xs) {+ if (xs[0] === "Nil") { return xs; }+ if (xs[0] !== "Cons") { throwError('sort'); }+ var arr = [];+ while (xs[0] === "Cons") {+ arr.push(xs[1]);+ xs = xs[2];+ }+ arr.sort(function(a,b) { return a - b});+ var out = ["Nil"];+ for (var i = arr.length; i--; ) {+ out = [ "Cons", arr[i], out ];+ }+ return out;+ }+ function take(n) { return function(xs) {+ if (n <= 0) { return ["Nil"]; }+ if (xs[0] === "Nil") { return xs; }+ if (xs[0] !== "Cons") { throwError('take'); }+ var out = [ "Cons", xs[1], ["Nil"] ];+ var temp = out;+ xs = xs[2];+ --n;+ while (xs[0] === "Cons" && n > 0) {+ temp[2] = [ "Cons", xs[1], ["Nil"] ];+ temp = temp[2];+ xs = xs[2];+ --n;+ }+ return out;+ };+ }+ function drop(n) { return function(xs) {+ if (xs[0] === "Nil") { return xs; }+ if (xs[0] !== "Cons") { throwError('drop'); }+ while (xs[0] === "Cons" && n > 0) {+ xs = xs[2];+ --n;+ }+ return xs;+ };+ }+ return {head:head,+ tail:tail,+ last:last,+ map:map,+ foldl:foldl,+ foldr:foldr,+ foldl1:foldl1,+ foldr1:foldr1,+ scanl:scanl,+ scanl1:scanl1,+ filter:filter,+ length:length,+ reverse:reverse,+ concat:concat,+ concatMap:concatMap,+ and:and,+ or:or,+ all:all,+ any:any,+ sum:sum,+ product:product,+ maximum:maximum,+ minimum:minimum,+ partition:partition,+ zipWith:zipWith,+ zip:zip,+ unzip:unzip,+ intersperse:intersperse,+ intercalate:intercalate,+ sort:sort,+ take:take,+ drop:drop};+}();+Elm.Maybe = function() {+ function consMaybe(x) { return function(xs) {+ if (x[0] === "Just") return ["Cons", x[1], xs];+ return xs;+ };+ }+ function mapCons(f) { return function(y) { return function(xs) {+ var x = f(y);+ if (x[0] === "Just") return ["Cons", x[1], xs];+ return xs;+ };+ };+ }+ function maybe(b) { return function(f) { return function(m) {+ if (m[0] === "Just") return f(m[1]);+ return b;+ };+ };+ }++ return {Just : function(x) { return ["Just",x]; },+ Nothing : ["Nothing"],+ justs : Elm.List.foldr(consMaybe)(["Nil"]),+ isJust : function(m) { return m[0] === "Just"; },+ isNothing : function(m) { return m[0] === "Nothing"; },+ cons : consMaybe,+ maybe : maybe+ };+}();+ +Elm.Either = function() { + function Left(a1) { return ['Left',a1]; } + function Right(a1){ return ['Right',a1]; } + function either(f){ return function(g){ return function(e){ + switch(e[0]){ + case 'Left': return f(e[1]); + case 'Right': return g(e[1]); + } + };};} + function isLeft(e) { return e[0] == 'Left'; } + function isRight(e) { return e[0] == 'Right'; } + + function get(es) { return Elm.List.map(function(x){return x[1];})(es); } + function lefts(es) { return get(Elm.List.filter(isLeft)(es)); } + function rights(es) { return get(Elm.List.filter(isRight)(es)); } + function partition(es) { + var lrs = Elm.List.partition(isLeft)(es); + lrs[1] = get(lrs[1]); + lrs[2] = get(lrs[2]); + return lrs; + } + return {Left:Left, + Right:Right, + either:either, + isLeft:isLeft, + isRight:isRight, + lefts:lefts, + rights:rights, + partition:partition}; +}(); ++Elm.Char = function() {+ function isBetween(lo,hi) { return function(chr) {+ var c = chr.charCodeAt(0);+ return lo <= c && c <= hi;+ };+ }+ var isDigit = isBetween('0'.charCodeAt(0),'9'.charCodeAt(0));+ var chk1 = isBetween('a'.charCodeAt(0),'f'.charCodeAt(0));+ var chk2 = isBetween('A'.charCodeAt(0),'F'.charCodeAt(0));+ + return {fromCode : function(c) { return String.fromCharCode(c); },+ toCode : function(c) { return c.charCodeAt(0); },+ toUpper : function(c) { return c.toUpperCase(); },+ toLower : function(c) { return c.toLowerCase(); },+ toLocaleUpper : function(c) { return c.toLocaleUpperCase(); },+ toLocaleLower : function(c) { return c.toLocaleLowerCase(); },+ isLower : isBetween('a'.charCodeAt(0),'z'.charCodeAt(0)),+ isUpper : isBetween('A'.charCodeAt(0),'Z'.charCodeAt(0)),+ isDigit : isDigit,+ isOctDigit : isBetween('0'.charCodeAt(0),'7'.charCodeAt(0)),+ isHexDigit : function(c) { return isDigit(c) || chk1(c) || chk2(c); }+ };+}();+Elm.Color = function() {++function Color_0(a1) {+ return function(a2) {+ return function(a3) {+ return function(a4) {+ return["Color", a1, a2, a3, a4]+ }+ }+ }+}+var rgba_1 = Color_0;+var red_3 = ["Color",255,0,0,1];+var green_4 = ["Color",0,255,0,1];+var blue_5 = ["Color",0,0,255,1];+var yellow_6 = ["Color",255,255,0,1];+var cyan_7 = ["Color",0,255,255,1];+var magenta_8 = ["Color",255,0,255,1];+var black_9 = ["Color",0,0,0,1];+var white_10 = ["Color",255,255,255,1];+var gray_11 = ["Color",128,128,128,1];+var grey_12 = ["Color",128,128,128,1];+function rgb_2(r_13) {+ return function(g_14) {+ return function(b_15) {+ return ["Color",r_13,g_14,b_15,1]+ }+ }+}+function extract(c) {+ if (c[4] === 1) { return 'rgb(' + c[1] + ',' + c[2] + ',' + c[3] + ')'; }+ return 'rgba(' + c[1] + ',' + c[2] + ',' + c[3] + ',' + c[4] + ')';+}+function complement(rgb) {+ var hsv = toHSV(rgb);+ hsv.hue = (hsv.hue + 180) % 360;+ return toRGB(hsv);+}++function hsva(h) { return function(s) { return function(v) { return function(a) {+ var clr = toRGB({hue:h, saturation:s, value:v});+ clr[4] = a;+ return clr;+ }; }; };+}++function hsv(h) { return function(s) { return function(v) {+ return toRGB({hue:h, saturation:s, value:v}); }; }; }++function toHSV(rgb) {+ var hsv = {};+ var r = rgb[1] / 255.0, g = rgb[2] / 255.0, b = rgb[3] / 255.0;+ var M = Math.max(r,g,b);+ var m = Math.min(r,g,b);+ var c = M - m;++ var h = 0;+ if (c === 0) { h = 0; }+ else if (M === r) { h = ((g - b) / c) % 6; }+ else if (M === g) { h = ((b - r) / c) + 2; }+ else if (M === b) { h = ((r - g) / c) + 4; }+ h *= 60;++ return { value : M, hue : h, saturation : (M === 0 ? 0 : c / M) };+}++function between(lo,hi,x) { return lo <= x && x < hi; }+function norm(n) { return Math.round(n*255); }++function toRGB(hsv) {+ var c = hsv.value * hsv.saturation;+ var hue = hsv.hue / 60;+ var x = c * (1 - Math.abs((hue % 2) - 1));+ var r = 0, g = 0, b = 0;+ if (between(0,1,hue)) { r = c; g = x; b = 0; }+ else if (between(1,2,hue)) { r = x; g = c; b = 0; }+ else if (between(2,3,hue)) { r = 0; g = c; b = x; }+ else if (between(3,4,hue)) { r = 0; g = x; b = c; }+ else if (between(4,5,hue)) { r = x; g = 0; b = c; }+ else if (between(5,6,hue)) { r = c; g = 0; b = x; }++ var m = hsv.value - c;+ return ["Color", norm(r+m), norm(g+m), norm(b+m), 1 ];+}+ return{rgba:rgba_1, rgb:rgb_2, hsva:hsva, hsv:hsv, red:red_3, green:green_4, blue:blue_5, yellow:yellow_6, cyan:cyan_7, magenta:magenta_8, black:black_9, white:white_10, gray:gray_11, grey:grey_12,complement:complement,extract:extract}+}(); +var Collage = function() { + +var JS = Elm.JavaScript; + +function tracePoints(ctx,points) { + var i = points.length - 1; + if (i <= 0) return; + ctx.moveTo(points[i][1], points[i][2]); + while (i--) { ctx.lineTo(points[i][1], points[i][2]); } +} + +function solid(ctx,color,points) { + tracePoints(ctx,points); + ctx.strokeStyle = Elm.Color.extract(color); + ctx.stroke(); +}; + +function filled(ctx,color,points) { + tracePoints(ctx,points); + ctx.fillStyle = Elm.Color.extract(color); + ctx.fill(); +} + +function textured(redo,ctx,src,points) { + var img = new Image(); + img.src = JS.castStringToJSString(src); + img.onload = redo; + + tracePoints(ctx,points); + ctx.fillStyle = ctx.createPattern(img,'repeat'); + ctx.fill(); +} + +function customLine(pattern,ctx,color,points) { + if (pattern.length === 0) { pattern = [8,4]; } + customLineHelp(ctx, pattern, points); + ctx.strokeStyle = Elm.Color.extract(color); + ctx.stroke(); +}; + +var customLineHelp = function(ctx, pattern, points) { + var i = points.length - 1; + if (i <= 0) return; + var x0 = points[i][1], y0 = points[i][2]; + var x1=0, y1=0, dx=0, dy=0, remaining=0, nx=0, ny=0; + var pindex = 0, plen = pattern.length; + var draw = true, segmentLength = pattern[0]; + ctx.moveTo(x0,y0); + while (i--) { + x1 = points[i][1]; y1 = points[i][2]; + dx = x1 - x0; dy = y1 - y0; + remaining = Math.sqrt(dx * dx + dy * dy); + while (segmentLength <= remaining) { + x0 += dx * segmentLength / remaining; + y0 += dy * segmentLength / remaining; + ctx[draw ? 'lineTo' : 'moveTo'](x0, y0); + // update starting position + dx = x1 - x0; dy = y1 - y0; + remaining = Math.sqrt(dx * dx + dy * dy); + // update pattern + draw = !draw; + pindex = (pindex + 1) % plen; + segmentLength = pattern[pindex]; + } + if (remaining > 0) { + ctx[draw ? 'lineTo' : 'moveTo'](x1, y1); + segmentLength -= remaining; + } + x0 = x1; y0 = y1; + } +}; + +function drawLine(ctx,form) { + var points = form[3][1]; + switch(form[1][0]) { + case "Solid" : return solid(ctx,form[2],points); + case "Dotted": return customLine([3,3],ctx,form[2],points); + case "Dashed": return customLine([8,4],ctx,form[2],points); + case "Custom": return customLine(form[1][1],ctx,form[2],points); + } +}; + +function drawShape(redo,ctx,shapeStyle,color,points) { + switch(shapeStyle[0]) { + case "Filled": return filled(ctx,color,points); + case "Outlined": return solid(ctx,color,points); + case "Textured": return textured(redo,ctx,shapeStyle[1],points); + case "CustomOutline": + return customLine(shapeStyle[1],ctx,color,points); + } +}; + +function drawImage(redo,ctx,w,h,src) { + var img = new Image(); + img.onload = redo; + img.src = JS.castStringToJSString(src); + ctx.drawImage(img,-w/2,-h/2,w,h); +} + +function renderForm(redo,ctx,theta,scale,x,y,form) { + ctx.save(); + if (x !== 0 || y !== 0) ctx.translate(x,y); + if (theta !== ~~theta) ctx.rotate(2*Math.PI*theta); + if (scale !== 1) ctx.scale(scale,scale); + ctx.beginPath(); + switch(form[0]) { + case "FLine": drawLine(ctx,form); break; + case "FShape": drawShape(redo,ctx,form[1],form[2],form[3][1]); break; + case "FImage": drawImage(redo,ctx,form[1],form[2],form[3]); break; + } + ctx.restore(); +}; + +function renderForms(redo,ctx,w,h,forms) { + ctx.clearRect(0,0,w,h); + for (var i = forms.length; i--; ) { + var f = forms[i]; + renderForm(redo,ctx,f[1],f[2],f[3][1],f[3][2],f[4]); + } +} + +function collageForms(w,h,forms) { + var canvas = Render.newElement('canvas'); + w = ~~w; + h = ~~h; + canvas.style.width = w + 'px'; + canvas.style.height = h + 'px'; + canvas.style.display = "block"; + canvas.width = w; + canvas.height = h; + if (canvas.getContext) { + var ctx = canvas.getContext('2d'); + function redo() { renderForms(this,ctx,w,h,forms); } + renderForms(redo,ctx,w,h,forms); + return canvas; + } + canvas.innerHTML = "Your browser does not support the canvas element."; + return canvas; +}; + +function applyTransforms(theta,scale,x,y,w,h,e) { + var t = "translate(" + (x - w / 2) + "px,"+ (y - h / 2) + "px)"; + var r = theta === (~~theta) ? "" : "rotate(" + theta*360 + "deg)"; + var s = scale === 1 ? "" : "scale(" + scale + "," + scale + ")"; + var transforms = t + " " + s + " " + r; + e.style.transform = transforms; + e.style.msTransform = transforms; + e.style.MozTransform = transforms; + e.style.webkitTransform = transforms; + e.style.OTransform = transforms; +} + +function collageElement(w,h,theta,scale,x,y,elem) { + var e = Render.render(elem); + applyTransforms(theta,scale,x,y,elem[3],elem[4],e); + var div = Render.newElement('div'); + Render.addTo(div,e); + div.style.width = (~~w) + "px"; + div.style.height = (~~h) + "px"; + div.style.overflow = "hidden"; + return div; +} + +function collage(w,h,formss) { + if (formss.length === 0) { return collageForms(w,h,[]); } + var elems = new Array(formss.length); + for (var i = formss.length; i--; ) { + var f = formss[i]; + if (typeof f[0] === "string") { + elems[i] = collageElement(w,h,f[1],f[2],f[3][1],f[3][2],f[4][1]); + } else { + elems[i] = collageForms(w,h,f); + } + } + if (formss.length === 1) { return elems[0]; } + return Render.flowWith(Render.goIn,function(x){return x},elems); +} + +function updateFormSet(node,currSet,nextSet) { + if (Value.eq(nextSet,currSet)) return; + var w = node.style.width.slice(0,-2) - 0; + var h = node.style.height.slice(0,-2) - 0; + if (typeof nextSet[0] === "object") { + if (typeof currSet[0] === "object") { + if (node.getContext) { + var ctx = node.getContext('2d'); + function redo() { renderForms(this,ctx,w,h,nextSet); } + return renderForms(redo,ctx,w,h,nextSet); + } + } + var newNode = collageForms(w,h,nextSet); + newNode.style.position = 'absolute'; + return node.parentNode.replaceChild(newNode,node); + } + node.style.width = (~~w) + "px"; + node.style.height = (~~h) + "px"; + var f = nextSet; + var next = nextSet[4][1]; + Render.update(node.firstChild, currSet[4][1], next); + applyTransforms(f[1],f[2],f[3][1],f[3][2],next[3],next[4],node.firstChild); +} + +// assumes that the form sets are the same length. +function updateCollage(node,currs,nexts) { + if (nexts.length === 1) { + return updateFormSet(node,currs[0],nexts[0]); + } + var kids = node.childNodes; + var len = kids.length; + for (var i = len; i--; ) { + updateFormSet(kids[len-i-1], currs[i], nexts[i]); + } +} + +function style(clr,n,list) { + return ["Tuple2", + '<span style="font-size:100%;color:' + clr + ';">' + n + '</span>', + list]; +} + +function insideForm(point) { return function(form) { + if (!inBoundsOf(point[1],point[2],form)) return false; + var hw, hh; + switch (form[4][0]) { + case "FShape": return insideShape(point,form[1],form[2],form[3],form[4][3][1]); + case "FLine": return false; + case "FImage": + hw = form[4][1] / 2; + hh = form[4][2] / 2; + break; + case "FElement": + hw = form[4][1][3] / 2; + hh = form[4][1][4] / 2; + break; + } + return insideShape(point,form[1],form[2],form[3], + [ [null, hw, hh], + [null,-hw, hh], + [null,-hw,-hh], + [null, hw,-hh], + [null, hw, hh] ]); + }; +} + +function inBoundsOf(px,py,form) { + if (form.length < 6) { + var fx = form[3][1], fy = form[3][2]; + var radiusSquared = 0; + var scale = form[2]; + switch (form[4][0]) { + case "FShape": + var points = form[4][3][1]; + for (var i = points.length; --i; ) { + var p = points[i]; + radiusSquared = Math.max(radiusSquared, p[1]*p[1] + p[2]*p[2]); + } + radiusSquared *= scale * scale; + break; + case "FLine": + break; + case "FImage": + var x = scale * form[4][1] / 2; + var y = scale * form[4][2] / 2; + radiusSquared = x*x + y*y; + break; + case "FElement": + var x = scale * form[4][1][3] / 2; + var y = scale * form[4][1][4] / 2; + radiusSquared = x*x + y*y; + break; + } + form.push(function(px,py) { + var dx = px - fx; + var dy = py - fy; + return dx*dx + dy*dy < radiusSquared + 1; + }); + } + return form[5](px,py); +} + +function insideShape(point,theta,scale,pos,points) { + var counter = 0; + var list = ["Nil"]; + var p1,p2; + + var x = (point[1] - pos[1]) / scale; + var y = (point[2] - pos[2]) / scale; + if (theta !== 0) { + var t = -2 * Math.PI * theta; + var nx = x * Math.cos(t) - y * Math.sin(t); + y = x * Math.sin(t) + y * Math.cos(t); + x = nx; + } + + if (points.length === 0) { return false; } + p1 = points[0]; + for (var i = points.length - 1; i--; ) { + p2 = points[i]; + var p1x = p1[1], p1y = p1[2], p2x = p2[1], p2y = p2[2]; + + if (p1y < p2y) {var ymin=p1y, ymax=p2y;} else {var ymin=p2y, ymax=p1y;} + if (p1x < p2x) {var xmin=p1x, xmax=p2x;} else {var xmin=p2x, xmax=p1x;} + + if (ymin < y && y <= ymax && x <= xmax) { + if (x <= xmin || x <= ((y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x)) { + ++counter; + } + } + p1 = p2; + } + return (counter % 2) === 1; +} + +return {collage:collage, updateCollage:updateCollage, insideForm:insideForm}; + +}();Elm.Graphics = function() {+ for (this['i'] in Elm.List) {+ eval('var ' + this['i'] + ' = Elm.List[this.i];');+ }+ var JS = Elm.JavaScript;+ var DLeft_0 = ["DLeft"];+ var DRight_1 = ["DRight"];+ var DUp_2 = ["DUp"];+ var DDown_3 = ["DDown"];+ var DIn_4 = ["DIn"];+ var DOut_5 = ["DOut"];+ function Absolute_12(a1) {+ return["Absolute", a1]+ }+ function Relative_13(a1) {+ return["Relative", a1]+ }+ var Near_14 = ["Near"];+ var Mid_15 = ["Mid"];+ var Far_16 = ["Far"];+ function Position_17(a1) {+ return function(a2) {+ return["Position", a1, a2]+ }+ }+ function PositionTL_18(a1) {+ return function(a2) {+ return["PositionTL", a1, a2]+ }+ }+ function PositionTR_19(a1) {+ return function(a2) {+ return["PositionTR", a1, a2]+ }+ }+ function PositionBL_20(a1) {+ return function(a2) {+ return["PositionBL", a1, a2]+ }+ }+ function PositionBR_21(a1) {+ return function(a2) {+ return["PositionBR", a1, a2]+ }+ }+ function Element_37(id,e,w,h,o,c,l) {+ return["Element", id, e, w, h, o, c, l ]+ }+ function EText_39(a1) {+ return function(a2) {+ return["EText", a1, a2]+ }+ }+ function EImage_40(a1) {+ return["EImage", JS.castStringToJSString(a1)]+ }+ function EVideo_41(a1) {+ return["EVideo", JS.castStringToJSString(a1)]+ }+ function EFittedImage_42(a1) {+ return["EFittedImage", JS.castStringToJSString(a1)]+ }+ function EFlow_43(a1) {+ return function(a2) {+ return["EFlow", a1, JS.castListToJSArray(a2)]+ }+ }+ function ECollage_44(a1) {+ return function(a2) {+ return function(a3) {+ return["ECollage", a1, a2, Value.groupForms(a3)]+ }+ }+ }+ var EEmpty_45 = ["EEmpty"];+ function EContainer_46(a1) {+ return function(a2) {+ return["EContainer", a1, a2]+ }+ }+ var Solid_68 = ["Solid"];+ var Dotted_69 = ["Dotted"];+ var Dashed_70 = ["Dashed"];+ function Custom_71(a1) {+ return["Custom", JS.castListToJSArray(a1)]+ }+ var Filled_72 = ["Filled"];+ var Outlined_73 = ["Outlined"];+ function CustomOutline_74(a1) {+ return["CustomOutline", JS.castListToJSArray(a1)]+ }+ function Line_75(a1) {+ return["Line", JS.castListToJSArray(a1)]+ }+ function Shape_78(a1) {+ return function(a2) {+ var points = JS.castListToJSArray(a1);+ if (points.length > 0) { points.push(points[0]); }+ return["Shape", points, a2];+ }+ }+ function Form_84(a1) {+ return function(a2) {+ return function(a3) {+ return function(a4) {+ return["Form", a1, a2, a3, a4]+ }+ }+ }+ }+ function FLine_85(a1) {+ return function(a2) {+ return function(a3) {+ return["FLine", a1, a2, a3]+ }+ }+ }+ function FShape_86(a1) {+ return function(a2) {+ return function(a3) {+ return["FShape", a1, a2, a3]+ }+ }+ }+ function FImage_87(a1) {+ return function(a2) {+ return function(a3) {+ return["FImage", a1, a2, JS.castStringToJSString(a3)]+ }+ }+ }+ function FElement_88(a1) {+ return["FElement", a1]+ }+ var left_6 = DLeft_0;+ var right_7 = DRight_1;+ var down_8 = DDown_3;+ var up_9 = DUp_2;+ var inward_10 = DIn_4;+ var outward_11 = DOut_5;+ var topLeft_22 = Position_17(Near_14)(Near_14);+ var topRight_23 = Position_17(Far_16)(Near_14);+ var bottomLeft_24 = Position_17(Near_14)(Far_16);+ var bottomRight_25 = Position_17(Far_16)(Far_16);+ var midLeft_26 = Position_17(Near_14)(Mid_15);+ var midRight_27 = Position_17(Far_16)(Mid_15);+ var midTop_28 = Position_17(Mid_15)(Near_14);+ var midBottom_29 = Position_17(Mid_15)(Far_16);+ var middle_30 = Position_17(Mid_15)(Mid_15);+ function middleAt(a1) {+ return function(a2) {+ return["PositionAt", a1, a2]+ }+ }+ var topLeftAt_31 = PositionTL_18;+ var topRightAt_32 = PositionTR_19;+ var bottomLeftAt_33 = PositionBL_20;+ var bottomRightAt_34 = PositionBR_21;+ var absolute_35 = Absolute_12;+ var relative_36 = Relative_13;+ function newElement_38(e,w,h,o,c,l) { return Element_37(Guid.guid(),e,w,h,o,c,l); }+ function basicNewElement(e,w,h) { return Element_37(Guid.guid(),e,w,h,1,["Nothing"],["Nothing"]); }+ var line_76 = Line_75;+ var polygon_79 = Shape_78;+ function sprite_96(src) {+ return function(w) {+ return function(h) {+ return function(pos) {+ return Form_84(0)(1)(pos)(FImage_87(w)(h)(src))+ }+ }+ }+ }+ function toForm_97(pos) {+ return function(e) {+ return Form_84(0)(1)(pos)(FElement_88(e))+ }+ }+ function width_47(w__101) {+ return function(e) {+ var be = e[2];+ switch(be[0]) {+ case "EImage":+ case "EVideo":+ return newElement_38(e[2],w__101,e[4] * w__101 / e[3], e[5], e[6], e[7]);+ case "EText":+ var p = Value.getTextSize(w__101,e[4],be[2]);+ return newElement_38(e[2], w__101, p[1], e[5], e[6], e[7]);+ }+ return newElement_38(e[2], w__101, e[4], e[5], e[6], e[7]);+ }+ }+ function height_48(h__108) {+ return function(e) {+ var be = e[2];+ switch(be[0]) {+ case "EImage":+ case "EVideo":+ return newElement_38(e[2], e[3] * h__108 / e[4], h__108, e[5], e[6], e[7]);+ }+ return newElement_38(e[2], e[3], h__108, e[5], e[6], e[7]);+ }+ }+ function size_49(w) {+ return function(h) {+ return function(e) {+ return newElement_38(e[2], w, h, e[5], e[6], e[7]);+ }+ }+ }+ function opacity_50(o) {+ return function(e) {+ return newElement_38(e[2], e[3], e[4], o, e[6], e[7]);+ }+ }+ function color_51(c) {+ return function(e) {+ return newElement_38(e[2], e[3], e[4], e[5], ["Just",c], e[7]);+ }+ }+ function link(lnk) {+ return function(e) {+ return newElement_38(e[2], e[3], e[4], e[5], e[6], ["Just", JS.castStringToJSString(lnk)]);+ }+ }+ function widthOf_52(e) { return ~~e[3]; }+ function heightOf_53(e) { return ~~e[4]; }+ function sizeOf_54(e) { return["Tuple2", ~~e[3], ~~e[4]] }+ function text_56(txt) {+ var p = Value.getTextSize(0,0,txt);+ return basicNewElement(EText_39("left")(txt), p[0], p[1])+ }+ function plainText(str) {+ var txt = Value.toText(str);+ var p = Value.getTextSize(0,0,txt);+ return basicNewElement(EText_39("left")(txt),p[0],p[1])+ }+ function asText(v) {+ var txt = Elm.Text.monospace(Value.toText(Value.show(v)));+ var p = Value.getTextSize(0,0,txt);+ return basicNewElement(EText_39("left")(txt),p[0],p[1])+ }+ function centeredText(txt) {+ var p = Value.getTextSize(0,0,txt);+ return basicNewElement(EText_39("center")(txt),p[0],p[1])+ }+ function justifiedText(txt) {+ var p = Value.getTextSize(0,0,txt);+ return basicNewElement(EText_39("justify")(txt),p[0],p[1])+ }+ function rightedText(txt) {+ var p = Value.getTextSize(0,0,txt);+ return basicNewElement(EText_39("right")(txt),p[0],p[1])+ }+ function image_57(w) {+ return function(h) {+ return function(src) {+ return basicNewElement(EImage_40(src),w,h)+ }+ }+ }+ function images(srcs) {+ var pics = Elm.Signal.constant(spacer_66(0)(0));+ var update = Elm.Signal.lift(function(src) {+ src = JS.castStringToJSString(src);+ var img = new Image();+ img.onload = function() {+ Dispatcher.notify(pics.id,+ image_57(this.width)(this.height)(src));+ };+ img.src = src;+ })(srcs);+ function f(x) { return function(y) { return x; } }+ var combine = Elm.Signal.lift2(f)(pics)(update);+ return combine;+ }+ function video_58(w) {+ return function(h) {+ return function(src) {+ return basicNewElement(EVideo_41(src),w,h)+ }+ }+ }+ function fittedImage_59(w_147) {+ return function(h_148) {+ return function(s_149) {+ return basicNewElement(EFittedImage_42(s_149),w_147,h_148)+ }+ }+ }+ function flow_60(dir_150) {+ return function(es_151) {+ return function() {+ var w_152 = function() {+ var ws_154 = map(widthOf_52)(es_151);+ return function(case1) {+ var case0 = case1;+ switch(case0[0]) {+ case "DLeft":+ return sum(ws_154);+ case "DRight":+ return sum(ws_154)+ }+ return maximum(ws_154)+ }(dir_150)+ }();+ var h_153 = function() {+ var hs_155 = map(heightOf_53)(es_151);+ return function(case3) {+ var case2 = case3;+ switch(case2[0]) {+ case "DDown":+ return sum(hs_155);+ case "DUp":+ return sum(hs_155)+ }+ return maximum(hs_155)+ }(dir_150)+ }();+ return basicNewElement(EFlow_43(dir_150)(es_151), w_152, h_153)+ }()+ }+ }+ function above_61(e1_156) {+ return function(e2_157) {+ return basicNewElement(EFlow_43(DDown_3)(["Cons", e1_156, ["Cons", e2_157, ["Nil"]]]), Math.max(widthOf_52(e1_156),widthOf_52(e2_157)), heightOf_53(e1_156) + heightOf_53(e2_157));+ }+ }+ function below_62(e1_158) {+ return function(e2_159) {+ return basicNewElement(EFlow_43(DDown_3)(["Cons", e2_159, ["Cons", e1_158, ["Nil"]]]), Math.max(widthOf_52(e1_158),widthOf_52(e2_159)), heightOf_53(e1_158) + heightOf_53(e2_159));+ }+ }+ function beside_63(e1_160) {+ return function(e2_161) {+ return basicNewElement(EFlow_43(DRight_1)(["Cons", e1_160, ["Cons", e2_161, ["Nil"]]]), widthOf_52(e1_160) + widthOf_52(e2_161), Math.max(heightOf_53(e1_160),heightOf_53(e2_161)));+ }+ }+ function layers_64(es_162) {+ return basicNewElement(EFlow_43(DOut_5)(es_162), maximum(map(widthOf_52)(es_162)), maximum(map(heightOf_53)(es_162)))+ }+ function collage_65(w_163) {+ return function(h_164) {+ return function(forms_165) {+ return basicNewElement(ECollage_44(w_163)(h_164)(forms_165),w_163,h_164)+ }+ }+ }+ function spacer_66(w_166) {+ return function(h_167) {+ return basicNewElement(EEmpty_45,w_166,h_167)+ }+ }+ function container_67(w_169) {+ return function(h_170) {+ return function(pos_168) {+ return function(e_171) {+ return basicNewElement(EContainer_46(pos_168)(e_171),w_169,h_170)+ }+ }+ }+ }+ function segment_77(p1_172) {+ return function(p2_173) {+ return Line_75(["Cons", p1_172, ["Cons", p2_173, ["Nil"]]])+ }+ }+ function rect_80(w_174) {+ return function(h_175) {+ return function(pos_176) {+ return Shape_78(["Cons", ["Tuple2", 0 - w_174 / 2, 0 - h_175 / 2],+ ["Cons", ["Tuple2", 0 - w_174 / 2, h_175 / 2],+ ["Cons", ["Tuple2", w_174 / 2, h_175 / 2],+ ["Cons", ["Tuple2", w_174 / 2, 0 - h_175 / 2], ["Nil"]]]]])(pos_176)+ }+ }+ }+ function oval_81(w_177) {+ return function(h_178) {+ return function(pos_179) {+ return function() {+ var n_180 = 50;+ return function() {+ function f_181(i_182) {+ return["Tuple2", w_177 / 2 * Math.cos(2 * (Math.PI / n_180) * i_182), h_178 / 2 * Math.sin(2 * (Math.PI / n_180) * i_182)];+ }+ return Shape_78(map(f_181)(function() {+ var lo = 0;+ var hi = n_180 - 1;+ var lst = ["Nil"];+ if(lo <= hi) {+ do {+ lst = ["Cons", hi, lst]+ }while(hi-- > lo)+ }+ return lst+ }()))(pos_179)+ }()+ }()+ }+ }+ }+ function circle_82(r_183) {+ return oval_81(2 * r_183)(2 * r_183)+ }+ function ngon_83(n_184) {+ return function(r_185) {+ return function(pos_186) {+ return function() {+ var m_187 = n_184;+ return function() {+ function f_188(i_189) {+ return["Tuple2", r_185 * Math.cos(2 * (Math.PI / m_187) * i_189), r_185 * Math.sin(2 * (Math.PI / m_187) * i_189)];+ }+ return Shape_78(map(f_188)(function() {+ var lo = 0;+ var hi = n_184 - 1;+ var lst = ["Nil"];+ if(lo <= hi) {+ do {+ lst = ["Cons", hi, lst]+ }while(hi-- > lo)+ }+ return lst+ }()))(pos_186)+ }()+ }()+ }+ }+ }+ function solid_89(clr_190) {+ return function(ln_191) {+ return Form_84(0)(1)(["Tuple2", 0, 0])(FLine_85(Solid_68)(clr_190)(ln_191))+ }+ }+ function dotted_90(clr_192) {+ return function(ln_193) {+ return Form_84(0)(1)(["Tuple2", 0, 0])(FLine_85(Dotted_69)(clr_192)(ln_193))+ }+ }+ function dashed_91(clr_194) {+ return function(ln_195) {+ return Form_84(0)(1)(["Tuple2", 0, 0])(FLine_85(Dashed_70)(clr_194)(ln_195))+ }+ }+ function customLine_92(pattern_196) {+ return function(clr_197) {+ return function(ln_198) {+ return Form_84(0)(1)(["Tuple2", 0, 0])(FLine_85(Custom_71(pattern_196))(clr_197)(ln_198))+ }+ }+ }+ function filled_93(clr) {+ return function(shape) {+ return Form_84(0)(1)(shape[2])(FShape_86(Filled_72)(clr)(shape));+ }+ }+ function outlined_94(clr) {+ return function(shape) {+ return Form_84(0)(1)(shape[2])(FShape_86(Outlined_73)(clr)(shape));+ }+ }+ function customOutline_95(pattern) {+ return function(clr) {+ return function(shape) {+ return Form_84(0)(1)(shape[2])(FShape_86(CustomOutline_74(pattern))(clr)(shape));+ }+ }+ }+ function textured(src) {+ return function(shape) {+ return Form_84(0)(1)(shape[2])(FShape_86(["Textured",src])(null)(shape));+ }+ }+ function rotate_98(t_212) {+ return function(Form$thetascaleposform_213) {+ return function(case5) {+ var case0 = case5;+ switch(case0[0]) {+ case "Form":+ var case1 = case0[1], case2 = case0[2], case3 = case0[3], case4 = case0[4];+ return Form_84(t_212 + case1)(case2)(case3)(case4)+ }+ throw"Non-exhaustive pattern match in case";+ }(Form$thetascaleposform_213)+ }+ }+ function scale_99(s) {+ return function(form) {+ return Form_84(form[1])(s * form[2])(form[3])(form[4])+ }+ }+ function move_100(x_224) {+ return function(y_225) {+ return function(Form$thetascaleTuple2$pxpyform_226) {+ return function(case7) {+ var case0 = case7;+ switch(case0[0]) {+ case "Form":+ var case1 = case0[1], case2 = case0[2], case3 = case0[3], case4 = case0[4];+ switch(case3[0]) {+ case "Tuple2":+ var case5 = case3[1], case6 = case3[2];+ return Form_84(case1)(case2)(["Tuple2", x_224 + case5, y_225 + case6])(case4)+ }+ break+ }+ throw"Non-exhaustive pattern match in case";+ }(Form$thetascaleTuple2$pxpyform_226)+ }+ }+ }+ return{left:left_6, right:right_7, down:down_8, up:up_9, inward:inward_10, outward:outward_11, topLeft:topLeft_22, topRight:topRight_23, bottomLeft:bottomLeft_24, bottomRight:bottomRight_25, midLeft:midLeft_26, midRight:midRight_27, midTop:midTop_28, midBottom:midBottom_29, middle:middle_30, middleAt:middleAt, topLeftAt:topLeftAt_31, topRightAt:topRightAt_32, bottomLeftAt:bottomLeftAt_33, bottomRightAt:bottomRightAt_34, absolute:absolute_35, relative:relative_36, width:width_47, height:height_48, size:size_49, opacity:opacity_50, + color:color_51, link:link, widthOf:widthOf_52, heightOf:heightOf_53, sizeOf:sizeOf_54, text:text_56, asText:asText, plainText:plainText, centeredText:centeredText, justifiedText:justifiedText, rightedText:rightedText, image:image_57, images:images, video:video_58, fittedImage:fittedImage_59, flow:flow_60, above:above_61, below:below_62, beside:beside_63, layers:layers_64, collage:collage_65, spacer:spacer_66, container:container_67, line:line_76, segment:segment_77, polygon:polygon_79, rect:rect_80, oval:oval_81, circle:circle_82, ngon:ngon_83, solid:solid_89, dotted:dotted_90, dashed:dashed_91, customLine:customLine_92, filled:filled_93, + outlined:outlined_94, customOutline:customOutline_95, textured:textured, sprite:sprite_96, toForm:toForm_97, rotate:rotate_98, scale:scale_99, move:move_100,+ isWithin: Collage.insideForm}+}(); +Elm.Text = function() { + function fromString(s) { return Value.toText(s); } + + var addTag = function(tag) { return function(text) { + return '<' + tag + ' style="padding:0;margin:0">' + text + '</' + tag + '>'; + }; + }; + var addStyle = function(style, value) { return function(text) { + return "<span style='" + style + ":" + value + "'>" + text + "</span>"; + }; + }; + + var typeface = function(name) { + name = Elm.JavaScript.castStringToJSString(name); + return addStyle('font-family', name); + }; + var size = function(px) { + return addStyle('font-size', px + 'px'); + }; + var header = addTag('h1'); + var height = function(h) { return addStyle('font-size', h+'em'); } + var italic = addStyle('font-style', 'italic'); + var bold = addTag('b'); + var color = function(c) { + return addStyle('color', Elm.Color.extract(c)); + }; + var underline = addStyle('text-decoration', 'underline'); + var overline = addStyle('text-decoration', 'overline'); + var strikeThrough = addStyle('text-decoration', 'line-through'); + var link = function(href) { return function(text) { + return "<a href='" + fromString(href) + "'>" + text + "</a>"; + }; + }; + + return {fromString : fromString, + toText: fromString, + header : header, + height : height, + italic : italic, + bold : bold, + underline : underline, + overline : overline, + strikeThrough : strikeThrough, + monospace : typeface('monospace'), + typeface : typeface, + color : color, + link : link }; +}(); + +var Render = function(){ + +function newElement(elementType) { + var e = document.createElement(elementType); + e.style.padding = "0"; + e.style.margin = "0"; + return e; +}; + +function addTo(container, elem) { + container.appendChild(elem); +}; + +function makeText(pos,txt) { + var e = newElement('div'); + e.innerHTML = txt; + e.style.textAlign = pos; + return e; +}; + +function image(src) { + var img = newElement('img'); + img.src = src; + img.name = src; + img.style.display = "block"; + return img; +} + +function fittedImage(w,h,src) { + var e = newElement('div'); + e.style.width = w + 'px'; + e.style.height = h + 'px'; + e.style.position = "relative"; + e.style.overflow = "hidden"; + + var img = newElement('img'); + img.onload = function() { + img.style.position = 'absolute'; + img.style.margin = 'auto'; + + var sw = w, sh = h; + if (w / h > this.width / this.height) { + sh = Math.round(this.height * w / this.width); + } else { + sw = Math.round(this.width * h / this.height); + } + img.style.width = sw + 'px'; + img.style.height = sh + 'px'; + img.style.left = ((w - sw) / 2) + 'px'; + img.style.top = ((h - sh) / 2) + 'px'; + }; + img.src = src; + img.name = src; + addTo(e,img); + return e; +}; + +var video = function(src) { + var e = newElement('video'); + e.controls = "controls"; + var source = newElement('source'); + source.src = src; + var segs = src.split('.'); + source.type = "video/" + segs[segs.length-1]; + addTo(e, source); + e.style.display = "block"; + return e; +}; + +function divify(e) { + var div = newElement('div'); + addTo(div, e); + return div; +}; +function goDown(e) { + return e //.tagName === "DIV" ? e : divify(e); +}; +function goRight(e) { + e.style.styleFloat = "left"; + e.style.cssFloat = "left"; + return e; +}; +function goIn(e) { + e.style.position = 'absolute'; + return e; +}; +function flowWith(f, prep, elist) { + var container = newElement('div'); + for (var i = elist.length; i--; ) { + addTo(container, f(prep(elist[i]))); + } + return container; +}; + +function flow(dir,elist) { + switch(dir) { + case "DDown": elist = elist.slice(0).reverse(); + case "DUp": return flowWith(goDown,render,elist); + case "DRight": elist = elist.slice(0).reverse(); + case "DLeft": return flowWith(goRight,render,elist); + case "DOut": elist = elist.slice(0).reverse(); + case "DIn": return flowWith(goIn,render,elist); + }; +}; + +function toPos(pos) { + switch(pos[0]) { + case "Absolute": return pos[1] + "px"; + case "Relative": return (pos[1] * 100) + "%"; + } +} + +function setPos(pos,e) { + e.style.position = 'absolute'; + e.style.margin = 'auto'; + switch(pos[0]) { + case "Position": + if (pos[1][0] !== "Far") e.style.left = 0; + if (pos[1][0] !== "Near") e.style.right = 0; + if (pos[2][0] !== "Far") e.style.top = 0; + if (pos[2][0] !== "Near") e.style.bottom = 0; + break; + case "PositionAt": + e.style.top = toPos(pos[2]); + e.style.left = toPos(pos[1]); + var shift = "translate(" + ~~(-e.style.width.slice(0,-2) / 2) + "px," + ~~(-e.style.height.slice(0,-2) / 2) + "px)"; + e.style.transform = shift; + e.style.msTransform = shift; + e.style.MozTransform = shift; + e.style.webkitTransform = shift; + e.style.OTransform = shift; + break; + default: + var p = pos[0].slice(-2); + e.style[p[0] === "T" ? 'top' : 'bottom'] = toPos(pos[2]); + e.style[p[1] === "L" ? 'left' : 'right'] = toPos(pos[1]); + } +} + +function container(pos,elem) { + var e = render(elem); + setPos(pos,e); + var div = newElement('div'); + div.style.position = "relative"; + div.style.overflow = "hidden"; + addTo(div,e); + return div; +}; + +function render(elem) { + var e = {}; + switch(elem[2][0]) { + case "EText": e = makeText(elem[2][1],elem[2][2]); break; + case "EImage": e = image(elem[2][1]); break; + case "EVideo": e = video(elem[2][1]); break; + case "EFittedImage": e = fittedImage(elem[3],elem[4],elem[2][1]); break; + case "EFlow": e = flow(elem[2][1][0],elem[2][2]); break; + case "ECollage": e = Collage.collage(elem[2][1],elem[2][2],elem[2][3]); break; + case "EEmpty": e = newElement('div'); break; + case "EContainer": e = container(elem[2][1],elem[2][2]); break; + case "EHtml": + e = elem[2][1]; + if (e.type !== 'button') { + var p = Value.getExcess(e); + elem[3] -= p[0]; + elem[4] -= p[1]; + } + break; + case "EExternalHtml": + e = newElement('div'); + addTo(e, elem[2][1]); + break; + } + e.id = elem[1]; + e.style.width = (~~elem[3]) + 'px'; + e.style.height = (~~elem[4]) + 'px'; + if (elem[5] !== 1) { e.style.opacity = elem[5]; } + if (elem[6][0] === "Just") { + e.style.backgroundColor = Elm.Color.extract(elem[6][1]); + } + if (elem[7][0] === "Just") { + var a = newElement('a'); + a.href = elem[7][1]; + addTo(a,e); + return a; + } + return e; +}; + +function update(node,curr,next) { + if (node.tagName === 'A') { node = node.firstChild; } + if (curr[1] === next[1]) return; + if (curr[2][0] !== next[2][0]) { + return node.parentNode.replaceChild(render(next),node); + } + var nextE = next[2], currE = curr[2]; + switch(nextE[0]) { + case "EText": + if (nextE[1] !== currE[1]) node.style.textAlign = nextE[1]; + if (nextE[2] !== currE[2]) node.innerHTML = nextE[2]; + break; + case "EImage": + if (nextE[1] !== currE[1]) node.src = nextE[1]; + break; + case "EVideo": + case "EFittedImage": + if (!Value.eq(nextE,currE) || next[3]!==curr[3] || next[4]!==curr[4]) { + return node.parentNode.replaceChild(render(next),node); + } + break; + case "ECollage": + if (nextE[1] !== currE[1] || nextE[2] !== currE[2] || nextE[3].length !== currE[3].length) { + return node.parentNode.replaceChild(render(next),node); + } + Collage.updateCollage(node,currE[3],nextE[3]); + break; + case "EFlow": + if (nextE[1] !== currE[1]) { + return node.parentNode.replaceChild(render(next),node); + } + var nexts = nextE[2]; + var kids = node.childNodes; + if (nexts.length !== kids.length) { + return node.parentNode.replaceChild(render(next),node); + } + var currs = currE[2]; + var goDir = function(x) { return x; }; + switch(nextE[1][0]) { + case "DDown": case "DUp": goDir = goDown; break; + case "DRight": case "DLeft": goDir = goRight; break; + case "DOut": case "DIn": goDir = goIn; break; + } + for (var i = kids.length; i-- ;) { + update(kids[i],currs[i],nexts[i]); + goDir(kids[i]); + } + break; + case "EContainer": + update(node.childNodes[0],currE[2],nextE[2]); + setPos(nextE[1],node.childNodes[0]); + break; + case "EEmpty": + break; + case "EHtml": + if (next[1] !== curr[1]) { + var e = render(next); + node.parentNode.replaceChild(e,node); + node = e; + } + if (e.type !== 'button') { + var p = Value.getExcess(node); + next[3] -= p[0]; + next[4] -= p[1]; + } + break; + case "EExternalHtml": + if (next[1] !== curr[1]) + node.parentNode.replaceChild(render(next),node); + break; + } + if (next[3] !== curr[3]) node.style.width = (~~next[3]) + 'px'; + if (next[4] !== curr[4]) node.style.height = (~~next[4]) + 'px'; + if (next[5] !== curr[5]) node.style.opacity = next[5]; + if (next[6].length === 2) { + var clr = Elm.Color.extract(next[6][1]); + if (clr !== node.style.backgroundColor) node.style.backgroundColor = clr; + } + if (next[7].length === 2) { + if (curr[7].length === 1 || next[7][1] !== curr[7][1]) node.parentNode.href = next[7][1]; + } + next[1] = curr[1]; +} + +return {render:render,update:update,addTo:addTo,newElement:newElement,flowWith:flowWith,goIn:goIn}; + +}(); +Elm.Signal = function() {+ var send = function(node, timestep, changed) {+ var kids = node.kids;+ for (var i = kids.length; i--; ) {+ kids[i].recv(timestep, changed, node.id);+ }+ };+ /**+ * @constructor+ */+ function input(base) {+ this.id = Guid.guid();+ this.value = base;+ this.kids = [];+ this.defaultNumberOfKids = 0;+ this.recv = function(timestep, eid, v) {+ var changed = eid === this.id;+ if (changed) { this.value = v; }+ send(this, timestep, changed);+ return changed;+ };+ Dispatcher.inputs.push(this);+ };+ /**+ * @constructor+ */+ function lift(func,args) {+ this.id = Guid.guid();+ this.value = null;+ this.kids = [];+ this.count = 0;+ this.changed = false;+ + args.reverse();+ this.recalc = function() {+ var f = func;+ for (var i = args.length; i--; ) {+ f = f(args[i].value);+ }+ this.value = f;+ };+ this.recalc();+ + this.recv = function(timestep, changed, parentID) {+ this.count += 1;+ if (changed) { this.changed = true; }+ if (this.count == args.length) {+ if (this.changed) { this.recalc() }+ send(this, timestep, this.changed);+ this.changed = false;+ this.count = 0;+ }+ };+ for (var i = args.length; i--; ) {+ args[i].kids.push(this);+ }+ };+ /**+ * @constructor+ */+ function fold(func,base,baseIsFunc,input) {+ this.id = Guid.guid();+ this.value = baseIsFunc ? base(input.value) : base;+ this.kids = [];+ this.recv = function(timestep, changed, parentID) {+ if (changed) { this.value = func(input.value)(this.value); }+ send(this, timestep, changed);+ };+ input.kids.push(this);+ };++ /**+ * @constructor+ */+ function dropIf(pred,base,input) {+ this.id = Guid.guid();+ this.value = pred(input.value) ? base : input.value;+ this.kids = [];+ this.recv = function(timestep, changed, parentID) {+ var chng = changed && !pred(input.value);+ if (chng) { this.value = input.value; }+ send(this, timestep, chng);+ };+ input.kids.push(this);+ };++ /**+ * @constructor+ */+ function dropRepeats(input) {+ this.id = Guid.guid();+ this.value = input.value;+ this.kids = [];+ this.recv = function(timestep, changed, parentID) {+ var chng = changed && !Value.eq(this.value,input.value);+ if (chng) { this.value = input.value; }+ send(this, timestep, chng);+ };+ input.kids.push(this);+ };+ + var dropWhen = function(s1) { return function(b) { return function(s2) {+ var pairs = new lift(function(x){return function(y){return [x,y];};},[s1,s2]);+ var dropped = new dropIf(function(p){return p[0];},[true,b],pairs);+ return new lift(function(p){return p[1];},[dropped]); }; };+ };++ /**+ * @constructor+ */+ function timeIndex(pair,s) {+ this.id = Guid.guid();+ var t = (new window.Date).getTime();+ this.value = pair ? Value.Tuple(t,s.value) : t;+ this.kids = [];+ this.recv = function(timestep, changed, parentID) {+ if (changed) this.value = pair ? Value.Tuple(timestep, s.value) : timestep;+ send(this, timestep, changed);+ };+ s.kids.push(this);+ }++ /**+ * @constructor+ */+ function sampleOn(s1,s2) {+ this.id = Guid.guid();+ this.value = s2.value;+ this.kids = [];+ this.count = 0;+ this.changed = false;+ + this.recv = function(timestep, changed, parentID) {+ if (parentID === s1.id) this.changed = changed;+ this.count += 1;+ if (this.count == 2) {+ if (this.changed) { this.value = s2.value; }+ send(this, timestep, this.changed);+ this.count = 0;+ this.changed = false;+ }+ };+ s1.kids.push(this);+ s2.kids.push(this);+ };++ function delay(t) { return function(s) {+ var delayed = new input(s.value);+ var firstEvent = true;+ function update(v) {+ if (firstEvent) return;+ setTimeout(function() { Dispatcher.notify(delayed.id,v); },t);+ }+ function first(a) { return function(b) { return a; }; }+ var out = new sampleOn(delayed,new lift(first, [delayed, new lift(update,[s])]));+ firstEvent = false;+ return out;+ };+ }+ + /**+ * @constructor+ */+ function merge(s1,s2) {+ this.id = Guid.guid();+ this.value = s1.value;+ this.kids = [];+ this.next = null;+ this.count = 0;+ this.changed = false;+ + this.recv = function(timestep, changed, parentID) {+ this.count += 1;+ if (changed) {+ this.changed = true;+ if (parentID == s2.id && this.next === null) { this.next = s2.value; }+ if (parentID == s1.id) { this.next = s1.value; }+ }++ if (this.count == 2) {+ if (this.changed) {+ this.value = this.next;+ this.next = null;+ }+ send(this, timestep, this.changed);+ this.changed = false;+ this.count = 0;+ }+ };+ s1.kids.push(this);+ s2.kids.push(this);+ };++ function merges(ss) {+ function mrg(x) { return function(y) { return new merge(x,y); }; }+ return Elm.List.foldl1(mrg)(ss);+ }++ function mergeEither(s1) { return function(s2) {+ function f(s) { return function(x) { return [s,x]; }; }+ return new merge(new lift(f('Left'),[s1]), new lift(f('Right'),[s2]));+ };+ }++ function average(sampleSize) { return function(s) {+ var sample = new Array(sampleSize);+ var i = sampleSize;+ while (i--) sample[i] = 0;+ i = 0;+ var full = false;+ var total = 0;+ function f(n) {+ total += n - sample[i];+ sample[i] = n;+ var avg = total / Math.max(1, full ? sampleSize : i);+ if (++i == sampleSize) { full = true; i = 0; }+ return avg;+ }+ return new lift(f, [s]);+ };+ }++ return {+ constant : function(v) { return new input(v); },+ lift : function(f){return function(e){return new lift(f,[e]);};},+ lift2 : function(f) {+ return function(e1) { return function(e2) {+ return new lift(f, [e1,e2]); };};},+ lift3 : function(f) {+ return function(e1) { return function(e2) {+ return function(e3){return new lift(f,[e1,e2,e3]);};};};},+ lift4 : function(f) {+ return function(e1) { return function(e2) {+ return function(e3) { return function(e4) {+ return new lift(f, [e1,e2,e3,e4]);};};};};},+ lift5 : function(f) {+ return function(e1) { return function(e2) {+ return function(e3) { return function(e4) {+ return function(e5) {+ return new lift(f, [e1,e2,e3,e4,e5]);};};};};};},+ lift6 : function(f) { return function(e1) { return function(e2) {+ return function(e3) { return function(e4) {+ return function(e5) { return function(e6) {+ return new lift(f, [e1,e2,e3,e4,e5,e6]); };};};};};};},+ lift7 : function(f) { return function(e1) { return function(e2) {+ return function(e3) { return function(e4) {+ return function(e5) { return function(e6) {+ return function(e7) {+ return new lift(f, [e1,e2,e3,e4,e5,e6,e7]);};};};};};};};},+ lift8 : function(f) { return function(e1) { return function(e2) {+ return function(e3) { return function(e4) {+ return function(e5) { return function(e6) {+ return function(e7) { return function(e8) {+ return new lift(f, [e1,e2,e3,e4,e5,e6,e7,e8]);};};};};};};};};},+ foldp : function(f) { return function(b) { return function(e) {+ return new fold(f,b,false,e); }; }; },+ foldp$ : function(f) { return function(b) { return function(e) {+ return new fold(f,b,true,e); }; }; },+ foldp1 : function(f) { return function(e) {+ return new fold(f,function(x){return x;},true,e); }; },+ delay : delay,+ merge : function(s1) { return function(s2) { return new merge(s1,s2)}; },+ merges : merges,+ mergeEither : mergeEither,+ average : average,+ count : function(sig) {+ var incr = function(_){return function(c){return c+1;};};+ return new fold(incr,0,false,sig) },+ countIf : function(pred) { return function(sig) {+ var incr = function(x){return function(c){return pred(x) ? c+1 : c;};};+ return new fold(incr,0,false,sig) }; },+ keepIf : function(pred) { return function(base) { return function(sig) {+ return new dropIf(function(x) { return !pred(x)},base,sig); }; }; },+ dropIf : function(pred) { return function(base) { return function(sig) {+ return new dropIf(pred,base,sig); }; }; },+ keepWhen : function(s) { return dropWhen(new lift(function(b){return !b;},[s])); },+ dropWhen : dropWhen,+ dropRepeats : function(s) { return new dropRepeats(s);},+ sampleOn : function(s1){return function(s2){return new sampleOn(s1,s2);};},+ timestamp : function(s) { return new timeIndex(true, s); },+ timeOf : function(s) { return new timeIndex(false, s); }+ };+}();+var Dispatcher = function() {+ var program = null;+ var inputs = [];+ var currentElement = null;++ var initialize = function() {+ program = Elm.main();+ if (!program.hasOwnProperty('recv')) {+ program = Elm.Signal.constant(program);+ }++ currentElement = program.value;+ filterDeadInputs();++ var content = document.getElementById('content');+ content.appendChild(Render.render(currentElement));+ var w = document.getElementById('widthChecker').offsetWidth;+ if (w !== window.innerWidth) {+ Dispatcher.notify(Elm.Window.dimensions.id, Value.Tuple(w, window.innerHeight));+ }+ program = Elm.Signal.lift(function(value) {+ var content = document.getElementById('content');+ Render.update(content.firstChild,currentElement,value);+ currentElement = value;+ return value;+ })(program);+ };+ var notify = function(id, v) {+ var timestep = (new window.Date).getTime();+ var hasListener = false;+ for (var i = inputs.length; i--; ) {+ hasListener = inputs[i].recv(timestep, id, v) || hasListener;+ }+ return hasListener;+ };++ function isAlive(input) {+ if (!input.hasOwnProperty('defaultNumberOfKids')) return true;+ var len = input.kids.length;+ if (len == 0) return false;+ if (len > input.defaultNumberOfKids) return true;+ var alive = false;+ for (var i = len; i--; ) {+ alive = alive || isAlive(input.kids[i]);+ }+ return alive;+ }+ function filterDeadInputs() {+ var temp = [];+ for (var i = inputs.length; i--; ) {+ if (isAlive(inputs[i])) temp.push(inputs[i]);+ }+ inputs = temp;+ }++ return {initialize:initialize, notify:notify, inputs:inputs};+}();Elm.HTTP = function() { + var JS = Elm.JavaScript; + var toElmString = Elm.JavaScript.castJSStringToString; + function request(verb) { return function(url) { return function(data) { + return function(headers) { + return {0 : "Request", + length : 1, + verb : JS.castStringToJSString(verb), + url : JS.castStringToJSString(url), + data : data === null ? null : JS.castStringToJSString(data), + headers : headers }; }; }; }; + } + function get(url) { return request("GET")(url)(null)(["Nil"]); } + function post(url) { return function(data) { + return request("POST")(url)(data)(["Nil"]); }; } + + function registerReq(queue,responses) { return function(req) { + if (req.url !== "") { sendReq(queue,responses,req); } + }; + } + + function updateQueue(queue,responses) { + if (queue.length > 0) { + Dispatcher.notify(responses.id, queue[0].value); + if (queue[0].value[0] !== "Waiting") { + queue.shift(); + setTimeout(function() { updateQueue(queue,responses); }, 0); + } + } + } + + function sendReq(queue,responses,req) { + var response = { value: ["Waiting"] }; + queue.push(response); + + var request = null; + if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); } + if (window.XMLHttpRequest) { request = new XMLHttpRequest(); } + request.onreadystatechange = function(e) { + if (request.readyState === 4) { + response.value = (request.status === 200 + ? ["Success", toElmString(request.responseText)] + : ["Failure", request.status, + toElmString(request.statusText)]); + setTimeout(function() { updateQueue(queue,responses); }, 0); + } + }; + request.open(req.verb, req.url, true); + Elm.List.map(function(pair) { + request.setRequestHeader( + JS.castStringToJSString(pair[1]), + JS.castStringToJSString(pair[2])); + })(req.headers); + request.send(req.data); + return null; + } + + function send(requests) { + var responses = Elm.Signal.constant(["Waiting"]); + var sender = Elm.Signal.lift(registerReq([],responses))(requests); + function f(x) { return function(y) { return x; } } + var combine = Elm.Signal.lift2(f)(responses)(sender); + return combine; + } + + return {get : get, + post : post, + request : request, + send : send, + sendGet : function(urls){return send(Elm.Signal.lift(get)(urls));} + }; +}(); + +Elm.Input = function() { + var JS = Elm.JavaScript; + var toElmString = Elm.JavaScript.castJSStringToString; + var newTextInput = function(elem, ghostText) { + elem.placeholder = JS.castStringToJSString(ghostText); + var str = Elm.Signal.constant(["Nil"]); + Value.addListener(elem, 'keyup', function(e) { + Dispatcher.notify(str.id, toElmString(elem.value)); + elem.focus(); + }); + elem.style.padding = "1px"; + return Value.Tuple(Value.wrap(elem), str); + }; + var newElement = function(name) { + var e = document.createElement(name); + e.style.padding = "0"; + e.style.margin = "0"; + return e; + }; + var textArea = function(cols) { return function(rows) { + var textarea = newElement('textarea'); + textarea.rows = rows; + textarea.cols = cols; + return newTextInput(textarea, ""); + }; + }; + var textField = function(ghostText) { + var field = newElement('input'); + field.type = 'text'; + return newTextInput(field, ghostText); + }; + var password = function(ghostText) { + var field = newElement('input'); + field.type = 'password'; + return newTextInput(field, ghostText); + }; + var checkbox = function(checked) { + var box = newElement('input'); + box.type = 'checkbox'; + box.checked = checked; + var status = Elm.Signal.constant(checked); + Value.addListener(box, 'change', function(e) { + Dispatcher.notify(status.id, box.checked); + }); + return Value.Tuple(Value.wrap(box), status); + }; + var dropDown = function(options) { + var slct = newElement('select'); + var opts = []; + while (options[0] === "Cons") { + var opt = newElement('option'); + var str = Value.toText(options[1][1]); + opt.value = str; + opt.innerHTML = str; + slct.appendChild(opt); + opts.push(options[1][2]); + options = options[2]; + } + var status = Elm.Signal.constant(opts[0]); + Value.addListener(slct, 'change', function(e) { + Dispatcher.notify(status.id, opts[slct.selectedIndex]); + }); + return Value.Tuple(Value.wrap(slct), status); + }; + var stringDropDown = function(opts) { + return dropDown(Elm.List.map (function(x) {return Value.Tuple(x,x);}) (opts)); + }; + var button = function(name) { + var b = newElement('input'); + b.type = "button"; + b.value = JS.castStringToJSString(name); + var press = Elm.Signal.constant(false); + Value.addListener(b, 'click', function(e) { + Dispatcher.notify(press.id, true); + Dispatcher.notify(press.id, false); + }); + return Value.Tuple(Value.wrap(b),press); + }; + return {textArea:textArea, textField:textField, + password:password, checkbox:checkbox, + dropDown:dropDown, stringDropDown:stringDropDown, + button:button}; +}(); + +Elm.Keyboard = { Raw : function() { + var keysDown = Elm.Signal.constant(["Nil"]); + var charPressed = Elm.Signal.constant(["Nothing"]); + + function remove(x,xs) { + if (xs[0] === "Nil") return xs; + if (xs[1] === x) return xs[2]; + return ["Cons", xs[1], remove(x,xs[2])]; + } + function has(x,xs) { + while (xs[0] !== "Nil") { + if (xs[1] === x) return true; + xs = xs[2]; + } + return false; + } + Value.addListener(document, 'keydown', function(e) { + if (has(e.keyCode, keysDown.value)) return; + var hasListener = Dispatcher.notify(keysDown.id, ["Cons", e.keyCode, keysDown.value]); + if (!hasListener) + this.removeEventListener('keydown',arguments.callee,false); + }); + Value.addListener(document, 'keyup', function(e) { + var codes = remove(e.keyCode, keysDown.value); + var hasListener = Dispatcher.notify(keysDown.id, codes); + if (!hasListener) + this.removeEventListener('keyup',arguments.callee,false); + }); + Value.addListener(window, 'blur', function(e) { + var hasListener = Dispatcher.notify(keysDown.id, ["Nil"]); + if (!hasListener) + this.removeEventListener('blur',arguments.callee,false); + }); + Value.addListener(document, 'keypress', function(e) { + var hasListener = Dispatcher.notify(charPressed.id, ["Just",e.charCode || e.keyCode]); + Dispatcher.notify(charPressed.id, ["Nothing"]); + if (!hasListener) + this.removeEventListener('keypress',arguments.callee,false); + }); + return {keysDown:keysDown, + charPressed:charPressed}; + }() +}; + +(function() { + function keySignal(f) { + var signal = Elm.Signal.lift(f)(Elm.Keyboard.Raw.keysDown); + Elm.Keyboard.Raw.keysDown.defaultNumberOfKids += 1; + signal.defaultNumberOfKids = 0; + return signal; + } + + function dir(left,right,up,down) { + function f(ks) { + var x = 0, y = 0; + while (ks[0] == "Cons") { + switch (ks[1]) { + case left : --x; break; + case right: ++x; break; + case up : ++y; break; + case down : --y; break; + } + ks = ks[2]; + } + return { _:[true], x:[x], y:[y] }; + } + return keySignal(f); + } + + function is(key) { + function f(ks) { + while (ks[0] == "Cons") { + if (key == ks[1]) return true; + ks = ks[2]; + } + return false; + } + return keySignal(f); + } + + Elm.Keyboard.arrows = dir(37,39,38,40); + Elm.Keyboard.wasd = dir(65,68,87,83); + Elm.Keyboard.shift = is(16); + Elm.Keyboard.ctrl = is(17); + Elm.Keyboard.space = is(32); + +}()); ++Elm.Mouse = function() {+ var position = Elm.Signal.constant(Value.Tuple(0,0));+ position.defaultNumberOfKids = 2;++ var x = Elm.Signal.lift(function(p){return p[1];})(position);+ x.defaultNumberOfKids = 0;+ var y = Elm.Signal.lift(function(p){return p[2];})(position);+ y.defaultNumberOfKids = 0;++ var isDown = Elm.Signal.constant(false);+ var isClicked = Elm.Signal.constant(false);+ var clicks = Elm.Signal.constant(Value.Tuple());+ + function getXY(e) {+ var posx = 0;+ var posy = 0;+ if (!e) e = window.event;+ if (e.pageX || e.pageY) {+ posx = e.pageX;+ posy = e.pageY;+ } else if (e.clientX || e.clientY) {+ posx = e.clientX + document.body.scrollLeft ++ document.documentElement.scrollLeft;+ posy = e.clientY + document.body.scrollTop ++ document.documentElement.scrollTop;+ }+ return Value.Tuple(posx, posy);+ }++ Value.addListener(document, 'click', function(e) {+ var hasListener1 = Dispatcher.notify(isClicked.id, true);+ var hasListener2 = Dispatcher.notify(clicks.id, Value.Tuple());+ Dispatcher.notify(isClicked.id, false);+ if (!hasListener1 && !hasListener2)+ this.removeEventListener('click',arguments.callee,false);+ });+ Value.addListener(document, 'mousedown', function(e) {+ var hasListener = Dispatcher.notify(isDown.id, true);+ if (!hasListener)+ this.removeEventListener('mousedown',arguments.callee,false);+ });+ Value.addListener(document, 'mouseup', function(e) {+ var hasListener = Dispatcher.notify(isDown.id, false);+ if (!hasListener)+ this.removeEventListener('mouseup',arguments.callee,false);+ });+ Value.addListener(document, 'mousemove', function(e) {+ var hasListener = Dispatcher.notify(position.id, getXY(e));+ if (!hasListener)+ this.removeEventListener('mousemove',arguments.callee,false);+ });+ var clickedOn = function(elem) {+ var node = Render.render(elem);+ var click = Elm.Signal.constant(false);+ Value.addListener(node, 'click', function(e) {+ Dispatcher.notify(click.id, true);+ Dispatcher.notify(click.id, false);+ });+ return Value.Tuple(Value.wrap(node), click);+ };+ return {position: position,+ x:x,+ y:y,+ isClicked: isClicked,+ isDown: isDown,+ clicks: clicks,+ isClickedOn: clickedOn+ };+ }(); +Elm.Random = function() { + var inRange = function(min) { return function(max) { + return Elm.Signal.constant(Math.floor(Math.random() * (max-min+1)) + min); + }; + }; + var randomize = function(min) { return function(max) { return function(signal) { + function f(x) { return Math.floor(Math.random() * (max-min+1)) + min; } + return Elm.Signal.lift(f)(signal); + }; + }; + }; + return { inRange:inRange, randomize:randomize }; +}();Elm.Time = function() { + function timeNow() { return (new window.Date).getTime(); } + function everyWhen(isOn) { return function(t) { + var clock = Elm.Signal.constant(timeNow()); + function tellTime() { Dispatcher.notify(clock.id, timeNow()); } + setInterval(tellTime, t); + return clock; + }; + } + function fpsWhen(desiredFPS) { return function (isOn) { + var msPerFrame = 1000 / desiredFPS; + var prev = timeNow(), curr = prev, diff = 0, wasOn = true; + var ticker = Elm.Signal.constant(diff); + function tick(zero) { return function() { + curr = timeNow(); + diff = zero ? 0 : curr - prev; + prev = curr; + Dispatcher.notify(ticker.id, diff); + }; + } + var timeoutID = 0; + function f(isOn) { return function(t) { + if (isOn) { + timeoutID = setTimeout(tick(!wasOn && isOn), msPerFrame); + } else if (wasOn) { + clearTimeout(timeoutID); + } + wasOn = isOn; + return t; + }; + } + return Elm.Signal.lift2(f)(isOn)(ticker); + }; + } + function since(t) { return function(s) { + function cmp(a) { return function(b) { return !Value.eq(a,b); }; } + var dcount = Elm.Signal.count(Elm.Signal.delay(t)(s)); + return Elm.Signal.lift2(cmp)(Elm.Signal.count(s))(dcount); + }; + } + function after(t) { + t *= 1000; + var thread = Elm.Signal.constant(false); + setTimeout(function() { Dispatcher.notify(thread.id, true); }, t); + return thread; + } + function before(t) { + t *= 1000; + var thread = Elm.Signal.constant(true); + setTimeout(function() { Dispatcher.notify(thread.id, false); }, t); + return thread; + } + function read(s) { + var t = window.Date.parse(s); + return isNaN(t) ? ["Nothing"] : ["Just",t]; + } + return {fpsWhen : fpsWhen, + fps : function(t) { return fpsWhen(t)(Elm.Signal.constant(true)); }, + every : everyWhen(Elm.Signal.constant(true)), + delay : Elm.Signal.delay, + since : since, + after : after, + before : before, + hour : 3600000, + minute : 60000, + second : 1000, + ms : 1, + inHours : function(t) { return t / 3600000; }, + inMinutes : function(t) { return t / 60000; }, + inSeconds : function(t) { return t / 1000; }, + inMss : function(t) { return t; }, + toDate : function(t) { return new window.Date(t); }, + read : read + }; + +}();Elm.Window = function() { + var dimensions = Elm.Signal.constant(Value.Tuple(window.innerWidth, + window.innerHeight)); + dimensions.defaultNumberOfKids = 2; + + var width = Elm.Signal.lift(function(p){return p[1];})(dimensions); + width.defaultNumberOfKids = 0; + var height = Elm.Signal.lift(function(p){return p[2];})(dimensions); + height.defaultNumberOfKids = 0; + + Value.addListener(window, 'resize', function(e) { + var w = document.getElementById('widthChecker').offsetWidth; + var hasListener = Dispatcher.notify(dimensions.id, + Value.Tuple(w, window.innerHeight)); + if (!hasListener) + this.removeEventListener('resize',arguments.callee,false); + }); + return {dimensions:dimensions,width:width,height:height}; +}(); + +Elm.Date = function() { + + function dateNow() { return new window.Date; } + function readDate(str) { + var d = new window.Date(Elm.JavaScript.castStringToJSString(str)); + if (isNaN(d.getTime())) return ["Nothing"]; + return ["Just",d]; + } + + var dayTable = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; + var monthTable = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + + return { + read : readDate, + year : function(d) { return d.getFullYear(); }, + month : function(d) { return [monthTable[d.getMonth()]]; }, + day : function(d) { return d.getDate(); }, + hour : function(d) { return d.getHours(); }, + minute : function(d) { return d.getMinutes(); }, + second : function(d) { return d.getSeconds(); }, + dayOfWeek : function(d) { return [dayTable[d.getDay()]]; }, + toTime : function(d) { return d.getTime(); }, + Mon : ["Mon"], Tue : ["Tue"], Wed : ["Wed"], + Thu : ["Thu"], Fri : ["Fri"], Sat : ["Sat"], Sun : ["Sun"], + Jan : ["Jan"], Feb : ["Feb"], Mar : ["Mar"], Apr : ["Apr"], + May : ["May"], Jun : ["Jun"], Jul : ["Jul"], Aug : ["Aug"], + Sep : ["Sep"], Oct : ["Oct"], Nov : ["Nov"], Dec : ["Dec"] + }; + +}(); ++Value.addListener(document, 'elm_log', function(e) { console.log(e.value); });+Value.addListener(document, 'elm_title', function(e) {document.title = e.value;});+Value.addListener(document, 'elm_redirect', function(e) {+ if (e.value.length > 0) { window.location = e.value; }+ });+Value.addListener(document, 'elm_viewport', function(e) {+ var node = document.getElementById('elm_viewport');+ if (!node) {+ node = document.createElement('meta');+ node.id = 'elm_viewport';+ node.name = 'viewport';+ document.head.appendChild(node);+ }+ node.content = e.value;+ Dispatcher.notify(Elm.Window.dimensions.id,+ Value.Tuple(window.innerWidth, window.innerHeight));+ });++Elm.Prelude = function() {+ var mod = function(x) { return function(y) {+ var r = x % y;+ var m = x==0 ? 0 : (y>0 ? (x>=0 ? r : r+y) : -mod(-x)(-y));+ return m == y ? 0 : m;+ }; };++ var min = function(x) { return function(y) { return Math.min(x,y); }; };+ var max = function(x) { return function(y) { return Math.max(x,y); }; };+ + var flip=function(f){return function(x){return function(y){return f(y)(x);};};};+ var clamp = function(lo) { return function(hi) {+ return function(x) { return Math.min(hi, Math.max(lo, x)); }; + };+ };+ var curry = function(f) { return function(x) { return function(y) {+ return f(["Tuple2",x,y]); }; };+ };+ var uncurry = function(f) { return function(p) {+ if (p[0] !== "Tuple2") {+ throw "Function was uncurry'd but was not given a pair.";+ }+ return f(p[1])(p[2]); };+ };++ var logBase=function(b){return function(x){return Math.log(x)/Math.log(b);};};++ function readInt(str) {+ var s = Elm.JavaScript.castStringToJSString(str);+ var len = s.length;+ if (len === 0) { return ["Nothing"]; }+ var start = 0;+ if (s[0] == '-') {+ if (len === 1) { return ["Nothing"]; }+ start = 1;+ }+ for (var i = start; i < len; ++i) {+ if (!Elm.Char.isDigit(s[i])) { return ["Nothing"]; }+ }+ return ["Just", parseInt(s)];+ }++ function readFloat(str) {+ var s = Elm.JavaScript.castStringToJSString(str);+ var len = s.length;+ if (len === 0) { return ["Nothing"]; }+ var start = 0;+ if (s[0] == '-') {+ if (len === 1) { return ["Nothing"]; }+ start = 1;+ }+ var dotCount = 0;+ for (var i = start; i < len; ++i) {+ if (Elm.Char.isDigit(s[i])) { continue; }+ if (s[i] === '.') {+ dotCount += 1;+ if (dotCount <= 1) { continue; }+ }+ return ["Nothing"];+ }+ return ["Just", parseFloat(s)];+ }++ function compare(x) { return function (y) {+ if (x instanceof Array && y instanceof Array) {+ var len = x.length;+ if (len == y.length) {+ for (var i = 1; i < len; ++i) {+ var cmp = compare(x[i])(y[i]);+ if (cmp[0] === 'EQ') continue;+ return cmp;+ }+ return ['EQ'];+ }+ return [ y.length == 1 ? 'GT' : 'LT' ];+ }+ return [ x === y ? 'EQ' : (x < y ? 'LT' : 'GT') ];+ };+ }+ return {eq : Value.eq,+ id : function(x) { return x; },+ not : function(b) { return !b; },+ xor : function(x) { return function(y) { return x != y; }; },+ fst : function(p) { return p[1]; },+ snd : function(p) { return p[2]; },+ rem : function(x) { return function(y) { return x % y; }; },+ div : function(x) { return function(y) { return ~~(x / y); }; },+ otherwise : true,+ compare : compare,+ toFloat : function(x) { return x; },+ round : function(n) { return Math.round(n); },+ floor : function(n) { return Math.floor(n); },+ ceiling : function(n) { return Math.ceil(n); },+ truncate : function(n) { return ~~n; },+ readInt : readInt,+ readFloat : readFloat,+ 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,+ atan2 : function(y) { return function(x) { return Math.atan2(y,x); }; },+ mod : mod,+ min : min,+ max : max,+ flip : flip,+ clamp : clamp,+ curry : curry,+ uncurry : uncurry,+ logBase : logBase,+ Just : Elm.Maybe.Just,+ Nothing : Elm.Maybe.Nothing,+ maybe : Elm.Maybe.maybe,+ map : Elm.List.map,+ zip : Elm.List.zip,+ zipWith : Elm.List.zipWith,+ filter : Elm.List.filter,+ head : Elm.List.head,+ tail : Elm.List.tail,+ last : Elm.List.last,+ length : Elm.List.length,+ reverse : Elm.List.reverse,+ foldr : Elm.List.foldr,+ foldr1 : Elm.List.foldr1,+ foldl : Elm.List.foldl,+ foldl1 : Elm.List.foldl1,+ and : Elm.List.and,+ or : Elm.List.or,+ all : Elm.List.all,+ any : Elm.List.any,+ sum : Elm.List.sum,+ product : Elm.List.product,+ concat : Elm.List.concat,+ concatMap : Elm.List.concatMap,+ maximum : Elm.List.maximum,+ minimum : Elm.List.minimum,+ scanl : Elm.List.scanl,+ scanl1 : Elm.List.scanl1,+ take : Elm.List.take,+ drop : Elm.List.drop,+ zip : Elm.List.zip,+ unzip : Elm.List.unzip,+ lift : Elm.Signal.lift,+ lift2 : Elm.Signal.lift2,+ lift3 : Elm.Signal.lift3,+ lift4 : Elm.Signal.lift4,+ lift5 : Elm.Signal.lift5,+ lift6 : Elm.Signal.lift6,+ lift7 : Elm.Signal.lift7,+ lift8 : Elm.Signal.lift8,+ foldp : Elm.Signal.foldp,+ foldp1 : Elm.Signal.foldp1,+ foldp$ : Elm.Signal.foldp$,+ constant : Elm.Signal.constant,+ merge : Elm.Signal.merge,+ merges : Elm.Signal.merges,+ mergeEither : Elm.Signal.mergeEither,+ count : Elm.Signal.count,+ countIf : Elm.Signal.countIf,+ average : Elm.Signal.average,+ keepIf : Elm.Signal.keepIf,+ dropIf : Elm.Signal.dropIf,+ keepWhen : Elm.Signal.keepWhen,+ dropWhen : Elm.Signal.dropWhen,+ dropRepeats : Elm.Signal.dropRepeats,+ sampleOn : Elm.Signal.sampleOn,+ timestamp : Elm.Signal.timestamp,+ timeOf : Elm.Signal.timeOf+ };++}();++(function() {+ var include = function(library) {+ for (var i in library) {+ Elm.Prelude[i] = library[i];+ }+ };+ include (Elm.Color);+ include (Elm.Text);+ include (Elm.Graphics);+ include (Elm.Time);++ show = Value.show;+ +}());++Elm.Touch = function() {++ function Dict() {+ this.keys = [];+ this.values = [];++ this.insert = function(key,value) {+ this.keys.push(key);+ this.values.push(value);+ };+ this.lookup = function(key) {+ var i = this.keys.indexOf(key)+ return i >= 0 ? this.values[i] : {x:0,y:0,t:0};+ };+ this.remove = function(key) {+ var i = this.keys.indexOf(key);+ if (i < 0) return;+ var t = this.values[i];+ this.keys.splice(i,1);+ this.values.splice(i,1);+ return t;+ };+ }++ var root = Elm.Signal.constant([]),+ tapTime = 500,+ hasTap = false,+ tap = {_:[true],x:[0],y:[0]},+ dict = new Dict();++ function touch(t) {+ var r = dict.lookup(t.identifier);+ return {_ : [true], id: [t.identifier],+ x: [t.pageX], y: [t.pageY],+ x0: [r.x], y0: [r.y],+ t0: [r.t] };+ }++ function start(e) {+ dict.insert(e.identifier,{x:e.pageX,y:e.pageY,t:Date.now()});+ }+ function end(e) {+ var t = dict.remove(e.identifier);+ if (Date.now() - t.t < tapTime) {+ hasTap = true;+ tap = {_:[true], x:[t.x], y:[t.y]};+ }+ }++ function listen(name, f) {+ function update(e) {+ for (var i = e.changedTouches.length; i--; ) { f(e.changedTouches[i]); }+ var ts = new Array(e.touches.length);+ for (var i = e.touches.length; i--; ) { ts[i] = touch(e.touches[i]); }+ var hasListener = Dispatcher.notify(root.id, ts);+ if (!hasListener) return document.removeEventListener(name, update);+ e.preventDefault();+ }+ Value.addListener(document, name, update);+ }++ listen("touchstart", start);+ listen("touchmove", function(_){});+ listen("touchend", end);+ listen("touchcancel", end);+ listen("touchleave", end);++ function dependency(f) {+ var sig = Elm.Signal.lift(f)(root);+ root.defaultNumberOfKids += 1;+ sig.defaultNumberOfKids = 0;+ return sig;+ }++ var touches = dependency(function(ts) {+ return Elm.JavaScript.castJSArrayToList(ts);+ });+ var taps = function() {+ var sig = dependency(function(_) { return tap; });+ sig.defaultNumberOfKids = 1;+ function pred(_) { var b = hasTap; hasTap = false; return b; }+ var sig2 = Elm.Signal.keepIf(pred)({_:[true],x:[0],y:[0]})(sig);+ sig2.defaultNumberOfKids = 0;+ return sig2;+ }();++ return { touches: touches, taps: taps };+}(); +Elm.Dict=function(){ + var compare = Elm.Prelude.compare; + var uncurry = Elm.Prelude.uncurry; + var Nothing = Elm.Prelude.Nothing; + var Just = Elm.Prelude.Just; + var not = Elm.Prelude.not; + var eq = Elm.Prelude.eq; + var isJust=Elm.Maybe.isJust; + var Red_0=['Red']; + var Black_1=['Black']; + function RBNode_2(a1){ + return function(a2){ + return function(a3){ + return function(a4){ + return function(a5){ + return ['RBNode',a1,a2,a3,a4,a5];};};};};} + var RBEmpty_3=['RBEmpty']; + function min_6(t_42){ + return function(){ + switch(t_42[0]){ + case 'RBEmpty': + throw '(min RBEmpty) is not defined'; + case 'RBNode': + switch(t_42[4][0]){ + case 'RBEmpty': + return ['Tuple2',t_42[2],t_42[3]]; + } + return min_6(t_42[4]); + } + throw "Non-exhaustive pattern match in case";}();} + function lookup_7(k_46){ + return function(t_47){ + return function(){ + switch(t_47[0]){ + case 'RBEmpty': + return Nothing; + case 'RBNode': + return function(){ + var case12=compare(k_46)(t_47[2]); + switch(case12[0]){ + case 'EQ': + return Just(t_47[3]); + case 'GT': + return lookup_7(k_46)(t_47[5]); + case 'LT': + return lookup_7(k_46)(t_47[4]); + } + throw "Non-exhaustive pattern match in case";}(); + } + throw "Non-exhaustive pattern match in case";}();};} + function findWithDefault_8(base_52){ + return function(k_53){ + return function(t_54){ + return function(){ + switch(t_54[0]){ + case 'RBEmpty': + return base_52; + case 'RBNode': + return function(){ + var case19=compare(k_53)(t_54[2]); + switch(case19[0]){ + case 'EQ': + return t_54[3]; + case 'GT': + return findWithDefault_8(base_52)(k_53)(t_54[5]); + case 'LT': + return findWithDefault_8(base_52)(k_53)(t_54[4]); + } + throw "Non-exhaustive pattern match in case";}(); + } + throw "Non-exhaustive pattern match in case";}();};};} + function member_9(k_59){ + return function(t_60){ + return isJust(lookup_7(k_59)(t_60));};} + function rotateLeft_10(t_61){ + return function(){ + switch(t_61[0]){ + case 'RBNode': + switch(t_61[5][0]){ + case 'RBNode': + return RBNode_2(t_61[1])(t_61[5][2])(t_61[5][3])(RBNode_2(Red_0)(t_61[2])(t_61[3])(t_61[4])(t_61[5][4]))(t_61[5][5]); + }break; + } + throw 'rotateLeft of a node without enough children';}();} + function rotateRight_11(t_71){ + return function(){ + switch(t_71[0]){ + case 'RBNode': + switch(t_71[4][0]){ + case 'RBNode': + return RBNode_2(t_71[1])(t_71[4][2])(t_71[4][3])(t_71[4][4])(RBNode_2(Red_0)(t_71[2])(t_71[3])(t_71[4][5])(t_71[5])); + }break; + } + throw 'rotateRight of a node without enough children';}();} + function rotateLeftIfNeeded_12(t_81){ + return function(){ + switch(t_81[0]){ + case 'RBNode': + switch(t_81[5][0]){ + case 'RBNode': + switch(t_81[5][1][0]){ + case 'Red': + return rotateLeft_10(t_81); + }break; + }break; + } + return t_81;}();} + function rotateRightIfNeeded_13(t_82){ + return function(){ + switch(t_82[0]){ + case 'RBNode': + switch(t_82[4][0]){ + case 'RBNode': + switch(t_82[4][1][0]){ + case 'Red': + switch(t_82[4][4][0]){ + case 'RBNode': + switch(t_82[4][4][1][0]){ + case 'Red': + return rotateRight_11(t_82); + }break; + }break; + }break; + }break; + } + return t_82;}();} + function otherColor_14(c_83){ + return function(){ + switch(c_83[0]){ + case 'Black': + return Red_0; + case 'Red': + return Black_1; + } + throw "Non-exhaustive pattern match in case";}();} + function color_flip_15(t_84){ + return function(){ + switch(t_84[0]){ + case 'RBNode': + switch(t_84[4][0]){ + case 'RBNode': + switch(t_84[5][0]){ + case 'RBNode': + return RBNode_2(otherColor_14(t_84[1]))(t_84[2])(t_84[3])(RBNode_2(otherColor_14(t_84[4][1]))(t_84[4][2])(t_84[4][3])(t_84[4][4])(t_84[4][5]))(RBNode_2(otherColor_14(t_84[5][1]))(t_84[5][2])(t_84[5][3])(t_84[5][4])(t_84[5][5])); + }break; + }break; + } + throw 'color_flip called on a RBEmpty or RBNode with a RBEmpty child';}();} + function color_flipIfNeeded_16(t_98){ + return function(){ + switch(t_98[0]){ + case 'RBNode': + switch(t_98[4][0]){ + case 'RBNode': + switch(t_98[4][1][0]){ + case 'Red': + switch(t_98[5][0]){ + case 'RBNode': + switch(t_98[5][1][0]){ + case 'Red': + return color_flip_15(t_98); + }break; + }break; + }break; + }break; + } + return t_98;}();} + function fixUp_17(t_99){ + return color_flipIfNeeded_16(rotateRightIfNeeded_13(rotateLeftIfNeeded_12(t_99)));} + function ensureBlackRoot_18(t_100){ + return function(){ + switch(t_100[0]){ + case 'RBNode': + switch(t_100[1][0]){ + case 'Red': + return RBNode_2(Black_1)(t_100[2])(t_100[3])(t_100[4])(t_100[5]); + }break; + } + return t_100;}();} + function insert_19(k_105){ + return function(v_106){ + return function(t_107){ + return function(){ + function ins_108(t_109){ + return function(){ + switch(t_109[0]){ + case 'RBEmpty': + return RBNode_2(Red_0)(k_105)(v_106)(RBEmpty_3)(RBEmpty_3); + case 'RBNode': + return function(){ + var h_115=function(){ + var case114=compare(k_105)(t_109[2]); + switch(case114[0]){ + case 'EQ': + return RBNode_2(t_109[1])(t_109[2])(v_106)(t_109[4])(t_109[5]); + case 'GT': + return RBNode_2(t_109[1])(t_109[2])(t_109[3])(t_109[4])(ins_108(t_109[5])); + case 'LT': + return RBNode_2(t_109[1])(t_109[2])(t_109[3])(ins_108(t_109[4]))(t_109[5]); + } + throw "Non-exhaustive pattern match in case";}(); + return fixUp_17(h_115);}(); + } + throw "Non-exhaustive pattern match in case";}();} + return ensureBlackRoot_18(ins_108(t_107));}();};};} + function singleton_20(k_116){ + return function(v_117){ + return insert_19(k_116)(v_117)(RBEmpty_3);};} + function isRed_21(t_118){ + return function(){ + switch(t_118[0]){ + case 'RBNode': + switch(t_118[1][0]){ + case 'Red': + return true; + }break; + } + return false;}();} + function isRedLeft_22(t_119){ + return function(){ + switch(t_119[0]){ + case 'RBNode': + switch(t_119[4][0]){ + case 'RBNode': + switch(t_119[4][1][0]){ + case 'Red': + return true; + }break; + }break; + } + return false;}();} + function isRedLeftLeft_23(t_120){ + return function(){ + switch(t_120[0]){ + case 'RBNode': + switch(t_120[4][0]){ + case 'RBNode': + switch(t_120[4][4][0]){ + case 'RBNode': + switch(t_120[4][4][1][0]){ + case 'Red': + return true; + }break; + }break; + }break; + } + return false;}();} + function isRedRight_24(t_121){ + return function(){ + switch(t_121[0]){ + case 'RBNode': + switch(t_121[5][0]){ + case 'RBNode': + switch(t_121[5][1][0]){ + case 'Red': + return true; + }break; + }break; + } + return false;}();} + function isRedRightLeft_25(t_122){ + return function(){ + switch(t_122[0]){ + case 'RBNode': + switch(t_122[5][0]){ + case 'RBNode': + switch(t_122[5][4][0]){ + case 'RBNode': + switch(t_122[5][4][1][0]){ + case 'Red': + return true; + }break; + }break; + }break; + } + return false;}();} + function moveRedLeft_26(t_123){ + return function(){ + var t__124=color_flip_15(t_123); + return function(){ + switch(t__124[0]){ + case 'RBNode': + return function(){ + switch(t__124[5][0]){ + case 'RBNode': + switch(t__124[5][4][0]){ + case 'RBNode': + switch(t__124[5][4][1][0]){ + case 'Red': + return color_flip_15(rotateLeft_10(RBNode_2(t__124[1])(t__124[2])(t__124[3])(t__124[4])(rotateRight_11(t__124[5])))); + }break; + }break; + } + return t__124;}(); + } + return t__124;}();}();} + function moveRedRight_27(t_130){ + return function(){ + var t__131=color_flip_15(t_130); + return (isRedLeftLeft_23(t__131)?color_flip_15(rotateRight_11(t__131)):t__131);}();} + function moveRedLeftIfNeeded_28(t_132){ + return ((not(isRedLeft_22(t_132))&¬(isRedLeftLeft_23(t_132)))?moveRedLeft_26(t_132):t_132);} + function moveRedRightIfNeeded_29(t_133){ + return ((not(isRedRight_24(t_133))&¬(isRedRightLeft_25(t_133)))?moveRedRight_27(t_133):t_133);} + function deleteMin_30(t_134){ + return function(){ + function del_135(t_136){ + return function(){ + switch(t_136[0]){ + case 'RBNode': + switch(t_136[4][0]){ + case 'RBEmpty': + return RBEmpty_3; + }break; + } + return function(){ + var case198=moveRedLeftIfNeeded_28(t_136); + switch(case198[0]){ + case 'RBEmpty': + return RBEmpty_3; + case 'RBNode': + return fixUp_17(RBNode_2(case198[1])(case198[2])(case198[3])(del_135(case198[4]))(case198[5])); + } + throw "Non-exhaustive pattern match in case";}();}();} + return ensureBlackRoot_18(del_135(t_134));}();} + function remove_31(k_142){ + return function(t_143){ + return function(){ + function eq_and_noRightNode_144(t_150){ + return function(){ + switch(t_150[0]){ + case 'RBNode': + switch(t_150[5][0]){ + case 'RBEmpty': + return eq(k_142,t_150[2]); + }break; + } + return false;}();} + function eq_145(t_152){ + return function(){ + switch(t_152[0]){ + case 'RBNode': + return eq(k_142,t_152[2]); + } + return false;}();} + function delLT_146(t_154){ + return function(){ + var case216=moveRedLeftIfNeeded_28(t_154); + switch(case216[0]){ + case 'RBEmpty': + throw 'delLT on RBEmpty'; + case 'RBNode': + return fixUp_17(RBNode_2(case216[1])(case216[2])(case216[3])(del_149(case216[4]))(case216[5])); + } + throw "Non-exhaustive pattern match in case";}();} + function delEQ_147(t_160){ + return function(){ + switch(t_160[0]){ + case 'RBEmpty': + throw 'delEQ called on a RBEmpty'; + case 'RBNode': + return function(){ + var Tuple2$k_v__164=min_6(t_160[5]); + var k__165=function(){ + switch(Tuple2$k_v__164[0]){ + case 'Tuple2': + return Tuple2$k_v__164[1]; + } + throw "Non-exhaustive pattern match in case";}(); + var v__166=function(){ + switch(Tuple2$k_v__164[0]){ + case 'Tuple2': + return Tuple2$k_v__164[2]; + } + throw "Non-exhaustive pattern match in case";}(); + return fixUp_17(RBNode_2(t_160[1])(k__165)(v__166)(t_160[4])(deleteMin_30(t_160[5])));}(); + } + throw "Non-exhaustive pattern match in case";}();} + function delGT_148(t_171){ + return function(){ + switch(t_171[0]){ + case 'RBEmpty': + throw 'delGT called on a RBEmpty'; + case 'RBNode': + return fixUp_17(RBNode_2(t_171[1])(t_171[2])(t_171[3])(t_171[4])(del_149(t_171[5]))); + } + throw "Non-exhaustive pattern match in case";}();} + function del_149(t_177){ + return function(){ + switch(t_177[0]){ + case 'RBEmpty': + return RBEmpty_3; + case 'RBNode': + return ((compare(k_142)(t_177[2])[0] === 'LT')?delLT_146(t_177):function(){ + var u_179=(isRedLeft_22(t_177)?rotateRight_11(t_177):t_177); + return (eq_and_noRightNode_144(u_179)?u_179[4]:function(){ + var t__180=moveRedRightIfNeeded_29(t_177); + return (eq_145(t__180)?delEQ_147(t__180):delGT_148(t__180));}());}()); + } + throw "Non-exhaustive pattern match in case";}();} + return (member_9(k_142)(t_143)?ensureBlackRoot_18(del_149(t_143)):t_143);}();};} + function map_32(f_181){ + return function(t_182){ + return function(){ + switch(t_182[0]){ + case 'RBEmpty': + return RBEmpty_3; + case 'RBNode': + return RBNode_2(t_182[1])(t_182[2])(f_181(t_182[3]))(map_32(f_181)(t_182[4]))(map_32(f_181)(t_182[5])); + } + throw "Non-exhaustive pattern match in case";}();};} + function foldl_33(f_188){ + return function(acc_189){ + return function(t_190){ + return function(){ + switch(t_190[0]){ + case 'RBEmpty': + return acc_189; + case 'RBNode': + return foldl_33(f_188)(f_188(t_190[2])(t_190[3])(foldl_33(f_188)(acc_189)(t_190[4])))(t_190[5]); + } + throw "Non-exhaustive pattern match in case";}();};};} + function foldr_34(f_195){ + return function(acc_196){ + return function(t_197){ + return function(){ + switch(t_197[0]){ + case 'RBEmpty': + return acc_196; + case 'RBNode': + return foldr_34(f_195)(f_195(t_197[2])(t_197[3])(foldr_34(f_195)(acc_196)(t_197[5])))(t_197[4]); + } + throw "Non-exhaustive pattern match in case";}();};};} + function union_35(t1_202){ + return function(t2_203){ + return foldl_33(insert_19)(t2_203)(t1_202);};} + function intersect_36(t1_204){ + return function(t2_205){ + return foldl_33(function(k_206){ + return function(v_207){ + return function(t_208){ + return (member_9(k_206)(t2_205)?insert_19(k_206)(v_207)(t_208):t_208);};};})(empty_4)(t1_204);};} + function diff_37(t1_209){ + return function(t2_210){ + return foldl_33(function(k_211){ + return function(v_212){ + return function(t_213){ + return remove_31(k_211)(t_213);};};})(t1_209)(t2_210);};} + function keys_38(t_214){ + return foldr_34(function(k_215){ + return function(v_216){ + return function(acc_217){ + return ['Cons',k_215,acc_217];};};})(['Nil'])(t_214);} + function values_39(t_218){ + return foldr_34(function(k_219){ + return function(v_220){ + return function(acc_221){ + return ['Cons',v_220,acc_221];};};})(['Nil'])(t_218);} + function toList_40(t_222){ + return foldr_34(function(k_223){ + return function(v_224){ + return function(acc_225){ + return ['Cons',['Tuple2',k_223,v_224],acc_225];};};})(['Nil'])(t_222);} + function fromList_41(assocs_226){ + return Elm.List.foldl(uncurry(insert_19))(empty_4)(assocs_226);} + var empty_4=RBEmpty_3; + return {$op : {}, + empty:empty_4, + lookup:lookup_7, + findWithDefault:findWithDefault_8, + member:member_9, + insert:insert_19, + singleton:singleton_20, + remove:remove_31, + map:map_32, + foldl:foldl_33, + foldr:foldr_34, + union:union_35, + intersect:intersect_36, + diff:diff_37, + keys:keys_38, + values:values_39, + toList:toList_40, + fromList:fromList_41};}(); ++Elm.Set=function(){+ var empty_0=Elm.Dict.empty;+ var remove_3=Elm.Dict.remove;+ var member_4=Elm.Dict.member;+ var union_5=Elm.Dict.union;+ var intersect_6=Elm.Dict.intersect;+ var diff_7=Elm.Dict.diff;+ var toList_8=Elm.Dict.keys;+ var fromList_9=Elm.List.foldl(function(k_15){+ return function(t_16){+ return Elm.Dict.insert(k_15)(["Tuple0"])(t_16);};})(empty_0);+ function singleton_1(k_13){+ return Elm.Dict.singleton(k_13)(["Tuple0"]);};+ function insert_2(k_14){+ return Elm.Dict.insert(k_14)(["Tuple0"]);};+ function foldl_10(f_17){+ return Elm.Dict.foldl(function(k_18){+ return function(v_19){+ return function(b_20){+ return f_17(k_18)(b_20);};};});};+ function foldr_11(f_21){+ return Elm.Dict.foldr(function(k_22){+ return function(v_23){+ return function(b_24){+ return f_21(k_22)(b_24);};};});};+ function map_12(f_25){+ return function(t_26){+ return function(x){+ return fromList_9(Elm.List.map(f_25)(x));}(toList_8(t_26));};};+ return {empty:empty_0,singleton:singleton_1,insert:insert_2,remove:remove_3,member:member_4,union:union_5,intersect:intersect_6,diff:diff_7,toList:toList_8,fromList:fromList_9,foldl:foldl_10,foldr:foldr_11,map:map_12};}();+ +(function() { +try{ + +var $op={}; +for(this['i'] in Elm){eval('var '+this['i']+'=Elm[this.i];');} +if (Elm.Automaton) throw "Module name collision, 'Automaton' is already defined."; +Elm.Automaton=function(){ + try{ + if (!(Elm.Prelude instanceof Object)) throw 'module not found'; + } catch(e) { + throw ("Module 'Prelude' is missing. Compile with --make flag or load missing module in a separate JavaScript file."); + } + var hiddenVars={}; + for (this['i'] in Elm.Prelude) { + if (hiddenVars[this['i']]) continue; + eval('var ' + this['i'] + ' = Elm.Prelude[this.i];');} + function Automaton_0(a1){ + return ["Automaton",a1];} + var Listen_8=["Listen"]; + var Ignore_9=["Ignore"]; + function DragFrom_10(a1){ + return ["DragFrom",a1];} + $op['>>>'] = function(a1_24){ + return function(a2_25){ + return function(){ + var Automaton$m1_26=a1_24; + var m1_27=function(){ + switch(Automaton$m1_26[0]){ + case "Automaton": + return Automaton$m1_26[1]; + } + throw "Non-exhaustive pattern match in case";}(); + var Automaton$m2_28=a2_25; + var m2_29=function(){ + switch(Automaton$m2_28[0]){ + case "Automaton": + return Automaton$m2_28[1]; + } + throw "Non-exhaustive pattern match in case";}(); + return Automaton_0(function(a_32){ + return function(){ + var Tuple2$bm1__33=m1_27(a_32); + var b_34=function(){ + switch(Tuple2$bm1__33[0]){ + case "Tuple2": + return Tuple2$bm1__33[1]; + } + throw "Non-exhaustive pattern match in case";}(); + var m1__35=function(){ + switch(Tuple2$bm1__33[0]){ + case "Tuple2": + return Tuple2$bm1__33[2]; + } + throw "Non-exhaustive pattern match in case";}(); + return function(){ + var Tuple2$cm2__40=m2_29(b_34); + var c_41=function(){ + switch(Tuple2$cm2__40[0]){ + case "Tuple2": + return Tuple2$cm2__40[1]; + } + throw "Non-exhaustive pattern match in case";}(); + var m2__42=function(){ + switch(Tuple2$cm2__40[0]){ + case "Tuple2": + return Tuple2$cm2__40[2]; + } + throw "Non-exhaustive pattern match in case";}(); + return ["Tuple2",c_41,$op['>>>'](m1__35)(m2__42)];}();}();});}();};}; + $op['<<<'] = function(a2_47){ + return function(a1_48){ + return $op['>>>'](a1_48)(a2_47);};}; + $op['^>>'] = function(f_49){ + return function(a_50){ + return $op['>>>'](pure_4(f_49))(a_50);};}; + $op['>>^'] = function(a_51){ + return function(f_52){ + return $op['>>>'](a_51)(pure_4(f_52));};}; + $op['^<<'] = function(f_53){ + return function(a_54){ + return $op['>>>'](a_54)(pure_4(f_53));};}; + $op['<<^'] = function(a_55){ + return function(f_56){ + return $op['>>>'](pure_4(f_56))(a_55);};}; + var count_7=init_5(0)(function(__84){ + return function(c_85){ + return (1+c_85);};}); + function run_1(Automaton$m0_14){ + return function(input_15){ + return function(){ + switch(Automaton$m0_14[0]){ + case "Automaton": + return lift(fst)(foldp$(function(a_17){ + return function(Tuple2$bAutomaton$m_18){ + return function(){ + switch(Tuple2$bAutomaton$m_18[0]){ + case "Tuple2": + switch(Tuple2$bAutomaton$m_18[2][0]){ + case "Automaton": + return Tuple2$bAutomaton$m_18[2][1](a_17); + }break; + } + throw "Non-exhaustive pattern match in case";}();};})(Automaton$m0_14[1])(input_15)); + } + throw "Non-exhaustive pattern match in case";}();};} + function step_2(Automaton$m_21){ + return function(a_22){ + return function(){ + switch(Automaton$m_21[0]){ + case "Automaton": + return Automaton$m_21[1](a_22); + } + throw "Non-exhaustive pattern match in case";}();};} + function combine_3(autos_57){ + return Automaton_0(function(a_58){ + return function(){ + var Tuple2$bsautos__59=unzip(map(function(Automaton$m_62){ + return function(){ + switch(Automaton$m_62[0]){ + case "Automaton": + return Automaton$m_62[1](a_58); + } + throw "Non-exhaustive pattern match in case";}();})(autos_57)); + var bs_60=function(){ + switch(Tuple2$bsautos__59[0]){ + case "Tuple2": + return Tuple2$bsautos__59[1]; + } + throw "Non-exhaustive pattern match in case";}(); + var autos__61=function(){ + switch(Tuple2$bsautos__59[0]){ + case "Tuple2": + return Tuple2$bsautos__59[2]; + } + throw "Non-exhaustive pattern match in case";}(); + return ["Tuple2",bs_60,combine_3(autos__61)];}();});} + function pure_4(f_68){ + return Automaton_0(function(x_69){ + return ["Tuple2",f_68(x_69),pure_4(f_68)];});} + function init_5(s_70){ + return function(step_71){ + return Automaton_0(function(a_72){ + return function(){ + var s__73=step_71(a_72)(s_70); + return ["Tuple2",s__73,init_5(s__73)(step_71)];}();});};} + function init__6(s_74){ + return function(step_75){ + return Automaton_0(function(a_76){ + return function(){ + var Tuple2$bs__77=step_75(a_76)(s_74); + var b_78=function(){ + switch(Tuple2$bs__77[0]){ + case "Tuple2": + return Tuple2$bs__77[1]; + } + throw "Non-exhaustive pattern match in case";}(); + var s__79=function(){ + switch(Tuple2$bs__77[0]){ + case "Tuple2": + return Tuple2$bs__77[2]; + } + throw "Non-exhaustive pattern match in case";}(); + return ["Tuple2",b_78,init__6(s__79)(step_75)];}();});};} + function vecSub_11(Tuple2$x1y1_86){ + return function(Tuple2$x2y2_87){ + return function(){ + switch(Tuple2$x1y1_86[0]){ + case "Tuple2": + return function(){ + switch(Tuple2$x2y2_87[0]){ + case "Tuple2": + return ["Tuple2",(Tuple2$x1y1_86[1]-Tuple2$x2y2_87[1]),(Tuple2$x1y1_86[2]-Tuple2$x2y2_87[2])]; + } + throw "Non-exhaustive pattern match in case";}(); + } + throw "Non-exhaustive pattern match in case";}();};} + function stepDrag_12(Tuple2$presspos_92){ + return function(Tuple2$dsform_93){ + return function(){ + switch(Tuple2$presspos_92[0]){ + case "Tuple2": + return function(){ + switch(Tuple2$dsform_93[0]){ + case "Tuple2": + return function(){ + function wrap_98(ds__99){ + return ["Tuple2",Tuple2$dsform_93[2],["Tuple2",ds__99,Tuple2$dsform_93[2]]];} + return function(){ + switch(Tuple2$dsform_93[1][0]){ + case "DragFrom": + return (Tuple2$presspos_92[1]?["Tuple2",uncurry(move)(vecSub_11(Tuple2$presspos_92[2])(Tuple2$dsform_93[1][1]))(Tuple2$dsform_93[2]),["Tuple2",DragFrom_10(Tuple2$dsform_93[1][1]),Tuple2$dsform_93[2]]]:function(){ + var form__101=uncurry(move)(vecSub_11(Tuple2$presspos_92[2])(Tuple2$dsform_93[1][1]))(Tuple2$dsform_93[2]); + return ["Tuple2",form__101,["Tuple2",Listen_8,form__101]];}()); + case "Ignore": + return wrap_98((Tuple2$presspos_92[1]?Ignore_9:Listen_8)); + case "Listen": + return wrap_98((not(Tuple2$presspos_92[1])?Listen_8:(isWithin(Tuple2$presspos_92[2])(Tuple2$dsform_93[2])?DragFrom_10(Tuple2$presspos_92[2]):Ignore_9))); + } + throw "Non-exhaustive pattern match in case";}();}(); + } + throw "Non-exhaustive pattern match in case";}(); + } + throw "Non-exhaustive pattern match in case";}();};} + function draggable_13(form_102){ + return init__6(["Tuple2",Listen_8,form_102])(stepDrag_12);} + return {$op : {'>>>' : $op['>>>'], '<<<' : $op['<<<'], '^>>' : $op['^>>'], '>>^' : $op['>>^'], '^<<' : $op['^<<'], '<<^' : $op['<<^']}, + run:run_1, + step:step_2, + combine:combine_3, + pure:pure_4, + init:init_5, + init$:init__6, + count:count_7, + draggable:draggable_13};}(); +Elm.main=function(){ + return Elm.Automaton.main;}; +} catch (e) { +Elm.main=function() { +var msg = ('<br/><h2>Your browser may not be supported. Are you using a modern browser?</h2>' + '<br/><span style="color:grey">Runtime Error in Automaton module:<br/>' + e + '</span>'); +document.body.innerHTML = Elm.Text.monospace(msg);throw e;};}}());
− elm-runtime-0.7.js
@@ -1,135 +0,0 @@-Elm={};var Guid=function(){var e=0;return{guid:function(){return e+=1}}}();-Elm.JavaScript=function(){function e(b){for(var a=["Nil"],m=b.length;m--;)a=["Cons",b[m],a];return a}function k(b){for(var a=[];"Cons"===b[0];)a.push(b[1]),b=b[2];return a}function b(b){return b.slice(1)}function d(b){return["Tuple"+b.length].concat(b)}return{castJSBoolToBool:function(b){return b},castBoolToJSBool:function(b){return b},castJSNumberToFloat:function(b){return b},castFloatToJSNumber:function(b){return b},castJSNumberToInt:function(b){return~~b},castIntToJSNumber:function(b){return b},-Experimental:{castJSElementToElement:function(b){return function(a){return function(m){return["Element",Guid.guid(),["EExternalHtml",m],b,a,1,["Nothing"],["Nothing"]]}}},castElementToJSElement:function(b){return Render.render(b)}},castJSArrayToList:e,castListToJSArray:k,castJSStringToString:e,castStringToJSString:function(b){return"string"===typeof b?b:k(b).join("")},castTupleToJSTuple2:b,castTupleToJSTuple3:b,castTupleToJSTuple4:b,castTupleToJSTuple5:b,castJSTupleToTuple2:d,castJSTupleToTuple3:d,-castJSTupleToTuple4:d,castJSTupleToTuple5:d}}();var JSjson=window.JSON;-Elm.JSON=function(){function e(a,b){return function(g){return function(l){var h=d.castStringToJSString(g);return l[1].hasOwnProperty(h)&&(l=l[1][h],l[0]===a)?l[1]:b}}}function k(a){return function(b){function g(a){switch(a[0]){case "JsonNull":return null;case "JsonString":return d.castStringToJSString(a[1]);case "JsonObject":var h={};a=a[1][1];for(var c in a)h[c]=g(a[c]);return h;case "JsonArray":h=d.castListToJSArray(a[1]);for(c=h.length;c--;)h[c]=g(h[c]);return h;default:return a[1]}}return JSjson.stringify(g(["JsonObject",-b]),null,d.castStringToJSString(a))}}function b(a){function b(a){switch(typeof a){case "string":return["JsonString",d.castJSStringToString(a)];case "number":return["JsonNumber",d.castJSNumberToFloat(a)];case "boolean":return["JsonBool",d.castJSBoolToBool(a)];case "object":if(null===a)return["JsonNull"];for(var h in a)a[h]=b(a[h]);return a instanceof Array?["JsonArray",d.castJSArrayToList(a)]:["JsonObject",["JSON",a]]}}a=JSjson.parse(a);for(var g in a)a[g]=b(a[g]);return["JSON",a]}var d=Elm.JavaScript,-j=["JSON",{}];return{empty:j,singleton:function(a){return function(b){var g={};g[d.castStringToJSString(a)]=b;return["JSON",g]}},insert:function(a){return function(b){return function(g){g=g[1];var l={},h;for(h in g)l[h]=g[h];l[d.castStringToJSString(a)]=b;return["JSON",l]}}},lookup:function(a){return function(b){var g=d.castStringToJSString(a);return b[1].hasOwnProperty(g)?["Just",b[1][g]]:["Nothing"]}},findString:e("JsonString",["Nil"]),findObject:e("JsonObject",j),findArray:e("JsonArray",["Nil"]),-findWithDefault:function(a){return function(b){return function(g){var l=d.castStringToJSString(b);return g[1].hasOwnProperty(l)?g[1][l]:a}}},remove:function(a){return function(b){b=b[1];var g={},l;for(l in b)g[l]=b[l];delete g[d.castStringToJSString(a)];return["JSON",g]}},toPrettyJSString:k,toJSString:k(""),fromJSString:b,toPrettyString:function(a){return function(b){return d.castJSStringToString(k(a)(b))}},toString:function(a){return d.castJSStringToString(k("")(a))},fromString:function(a){return b(d.castStringToJSString(a))},-toList:function(a){a=a[1];var b=[],g;for(g in a)b.push(Value.Tuple(d.castJSStringToString(g),a[g]));return d.castJSArrayToList(b)},fromList:function(a){a=d.castListToJSArray(a);for(var b={},g=a.length;g--;)b[d.castStringToJSString(a[g][1])]=a[g][2];return["JSON",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]}}}();-var Value=function(){function e(a){if(0==a.length)return a;a=a.replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/\n/g,"<br/>");a=a.split("<br/>");for(var b=a.length;b--;){var g=a,d=b,h;h=a[b];if(0!=h.length){h=h.split("");" "==h[0]&&(h[0]=" ");for(var c=h.length;--c;)" "==h[c][0]&&" "==h[c-1]&&(h[c-1]+=h[c],h[c]="");for(c=h.length;c--;)if(1<h[c].length&&" "==h[c][0]){for(var f=h[c].split(""),v=f.length-2;0<=v;v-=2)f[v]=" ";h[c]=f.join("")}h=h.join("");-h=" "===h[h.length-1]?h.slice(0,-1)+" ":h}g[d]=h}return a.join("<br/>")}var k=function(a,b){if("object"===typeof a){if(a.hasOwnProperty("_")){for(var g in a)if(a[g]!=b[g])return!1;for(g in b)if(a[g]!=b[g])return!1;return!0}if(a===b)return!0;if(a.length!==b.length)return!1;for(g=a.length;g--;)if(!k(a[g],b[g]))return!1;return!0}return a===b},b=function(a){if("function"===typeof a)return"<function>";if("boolean"===typeof a)return a?"True":"False";if("number"!==typeof a){if("string"===typeof a&&-2>a.length)return"'"+a+"'";if("object"===typeof a&&a.hasOwnProperty("_")){var d=[],g;for(g in a)if("_"!=g)for(var l=a[g].length;l--;)d.push(g+" = "+b(a[g][l]));return 0===d.length?"{}":"{ "+d.join(", ")+" }"}if(a[0]){if("Tuple"===a[0].substring(0,5)){d=Array(a.length-1);for(l=a.length;--l;)d[l-1]=b(a[l]);return"("+d.join(",")+")"}if("Cons"===a[0]){g="string"===typeof a[1]?'"':"]";var l="string"===typeof a[1]?"":",",h="string"===typeof a[1]?function(a){return a}:b,d=("string"===typeof a[1]?'"':"[")+-h(a[1]);for(a=a[2];;)if("Cons"===a[0])d+=l+h(a[1]),a=a[2];else return d+g}else{if("Nil"===a[0])return"[]";if("JSON"===a[0])return"(JSON.fromList "+b(Elm.JSON.toList(a))+")";if("RBNode"===a[0]||"RBEmpty"===a[0])return a=Elm.Dict.foldr(function(a){return function(b){return function(h){return["Cons",["Tuple2",a,b],h]}}})(["Nil"])(a),d="Dict","Cons"===a[0]&&"Tuple0"===a[1][2][0]&&(d="Set",a=Elm.List.map(function(a){return a[1]})(a)),"("+d+".fromList "+b(a)+")";d=[];for(l=a.length;--l;)d.push(b(a[l]));-d=a[0]+" "+d.join(" ");return 1<a.length?"("+d+")":d}}}return a+""},d=function(a){for(var b=["Nil"],d=a.length;d--;)b=["Cons",a[d],b];return b},j;j=document.addEventListener?function(a,b,d){a.addEventListener(b,d,!1)}:function(a,b,d){a.attachEvent("on"+b,d)};return{eq:k,str:d,show:function(a){return d(b(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;var d=["Cons",a[1],["Nil"]],l=d;for(a=a[2];"Cons"===a[0];)l[2]=["Cons",a[1],["Nil"]],a=a[2],l=l[2];l[2]=b;return d},listToArray:function(a){for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return b},toText:function(a){if("string"===typeof a)return e(a);for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return e(b.join(""))},properEscape:e,getTextSize:function(a,b,d){var l=document.createElement("div");l.innerHTML=d;l.style.textAlign="left";0<a&&(l.style.width=a+"px");l.style.visibility=-"hidden";l.style.styleFloat="left";l.style.cssFloat="left";document.body.appendChild(l);d=window.getComputedStyle(l,null);a=d.getPropertyValue("width").slice(0,-2)-0;d=d.getPropertyValue("height").slice(0,-2)-0;document.body.removeChild(l);return[Math.ceil(a),Math.ceil(Math.max(b,d))]},getSize:function(a){a=a.cloneNode(!0);a.style.visibility="hidden";a.style.styleFloat="left";a.style.cssFloat="left";document.body.appendChild(a);var b=a.offsetWidth,d=a.offsetHeight;document.body.removeChild(a);return[b,-d]},getExcess:function(b){b=b.cloneNode(!0);b.style.visibility="hidden";b.style.styleFloat="left";b.style.cssFloat="left";document.body.appendChild(b);var d=b.offsetWidth,g=b.offsetHeight,l=window.getComputedStyle(b,null),h=l.getPropertyValue("width").slice(0,-2)-0,l=l.getPropertyValue("height").slice(0,-2)-0;document.body.removeChild(b);return[d-h,g-l]},groupForms:function(b){b=Elm.JavaScript.castListToJSArray(b);for(var d=[],g=[],l=b.length;l--;){var h=b[l];switch(h[4][0]){case "FElement":0<g.length&&-(d.push(g),g=[]);d.push(h);break;default:g.push(h)}}0<g.length&&d.push(g);return d},wrap:function(b){var d=Value.getSize(b);return["Element",Guid.guid(),["EHtml",b],d[0],d[1],1,["Nothing"],["Nothing"]]},addListener:j}}();-Elm.List=function(){function e(b){return function(a){if("Nil"===a[0])return a;"Cons"!==a[0]&&h("map");var c=["Cons",b(a[1]),["Nil"]],f=c;for(a=a[2];"Cons"===a[0];)f[2]=["Cons",b(a[1]),["Nil"]],a=a[2],f=f[2];return c}}function k(b){return function(a){return function(c){var f=a;if("Nil"===c[0])return f;for("Cons"!==c[0]&&h("foldl");"Cons"===c[0];)f=b(c[1])(f),c=c[2];return f}}}function b(b){return function(a){return function(c){var f=a;if("Nil"===c[0])return f;"Cons"!==c[0]&&h("foldr");for(var d=[];"Cons"===-c[0];)d.push(c[1]),c=c[2];for(c=d.length;c--;)f=b(d[c])(f);return f}}}function d(b){return function(a){var h;"Cons"!==a[0]?h=void 0:(h=a[1],a=a[2],h=k(b)(h)(a));return h}}function j(b){return function(a){return function(c){if("Nil"===c[0])return["Cons",a,["Nil"]];"Cons"!==c[0]&&h("scanl");for(var f=[a];"Cons"===c[0];)a=b(c[1])(a),f.push(a),c=c[2];c=["Nil"];for(var d=f.length;d--;)c=["Cons",f[d],c];return c}}}function a(b){return function(h){a:{for(var c=[function(b){return"Nil"!==b[0]?void 0:["Tuple2",-["Nil"],["Nil"]]},function(h){if("Cons"===h[0]){var c=h[1];h=h[2];var f=a(b)(h);"Tuple2"!==f[0]?c=void 0:(h=f[1],f=f[2],c=b(c)?["Tuple2",["Cons",c,h],f]:["Tuple2",h,["Cons",c,f]]);return c}}],f=c.length;f--;){var d=c[f](h);if(void 0!==d){h=d;break a}}h=void 0}return h}}function m(b){a:{for(var a=[function(b){return"Nil"!==b[0]?void 0:["Tuple2",["Nil"],["Nil"]]},function(b){if("Cons"!==b[0])b=void 0;else if(b=["Tuple2",b[1],m(b[2])],"Tuple2"!==b[0]||"Tuple2"!==b[1][0])b=void 0;else{var a=b[1][1],h=-b[1][2];b="Tuple2"!==b[2][0]?void 0:["Tuple2",["Cons",a,b[2][1]],["Cons",h,b[2][2]]]}return b}],h=a.length;h--;){var c=a[h](b);if(void 0!==c){b=c;break a}}b=void 0}return b}function g(b){return function(a){a:{for(var h=[function(b){return"Nil"!==b[0]?void 0:["Nil"]},function(b){if("Cons"===b[0]){var a=b[1];return"Nil"!==b[2][0]?void 0:["Cons",a,["Nil"]]}},function(a){if("Cons"===a[0]){var h=a[1];if("Cons"===a[2][0]){var c=a[2][1];a=a[2][2];return["Cons",h,["Cons",b,g(b)(["Cons",c,a])]]}}}],c=h.length;c--;){var f=-h[c](a);if(void 0!==f){a=f;break a}}a=void 0}return a}}function l(b){return function(a){a:{for(var h=[function(b){return"Nil"!==b[0]?void 0:["Nil"]},function(b){if("Cons"===b[0]){var a=b[1];return"Nil"!==b[2][0]?void 0:a}},function(a){if("Cons"===a[0]){var h=a[1];if("Cons"===a[2][0]){var c=a[2][1];a=a[2][2];return Value.append(h,Value.append(b,l(b)(["Cons",c,a])))}}}],c=h.length;c--;){var f=h[c](a);if(void 0!==f){a=f;break a}}a=void 0}return a}}var h=function(b){throw"Function '"+b+"' expecting a list!";-},c=k(function(b){return function(a){return["Cons",b,a]}})(["Nil"]),f=b(function(b){return function(a){return Value.append(b,a)}})(["Nil"]),v=k(function(b){return function(a){return b&&a}})(!0),n=k(function(b){return function(a){return b||a}})(!1),p=k(function(b){return function(a){return b+a}})(0),r=k(function(b){return function(a){return b*a}})(1),y=d(function(b){return function(a){return Math.max(b,a)}}),s=d(function(b){return function(a){return Math.min(b,a)}});return{head:function(b){if("Cons"!==-b[0])throw"Error: 'head' only accepts lists of length greater than one.";return b[1]},tail:function(b){if("Cons"!==b[0])throw"Error: 'tail' only accepts lists of length greater than one.";return b[2]},last:function(b){if("Cons"!==b[0])throw"Error: 'last' only accepts lists of length greater than one.";for(var a=b[1];"Cons"===b[0];)a=b[1],b=b[2];return a},map:e,foldl:k,foldr:b,foldl1:d,foldr1:function(b){return function(a){if("Nil"===a[0])throw"'foldr1' requires an non-empty list.";"Cons"!==a[0]&&-h("foldr1");for(var c=[];"Cons"===a[0];)c.push(a[1]),a=a[2];a=c.pop();for(var f=c.length;f--;)a=b(c[f])(a);return a}},scanl:j,scanl1:function(b){return function(a){if("Cons"!==a[0])throw"Error: 'scanl1' requires a list of at least length 1.";return j(b)(a[1])(a[2])}},filter:function(b){return function(a){if("Nil"===a[0])return a;"Cons"!==a[0]&&h("filter");for(var c=[];"Cons"===a[0];)b(a[1])&&c.push(a[1]),a=a[2];a=["Nil"];for(var f=c.length;f--;)a=["Cons",c[f],a];return a}},length:function(b){for(var a=-0;"Cons"===b[0];)a+=1,b=b[2];return a},reverse:c,concat:f,concatMap:function(b){return function(a){return f(e(b)(a))}},and:v,or:n,all:function(b){return k(function(a){return function(h){return h&&b(a)}})(!0)},any:function(b){return k(function(a){return function(h){return h||b(a)}})(!1)},sum:p,product:r,maximum:y,minimum:s,partition:a,zipWith:function(b){return function(a){return function(c){if("Nil"===a[0]||"Nil"===c[0])return["Nil"];("Cons"!==a[0]||"Cons"!==c[0])&&h("zipWith");for(var f=[];"Cons"===-a[0]&&"Cons"===c[0];)f.push(b(a[1])(c[1])),a=a[2],c=c[2];c=["Nil"];for(var d=f.length;d--;)c=["Cons",f[d],c];return c}}},zip:function(b){return function(a){if("Nil"===b[0]||"Nil"===a[0])return["Nil"];("Cons"!==b[0]||"Cons"!==a[0])&&h("zip");for(var c=[];"Cons"===b[0]&&"Cons"===a[0];)c.push(["Tuple2",b[1],a[1]]),b=b[2],a=a[2];a=["Nil"];for(var f=c.length;f--;)a=["Cons",c[f],a];return a}},unzip:m,intersperse:g,intercalate:l,sort:function(b){if("Nil"===b[0])return b;"Cons"!==b[0]&&h("sort");for(var a=-[];"Cons"===b[0];)a.push(b[1]),b=b[2];a.sort(function(b,a){return b-a});b=["Nil"];for(var c=a.length;c--;)b=["Cons",a[c],b];return b},take:function(b){return function(a){if(0>=b)return["Nil"];if("Nil"===a[0])return a;"Cons"!==a[0]&&h("take");var c=["Cons",a[1],["Nil"]],f=c;a=a[2];for(--b;"Cons"===a[0]&&0<b;)f[2]=["Cons",a[1],["Nil"]],f=f[2],a=a[2],--b;return c}},drop:function(b){return function(a){if("Nil"===a[0])return a;for("Cons"!==a[0]&&h("drop");"Cons"===a[0]&&0<b;)a=a[2],--b;return a}}}}();-Elm.Maybe=function(){function e(b){return function(d){return"Just"===b[0]?["Cons",b[1],d]:d}}function k(b){return function(d){return function(j){var a=b(d);return"Just"===a[0]?["Cons",a[1],j]:j}}}return{Just:function(b){return["Just",b]},Nothing:["Nothing"],catMaybes:Elm.List.foldr(e)(["Nil"]),isJust:function(b){return"Just"===b[0]},isNothing:function(b){return"Nothing"===b[0]},fromMaybe:function(b){return function(d){return"Just"===d[0]?d[1]:b}},consMaybe:e,mapMaybe:function(b){return Elm.List.foldr(k(b))(["Nil"])},-maybe:function(b){return function(d){return function(j){return"Just"===j[0]?d(j[1]):b}}}}}();-Elm.Char=function(){function e(b,a){return function(d){d=d.charCodeAt(0);return b<=d&&d<=a}}var k=e(48,57),b=e(97,102),d=e(65,70);return{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()},isLower:e(97,122),isUpper:e(65,90),isDigit:k,isOctDigit:e(48,55),isHexDigit:function(e){return k(e)||-b(e)||d(e)}}}();-Elm.Color=function(){function e(e){var b=e.value*e.saturation,d=e.hue/60,j=b*(1-Math.abs(d%2-1)),a=0,m=0,g=0;0<=d&&1>d?(a=b,m=j,g=0):1<=d&&2>d?(a=j,m=b,g=0):2<=d&&3>d?(a=0,m=b,g=j):3<=d&&4>d?(a=0,m=j,g=b):4<=d&&5>d?(a=j,m=0,g=b):5<=d&&6>d&&(a=b,m=0,g=j);e=e.value-b;return["Color",Math.round(255*(a+e)),Math.round(255*(m+e)),Math.round(255*(g+e)),1]}return{rgba:function(e){return function(b){return function(d){return function(j){return["Color",e,b,d,j]}}}},rgb:function(e){return function(b){return function(d){return["Color",e,-b,d,1]}}},hsva:function(k){return function(b){return function(d){return function(j){var a=e({hue:k,saturation:b,value:d});a[4]=j;return a}}}},hsv:function(k){return function(b){return function(d){return e({hue:k,saturation:b,value:d})}}},red:["Color",255,0,0,1],green:["Color",0,255,0,1],blue:["Color",0,0,255,1],yellow:["Color",255,255,0,1],cyan:["Color",0,255,255,1],magenta:["Color",255,0,255,1],black:["Color",0,0,0,1],white:["Color",255,255,255,1],gray:["Color",128,128,128,1],grey:["Color",128,128,-128,1],complement:function(k){var b;b=k[1]/255;var d=k[2]/255;k=k[3]/255;var j=Math.max(b,d,k),a=Math.min(b,d,k),a=j-a,m=0;0===a?m=0:j===b?m=(d-k)/a%6:j===d?m=(k-b)/a+2:j===k&&(m=(b-d)/a+4);b={value:j,hue:60*m,saturation:0===j?0:a/j};b.hue=(b.hue+180)%360;return e(b)},extract:function(e){return 1===e[4]?"rgb("+e[1]+","+e[2]+","+e[3]+")":"rgba("+e[1]+","+e[2]+","+e[3]+","+e[4]+")"}}}();-var Collage=function(){function e(b,a){var c=a.length-1;if(!(0>=c))for(b.moveTo(a[c][1],a[c][2]);c--;)b.lineTo(a[c][1],a[c][2])}function k(b,a,c,f){0===b.length&&(b=[8,4]);var d=f.length-1;if(!(0>=d)){var n=f[d][1],g=f[d][2],e=0,j=0,k=0,m=0,q=0,t=0,w=b.length,A=!0,x=b[0];for(a.moveTo(n,g);d--;){e=f[d][1];j=f[d][2];k=e-n;m=j-g;for(q=Math.sqrt(k*k+m*m);x<=q;)n+=k*x/q,g+=m*x/q,a[A?"lineTo":"moveTo"](n,g),k=e-n,m=j-g,q=Math.sqrt(k*k+m*m),A=!A,t=(t+1)%w,x=b[t];0<q&&(a[A?"lineTo":"moveTo"](e,j),x-=q);n=-e;g=j}}a.strokeStyle=Elm.Color.extract(c);a.stroke()}function b(b,a,c,f,d){a.clearRect(0,0,c,f);for(c=d.length;c--;){var n=d[c],p=b;f=a;var j=n[1],m=n[2],s=n[3][1],u=n[3][2],n=n[4];f.save();(0!==s||0!==u)&&f.translate(s,u);j!==~~j&&f.rotate(2*Math.PI*j);1!==m&&f.scale(m,m);f.beginPath();switch(n[0]){case "FLine":a:switch(p=f,j=n,n=j[3][1],j[1][0]){case "Solid":j=j[2];e(p,n);p.strokeStyle=Elm.Color.extract(j);p.stroke();break;case "Dotted":k([3,3],p,j[2],n);break a;case "Dashed":k([8,4],p,j[2],n);-break a;case "Custom":k(j[1][1],p,j[2],n)}break;case "FShape":a:switch(s=p,m=f,p=n[1],j=n[2],n=n[3][1],p[0]){case "Filled":p=m;e(p,n);p.fillStyle=Elm.Color.extract(j);p.fill();break a;case "Outlined":p=m;e(p,n);p.strokeStyle=Elm.Color.extract(j);p.stroke();break a;case "Textured":j=s;p=p[1];s=new Image;s.src=g.castStringToJSString(p);s.onload=j;e(m,n);m.fillStyle=m.createPattern(s,"repeat");m.fill();break a;case "CustomOutline":k(p[1],m,j,n)}break;case "FImage":j=f,m=n[1],s=n[2],n=n[3],u=new Image,-u.onload=p,u.src=g.castStringToJSString(n),j.drawImage(u,-m/2,-s/2,m,s)}f.restore()}}function d(a,h,c){var f=Render.newElement("canvas");a=~~a;h=~~h;f.style.width=a+"px";f.style.height=h+"px";f.style.display="block";f.width=a;f.height=h;if(f.getContext){var d=f.getContext("2d");b(function(){b(this,d,a,h,c)},d,a,h,c);return f}f.innerHTML="Your browser does not support the canvas element.";return f}function j(b,a,c,f,d,n,g){var e=Render.render(g);c="translate("+(d-g[3]/2)+"px,"+(n-g[4]/2)+"px) "+(1===-f?"":"scale("+f+","+f+")")+" "+(c===~~c?"":"rotate("+360*c+"deg)");e.style.transform=c;e.style.msTransform=c;e.style.MozTransform=c;e.style.webkitTransform=c;e.style.OTransform=c;c=Render.newElement("div");Render.addTo(c,e);c.style.width=~~b+"px";c.style.height=~~a+"px";c.style.overflow="hidden";return c}function a(a,h,c){if(!Value.eq(c,h)){var f=a.style.width.slice(0,-2)-0,g=a.style.height.slice(0,-2)-0;if("object"===typeof c[0]){if("object"===typeof h[0]&&a.getContext){var n=a.getContext("2d");-return b(function(){b(this,n,f,g,c)},n,f,g,c)}h=d(f,g,c);h.style.position="absolute";return a.parentNode.replaceChild(h,a)}h=j(f,g,c[1],c[2],c[3][1],c[3][2],c[4][1]);h.style.position="absolute";return a.parentNode.replaceChild(h,a)}}function m(b,a,c,f,d){var g=0,e,j=(b[1]-f[1])/c;b=(b[2]-f[2])/c;0!==a&&(a*=-2*Math.PI,c=j*Math.cos(a)-b*Math.sin(a),b=j*Math.sin(a)+b*Math.cos(a),j=c);if(0===d.length)return!1;e=d[0];for(c=d.length-1;c--;){a=d[c];f=e[1];e=e[2];var k=a[1],m=a[2];if(e<m)var u=e,q=m;else u=-m,q=e;if(f<k)var t=f,w=k;else t=k,w=f;u<b&&b<=q&&j<=w&&(j<=t||j<=(b-e)*(k-f)/(m-e)+f)&&++g;e=a}return 1===g%2}var g=Elm.JavaScript;return{collage:function(b,a,c){if(0===c.length)return d(b,a,[]);for(var f=Array(c.length),e=c.length;e--;){var g=c[e];f[e]="string"===typeof g[0]?j(b,a,g[1],g[2],g[3][1],g[3][2],g[4][1]):d(b,a,g)}return 1===c.length?f[0]:Render.flowWith(Render.goIn,function(b){return b},f)},updateCollage:function(b,h,c){if(1===c.length)return a(b,h[0],c[0]);b=b.childNodes;for(var f=b.length,-d=f;d--;)a(b[f-d-1],h[d],c[d])},insideForm:function(b){return function(a){var c=b[1],f=b[2];if(6>a.length){var d=a[3][1],g=a[3][2],e=0,j=a[2];switch(a[4][0]){case "FShape":for(var k=a[4][3][1],s=k.length;--s;)var u=k[s],e=Math.max(e,u[1]*u[1]+u[2]*u[2]);e*=j*j;break;case "FImage":k=j*a[4][1]/2;j=j*a[4][2]/2;e=k*k+j*j;break;case "FElement":k=j*a[4][1][3]/2,j=j*a[4][1][4]/2,e=k*k+j*j}a.push(function(a,b){var c=a-d,h=b-g;return c*c+h*h<e+1})}if(!a[5](c,f))return!1;var q,t;switch(a[4][0]){case "FShape":return m(b,-a[1],a[2],a[3],a[4][3][1]);case "FLine":return!1;case "FImage":q=a[4][1]/2;t=a[4][2]/2;break;case "FElement":q=a[4][1][3]/2,t=a[4][1][4]/2}return m(b,a[1],a[2],a[3],[[null,q,t],[null,-q,t],[null,-q,-t],[null,q,-t],[null,q,t]])}}}}();-Elm.Graphics=function(){function e(a){return function(b){return["Position",a,b]}}function k(a){return function(b){return["EText",a,b]}}function b(a){return function(b){return["EFlow",a,r.castListToJSArray(b)]}}function d(a){return["Line",r.castListToJSArray(a)]}function j(a){return function(b){var c=r.castListToJSArray(a);0<c.length&&c.push(c[0]);return["Shape",c,b]}}function a(a){return function(b){return function(c){return function(h){return["Form",a,b,c,h]}}}}function m(a){return function(b){return function(c){return["FLine",-a,b,c]}}}function g(a){return function(b){return function(c){return["FShape",a,b,c]}}}function l(a,b,c,h,f,d){return["Element",Guid.guid(),a,b,c,h,f,d]}function h(a,b,c){return["Element",Guid.guid(),a,b,c,1,["Nothing"],["Nothing"]]}function c(a){return~~a[3]}function f(a){return~~a[4]}function v(a){return function(b){return function(c){return h(["EImage",r.castStringToJSString(c)],a,b)}}}function n(a){return function(b){return h(A,a,b)}}function p(a){return function(b){return function(c){var h=map(function(c){return["Tuple2",-a/2*Math.cos(2*(Math.PI/50)*c),b/2*Math.sin(2*(Math.PI/50)*c)]}),f=49,d=["Nil"];if(0<=f){do d=["Cons",f,d];while(0<f--)}return j(h(d))(c)}}}for(this.i in Elm.List)eval("var "+this.i+" = Elm.List[this.i];");var r=Elm.JavaScript,y=["DRight"],s=["DDown"],u=["DOut"],q=["Near"],t=["Mid"],w=["Far"],A=["EEmpty"],x=["Solid"],D=["Dotted"],F=["Dashed"],B=["Filled"],E=["Outlined"],z=e(q)(q),C=e(w)(q),G=e(q)(w),H=e(w)(w),I=e(q)(t),J=e(w)(t),q=e(t)(q),w=e(t)(w),t=e(t)(t);return{left:["DLeft"],right:y,down:s,up:["DUp"],-inward:["DIn"],outward:u,topLeft:z,topRight:C,bottomLeft:G,bottomRight:H,midLeft:I,midRight:J,midTop:q,midBottom:w,middle:t,middleAt:function(a){return function(b){return["PositionAt",a,b]}},topLeftAt:function(a){return function(b){return["PositionTL",a,b]}},topRightAt:function(a){return function(b){return["PositionTR",a,b]}},bottomLeftAt:function(a){return function(b){return["PositionBL",a,b]}},bottomRightAt:function(a){return function(b){return["PositionBR",a,b]}},absolute:function(a){return["Absolute",-a]},relative:function(a){return["Relative",a]},width:function(a){return function(b){var c=b[2];switch(c[0]){case "EImage":case "EVideo":return l(b[2],a,b[4]*a/b[3],b[5],b[6],b[7]);case "EText":return c=Value.getTextSize(a,b[4],c[2]),l(b[2],a,c[1],b[5],b[6],b[7])}return l(b[2],a,b[4],b[5],b[6],b[7])}},height:function(a){return function(b){switch(b[2][0]){case "EImage":case "EVideo":return l(b[2],b[3]*a/b[4],a,b[5],b[6],b[7])}return l(b[2],b[3],a,b[5],b[6],b[7])}},size:function(b){return function(a){return function(c){return l(c[2],-b,a,c[5],c[6],c[7])}}},opacity:function(b){return function(a){return l(a[2],a[3],a[4],b,a[6],a[7])}},color:function(a){return function(b){return l(b[2],b[3],b[4],b[5],["Just",a],b[7])}},link:function(b){return function(a){return l(a[2],a[3],a[4],a[5],a[6],["Just",r.castStringToJSString(b)])}},widthOf:c,heightOf:f,sizeOf:function(a){return["Tuple2",~~a[3],~~a[4]]},text:function(a){var b=Value.getTextSize(0,0,a);return h(k("left")(a),b[0],b[1])},asText:function(a){a=Elm.Text.monospace(Value.toText(Value.show(a)));-var b=Value.getTextSize(0,0,a);return h(k("left")(a),b[0],b[1])},plainText:function(a){a=Value.toText(a);var b=Value.getTextSize(0,0,a);return h(k("left")(a),b[0],b[1])},centeredText:function(a){var b=Value.getTextSize(0,0,a);return h(k("center")(a),b[0],b[1])},justifiedText:function(a){var b=Value.getTextSize(0,0,a);return h(k("justify")(a),b[0],b[1])},rightedText:function(a){var b=Value.getTextSize(0,0,a);return h(k("right")(a),b[0],b[1])},image:v,images:function(a){var b=Elm.Signal.constant(n(0)(0));-a=Elm.Signal.lift(function(a){a=r.castStringToJSString(a);var c=new Image;c.onload=function(){Dispatcher.notify(b.id,v(this.width)(this.height)(a))};c.src=a})(a);return Elm.Signal.lift2(function(a){return function(){return a}})(b)(a)},video:function(a){return function(b){return function(c){return h(["EVideo",r.castStringToJSString(c)],a,b)}}},fittedImage:function(a){return function(b){return function(c){return h(["EFittedImage",r.castStringToJSString(c)],a,b)}}},flow:function(a){return function(d){var e;-e=map(c)(d);a:{switch(a[0]){case "DLeft":e=sum(e);break a;case "DRight":e=sum(e);break a}e=maximum(e)}var g;g=map(f)(d);a:{switch(a[0]){case "DDown":g=sum(g);break a;case "DUp":g=sum(g);break a}g=maximum(g)}return h(b(a)(d),e,g)}},above:function(a){return function(c){return h(b(s)(["Cons",a,["Cons",c,["Nil"]]]),Math.max(~~a[3],~~c[3]),~~a[4]+~~c[4])}},below:function(a){return function(c){return h(b(s)(["Cons",c,["Cons",a,["Nil"]]]),Math.max(~~a[3],~~c[3]),~~a[4]+~~c[4])}},beside:function(a){return function(c){return h(b(y)(["Cons",-a,["Cons",c,["Nil"]]]),~~a[3]+~~c[3],Math.max(~~a[4],~~c[4]))}},layers:function(a){return h(b(u)(a),maximum(map(c)(a)),maximum(map(f)(a)))},collage:function(a){return function(b){return function(c){return h(["ECollage",a,b,Value.groupForms(c)],a,b)}}},spacer:n,container:function(a){return function(b){return function(c){return function(f){return h(["EContainer",c,f],a,b)}}}},line:d,segment:function(a){return function(b){return d(["Cons",a,["Cons",b,["Nil"]]])}},polygon:j,rect:function(a){return function(b){return function(c){return j(["Cons",-["Tuple2",0-a/2,0-b/2],["Cons",["Tuple2",0-a/2,b/2],["Cons",["Tuple2",a/2,b/2],["Cons",["Tuple2",a/2,0-b/2],["Nil"]]]]])(c)}}},oval:p,circle:function(a){return p(2*a)(2*a)},ngon:function(a){return function(b){return function(c){var h=map(function(c){return["Tuple2",b*Math.cos(2*(Math.PI/a)*c),b*Math.sin(2*(Math.PI/a)*c)]}),f=a-1,d=["Nil"];if(0<=f){do d=["Cons",f,d];while(0<f--)}return j(h(d))(c)}}},solid:function(b){return function(c){return a(0)(1)(["Tuple2",0,0])(m(x)(b)(c))}},dotted:function(b){return function(c){return a(0)(1)(["Tuple2",-0,0])(m(D)(b)(c))}},dashed:function(b){return function(c){return a(0)(1)(["Tuple2",0,0])(m(F)(b)(c))}},customLine:function(b){return function(c){return function(h){return a(0)(1)(["Tuple2",0,0])(m(["Custom",r.castListToJSArray(b)])(c)(h))}}},filled:function(b){return function(c){return a(0)(1)(c[2])(g(B)(b)(c))}},outlined:function(b){return function(c){return a(0)(1)(c[2])(g(E)(b)(c))}},customOutline:function(b){return function(c){return function(h){return a(0)(1)(h[2])(g(["CustomOutline",r.castListToJSArray(b)])(c)(h))}}},-textured:function(b){return function(c){return a(0)(1)(c[2])(g(["Textured",b])(null)(c))}},sprite:function(b){return function(c){return function(h){return function(f){return a(0)(1)(f)(["FImage",c,h,r.castStringToJSString(b)])}}}},toForm:function(b){return function(c){return a(0)(1)(b)(["FElement",c])}},rotate:function(b){return function(c){a:{switch(c[0]){case "Form":var h=c[2],f=c[3],d=c[4];c=a(b+c[1])(h)(f)(d);break a}throw"Non-exhaustive pattern match in case";}return c}},scale:function(b){return function(c){return a(c[1])(b*-c[2])(c[3])(c[4])}},move:function(b){return function(c){return function(h){var f;a:{switch(h[0]){case "Form":f=h[1];var d=h[2],e=h[3];h=h[4];switch(e[0]){case "Tuple2":var g=e[1],e=e[2];f=a(f)(d)(["Tuple2",b+g,c+e])(h);break a}}throw"Non-exhaustive pattern match in case";}return f}}},isWithin:Collage.insideForm}}();-Elm.Text=function(){function e(a){return Value.toText(a)}var k=function(a){return function(b){return"<"+a+' style="padding:0;margin:0">'+b+"</"+a+">"}},b=function(a,b){return function(f){return"<span style='"+a+":"+b+"'>"+f+"</span>"}},d=function(a){a=Elm.JavaScript.castStringToJSString(a);return b("font-family",a)},j=k("h1"),a=b("font-style","italic"),k=k("b"),m=b("text-decoration","underline"),g=b("text-decoration","overline"),l=b("text-decoration","line-through");return{fromString:e,toText:e,header:j,-height:function(a){return b("font-size",a+"em")},italic:a,bold:k,underline:m,overline:g,strikeThrough:l,monospace:d("monospace"),typeface:d,color:function(a){return b("color",Elm.Color.extract(a))},link:function(a){return function(b){return"<a href='"+e(a)+"'>"+b+"</a>"}}}}();-var Render=function(){function e(a){a=document.createElement(a);a.style.padding="0";a.style.margin="0";return a}function k(a){return a}function b(a){a.style.styleFloat="left";a.style.cssFloat="left";return a}function d(a){a.style.position="absolute";return a}function j(a,b,f){for(var d=e("div"),g=f.length;g--;){var j=a(b(f[g]));d.appendChild(j)}return d}function a(a){switch(a[0]){case "Absolute":return a[1]+"px";case "Relative":return 100*a[1]+"%"}}function m(b,c){c.style.position="absolute";c.style.margin=-"auto";switch(b[0]){case "Position":"Far"!==b[1][0]&&(c.style.left=0);"Near"!==b[1][0]&&(c.style.right=0);"Far"!==b[2][0]&&(c.style.top=0);"Near"!==b[2][0]&&(c.style.bottom=0);break;case "PositionAt":c.style.top=a(b[2]);c.style.left=a(b[1]);var f="translate("+~~(-c.style.width.slice(0,-2)/2)+"px,"+~~(-c.style.height.slice(0,-2)/2)+"px)";c.style.transform=f;c.style.msTransform=f;c.style.MozTransform=f;c.style.webkitTransform=f;c.style.OTransform=f;break;default:f=b[0].slice(-2),c.style["T"===f[0]?-"top":"bottom"]=a(b[2]),c.style["L"===f[1]?"left":"right"]=a(b[1])}}function g(a){var c={};switch(a[2][0]){case "EText":var c=a[2][1],f=a[2][2],l=e("div");l.innerHTML=f;l.style.textAlign=c;c=l;break;case "EImage":c=a[2][1];f=e("img");f.src=c;f.name=c;f.style.display="block";c=f;break;case "EVideo":l=a[2][1];c=e("video");c.controls="controls";f=e("source");f.src=l;l=l.split(".");f.type="video/"+l[l.length-1];c.appendChild(f);c.style.display="block";break;case "EFittedImage":var n=a[3],p=a[4],c=a[2][1],-f=e("div");f.style.width=n+"px";f.style.height=p+"px";f.style.position="relative";f.style.overflow="hidden";var r=e("img");r.onload=function(){r.style.position="absolute";r.style.margin="auto";var a=n,b=p;n/p>this.width/this.height?b=Math.round(this.height*n/this.width):a=Math.round(this.width*p/this.height);r.style.width=a+"px";r.style.height=b+"px";r.style.left=(n-a)/2+"px";r.style.top=(p-b)/2+"px"};r.src=c;r.name=c;f.appendChild(r);c=f;break;case "EFlow":a:{c=a[2][2];switch(a[2][1][0]){case "DDown":c=-c.slice(0).reverse();case "DUp":c=j(k,g,c);break a;case "DRight":c=c.slice(0).reverse();case "DLeft":c=j(b,g,c);break a;case "DOut":c=c.slice(0).reverse();case "DIn":c=j(d,g,c);break a}c=void 0}break;case "ECollage":c=Collage.collage(a[2][1],a[2][2],a[2][3]);break;case "EEmpty":c=e("div");break;case "EContainer":f=a[2][1];c=g(a[2][2]);m(f,c);f=e("div");f.style.position="relative";f.style.overflow="hidden";f.appendChild(c);c=f;break;case "EHtml":c=a[2][1];"button"!==c.type&&(f=Value.getExcess(c),a[3]-=-f[0],a[4]-=f[1]);break;case "EExternalHtml":c=e("div"),c.appendChild(a[2][1])}c.id=a[1];c.style.width=~~a[3]+"px";c.style.height=~~a[4]+"px";1!==a[5]&&(c.style.opacity=a[5]);"Just"===a[6][0]&&(c.style.backgroundColor=Elm.Color.extract(a[6][1]));return"Just"===a[7][0]?(f=e("a"),f.href=a[7][1],f.appendChild(c),f):c}function l(a,c,f){"A"===a.tagName&&(a=a.firstChild);if(c[1]!==f[1]){if(c[2][0]!==f[2][0])return a.parentNode.replaceChild(g(f),a);var e=f[2],j=c[2];switch(e[0]){case "EText":e[1]!==j[1]&&-(a.style.textAlign=e[1]);e[2]!==j[2]&&(a.innerHTML=e[2]);break;case "EImage":e[1]!==j[1]&&(a.src=e[1]);break;case "EVideo":case "EFittedImage":if(!Value.eq(e,j)||f[3]!==c[3]||f[4]!==c[4])return a.parentNode.replaceChild(g(f),a);break;case "ECollage":if(e[1]!==j[1]||e[2]!==j[2]||e[3].length!==j[3].length)return a.parentNode.replaceChild(g(f),a);Collage.updateCollage(a,j[3],e[3]);break;case "EFlow":if(e[1]!==j[1])return a.parentNode.replaceChild(g(f),a);var p=e[2],r=a.childNodes;if(p.length!==r.length)return a.parentNode.replaceChild(g(f),-a);var j=j[2],y=function(a){return a};switch(e[1][0]){case "DDown":case "DUp":y=k;break;case "DRight":case "DLeft":y=b;break;case "DOut":case "DIn":y=d}for(e=r.length;e--;)l(r[e],j[e],p[e]),y(r[e]);break;case "EContainer":l(a.childNodes[0],j[2],e[2]);m(e[1],a.childNodes[0]);break;case "EHtml":f[1]!==c[1]&&(p=g(f),a.parentNode.replaceChild(p,a),a=p);"button"!==p.type&&(e=Value.getExcess(a),f[3]-=e[0],f[4]-=e[1]);break;case "EExternalHtml":f[1]!==c[1]&&a.parentNode.replaceChild(g(f),a)}f[3]!==c[3]&&-(a.style.width=~~f[3]+"px");f[4]!==c[4]&&(a.style.height=~~f[4]+"px");f[5]!==c[5]&&(a.style.opacity=f[5]);2===f[6].length&&(e=Elm.Color.extract(f[6][1]),e!==a.style.backgroundColor&&(a.style.backgroundColor=e));if(2===f[7].length&&(1===c[7].length||f[7][1]!==c[7][1]))a.parentNode.href=f[7][1];f[1]=c[1]}}return{render:g,update:l,addTo:function(a,b){a.appendChild(b)},newElement:e,flowWith:j,goIn:d}}();-Elm.Signal=function(){function e(a){this.id=Guid.guid();this.value=a;this.kids=[];this.defaultNumberOfKids=0;this.recv=function(a,b,c){if(b=b===this.id)this.value=c;l(this,a,b);return b};Dispatcher.inputs.push(this)}function k(a,b){this.id=Guid.guid();this.value=null;this.kids=[];this.count=0;this.changed=!1;b.reverse();this.recalc=function(){for(var d=a,e=b.length;e--;)d=d(b[e].value);this.value=d};this.recalc();this.recv=function(a,c){this.count+=1;c&&(this.changed=!0);this.count==b.length&&(this.changed&&-this.recalc(),l(this,a,this.changed),this.changed=!1,this.count=0)};for(var d=b.length;d--;)b[d].kids.push(this)}function b(a,b,d,e){this.id=Guid.guid();this.value=d?b(e.value):b;this.kids=[];this.recv=function(b,d){d&&(this.value=a(e.value)(this.value));l(this,b,d)};e.kids.push(this)}function d(a,b,d){this.id=Guid.guid();this.value=a(d.value)?b:d.value;this.kids=[];this.recv=function(b,f){var e=f&&!a(d.value);e&&(this.value=d.value);l(this,b,e)};d.kids.push(this)}function j(a){this.id=Guid.guid();-this.value=a.value;this.kids=[];this.recv=function(b,d){var e=d&&!Value.eq(this.value,a.value);e&&(this.value=a.value);l(this,b,e)};a.kids.push(this)}function a(a,b){this.id=Guid.guid();var d=(new window.Date).getTime();this.value=a?Value.Tuple(d,b.value):d;this.kids=[];this.recv=function(d,e){e&&(this.value=a?Value.Tuple(d,b.value):d);l(this,d,e)};b.kids.push(this)}function m(a,b){this.id=Guid.guid();this.value=b.value;this.kids=[];this.count=0;this.changed=!1;this.recv=function(d,e,g){g===a.id&&-(this.changed=e);this.count+=1;2==this.count&&(this.changed&&(this.value=b.value),l(this,d,this.changed),this.count=0,this.changed=!1)};a.kids.push(this);b.kids.push(this)}function g(a,b){this.id=Guid.guid();this.value=a.value;this.kids=[];this.next=null;this.count=0;this.changed=!1;this.recv=function(d,e,g){this.count+=1;e&&(this.changed=!0,g==b.id&&null===this.next&&(this.next=b.value),g==a.id&&(this.next=a.value));2==this.count&&(this.changed&&(this.value=this.next,this.next=null),l(this,d,this.changed),-this.changed=!1,this.count=0)};a.kids.push(this);b.kids.push(this)}var l=function(a,b,d){for(var e=a.kids,g=e.length;g--;)e[g].recv(b,d,a.id)},h=function(a){return function(b){return function(e){e=new k(function(a){return function(b){return[a,b]}},[a,e]);e=new d(function(a){return a[0]},[!0,b],e);return new k(function(a){return a[1]},[e])}}};return{constant:function(a){return new e(a)},lift:function(a){return function(b){return new k(a,[b])}},lift2:function(a){return function(b){return function(d){return new k(a,-[b,d])}}},lift3:function(a){return function(b){return function(d){return function(e){return new k(a,[b,d,e])}}}},lift4:function(a){return function(b){return function(d){return function(e){return function(g){return new k(a,[b,d,e,g])}}}}},lift5:function(a){return function(b){return function(d){return function(e){return function(g){return function(h){return new k(a,[b,d,e,g,h])}}}}}},lift6:function(a){return function(b){return function(d){return function(e){return function(g){return function(h){return function(j){return new k(a,-[b,d,e,g,h,j])}}}}}}},lift7:function(a){return function(b){return function(d){return function(e){return function(g){return function(h){return function(j){return function(l){return new k(a,[b,d,e,g,h,j,l])}}}}}}}},lift8:function(a){return function(b){return function(d){return function(e){return function(g){return function(h){return function(j){return function(l){return function(m){return new k(a,[b,d,e,g,h,j,l,m])}}}}}}}}},foldp:function(a){return function(d){return function(e){return new b(a,d,!1,-e)}}},foldp_:function(a){return function(d){return function(e){return new b(a,d,!0,e)}}},foldp1:function(a){return function(d){return new b(a,function(a){return a},!0,d)}},delay:function(a){return function(b){var d=new e(b.value),g=!0;b=new m(d,new k(function(a){return function(){return a}},[d,new k(function(b){g||setTimeout(function(){Dispatcher.notify(d.id,b)},a)},[b])]));g=!1;return b}},merge:function(a){return function(b){return new g(a,b)}},merges:function(a){return Elm.List.foldl1(function(a){return function(b){return new g(a,-b)}})(a)},average:function(a){return function(b){for(var d=Array(a),e=a;e--;)d[e]=0;var e=0,g=!1,h=0;return new k(function(b){h+=b-d[e];d[e]=b;b=h/Math.max(1,g?a:e);++e==a&&(g=!0,e=0);return b},[b])}},count:function(a){return new b(function(){return function(a){return a+1}},0,!1,a)},countIf:function(a){return function(d){return new b(function(b){return function(d){return a(b)?d+1:d}},0,!1,d)}},keepIf:function(a){return function(b){return function(e){return new d(function(b){return!a(b)},b,e)}}},dropIf:function(a){return function(b){return function(e){return new d(a,-b,e)}}},keepWhen:function(a){return h(new k(function(a){return!a},[a]))},dropWhen:h,dropRepeats:function(a){return new j(a)},sampleOn:function(a){return function(b){return new m(a,b)}},timestamp:function(b){return new a(!0,b)},timeOf:function(b){return new a(!1,b)}}}();-var Dispatcher=function(){function e(b){if(!b.hasOwnProperty("defaultNumberOfKids"))return!0;var a=b.kids.length;if(0==a)return!1;if(a>b.defaultNumberOfKids)return!0;for(var d=!1;a--;)d=d||e(b.kids[a]);return d}var k=null,b=[],d=null;return{initialize:function(){k=Elm.main();k.hasOwnProperty("recv")||(k=Elm.Signal.constant(k));d=k.value;for(var j=[],a=b.length;a--;)e(b[a])&&j.push(b[a]);b=j;document.getElementById("content").appendChild(Render.render(d));j=document.getElementById("widthChecker").offsetWidth;-j!==window.innerWidth&&Dispatcher.notify(Elm.Window.dimensions.id,Value.Tuple(j,window.innerHeight));k=Elm.Signal.lift(function(a){var b=document.getElementById("content");Render.update(b.firstChild,d,a);return d=a})(k)},notify:function(d,a){for(var e=(new window.Date).getTime(),g=!1,k=b.length;k--;)g=b[k].recv(e,d,a)||g;return g},inputs:b}}();-Elm.HTTP=function(){function e(b){return function(d){return function(e){return function(c){return{"0":"Request",length:1,verb:a.castStringToJSString(b),url:a.castStringToJSString(d),data:null===e?null:a.castStringToJSString(e),headers:c}}}}}function k(a){return e("GET")(a)(null)(["Nil"])}function b(b,e){return function(h){if(""!==h.url){var c={value:["Waiting"]};b.push(c);var f=null;window.ActiveXObject&&(f=new ActiveXObject("Microsoft.XMLHTTP"));window.XMLHttpRequest&&(f=new XMLHttpRequest);f.onreadystatechange=-function(){4===f.readyState&&(c.value=200===f.status?["Success",m(f.responseText)]:["Failure",f.status,m(f.statusText)],setTimeout(function(){d(b,e)},0))};f.open(h.verb,h.url,!0);Elm.List.map(function(b){f.setRequestHeader(a.castStringToJSString(b[1]),a.castStringToJSString(b[2]))})(h.headers);f.send(h.data)}}}function d(a,b){0<a.length&&(Dispatcher.notify(b.id,a[0].value),"Waiting"!==a[0].value[0]&&(a.shift(),setTimeout(function(){d(a,b)},0)))}function j(a){var d=Elm.Signal.constant(["Waiting"]);-a=Elm.Signal.lift(b([],d))(a);return Elm.Signal.lift2(function(a){return function(){return a}})(d)(a)}var a=Elm.JavaScript,m=Elm.JavaScript.castJSStringToString;return{get:k,post:function(a){return function(b){return e("POST")(a)(b)(["Nil"])}},request:e,send:j,sendGet:function(a){return j(Elm.Signal.lift(k)(a))}}}();-Elm.Input=function(){var e=Elm.JavaScript,k=Elm.JavaScript.castJSStringToString,b=function(a,b){a.placeholder=e.castStringToJSString(b);var d=Elm.Signal.constant(["Nil"]);Value.addListener(a,"keyup",function(){Dispatcher.notify(d.id,k(a.value));a.focus()});a.style.padding="1px";return Value.Tuple(Value.wrap(a),d)},d=function(a){a=document.createElement(a);a.style.padding="0";a.style.margin="0";return a},j=function(a){for(var b=d("select"),e=[];"Cons"===a[0];){var j=d("option"),h=Value.toText(a[1][1]);-j.value=h;j.innerHTML=h;b.appendChild(j);e.push(a[1][2]);a=a[2]}var c=Elm.Signal.constant(e[0]);Value.addListener(b,"change",function(){Dispatcher.notify(c.id,e[b.selectedIndex])});return Value.Tuple(Value.wrap(b),c)};return{textArea:function(a){return function(e){var g=d("textarea");g.rows=e;g.cols=a;return b(g,"")}},textField:function(a){var e=d("input");e.type="text";return b(e,a)},password:function(a){var e=d("input");e.type="password";return b(e,a)},checkbox:function(a){var b=d("input");b.type=-"checkbox";b.checked=a;var e=Elm.Signal.constant(a);Value.addListener(b,"change",function(){Dispatcher.notify(e.id,b.checked)});return Value.Tuple(Value.wrap(b),e)},dropDown:j,stringDropDown:function(a){return j(Elm.List.map(function(a){return Value.Tuple(a,a)})(a))},button:function(a){var b=d("input");b.type="button";b.value=e.castStringToJSString(a);var g=Elm.Signal.constant(!1);Value.addListener(b,"click",function(){Dispatcher.notify(g.id,!0);Dispatcher.notify(g.id,!1)});return Value.Tuple(Value.wrap(b),-g)}}}();-Elm.Keyboard={Raw:function(){function e(b,j){return"Nil"===j[0]?j:j[1]===b?j[2]:["Cons",j[1],e(b,j[2])]}var k=Elm.Signal.constant(["Nil"]),b=Elm.Signal.constant(["Nothing"]);Value.addListener(document,"keydown",function(b){var e;a:{for(e=k.value;"Nil"!==e[0];){if(e[1]===b.keyCode){e=!0;break a}e=e[2]}e=!1}e||Dispatcher.notify(k.id,["Cons",b.keyCode,k.value])||this.removeEventListener("keydown",arguments.callee,!1)});Value.addListener(document,"keyup",function(b){var j=e(b.keyCode,k.value);Dispatcher.notify(k.id,-j)||this.removeEventListener("keyup",arguments.callee,!1)});Value.addListener(window,"blur",function(b){Dispatcher.notify(k.id,["Nil"])||this.removeEventListener("blur",arguments.callee,!1)});Value.addListener(document,"keypress",function(d){var e=Dispatcher.notify(b.id,["Just",d.charCode||d.keyCode]);Dispatcher.notify(b.id,["Nothing"]);e||this.removeEventListener("keypress",arguments.callee,!1)});return{keysDown:k,charPressed:b}}()};-Elm.Mouse=function(){function e(a){var b=0,d=0;a||(a=window.event);if(a.pageX||a.pageY)b=a.pageX,d=a.pageY;else if(a.clientX||a.clientY)b=a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,d=a.clientY+document.body.scrollTop+document.documentElement.scrollTop;return Value.Tuple(b,d)}var k=Elm.Signal.constant(Value.Tuple(0,0));k.defaultNumberOfKids=2;var b=Elm.Signal.lift(function(a){return a[1]})(k);b.defaultNumberOfKids=0;var d=Elm.Signal.lift(function(a){return a[2]})(k);d.defaultNumberOfKids=-0;var j=Elm.Signal.constant(!1),a=Elm.Signal.constant(!1),m=Elm.Signal.constant(Value.Tuple());Value.addListener(document,"click",function(b){var d=Dispatcher.notify(a.id,!0),e=Dispatcher.notify(m.id,Value.Tuple());Dispatcher.notify(a.id,!1);!d&&!e&&this.removeEventListener("click",arguments.callee,!1)});Value.addListener(document,"mousedown",function(a){Dispatcher.notify(j.id,!0)||this.removeEventListener("mousedown",arguments.callee,!1)});Value.addListener(document,"mouseup",function(a){Dispatcher.notify(j.id,-!1)||this.removeEventListener("mouseup",arguments.callee,!1)});Value.addListener(document,"mousemove",function(a){Dispatcher.notify(k.id,e(a))||this.removeEventListener("mousemove",arguments.callee,!1)});return{position:k,x:b,y:d,isClicked:a,isDown:j,clicks:m,isClickedOn:function(a){a=Render.render(a);var b=Elm.Signal.constant(!1);Value.addListener(a,"click",function(){Dispatcher.notify(b.id,!0);Dispatcher.notify(b.id,!1)});return Value.Tuple(Value.wrap(a),b)}}}();-Elm.Random=function(){return{inRange:function(e){return function(k){return Elm.Signal.constant(Math.floor(Math.random()*(k-e+1))+e)}},randomize:function(e){return function(k){return function(b){return Elm.Signal.lift(function(){return Math.floor(Math.random()*(k-e+1))+e})(b)}}}}}();-Elm.Time=function(){function e(){return(new window.Date).getTime()}function k(b){return function(d){var j=1E3/b,a=e(),k=a,g=0,l=!0,h=Elm.Signal.constant(g),c=0;return Elm.Signal.lift2(function(b){return function(d){if(b){var n=!l&&b;c=setTimeout(function(){k=e();g=n?0:k-a;a=k;Dispatcher.notify(h.id,g)},j)}else l&&clearTimeout(c);l=b;return d}})(d)(h)}}Elm.Signal.constant(!0);return{fpsWhen:k,fps:function(b){return k(b)(Elm.Signal.constant(!0))},every:function(b){var d=Elm.Signal.constant(e());setInterval(function(){Dispatcher.notify(d.id,-e())},b);return d},delay:Elm.Signal.delay,since:function(b){return function(d){var e=Elm.Signal.count(Elm.Signal.delay(b)(d));return Elm.Signal.lift2(function(a){return function(b){return!Value.eq(a,b)}})(Elm.Signal.count(d))(e)}},after:function(b){b*=1E3;var d=Elm.Signal.constant(!1);setTimeout(function(){Dispatcher.notify(d.id,!0)},b);return d},before:function(b){b*=1E3;var d=Elm.Signal.constant(!0);setTimeout(function(){Dispatcher.notify(d.id,!1)},b);return d},hour:36E5,minute:6E4,second:1E3,ms:1,-inHours:function(b){return b/36E5},inMinutes:function(b){return b/6E4},inSeconds:function(b){return b/1E3},inMss:function(b){return b},toDate:function(b){return new window.Date(b)},read:function(b){b=window.Date.parse(b);return isNaN(b)?["Nothing"]:["Just",b]}}}();-Elm.Window=function(){var e=Elm.Signal.constant(Value.Tuple(window.innerWidth,window.innerHeight));e.defaultNumberOfKids=2;var k=Elm.Signal.lift(function(b){return b[1]})(e);k.defaultNumberOfKids=0;var b=Elm.Signal.lift(function(b){return b[2]})(e);b.defaultNumberOfKids=0;Value.addListener(window,"resize",function(b){var j=document.getElementById("widthChecker").offsetWidth;Dispatcher.notify(e.id,Value.Tuple(j,window.innerHeight))||this.removeEventListener("resize",arguments.callee,!1)});return{dimensions:e,-width:k,height:b}}();-Elm.Date=function(){var e="Sun Mon Tue Wed Thu Fri Sat".split(" "),k="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" ");return{read:function(b){b=new window.Date(Elm.JavaScript.castStringToJSString(b));return isNaN(b.getTime())?["Nothing"]:["Just",b]},year:function(b){return b.getFullYear()},month:function(b){return[k[b.getMonth()]]},day:function(b){return b.getDate()},hour:function(b){return b.getHours()},minute:function(b){return b.getMinutes()},second:function(b){return b.getSeconds()},dayOfWeek:function(b){return[e[b.getDay()]]},-toTime:function(b){return b.getTime()},Mon:["Mon"],Tue:["Tue"],Wed:["Wed"],Thu:["Thu"],Fri:["Fri"],Sat:["Sat"],Sun:["Sun"],Jan:["Jan"],Feb:["Feb"],Mar:["Mar"],Apr:["Apr"],May:["May"],Jun:["Jun"],Jul:["Jul"],Aug:["Aug"],Sep:["Sep"],Oct:["Oct"],Nov:["Nov"],Dec:["Dec"]}}();Value.addListener(document,"elm_log",function(e){console.log(e.value)});Value.addListener(document,"elm_title",function(e){document.title=e.value});-Value.addListener(document,"elm_redirect",function(e){0<e.value.length&&(window.location=e.value)});-Elm.Prelude=function(){function e(b){return function(d){if(b instanceof Array&&d instanceof Array){var j=b.length;if(j==d.length){for(var a=1;a<j;++a){var k=e(b[a])(d[a]);if("EQ"!==k[0])return k}return["EQ"]}return[1==d.length?"GT":"LT"]}return[b===d?"EQ":b<d?"LT":"GT"]}}var k=function(b){return function(d){var e=b%d,e=0==b?0:0<d?0<=b?e:e+d:-k(-b)(-d);return e==d?0:e}};return{eq:Value.eq,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(d){return b%-d}},div:function(b){return function(d){return~~(b/d)}},otherwise:!0,compare:e,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},readInt:function(b){b=Elm.JavaScript.castStringToJSString(b);var d=b.length;if(0===d)return["Nothing"];var e=0;if("-"==b[0]){if(1===d)return["Nothing"];e=1}for(;e<d;++e)if(!Elm.Char.isDigit(b[e]))return["Nothing"];return["Just",parseInt(b)]},-readFloat:function(b){b=Elm.JavaScript.castStringToJSString(b);var d=b.length;if(0===d)return["Nothing"];var e=0;if("-"==b[0]){if(1===d)return["Nothing"];e=1}for(var a=0;e<d;++e)if(!Elm.Char.isDigit(b[e])){if("."===b[e]&&(a+=1,1>=a))continue;return["Nothing"]}return["Just",parseFloat(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,atan2:function(b){return function(d){return Math.atan2(b,d)}},mod:k,min:function(b){return function(d){return Math.min(b,-d)}},max:function(b){return function(d){return Math.max(b,d)}},flip:function(b){return function(d){return function(e){return b(e)(d)}}},clamp:function(b){return function(d){return function(e){return Math.min(d,Math.max(b,e))}}},curry:function(b){return function(d){return function(e){return b(["Tuple2",d,e])}}},uncurry:function(b){return function(d){if("Tuple2"!==d[0])throw"Function was uncurry'd but was not given a pair.";return b(d[1])(d[2])}},logBase:function(b){return function(d){return Math.log(d)/-Math.log(b)}},Just:Elm.Maybe.Just,Nothing:Elm.Maybe.Nothing,maybe:Elm.Maybe.maybe,map:Elm.List.map,zip:Elm.List.zip,zipWith:Elm.List.zipWith,filter:Elm.List.filter,head:Elm.List.head,tail:Elm.List.tail,last:Elm.List.last,length:Elm.List.length,reverse:Elm.List.reverse,foldr:Elm.List.foldr,foldr1:Elm.List.foldr1,foldl:Elm.List.foldl,foldl1:Elm.List.foldl1,and:Elm.List.and,or:Elm.List.or,all:Elm.List.all,any:Elm.List.any,sum:Elm.List.sum,product:Elm.List.product,concat:Elm.List.concat,concatMap:Elm.List.concatMap,-maximum:Elm.List.maximum,minimum:Elm.List.minimum,scanl:Elm.List.scanl,scanl1:Elm.List.scanl1,take:Elm.List.take,drop:Elm.List.drop,zip:Elm.List.zip,unzip:Elm.List.unzip,lift:Elm.Signal.lift,lift2:Elm.Signal.lift2,lift3:Elm.Signal.lift3,lift4:Elm.Signal.lift4,lift5:Elm.Signal.lift5,lift6:Elm.Signal.lift6,lift7:Elm.Signal.lift7,lift8:Elm.Signal.lift8,foldp:Elm.Signal.foldp,foldp1:Elm.Signal.foldp1,foldp_:Elm.Signal.foldp_,constant:Elm.Signal.constant,merge:Elm.Signal.merge,count:Elm.Signal.count,countIf:Elm.Signal.countIf,-average:Elm.Signal.average,keepIf:Elm.Signal.keepIf,dropIf:Elm.Signal.dropIf,keepWhen:Elm.Signal.keepWhen,dropWhen:Elm.Signal.dropWhen,dropRepeats:Elm.Signal.dropRepeats,sampleOn:Elm.Signal.sampleOn,timestamp:Elm.Signal.timestamp,timeOf:Elm.Signal.timeOf}}();(function(){var e=function(e){for(var b in e)Elm.Prelude[b]=e[b]};e(Elm.Color);e(Elm.Text);e(Elm.Graphics);e(Elm.Time);show=Value.show})();-Elm.Dict=function(){function e(a){return function(b){return function(c){return function(e){return function(d){return["RBNode",a,b,c,e,d]}}}}}function k(a){a:{switch(a[0]){case "RBEmpty":throw"(min RBEmpty) is not defined";case "RBNode":switch(a[4][0]){case "RBEmpty":a=["Tuple2",a[2],a[3]];break a}a=k(a[4]);break a}throw"Non-exhaustive pattern match in case";}return a}function b(a){return function(c){var e;a:{switch(c[0]){case "RBEmpty":e=w;break a;case "RBNode":e=function(){switch(q(a)(c[2])[0]){case "EQ":return A(c[3]);-case "GT":return b(a)(c[5]);case "LT":return b(a)(c[4])}throw"Non-exhaustive pattern match in case";}();break a}throw"Non-exhaustive pattern match in case";}return e}}function d(a){return function(b){return function(c){var e;a:{switch(c[0]){case "RBEmpty":e=a;break a;case "RBNode":e=function(){switch(q(b)(c[2])[0]){case "EQ":return c[3];case "GT":return d(a)(b)(c[5]);case "LT":return d(a)(b)(c[4])}throw"Non-exhaustive pattern match in case";}();break a}throw"Non-exhaustive pattern match in case";-}return e}}}function j(a){return function(c){return F(b(a)(c))}}function a(a){a:{switch(a[0]){case "RBNode":switch(a[5][0]){case "RBNode":a=e(a[1])(a[5][2])(a[5][3])(e(B)(a[2])(a[3])(a[4])(a[5][4]))(a[5][5]);break a}}throw"rotateLeft of a node without enough children";}return a}function m(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBNode":a=e(a[1])(a[4][2])(a[4][3])(a[4][4])(e(B)(a[2])(a[3])(a[4][5])(a[5]));break a}}throw"rotateRight of a node without enough children";}return a}function g(a){a:{switch(a[0]){case "Black":a=-B;break a;case "Red":a=E;break a}throw"Non-exhaustive pattern match in case";}return a}function l(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBNode":switch(a[5][0]){case "RBNode":a=e(g(a[1]))(a[2])(a[3])(e(g(a[4][1]))(a[4][2])(a[4][3])(a[4][4])(a[4][5]))(e(g(a[5][1]))(a[5][2])(a[5][3])(a[5][4])(a[5][5]));break a}}}throw"color_flip called on a RBEmpty or RBNode with a RBEmpty child";}return a}function h(b){a:switch(b[0]){case "RBNode":switch(b[5][0]){case "RBNode":switch(b[5][1][0]){case "Red":b=-a(b);break a}}}a:switch(b[0]){case "RBNode":switch(b[4][0]){case "RBNode":switch(b[4][1][0]){case "Red":switch(b[4][4][0]){case "RBNode":switch(b[4][4][1][0]){case "Red":b=m(b);break a}}}}}a:switch(b[0]){case "RBNode":switch(b[4][0]){case "RBNode":switch(b[4][1][0]){case "Red":switch(b[5][0]){case "RBNode":switch(b[5][1][0]){case "Red":b=l(b);break a}}}}}return b}function c(a){a:switch(a[0]){case "RBNode":switch(a[1][0]){case "Red":a=e(E)(a[2])(a[3])(a[4])(a[5]);break a}}return a}function f(a){return function(b){return function(d){var f=-function(c){var d;a:{switch(c[0]){case "RBEmpty":d=e(B)(a)(b)(z)(z);break a;case "RBNode":d=function(){switch(q(a)(c[2])[0]){case "EQ":return e(c[1])(c[2])(b)(c[4])(c[5]);case "GT":return e(c[1])(c[2])(c[3])(c[4])(f(c[5]));case "LT":return e(c[1])(c[2])(c[3])(f(c[4]))(c[5])}throw"Non-exhaustive pattern match in case";}();d=h(d);break a}throw"Non-exhaustive pattern match in case";}return d};return c(f(d))}}}function v(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBNode":switch(a[4][1][0]){case "Red":a=-!0;break a}}}a=!1}return a}function n(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBNode":switch(a[4][4][0]){case "RBNode":switch(a[4][4][1][0]){case "Red":a=!0;break a}}}}a=!1}return a}function p(b){if(x(v(b))&&x(n(b))){b=l(b);a:switch(b[0]){case "RBNode":b:switch(b[5][0]){case "RBNode":switch(b[5][4][0]){case "RBNode":switch(b[5][4][1][0]){case "Red":b=l(a(e(b[1])(b[2])(b[3])(b[4])(m(b[5]))));break b}}}break a}}return b}function r(a){return function(b){var d=function(b){a:{switch(b[0]){case "RBEmpty":b=-z;break a;case "RBNode":if("LT"===q(a)(b[2])[0])b:{b=p(b);switch(b[0]){case "RBEmpty":throw"delLT on RBEmpty";case "RBNode":b=h(e(b[1])(b[2])(b[3])(d(b[4]))(b[5]));break b}break}else{var f=v(b)?m(b):b,g;b:{switch(f[0]){case "RBNode":switch(f[5][0]){case "RBEmpty":g=D(a,f[2]);break b}}g=!1}if(g)b=f[4];else{f=x;b:{switch(b[0]){case "RBNode":switch(b[5][0]){case "RBNode":switch(b[5][1][0]){case "Red":g=!0;break b}}}g=!1}if(f=f(g)){f=x;b:{switch(b[0]){case "RBNode":switch(b[5][0]){case "RBNode":switch(b[5][4][0]){case "RBNode":switch(b[5][4][1][0]){case "Red":g=-!0;break b}}}}g=!1}f=f(g)}f&&(b=l(b),b=n(b)?l(m(b)):b);b:{switch(b[0]){case "RBNode":f=D(a,b[2]);break b}f=!1}if(f)b:{switch(b[0]){case "RBEmpty":throw"delEQ called on a RBEmpty";case "RBNode":g=k(b[5]);c:{switch(g[0]){case "Tuple2":f=g[1];break c}break}c:{switch(g[0]){case "Tuple2":g=g[2];break c}break}var f=e(b[1])(f)(g)(b[4]),j=function(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBEmpty":a=z;break a}}b:{a=p(a);switch(a[0]){case "RBEmpty":a=z;break b;case "RBNode":a=h(e(a[1])(a[2])(a[3])(j(a[4]))(a[5]));-break b}throw"Non-exhaustive pattern match in case";}}return a};b=c(j(b[5]));b=h(f(b));break b}break}else b:{switch(b[0]){case "RBEmpty":throw"delGT called on a RBEmpty";case "RBNode":b=h(e(b[1])(b[2])(b[3])(b[4])(d(b[5])));break b}break}}}break a}throw"Non-exhaustive pattern match in case";}return b};return j(a)(b)?c(d(b)):b}}function y(a){return function(b){a:{switch(b[0]){case "RBEmpty":b=z;break a;case "RBNode":b=e(b[1])(b[2])(a(b[3]))(y(a)(b[4]))(y(a)(b[5]));break a}throw"Non-exhaustive pattern match in case";-}return b}}function s(a){return function(b){return function(c){a:{switch(c[0]){case "RBEmpty":c=b;break a;case "RBNode":c=s(a)(a(c[2])(c[3])(s(a)(b)(c[4])))(c[5]);break a}throw"Non-exhaustive pattern match in case";}return c}}}function u(a){return function(b){return function(c){a:{switch(c[0]){case "RBEmpty":c=b;break a;case "RBNode":c=u(a)(a(c[2])(c[3])(u(a)(b)(c[5])))(c[4]);break a}throw"Non-exhaustive pattern match in case";}return c}}}var q=Elm.Prelude.compare,t=Elm.Prelude.uncurry,w=Elm.Prelude.Nothing,-A=Elm.Prelude.Just,x=Elm.Prelude.not,D=Elm.Prelude.eq,F=Elm.Maybe.isJust,B=["Red"],E=["Black"],z=["RBEmpty"],C=z;return{$op:{},empty:C,lookup:b,findWithDefault:d,member:j,insert:f,singleton:function(a){return function(b){return f(a)(b)(z)}},remove:r,map:y,foldl:s,foldr:u,union:function(a){return function(b){return s(f)(b)(a)}},intersect:function(a){return function(b){return s(function(a){return function(c){return function(d){return j(a)(b)?f(a)(c)(d):d}}})(C)(a)}},diff:function(a){return function(b){return s(function(a){return function(){return function(b){return r(a)(b)}}})(a)(b)}},-keys:function(a){return u(function(a){return function(){return function(b){return["Cons",a,b]}}})(["Nil"])(a)},values:function(a){return u(function(){return function(a){return function(b){return["Cons",a,b]}}})(["Nil"])(a)},toList:function(a){return u(function(a){return function(b){return function(c){return["Cons",["Tuple2",a,b],c]}}})(["Nil"])(a)},fromList:function(a){return Elm.List.foldl(t(f))(C)(a)}}}();-Elm.Set=function(){var e=Elm.Dict.empty,k=Elm.Dict.remove,b=Elm.Dict.member,d=Elm.Dict.union,j=Elm.Dict.intersect,a=Elm.Dict.diff,m=Elm.Dict.keys,g=Elm.List.foldl(function(a){return function(b){return Elm.Dict.insert(a)(["Tuple0"])(b)}})(e);return{empty:e,singleton:function(a){return Elm.Dict.singleton(a)(["Tuple0"])},insert:function(a){return Elm.Dict.insert(a)(["Tuple0"])},remove:k,member:b,union:d,intersect:j,diff:a,toList:m,fromList:g,foldl:function(a){return Elm.Dict.foldl(function(b){return function(){return function(c){return a(b)(c)}}})},-foldr:function(a){return Elm.Dict.foldr(function(b){return function(){return function(c){return a(b)(c)}}})},map:function(a){return function(b){b=m(b);return g(Elm.List.map(a)(b))}}}}();-(function(){try{var e={};for(this.i in Elm)eval("var "+this.i+"=Elm[this.i];");if(Elm.Automaton)throw"Module name collision, 'Automaton' is already defined.";Elm.Automaton=function(){function b(a){return["Automaton",a]}function d(a){return b(function(b){var c=unzip(map(function(a){a:{switch(a[0]){case "Automaton":a=a[1](b);break a}throw"Non-exhaustive pattern match in case";}return a})(a)),e;a:{switch(c[0]){case "Tuple2":e=c[1];break a}throw"Non-exhaustive pattern match in case";}a:{switch(c[0]){case "Tuple2":c=-c[2];break a}throw"Non-exhaustive pattern match in case";}return["Tuple2",e,d(c)]})}function j(a){return b(function(b){return["Tuple2",a(b),j(a)]})}function a(c){return function(d){return b(function(b){b=d(b)(c);return["Tuple2",b,a(b)(d)]})}}function k(a){return function(c){return b(function(b){var d=c(b)(a);a:{switch(d[0]){case "Tuple2":b=d[1];break a}throw"Non-exhaustive pattern match in case";}a:{switch(d[0]){case "Tuple2":d=d[2];break a}throw"Non-exhaustive pattern match in case";}return["Tuple2",-b,k(d)(c)]})}}function g(a){return function(b){a:{switch(a[0]){case "Tuple2":b:{switch(b[0]){case "Tuple2":b=["Tuple2",a[1]-b[1],a[2]-b[2]];break b}break}break a}throw"Non-exhaustive pattern match in case";}return b}}function l(a){return function(b){var c;a:{switch(a[0]){case "Tuple2":b:{switch(b[0]){case "Tuple2":var d=function(a){return["Tuple2",b[2],["Tuple2",a,b[2]]]};c=function(){switch(b[1][0]){case "DragFrom":var c;a[1]?c=["Tuple2",uncurry(move)(g(a[2])(b[1][1]))(b[2]),["Tuple2",["DragFrom",-b[1][1]],b[2]]]:(c=uncurry(move)(g(a[2])(b[1][1]))(b[2]),c=["Tuple2",c,["Tuple2",f,c]]);return c;case "Ignore":return d(a[1]?v:f);case "Listen":return d(not(a[1])?f:isWithin(a[2])(b[2])?["DragFrom",a[2]]:v)}throw"Non-exhaustive pattern match in case";}();break b}break}break a}throw"Non-exhaustive pattern match in case";}return c}}try{if(!(Elm.Prelude instanceof Object))throw"module not found";}catch(h){throw"Module 'Prelude' is missing. Compile with --make flag or load missing module in a separate JavaScript file.";-}var c={};for(this.i in Elm.Prelude)c[this.i]||eval("var "+this.i+" = Elm.Prelude[this.i];");var f=["Listen"],v=["Ignore"];e[">>>"]=function(a){return function(c){var d;a:{switch(a[0]){case "Automaton":d=a[1];break a}throw"Non-exhaustive pattern match in case";}var f;a:{switch(c[0]){case "Automaton":f=c[1];break a}throw"Non-exhaustive pattern match in case";}return b(function(a){a=d(a);var b;a:{switch(a[0]){case "Tuple2":b=a[1];break a}throw"Non-exhaustive pattern match in case";}a:{switch(a[0]){case "Tuple2":a=-a[2];break a}throw"Non-exhaustive pattern match in case";}var c=f(b);a:{switch(c[0]){case "Tuple2":b=c[1];break a}throw"Non-exhaustive pattern match in case";}a:{switch(c[0]){case "Tuple2":c=c[2];break a}throw"Non-exhaustive pattern match in case";}return["Tuple2",b,e[">>>"](a)(c)]})}};e["<<<"]=function(a){return function(b){return e[">>>"](b)(a)}};e["^>>"]=function(a){return function(b){return e[">>>"](j(a))(b)}};e[">>^"]=function(a){return function(b){return e[">>>"](a)(j(b))}};e["^<<"]=function(a){return function(b){return e[">>>"](b)(j(a))}};-e["<<^"]=function(a){return function(b){return e[">>>"](j(b))(a)}};c=a(0)(function(){return function(a){return 1+a}});return{$op:{">>>":e[">>>"],"<<<":e["<<<"],"^>>":e["^>>"],">>^":e[">>^"],"^<<":e["^<<"],"<<^":e["<<^"]},run:function(a){return function(b){a:{switch(a[0]){case "Automaton":b=lift(fst)(foldp_(function(a){return function(b){a:{switch(b[0]){case "Tuple2":switch(b[2][0]){case "Automaton":b=b[2][1](a);break a}}throw"Non-exhaustive pattern match in case";}return b}})(a[1])(b));break a}throw"Non-exhaustive pattern match in case";-}return b}},step:function(a){return function(b){a:{switch(a[0]){case "Automaton":b=a[1](b);break a}throw"Non-exhaustive pattern match in case";}return b}},combine:d,pure:j,init:a,init_:k,count:c,draggable:function(a){return k(["Tuple2",f,a])(l)}}}();Elm.main=function(){return Elm.Automaton.main}}catch(k){Elm.main=function(){document.body.innerHTML=Elm.Text.monospace('<br/><h2>Your browser may not be supported. Are you using a modern browser?</h2><br/><span style="color:grey">Runtime Error in Automaton module:<br/>'+-k+"</span>");throw k;}}})();
src/Gen/CompileToJS.hs view
@@ -67,8 +67,8 @@ [ concatMap (\n -> globalAssign n $ n ++ " || {}") . map (intercalate ".") . drop 2 . inits $ take (length modNames - 1) modNames- , "\nif (" ++ modName ++ ") throw \"Module name collision, '" ++- intercalate "." (tail modNames) ++ "' is already defined.\"; "+ , "\nif (" ++ modName ++ ") throw new Error(\"Module name collision, '" +++ intercalate "." (tail modNames) ++ "' is already defined.\"); " , globalAssign modName $ jsFunc "" (defs ++ includes ++ body ++ export) ++ "()" , mainEquals $ modName ++ ".main" ] where modNames = if null names then ["Elm", "Main"]@@ -102,7 +102,7 @@ jsImport (modul, how) =- concat [ "\ntry{\n if (!(" ++ modul ++ " instanceof Object)) throw 'module not found';\n} catch(e) {\n throw (\"Module '"+ concat [ "\ntry{\n if (!(" ++ modul ++ " instanceof Object)) throw new Error('module not found');\n} catch(e) {\n throw new Error(\"Module '" , drop 1 (dropWhile (/='.') modul) , "' is missing. Compile with --make flag or load missing " , "module in a separate JavaScript file.\");\n}" ] ++@@ -242,8 +242,7 @@ Markdown doc -> return $ "text('" ++ pad ++ md ++ pad ++ "')" where pad = "<div style=\"height:0;width:0;\"> </div>"- md = formatMarkdown $- Pan.writeHtmlString Pan.defaultWriterOptions doc+ md = formatMarkdown $ Pan.writeHtmlString Pan.def doc formatMarkdown = concatMap f where f '\'' = "\\'"@@ -253,8 +252,8 @@ multiIfToJS span ps = format `liftM` mapM f ps where format cs = foldr (\c e -> parens $ c ++ " : " ++ e) err cs- err = concat [ "(function(){throw \"Non-exhaustive "- , "multi-way-if expression (", show span, ")\";}())" ]+ err = concat [ "(function(){throw new Error(\"Non-exhaustive "+ , "multi-way-if expression (", show span, ")\");}())" ] f (b,e) = do b' <- toJS' b e' <- toJS' e return (b' ++ " ? " ++ e')@@ -282,8 +281,8 @@ cases <- concat `liftM` mapM (clauseToJS span name) clauses finally <- matchToJS span def return $ concat [ "\nswitch(", name, "[0]){", indent cases, "\n}", finally ]-matchToJS span Fail = return ("\nthrow \"Non-exhaustive pattern match " ++- "in case expression (" ++ show span ++ ")\";")+matchToJS span Fail = return ("\nthrow new Error(\"Non-exhaustive pattern match " +++ "in case expression (" ++ show span ++ ")\");") matchToJS span Break = return "break;" matchToJS span (Other e) = ret `liftM` toJS' e matchToJS span (Seq ms) = concat `liftM` mapM (matchToJS span) ms
src/Gen/ExtractNoscript.hs view
@@ -48,7 +48,7 @@ Var _ -> [] Case e cases -> concatMap (f . snd) cases Data _ es -> concatMap f es - Markdown doc -> [ Pan.writeHtmlString Pan.defaultWriterOptions doc ] + Markdown doc -> [ Pan.writeHtmlString Pan.def doc ] _ -> [] linkExtract src txt =
src/Parse/Expr.hs view
@@ -61,7 +61,7 @@ listTerm = (do { try $ string "[markdown|" ; md <- filter (/='\r') <$> manyTill anyChar (try $ string "|]")- ; return . Markdown $ Pan.readMarkdown Pan.defaultParserState md })+ ; return . Markdown $ Pan.readMarkdown Pan.def md }) <|> (braces $ choice [ try $ do { lo <- expr; whitespace; string ".." ; whitespace ; Range lo <$> expr }
src/Parse/Patterns.hs view
@@ -55,11 +55,11 @@ PVar x -> return $ fn x body PData name ps -> do x <- guid- let a = 'a' : show x+ let a = '_' : show x return . fn a . ctx $ Case (ctx (Var a)) [(pattern, body)] PRecord fs -> do x <- guid- let a = 'a' : show x+ let a = '_' : show x toDef f = FnDef f [] (ctx $ Access (ctx $ Var a) f) return . fn a . ctx $ Let (map toDef fs) body @@ -89,7 +89,7 @@ let ctx = C t s in case p of PData _ ps -> do x <- guid- let v = 'a' : show x+ let v = '_' : show x dss <- mapM (matchSingle p . ctx $ Var v) ps return (FnDef v [] exp : concat dss) @@ -97,7 +97,7 @@ return [ FnDef x [] (ctx $ Case exp [(pat, ctx $ Var x)]) ] PRecord fs -> do- a <- (\x -> 'a' : show x) `liftM` guid+ a <- (\x -> '_' : show x) `liftM` guid let toDef f = FnDef f [] (ctx $ Access (ctx $ Var a) f) return (FnDef a [] exp : map toDef fs)
src/Rename.hs view
@@ -109,7 +109,7 @@ _ -> return expr -deprime = map (\c -> if c == '\'' then '_' else c)+deprime = map (\c -> if c == '\'' then '$' else c) extend :: (String -> String) -> String -> GuidCounter (String, String -> String) extend env x = do
src/Types/Hints.hs view
@@ -168,6 +168,7 @@ , "timeOf" -:: signalOf a ==> signalOf time , "merge" -:: signalOf a ==> signalOf a ==> signalOf a , "merges" -:: listOf (signalOf a) ==> signalOf a+ , "mergeEither" -:: signalOf a ==> signalOf b ==> signalOf (eitherOf a b) , numScheme (\n -> int ==> signalOf n ==> signalOf float) "average" ] @@ -184,9 +185,7 @@ response t = ADT "Response" [t] concreteSignals = - [ "Keyboard.Raw.keysDown" -: signalOf (listOf int)- , "Keyboard.Raw.charPressed" -: signalOf (maybeOf int)- , "Random.inRange" -: int ==> int ==> signalOf int+ [ "Random.inRange" -: int ==> int ==> signalOf int , "Random.randomize" -:: int ==> int ==> signalOf a ==> signalOf int , "Window.dimensions" -: signalOf point , "Window.width" -: signalOf int@@ -206,10 +205,27 @@ , "Input.dropDown" -:: listOf (tupleOf [string,a]) ==> tupleOf [element, signalOf a] ] +keyboards = prefix "Keyboard"+ [ "Raw.keysDown" -: signalOf (listOf int)+ , "Raw.charPressed" -: signalOf (maybeOf int)+ , "arrows" -: signalOf (recordOf [("x",int),("y",int)])+ , "wasd" -: signalOf (recordOf [("x",int),("y",int)])+ , "ctrl" -: signalOf bool+ , "space" -: signalOf bool+ , "shift" -: signalOf bool+ ]++touches = prefix "Touch"+ [ "touches" -: signalOf (listOf (recordOf [("x" ,int) ,("y" ,int)+ ,("x0",int) ,("y0",int)+ ,("t0",time),("id",int)]))+ , "taps" -: signalOf (recordOf [("x",int),("y",int)])+ ]+ times = prefix "Time"- [ "fps" -: number ==> signalOf time+ [ numScheme (\n -> n ==> signalOf time) "fps"+ , numScheme (\n -> n ==> signalOf bool ==> signalOf time) "fpsWhen" , "every" -: time ==> signalOf time- , "fpsWhen" -: number ==> signalOf bool ==> signalOf time , "delay" -:: time ==> signalOf a ==> signalOf a , "since" -:: time ==> signalOf a ==> signalOf bool , "hour" -: time@@ -303,6 +319,8 @@ , "Nil" -:: listOf a , "Just" -:: a ==> maybeOf a , "Nothing" -:: maybeOf a+ , "Left" -:: a ==> eitherOf a b+ , "Right" -:: b ==> eitherOf a b , "curry" -:: (tupleOf [a,b] ==> c) ==> a ==> b ==> c , "uncurry" -:: (a ==> b ==> c) ==> tupleOf [a,b] ==> c ] ++ map tuple [0..8]@@ -347,12 +365,19 @@ [ "maybe" -:: b ==> (a ==> b) ==> maybeOf a ==> b , "isJust" -:: maybeOf a ==> bool , "isNothing" -:: maybeOf a ==> bool- , "fromMaybe" -:: a ==> maybeOf a ==> a- , "consMaybe" -:: maybeOf a ==> listOf a ==> listOf a- , "catMaybes" -:: listOf (maybeOf a) ==> listOf a- , "catMaybes" -:: (a ==> maybeOf b) ==> listOf a ==> listOf b+ , "cons" -:: maybeOf a ==> listOf a ==> listOf a+ , "justs" -:: listOf (maybeOf a) ==> listOf a ] +eithers = prefix "Either"+ [ "isLeft" -:: eitherOf a b ==> bool+ , "isRight" -:: eitherOf a b ==> bool+ , "either" -:: (a ==> c) ==> (b ==> c) ==> eitherOf a b ==> c+ , "lefts" -:: listOf (eitherOf a b) ==> listOf a+ , "rights" -:: listOf (eitherOf a b) ==> listOf b+ , "partition" -:: listOf (eitherOf a b) ==> tupleOf [listOf a,listOf b]+ ]+ dictionary = let dict k v = ADT "Dict" [k,v] in prefix "Dict"@@ -410,9 +435,9 @@ -------- Everything -------- -hints = mapM (\(n,s) -> (,) n `liftM` rescheme s) hs- where hs = concat [ funcs, lists, signals, math, bools, textAttrs- , graphicsElement, graphicsColor- , concreteSignals, javascript, json, maybeFuncs- , http, dictionary, sets, automaton, times, dates- ]+hints = mapM (\(n,s) -> (,) n `liftM` rescheme s) (concat hs)+ where hs = [ funcs, lists, signals, math, bools, textAttrs+ , graphicsElement, graphicsColor, eithers, keyboards, touches+ , concreteSignals, javascript, json, maybeFuncs+ , http, dictionary, sets, automaton, times, dates+ ]
src/Types/Types.hs view
@@ -28,6 +28,9 @@ recordT fields = foldl (\r (x,t) -> Map.insertWith (++) x [t] r) Map.empty fields +recordOf :: [(String,Type)] -> Type+recordOf fields = RecordT (recordT fields) EmptyRecord+ tipe t = ADT t [] int = tipe "Int"@@ -58,6 +61,7 @@ signalOf t = ADT "Signal" [t] tupleOf ts = ADT ("Tuple" ++ show (length ts)) ts maybeOf t = ADT "Maybe" [t]+eitherOf a b = ADT "Maybe" [a,b] pairOf t = tupleOf [t,t] point = pairOf int appendable t = Super (Set.fromList [ string, text, listOf t ])