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