on master help sign in
Fix `show` for ADTs and get parens in the right places.
60e403bevancz
libraries/Native/Show.js+8−4
@@ -86,12 +86,16 @@ Elm.Native.Show = function(elm) {
86 name = "Set";
86 name = "Set";
87 list = A2(List.map, function(x){return x._0}, list);
87 list = A2(List.map, function(x){return x._0}, list);
88 }
88 }
89− return "(" + name + ".fromList " + toString(list) + ")";
89+ return name + ".fromList " + toString(list);
90 } else {
90 } else {
91 var output = "";
91 var output = "";
92− for (var i = v.length; --i; ) { output = ' ' + toString(v[i]) + output; }
92+ for (var i in v) {
93− output = v.ctor + output;
93+ if (i === 'ctor') continue;
94− return (v.length > 1) ? "(" + output + ")" : output;
94+ var str = toString(v[i]);
95+ var parenless = str[0] === '{' || str.indexOf(' ') < 0;
96+ output += ' ' + (parenless ? str : '(' + str + ')');
97+ }
98+ return v.ctor + output;
95 }
99 }
96 }
100 }
97 return v+"";
101 return v+"";
libraries/Native/Signal/Window.js+3−4
@@ -14,16 +14,15 @@ Elm.Native.Window = function(elm) {
14
14
15 // Do not move width and height into Elm. By setting the default number of kids,
15 // Do not move width and height into Elm. By setting the default number of kids,
16 // the resize listener can be detached.
16 // the resize listener can be detached.
17− var width = A2(Signal.lift, function(p){return p._0}, dimensions);
17+ var width = A2(Signal.lift, function(p){console.log(p._0); return p._0}, dimensions);
18 width.defaultNumberOfKids = 0;
18 width.defaultNumberOfKids = 0;
19
19
20 var height = A2(Signal.lift, function(p){return p._1}, dimensions);
20 var height = A2(Signal.lift, function(p){return p._1}, dimensions);
21 height.defaultNumberOfKids = 0;
21 height.defaultNumberOfKids = 0;
22
22
23 function resize(e) {
23 function resize(e) {
24− console.log('use the base node (should happen after resize)');
25− var hasListener = elm.notify(dimensions.id, Tuple2(elm.node.clientWidth,
24+ var hasListener = elm.notify(dimensions.id,
26− elm.node.clientHeight));
25+ Tuple2(elm.node.clientWidth, elm.node.clientHeight));
27 if (!hasListener) window.removeEventListener('resize', resize);
26 if (!hasListener) window.removeEventListener('resize', resize);
28 }
27 }
29 window.addEventListener('resize', resize);
28 window.addEventListener('resize', resize);
runtime/Init.js+13−18
@@ -20,18 +20,8 @@ Elm.init = function(module, baseNode) {
20
20
21 // ensure that baseNode exists and is properly formatted.
21 // ensure that baseNode exists and is properly formatted.
22 if (typeof baseNode === 'undefined') {
22 if (typeof baseNode === 'undefined') {
23− var newElement = ElmRuntime.use(ElmRuntime.Render.Utils).newElement;
24− baseNode = newElement('div');
25− document.body.appendChild(baseNode);
23+ baseNode = document.body;
26− baseNode.style.width = window.innerWidth + 'px';
27− baseNode.style.height = window.innerHeight + 'px';
28− window.addEventListener('resize', function() {
29− console.log('resize the base node');
30− baseNode.style.width = window.innerWidth + 'px';
31− baseNode.style.height = window.innerHeight + 'px';
32− }, true);
33−
34− var style = newElement('style');
24+ var style = document.createElement('style');
35 style.type = 'text/css';
25 style.type = 'text/css';
36 style.innerHTML = "html,head,body { padding:0; margin:0; }" +
26 style.innerHTML = "html,head,body { padding:0; margin:0; }" +
37 "body { font-family: calibri, helvetica, arial, sans-serif; }";
27 "body { font-family: calibri, helvetica, arial, sans-serif; }";
@@ -71,21 +61,26 @@ Elm.init = function(module, baseNode) {
71 inputs = ElmRuntime.filterDeadInputs(inputs);
61 inputs = ElmRuntime.filterDeadInputs(inputs);
72
62
73 // Add the visualModel to the DOM
63 // Add the visualModel to the DOM
74− baseNode.appendChild(Render.render(visualModel));
64+ var renderNode = Render.render(visualModel)
65+ baseNode.appendChild(renderNode);
66+ adjustWindow();
75
67
68+ function adjustWindow() {
76− if ('Window' in elm) {
69+ if ('Window' in elm) {
77 var w = baseNode.clientWidth;
70 var w = baseNode.clientWidth;
78 if (w !== elm.Window.dimensions.value._0) {
71 if (w !== elm.Window.dimensions.value._0) {
79− notify(elm.Window.dimensions.id,
72+ notify(elm.Window.dimensions.id,
80− Elm.Native.Utils(elm).Tuple2(w, baseNode.clientHeight));
73+ Elm.Native.Utils(elm).Tuple2(w, baseNode.clientHeight));
81 }
74 }
75+ }
82 }
76 }
83−
77+
84 // set up updates so that the DOM is adjusted as necessary.
78 // set up updates so that the DOM is adjusted as necessary.
85 var update = Render.update;
79 var update = Render.update;
86 function domUpdate(value) {
80 function domUpdate(value) {
87− update(baseNode.firstChild, visualModel, value);
81+ update(renderNode, visualModel, value);
88 visualModel = value;
82 visualModel = value;
83+ adjustWindow();
89 return value;
84 return value;
90 }
85 }
91
86