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>" +