WICKET-6935] several minor datatable improvements
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java index 0cf9af3..795cef7 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java
@@ -71,8 +71,17 @@ super(id, columns, dataProvider, rowsPerPage); setOutputMarkupId(true); setVersioned(false); + addToolBars(dataProvider); + } + + /** + * Factory method for toolbars + * @param dataProvider {@link org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider} + */ + protected void addToolBars(final ISortableDataProvider<T, S> dataProvider) + { addTopToolbar(new AjaxNavigationToolbar(this)); - addTopToolbar(new AjaxFallbackHeadersToolbar(this, dataProvider)); + addTopToolbar(new AjaxFallbackHeadersToolbar<>(this, dataProvider)); addBottomToolbar(new NoRecordsToolbar(this)); }
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java index 70515de..ec0c74b 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java
@@ -17,8 +17,10 @@ package org.apache.wicket.extensions.markup.html.repeater.data.table; import org.apache.wicket.AttributeModifier; +import org.apache.wicket.Component; import org.apache.wicket.markup.html.WebComponent; import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.navigation.paging.IPageableItems; import org.apache.wicket.markup.html.navigation.paging.PagingNavigator; import org.apache.wicket.model.IModel; @@ -44,17 +46,18 @@ WebMarkupContainer span = new WebMarkupContainer("span"); add(span); - span.add(AttributeModifier.replace("colspan", new IModel<String>() - { - @Override - public String getObject() - { - return String.valueOf(table.getColumns().size()).intern(); - } - })); + span.add(AttributeModifier.replace("colspan", (IModel<String>) () -> String.valueOf(table.getColumns().size()).intern())); span.add(newPagingNavigator("navigator", table)); - span.add(newNavigatorLabel("navigatorLabel", table)); + Component complexLabel = newComplexNavigatorLabel("navigatorLabel", table); + if (complexLabel != null) + { + span.add(complexLabel); + } + else + { + span.add(newNavigatorLabel("navigatorLabel", table)); + } } /** @@ -73,12 +76,14 @@ } /** - * Factory method used to create the navigator label that will be used by the datatable + * Factory method used to create the navigator label that will be used by the datatable. + * Use {@link NavigationToolbar#newComplexNavigatorLabel(String, IPageableItems)} instead if you + * want to override label with a more complex component. * * @param navigatorId * component id navigator label should be created with * @param table - * dataview used by datatable + * DataTable used by datatable * @return navigator label that will be used to navigate the data table * */ @@ -87,6 +92,27 @@ return new NavigatorLabel(navigatorId, table); } + /** + * Factory method used to create the navigator component in place of label that will be used by the datatable. + * This method takes precedence over {@link NavigationToolbar#newNavigatorLabel(String, DataTable)}. + * By default it returns <code>null</code>. + * + * <strong>NOTE:</strong> This is just a HACK to not break API in wicket 9.x and support use case of a more + * complex component as label. In wicket 10.x we will simply change the return type of + * NavigationToolbar#newNavigatorLabel(String, DataTable). + * + * @param navigatorId + * component id navigator label should be created with + * @param table + * DataTable used by label + * @return navigator label that will be used to navigate the data table + * + */ + protected Component newComplexNavigatorLabel(final String navigatorId, final IPageableItems table) + { + return null; + } + /** {@inheritDoc} */ @Override protected void onConfigure()
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigatorLabel.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigatorLabel.java index 283118e..617e47b 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigatorLabel.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigatorLabel.java
@@ -50,7 +50,7 @@ new Model<>(new LabelModelObject(pageable)))); } - private static class LabelModelObject implements IClusterable + public static class LabelModelObject implements IClusterable { private static final long serialVersionUID = 1L; private final IPageableItems pageable;