Author: hlship
Date: Mon Apr 19 14:41:21 2010
New Revision: 935598
URL: http://svn.apache.org/viewvc?rev=935598&view=rev
Log:
Add method importStack() to JavascriptSupport environmental
Modified:
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/ajax/JavascriptSupportImplTest.java
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=935598&r1=935597&r2=935598&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
Mon Apr 19 14:41:21 2010
@@ -205,7 +205,7 @@ public class JavascriptSupportImpl imple
Defense.notNull(parameter, "parameter");
addCoreStackIfNeeded();
-
+
JSONObject init = inits.get(priority);
if (init == null)
@@ -342,4 +342,13 @@ public class JavascriptSupportImpl imple
otherStylesheets.add(new Stylesheet(stylesheetURL, media));
}
+ public void importStack(String stackName)
+ {
+ Defense.notBlank(stackName, "stackName");
+
+ addCoreStackIfNeeded();
+
+ addAssetsFromStack(stackName);
+ }
+
}
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=935598&r1=935597&r2=935598&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
Mon Apr 19 14:41:21 2010
@@ -17,6 +17,7 @@ package org.apache.tapestry5.services.ja
import org.apache.tapestry5.Asset;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.RenderSupport;
+import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.annotations.Environmental;
import org.apache.tapestry5.annotations.IncludeJavaScriptLibrary;
import org.apache.tapestry5.json.JSONObject;
@@ -24,14 +25,17 @@ import org.apache.tapestry5.services.Env
/**
* An environmental that acts as a replacement for the {...@link
RenderSupport} environmental, renaming and streamlining
- * the the key methods. JavascriptSupport is very stateful, accumulating
JavaScript libraries and initialization code
- * until the end of the main page render; it then updates the rendered DOM
(adding <script> tags to the
+ * the the key methods. JavascriptSupport is very stateful, accumulating
JavaScript stacks, libraries and initialization
+ * code until the end of the main page render; it then updates the rendered
DOM (adding <script> tags to the
* <head> and <body>) before the document is streamed to the
client.
* <p>
* JavascriptSupport is normally accessed within a component by using the
{...@link Environmental} annotation on a
* component field. In addition, JavascriptSupport may also be accessed as a
service (the service
* {...@linkplain EnvironmentalShadowBuilder internally delegates to the
current environmental instance}), which is useful
* for service-layer objects.
+ * <p>
+ * The term "import" is used on many methods to indicate that the indicated
resource (stack, library or stylesheet) will
+ * only be added to the final Document once.
*
* @since 5.2.0
*/
@@ -162,4 +166,15 @@ public interface JavascriptSupport
*/
void importStylesheet(String stylesheetURL, String media);
+ /**
+ * Imports a {...@link JavascriptStack} by name, a related set of
JavaScript libraries and stylesheets.
+ * Stacks are contributions to the {...@link JavascriptStackSource}
service. When
+ * {...@linkplain SymbolConstants#COMBINE_SCRIPTS Javascript aggregation}
in enabled, the stack will be represented by
+ * a single virtual URL; otherwise the individual asset URLs of the stack
+ * will be added to the document.
+ *
+ * @param stackName
+ * the name of the stack (case is ignored); the stack must exist
+ */
+ void importStack(String stackName);
}
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=935598&r1=935597&r2=935598&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
Mon Apr 19 14:41:21 2010
@@ -242,6 +242,45 @@ public class JavascriptSupportImplTest e
}
@Test
+ public void import_stack()
+ {
+ DocumentLinker linker = mockDocumentLinker();
+ JavascriptStackSource stackSource = mockJavascriptStackSource();
+ JavascriptStackPathConstructor pathConstructor =
mockJavascriptStackPathConstructor();
+
+ trainForCoreStack(linker, stackSource, pathConstructor);
+
+ JavascriptStack stack = mockJavascriptStack();
+
+ Asset stylesheet = mockAsset("stack.css");
+
+ expect(stackSource.getStack("custom")).andReturn(stack);
+
expect(pathConstructor.constructPathsForJavascriptStack("custom")).andReturn(
+ CollectionFactory.newList("stack.js"));
+
expect(stack.getStylesheets()).andReturn(CollectionFactory.newList(stylesheet));
+
+ expect(stack.getInitialization()).andReturn("customInit();");
+
+ linker.addScriptLink("stack.js");
+ linker.addStylesheetLink("stack.css", null);
+
+ linker.addScript("stackInit();\ncustomInit();\n");
+
+ replay();
+
+ JavascriptSupportImpl jss = new JavascriptSupportImpl(linker,
stackSource, pathConstructor);
+
+ jss.importStack("custom");
+
+ // Duplicate calls are ignored.
+ jss.importStack("Custom");
+
+ jss.commit();
+
+ verify();
+ }
+
+ @Test
public void duplicate_imported_libraries_are_filtered()
{
DocumentLinker linker = mockDocumentLinker();