on 727d708 help sign in
elk/libraries/Native/Basics.js
108 lines 2.6 kB history raw
2Elm.Native.Basics = function(elm) {
3 'use strict';
4 if (elm.Native.Basics) return elm.Native.Basics;
6 var JS = Elm.JavaScript(elm);
7 var Maybe = Elm.Maybe(elm);
8 var Utils = Elm.Native.Utils(elm);
9 var Char = Elm.Char(elm);
11 function div(a,b) { return (a/b)|0; }
12 function rem(a,b) { return a % b; }
13 var mod = Utils.mod;
14 function abs(x) { return x < 0 ? -x : x; }
15 function logBase(base,n) { return Math.log(n) / Math.log(base); }
16 function min(a,b) { return Utils.cmp(a,b) < 0 ? a : b; }
17 function max(a,b) { return Utils.cmp(a,b) > 0 ? a : b; }
18 function clamp(lo,hi,n) {
19 return Utils.cmp(n,lo) < 0 ? lo : Utils.cmp(n,hi) > 0 ? hi : n; }
20 function xor(a,b) { return a !== b; }
21 function not(b) { return !b; }
23 function truncate(n) { return n|0; }
25 function curry(f,a,b) { return f(Utils.Tuple2(a,b)); }
26 function uncurry(f,v) { return A2(f,v._0,v._1); }
27 function fst(t) { return t._0; }
28 function snd(t) { return t._1; }
30 function readInt(str) {
31 var s = JS.fromString(str);
32 var len = s.length;
33 if (len === 0) { return Maybe.Nothing; }
34 var start = 0;
35 if (s[0] == '-') {
36 if (len === 1) { return Maybe.Nothing; }
37 start = 1;
38 }
39 for (var i = start; i < len; ++i) {
40 if (!Char.isDigit(s[i])) { return Maybe.Nothing; }
41 }
42 return Maybe.Just(parseInt(s, 10));
43 }
45 function readFloat(str) {
46 var s = JS.fromString(str);
47 var len = s.length;
48 if (len === 0) { return Maybe.Nothing; }
49 var start = 0;
50 if (s[0] == '-') {
51 if (len === 1) { return Maybe.Nothing; }
52 start = 1;
53 }
54 var dotCount = 0;
55 for (var i = start; i < len; ++i) {
56 if (Char.isDigit(s[i])) { continue; }
57 if (s[i] === '.') {
58 dotCount += 1;
59 if (dotCount <= 1) { continue; }
60 }
61 return Maybe.Nothing;
62 }
63 return Maybe.Just(parseFloat(s));
64 }
66 var basics = {
67 div:F2(div),
68 rem:F2(rem),
69 mod:mod,
71 pi:Math.PI,
72 e:Math.e,
73 cos:Math.cos,
74 sin:Math.sin,
75 tan:Math.tan,
76 acos:Math.acos,
77 asin:Math.asin,
78 atan:Math.atan,
79 atan2:F2(Math.atan2),
81 sqrt:Math.sqrt,
82 abs:abs,
83 logBase:F2(logBase),
84 min:F2(min),
85 max:F2(max),
86 clamp:F3(clamp),
87 compare:Utils.compare,
89 xor:F2(xor),
90 not:not,
92 truncate:truncate,
93 ceiling:Math.ceil,
94 floor:Math.floor,
95 round:Math.round,
96 toFloat:function(x) { return x; },
98 readInt:readInt,
99 readFloat:readFloat,
101 curry:F3(curry),
102 uncurry:F2(uncurry),
103 fst:fst,
104 snd:snd
105 };
107 return elm.Native.Basics = basics;
108};