Author: mgrigorov
Date: Mon Jul 18 08:00:23 2011
New Revision: 1147772
URL: http://svn.apache.org/viewvc?rev=1147772&view=rev
Log:
WICKET-3909 Encoding problem with JavaScriptRefrences
Add optional 'charset' attribute for <script> elements.
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=1147772&r1=1147771&r2=1147772&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
Mon Jul 18 08:00:23 2011
@@ -79,6 +79,12 @@ public abstract class DecoratingHeaderRe
realResponse.renderJavaScriptReference(reference,
pageParameters, id, defer);
}
+ public void renderJavaScriptReference(ResourceReference reference,
+ PageParameters pageParameters, String id, boolean defer, String
charset)
+ {
+ realResponse.renderJavaScriptReference(reference,
pageParameters, id, defer, charset);
+ }
+
public void renderJavaScriptReference(String url)
{
realResponse.renderJavaScriptReference(url);
@@ -94,6 +100,11 @@ public abstract class DecoratingHeaderRe
realResponse.renderJavaScriptReference(url, id, defer);
}
+ public void renderJavaScriptReference(String url, String id, boolean
defer, String charset)
+ {
+ realResponse.renderJavaScriptReference(url, id, defer, charset);
+ }
+
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=1147772&r1=1147771&r2=1147772&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
Mon Jul 18 08:00:23 2011
@@ -85,6 +85,26 @@ public interface IHeaderResponse extends
PageParameters pageParameters, String id, boolean defer);
/**
+ * 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.
+ * @param charset
+ * a non null value specifies the charset attribute of the
script tag
+ */
+ public void renderJavaScriptReference(ResourceReference reference,
+ PageParameters pageParameters, String id, boolean defer, String
charset);
+
+ /**
* Writes a javascript reference, if the specified reference hasn't
been rendered yet.
*
* @param url
@@ -118,6 +138,22 @@ public interface IHeaderResponse extends
public void renderJavaScriptReference(String url, String id, boolean
defer);
/**
+ * 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.
+ * @param charset
+ * a non null value specifies the charset attribute of the
script tag
+ */
+ public void renderJavaScriptReference(String url, String id, boolean
defer, String charset);
+
+ /**
* 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=1147772&r1=1147771&r2=1147772&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
Mon Jul 18 08:00:23 2011
@@ -196,13 +196,19 @@ public abstract class HeaderResponse imp
public void renderJavaScriptReference(ResourceReference reference,
PageParameters pageParameters, String id, boolean defer)
{
+ renderJavaScriptReference(reference, pageParameters, id, defer,
null);
+ }
+
+ public void renderJavaScriptReference(ResourceReference reference,
+ PageParameters pageParameters, String id, boolean defer, String
charset)
+ {
Args.notNull(reference, "reference");
if (!closed)
{
IRequestHandler handler = new
ResourceReferenceRequestHandler(reference, pageParameters);
CharSequence url = RequestCycle.get().urlFor(handler);
- internalRenderJavaScriptReference(url.toString(), id,
defer);
+ internalRenderJavaScriptReference(url.toString(), id,
defer, charset);
}
}
@@ -218,10 +224,16 @@ public abstract class HeaderResponse imp
public void renderJavaScriptReference(String url, String id, boolean
defer)
{
- internalRenderJavaScriptReference(relative(url), id, defer);
+ renderJavaScriptReference(url, id, defer, null);
+ }
+
+ public void renderJavaScriptReference(String url, String id, boolean
defer, String charset)
+ {
+ internalRenderJavaScriptReference(relative(url), id, defer,
charset);
}
- private void internalRenderJavaScriptReference(String url, String id,
boolean defer)
+ private void internalRenderJavaScriptReference(String url, String id,
boolean defer,
+ String charset)
{
if (Strings.isEmpty(url))
{
@@ -239,7 +251,8 @@ public abstract class HeaderResponse imp
if (token1Unused && token2Unused)
{
-
JavaScriptUtils.writeJavaScriptUrl(getResponse(), urlWoSessionId, id, defer);
+
JavaScriptUtils.writeJavaScriptUrl(getResponse(), urlWoSessionId, id, defer,
+ charset);
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=1147772&r1=1147771&r2=1147772&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
Mon Jul 18 08:00:23 2011
@@ -105,7 +105,7 @@ public class JavaScriptUtils
public static void writeJavaScriptUrl(final Response response, final
CharSequence url,
final String id)
{
- writeJavaScriptUrl(response, url, id, false);
+ writeJavaScriptUrl(response, url, id, false, null);
}
/**
@@ -120,9 +120,11 @@ public class JavaScriptUtils
* @param defer
* specifies that the execution of a script should be
deferred (delayed) until after
* the page has been loaded.
+ * @param charset
+ * a non null value specifies the charset attribute of the
script tag
*/
public static void writeJavaScriptUrl(final Response response, final
CharSequence url,
- final String id, boolean defer)
+ final String id, boolean defer, String charset)
{
response.write("<script type=\"text/javascript\" ");
if (id != null)
@@ -133,6 +135,10 @@ public class JavaScriptUtils
{
response.write("defer=\"defer\" ");
}
+ if (charset != null)
+ {
+ response.write("charset=\"" + charset + "\" ");
+ }
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=1147772&r1=1147771&r2=1147772&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
Mon Jul 18 08:00:23 2011
@@ -159,4 +159,35 @@ public class HeaderResponseTest
Assert.assertEquals(expected, actual);
}
+ /**
+ * Tests setting of 'charset' attribute
+ * <p>
+ * WICKET-3909
+ */
+ @Test
+ public void testCharsetSetJavaScriptReference()
+ {
+ String charset = "foo";
+ headerResponse.renderJavaScriptReference("js-resource.js",
"some-id", false, charset);
+ String expected = "<script type=\"text/javascript\"
id=\"some-id\" charset=\"" + charset +
+ "\" src=\"" + RESOURCE_NAME + "\"></script>\n";
+ String actual = headerResponse.getResponse().toString();
+ Assert.assertEquals(expected, actual);
+ }
+
+ /**
+ * Tests non-setting of 'charset' attribute
+ * <p>
+ * WICKET-3909
+ */
+ @Test
+ public void testCharsetNotSetJavaScriptReference()
+ {
+ headerResponse.renderJavaScriptReference("js-resource.js",
"some-id", false, null);
+ String expected = "<script type=\"text/javascript\"
id=\"some-id\" src=\"" + RESOURCE_NAME +
+ "\"></script>\n";
+ String actual = headerResponse.getResponse().toString();
+ Assert.assertEquals(expected, actual);
+ }
+
}