Repository: wicket Updated Branches: refs/heads/wicket-7.x aa88c0d2c -> 9b8579f07
WICKET-6051 Improves performance of CssUrlReplacer / exclude options Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/9b8579f0 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/9b8579f0 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/9b8579f0 Branch: refs/heads/wicket-7.x Commit: 9b8579f078335f84357b8247401a081c9f5dc9a3 Parents: aa88c0d Author: Tobias Soloschenko <[email protected]> Authored: Wed Dec 16 19:44:23 2015 +0100 Committer: Tobias Soloschenko <[email protected]> Committed: Wed Dec 16 19:44:23 2015 +0100 ---------------------------------------------------------------------- .../apache/wicket/resource/CssUrlReplacer.java | 67 ++++++++++++++++++-- .../wicket/resource/CssUrlReplacerTest.java | 2 +- 2 files changed, 61 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/9b8579f0/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 534e89a..ab0f45f 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 @@ -16,6 +16,9 @@ */ package org.apache.wicket.resource; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -44,7 +47,8 @@ import org.apache.wicket.util.image.ImageUtil; public class CssUrlReplacer implements IScopeAwareTextResourceProcessor, ICssCompressor { // The pattern to find URLs in CSS resources - private static final Pattern URL_PATTERN = Pattern.compile("url\\(['|\"]*(.*?)['|\"]*\\)"); + private static final Pattern URL_PATTERN = Pattern + .compile("url\\([ ]*['|\"]?([^ ]*?)['|\"]?[ ]*\\)"); /** * Used to be append to CSS URLs (background-image: url('Beer.gif?embedBase64');). The @@ -52,12 +56,39 @@ public class CssUrlReplacer implements IScopeAwareTextResourceProcessor, ICssCom */ public static final String EMBED_BASE64 = "embedBase64"; + private final Set<String> excludes = new LinkedHashSet<>(); + + /** + * Creates a css url replacer + */ + public CssUrlReplacer() + { + } + + /** + * Creates a css url replacer + * + * @param excludes + * css file names to be excluded + */ + public CssUrlReplacer(Collection<String> excludes) + { + this.excludes.addAll(excludes); + } + /** * Replaces the URLs of CSS resources with Wicket representatives. */ @Override public String process(String input, Class<?> scope, String name) { + // filter out the excluded css files + for (String excludeName : excludes) + { + if(name.endsWith(excludeName)){ + return input; + } + } RequestCycle cycle = RequestCycle.get(); Url cssUrl = Url.parse(name); Matcher matcher = URL_PATTERN.matcher(input); @@ -84,8 +115,8 @@ public class CssUrlReplacer implements IScopeAwareTextResourceProcessor, ICssCom cssUrlCopy.resolveRelative(imageCandidateUrl); // if the image should be processed as URL or base64 embedded - if (cssUrlCopy.getQueryString() != null && - cssUrlCopy.getQueryString().contains(EMBED_BASE64)) + if (cssUrlCopy.getQueryString() != null + && cssUrlCopy.getQueryString().contains(EMBED_BASE64)) { embedded = true; PackageResourceReference imageReference = new PackageResourceReference(scope, @@ -108,8 +139,8 @@ public class CssUrlReplacer implements IScopeAwareTextResourceProcessor, ICssCom } } - matcher.appendReplacement(output, embedded ? "url(" + processedUrl + ")" : "url('" + - processedUrl + "')"); + matcher.appendReplacement(output, + embedded ? "url(" + processedUrl + ")" : "url('" + processedUrl + "')"); } matcher.appendTail(output); return output.toString(); @@ -118,7 +149,29 @@ public class CssUrlReplacer implements IScopeAwareTextResourceProcessor, ICssCom @Override public String compress(String original) { - throw new UnsupportedOperationException(CssUrlReplacer.class.getSimpleName() + - ".process() should be used instead!"); + throw new UnsupportedOperationException( + CssUrlReplacer.class.getSimpleName() + ".process() should be used instead!"); + } + + /** + * Gets excluded css file names + * + * @return a list with css file names to be excluded + */ + public Collection<String> getExcludes() + { + return excludes; + } + + /** + * Sets a list of css file names to be excluded + * + * @param excludes + * a list with css file names to be excluded + */ + public void setExcludes(Collection<String> excludes) + { + this.excludes.clear(); + this.excludes.addAll(excludes); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/9b8579f0/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 31fbff6..9b49809 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 @@ -152,7 +152,7 @@ public class CssUrlReplacerTest extends WicketTestCase String processed = replacer.process(input, scope, cssRelativePath); assertThat( processed, - containsString(".class {background-image: url(data:image/gif;base64,R0lGODlh1wATAXAAACH5BAEAAP8ALAAAAADXA")); + containsString(".class {background-image: url(data:image/gif;base64,R0lGODlhUAB4ANUAANbX1hQSEXV0c/fz8tCBfc3NzFBNTPO6ttzIx")); } @Test
