on d178521 help sign in
elk/core-js/foreign/JavaScript.js
72 lines 2.1 kB history raw
2var Foreign = function() {
3 var JavaScript = function() {
4 function castJSBoolToBool(b) { return b; }
5 function castBoolToJSBool(b) { return b; }
7 function castJSNumberToFloat(n) { return n; }
8 function castFloatToJSNumber(n) { return n; }
10 function castJSNumberToInt(n) { return ~~n; }
11 function castIntToJSNumber(n) { return n; }
13 function castJSElementToElement(w) {
14 return function(h) {
15 return function(node) {
16 return ["Element",Guid.guid(),
17 ["EExternalHtml",node],
18 w,h,1,Nothing,Nothing];
19 }
20 }
21 }
22 function castElementToJSElement(elem) { return Render.render(elem); }
24 function castJSArrayToList(arr) {
25 var list = ["Nil"];
26 for (var i = arr.length; i--; ) {
27 list = [ "Cons", arr[i], list ];
28 }
29 return list;
30 }
31 function castListToJSArray(list) {
32 var a = [];
33 while (list[0] === "Cons") {
34 a.push(list[1]);
35 list = list[2];
36 }
37 return a;
38 }
40 var castJSStringToString = castJSArrayToList;
41 function castStringToJSString(str) {
42 if (typeof str === "string") return str;
43 return castListToJSArray(str).join('');
44 }
46 function fromTuple(t) { return t.slice(1); }
47 function toTuple(a) { return ["Tuple" + a.length].concat(a); }
49 return {castJSBoolToBool:castJSBoolToBool,
50 castBoolToJSBool:castBoolToJSBool,
51 castJSNumberToFloat:castJSNumberToFloat,
52 castFloatToJSNumber:castFloatToJSNumber,
53 castJSNumberToInt:castJSNumberToInt,
54 castIntToJSNumber:castIntToJSNumber,
55 Experimental : {castJSElementToElement:castJSElementToElement,
56 castElementToJSElement:castElementToJSElement},
57 castJSArrayToList:castJSArrayToList,
58 castListToJSArray:castListToJSArray,
59 castJSStringToString:castJSStringToString,
60 castStringToJSString:castStringToJSString,
61 castTupleToJSTuple2:fromTuple,
62 castTupleToJSTuple3:fromTuple,
63 castTupleToJSTuple4:fromTuple,
64 castTupleToJSTuple5:fromTuple,
65 castJSTupleToTuple2:toTuple,
66 castJSTupleToTuple3:toTuple,
67 castJSTupleToTuple4:toTuple,
68 castJSTupleToTuple5:toTuple
69 };
70 }();
71 return {JavaScript:JavaScript};
72}();