on master help sign in
Merge branch 'dev' of https://github.com/evancz/Elm into dev
0bee205evancz
libraries/Native/JavaScript.js+48−45
@@ -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);
10
10
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);
22+ }
23+ return List.fromArray(arr);
22 }
24 }
23− return List.fromArray(arr);
24− }
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;
30+ }
31+ return rec;
30 }
32 }
31− return rec;
33+ return null;
32− }
33− return null;
34 }
34 }
35
35
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;
44− }
44+ }
45− return obj;
45+ return obj;
46− }
46+ }
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]);
51− }
52− if (typeof array[0] === 'string') array.join('');
49+ if (typeof array[0] === 'string') {
50+ array = array.join('');
51+ } else {
52+ for (var i = array.length; i--; ) {
53+ array[i] = toJS(array[i]);
54+ }
55+ }
53− return array;
56+ return array;
54− }
57+ }
55− return null;
58+ return null;
56 }
59 }
57−
60+
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);
61− }
64+ }
62− throw new Error("'fromRecord' must be called on a record.");
65+ throw new Error("'fromRecord' must be called on a record.");
63 }
66 }
64
67
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
100 };
103 };
101
104
102−};
105+};