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;