on master help sign in
Fix `show` for ADTs and get parens in the right places.

Make `Elm.init(Elm.MyModule)` work nicer when it takes over the whole `document` and needs to resize with the window.

commit60e403ba82b396cecf8aed8c334e43efc575f758 authorevancz <info@elm-lang.org> dateSat 6 Apr 2013, 16:48 (14 years ago) parent0354fad
3 files changed+24−26
libraries/Native/Show.js+8−4 libraries/Native/Signal/Window.js+3−4 runtime/Init.js+13−18
libraries/Native/Show.js+8−4
@@ -86,12 +86,16 @@ Elm.Native.Show = function(elm) {
8686 name = "Set";
8787 list = A2(List.map, function(x){return x._0}, list);
8888 }
89− return "(" + name + ".fromList " + toString(list) + ")";
89+ return name + ".fromList " + toString(list);
9090 } else {
9191 var output = "";
92− for (var i = v.length; --i; ) { output = ' ' + toString(v[i]) + output; }
93− output = v.ctor + output;
94− return (v.length > 1) ? "(" + output + ")" : output;
92+ for (var i in v) {
93+ if (i === 'ctor') continue;
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;
9599 }
96100 }
97101 return v+"";
libraries/Native/Signal/Window.js+3−4
@@ -14,16 +14,15 @@ Elm.Native.Window = function(elm) {
1414
1515 // Do not move width and height into Elm. By setting the default number of kids,
1616 // 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);
1818 width.defaultNumberOfKids = 0;
1919
2020 var height = A2(Signal.lift, function(p){return p._1}, dimensions);
2121 height.defaultNumberOfKids = 0;
2222
2323 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,
26− elm.node.clientHeight));
24+ var hasListener = elm.notify(dimensions.id,
25+ Tuple2(elm.node.clientWidth, elm.node.clientHeight));
2726 if (!hasListener) window.removeEventListener('resize', resize);
2827 }
2928 window.addEventListener('resize', resize);
runtime/Init.js+13−18
@@ -20,18 +20,8 @@ Elm.init = function(module, baseNode) {
2020
2121 // ensure that baseNode exists and is properly formatted.
2222 if (typeof baseNode === 'undefined') {
23− var newElement = ElmRuntime.use(ElmRuntime.Render.Utils).newElement;
24− baseNode = newElement('div');
25− document.body.appendChild(baseNode);
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');
23+ baseNode = document.body;
24+ var style = document.createElement('style');
3525 style.type = 'text/css';
3626 style.innerHTML = "html,head,body { padding:0; margin:0; }" +
3727 "body { font-family: calibri, helvetica, arial, sans-serif; }";
@@ -71,21 +61,26 @@ Elm.init = function(module, baseNode) {
7161 inputs = ElmRuntime.filterDeadInputs(inputs);
7262
7363 // Add the visualModel to the DOM
74− baseNode.appendChild(Render.render(visualModel));
64+ var renderNode = Render.render(visualModel)
65+ baseNode.appendChild(renderNode);
66+ adjustWindow();
7567
76− if ('Window' in elm) {
68+ function adjustWindow() {
69+ if ('Window' in elm) {
7770 var w = baseNode.clientWidth;
7871 if (w !== elm.Window.dimensions.value._0) {
79− notify(elm.Window.dimensions.id,
80− Elm.Native.Utils(elm).Tuple2(w, baseNode.clientHeight));
72+ notify(elm.Window.dimensions.id,
73+ Elm.Native.Utils(elm).Tuple2(w, baseNode.clientHeight));
8174 }
75+ }
8276 }
83−
77+
8478 // set up updates so that the DOM is adjusted as necessary.
8579 var update = Render.update;
8680 function domUpdate(value) {
87− update(baseNode.firstChild, visualModel, value);
81+ update(renderNode, visualModel, value);
8882 visualModel = value;
83+ adjustWindow();
8984 return value;
9085 }
9186