You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/05/11 04:02:47 UTC
svn commit: r1101725 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/internal/services/
main/java/org/apache/tapestry5/internal/services/ajax/
main/java/org/apache/tapestry5/services/javascript/
test/java/org/apache/tap...
Author: hlship
Date: Wed May 11 02:02:47 2011
New Revision: 1101725
URL: http://svn.apache.org/viewvc?rev=1101725&view=rev
Log:
TAP5-1521: JavaScriptSupport.addInitializerCall() should support JSONArray of function parameters, as RenderSupport does
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RenderSupportImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/JavaScriptSupport.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RenderSupportImplTest.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RenderSupportImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RenderSupportImpl.java?rev=1101725&r1=1101724&r2=1101725&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RenderSupportImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RenderSupportImpl.java Wed May 11 02:02:47 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2009, 2010 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 2010, 2011 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -107,7 +107,7 @@ public class RenderSupportImpl implement
public void addInit(String functionName, JSONArray parameterList)
{
- addInitFunctionInvocation(functionName, parameterList);
+ javascriptSupport.addInitializerCall(functionName, parameterList);
}
public void addInit(String functionName, JSONObject parameter)
@@ -132,23 +132,6 @@ public class RenderSupportImpl implement
javascriptSupport.autofocus(priority, fieldId);
}
- /**
- * For the few existing places that use the old variations of addInit(), passing a list of
- * strings or a JSONArray, the end result is a bit inefficient. We end up generating lots
- * of calls to Tapestry.init, with no attempt to aggregate them. Most of the time, the init
- * occurs with a JSONObject (the "spec") and is handled by {@link JavaScriptSupport}.
- */
- private void addInitFunctionInvocation(String functionName, Object parameters)
- {
- assert InternalUtils.isNonBlank(functionName);
- assert parameters != null;
-
- JSONArray list = new JSONArray().put(parameters);
- JSONObject wrapper = new JSONObject().put(functionName, list);
-
- addScript("Tapestry.init(%s);", wrapper);
- }
-
public void addStylesheetLink(Asset stylesheet, String media)
{
javascriptSupport.importStylesheet(new StylesheetLink(stylesheet, new StylesheetOptions(media)));
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java?rev=1101725&r1=1101724&r2=1101725&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java Wed May 11 02:02:47 2011
@@ -1,4 +1,4 @@
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2011 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -145,6 +145,16 @@ public class JavaScriptSupportImpl imple
storeInitializerCall(priority, functionName, parameter);
}
+ public void addInitializerCall(String functionName, JSONArray parameter)
+ {
+ storeInitializerCall(InitializationPriority.NORMAL, functionName, parameter);
+ }
+
+ public void addInitializerCall(InitializationPriority priority, String functionName, JSONArray parameter)
+ {
+ storeInitializerCall(priority, functionName, parameter);
+ }
+
private void storeInitializerCall(InitializationPriority priority, String functionName, Object parameter)
{
assert priority != null;
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/JavaScriptSupport.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/JavaScriptSupport.java?rev=1101725&r1=1101724&r2=1101725&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/JavaScriptSupport.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/JavaScriptSupport.java Wed May 11 02:02:47 2011
@@ -20,6 +20,7 @@ import org.apache.tapestry5.FieldFocusPr
import org.apache.tapestry5.RenderSupport;
import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.annotations.Environmental;
+import org.apache.tapestry5.json.JSONArray;
import org.apache.tapestry5.json.JSONObject;
import org.apache.tapestry5.services.EnvironmentalShadowBuilder;
@@ -102,6 +103,32 @@ public interface JavaScriptSupport
/**
* Adds a call to a client-side function inside the Tapestry.Initializer namespace. Calls to this
* method are aggregated into a call to the Tapestry.init() function. Initialization occurs at
+ * {@link InitializationPriority#NORMAL} priority.
+ *
+ * @param functionName
+ * name of client-side function (within Tapestry.Initializer namespace) to execute
+ * @param parameter
+ * array of parameters to pass to the client-side function
+ * @since 5.3.0
+ */
+ void addInitializerCall(String functionName, JSONArray parameter);
+
+ /**
+ * Adds a call to a client-side function inside the Tapestry.Initializer namespace. Calls to this
+ * method are aggregated into a call to the Tapestry.init() function. Initialization occurs at
+ * {@link InitializationPriority#NORMAL} priority.
+ *
+ * @param functionName
+ * name of client-side function (within Tapestry.Initializer namespace) to execute
+ * @param parameter
+ * array of parameters to pass to the client-side function
+ * @since 5.3.0
+ */
+ void addInitializerCall(InitializationPriority priority, String functionName, JSONArray parameter);
+
+ /**
+ * Adds a call to a client-side function inside the Tapestry.Initializer namespace. Calls to this
+ * method are aggregated into a call to the Tapestry.init() function. Initialization occurs at
* the specified priority.
*
* @param priority
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RenderSupportImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RenderSupportImplTest.java?rev=1101725&r1=1101724&r2=1101725&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RenderSupportImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RenderSupportImplTest.java Wed May 11 02:02:47 2011
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2007, 2008, 2009, 2011 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -146,9 +146,9 @@ public class RenderSupportImplTest exten
{
JavaScriptSupport js = mockJavaScriptSupport();
- JSONObject spec = new JSONObject().put("foo", new JSONArray().put(new JSONArray("fred", "barney")));
+ JSONArray array = new JSONArray("fred", "barney");
- js.addScript("Tapestry.init(%s);", spec);
+ js.addInitializerCall("foo", array);
replay();
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.java?rev=1101725&r1=1101724&r2=1101725&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.java Wed May 11 02:02:47 2011
@@ -402,7 +402,6 @@ public class JavaScriptSupportImplTest e
@Test
public void init_with_string()
{
-
DocumentLinker linker = mockDocumentLinker();
JavaScriptStackSource stackSource = mockJavaScriptStackSource();
JavaScriptStackPathConstructor pathConstructor = mockJavaScriptStackPathConstructor();
@@ -425,6 +424,33 @@ public class JavaScriptSupportImplTest e
}
@Test
+ public void init_with_array()
+ {
+ DocumentLinker linker = mockDocumentLinker();
+ JavaScriptStackSource stackSource = mockJavaScriptStackSource();
+ JavaScriptStackPathConstructor pathConstructor = mockJavaScriptStackPathConstructor();
+ trainForEmptyCoreStack(linker, stackSource, pathConstructor);
+
+ JSONArray chuck = new JSONArray("chuck", "yeager");
+ JSONArray buzz = new JSONArray("buzz", "aldrin");
+
+ JSONObject aggregated = new JSONObject().put("setup", new JSONArray(chuck, buzz));
+
+ linker.setInitialization(InitializationPriority.IMMEDIATE, aggregated);
+
+ replay();
+
+ JavaScriptSupportImpl jss = new JavaScriptSupportImpl(linker, stackSource, pathConstructor);
+
+ jss.addInitializerCall(InitializationPriority.IMMEDIATE, "setup", chuck);
+ jss.addInitializerCall(InitializationPriority.IMMEDIATE, "setup", buzz);
+
+ jss.commit();
+
+ verify();
+ }
+
+ @Test
public void default_for_init_string_is_normal_priority()
{
DocumentLinker linker = mockDocumentLinker();
@@ -448,6 +474,31 @@ public class JavaScriptSupportImplTest e
}
@Test
+ public void default_for_init_array_is_normal_priority()
+ {
+ DocumentLinker linker = mockDocumentLinker();
+ JavaScriptStackSource stackSource = mockJavaScriptStackSource();
+ JavaScriptStackPathConstructor pathConstructor = mockJavaScriptStackPathConstructor();
+ trainForEmptyCoreStack(linker, stackSource, pathConstructor);
+
+ JSONArray chuck = new JSONArray("chuck", "yeager");
+
+ JSONObject aggregated = new JSONObject().put("setup", new JSONArray(chuck));
+
+ linker.setInitialization(InitializationPriority.NORMAL, aggregated);
+
+ replay();
+
+ JavaScriptSupportImpl jss = new JavaScriptSupportImpl(linker, stackSource, pathConstructor);
+
+ jss.addInitializerCall("setup", chuck);
+
+ jss.commit();
+
+ verify();
+ }
+
+ @Test
public void import_stylesheet_as_asset()
{
DocumentLinker linker = mockDocumentLinker();