Author: mgrigorov
Date: Tue Jul 19 13:04:15 2011
New Revision: 1148307

URL: http://svn.apache.org/viewvc?rev=1148307&view=rev
Log:
WICKET-3886 Option for providing caption to DataTable


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
    
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTablePage.java
    
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTableTest.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=1148307&r1=1148306&r2=1148307&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 Jul 19 13:04:15 2011
@@ -16,7 +16,7 @@
    limitations under the License.
 -->
 <wicket:panel xmlns:wicket="http://wicket.apache.org";>
-
+<caption wicket:id="caption"></caption>
 <thead wicket:id="topToolbars">
        <wicket:container wicket:id="toolbars"></wicket:container>
 </thead>

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=1148307&r1=1148306&r2=1148307&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 Jul 19 13:04:15 2011
@@ -24,6 +24,7 @@ import org.apache.wicket.behavior.Behavi
 import 
org.apache.wicket.extensions.markup.html.repeater.data.grid.DataGridView;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.navigation.paging.IPageableItems;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.markup.repeater.IItemReuseStrategy;
@@ -115,6 +116,8 @@ public class DataTable<T> extends Panel 
 
        private final ToolbarsContainer bottomToolbars;
 
+       private final Caption caption;
+
        /**
         * Constructor
         * 
@@ -138,6 +141,8 @@ public class DataTable<T> extends Panel 
                }
 
                this.columns = columns;
+               this.caption = new Caption("caption", getCaptionModel());
+               add(caption);
                body = newBodyContainer("body");
                datagrid = new DataGridView<T>("rows", columns, dataProvider)
                {
@@ -181,6 +186,17 @@ public class DataTable<T> extends Panel 
        }
 
        /**
+        * Returns the model for table's caption. The caption wont be rendered 
if the model has empty
+        * value.
+        * 
+        * @return the model for table's caption
+        */
+       protected IModel<String> getCaptionModel()
+       {
+               return null;
+       }
+
+       /**
         * Create the MarkupContainer for the <tbody> tag. Users may subclass 
it to provide their own
         * (modified) implementation.
         * 
@@ -452,4 +468,32 @@ public class DataTable<T> extends Panel 
                        setVisible(visible);
                }
        }
+
+       /**
+        * A caption for the table. It renders itself only if {@link 
DataTable#getCaptionModel()} has
+        * non-empty value.
+        */
+       private static class Caption extends Label
+       {
+               /**
+                * Construct.
+                * 
+                * @param id
+                *            the component id
+                * @param model
+                *            the caption model
+                */
+               public Caption(String id, IModel<String> model)
+               {
+                       super(id, model);
+               }
+
+               @Override
+               protected void onConfigure()
+               {
+                       
setRenderBodyOnly(Strings.isEmpty(getDefaultModelObjectAsString()));
+
+                       super.onConfigure();
+               }
+       }
 }

Modified: 
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTablePage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTablePage.java?rev=1148307&r1=1148306&r2=1148307&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTablePage.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTablePage.java
 Tue Jul 19 13:04:15 2011
@@ -87,7 +87,21 @@ public class DataTablePage extends WebPa
 
                @SuppressWarnings({ "rawtypes", "unchecked" })
                DefaultDataTable defaultDataTable = new 
DefaultDataTable("table", columns,
-                       new SortableContactDataProvider(), 8);
+                       new SortableContactDataProvider(), 8)
+               {
+
+                       @Override
+                       protected IModel getCaptionModel()
+                       {
+                               return DataTablePage.this.getCaptionModel();
+                       }
+
+               };
                add(defaultDataTable);
        }
+
+       protected IModel<String> getCaptionModel()
+       {
+               return null;
+       }
 }

Modified: 
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTableTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTableTest.java?rev=1148307&r1=1148306&r2=1148307&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTableTest.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTableTest.java
 Tue Jul 19 13:04:15 2011
@@ -81,6 +81,9 @@ public class DataTableTest extends TestC
                index = document.indexOf("<tbody", index + 1);
                assertTrue("There must be only one <tbody>", index == -1);
 
+               index = document.indexOf("<caption", index + 1);
+               assertTrue("There must be not be <caption>", index == -1);
+
                log.error(document);
                log.error("==============================================");
                log.error("==============================================");
@@ -110,6 +113,30 @@ public class DataTableTest extends TestC
                
Assert.assertFalse(tester.getLastResponseAsString().contains("tfoot"));
        }
 
+       /**
+        * Tests that a {@link DataTable} with non-empty {@link 
DataTable#getCaptionModel()} will render
+        * &lt;caption&gt; element.
+        */
+       public void testWicket3886()
+       {
+               DataTablePage page = new DataTablePage()
+               {
+                       @Override
+                       protected IModel<String> getCaptionModel()
+                       {
+                               return Model.of("Caption");
+                       }
+               };
+
+               tester.startPage(page);
+               tester.assertRenderedPage(DataTablePage.class);
+
+               String document = tester.getLastResponseAsString();
+               int index = document.indexOf("<caption 
wicket:id=\"caption\">Caption</caption>");
+               assertTrue("Caption must be rendered!", index > -1);
+
+       }
+
        private String removeFillers(String doc)
        {
                doc = doc.replaceAll("(?s)<span .*?>.*?</span>", "<x/>");


Reply via email to