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