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

Reply via email to