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()
 
     }