You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2011/04/28 15:30:16 UTC
svn commit: r1097452 - in /wicket/trunk/wicket-core/src:
main/java/org/apache/wicket/markup/html/
main/java/org/apache/wicket/markup/html/internal/
test/java/org/apache/wicket/markup/html/internal/
Author: mgrigorov
Date: Thu Apr 28 13:30:16 2011
New Revision: 1097452
URL: http://svn.apache.org/viewvc?rev=1097452&view=rev
Log:
WICKET-3653 Add a method to IHeaderResponse to create IE conditional commented link to CSS resource
Overload IHeaderResponse#renderCSSReference() with additional argument 'condition' so that now it is possible to render IE conditional <link>s.
Added:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/DecoratingHeaderResponse.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/IHeaderResponse.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/DecoratingHeaderResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/DecoratingHeaderResponse.java?rev=1097452&r1=1097451&r2=1097452&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/DecoratingHeaderResponse.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/DecoratingHeaderResponse.java Thu Apr 28 13:30:16 2011
@@ -114,11 +114,22 @@ public abstract class DecoratingHeaderRe
realResponse.renderCSSReference(reference, pageParameters, media);
}
+ public void renderCSSReference(ResourceReference reference, PageParameters pageParameters,
+ String media, String condition)
+ {
+ realResponse.renderCSSReference(reference, pageParameters, media, condition);
+ }
+
public void renderCSSReference(String url, String media)
{
realResponse.renderCSSReference(url, media);
}
+ public void renderCSSReference(String url, String media, String condition)
+ {
+ realResponse.renderCSSReference(url, media, condition);
+ }
+
public void renderString(CharSequence string)
{
realResponse.renderString(string);
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/IHeaderResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/IHeaderResponse.java?rev=1097452&r1=1097451&r2=1097452&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/IHeaderResponse.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/IHeaderResponse.java Thu Apr 28 13:30:16 2011
@@ -16,12 +16,12 @@
*/
package org.apache.wicket.markup.html;
-import java.io.Closeable;
-
import org.apache.wicket.request.Response;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.resource.ResourceReference;
+import java.io.Closeable;
+
/**
* Interface that is used to render header elements (usually javascript and CSS references).
*
@@ -154,7 +154,23 @@ public interface IHeaderResponse extends
String media);
/**
- * Writes a CSS reference, if the specified reference hasn't been rendered yet.
+ * Writes a conditional IE comment with a CSS reference with query parameters, if the specified
+ * reference hasn't been rendered yet.
+ *
+ * @param reference
+ * resource reference pointing to the CSS resource
+ * @param pageParameters
+ * the parameters for this CSS resource reference
+ * @param media
+ * the media type for this CSS ("print", "screen", etc.)
+ * @param condition
+ * the condition to use for Internet Explorer conditional comments. E.g. "IE 7".
+ */
+ public void renderCSSReference(ResourceReference reference, PageParameters pageParameters,
+ String media, String condition);
+
+ /**
+ * Writes a link to a CSS resource, if the specified url hasn't been rendered yet.
*
* @param url
* context-relative url of the CSS resource
@@ -165,6 +181,21 @@ public interface IHeaderResponse extends
public void renderCSSReference(String url, String media);
/**
+ * Writes a conditional IE comment for a link to a CSS resource, if the specified url hasn't
+ * been rendered yet.
+ *
+ * @param url
+ * context-relative url of the CSS resource
+ * @param media
+ * the media type for this CSS ("print", "screen", etc.)
+ * @param condition
+ * the condition to use for Internet Explorer conditional comments. E.g. "IE 7".
+ */
+ // TODO make media an enum
+ public void renderCSSReference(String url, String media, String condition);
+
+
+ /**
* Renders an arbitrary string to the header. The string is only rendered if the same string
* hasn't been rendered before.
* <p>
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java?rev=1097452&r1=1097451&r2=1097452&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java Thu Apr 28 13:30:16 2011
@@ -16,11 +16,6 @@
*/
package org.apache.wicket.markup.html.internal;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.WicketEventReference;
import org.apache.wicket.request.IRequestHandler;
@@ -36,6 +31,11 @@ import org.apache.wicket.util.string.Css
import org.apache.wicket.util.string.JavaScriptUtils;
import org.apache.wicket.util.string.Strings;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
/**
* Default implementation of the {@link IHeaderResponse} interface.
@@ -94,6 +94,12 @@ public abstract class HeaderResponse imp
public void renderCSSReference(ResourceReference reference, PageParameters pageParameters,
String media)
{
+ renderCSSReference(reference, pageParameters, media, null);
+ }
+
+ public void renderCSSReference(ResourceReference reference, PageParameters pageParameters,
+ String media, String condition)
+ {
if (reference == null)
{
throw new IllegalArgumentException("reference cannot be null");
@@ -102,7 +108,7 @@ public abstract class HeaderResponse imp
{
IRequestHandler handler = new ResourceReferenceRequestHandler(reference, pageParameters);
CharSequence url = RequestCycle.get().urlFor(handler);
- internalRenderCSSReference(url.toString(), media);
+ internalRenderCSSReference(url.toString(), media, condition);
}
}
@@ -114,16 +120,18 @@ public abstract class HeaderResponse imp
renderCSSReference(url, null);
}
- /**
- * @see org.apache.wicket.markup.html.IHeaderResponse#renderCSSReference(java.lang.String,
- * java.lang.String)
- */
public void renderCSSReference(String url, String media)
{
- internalRenderCSSReference(relative(url), media);
+ renderCSSReference(url, media, null);
+ }
+
+ public void renderCSSReference(String url, String media, String condition)
+ {
+ internalRenderCSSReference(relative(url), media, condition);
}
- private void internalRenderCSSReference(String url, String media)
+ private void internalRenderCSSReference(final String url, final String media,
+ final String condition)
{
if (Strings.isEmpty(url))
{
@@ -134,6 +142,12 @@ public abstract class HeaderResponse imp
List<String> token = Arrays.asList("css", url, media);
if (wasRendered(token) == false)
{
+ if (Strings.isEmpty(condition) == false)
+ {
+ getResponse().write("<!--[if ");
+ getResponse().write(condition);
+ getResponse().write("]>");
+ }
getResponse().write("<link rel=\"stylesheet\" type=\"text/css\" href=\"");
getResponse().write(url);
getResponse().write("\"");
@@ -144,6 +158,10 @@ public abstract class HeaderResponse imp
getResponse().write("\"");
}
getResponse().write(" />");
+ if (Strings.isEmpty(condition) == false)
+ {
+ getResponse().write("<![endif]-->");
+ }
getResponse().write("\n");
markRendered(token);
}
Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java?rev=1097452&view=auto
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java (added)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java Thu Apr 28 13:30:16 2011
@@ -0,0 +1,129 @@
+/*
+ * 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.markup.html.internal;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.apache.wicket.ThreadContext;
+import org.apache.wicket.markup.html.IHeaderResponse;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.Response;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.UrlRenderer;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.resource.IResource;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.response.StringResponse;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.nio.charset.Charset;
+
+import junit.framework.Assert;
+
+/**
+ * Tests for {@link IHeaderResponse}'s methods
+ */
+public class HeaderResponseTest
+{
+ private static final String RESOURCE_NAME = "resource.css";
+
+ private IHeaderResponse headerResponse;
+
+ private ResourceReference reference;
+
+ /**
+ * Prepare
+ */
+ @Before
+ public void before()
+ {
+ final Response realResponse = new StringResponse();
+
+ headerResponse = new HeaderResponse()
+ {
+ @Override
+ protected Response getRealResponse()
+ {
+ return realResponse;
+ }
+ };
+
+ reference = new ResourceReference("testReference")
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public IResource getResource()
+ {
+ return null;
+ }
+ };
+
+ RequestCycle requestCycle = mock(RequestCycle.class);
+ when(requestCycle.urlFor(any(IRequestHandler.class))).thenReturn(RESOURCE_NAME);
+
+ Request request = mock(Request.class);
+ when(request.getCharset()).thenReturn(Charset.defaultCharset());
+ when(requestCycle.getRequest()).thenReturn(request);
+
+ UrlRenderer urlRenderer = mock(UrlRenderer.class);
+ when(urlRenderer.renderUrl(any(Url.class))).thenReturn(RESOURCE_NAME);
+ when(requestCycle.getUrlRenderer()).thenReturn(urlRenderer);
+
+ ThreadContext.setRequestCycle(requestCycle);
+ }
+
+ /**
+ * Tear down
+ */
+ @After
+ public void after()
+ {
+ ThreadContext.setRequestCycle(null);
+ }
+
+ /**
+ * Tests the creation of a proper IE conditional comment
+ */
+ @Test
+ public void testConditionalRenderCSSReference()
+ {
+ headerResponse.renderCSSReference(reference, null, "screen", "lt IE 8");
+ String expected = "<!--[if lt IE 8]><link rel=\"stylesheet\" type=\"text/css\" href=\"" +
+ RESOURCE_NAME + "\" media=\"screen\" /><![endif]-->\n";
+ String actual = headerResponse.getResponse().toString();
+ Assert.assertEquals(expected, actual);
+ }
+
+ /**
+ * Tests the creation of a proper IE conditional comment
+ */
+ @Test
+ public void testConditionalRenderCSSReferenceWithUrl()
+ {
+ headerResponse.renderCSSReference("resource.css", "screen", "lt IE 8");
+ String expected = "<!--[if lt IE 8]><link rel=\"stylesheet\" type=\"text/css\" href=\"" +
+ RESOURCE_NAME + "\" media=\"screen\" /><![endif]-->\n";
+ String actual = headerResponse.getResponse().toString();
+ Assert.assertEquals(expected, actual);
+ }
+}