WICKET-4425 Wicket 1.5 rewrites template content where it should not

Do not wrap in CDATA <script> elements which type is not plain javascript.


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

Branch: refs/heads/master
Commit: a08e446dd7cc62e632e7a8c07f9ed744dc302154
Parents: a4a725b
Author: martin-g <[email protected]>
Authored: Wed Feb 22 10:16:08 2012 +0100
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Wed Feb 22 10:18:13 2012 +0100

----------------------------------------------------------------------
 .../parser/filter/StyleAndScriptIdentifier.java    |   32 +++++++++++---
 1 files changed, 25 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/a08e446d/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/StyleAndScriptIdentifier.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/StyleAndScriptIdentifier.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/StyleAndScriptIdentifier.java
index bcc8634..957de64 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/StyleAndScriptIdentifier.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/StyleAndScriptIdentifier.java
@@ -28,21 +28,23 @@ import org.apache.wicket.util.string.JavaScriptUtils;
 
 
 /**
+ * An IMarkupFilter that wraps the body of all &lt;style&gt; elements and 
&lt;script&gt;
+ * elements which are plain JavaScript in CDATA blocks. This allows the user 
application
+ * to use unescaped XML characters without caring that those may break 
Wicket's XML Ajax
+ * response.
  * 
  * @author Juergen Donnerstag
  */
 public final class StyleAndScriptIdentifier extends AbstractMarkupFilter
 {
-       private final Markup markup;
-
        /**
-        * Construct.
+        * Constructor.
         * 
         * @param markup
+        *      Unused. Will be removed in next major version.
         */
-       public StyleAndScriptIdentifier(final Markup markup)
+       public StyleAndScriptIdentifier(@SuppressWarnings("unused")final Markup 
markup)
        {
-               this.markup = markup;
        }
 
        @Override
@@ -79,7 +81,8 @@ public final class StyleAndScriptIdentifier extends 
AbstractMarkupFilter
                        if (elem instanceof ComponentTag)
                        {
                                ComponentTag open = (ComponentTag)elem;
-                               if (open.getUserData("STYLE_OR_SCRIPT") != null)
+
+                               if (shouldProcess(open))
                                {
                                        if (open.isOpen() && ((i + 2) < 
markup.size()))
                                        {
@@ -106,4 +109,19 @@ public final class StyleAndScriptIdentifier extends 
AbstractMarkupFilter
                        }
                }
        }
-}
+
+       private boolean shouldProcess(ComponentTag openTag)
+       {
+               // do not wrap in CDATA any <script> which has special MIME 
type. WICKET-4425
+               String typeAttribute = openTag.getAttribute("type");
+               boolean shouldProcess =
+                               // style elements should be processed
+                               "style".equals(openTag.getName()) ||
+
+                               // script elements should be processed only if 
they have no type (HTML5 recommendation)
+                               // or the type is "text/javascript"
+                               (typeAttribute == null || 
"text/javascript".equalsIgnoreCase(typeAttribute));
+
+               return shouldProcess && openTag.getUserData("STYLE_OR_SCRIPT") 
!= null;
+       }
+}
\ No newline at end of file

Reply via email to