Mercurial > urweb
diff lib/js/urweb.js @ 901:f17638dd3080
dlist row add working with Konqueror
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Thu, 06 Aug 2009 14:24:40 -0400 |
parents | ed381288ce9a |
children | 4b9f1de2c647 |
line wrap: on
line diff
--- a/lib/js/urweb.js Thu Aug 06 11:58:38 2009 -0400 +++ b/lib/js/urweb.js Thu Aug 06 14:24:40 2009 -0400 @@ -252,7 +252,7 @@ doExn(v); } if (thisScript.parentNode) - thisScripts.parentNode.removeChild(thisScript); + thisScript.parentNode.removeChild(thisScript); } thisScript = savedScript; @@ -262,23 +262,22 @@ // Dynamic tree entry points -function dyn(s) { - var x = document.createElement("div"); - x.style.display = "inline"; +function dyn(pnode, s) { + var x = document.createElement("script"); x.dead = false; x.signal = s; x.sources = null; x.closures = null; - var first = null; + var child = null; x.recreate = function(v) { for (var ls = x.closures; ls; ls = ls.next) freeClosure(ls.data); - for (var node = first; node && node != x; ) { - if (node.getElementsByTagName) { - var arr = node.getElementsByTagName("div"); + if (child) { + if (child.getElementsByTagName) { + var arr = child.getElementsByTagName("script"); for (var i = 0; i < arr.length; ++i) { var span = arr[i]; span.dead = true; @@ -289,24 +288,36 @@ } } - var old = node; - node = node.nextSibling; - if (old.parentNode) - old.parentNode.removeChild(old); + if (child.parentNode) + child.parentNode.removeChild(child); } var cls = {v : null}; - var dummy = document.createElement("table"); - dummy.innerHTML = flatten(cls, v); + var html = flatten(cls, v); x.closures = cls.v; - runScripts(dummy); - for (first = dummy.firstChild; first && first.tagName == "TBODY"; first = first.firstChild); - for (var node = first; node; ) { - var old = node; - node = node.nextSibling; + if (pnode == "table") { + var dummy = document.createElement("body"); + dummy.innerHTML = "<table>" + html + "</table>"; + runScripts(dummy); + var rows = dummy.firstChild.rows; + var nRows = rows.length; + var table = x.parentNode; + + var arr = dummy.getElementsByTagName("tbody"); + if (arr.length > 0) { + var tbody = arr[0], next; + for (var node = tbody.firstChild; node; node = next) { + next = node.nextSibling; + table.appendChild(node); + } + } + } else { + child = document.createElement("span"); + child.innerHTML = html; + runScripts(child); if (x.parentNode) - x.parentNode.insertBefore(old, x); + x.parentNode.insertBefore(child, x); } };