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+"');")); } }