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);
+       }
+
 }


Reply via email to