changeset 1790:56b8efff64e7

Nicer <active> semantics
author Adam Chlipala <adam@chlipala.net>
date Sun, 22 Jul 2012 09:42:17 -0400
parents 2e01a36701eb
children 2f8b8952fe27
files lib/js/urweb.js tests/activeFocus.ur
diffstat 2 files changed, 21 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lib/js/urweb.js	Sat Jul 21 21:07:15 2012 -0400
+++ b/lib/js/urweb.js	Sun Jul 22 09:42:17 2012 -0400
@@ -803,7 +803,6 @@
 
             var dummy = document.createElement("body");
             dummy.innerHTML = "<table>" + html + "</table>";
-            runScripts(dummy);
             var table = x.parentNode;
 
             if (table) {
@@ -831,12 +830,12 @@
                 for (var node = tbody.firstChild; node; node = next) {
                     next = node.nextSibling;
                     table.insertBefore(node, x);
+                    runScripts(node);
                 }
             }
         } else if (pnode == "tr") {
             var dummy = document.createElement("body");
             dummy.innerHTML = "<table><tr>" + html + "</tr></table>";
-            runScripts(dummy);
             var table = x.parentNode;
 
             if (table) {
@@ -854,14 +853,15 @@
                 for (var node = tr.firstChild; node; node = next) {
                     next = node.nextSibling;
                     table.insertBefore(node, x);
+                    runScripts(node);
                 }
             }
         } else {
             firstChild = document.createElement("span");
             firstChild.innerHTML = html;
-            runScripts(firstChild);
             if (x.parentNode)
                 x.parentNode.insertBefore(firstChild, x);
+            runScripts(firstChild);
         }
     };
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/activeFocus.ur	Sun Jul 22 09:42:17 2012 -0400
@@ -0,0 +1,18 @@
+fun main () : transaction page =
+    i <- fresh;
+    return <xml><body>
+      <ctextbox/>
+      <ctextbox id={i}/>
+      <active code={giveFocus i; return <xml>Done</xml>}/>
+    </body></xml>
+
+fun dynamic () : transaction page =
+    x <- source <xml/>;
+    return <xml><body>
+      <dyn signal={signal x}/>
+      <button onclick={fn _ => i <- fresh; set x <xml>
+        <ctextbox/>
+        <ctextbox id={i}/>
+        <active code={giveFocus i; return <xml>Done</xml>}/>
+      </xml>}/>
+    </body></xml>