@@ -154,10 +154,31 @@ function container(pos,elem) {
154 return div;
154 return div;
157−function rawHtml(html) {
157+function rawHtml(elem) {
158+ var html = elem.html;
159+ var args = elem.args;
160+ var guid = elem.guid;
158− var e = newElement('div');
162+ var div = newElement('div');
159− e.innerHTML = html;
163+ div.innerHTML = html;
164+ div.style.visibility = "hidden";
165+ document.body.appendChild(div);
167+ for (var i = args.length; i--; ) {
169+ var span = document.getElementById('md-' + guid + '-' + i);
171+ span.innerHTML = arg;
173+ span.style.display = 'block';
174+ span.style.width = arg.props.width + 'px';
175+ span.style.height = arg.props.height + 'px';
176+ span.appendChild(render(arg));
179+ document.body.removeChild(div);
180+ div.style.visibility = 'visible';
160− return e;
181+ return div;
163function render(elem) { return setProps(elem.props, makeElement(elem)); }
184function render(elem) { return setProps(elem.props, makeElement(elem)); }
@@ -168,7 +189,7 @@ function makeElement(e) {
168 case 'Flow': return flow(elem._0, elem._1);
189 case 'Flow': return flow(elem._0, elem._1);
169 case 'Container': return container(elem._0, elem._1);
190 case 'Container': return container(elem._0, elem._1);
170 case 'Spacer': return newElement('div');
191 case 'Spacer': return newElement('div');
171− case 'RawHtml': return rawHtml(elem._0);
192+ case 'RawHtml': return rawHtml(elem);
172 case 'Custom': return elem.render(elem.model);
193 case 'Custom': return elem.render(elem.model);
@@ -184,7 +205,31 @@ function update(node, curr, next) {
184 switch(nextE.ctor) {
205 switch(nextE.ctor) {
185 case "Spacer": break;
206 case "Spacer": break;
186 case "RawHtml":
207 case "RawHtml":
187− if (nextE._0 !== currE._0) node.innerHTML = nextE._0;
208+ if (nextE.guid !== currE.guid) {
209+ node.parentNode.replaceChild(render(next),node);
212+ var nargs = nextE.args;
213+ var cargs = currE.args;
214+ for (var i = nargs.length; i--; ) {
215+ var narg = nargs[i];
217+ if (narg == carg) continue;
218+ var span = document.getElementById('md-' + currE.guid + '-' + i);
219+ if (narg.isElement) {
220+ if (carg.isElement) {
221+ update(span, carg, narg);
223+ span.style.display = 'block';
224+ var e = render(narg);
225+ span.innerHTML = '';
226+ span.appendChild(e);
229+ span.style.display = 'inline';
230+ span.innerHTML = narg;
189 case "Image":
234 case "Image":
190 if (nextE._0.ctor === 'Plain') {
235 if (nextE._0.ctor === 'Plain') {