You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2008/09/16 09:36:32 UTC
svn commit: r695753 - in
/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table:
DataTable.html DataTable.java
Author: ivaynberg
Date: Tue Sep 16 00:36:32 2008
New Revision: 695753
URL: http://svn.apache.org/viewvc?rev=695753&view=rev
Log:
WICKET-1496
Modified:
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.html
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java
Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.html
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.html?rev=695753&r1=695752&r2=695753&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.html (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.html Tue Sep 16 00:36:32 2008
@@ -15,16 +15,20 @@
limitations under the License.
-->
<wicket:panel>
+<wicket:enclosure child="topToolbars">
<thead>
<span wicket:id="topToolbars">
<span wicket:id="toolbar"></span>
</span>
</thead>
+</wicket:enclosure>
+<wicket:enclosure child="bottomToolbars">
<tfoot>
<span wicket:id="bottomToolbars">
<span wicket:id="toolbar"></span>
</span>
</tfoot>
+</wicket:enclosure>
<tbody>
<tr wicket:id="rows">
<td wicket:id="cells">
Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java?rev=695753&r1=695752&r2=695753&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java Tue Sep 16 00:36:32 2008
@@ -175,30 +175,8 @@
datagrid.setRowsPerPage(rowsPerPage);
add(datagrid);
- topToolbars = new RepeatingView("topToolbars")
- {
- private static final long serialVersionUID = 1L;
-
- @Override
- public boolean isVisible()
- {
- return size() > 0;
- }
-
- };
-
- bottomToolbars = new RepeatingView("bottomToolbars")
- {
-
- private static final long serialVersionUID = 1L;
-
- @Override
- public boolean isVisible()
- {
- return size() > 0;
- }
- };
-
+ topToolbars = new ToolbarsContainer("topToolbars");
+ bottomToolbars = new ToolbarsContainer("bottomToolbars");
add(topToolbars);
add(bottomToolbars);
}
@@ -323,7 +301,7 @@
toolbar.setRenderBodyOnly(true);
// create a container item for the toolbar (required by repeating view)
- WebMarkupContainer item = new WebMarkupContainer(container.newChildId());
+ WebMarkupContainer item = new ToolbarContainer(container.newChildId());
item.setRenderBodyOnly(true);
item.add(toolbar);
@@ -392,4 +370,85 @@
// noop
}
+ /**
+ * Acts as a container item for a single toolbar. The main feature it implements is the
+ * visibility check, this item is visible only if the toolbar placed into it is visible.
+ *
+ * TODO 1.5 optimization: this can probably be removed and items can be added directly to the
+ * toolbarcontainer
+ *
+ * @author igor.vaynberg
+ */
+ private final class ToolbarContainer extends WebMarkupContainer
+ {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ * Construct.
+ *
+ * @param id
+ */
+ private ToolbarContainer(String id)
+ {
+ super(id);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean isVisible()
+ {
+ return ((Component)iterator().next()).isVisible();
+ }
+ }
+
+ /**
+ * This class acts as a repeater that will contain the toolbar. The key feature it implements is
+ * the visibility check, this container is only visible if at least one child is visible. This
+ * helps to properly hide <code>thead/tfoot</code> sections if no toolbars will be visible
+ * because those sections cannot be empty according to html spec.
+ *
+ * @author igor.vaynberg
+ */
+ private class ToolbarsContainer extends RepeatingView
+ {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Constructor
+ *
+ * @param id
+ */
+ private ToolbarsContainer(String id)
+ {
+ super(id);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean isVisible()
+ {
+ // only visible if at least one child is visible
+ final boolean[] visible = new boolean[] { false };
+ visitChildren(new IVisitor()
+ {
+
+ public Object component(Component component)
+ {
+ if (component.isVisible())
+ {
+ visible[0] = true;
+ return STOP_TRAVERSAL;
+ }
+ else
+ {
+ return CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
+ }
+ }
+
+ });
+ return visible[0];
+ }
+ }
+
}