You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2013/06/14 19:22:25 UTC
git commit: Allow a JavaScriptStack to contain JavaScript modules to
be required with the stack
Updated Branches:
refs/heads/master 48644151a -> b33fe5bca
Allow a JavaScriptStack to contain JavaScript modules to be required with the stack
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/b33fe5bc
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/b33fe5bc
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/b33fe5bc
Branch: refs/heads/master
Commit: b33fe5bca0c4bdb547542101e21448529734b943
Parents: 4864415
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Fri Jun 14 09:57:38 2013 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Fri Jun 14 09:57:38 2013 -0700
----------------------------------------------------------------------
.../services/ajax/JavaScriptSupportImpl.java | 7 ++-
.../javascript/ExtensibleJavaScriptStack.java | 10 ++++-
.../services/javascript/JavaScriptStack.java | 8 ++++
.../services/javascript/StackExtensionType.java | 8 +++-
.../ajax/JavaScriptSupportImplTest.groovy | 47 +++++++++++++++++---
.../ExtensibleJavaScriptStackTest.groovy | 17 ++++++-
6 files changed, 88 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b33fe5bc/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java
index 847d5bf..d53ea91 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java
@@ -1,4 +1,4 @@
-// Copyright 2010, 2011, 2012 The Apache Software Foundation
+// Copyright 2010-2013 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.
@@ -323,6 +323,11 @@ public class JavaScriptSupportImpl implements JavaScriptSupport
stylesheetLinks.addAll(stack.getStylesheets());
+ for (String moduleName : stack.getModules())
+ {
+ require(moduleName);
+ }
+
addedStacks.put(stackName, true);
String initialization = stack.getInitialization();
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b33fe5bc/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/ExtensibleJavaScriptStack.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/ExtensibleJavaScriptStack.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/ExtensibleJavaScriptStack.java
index 8a71505..fccb2de 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/ExtensibleJavaScriptStack.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/ExtensibleJavaScriptStack.java
@@ -1,4 +1,4 @@
-// Copyright 2011, 2012 The Apache Software Foundation
+// Copyright 2011-2013 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.
@@ -51,6 +51,8 @@ public class ExtensibleJavaScriptStack implements JavaScriptStack
private final List<String> stacks;
+ private final List<String> modules;
+
private final String initialization;
private final Predicate<StackExtension> by(final StackExtensionType type)
@@ -104,6 +106,8 @@ public class ExtensibleJavaScriptStack implements JavaScriptStack
stacks = extensions.filter(by(StackExtensionType.STACK)).map(extractValue).toList();
+ modules = extensions.filter(by(StackExtensionType.MODULE)).map(extractValue).toList();
+
stylesheets = extensions.filter(by(StackExtensionType.STYLESHEET)).map(extractValue).map(stringToAsset)
.map(assetToStylesheetLink).toList();
@@ -133,4 +137,8 @@ public class ExtensibleJavaScriptStack implements JavaScriptStack
return initialization;
}
+ public List<String> getModules()
+ {
+ return modules;
+ }
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b33fe5bc/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/JavaScriptStack.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/JavaScriptStack.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/JavaScriptStack.java
index 5a3b7d4..553d2a4 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/JavaScriptStack.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/JavaScriptStack.java
@@ -64,6 +64,14 @@ public interface JavaScriptStack
List<StylesheetLink> getStylesheets();
/**
+ * Returns a list of modules to {@link JavaScriptSupport#require(String) require} with the stack.
+ *
+ * @since 5.4
+ * @see ModuleManager
+ */
+ List<String> getModules();
+
+ /**
* Returns static JavaScript initialization for the stack. This block of JavaScript code will be added to the
* page that imports the stack. The code executes outside of any other function (i.e., the code is not deferred
* until the DOM is loaded). As with the other methods, if localization is a factor, the result of this method
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b33fe5bc/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/StackExtensionType.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/StackExtensionType.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/StackExtensionType.java
index d6ca2a3..2848817 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/StackExtensionType.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/StackExtensionType.java
@@ -1,4 +1,4 @@
-// Copyright 2011, 2012 The Apache Software Foundation
+// Copyright 2011-2013 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.
@@ -55,6 +55,12 @@ public enum StackExtensionType
STYLESHEET,
/**
+ * A module to load with the stack.
+ * @since 5.4
+ */
+ MODULE,
+
+ /**
* Extra JavaScript initialization (rarely used). No symbol expansion takes place.
*
* @see JavaScriptSupport#addScript(String, Object...)
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b33fe5bc/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.groovy
index 4496eb8..5796285 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.groovy
@@ -1,5 +1,4 @@
-package org.apache.tapestry5.internal.services.ajax;
-
+package org.apache.tapestry5.internal.services.ajax
import org.apache.tapestry5.Asset
import org.apache.tapestry5.ComponentResources
@@ -8,8 +7,8 @@ import org.apache.tapestry5.internal.services.javascript.JavaScriptStackPathCons
import org.apache.tapestry5.internal.test.InternalBaseTestCase
import org.apache.tapestry5.ioc.util.IdAllocator
import org.apache.tapestry5.json.JSONArray
-import org.testng.annotations.Test
import org.apache.tapestry5.services.javascript.*
+import org.testng.annotations.Test
class JavaScriptSupportImplTest extends InternalBaseTestCase {
@@ -122,7 +121,7 @@ class JavaScriptSupportImplTest extends InternalBaseTestCase {
expect(stackSource.getStack("mystack")).andReturn(mystack).atLeastOnce()
expect(mystack.stacks).andReturn([])
-
+ expect(mystack.modules).andReturn([])
expect(mystack.javaScriptLibraries).andReturn([library1, library2])
expect(pathConstructor.constructPathsForJavaScriptStack("mystack")).andReturn(["stacks/mystack.js"])
@@ -163,7 +162,7 @@ class JavaScriptSupportImplTest extends InternalBaseTestCase {
expect(stackSource.getStack("custom")).andReturn(stack)
expect(pathConstructor.constructPathsForJavaScriptStack("custom")).andReturn(["stack.js"])
expect(stack.stylesheets).andReturn([stylesheetLink])
-
+ expect(stack.modules).andReturn([])
expect(stack.initialization).andReturn "customInit();"
expect(stack.stacks).andReturn([])
@@ -188,6 +187,42 @@ class JavaScriptSupportImplTest extends InternalBaseTestCase {
}
@Test
+ void import_stack_with_modules() {
+ DocumentLinker linker = mockDocumentLinker()
+ JavaScriptStackSource stackSource = mockJavaScriptStackSource()
+ JavaScriptStackPathConstructor pathConstructor = mockJavaScriptStackPathConstructor()
+ JavaScriptStack mystack = mockJavaScriptStack()
+
+ expect(stackSource.getStack("mystack")).andReturn(mystack).atLeastOnce()
+
+ expect(mystack.stacks).andReturn([])
+ expect(mystack.modules).andReturn(["foo/bar", "gnip/gnop"])
+
+ expect(pathConstructor.constructPathsForJavaScriptStack("mystack")).andReturn(["stacks/mystack.js"])
+
+ expect(mystack.stylesheets).andReturn([])
+
+ expect(mystack.initialization).andReturn null
+
+ linker.addLibrary("stacks/mystack.js")
+ linker.addInitialization(InitializationPriority.NORMAL, "foo/bar", null, null)
+ linker.addInitialization(InitializationPriority.NORMAL, "gnip/gnop", null, null)
+
+ replay()
+
+ JavaScriptSupportImpl jss = new JavaScriptSupportImpl(linker, stackSource, pathConstructor)
+
+ jss.importStack("mystack")
+
+
+
+ jss.commit()
+
+ verify()
+
+ }
+
+ @Test
void import_stack_with_dependencies() {
DocumentLinker linker = mockDocumentLinker()
JavaScriptStackSource stackSource = mockJavaScriptStackSource()
@@ -208,11 +243,13 @@ class JavaScriptSupportImplTest extends InternalBaseTestCase {
expect(pathConstructor.constructPathsForJavaScriptStack("parent")).andReturn(["parent.js"])
expect(parent.stylesheets).andReturn([parentStylesheetLink])
+ expect(parent.modules).andReturn([])
expect(parent.initialization).andReturn("parentInit();")
expect(pathConstructor.constructPathsForJavaScriptStack("child")).andReturn(["child.js"])
expect(child.stylesheets).andReturn([childStylesheetLink])
+ expect(child.modules).andReturn([])
expect(child.getInitialization()).andReturn("childInit();")
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b33fe5bc/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ExtensibleJavaScriptStackTest.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ExtensibleJavaScriptStackTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ExtensibleJavaScriptStackTest.groovy
index 1615c4b..238af56 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ExtensibleJavaScriptStackTest.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ExtensibleJavaScriptStackTest.groovy
@@ -1,4 +1,4 @@
-// Copyright 2011, 2012 The Apache Software Foundation
+// Copyright 2011-2013 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.
@@ -65,6 +65,21 @@ class ExtensibleJavaScriptStackTest extends TapestryTestCase {
assert stack.javaScriptLibraries.empty
verify()
+ }
+
+ @Test
+ void contributed_modules() {
+
+ replay()
+
+ ExtensibleJavaScriptStack stack = new ExtensibleJavaScriptStack(null, [
+ new StackExtension(StackExtensionType.MODULE, "t5/core/dom"),
+ new StackExtension(StackExtensionType.MODULE, "magic"),
+ ])
+
+ assert stack.getModules() == ["t5/core/dom", "magic"]
+
+ verify()
}