Author: mgrigorov
Date: Tue May 3 09:36:25 2011
New Revision: 1098984
URL: http://svn.apache.org/viewvc?rev=1098984&view=rev
Log:
WICKET-3661 IHeaderResponse.renderJavaScriptReference does not support the
"defer" attribute
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
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/string/JavaScriptUtils.java
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
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/DecoratingHeaderResponse.java?rev=1098984&r1=1098983&r2=1098984&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
Tue May 3 09:36:25 2011
@@ -73,6 +73,12 @@ public abstract class DecoratingHeaderRe
realResponse.renderJavaScriptReference(reference,
pageParameters, id);
}
+ public void renderJavaScriptReference(ResourceReference reference,
+ PageParameters pageParameters, String id, boolean defer)
+ {
+ realResponse.renderJavaScriptReference(reference,
pageParameters, id, defer);
+ }
+
public void renderJavaScriptReference(String url)
{
realResponse.renderJavaScriptReference(url);
@@ -83,6 +89,11 @@ public abstract class DecoratingHeaderRe
realResponse.renderJavaScriptReference(url, id);
}
+ public void renderJavaScriptReference(String url, String id, boolean
defer)
+ {
+ realResponse.renderJavaScriptReference(url, id, defer);
+ }
+
public void renderJavaScript(CharSequence javascript, String id)
{
realResponse.renderJavaScript(javascript, id);
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=1098984&r1=1098983&r2=1098984&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
Tue May 3 09:36:25 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).
*
@@ -67,6 +67,24 @@ public interface IHeaderResponse extends
PageParameters pageParameters, String id);
/**
+ * Writes a javascript reference with query parameters, if the
specified reference hasn't been
+ * rendered yet.
+ *
+ * @param reference
+ * resource reference pointing to the javascript resource
+ * @param pageParameters
+ * the parameters for this Javascript resource reference
+ * @param id
+ * id that will be used to filter duplicate reference (it's
still filtered by URL
+ * too)
+ * @param defer
+ * specifies that the execution of a script should be
deferred (delayed) until after
+ * the page has been loaded.
+ */
+ public void renderJavaScriptReference(ResourceReference reference,
+ PageParameters pageParameters, String id, boolean defer);
+
+ /**
* Writes a javascript reference, if the specified reference hasn't
been rendered yet.
*
* @param url
@@ -86,6 +104,20 @@ public interface IHeaderResponse extends
public void renderJavaScriptReference(String url, String id);
/**
+ * Writes a javascript reference, if the specified reference hasn't
been rendered yet.
+ *
+ * @param url
+ * context-relative url of the the javascript resource
+ * @param id
+ * id that will be used to filter duplicate reference (it's
still filtered by URL
+ * too)
+ * @param defer
+ * specifies that the execution of a script should be
deferred (delayed) until after
+ * the page has been loaded.
+ */
+ public void renderJavaScriptReference(String url, String id, boolean
defer);
+
+ /**
* Renders javascript code to the response, if the javascript has not
already been rendered.
*
* the necessary surrounding <code>script</code> tags will be added to
the output.
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=1098984&r1=1098983&r2=1098984&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
Tue May 3 09:36:25 2011
@@ -16,6 +16,11 @@
*/
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;
@@ -31,11 +36,6 @@ 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.
@@ -189,34 +189,38 @@ public abstract class HeaderResponse imp
public void renderJavaScriptReference(ResourceReference reference,
PageParameters pageParameters, String id)
{
+ renderJavaScriptReference(reference, pageParameters, id, false);
+ }
+
+ public void renderJavaScriptReference(ResourceReference reference,
+ PageParameters pageParameters, String id, boolean defer)
+ {
Args.notNull(reference, "reference");
if (!closed)
{
IRequestHandler handler = new
ResourceReferenceRequestHandler(reference, pageParameters);
CharSequence url = RequestCycle.get().urlFor(handler);
- internalRenderJavaScriptReference(url.toString(), id);
+ internalRenderJavaScriptReference(url.toString(), id,
defer);
}
}
- /**
- * @see
org.apache.wicket.markup.html.IHeaderResponse#renderJavaScriptReference(java.lang.String)
- */
public void renderJavaScriptReference(String url)
{
- internalRenderJavaScriptReference(relative(url), null);
+ renderJavaScriptReference(url, null);
}
- /**
- * @see
org.apache.wicket.markup.html.IHeaderResponse#renderJavaScriptReference(java.lang.String,
- * java.lang.String)
- */
public void renderJavaScriptReference(String url, String id)
{
- internalRenderJavaScriptReference(relative(url), id);
+ renderJavaScriptReference(url, id, false);
+ }
+
+ public void renderJavaScriptReference(String url, String id, boolean
defer)
+ {
+ internalRenderJavaScriptReference(relative(url), id, defer);
}
- private void internalRenderJavaScriptReference(String url, String id)
+ private void internalRenderJavaScriptReference(String url, String id,
boolean defer)
{
if (Strings.isEmpty(url))
{
@@ -232,7 +236,7 @@ public abstract class HeaderResponse imp
if (token1Unused && token2Unused)
{
-
JavaScriptUtils.writeJavaScriptUrl(getResponse(), url, id);
+
JavaScriptUtils.writeJavaScriptUrl(getResponse(), url, id, defer);
markRendered(token1);
if (token2 != null)
{
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/string/JavaScriptUtils.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/string/JavaScriptUtils.java?rev=1098984&r1=1098983&r2=1098984&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/string/JavaScriptUtils.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/string/JavaScriptUtils.java
Tue May 3 09:36:25 2011
@@ -105,11 +105,34 @@ public class JavaScriptUtils
public static void writeJavaScriptUrl(final Response response, final
CharSequence url,
final String id)
{
+ writeJavaScriptUrl(response, url, id, false);
+ }
+
+ /**
+ * Write a reference to a javascript file to the response object
+ *
+ * @param response
+ * The HTTP response
+ * @param url
+ * The javascript file URL
+ * @param id
+ * Unique identifier of element
+ * @param defer
+ * specifies that the execution of a script should be
deferred (delayed) until after
+ * the page has been loaded.
+ */
+ public static void writeJavaScriptUrl(final Response response, final
CharSequence url,
+ final String id, boolean defer)
+ {
response.write("<script type=\"text/javascript\" ");
if (id != null)
{
response.write("id=\"" + id + "\" ");
}
+ if (defer)
+ {
+ response.write("defer=\"defer\" ");
+ }
response.write("src=\"");
response.write(url);
response.write("\"></script>");
Modified:
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=1098984&r1=1098983&r2=1098984&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java
(original)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java
Tue May 3 09:36:25 2011
@@ -20,6 +20,10 @@ import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import java.nio.charset.Charset;
+
+import junit.framework.Assert;
+
import org.apache.wicket.ThreadContext;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.request.IRequestHandler;
@@ -35,16 +39,12 @@ 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 static final String RESOURCE_NAME = "resource.name";
private IHeaderResponse headerResponse;
@@ -126,4 +126,37 @@ public class HeaderResponseTest
String actual = headerResponse.getResponse().toString();
Assert.assertEquals(expected, actual);
}
+
+ /**
+ * Tests setting of 'defer' attribute
+ * <p>
+ * WICKET-3661
+ */
+ @Test
+ public void testDeferJavaScriptReference()
+ {
+ boolean defer = true;
+ headerResponse.renderJavaScriptReference("js-resource.js",
"some-id", defer);
+ String expected = "<script type=\"text/javascript\"
id=\"some-id\" defer=\"defer\" src=\"" +
+ RESOURCE_NAME + "\"></script>\n";
+ String actual = headerResponse.getResponse().toString();
+ Assert.assertEquals(expected, actual);
+ }
+
+ /**
+ * Tests non-setting of 'defer' attribute
+ * <p>
+ * WICKET-3661
+ */
+ @Test
+ public void testDeferFalseJavaScriptReference()
+ {
+ boolean defer = false;
+ headerResponse.renderJavaScriptReference("js-resource.js",
"some-id", defer);
+ String expected = "<script type=\"text/javascript\"
id=\"some-id\" src=\"" + RESOURCE_NAME +
+ "\"></script>\n";
+ String actual = headerResponse.getResponse().toString();
+ Assert.assertEquals(expected, actual);
+ }
+
}