changeset 8:ccf9d9961e32

Update for change to key/mouse events
author Adam Chlipala <adam@chlipala.net>
date Sat, 21 Jul 2012 10:40:23 -0400
parents 35cacb3eaf6e
children 663815040fd8
files examples/client.ur src/c/ajaxUpload.c src/ur/ajaxUpload.ur
diffstat 3 files changed, 33 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/examples/client.ur	Sat Dec 31 15:38:12 2011 -0500
+++ b/examples/client.ur	Sat Jul 21 10:40:23 2012 -0400
@@ -11,35 +11,35 @@
     
     return <xml><body>
       <button value="Create new widget"
-              onclick={au <- AjaxUpload.render {SubmitLabel = if b then None else Some "Upload it!",
-                                                OnBegin = set status <xml>Uploading</xml>,
-                                                OnError = set status <xml><b>Upload failed!</b></xml>,
-                                                OnSuccess = fn h =>
-                                                               let
-                                                                   fun addImage () =
-                                                                       r <- AjaxUpload.claim h;
-                                                                       case r of
-                                                                           AjaxUpload.NotFound => return None
-                                                                         | AjaxUpload.Found r =>
-                                                                           id <- nextval ids;
-                                                                           dml (INSERT INTO images (Id, MimeType, Content)
-                                                                                VALUES ({[id]}, {[r.MimeType]}, {[r.Content]}));
-                                                                           return (Some id)
-                                                               in
-                                                                   ido <- rpc (addImage ());
-                                                                   case ido of
-                                                                       None => alert "Newly uploaded image not found!"
-                                                                     | Some id =>
+              onclick={fn _ => au <- AjaxUpload.render {SubmitLabel = if b then None else Some "Upload it!",
+                                                        OnBegin = set status <xml>Uploading</xml>,
+                                                        OnError = set status <xml><b>Upload failed!</b></xml>,
+                                                        OnSuccess = fn h =>
                                                                        let
-                                                                           fun image () =
-                                                                               r <- oneRow1 (SELECT images.MimeType, images.Content
-                                                                                             FROM images
-                                                                                             WHERE images.Id = {[id]});
-                                                                               returnBlob r.Content (blessMime r.MimeType)
+                                                                           fun addImage () =
+                                                                               r <- AjaxUpload.claim h;
+                                                                               case r of
+                                                                                   AjaxUpload.NotFound => return None
+                                                                                 | AjaxUpload.Found r =>
+                                                                                   id <- nextval ids;
+                                                                                   dml (INSERT INTO images (Id, MimeType, Content)
+                                                                                        VALUES ({[id]}, {[r.MimeType]}, {[r.Content]}));
+                                                                                   return (Some id)
                                                                        in
-                                                                           set status <xml><img src={url (image ())}/></xml>
-                                                                       end
-                                                               end};
+                                                                           ido <- rpc (addImage ());
+                                                                           case ido of
+                                                                               None => alert "Newly uploaded image not found!"
+                                                                             | Some id =>
+                                                                               let
+                                                                                   fun image () =
+                                                                                       r <- oneRow1 (SELECT images.MimeType, images.Content
+                                                                                                     FROM images
+                                                                                                     WHERE images.Id = {[id]});
+                                                                                       returnBlob r.Content (blessMime r.MimeType)
+                                                                               in
+                                                                                   set status <xml><img src={url (image ())}/></xml>
+                                                                               end
+                                                                       end};
                        set widget au}/>
       <hr/>
       <dyn signal={signal widget}/>
--- a/src/c/ajaxUpload.c	Sat Dec 31 15:38:12 2011 -0500
+++ b/src/c/ajaxUpload.c	Sat Jul 21 10:40:23 2012 -0400
@@ -12,7 +12,7 @@
                           submitId,
                           "\"); subm.parentNode.target = \"",
                           iframeId,
-                          "\"; var onSub = subm.onmousedown; subm.onmousedown = undefined; subm.parentNode.onsubmit = function() { onSub(); return true; }; subm.withHandle = subm.onkeydown; subm.onkeydown = undefined; subm.withError = subm.onmouseup; subm.onmouseup = undefined; ",
+                          "\"; var onSub = subm.onmousedown; subm.onmousedown = undefined; subm.parentNode.onsubmit = function() { window.top.event = {}; onSub(); return true; }; subm.withHandle = subm.onkeydown; subm.onkeydown = undefined; subm.withError = subm.onmouseup; subm.onmouseup = undefined; ",
                           autoSubmit
                           ? "subm.style.visibility = \"hidden\"; for (var node = subm.previousSibling; node.tagName != \"INPUT\"; node = node.previousSibling); node.onchange = function() { subm.parentNode.submit(); }; "
                           : "",
@@ -34,7 +34,7 @@
   return uw_Basis_mstrcat(ctx,
                           "<script type=\"text/javascript\">var subm = window.top.document.getElementById(\"",
                           submitId,
-                          "\"); subm.withError(); </script>",
+                          "\"); window.top.event = {}; subm.withError(); </script>",
                           NULL);
 }
 
@@ -45,6 +45,9 @@
 uw_Basis_string uw_AjaxUploadFfi_stringToId(uw_context ctx, uw_Basis_string s) {
   char *s2 = s;
 
+  if (s2[0] == 'u' && s2[1] == 'w')
+    s2 += 2;
+
   if (*s2 == '-')
     ++s2;
 
--- a/src/ur/ajaxUpload.ur	Sat Dec 31 15:38:12 2011 -0500
+++ b/src/ur/ajaxUpload.ur	Sat Jul 21 10:40:23 2012 -0400
@@ -59,7 +59,7 @@
         return <xml>
           <form>
             <upload{#File}/>
-            <submit value={Option.get "" sl} action={upload} id={submitId} onmousedown={ob} onkeydown={os} onmouseup={oe}/>
+            <submit value={Option.get "" sl} action={upload} id={submitId} onmousedown={fn _ => ob} onkeydown={fn ev => os ev.KeyCode} onmouseup={fn _ => oe}/>
           </form>
           {AjaxUploadFfi.tweakForm (Option.isNone sl) iframeId submitId}
         </xml>