on master help sign in
Ensure that gifs work in collages in all browsers.
d4ba806evancz
core-js/Graphics/Collage.js+31−25
@@ -139,17 +139,21 @@ function collageForms(w,h,forms) {
139 return canvas;
139 return canvas;
140};
140};
141
141
142+function applyTransforms(theta,scale,x,y,w,h,e) {
143+ var t = "translate(" + (x - w / 2) + "px,"+ (y - h / 2) + "px)";
144+ var r = theta === (~~theta) ? "" : "rotate(" + theta*360 + "deg)";
145+ var s = scale === 1 ? "" : "scale(" + scale + "," + scale + ")";
146+ var transforms = t + " " + s + " " + r;
147+ e.style.transform = transforms;
148+ e.style.msTransform = transforms;
149+ e.style.MozTransform = transforms;
150+ e.style.webkitTransform = transforms;
151+ e.style.OTransform = transforms;
152+}
153+
142function collageElement(w,h,theta,scale,x,y,elem) {
154function collageElement(w,h,theta,scale,x,y,elem) {
143 var e = Render.render(elem);
155 var e = Render.render(elem);
144− var t = "translate(" + (x - elem[3] / 2) + "px,"+ (y - elem[4] / 2) + "px)";
156+ applyTransforms(theta,scale,x,y,elem[3],elem[4],e);
145− var r = theta === (~~theta) ? "" : "rotate(" + theta*360 + "deg)";
146− var s = scale === 1 ? "" : "scale(" + scale + "," + scale + ")";
147− var transforms = t + " " + s + " " + r;
148− e.style.transform = transforms;
149− e.style.msTransform = transforms;
150− e.style.MozTransform = transforms;
151− e.style.webkitTransform = transforms;
152− e.style.OTransform = transforms;
153 var div = Render.newElement('div');
157 var div = Render.newElement('div');
154 Render.addTo(div,e);
158 Render.addTo(div,e);
155 div.style.width = (~~w) + "px";
159 div.style.width = (~~w) + "px";
@@ -174,25 +178,27 @@ function collage(w,h,formss) {
174}
178}
175
179
176function updateFormSet(node,currSet,nextSet) {
180function updateFormSet(node,currSet,nextSet) {
177− if (Value.eq(nextSet,currSet)) return;
181+ if (Value.eq(nextSet,currSet)) return;
178− var w = node.style.width.slice(0,-2) - 0;
182+ var w = node.style.width.slice(0,-2) - 0;
179− var h = node.style.height.slice(0,-2) - 0;
183+ var h = node.style.height.slice(0,-2) - 0;
180− if (typeof nextSet[0] === "object") {
184+ if (typeof nextSet[0] === "object") {
181− if (typeof currSet[0] === "object") {
185+ if (typeof currSet[0] === "object") {
182− if (node.getContext) {
186+ if (node.getContext) {
183− var ctx = node.getContext('2d');
187+ var ctx = node.getContext('2d');
184− function redo() { renderForms(this,ctx,w,h,nextSet); }
188+ function redo() { renderForms(this,ctx,w,h,nextSet); }
185− return renderForms(redo,ctx,w,h,nextSet);
189+ return renderForms(redo,ctx,w,h,nextSet);
186− }
187− }
190+ }
188− var newNode = collageForms(w,h,nextSet);
189− newNode.style.position = 'absolute';
190− return node.parentNode.replaceChild(newNode,node);
191 }
191 }
192− var f = nextSet;
192+ var newNode = collageForms(w,h,nextSet);
193− var newNode = collageElement(w,h,f[1],f[2],f[3][1],f[3][2],f[4][1]);
194 newNode.style.position = 'absolute';
193 newNode.style.position = 'absolute';
195 return node.parentNode.replaceChild(newNode,node);
194 return node.parentNode.replaceChild(newNode,node);
195+ }
196+ node.style.width = (~~w) + "px";
197+ node.style.height = (~~h) + "px";
198+ var f = nextSet;
199+ var next = nextSet[4][1];
200+ Render.update(node.firstChild, currSet[4][1], next);
201+ applyTransforms(f[1],f[2],f[3][1],f[3][2],next[3],next[4],node.firstChild);
196}
202}
197
203
198// assumes that the form sets are the same length.
204// assumes that the form sets are the same length.
core-js/Signal/Keyboard.js+30−1
@@ -1,7 +1,10 @@
1
1
2Elm.Keyboard = { Raw : function() {
2Elm.Keyboard = { Raw : function() {
3 var keysDown = Elm.Signal.constant(["Nil"]);
3 var keysDown = Elm.Signal.constant(["Nil"]);
4+ keysDown.defaultNumberOfKids = 2;
5+
4 var charPressed = Elm.Signal.constant(["Nothing"]);
6 var charPressed = Elm.Signal.constant(["Nothing"]);
7+
5 function remove(x,xs) {
8 function remove(x,xs) {
6 if (xs[0] === "Nil") return xs;
9 if (xs[0] === "Nil") return xs;
7 if (xs[1] === x) return xs[2];
10 if (xs[1] === x) return xs[2];
@@ -40,4 +43,30 @@ Elm.Keyboard = { Raw : function() {
40 return {keysDown:keysDown,
43 return {keysDown:keysDown,
41 charPressed:charPressed};
44 charPressed:charPressed};
42 }()
45 }()
43−};
46+};
47+
48+(function() {
49+ function dir(left,right,up,down) {
50+ function f(ks) {
51+ var x = 0, y = 0;
52+ while (ks[0] == "Cons") {
53+ switch (ks[1]) {
54+ case left : --x; break;
55+ case right: ++x; break;
56+ case up : ++y; break;
57+ case down : --y; break;
58+ }
59+ ks = ks[2];
60+ }
61+ return { _:[true], x:[x], y:[y] };
62+ }
63+ return Elm.Signal.lift(f)(Elm.Keyboard.Raw.keysDown);
64+ }
65+ var arrows = dir(37,39,38,40);
66+ arrows.defaultNumberOfKids = 0;
67+ var wasd = dir(65,68,87,83);
68+ wasd.defaultNumberOfKids = 0;
69+
70+ Elm.Keyboard.arrows = arrows;
71+ Elm.Keyboard.wasd = wasd;
72+}());