You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by an...@apache.org on 2008/01/23 02:05:51 UTC

svn commit: r614402 - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/scriptaculous/Suggest.java test/org/apache/tapestry/scriptaculous/TestSuggest.java

Author: andyhot
Date: Tue Jan 22 17:05:51 2008
New Revision: 614402

URL: http://svn.apache.org/viewvc?rev=614402&view=rev
Log:
TAPESTRY-1795 + TAPESTRY-2075 : Handle cases where json values are js literals.

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/scriptaculous/TestSuggest.java

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.java?rev=614402&r1=614401&r2=614402&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.java Tue Jan 22 17:05:51 2008
@@ -25,6 +25,7 @@
 import org.apache.tapestry.form.TranslatedField;
 import org.apache.tapestry.form.TranslatedFieldSupport;
 import org.apache.tapestry.form.ValidatableFieldSupport;
+import org.apache.tapestry.json.JSONLiteral;
 import org.apache.tapestry.json.JSONObject;
 import org.apache.tapestry.link.DirectLink;
 import org.apache.tapestry.listener.ListenerInvoker;
@@ -62,6 +63,14 @@
  *
  */
 public abstract class Suggest extends AbstractFormComponent implements TranslatedField, IDirect {
+    
+    /**
+     * Keys that should be treated as javascript literals when contructing the 
+     * options json.
+     */
+    private static final String[] LITERAL_KEYS = new String[]
+        {"onFailure", "updateElement", "afterUpdateElement", "callback"};
+
 
     /**
      * Injected service used to invoke whatever listeners people have setup to handle
@@ -280,6 +289,15 @@
         if (!json.has("encoding"))
         {
             json.put("encoding", cycle.getEngine().getOutputEncoding());
+        }
+        
+        for (int i=0; i<LITERAL_KEYS.length; i++) 
+        {
+            String key = LITERAL_KEYS[i];
+            if (json.has(key))
+            {
+                json.put(key, new JSONLiteral(json.getString(key)));
+            }            
         }
 
         Map parms = new HashMap();

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/scriptaculous/TestSuggest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/scriptaculous/TestSuggest.java?rev=614402&r1=614401&r2=614402&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/scriptaculous/TestSuggest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/scriptaculous/TestSuggest.java Tue Jan 22 17:05:51 2008
@@ -97,7 +97,7 @@
         assertEquals(parms.size(), 4);
         assertEquals(parms.get("inputId"), "suggest");
         assertEquals(parms.get("updateId"), "suggestchoices");
-        assertEquals(parms.get("options"), "{\"onFailure\":\"tapestry.error\",\"encoding\":\"utf-8\"}");
+        assertEquals(parms.get("options"), "{\"onFailure\":tapestry.error,\"encoding\":\"utf-8\"}");
         assertEquals(parms.get("updateUrl"), "http://url");
 
         assertBuffer("<input type=\"text\" autocomplete=\"off\" " +
@@ -133,7 +133,8 @@
                                    "translatedFieldSupport", translator,
                                    "validatableFieldSupport", validator,
                                    "engineService", engine,
-                                   "script", script);
+                                   "script", script,
+                                   "options", "{afterUpdateElement:myapp.processUpdate,other:other}");
 
         expect(cycle.isRewinding()).andReturn(false).anyTimes();
         expect(resp.isDynamic()).andReturn(false);
@@ -172,7 +173,9 @@
         assertEquals(parms.size(), 4);
         assertEquals(parms.get("inputId"), "suggest");
         assertEquals(parms.get("updateId"), "suggestchoices");
-        assertEquals(parms.get("options"), "{\"onFailure\":\"tapestry.error\",\"encoding\":\"utf-8\"}");
+        assertEquals(parms.get("options"), 
+                "{\"afterUpdateElement\":myapp.processUpdate,\"other\":\"other\"," +
+                "\"onFailure\":tapestry.error,\"encoding\":\"utf-8\"}");
         assertEquals(parms.get("updateUrl"), "http://url");
 
         assertBuffer("<textarea id=\"suggest\" name=\"suggest\">r2d2</textarea>" +