diff options
author | Adam Chlipala <adam@chlipala.net> | 2012-03-14 10:10:56 -0400 |
---|---|---|
committer | Adam Chlipala <adam@chlipala.net> | 2012-03-14 10:10:56 -0400 |
commit | e90f7afc607a0af326c87ebb184b7eacfee8b92b (patch) | |
tree | 30712b447483786217c20367a7f29491305fe2db /lib | |
parent | 3b4137c893c21d68a1dbecdcb3acd865dd32057d (diff) |
New JavaScript FFI function: setInnerHTML
Diffstat (limited to 'lib')
-rw-r--r-- | lib/js/urweb.js | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/js/urweb.js b/lib/js/urweb.js index e6c2124f..5a18e17c 100644 --- a/lib/js/urweb.js +++ b/lib/js/urweb.js @@ -836,6 +836,38 @@ function dyn(pnode, s) { populate(x); } +function setInnerHTML(node, html) { + var x; + + if (node.previousSibling && node.previousSibling.closures != undefined) { + x = node.previousSibling; + + for (var ls = x.closures; ls; ls = ls.next) + freeClosure(ls.data); + + if (node.getElementsByTagName) { + var arr = node.getElementsByTagName("script"); + for (var i = 0; i < arr.length; ++i) + killScript(arr[i]); + } + } else { + x = document.createElement("script"); + x.dead = false; + x.sources = null; + + if (node.parentNode) + node.parentNode.insertBefore(x, node); + else + whine("setInnerHTML: node is not already in the DOM tree"); + } + + var cls = {v : null}; + var html = flatten(cls, html); + x.closures = cls.v; + node.innerHTML = html; + runScripts(node); +} + function input(x, s, recreate, type, name) { if (name) x.name = name; if (type) x.type = type; |