on master help sign in
Resolve #608
commitfe87712d87bcc096c7848525a4c0df5f064c02c8 authorEvan Czaplicki <info@elm-lang.org> dateThu 1 May 2014, 22:42 (13 years ago) parentbb28e3b
1 file changed+30−24
runtime/Render/Element.js+30−24
runtime/Render/Element.js+30−24
@@ -143,29 +143,37 @@ function croppedImage(elem, w, h, src) {
143143 return e;
144144}
145145
146−function goIn(e) { e.style.position = 'absolute'; return e; }
146+function goOut(e) { e.style.position = 'absolute'; return e; }
147147function goDown(e) { return e }
148148function goRight(e) { e.style.styleFloat = e.style.cssFloat = "left"; return e; }
149−function flowWith(f, array) {
150− var container = newElement('div');
151− if (f == goIn) container.style.pointerEvents = 'none';
152149
153− for (var i = array.length; i--; ) {
154− container.appendChild(f(render(array[i])));
155− }
156− return container;
150+var directionTable = {
151+ DUp : goDown,
152+ DDown : goDown,
153+ DLeft : goRight,
154+ DRight : goRight,
155+ DIn : goOut,
156+ DOut : goOut
157+};
158+function needsReversal(dir) {
159+ return dir == 'DUp' || dir == 'DLeft' || dir == 'DIn';
157160}
158161
159162function flow(dir,elist) {
160163 var array = fromList(elist);
161− switch(dir.ctor) {
162− case "DDown": array.reverse();
163− case "DUp": return flowWith(goDown,array);
164− case "DRight": array.reverse();
165− case "DLeft": return flowWith(goRight,array);
166− case "DOut": array.reverse();
167− case "DIn": return flowWith(goIn,array);
164+ var container = newElement('div');
165+ var goDir = directionTable[dir];
166+ if (goDir == goOut) {
167+ container.style.pointerEvents = 'none';
168168 }
169+ if (needsReversal(dir)) {
170+ array.reverse();
171+ }
172+ var len = array.length;
173+ for (var i = 0; i < len; ++i) {
174+ container.appendChild(goDir(render(array[i])));
175+ }
176+ return container;
169177}
170178
171179function toPos(pos) {
@@ -245,7 +253,7 @@ function makeElement(e) {
245253 var elem = e.element;
246254 switch(elem.ctor) {
247255 case 'Image': return image(e.props, elem);
248− case 'Flow': return flow(elem._0, elem._1);
256+ case 'Flow': return flow(elem._0.ctor, elem._1);
249257 case 'Container': return container(elem._0, elem._1);
250258 case 'Spacer': return newElement('div');
251259 case 'RawHtml': return rawHtml(elem);
@@ -321,14 +329,12 @@ function update(node, curr, next) {
321329 return true;
322330 }
323331 var currs = fromList(currE._1);
324− var goDir = function(x) { return x; };
325− switch(nextE._0.ctor) {
326− case "DDown": case "DUp": goDir = goDown; break;
327− case "DRight": case "DLeft": goDir = goRight; break;
328− case "DOut": case "DIn": goDir = goIn; break;
329− }
330− for (var i = kids.length; i-- ;) {
331− update(kids[i],currs[i],nexts[i]);
332+ var dir = nextE._0.ctor;
333+ var goDir = directionTable[dir];
334+ var toReverse = needsReversal(dir);
335+ var len = kids.length;
336+ for (var i = len; i-- ;) {
337+ update(kids[toReverse ? len - i - 1 : i],currs[i],nexts[i]);
332338 goDir(kids[i]);
333339 }
334340 break;