You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2007/11/04 00:50:28 UTC

svn commit: r591712 - in /wicket/trunk/jdk-1.4/wicket/src: main/java/org/apache/wicket/markup/ main/java/org/apache/wicket/markup/parser/filter/ test/java/org/apache/wicket/markup/ test/java/org/apache/wicket/markup/html/border/

Author: knopp
Date: Sat Nov  3 16:50:26 2007
New Revision: 591712

URL: http://svn.apache.org/viewvc?rev=591712&view=rev
Log:
WICKET-1087

Added:
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java   (with props)
Modified:
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java
    wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupParserTest.java
    wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/border/BoxBorderTestPage_10.html

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java?rev=591712&r1=591711&r2=591712&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java Sat Nov  3 16:50:26 2007
@@ -31,6 +31,7 @@
 import org.apache.wicket.markup.parser.filter.HeadForceTagIdHandler;
 import org.apache.wicket.markup.parser.filter.HtmlHandler;
 import org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler;
+import org.apache.wicket.markup.parser.filter.OpenCloseTagExpander;
 import org.apache.wicket.markup.parser.filter.RelativePathPrefixHandler;
 import org.apache.wicket.markup.parser.filter.TagTypeHandler;
 import org.apache.wicket.markup.parser.filter.WicketLinkTagHandler;
@@ -63,7 +64,7 @@
 {
 	/** Conditional comment section, which is NOT treated as a comment section */
 	private static final Pattern CONDITIONAL_COMMENT = Pattern
-			.compile("\\[if .+\\]>(.|\n|\r)*<!\\[endif\\]");
+		.compile("\\[if .+\\]>(.|\n|\r)*<!\\[endif\\]");
 
 	/** The XML parser to use */
 	private final IXmlPullParser xmlParser;
@@ -179,6 +180,7 @@
 			}
 		}
 
+		appendMarkupFilter(new OpenCloseTagExpander());
 		appendMarkupFilter(new RelativePathPrefixHandler());
 		appendMarkupFilter(new EnclosureHandler());
 	}
@@ -257,7 +259,7 @@
 
 		// Initialize the xml parser
 		xmlParser.parse(markupResourceData.getResource().getInputStream(), markupSettings
-				.getDefaultMarkupEncoding());
+			.getDefaultMarkupEncoding());
 
 		// parse the xml markup and tokenize it into wicket relevant markup
 		// elements
@@ -421,7 +423,7 @@
 		{
 			boolean matched = m.find();
 			String nonPre = matched ? rawMarkup.substring(lastend, m.start()) : rawMarkup
-					.substring(lastend);
+				.substring(lastend);
 			nonPre = nonPre.replaceAll("[ \\t]+", " ");
 			nonPre = nonPre.replaceAll("( ?[\\r\\n] ?)+", "\n");
 

Added: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java?rev=591712&view=auto
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java (added)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java Sat Nov  3 16:50:26 2007
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.parser.filter;
+
+import java.text.ParseException;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.MarkupElement;
+import org.apache.wicket.markup.parser.AbstractMarkupFilter;
+import org.apache.wicket.markup.parser.XmlTag;
+
+/**
+ * MarkupFilter that expands certain open-close tag as separate open and close tags. Firefox, unless
+ * it gets text/xml mime type, treats these open-close tags as open tags which results in corrupted
+ * DOM. This happens even with xhtml doctype.
+ * 
+ * @author Matej Knopp
+ */
+public class OpenCloseTagExpander extends AbstractMarkupFilter
+{
+	ComponentTag next = null;
+	private static final List replaceForTags = Arrays.asList(new String[] { "div", "span", "p",
+			"strong", "b", "e" });
+
+	public MarkupElement nextTag() throws ParseException
+	{
+		if (next != null)
+		{
+			MarkupElement tmp = next;
+			next = null;
+			return tmp;
+		}
+		else
+		{
+			ComponentTag tag = nextComponentTag();
+
+			if (tag != null && tag.isOpenClose() &&
+				replaceForTags.contains(tag.getName().toLowerCase()))
+			{
+				tag.setType(XmlTag.OPEN);
+
+				if (tag.getId() == null)
+				{
+					tag.setId(WicketMessageTagHandler.WICKET_MESSAGE_CONTAINER_ID);
+					tag.setAutoComponentTag(true);
+				}
+
+				next = new ComponentTag(tag.getName(), XmlTag.CLOSE);
+				next.setNamespace(tag.getNamespace());
+				next.setOpenTag(tag);
+			}
+			return tag;
+		}
+	}
+}

Propchange: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupParserTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupParserTest.java?rev=591712&r1=591711&r2=591712&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupParserTest.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupParserTest.java Sat Nov  3 16:50:26 2007
@@ -62,8 +62,8 @@
 	public final void testTagParsing() throws Exception
 	{
 		final MarkupParser parser = new MarkupParser(
-				"This is a test <a componentName:id=\"a\" href=\"foo.html\"> <b componentName:id=\"b\">Bold!</b> "
-						+ "<img componentName:id=\"img\" width=9 height=10 src=\"foo\"> <marker componentName:id=\"marker\"/> </a>");
+			"This is a test <a componentName:id=\"a\" href=\"foo.html\"> <b componentName:id=\"b\">Bold!</b> "
+				+ "<img componentName:id=\"img\" width=9 height=10 src=\"foo\"> <marker componentName:id=\"marker\"/> </a>");
 		parser.setWicketNamespace("componentName");
 
 		final Markup markup = parser.parse();
@@ -125,7 +125,7 @@
 	public final void test() throws Exception
 	{
 		final MarkupParser parser = new MarkupParser(
-				"This is a test <a componentName:id=9> <b>bold</b> <b componentName:id=10/></a> of the emergency broadcasting system");
+			"This is a test <a componentName:id=9> <b>bold</b> <b componentName:id=10></b></a> of the emergency broadcasting system");
 		parser.setWicketNamespace("componentName");
 		final Markup tokens = parser.parse();
 
@@ -147,10 +147,10 @@
 
 		Assert.assertEquals(10, b.getAttributes().getInt("componentName:id"));
 
-		final ComponentTag closeA = (ComponentTag)tokens.get(4);
+		final ComponentTag closeA = (ComponentTag)tokens.get(5);
 
 		Assert.assertEquals("a", closeA.getName());
-		Assert.assertTrue(tokens.get(5).equals(" of the emergency broadcasting system"));
+		Assert.assertTrue(tokens.get(6).equals(" of the emergency broadcasting system"));
 	}
 
 	/**
@@ -160,10 +160,10 @@
 	public final void testXhtmlDocument() throws Exception
 	{
 		final String docText = ""
-				+ "<?xml version='1.0' encoding='iso-8859-1' ?>"
-				+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">"
-				+ "<html>" + "<head><title>Some Page</title></head>"
-				+ "<body><h1>XHTML Test</h1></body>" + "</html>";
+			+ "<?xml version='1.0' encoding='iso-8859-1' ?>"
+			+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">"
+			+ "<html>" + "<head><title>Some Page</title></head>"
+			+ "<body><h1>XHTML Test</h1></body>" + "</html>";
 		final MarkupParser parser = new MarkupParser(docText);
 		parser.setWicketNamespace("componentName");
 		final Markup tokens = parser.parse();
@@ -178,10 +178,10 @@
 	}
 
 	private MarkupResourceStream newMarkupResourceStream(final IResourceStreamLocator locator,
-			final Class c, final String style, final Locale locale, final String extension)
+		final Class c, final String style, final Locale locale, final String extension)
 	{
 		IResourceStream resource = locator.locate(c, c.getName().replace('.', '/'), style, locale,
-				extension);
+			extension);
 		MarkupResourceStream res = new MarkupResourceStream(resource, null, null);
 		return res;
 	}
@@ -193,11 +193,11 @@
 	 * @throws IOException
 	 */
 	public final void testFileDocument() throws ParseException, ResourceStreamNotFoundException,
-			IOException
+		IOException
 	{
 		IResourceStreamLocator locator = new ResourceStreamLocator();
-		MarkupResourceStream resource = newMarkupResourceStream(locator, this.getClass(), "1",
-				null, "html");
+		MarkupResourceStream resource = newMarkupResourceStream(locator, getClass(), "1", null,
+			"html");
 
 		MarkupParser parser = new MarkupParser(resource);
 		parser.setWicketNamespace("wcn");
@@ -206,21 +206,21 @@
 		log.info("tok(0)=" + tokens.get(0));
 		// Assert.assertEquals(docText, tokens.get(0).toString());
 
-		resource = newMarkupResourceStream(locator, this.getClass(), "2", null, "html");
+		resource = newMarkupResourceStream(locator, getClass(), "2", null, "html");
 		parser = new MarkupParser(resource);
 		parser.setWicketNamespace("wcn");
 		tokens = parser.parse();
 		log.info("tok(0)=" + tokens.get(0));
 		// Assert.assertEquals(docText, tokens.get(0).toString());
 
-		resource = newMarkupResourceStream(locator, this.getClass(), "3", null, "html");
+		resource = newMarkupResourceStream(locator, getClass(), "3", null, "html");
 		parser = new MarkupParser(resource);
 		parser.setWicketNamespace("wcn");
 		tokens = parser.parse();
 		log.info("tok(0)=" + tokens.get(0));
 		// Assert.assertEquals(docText, tokens.get(0).toString());
 
-		resource = newMarkupResourceStream(locator, this.getClass(), "4", null, "html");
+		resource = newMarkupResourceStream(locator, getClass(), "4", null, "html");
 		parser = new MarkupParser(resource);
 		parser.setWicketNamespace("wcn");
 		tokens = parser.parse();
@@ -235,35 +235,35 @@
 		log.info("tok(0)=" + tokens.get(0));
 		// Assert.assertEquals(docText, tokens.get(0).toString());
 
-		resource = newMarkupResourceStream(locator, this.getClass(), "5", null, "html");
+		resource = newMarkupResourceStream(locator, getClass(), "5", null, "html");
 		parser = new MarkupParser(resource);
 		parser.setWicketNamespace("wcn");
 		tokens = parser.parse();
 		log.info("tok(0)=" + tokens.get(0));
 		// Assert.assertEquals(docText, tokens.get(0).toString());
 
-		resource = newMarkupResourceStream(locator, this.getClass(), "6", null, "html");
+		resource = newMarkupResourceStream(locator, getClass(), "6", null, "html");
 		parser = new MarkupParser(resource);
 		parser.setWicketNamespace("wcn");
 		tokens = parser.parse();
 		log.info("tok(0)=" + tokens.get(0));
 		// Assert.assertEquals(docText, tokens.get(0).toString());
 
-		resource = newMarkupResourceStream(locator, this.getClass(), "7", null, "html");
+		resource = newMarkupResourceStream(locator, getClass(), "7", null, "html");
 		parser = new MarkupParser(resource);
 		parser.setWicketNamespace("wcn");
 		tokens = parser.parse();
 		log.info("tok(0)=" + tokens.get(0));
 		// Assert.assertEquals(docText, tokens.get(0).toString());
 
-		resource = newMarkupResourceStream(locator, this.getClass(), "8", null, "html");
+		resource = newMarkupResourceStream(locator, getClass(), "8", null, "html");
 		parser = new MarkupParser(resource);
 		parser.setWicketNamespace("wcn");
 		tokens = parser.parse();
 		log.info("tok(0)=" + tokens.get(0));
 		// Assert.assertEquals(docText, tokens.get(0).toString());
 
-		resource = newMarkupResourceStream(locator, this.getClass(), "9", null, "html");
+		resource = newMarkupResourceStream(locator, getClass(), "9", null, "html");
 		parser = new MarkupParser(resource);
 		parser.setWicketNamespace("wcn");
 		tokens = parser.parse();
@@ -279,7 +279,7 @@
 	 * @throws IOException
 	 */
 	public final void testWicketTag() throws ParseException, ResourceStreamNotFoundException,
-			IOException
+		IOException
 	{
 		WicketTagIdentifier.registerWellKnownTagName("body");
 		WicketTagIdentifier.registerWellKnownTagName("border");
@@ -312,7 +312,7 @@
 		assertEquals(0, markup.size());
 
 		markup = new MarkupParser("<div><wicket:remove> <span id=\"test\"/> </wicket:remove></div>")
-				.parse();
+			.parse();
 		assertEquals(2, markup.size());
 		assertEquals("<div>", ((RawMarkup)markup.get(0)).toString());
 		assertEquals("</div>", ((RawMarkup)markup.get(1)).toString());
@@ -320,10 +320,10 @@
 		try
 		{
 			new MarkupParser("<wicket:remove> <wicket:remove> </wicket:remove> </wicket:remove>")
-					.parse();
+				.parse();
 			assertTrue(
-					"Should have thrown an exception: remove regions must not contain wicket-components",
-					false);
+				"Should have thrown an exception: remove regions must not contain wicket-components",
+				false);
 		}
 		catch (MarkupException ex)
 		{
@@ -331,17 +331,17 @@
 		}
 
 		new MarkupParser(
-				"<wicket:component name = \"componentName\" class = \"classname\" param1 = \"value1\"/>")
-				.parse();
+			"<wicket:component name = \"componentName\" class = \"classname\" param1 = \"value1\"/>")
+			.parse();
 		new MarkupParser(
-				"<wicket:component name = \"componentName\" class = \"classname\" param1 = \"value1\">    </wicket:component>")
-				.parse();
+			"<wicket:component name = \"componentName\" class = \"classname\" param1 = \"value1\">    </wicket:component>")
+			.parse();
 		new MarkupParser(
-				"<wicket:component name = \"componentName\" class = \"classname\" param1 = \"value1\">  <span wicket:id=\"msg\">hello world!</span></wicket:component>")
-				.parse();
+			"<wicket:component name = \"componentName\" class = \"classname\" param1 = \"value1\">  <span wicket:id=\"msg\">hello world!</span></wicket:component>")
+			.parse();
 		new MarkupParser(
-				"<wicket:panel><div id=\"definitionsContentBox\"><span wicket:id=\"contentPanel\"/></div></wicket:panel>")
-				.parse();
+			"<wicket:panel><div id=\"definitionsContentBox\"><span wicket:id=\"contentPanel\"/></div></wicket:panel>")
+			.parse();
 	}
 
 	/**
@@ -352,15 +352,15 @@
 	 * @throws IOException
 	 */
 	public final void testDefaultWicketTag() throws ParseException,
-			ResourceStreamNotFoundException, IOException
+		ResourceStreamNotFoundException, IOException
 	{
-		MarkupParser parser = new MarkupParser("<span wcn:id=\"test\"/>");
+		MarkupParser parser = new MarkupParser("<image wcn:id=\"test\"/>");
 		parser.setWicketNamespace("wcn");
 
 		Markup markup = parser.parse();
 		assertEquals(1, markup.size());
 
-		markup = new MarkupParser("<span wicket:id=\"test\"/>").parse();
+		markup = new MarkupParser("<image wicket:id=\"test\"/>").parse();
 		assertEquals(1, markup.size());
 
 		WicketTagIdentifier.registerWellKnownTagName("xxx");
@@ -378,10 +378,10 @@
 	 * @throws IOException
 	 */
 	public final void testScript() throws ParseException, ResourceStreamNotFoundException,
-			IOException
+		IOException
 	{
 		final MarkupParser parser = new MarkupParser(
-				"<html wicket:id=\"test\"><script language=\"JavaScript\">... <x a> ...</script></html>");
+			"<html wicket:id=\"test\"><script language=\"JavaScript\">... <x a> ...</script></html>");
 
 		Markup markup = parser.parse();
 		assertEquals(3, markup.size());
@@ -389,7 +389,7 @@
 		assertEquals("html", ((ComponentTag)markup.get(2)).getName());
 		assertEquals(true, markup.get(1) instanceof RawMarkup);
 		assertEquals("<script language=\"JavaScript\">... <x a> ...</script>", ((RawMarkup)markup
-				.get(1)).toString());
+			.get(1)).toString());
 	}
 
 	/**
@@ -400,7 +400,7 @@
 	public final void testBalancing() throws IOException, ResourceStreamNotFoundException
 	{
 		final MarkupParser parser = new MarkupParser(
-				"<span wicket:id=\"span\"><img wicket:id=\"img\"><span wicket:id=\"span2\"></span></span>");
+			"<span wicket:id=\"span\"><img wicket:id=\"img\"><span wicket:id=\"span2\"></span></span>");
 
 		// Note: <img> is one of these none-balanced HTML tags
 		Markup markup = parser.parse();

Modified: wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/border/BoxBorderTestPage_10.html
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/border/BoxBorderTestPage_10.html?rev=591712&r1=591711&r2=591712&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/border/BoxBorderTestPage_10.html (original)
+++ wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/border/BoxBorderTestPage_10.html Sat Nov  3 16:50:26 2007
@@ -1,5 +1,5 @@
 <html>
 <body>
-<span wicket:id="border1" />
+<image wicket:id="border1" />
 </body>
 </html>