WICKET-5827 Allow to apply multiple Javascript / CSS compressors

Do not manipulate full and absolute image urls


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

Branch: refs/heads/master
Commit: ab742615819af1738ba4612fc4aa81331dbebeb3
Parents: 08f8a55
Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Authored: Fri Feb 6 09:18:11 2015 +0200
Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Committed: Fri Feb 6 09:18:11 2015 +0200

----------------------------------------------------------------------
 .../apache/wicket/resource/CssUrlReplacer.java  | 22 +++++++++--
 .../wicket/resource/CssUrlReplacerTest.java     | 40 ++++++++++++++++++++
 2 files changed, 58 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ab742615/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 985c275..47a0d47 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
@@ -56,10 +56,24 @@ public class CssUrlReplacer implements 
IScopeAwareTextResourceProcessor
 
                while (matcher.find())
                {
-                       Url imageRelativeUrl = Url.parse(matcher.group(1));
-                       Url cssUrlCopy = new Url(cssUrl);
-                       cssUrlCopy.resolveRelative(imageRelativeUrl);
-                       matcher.appendReplacement(output, "url('" + 
cssUrlCopy.toString() + "')");
+                       Url imageCandidateUrl = Url.parse(matcher.group(1));
+                       String processedUrl;
+                       if (imageCandidateUrl.isFull())
+                       {
+                               processedUrl = 
imageCandidateUrl.toString(Url.StringMode.FULL);
+                       }
+                       else if (imageCandidateUrl.isContextAbsolute())
+                       {
+                               processedUrl = imageCandidateUrl.toString();
+                       }
+                       else
+                       {
+                               // relativize against the url for the 
containing CSS file
+                               Url cssUrlCopy = new Url(cssUrl);
+                               cssUrlCopy.resolveRelative(imageCandidateUrl);
+                               processedUrl = cssUrlCopy.toString();
+                       }
+                       matcher.appendReplacement(output, "url('" + 
processedUrl + "')");
                }
                matcher.appendTail(output);
                return output.toString();

http://git-wip-us.apache.org/repos/asf/wicket/blob/ab742615/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 157bd60..d8f013c 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
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.wicket.resource;
 
 import static org.hamcrest.Matchers.containsString;
@@ -9,6 +25,30 @@ import org.junit.Test;
 public class CssUrlReplacerTest extends WicketTestCase
 {
        @Test
+       public void doNotProcessFullUrls()
+       {
+               String input = ".class {background-image: 
url('http://example.com/some.img');}";
+               Class<?> scope = CssUrlReplacerTest.class;
+               String cssRelativePath = "res/css/some.css";
+               CssUrlReplacer replacer = new CssUrlReplacer();
+
+               String processed = replacer.process(input, scope, 
cssRelativePath);
+               assertThat(processed, is(".class {background-image: 
url('http://example.com/some.img');}"));
+       }
+
+       @Test
+       public void doNotProcessContextAbsoluteUrls()
+       {
+               String input = ".class {background-image: url('/some.img');}";
+               Class<?> scope = CssUrlReplacerTest.class;
+               String cssRelativePath = "res/css/some.css";
+               CssUrlReplacer replacer = new CssUrlReplacer();
+
+               String processed = replacer.process(input, scope, 
cssRelativePath);
+               assertThat(processed, is(".class {background-image: 
url('/some.img');}"));
+       }
+
+       @Test
        public void sameFolderSingleQuotes()
        {
                String input = ".class {background-image: url('some.img');}";

Reply via email to