You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2015/08/12 14:31:18 UTC
wicket git commit: WICKET-5964 Queuing a component within an enclosure
Repository: wicket
Updated Branches:
refs/heads/master 5e49b1669 -> 860668521
WICKET-5964 Queuing a component within an enclosure
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/86066852
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/86066852
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/86066852
Branch: refs/heads/master
Commit: 860668521f1d250038cd233d5dfe63c740e1fc19
Parents: 5e49b16
Author: Andrea Del Bene <ad...@apache.org>
Authored: Wed Aug 12 14:30:26 2015 +0200
Committer: Andrea Del Bene <ad...@apache.org>
Committed: Wed Aug 12 14:31:00 2015 +0200
----------------------------------------------------------------------
.../wicket/markup/html/internal/Enclosure.java | 46 +++++++++++++++++++-
...eueingTransparentWebMarkupContainerTest.java | 5 +++
.../TransparentContainerQueuePage.html | 8 ++--
3 files changed, 55 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/86066852/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
index 49d55c3..882a3ba 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
@@ -16,12 +16,17 @@
*/
package org.apache.wicket.markup.html.internal;
+import java.util.Iterator;
+
import org.apache.wicket.Component;
+import org.apache.wicket.DequeueContext;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.IMarkupFragment;
import org.apache.wicket.markup.MarkupException;
import org.apache.wicket.markup.MarkupStream;
+import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.EnclosureContainer;
import org.apache.wicket.markup.parser.filter.EnclosureHandler;
@@ -125,7 +130,7 @@ public class Enclosure extends WebMarkupContainer implements IComponentResolver
if (childComponent == null)
{
// try to find child when queued
- childComponent = get(childId);
+ childComponent = resolveChild(this);
}
if (childComponent == null)
{
@@ -134,6 +139,33 @@ public class Enclosure extends WebMarkupContainer implements IComponentResolver
}
return childComponent;
}
+
+ /**
+ * Searches for the controlling child component looking also
+ * through transparent components.
+ *
+ * @param container
+ * the current container
+ * @return the controlling child component, null if no one is found
+ */
+ private Component resolveChild(MarkupContainer container)
+ {
+ Component childController = container.get(childId);
+
+ Iterator<Component> children = container.iterator();
+
+ while (children.hasNext() && childController == null)
+ {
+ Component transparentChild = children.next();
+
+ if(transparentChild instanceof TransparentWebMarkupContainer)
+ {
+ childController = resolveChild((MarkupContainer)transparentChild);
+ }
+ }
+
+ return childController;
+ }
@Override
public boolean isVisible()
@@ -274,4 +306,16 @@ public class Enclosure extends WebMarkupContainer implements IComponentResolver
"Programming error: childComponent == enclose component; endless loop");
}
}
+
+ @Override
+ public DequeueContext newDequeueContext()
+ {
+ IMarkupFragment markup = getMarkupSourcingStrategy().getMarkup(this, null);
+ if (markup == null)
+ {
+ return null;
+ }
+
+ return new DequeueContext(markup, this, true);
+ }
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/86066852/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java
index d1a3d08..6ac7d4a 100644
--- a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java
@@ -45,6 +45,11 @@ public class DequeueingTransparentWebMarkupContainerTest extends WicketTestCase
*
* Transparent component inside page body must allow
* queued children components.
+ *
+ *
+ * https://issues.apache.org/jira/browse/WICKET-5964
+ *
+ * Queuing a component within an enclosure
*/
@Test
public void queuedComponentsInsideTransparentContainer()
http://git-wip-us.apache.org/repos/asf/wicket/blob/86066852/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html
index 06e8f3f..ce963d9 100644
--- a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html
+++ b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html
@@ -5,8 +5,10 @@
<title>Insert title here</title>
</head>
<body>
- <a href="ref/transparentContainer.html">
- <span wicket:id="queuedComponent"></span>
- </a>
+ <wicket:enclosure child="queuedComponent">
+ <a href="ref/transparentContainer.html">
+ <span wicket:id="queuedComponent"></span>
+ </a>
+ </wicket:enclosure>
</body>
</html>
\ No newline at end of file