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 2014/03/13 15:21:12 UTC

[1/4] git commit: WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Repository: wicket
Updated Branches:
  refs/heads/wicket-6.x 625470588 -> c0d2ef035


WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Simplify the code by extracting local variables for commonly used things.

No functional changes!


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

Branch: refs/heads/wicket-6.x
Commit: 685f04cfcbf9983fb0a143bd2500b09e2c79ee4c
Parents: 6254705
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Mar 13 15:37:03 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Thu Mar 13 15:37:03 2014 +0200

----------------------------------------------------------------------
 .../org/apache/wicket/markup/MergedMarkup.java  | 33 ++++++++++----------
 1 file changed, 17 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/685f04cf/wicket-core/src/main/java/org/apache/wicket/markup/MergedMarkup.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/MergedMarkup.java b/wicket-core/src/main/java/org/apache/wicket/markup/MergedMarkup.java
index eb1a6b9..d4c14d2 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/MergedMarkup.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/MergedMarkup.java
@@ -16,11 +16,13 @@
  */
 package org.apache.wicket.markup;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.parser.XmlTag;
 import org.apache.wicket.markup.parser.XmlTag.TagType;
 import org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler;
+import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -133,6 +135,10 @@ public class MergedMarkup extends Markup
 		// into <wicket:child> and add it as well.
 		WicketTag childTag = null;
 		int baseIndex = 0;
+		MarkupResourceStream markupResourceStream = baseMarkup.getMarkupResourceStream();
+		IResourceStream resource = markupResourceStream.getResource();
+		Class<? extends Component> markupClass = markupResourceStream.getMarkupClass();
+
 		for (; baseIndex < baseMarkup.size(); baseIndex++)
 		{
 			MarkupElement element = baseMarkup.get(baseIndex);
@@ -147,10 +153,9 @@ public class MergedMarkup extends Markup
 
 			// Make sure all tags of the base markup remember where they are
 			// from
-			if ((baseMarkup.getMarkupResourceStream().getResource() != null) &&
-				(tag.getMarkupClass() == null))
+			if (resource != null && tag.getMarkupClass() == null)
 			{
-				tag.setMarkupClass(baseMarkup.getMarkupResourceStream().getMarkupClass());
+				tag.setMarkupClass(markupClass);
 			}
 
 			if (element instanceof WicketTag)
@@ -160,8 +165,7 @@ public class MergedMarkup extends Markup
 				// Found org.apache.wicket.child in base markup. In case of 3+
 				// level inheritance make sure the child tag is not from one of
 				// the deeper levels
-				if (wtag.isChildTag() &&
-					(tag.getMarkupClass() == baseMarkup.getMarkupResourceStream().getMarkupClass()))
+				if (wtag.isChildTag() && tag.getMarkupClass() == markupClass)
 				{
 					if (wtag.isOpenClose())
 					{
@@ -169,8 +173,7 @@ public class MergedMarkup extends Markup
 						childTag = wtag;
 						WicketTag childOpenTag = (WicketTag)wtag.mutable();
 						childOpenTag.getXmlTag().setType(TagType.OPEN);
-						childOpenTag.setMarkupClass(baseMarkup.getMarkupResourceStream()
-							.getMarkupClass());
+						childOpenTag.setMarkupClass(markupClass);
 						addMarkupElement(childOpenTag);
 						break;
 					}
@@ -282,7 +285,7 @@ public class MergedMarkup extends Markup
 					if (tag.isChildTag() && tag.isClose())
 					{
 						// Ok, skipped the childs content
-						tag.setMarkupClass(baseMarkup.getMarkupResourceStream().getMarkupClass());
+						tag.setMarkupClass(markupClass);
 						addMarkupElement(tag);
 						break;
 					}
@@ -314,7 +317,7 @@ public class MergedMarkup extends Markup
 			// But first add </wicket:child>
 			WicketTag childCloseTag = (WicketTag)childTag.mutable();
 			childCloseTag.getXmlTag().setType(TagType.CLOSE);
-			childCloseTag.setMarkupClass(baseMarkup.getMarkupResourceStream().getMarkupClass());
+			childCloseTag.setMarkupClass(markupClass);
 			addMarkupElement(childCloseTag);
 		}
 
@@ -325,11 +328,10 @@ public class MergedMarkup extends Markup
 
 			// Make sure all tags of the base markup remember where they are
 			// from
-			if ((element instanceof ComponentTag) &&
-				(baseMarkup.getMarkupResourceStream().getResource() != null))
+			if (element instanceof ComponentTag && resource != null)
 			{
 				ComponentTag tag = (ComponentTag)element;
-				tag.setMarkupClass(baseMarkup.getMarkupResourceStream().getMarkupClass());
+				tag.setMarkupClass(markupClass);
 			}
 		}
 
@@ -348,13 +350,12 @@ public class MergedMarkup extends Markup
 			{
 				MarkupElement element = get(i);
 
-				if ((hasOpenWicketHead == -1) && (element instanceof WicketTag) &&
-					((WicketTag)element).isHeadTag())
+				boolean isHeadTag = (element instanceof WicketTag) && ((WicketTag) element).isHeadTag();
+				if ((hasOpenWicketHead == -1) && isHeadTag)
 				{
 					hasOpenWicketHead = i;
 				}
-				else if ((element instanceof WicketTag) && ((WicketTag)element).isHeadTag() &&
-					((WicketTag)element).isClose())
+				else if (isHeadTag && ((ComponentTag)element).isClose())
 				{
 					hasCloseWicketHead = i;
 				}


[2/4] git commit: WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Posted by mg...@apache.org.
WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Add containers for <wicket:head> to the HtmlHeader(Items)Container in the page


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

Branch: refs/heads/wicket-6.x
Commit: c31f30f6914b5d9bd146864015d5aebe16cd681c
Parents: 685f04c
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Mar 13 15:38:07 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Thu Mar 13 15:38:07 2014 +0200

----------------------------------------------------------------------
 .../markup/resolver/HtmlHeaderResolver.java     | 59 +++++++++++++++-----
 1 file changed, 46 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/c31f30f6/wicket-core/src/main/java/org/apache/wicket/markup/resolver/HtmlHeaderResolver.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/HtmlHeaderResolver.java b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/HtmlHeaderResolver.java
index 8ebe0ce..f5ab571 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/HtmlHeaderResolver.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/HtmlHeaderResolver.java
@@ -31,6 +31,8 @@ import org.apache.wicket.markup.html.internal.HtmlHeaderItemsContainer;
 import org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler;
 import org.apache.wicket.markup.parser.filter.WicketTagIdentifier;
 import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 
 /**
  * This is a tag resolver which handles &lt;head&gt; and &lt;wicket:head&gt;tags. It must be
@@ -59,7 +61,7 @@ public class HtmlHeaderResolver implements IComponentResolver
 	{
 		final Page page = container.getPage();
 
-		// Only <head> component tags have the id == "_header"
+		// <head> or <wicket:header-items/> component tags have the id == "_header_"
 		if (tag.getId().equals(HtmlHeaderSectionHandler.HEADER_ID))
 		{
 			// Create a special header component which will gather additional
@@ -74,22 +76,39 @@ public class HtmlHeaderResolver implements IComponentResolver
 			// head first.
 			if (container instanceof WebPage)
 			{
-				// Create a special header component which will gather
-				// additional input the <head> from 'contributors'.
-				MarkupContainer header = newHtmlHeaderContainer(HtmlHeaderSectionHandler.HEADER_ID +
-					page.getAutoIndex(), tag);
+				HtmlHeaderContainer header = container.visitChildren(new IVisitor<Component, HtmlHeaderContainer>()
+				{
+					@Override
+					public void component(final Component component, final IVisit<HtmlHeaderContainer> visit)
+					{
+						if (component instanceof HtmlHeaderContainer)
+						{
+							visit.stop((HtmlHeaderContainer) component);
+						} else if (component instanceof TransparentWebMarkupContainer == false)
+						{
+							visit.dontGoDeeper();
+						}
+					}
+				});
 
 				// It is <wicket:head>. Because they do not provide any
 				// additional functionality they are merely a means of surrounding relevant
 				// markup. Thus we simply create a WebMarkupContainer to handle
 				// the tag.
-				WebMarkupContainer header2 = new TransparentWebMarkupContainer(
-					HtmlHeaderSectionHandler.HEADER_ID);
+				WebMarkupContainer wicketHeadContainer = new WicketHeadContainer();
 
-				header2.setRenderBodyOnly(true);
-				header.add(header2);
+				if (header == null)
+				{
+					// Create a special header component which will gather
+					// additional input the <head> from 'contributors'.
+					header = newHtmlHeaderContainer(HtmlHeaderSectionHandler.HEADER_ID +
+						page.getAutoIndex(), tag);
+					header.add(wicketHeadContainer);
+					return header;
+				}
 
-				return header;
+				header.add(wicketHeadContainer);
+				return wicketHeadContainer;
 			}
 			else if (container instanceof HtmlHeaderContainer)
 			{
@@ -97,9 +116,7 @@ public class HtmlHeaderResolver implements IComponentResolver
 				// additional functionality there are merely a means of surrounding
 				// relevant markup. Thus we simply create a WebMarkupContainer to handle
 				// the tag.
-				WebMarkupContainer header = new TransparentWebMarkupContainer(
-					HtmlHeaderSectionHandler.HEADER_ID);
-				header.setRenderBodyOnly(true);
+				WebMarkupContainer header = new WicketHeadContainer();
 
 				return header;
 			}
@@ -150,4 +167,20 @@ public class HtmlHeaderResolver implements IComponentResolver
 		}
 		return htmlHeaderContainer;
 	}
+
+	/**
+	 * A component for &lt;wicket:head&gt; elements
+	 */
+	private static class WicketHeadContainer extends TransparentWebMarkupContainer
+	{
+		/**
+		 * Constructor.
+		 */
+		public WicketHeadContainer()
+		{
+			super(HtmlHeaderSectionHandler.HEADER_ID);
+
+			setRenderBodyOnly(true);
+		}
+	}
 }


[3/4] git commit: WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Posted by mg...@apache.org.
WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Copy <wicket:head> contents right after </wicket:header-items> when <wicket:header-items> is used.


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

Branch: refs/heads/wicket-6.x
Commit: 686030c6763baf24fb8a8f3b24a396369d6f16e1
Parents: c31f30f
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Mar 13 16:07:20 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Thu Mar 13 16:07:20 2014 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/wicket/markup/MergedMarkup.java  | 7 ++++---
 .../src/main/java/org/apache/wicket/markup/WicketTag.java     | 2 ++
 .../wicket/markup/parser/filter/OpenCloseTagExpander.java     | 5 +++++
 3 files changed, 11 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/686030c6/wicket-core/src/main/java/org/apache/wicket/markup/MergedMarkup.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/MergedMarkup.java b/wicket-core/src/main/java/org/apache/wicket/markup/MergedMarkup.java
index d4c14d2..e685827 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/MergedMarkup.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/MergedMarkup.java
@@ -162,7 +162,7 @@ public class MergedMarkup extends Markup
 			{
 				WicketTag wtag = (WicketTag)element;
 
-				// Found org.apache.wicket.child in base markup. In case of 3+
+				// Found wicket:child in the base markup. In case of 3+
 				// level inheritance make sure the child tag is not from one of
 				// the deeper levels
 				if (wtag.isChildTag() && tag.getMarkupClass() == markupClass)
@@ -204,8 +204,7 @@ public class MergedMarkup extends Markup
 						// Add the <wicket:head> body from the derived markup.
 						copyWicketHead(markup, extendIndex);
 
-						// Do not add the current tag. It has already been
-						// added.
+						// Do not add the current tag. It has already been added.
 						continue;
 					}
 
@@ -231,6 +230,7 @@ public class MergedMarkup extends Markup
 
 				// if <head> in base markup
 				if ((tag.isClose() && TagUtils.isHeadTag(tag)) ||
+				    (tag.isClose() && TagUtils.isWicketHeaderItemsTag(tag)) ||
 					(tag.isOpen() && TagUtils.isBodyTag(tag)))
 				{
 					wicketHeadProcessed = true;
@@ -397,6 +397,7 @@ public class MergedMarkup extends Markup
 	 * Append the wicket:head regions from the extended markup to the current markup
 	 * 
 	 * @param markup
+	 *              The markup of the child/inherited container
 	 * @param extendIndex
 	 */
 	private void copyWicketHead(final IMarkupFragment markup, int extendIndex)

http://git-wip-us.apache.org/repos/asf/wicket/blob/686030c6/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java b/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java
index 120d2af..b144758 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java
@@ -70,7 +70,9 @@ public class WicketTag extends ComponentTag
 	 * Get the tag's name attribute: e.g. &lt;wicket:region name=panel&gt;
 	 * 
 	 * @return The tag's name attribute
+	 * @deprecated This method is obsolete since a long time
 	 */
+	@Deprecated
 	public final String getNameAttribute()
 	{
 		return getAttributes().getString("name");

http://git-wip-us.apache.org/repos/asf/wicket/blob/686030c6/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
index 7b0ddfe..f89a11b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
@@ -22,6 +22,7 @@ import java.util.List;
 
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupElement;
+import org.apache.wicket.markup.WicketTag;
 import org.apache.wicket.markup.parser.AbstractMarkupFilter;
 import org.apache.wicket.markup.parser.XmlTag.TagType;
 import org.apache.wicket.markup.resolver.HtmlHeaderResolver;
@@ -92,6 +93,10 @@ public class OpenCloseTagExpander extends AbstractMarkupFilter
 				if (onFound(tag))
 				{
 					next = new ComponentTag(tag.getName(), TagType.CLOSE);
+					if (getWicketNamespace().equals(tag.getNamespace()))
+					{
+						next = new WicketTag(next);
+					}
 					next.setNamespace(tag.getNamespace());
 					next.setOpenTag(tag);
 					next.setModified(true);


[4/4] git commit: WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Posted by mg...@apache.org.
WICKET-5531 Create new placeholder tag to indicate where header contributions should appear


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

Branch: refs/heads/wicket-6.x
Commit: c0d2ef035efbcf9244206507731764372a121372
Parents: 686030c
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Mar 13 16:17:27 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Thu Mar 13 16:17:27 2014 +0200

----------------------------------------------------------------------
 .../HtmlHeaderItemsContainerTest.java           | 43 ++++++++++++++++++++
 1 file changed, 43 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/c0d2ef03/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/HtmlHeaderItemsContainerTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/HtmlHeaderItemsContainerTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/HtmlHeaderItemsContainerTest.java
index f1602cc..03f2da6 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/HtmlHeaderItemsContainerTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/HtmlHeaderItemsContainerTest.java
@@ -154,4 +154,47 @@ public class HtmlHeaderItemsContainerTest extends WicketTestCase
 	{
 		tester.startPage(PageWithHeaderItemsOutOfHead.class);
 	}
+
+	/**
+	 * Verifies that all header contributions from <wicket:head> containers
+	 * and IHeaderResponse are rendered exactly once
+	 *
+	 * https://issues.apache.org/jira/browse/WICKET-5531
+	 */
+	@Test
+	public void withHeaderItemsWithWicketHeadNoDuplicates()
+	{
+		tester.startPage(SubPageWithHeaderItemsAndWicketHead.class);
+		String responseAsString = tester.getLastResponseAsString();
+
+		{
+			int idxMetaPanelWicketHead = responseAsString.indexOf("meta name=\"panel-wicket-head\"");
+			int lastIdxMetaPanelWicketHead = responseAsString.lastIndexOf("meta name=\"panel-wicket-head\"");
+			assertEquals(idxMetaPanelWicketHead, lastIdxMetaPanelWicketHead);
+		}
+
+		{
+			int idxWicketAjaxJs = responseAsString.indexOf("wicket-ajax-jquery.js");
+			int lastIdxWicketAjaxJs = responseAsString.lastIndexOf("wicket-ajax-jquery.js");
+			assertEquals(idxWicketAjaxJs, lastIdxWicketAjaxJs);
+		}
+
+		{
+			int idxTitleElement = responseAsString.indexOf("<title>Apache Wicket Quickstart</title>");
+			int lastIdxTitleElement = responseAsString.lastIndexOf("<title>Apache Wicket Quickstart</title>");
+			assertEquals(idxTitleElement, lastIdxTitleElement);
+		}
+
+		{
+			int idxMetaFromBasePage = responseAsString.indexOf("<meta name='fromBasePage' content='1'");
+			int lastIdxMetaFromBasePage = responseAsString.lastIndexOf("<meta name='fromBasePage' content='1'");
+			assertEquals(idxMetaFromBasePage, lastIdxMetaFromBasePage);
+		}
+
+		{
+			int idxMetaFromSubPage = responseAsString.indexOf("<meta name=\"SubPageWithHeaderItemsAndWicketHead\"");
+			int lastIdxMetaFromSubPage = responseAsString.lastIndexOf("<meta name=\"SubPageWithHeaderItemsAndWicketHead\"");
+			assertEquals(idxMetaFromSubPage, lastIdxMetaFromSubPage);
+		}
+	}
 }