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 <head> and <wicket:head>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 <wicket:head> 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. <wicket:region name=panel>
*
* @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);
+ }
+ }
}