@@ -9,57 +9,60 @@ Elm.Native.JavaScript = function(elm) {
9 var Render = ElmRuntime.use(ElmRuntime.Render.Element);
9 var Render = ElmRuntime.use(ElmRuntime.Render.Element);
11 function fromJS(v) {
11 function fromJS(v) {
12− var type = typeof v;
12+ var type = typeof v;
13− if (type === 'number' ) return v;
13+ if (type === 'number' ) return v;
14− if (type === 'boolean') return v;
14+ if (type === 'boolean') return v;
15− if (type === 'string' ) return List.fromArray(v);
15+ if (type === 'string' ) return List.fromArray(v);
16− if (v instanceof Array) {
16+ if (v instanceof Array) {
17− var arr = [];
17+ var arr = [];
18− var len = v.length;
18+ var len = v.length;
19− for (var i = 0; i < len; ++i) {
19+ for (var i = 0; i < len; ++i) {
20− var x = fromJS(v[i]);
20+ var x = fromJS(v[i]);
21− if (x !== null) arr.push(x);
21+ if (x !== null) arr.push(x);
23+ return List.fromArray(arr);
23− return List.fromArray(arr);
25− if (type === 'object') {
25+ if (type === 'object') {
26− var rec = { _:{} };
26+ var rec = { _:{} };
27− for (var f in v) {
27+ for (var f in v) {
28− var x = fromJS(v[f]);
28+ var x = fromJS(v[f]);
29− if (x !== null) rec[f] = x;
29+ if (x !== null) rec[f] = x;
31− return rec;
33+ return null;
36 function toJS(v) {
36 function toJS(v) {
37− var type = typeof v;
37+ var type = typeof v;
38− if (type === 'number' || type === 'boolean') return v;
38+ if (type === 'number' || type === 'boolean') return v;
39− if (type === 'object' && '_' in v) {
39+ if (type === 'object' && '_' in v) {
40− var obj = {};
40+ var obj = {};
41− for (var k in v) {
41+ for (var k in v) {
42− var x = v[k];
42+ var x = toJS(v[k]);
43− if (x !== null) obj[k] = x;
43+ if (x !== null) obj[k] = x;
45− return obj;
45+ return obj;
47− if (type === 'object' && (v.ctor === 'Cons' || v.ctor === 'Nil')) {
47+ if (type === 'object' && (v.ctor === 'Cons' || v.ctor === 'Nil')) {
48− var array = List.toArray(v);
48+ var array = List.toArray(v);
49− for (var i = array.length; i--; ) {
50− array[i] = toJS(array[i]);
52− if (typeof array[0] === 'string') array.join('');
49+ if (typeof array[0] === 'string') {
50+ array = array.join('');
52+ for (var i = array.length; i--; ) {
53+ array[i] = toJS(array[i]);
53− return array;
56+ return array;
55− return null;
58+ return null;
58 function fromRecord(r) {
61 function fromRecord(r) {
59− if (typeof r === 'object' && '_' in r) {
62+ if (typeof r === 'object' && '_' in r) {
60− return toJS(r);
63+ return toJS(r);
62− throw new Error("'fromRecord' must be called on a record.");
65+ throw new Error("'fromRecord' must be called on a record.");
65 function id(n) { return n; }
68 function id(n) { return n; }
@@ -99,4 +102,4 @@ Elm.Native.JavaScript = function(elm) {
99 fromRecord : fromRecord
102 fromRecord : fromRecord