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 2013/05/17 03:02:52 UTC

[1/2] git commit: Initial work on enabling CoffeeScript compilation

Updated Branches:
  refs/heads/master 56a114812 -> 9e76c372b


Initial work on enabling CoffeeScript compilation


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/bd26fb5c
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/bd26fb5c
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/bd26fb5c

Branch: refs/heads/master
Commit: bd26fb5c6164e2027f8cd2bc401b883d463768c2
Parents: 56a1148
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Thu May 16 17:51:29 2013 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Thu May 16 17:51:29 2013 -0700

----------------------------------------------------------------------
 build.gradle                                       |    3 +-
 settings.gradle                                    |    2 +-
 tapestry-wro4j/build.gradle                        |   13 ++
 .../wro4j/CoffeeScriptResourceCompiler.java        |   98 +++++++++++++++
 .../tapestry5/wro4j/modules/WRO4JModule.java       |   35 +++++
 .../src/test/groovy/t5/wro4j/pages/Index.groovy    |    9 ++
 .../src/test/java/t5/wro4j/services/AppModule.java |   29 +++++
 .../test/resources/META-INF/modules/index.coffee   |    5 +
 tapestry-wro4j/src/test/resources/log4j.properties |   12 ++
 .../src/test/resources/t5/wro4j/pages/Index.tml    |   24 ++++
 tapestry-wro4j/src/test/webapp/WEB-INF/web.xml     |   19 +++
 11 files changed, 247 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index cafec92..85bc99d 100755
--- a/build.gradle
+++ b/build.gradle
@@ -21,7 +21,8 @@ project.ext.versions = [
     spock: "0.7-groovy-2.0",
     hibernate: "4.1.2.Final",
     groovy: "2.0.6",
-    slf4j: "1.7.2"
+    slf4j: "1.7.2",
+    wro4j: "1.6.3"
 ]
 
 // Provided so that the CI server can override the normal version number for nightly builds.

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/settings.gradle
----------------------------------------------------------------------
diff --git a/settings.gradle b/settings.gradle
index de2c892..4338dbc 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -3,4 +3,4 @@ include "tapestry-hibernate-core", "tapestry-hibernate", "tapestry-jmx", "tapest
 include "tapestry-beanvalidator", "tapestry-yuicompressor", "tapestry-jpa", "tapestry-kaptcha"
 include "tapestry-javadoc", "quickstart", "tapestry-clojure", "tapestry-mongodb"
 include "tapestry-test-data", 'tapestry-internal-test'
-
+include "tapestry-wro4j"

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/build.gradle
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/build.gradle b/tapestry-wro4j/build.gradle
new file mode 100644
index 0000000..f54304d
--- /dev/null
+++ b/tapestry-wro4j/build.gradle
@@ -0,0 +1,13 @@
+description = "Integration with WRO4J to perform runtime CoffeeScript compilation, JavaScript minimization, etc."
+
+dependencies {
+    compile project(":tapestry-core")
+    compile "ro.isdc.wro4j:wro4j-extensions:${versions.wro4j}", {
+        exclude group: "org.codehaus.gmaven.runtime"
+        exclude group: "com.github.lltyk"
+    }
+}
+
+jar.manifest {
+    attributes 'Tapestry-Module-Classes': 'org.apache.tapestry5.wro4j.modules.WRO4JModule'
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java b/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
new file mode 100644
index 0000000..0f691ad
--- /dev/null
+++ b/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
@@ -0,0 +1,98 @@
+// Copyright 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.wro4j;
+
+import org.apache.tapestry5.internal.services.assets.BytestreamCache;
+import org.apache.tapestry5.ioc.IOOperation;
+import org.apache.tapestry5.ioc.OperationTracker;
+import org.apache.tapestry5.ioc.Resource;
+import org.apache.tapestry5.services.assets.ResourceDependencies;
+import org.apache.tapestry5.services.assets.ResourceTransformer;
+import org.slf4j.Logger;
+import ro.isdc.wro.extensions.processor.js.RhinoCoffeeScriptProcessor;
+import ro.isdc.wro.extensions.processor.support.coffeescript.CoffeeScript;
+import ro.isdc.wro.model.resource.ResourceType;
+import ro.isdc.wro.model.resource.processor.ResourcePreProcessor;
+
+import java.io.*;
+
+/**
+ * Compiles CoffeeScript to JavaScript, using {@link RhinoCoffeeScriptProcessor}.
+ *
+ * @since 5.4
+ */
+public class CoffeeScriptResourceCompiler implements ResourceTransformer
+{
+    private final Logger logger;
+
+    private final OperationTracker tracker;
+
+    private static final double NANOS_TO_MILLIS = 1.0d / 1000000.0d;
+
+    private final ResourcePreProcessor compiler =
+            new RhinoCoffeeScriptProcessor()
+            {
+                @Override
+                protected CoffeeScript newCoffeeScript()
+                {
+                    return new CoffeeScript();
+                }
+            };
+
+    public CoffeeScriptResourceCompiler(Logger logger, OperationTracker tracker)
+    {
+        this.logger = logger;
+        this.tracker = tracker;
+    }
+
+    public String getTransformedContentType()
+    {
+        return "text/javascript";
+    }
+
+
+    public InputStream transform(final Resource source, ResourceDependencies dependencies) throws IOException
+    {
+
+        return tracker.perform(String.format("Compiling %s from CoffeeScript to JavaScript", source),
+                new IOOperation<InputStream>()
+                {
+                    public InputStream perform() throws IOException
+                    {
+                        final long startTime = System.nanoTime();
+
+
+                        ro.isdc.wro.model.resource.Resource res = ro.isdc.wro.model.resource.Resource.create(
+                                source.toURL().toString(),
+                                ResourceType.JS);
+
+                        Reader reader = new InputStreamReader(source.openStream());
+                        ByteArrayOutputStream out = new ByteArrayOutputStream(5000);
+                        Writer writer = new OutputStreamWriter(out);
+
+                        compiler.process(res, reader, writer);
+
+                        final long elapsedTime = System.nanoTime() - startTime;
+
+
+                        logger.info(String.format("Compiled %s to JavaScript in %.2f ms",
+                                source,
+                                ((double) elapsedTime) * NANOS_TO_MILLIS));
+
+                        return new BytestreamCache(out).openStream();
+                    }
+                });
+    }
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/main/java/org/apache/tapestry5/wro4j/modules/WRO4JModule.java
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/src/main/java/org/apache/tapestry5/wro4j/modules/WRO4JModule.java b/tapestry-wro4j/src/main/java/org/apache/tapestry5/wro4j/modules/WRO4JModule.java
new file mode 100644
index 0000000..006448c
--- /dev/null
+++ b/tapestry-wro4j/src/main/java/org/apache/tapestry5/wro4j/modules/WRO4JModule.java
@@ -0,0 +1,35 @@
+// Copyright 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.wro4j.modules;
+
+import org.apache.tapestry5.internal.wro4j.CoffeeScriptResourceCompiler;
+import org.apache.tapestry5.ioc.MappedConfiguration;
+import org.apache.tapestry5.ioc.annotations.Contribute;
+import org.apache.tapestry5.services.assets.ResourceTransformer;
+import org.apache.tapestry5.services.assets.StreamableResourceSource;
+
+/**
+ * Configures CoffeeScript-to-JavaScript compilation.
+ *
+ * @since 5.4
+ */
+public class WRO4JModule
+{
+    @Contribute(StreamableResourceSource.class)
+    public static void provideCoffeeScriptCompilation(MappedConfiguration<String, ResourceTransformer> configuration)
+    {
+        configuration.addInstance("coffee", CoffeeScriptResourceCompiler.class);
+    }
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/test/groovy/t5/wro4j/pages/Index.groovy
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/src/test/groovy/t5/wro4j/pages/Index.groovy b/tapestry-wro4j/src/test/groovy/t5/wro4j/pages/Index.groovy
new file mode 100644
index 0000000..690577e
--- /dev/null
+++ b/tapestry-wro4j/src/test/groovy/t5/wro4j/pages/Index.groovy
@@ -0,0 +1,9 @@
+package t5.wro4j.pages
+
+import org.apache.tapestry5.annotations.Import
+
+@Import(stack = "core", module = "index")
+class Index {
+
+
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/test/java/t5/wro4j/services/AppModule.java
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/src/test/java/t5/wro4j/services/AppModule.java b/tapestry-wro4j/src/test/java/t5/wro4j/services/AppModule.java
new file mode 100644
index 0000000..82792e1
--- /dev/null
+++ b/tapestry-wro4j/src/test/java/t5/wro4j/services/AppModule.java
@@ -0,0 +1,29 @@
+package t5.wro4j.services;
+
+import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.ioc.MappedConfiguration;
+import org.apache.tapestry5.ioc.annotations.Contribute;
+import org.apache.tapestry5.ioc.annotations.SubModule;
+import org.apache.tapestry5.ioc.services.ApplicationDefaults;
+import org.apache.tapestry5.ioc.services.SymbolProvider;
+import org.apache.tapestry5.services.compatibility.Compatibility;
+import org.apache.tapestry5.services.compatibility.Trait;
+import org.apache.tapestry5.wro4j.modules.WRO4JModule;
+
+@SubModule(WRO4JModule.class)
+public class AppModule
+{
+    @Contribute(Compatibility.class)
+    public static void disableOldStuff(MappedConfiguration<Trait, Boolean> configuration)
+    {
+        configuration.add(Trait.INITIALIZERS, false);
+        configuration.add(Trait.SCRIPTACULOUS, false);
+    }
+
+    @Contribute(SymbolProvider.class)
+    @ApplicationDefaults
+    public static void enableJQuery(MappedConfiguration<String, Object> configuration)
+    {
+        configuration.add(SymbolConstants.JAVASCRIPT_INFRASTRUCTURE_PROVIDER, "jquery");
+    }
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee b/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
new file mode 100644
index 0000000..d8e9c1d
--- /dev/null
+++ b/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
@@ -0,0 +1,5 @@
+require ["t5/core/dom"], (dom) ->
+
+  (dom "banner").update "Index module loaded !!!"
+
+

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/src/test/resources/log4j.properties b/tapestry-wro4j/src/test/resources/log4j.properties
new file mode 100644
index 0000000..c69dbf4
--- /dev/null
+++ b/tapestry-wro4j/src/test/resources/log4j.properties
@@ -0,0 +1,12 @@
+log4j.rootCategory=INFO, A1
+
+# A1 is set to be a ConsoleAppender. 
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%p] %c{1} %m%n
+
+log4j.category.org.apache.tapestry5.modules.AssetsModule.ResourceMinimizer=debug
+log4j.category.org.apache.tapestry5.wro4j=debug
+log4j.category.org.apache.tapestry5.internal.wro4j=debug

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/test/resources/t5/wro4j/pages/Index.tml
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/src/test/resources/t5/wro4j/pages/Index.tml b/tapestry-wro4j/src/test/resources/t5/wro4j/pages/Index.tml
new file mode 100644
index 0000000..026e53d
--- /dev/null
+++ b/tapestry-wro4j/src/test/resources/t5/wro4j/pages/Index.tml
@@ -0,0 +1,24 @@
+<html>
+<head>
+    <title>WRO4J Tests</title>
+</head>
+
+    <div class="navbar navbar-inverse">
+        <div class="navbar-inner">
+            <div class="container">
+
+            <a class="brand" href="/">WRO4J Module Tests</a>
+        </div>
+    </div>
+</div>
+
+<div class="container">
+
+    <p>This page is used to demonstrate the integration of WRO4J.</p>
+
+
+    <div class="alert alert-success" id="banner"/>
+
+</div>
+
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/test/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/src/test/webapp/WEB-INF/web.xml b/tapestry-wro4j/src/test/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..23e3a60
--- /dev/null
+++ b/tapestry-wro4j/src/test/webapp/WEB-INF/web.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE web-app
+        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+        "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app>
+  <display-name>Tapestry WRO4J Integration</display-name>
+  <context-param>
+    <param-name>tapestry.app-package</param-name>
+    <param-value>t5.wro4j</param-value>
+  </context-param>
+  <filter>
+    <filter-name>app</filter-name>
+    <filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
+  </filter>
+  <filter-mapping>
+    <filter-name>app</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
+</web-app>


[2/2] git commit: Compile CoffeeScript as with --bare

Posted by hl...@apache.org.
Compile CoffeeScript as with --bare


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/9e76c372
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/9e76c372
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/9e76c372

Branch: refs/heads/master
Commit: 9e76c372bbae35881d384178160cb29c6799b347
Parents: bd26fb5
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Thu May 16 18:02:47 2013 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Thu May 16 18:02:47 2013 -0700

----------------------------------------------------------------------
 .../wro4j/CoffeeScriptResourceCompiler.java        |    6 ++++--
 .../test/resources/META-INF/modules/index.coffee   |    2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9e76c372/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java b/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
index 0f691ad..9dd9ed3 100644
--- a/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
+++ b/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
@@ -29,7 +29,8 @@ import ro.isdc.wro.model.resource.processor.ResourcePreProcessor;
 import java.io.*;
 
 /**
- * Compiles CoffeeScript to JavaScript, using {@link RhinoCoffeeScriptProcessor}.
+ * Compiles CoffeeScript to JavaScript, using {@link RhinoCoffeeScriptProcessor}. Because what is most commonly written
+ * are AMD Modules, which have (effectively) an implicit hygenic function wrapper, we compile as with "--bare".
  *
  * @since 5.4
  */
@@ -44,10 +45,11 @@ public class CoffeeScriptResourceCompiler implements ResourceTransformer
     private final ResourcePreProcessor compiler =
             new RhinoCoffeeScriptProcessor()
             {
+
                 @Override
                 protected CoffeeScript newCoffeeScript()
                 {
-                    return new CoffeeScript();
+                    return new CoffeeScript().setOptions("bare");
                 }
             };
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9e76c372/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee b/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
index d8e9c1d..6f48b17 100644
--- a/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
+++ b/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
@@ -1,5 +1,5 @@
 require ["t5/core/dom"], (dom) ->
 
-  (dom "banner").update "Index module loaded !!!"
+  (dom "banner").update "Index module loaded, bare."
 
 


[2/2] git commit: Compile CoffeeScript as with --bare

Posted by hl...@apache.org.
Compile CoffeeScript as with --bare


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/9e76c372
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/9e76c372
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/9e76c372

Branch: refs/heads/master
Commit: 9e76c372bbae35881d384178160cb29c6799b347
Parents: bd26fb5
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Thu May 16 18:02:47 2013 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Thu May 16 18:02:47 2013 -0700

----------------------------------------------------------------------
 .../wro4j/CoffeeScriptResourceCompiler.java        |    6 ++++--
 .../test/resources/META-INF/modules/index.coffee   |    2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9e76c372/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java b/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
index 0f691ad..9dd9ed3 100644
--- a/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
+++ b/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
@@ -29,7 +29,8 @@ import ro.isdc.wro.model.resource.processor.ResourcePreProcessor;
 import java.io.*;
 
 /**
- * Compiles CoffeeScript to JavaScript, using {@link RhinoCoffeeScriptProcessor}.
+ * Compiles CoffeeScript to JavaScript, using {@link RhinoCoffeeScriptProcessor}. Because what is most commonly written
+ * are AMD Modules, which have (effectively) an implicit hygenic function wrapper, we compile as with "--bare".
  *
  * @since 5.4
  */
@@ -44,10 +45,11 @@ public class CoffeeScriptResourceCompiler implements ResourceTransformer
     private final ResourcePreProcessor compiler =
             new RhinoCoffeeScriptProcessor()
             {
+
                 @Override
                 protected CoffeeScript newCoffeeScript()
                 {
-                    return new CoffeeScript();
+                    return new CoffeeScript().setOptions("bare");
                 }
             };
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9e76c372/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
----------------------------------------------------------------------
diff --git a/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee b/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
index d8e9c1d..6f48b17 100644
--- a/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
+++ b/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
@@ -1,5 +1,5 @@
 require ["t5/core/dom"], (dom) ->
 
-  (dom "banner").update "Index module loaded !!!"
+  (dom "banner").update "Index module loaded, bare."
 
 


Re: [1/2] git commit: Initial work on enabling CoffeeScript compilation

Posted by Howard Lewis Ship <hl...@gmail.com>.
thanks for the reminder

On Friday, May 17, 2013, Ulrich Stärk wrote:

> please also add a NOTICE and LICENSE file for this new module.
>
> Uli
>
> On 17.05.2013 03:02, hlship@apache.org wrote:
> > Updated Branches:
> >   refs/heads/master 56a114812 -> 9e76c372b
> >
> >
> > Initial work on enabling CoffeeScript compilation
> >
> >
> > Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
> > Commit:
> http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/bd26fb5c
> > Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/bd26fb5c
> > Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/bd26fb5c
> >
> > Branch: refs/heads/master
> > Commit: bd26fb5c6164e2027f8cd2bc401b883d463768c2
> > Parents: 56a1148
> > Author: Howard M. Lewis Ship <hl...@apache.org>
> > Authored: Thu May 16 17:51:29 2013 -0700
> > Committer: Howard M. Lewis Ship <hl...@apache.org>
> > Committed: Thu May 16 17:51:29 2013 -0700
> >
> > ----------------------------------------------------------------------
> >  build.gradle                                       |    3 +-
> >  settings.gradle                                    |    2 +-
> >  tapestry-wro4j/build.gradle                        |   13 ++
> >  .../wro4j/CoffeeScriptResourceCompiler.java        |   98
> +++++++++++++++
> >  .../tapestry5/wro4j/modules/WRO4JModule.java       |   35 +++++
> >  .../src/test/groovy/t5/wro4j/pages/Index.groovy    |    9 ++
> >  .../src/test/java/t5/wro4j/services/AppModule.java |   29 +++++
> >  .../test/resources/META-INF/modules/index.coffee   |    5 +
> >  tapestry-wro4j/src/test/resources/log4j.properties |   12 ++
> >  .../src/test/resources/t5/wro4j/pages/Index.tml    |   24 ++++
> >  tapestry-wro4j/src/test/webapp/WEB-INF/web.xml     |   19 +++
> >  11 files changed, 247 insertions(+), 2 deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/build.gradle
> > ----------------------------------------------------------------------
> > diff --git a/build.gradle b/build.gradle
> > index cafec92..85bc99d 100755
> > --- a/build.gradle
> > +++ b/build.gradle
> > @@ -21,7 +21,8 @@ project.ext.versions = [
> >      spock: "0.7-groovy-2.0",
> >      hibernate: "4.1.2.Final",
> >      groovy: "2.0.6",
> > -    slf4j: "1.7.2"
> > +    slf4j: "1.7.2",
> > +    wro4j: "1.6.3"
> >  ]
> >
> >  // Provided so that the CI server can override the normal version
> number for nightly builds.
> >
> >
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/settings.gradle
> > ----------------------------------------------------------------------
> > diff --git a/settings.gradle b/settings.gradle
> > index de2c892..4338dbc 100644
> > --- a/settings.gradle
> > +++ b/settings.gradle
> > @@ -3,4 +3,4 @@ include "tapestry-hibernate-core", "tapestry-hibernate",
> "tapestry-jmx", "tapest
> >  include "tapestry-beanvalidator", "tapestry-yuicompressor",
> "tapestry-jpa", "tapestry-kaptcha"
> >  include "tapestry-javadoc", "quickstart", "tapestry-clojure",
> "---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org <javascript:;>
> For additional commands, e-mail: dev-help@tapestry.apache.org<javascript:;>
>
>

-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

Re: [1/2] git commit: Initial work on enabling CoffeeScript compilation

Posted by Ulrich Stärk <ul...@spielviel.de>.
please also add a NOTICE and LICENSE file for this new module.

Uli

On 17.05.2013 03:02, hlship@apache.org wrote:
> Updated Branches:
>   refs/heads/master 56a114812 -> 9e76c372b
> 
> 
> Initial work on enabling CoffeeScript compilation
> 
> 
> Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
> Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/bd26fb5c
> Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/bd26fb5c
> Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/bd26fb5c
> 
> Branch: refs/heads/master
> Commit: bd26fb5c6164e2027f8cd2bc401b883d463768c2
> Parents: 56a1148
> Author: Howard M. Lewis Ship <hl...@apache.org>
> Authored: Thu May 16 17:51:29 2013 -0700
> Committer: Howard M. Lewis Ship <hl...@apache.org>
> Committed: Thu May 16 17:51:29 2013 -0700
> 
> ----------------------------------------------------------------------
>  build.gradle                                       |    3 +-
>  settings.gradle                                    |    2 +-
>  tapestry-wro4j/build.gradle                        |   13 ++
>  .../wro4j/CoffeeScriptResourceCompiler.java        |   98 +++++++++++++++
>  .../tapestry5/wro4j/modules/WRO4JModule.java       |   35 +++++
>  .../src/test/groovy/t5/wro4j/pages/Index.groovy    |    9 ++
>  .../src/test/java/t5/wro4j/services/AppModule.java |   29 +++++
>  .../test/resources/META-INF/modules/index.coffee   |    5 +
>  tapestry-wro4j/src/test/resources/log4j.properties |   12 ++
>  .../src/test/resources/t5/wro4j/pages/Index.tml    |   24 ++++
>  tapestry-wro4j/src/test/webapp/WEB-INF/web.xml     |   19 +++
>  11 files changed, 247 insertions(+), 2 deletions(-)
> ----------------------------------------------------------------------
> 
> 
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/build.gradle
> ----------------------------------------------------------------------
> diff --git a/build.gradle b/build.gradle
> index cafec92..85bc99d 100755
> --- a/build.gradle
> +++ b/build.gradle
> @@ -21,7 +21,8 @@ project.ext.versions = [
>      spock: "0.7-groovy-2.0",
>      hibernate: "4.1.2.Final",
>      groovy: "2.0.6",
> -    slf4j: "1.7.2"
> +    slf4j: "1.7.2",
> +    wro4j: "1.6.3"
>  ]
>  
>  // Provided so that the CI server can override the normal version number for nightly builds.
> 
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/settings.gradle
> ----------------------------------------------------------------------
> diff --git a/settings.gradle b/settings.gradle
> index de2c892..4338dbc 100644
> --- a/settings.gradle
> +++ b/settings.gradle
> @@ -3,4 +3,4 @@ include "tapestry-hibernate-core", "tapestry-hibernate", "tapestry-jmx", "tapest
>  include "tapestry-beanvalidator", "tapestry-yuicompressor", "tapestry-jpa", "tapestry-kaptcha"
>  include "tapestry-javadoc", "quickstart", "tapestry-clojure", "tapestry-mongodb"
>  include "tapestry-test-data", 'tapestry-internal-test'
> -
> +include "tapestry-wro4j"
> 
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/build.gradle
> ----------------------------------------------------------------------
> diff --git a/tapestry-wro4j/build.gradle b/tapestry-wro4j/build.gradle
> new file mode 100644
> index 0000000..f54304d
> --- /dev/null
> +++ b/tapestry-wro4j/build.gradle
> @@ -0,0 +1,13 @@
> +description = "Integration with WRO4J to perform runtime CoffeeScript compilation, JavaScript minimization, etc."
> +
> +dependencies {
> +    compile project(":tapestry-core")
> +    compile "ro.isdc.wro4j:wro4j-extensions:${versions.wro4j}", {
> +        exclude group: "org.codehaus.gmaven.runtime"
> +        exclude group: "com.github.lltyk"
> +    }
> +}
> +
> +jar.manifest {
> +    attributes 'Tapestry-Module-Classes': 'org.apache.tapestry5.wro4j.modules.WRO4JModule'
> +}
> 
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
> ----------------------------------------------------------------------
> diff --git a/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java b/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
> new file mode 100644
> index 0000000..0f691ad
> --- /dev/null
> +++ b/tapestry-wro4j/src/main/java/org/apache/tapestry5/internal/wro4j/CoffeeScriptResourceCompiler.java
> @@ -0,0 +1,98 @@
> +// Copyright 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.
> +// You may obtain a copy of the License at
> +//
> +// http://www.apache.org/licenses/LICENSE-2.0
> +//
> +// Unless required by applicable law or agreed to in writing, software
> +// distributed under the License is distributed on an "AS IS" BASIS,
> +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +// See the License for the specific language governing permissions and
> +// limitations under the License.
> +
> +package org.apache.tapestry5.internal.wro4j;
> +
> +import org.apache.tapestry5.internal.services.assets.BytestreamCache;
> +import org.apache.tapestry5.ioc.IOOperation;
> +import org.apache.tapestry5.ioc.OperationTracker;
> +import org.apache.tapestry5.ioc.Resource;
> +import org.apache.tapestry5.services.assets.ResourceDependencies;
> +import org.apache.tapestry5.services.assets.ResourceTransformer;
> +import org.slf4j.Logger;
> +import ro.isdc.wro.extensions.processor.js.RhinoCoffeeScriptProcessor;
> +import ro.isdc.wro.extensions.processor.support.coffeescript.CoffeeScript;
> +import ro.isdc.wro.model.resource.ResourceType;
> +import ro.isdc.wro.model.resource.processor.ResourcePreProcessor;
> +
> +import java.io.*;
> +
> +/**
> + * Compiles CoffeeScript to JavaScript, using {@link RhinoCoffeeScriptProcessor}.
> + *
> + * @since 5.4
> + */
> +public class CoffeeScriptResourceCompiler implements ResourceTransformer
> +{
> +    private final Logger logger;
> +
> +    private final OperationTracker tracker;
> +
> +    private static final double NANOS_TO_MILLIS = 1.0d / 1000000.0d;
> +
> +    private final ResourcePreProcessor compiler =
> +            new RhinoCoffeeScriptProcessor()
> +            {
> +                @Override
> +                protected CoffeeScript newCoffeeScript()
> +                {
> +                    return new CoffeeScript();
> +                }
> +            };
> +
> +    public CoffeeScriptResourceCompiler(Logger logger, OperationTracker tracker)
> +    {
> +        this.logger = logger;
> +        this.tracker = tracker;
> +    }
> +
> +    public String getTransformedContentType()
> +    {
> +        return "text/javascript";
> +    }
> +
> +
> +    public InputStream transform(final Resource source, ResourceDependencies dependencies) throws IOException
> +    {
> +
> +        return tracker.perform(String.format("Compiling %s from CoffeeScript to JavaScript", source),
> +                new IOOperation<InputStream>()
> +                {
> +                    public InputStream perform() throws IOException
> +                    {
> +                        final long startTime = System.nanoTime();
> +
> +
> +                        ro.isdc.wro.model.resource.Resource res = ro.isdc.wro.model.resource.Resource.create(
> +                                source.toURL().toString(),
> +                                ResourceType.JS);
> +
> +                        Reader reader = new InputStreamReader(source.openStream());
> +                        ByteArrayOutputStream out = new ByteArrayOutputStream(5000);
> +                        Writer writer = new OutputStreamWriter(out);
> +
> +                        compiler.process(res, reader, writer);
> +
> +                        final long elapsedTime = System.nanoTime() - startTime;
> +
> +
> +                        logger.info(String.format("Compiled %s to JavaScript in %.2f ms",
> +                                source,
> +                                ((double) elapsedTime) * NANOS_TO_MILLIS));
> +
> +                        return new BytestreamCache(out).openStream();
> +                    }
> +                });
> +    }
> +}
> 
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/main/java/org/apache/tapestry5/wro4j/modules/WRO4JModule.java
> ----------------------------------------------------------------------
> diff --git a/tapestry-wro4j/src/main/java/org/apache/tapestry5/wro4j/modules/WRO4JModule.java b/tapestry-wro4j/src/main/java/org/apache/tapestry5/wro4j/modules/WRO4JModule.java
> new file mode 100644
> index 0000000..006448c
> --- /dev/null
> +++ b/tapestry-wro4j/src/main/java/org/apache/tapestry5/wro4j/modules/WRO4JModule.java
> @@ -0,0 +1,35 @@
> +// Copyright 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.
> +// You may obtain a copy of the License at
> +//
> +// http://www.apache.org/licenses/LICENSE-2.0
> +//
> +// Unless required by applicable law or agreed to in writing, software
> +// distributed under the License is distributed on an "AS IS" BASIS,
> +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +// See the License for the specific language governing permissions and
> +// limitations under the License.
> +
> +package org.apache.tapestry5.wro4j.modules;
> +
> +import org.apache.tapestry5.internal.wro4j.CoffeeScriptResourceCompiler;
> +import org.apache.tapestry5.ioc.MappedConfiguration;
> +import org.apache.tapestry5.ioc.annotations.Contribute;
> +import org.apache.tapestry5.services.assets.ResourceTransformer;
> +import org.apache.tapestry5.services.assets.StreamableResourceSource;
> +
> +/**
> + * Configures CoffeeScript-to-JavaScript compilation.
> + *
> + * @since 5.4
> + */
> +public class WRO4JModule
> +{
> +    @Contribute(StreamableResourceSource.class)
> +    public static void provideCoffeeScriptCompilation(MappedConfiguration<String, ResourceTransformer> configuration)
> +    {
> +        configuration.addInstance("coffee", CoffeeScriptResourceCompiler.class);
> +    }
> +}
> 
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/test/groovy/t5/wro4j/pages/Index.groovy
> ----------------------------------------------------------------------
> diff --git a/tapestry-wro4j/src/test/groovy/t5/wro4j/pages/Index.groovy b/tapestry-wro4j/src/test/groovy/t5/wro4j/pages/Index.groovy
> new file mode 100644
> index 0000000..690577e
> --- /dev/null
> +++ b/tapestry-wro4j/src/test/groovy/t5/wro4j/pages/Index.groovy
> @@ -0,0 +1,9 @@
> +package t5.wro4j.pages
> +
> +import org.apache.tapestry5.annotations.Import
> +
> +@Import(stack = "core", module = "index")
> +class Index {
> +
> +
> +}
> 
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/test/java/t5/wro4j/services/AppModule.java
> ----------------------------------------------------------------------
> diff --git a/tapestry-wro4j/src/test/java/t5/wro4j/services/AppModule.java b/tapestry-wro4j/src/test/java/t5/wro4j/services/AppModule.java
> new file mode 100644
> index 0000000..82792e1
> --- /dev/null
> +++ b/tapestry-wro4j/src/test/java/t5/wro4j/services/AppModule.java
> @@ -0,0 +1,29 @@
> +package t5.wro4j.services;
> +
> +import org.apache.tapestry5.SymbolConstants;
> +import org.apache.tapestry5.ioc.MappedConfiguration;
> +import org.apache.tapestry5.ioc.annotations.Contribute;
> +import org.apache.tapestry5.ioc.annotations.SubModule;
> +import org.apache.tapestry5.ioc.services.ApplicationDefaults;
> +import org.apache.tapestry5.ioc.services.SymbolProvider;
> +import org.apache.tapestry5.services.compatibility.Compatibility;
> +import org.apache.tapestry5.services.compatibility.Trait;
> +import org.apache.tapestry5.wro4j.modules.WRO4JModule;
> +
> +@SubModule(WRO4JModule.class)
> +public class AppModule
> +{
> +    @Contribute(Compatibility.class)
> +    public static void disableOldStuff(MappedConfiguration<Trait, Boolean> configuration)
> +    {
> +        configuration.add(Trait.INITIALIZERS, false);
> +        configuration.add(Trait.SCRIPTACULOUS, false);
> +    }
> +
> +    @Contribute(SymbolProvider.class)
> +    @ApplicationDefaults
> +    public static void enableJQuery(MappedConfiguration<String, Object> configuration)
> +    {
> +        configuration.add(SymbolConstants.JAVASCRIPT_INFRASTRUCTURE_PROVIDER, "jquery");
> +    }
> +}
> 
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
> ----------------------------------------------------------------------
> diff --git a/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee b/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
> new file mode 100644
> index 0000000..d8e9c1d
> --- /dev/null
> +++ b/tapestry-wro4j/src/test/resources/META-INF/modules/index.coffee
> @@ -0,0 +1,5 @@
> +require ["t5/core/dom"], (dom) ->
> +
> +  (dom "banner").update "Index module loaded !!!"
> +
> +
> 
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/test/resources/log4j.properties
> ----------------------------------------------------------------------
> diff --git a/tapestry-wro4j/src/test/resources/log4j.properties b/tapestry-wro4j/src/test/resources/log4j.properties
> new file mode 100644
> index 0000000..c69dbf4
> --- /dev/null
> +++ b/tapestry-wro4j/src/test/resources/log4j.properties
> @@ -0,0 +1,12 @@
> +log4j.rootCategory=INFO, A1
> +
> +# A1 is set to be a ConsoleAppender. 
> +log4j.appender.A1=org.apache.log4j.ConsoleAppender
> +
> +# A1 uses PatternLayout.
> +log4j.appender.A1.layout=org.apache.log4j.PatternLayout
> +log4j.appender.A1.layout.ConversionPattern=[%p] %c{1} %m%n
> +
> +log4j.category.org.apache.tapestry5.modules.AssetsModule.ResourceMinimizer=debug
> +log4j.category.org.apache.tapestry5.wro4j=debug
> +log4j.category.org.apache.tapestry5.internal.wro4j=debug
> 
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/test/resources/t5/wro4j/pages/Index.tml
> ----------------------------------------------------------------------
> diff --git a/tapestry-wro4j/src/test/resources/t5/wro4j/pages/Index.tml b/tapestry-wro4j/src/test/resources/t5/wro4j/pages/Index.tml
> new file mode 100644
> index 0000000..026e53d
> --- /dev/null
> +++ b/tapestry-wro4j/src/test/resources/t5/wro4j/pages/Index.tml
> @@ -0,0 +1,24 @@
> +<html>
> +<head>
> +    <title>WRO4J Tests</title>
> +</head>
> +
> +    <div class="navbar navbar-inverse">
> +        <div class="navbar-inner">
> +            <div class="container">
> +
> +            <a class="brand" href="/">WRO4J Module Tests</a>
> +        </div>
> +    </div>
> +</div>
> +
> +<div class="container">
> +
> +    <p>This page is used to demonstrate the integration of WRO4J.</p>
> +
> +
> +    <div class="alert alert-success" id="banner"/>
> +
> +</div>
> +
> +</html>
> \ No newline at end of file
> 
> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bd26fb5c/tapestry-wro4j/src/test/webapp/WEB-INF/web.xml
> ----------------------------------------------------------------------
> diff --git a/tapestry-wro4j/src/test/webapp/WEB-INF/web.xml b/tapestry-wro4j/src/test/webapp/WEB-INF/web.xml
> new file mode 100644
> index 0000000..23e3a60
> --- /dev/null
> +++ b/tapestry-wro4j/src/test/webapp/WEB-INF/web.xml
> @@ -0,0 +1,19 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<!DOCTYPE web-app
> +        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
> +        "http://java.sun.com/dtd/web-app_2_3.dtd">
> +<web-app>
> +  <display-name>Tapestry WRO4J Integration</display-name>
> +  <context-param>
> +    <param-name>tapestry.app-package</param-name>
> +    <param-value>t5.wro4j</param-value>
> +  </context-param>
> +  <filter>
> +    <filter-name>app</filter-name>
> +    <filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
> +  </filter>
> +  <filter-mapping>
> +    <filter-name>app</filter-name>
> +    <url-pattern>/*</url-pattern>
> +  </filter-mapping>
> +</web-app>
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org