elm/core-js/Prelude.js
2013-01-29 12:47:55 -08:00

210 lines
6.1 KiB
JavaScript

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 new Error("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;
}());