tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hls...@apache.org
Subject [1/2] git commit: Initial work on enabling CoffeeScript compilation
Date Fri, 17 May 2013 01:02:52 GMT
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 <hlship@apache.org>
Authored: Thu May 16 17:51:29 2013 -0700
Committer: Howard M. Lewis Ship <hlship@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>


Mime
View raw message