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 2012/02/22 10:28:42 UTC

[3/3] git commit: WICKET-4425 Wicket 1.5 rewrites template content where it should not

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 <mg...@apache.org>
Authored: Wed Feb 22 10:16:08 2012 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
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