on master help sign in
Distinguish between DOM nodes created by Elm and ones imported from JS.
8a79164evancz
core-js/Graphics/Render.js+24−6
@@ -161,9 +161,15 @@ function render(elem) {
161 case "EContainer": e = container(elem[2][1],elem[2][2]); break;
161 case "EContainer": e = container(elem[2][1],elem[2][2]); break;
162 case "EHtml":
162 case "EHtml":
163 e = elem[2][1];
163 e = elem[2][1];
164+ if (e.type !== 'button') {
164− var p = Value.getExcess(e);
165+ var p = Value.getExcess(e);
165− elem[3] -= p[0];
166+ elem[3] -= p[0];
166− elem[4] -= p[1];
167+ elem[4] -= p[1];
168+ }
169+ break;
170+ case "EExternalHtml":
171+ e = newElement('div');
172+ addTo(e, elem[2][1]);
167 break;
173 break;
168 }
174 }
169 e.id = elem[1];
175 e.id = elem[1];
@@ -237,9 +243,21 @@ function update(node,curr,next) {
237 case "EEmpty":
243 case "EEmpty":
238 break;
244 break;
239 case "EHtml":
245 case "EHtml":
246+ if (next[1] !== curr[1]) {
247+ var e = render(next);
248+ node.parentNode.replaceChild(e,node);
249+ node = e;
250+ }
251+ if (e.type !== 'button') {
240− var p = Value.getExcess(node);
252+ var p = Value.getExcess(node);
241− next[3] -= p[0];
253+ next[3] -= p[0];
242− next[4] -= p[1];
254+ next[4] -= p[1];
255+ }
256+ break;
257+ case "EExternalHtml":
258+ if (next[1] !== curr[1])
259+ node.parentNode.replaceChild(render(next),node);
260+ break;
243 }
261 }
244 if (next[3] !== curr[3]) node.style.width = (~~next[3]) + 'px';
262 if (next[3] !== curr[3]) node.style.width = (~~next[3]) + 'px';
245 if (next[4] !== curr[4]) node.style.height = (~~next[4]) + 'px';
263 if (next[4] !== curr[4]) node.style.height = (~~next[4]) + 'px';
core-js/foreign/JavaScript.js+3−1
@@ -13,7 +13,9 @@ var Foreign = function() {
13 function castJSElementToElement(w) {
13 function castJSElementToElement(w) {
14 return function(h) {
14 return function(h) {
15 return function(node) {
15 return function(node) {
16− return ["Element",Guid.guid(),["EHtml",node],w,h,1,Nothing,Nothing];
16+ return ["Element",Guid.guid(),
17+ ["EExternalHtml",node],
18+ w,h,1,Nothing,Nothing];
17 }
19 }
18 }
20 }
19 }
21 }