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 + * <caption> 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/>");