@@ -161,9 +161,15 @@ function render(elem) {
161161 case "EContainer": e = container(elem[2][1],elem[2][2]); break;
162162 case "EHtml":
163163 e = elem[2][1];
164− var p = Value.getExcess(e);
165− elem[3] -= p[0];
166− elem[4] -= p[1];
164+ if (e.type !== 'button') {
165+ var p = Value.getExcess(e);
166+ elem[3] -= p[0];
167+ elem[4] -= p[1];
168+ }
169+ break;
170+ case "EExternalHtml":
171+ e = newElement('div');
172+ addTo(e, elem[2][1]);
167173 break;
168174 }
169175 e.id = elem[1];
@@ -237,9 +243,21 @@ function update(node,curr,next) {
237243 case "EEmpty":
238244 break;
239245 case "EHtml":
240− var p = Value.getExcess(node);
241− next[3] -= p[0];
242− next[4] -= p[1];
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') {
252+ var p = Value.getExcess(node);
253+ next[3] -= p[0];
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;
243261 }
244262 if (next[3] !== curr[3]) node.style.width = (~~next[3]) + 'px';
245263 if (next[4] !== curr[4]) node.style.height = (~~next[4]) + 'px';