WICKET-5827 Allow to apply multiple Javascript / CSS compressors

Relativize the image path against the css path, then create a 
PackageResourceReference to create a Wicket url for the image that is processed 
by the configured IResourceCachingStrategy


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/7ee9d755
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/7ee9d755
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/7ee9d755

Branch: refs/heads/master
Commit: 7ee9d755a29a6b7e2176a4736392090f0a9bed2e
Parents: fe5e545
Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Authored: Thu Feb 12 23:00:16 2015 +0200
Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Committed: Thu Feb 12 23:00:16 2015 +0200

----------------------------------------------------------------------
 .../apache/wicket/resource/CssUrlReplacer.java  | 11 ++---
 .../wicket/resource/CssUrlReplacerTest.java     | 42 +++++++++++++++++---
 2 files changed, 42 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/7ee9d755/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java 
b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
index 47a0d47..a636609 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java
@@ -48,16 +48,15 @@ public class CssUrlReplacer implements 
IScopeAwareTextResourceProcessor
        @Override
        public String process(String input, Class<?> scope, String name)
        {
-               PackageResourceReference cssReference = new 
PackageResourceReference(scope, name);
-               CharSequence urlToCss = RequestCycle.get().urlFor(cssReference, 
null);
-               Url cssUrl = Url.parse(urlToCss);
+               RequestCycle cycle = RequestCycle.get();
+               Url cssUrl = Url.parse(name);
                Matcher matcher = URL_PATTERN.matcher(input);
                StringBuffer output = new StringBuffer();
 
                while (matcher.find())
                {
                        Url imageCandidateUrl = Url.parse(matcher.group(1));
-                       String processedUrl;
+                       CharSequence processedUrl;
                        if (imageCandidateUrl.isFull())
                        {
                                processedUrl = 
imageCandidateUrl.toString(Url.StringMode.FULL);
@@ -71,7 +70,9 @@ public class CssUrlReplacer implements 
IScopeAwareTextResourceProcessor
                                // relativize against the url for the 
containing CSS file
                                Url cssUrlCopy = new Url(cssUrl);
                                cssUrlCopy.resolveRelative(imageCandidateUrl);
-                               processedUrl = cssUrlCopy.toString();
+                               PackageResourceReference imageReference = new 
PackageResourceReference(scope, cssUrlCopy.toString());
+                               processedUrl = cycle.urlFor(imageReference, 
null);
+
                        }
                        matcher.appendReplacement(output, "url('" + 
processedUrl + "')");
                }

http://git-wip-us.apache.org/repos/asf/wicket/blob/7ee9d755/wicket-core/src/test/java/org/apache/wicket/resource/CssUrlReplacerTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/resource/CssUrlReplacerTest.java 
b/wicket-core/src/test/java/org/apache/wicket/resource/CssUrlReplacerTest.java
index 84bf6cf..df25e63 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/resource/CssUrlReplacerTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/resource/CssUrlReplacerTest.java
@@ -20,10 +20,40 @@ import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.is;
 
 import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.protocol.http.WebApplication;
+import 
org.apache.wicket.request.resource.caching.FilenameWithVersionResourceCachingStrategy;
+import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
+import org.apache.wicket.request.resource.caching.ResourceUrl;
+import 
org.apache.wicket.request.resource.caching.version.MessageDigestResourceVersion;
 import org.junit.Test;
 
 public class CssUrlReplacerTest extends WicketTestCase
 {
+
+       private static final String DECORATION_SUFFIX = "--decorated";
+
+       @Override
+       protected WebApplication newApplication()
+       {
+               return new MockApplication() {
+                       @Override
+                       protected void init()
+                       {
+                               super.init();
+
+                               getResourceSettings().setCachingStrategy(new 
FilenameWithVersionResourceCachingStrategy("=VER=", new 
MessageDigestResourceVersion())
+                               {
+                                       @Override
+                                       public void decorateUrl(ResourceUrl 
url, IStaticCacheableResource resource)
+                                       {
+                                               
url.setFileName(url.getFileName() + DECORATION_SUFFIX);
+                                       }
+                               });
+                       }
+               };
+       }
+
        @Test
        public void doNotProcessFullUrls()
        {
@@ -57,7 +87,7 @@ public class CssUrlReplacerTest extends WicketTestCase
                CssUrlReplacer replacer = new CssUrlReplacer();
 
                String processed = replacer.process(input, scope, 
cssRelativePath);
-               assertThat(processed, is(".class {background-image: 
url('./wicket/resource/org.apache.wicket.resource.CssUrlReplacerTest/res/css/some.img');}"));
+               assertThat(processed, is(".class {background-image: 
url('./wicket/resource/org.apache.wicket.resource.CssUrlReplacerTest/res/css/some.img"+DECORATION_SUFFIX+"');}"));
        }
 
        @Test
@@ -69,7 +99,7 @@ public class CssUrlReplacerTest extends WicketTestCase
                CssUrlReplacer replacer = new CssUrlReplacer();
 
                String processed = replacer.process(input, scope, 
cssRelativePath);
-               assertThat(processed, is(".class {background-image: 
url('./wicket/resource/org.apache.wicket.resource.CssUrlReplacerTest/res/css/some.img');}"));
+               assertThat(processed, is(".class {background-image: 
url('./wicket/resource/org.apache.wicket.resource.CssUrlReplacerTest/res/css/some.img"+DECORATION_SUFFIX+"');}"));
        }
 
        @Test
@@ -81,7 +111,7 @@ public class CssUrlReplacerTest extends WicketTestCase
                CssUrlReplacer replacer = new CssUrlReplacer();
 
                String processed = replacer.process(input, scope, 
cssRelativePath);
-               assertThat(processed, is(".class {background-image: 
url('./wicket/resource/org.apache.wicket.resource.CssUrlReplacerTest/res/images/some.img');}"));
+               assertThat(processed, is(".class {background-image: 
url('./wicket/resource/org.apache.wicket.resource.CssUrlReplacerTest/res/images/some.img"+DECORATION_SUFFIX+"');}"));
        }
 
        @Test
@@ -93,7 +123,7 @@ public class CssUrlReplacerTest extends WicketTestCase
                CssUrlReplacer replacer = new CssUrlReplacer();
 
                String processed = replacer.process(input, scope, 
cssRelativePath);
-               assertThat(processed, is(".class {background-image: 
url('./wicket/resource/org.apache.wicket.resource.CssUrlReplacerTest/res/css/images/some.img');}"));
+               assertThat(processed, is(".class {background-image: 
url('./wicket/resource/org.apache.wicket.resource.CssUrlReplacerTest/res/css/images/some.img"+DECORATION_SUFFIX+"');}"));
        }
 
        @Test
@@ -109,7 +139,7 @@ public class CssUrlReplacerTest extends WicketTestCase
                CssUrlReplacer replacer = new CssUrlReplacer();
 
                String processed = replacer.process(input, scope, 
cssRelativePath);
-               assertThat(processed, 
containsString("CssUrlReplacerTest/res/images/a.img');"));
-               assertThat(processed, 
containsString("CssUrlReplacerTest/res/css/b.img');"));
+               assertThat(processed, 
containsString("CssUrlReplacerTest/res/images/a.img"+DECORATION_SUFFIX+"');"));
+               assertThat(processed, 
containsString("CssUrlReplacerTest/res/css/b.img"+DECORATION_SUFFIX+"');"));
        }
 }

Reply via email to