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:13 UTC

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

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