package org.orienteer.core.component.table.navigation; import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigation; import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.behavior.Behavior; import org.apache.wicket.extensions.markup.html.repeater.data.table.NavigationToolbar; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.list.LoopItem; import org.apache.wicket.markup.html.navigation.paging.IPageable; import org.apache.wicket.markup.html.navigation.paging.IPagingLabelProvider; import org.apache.wicket.markup.html.navigation.paging.PagingNavigation; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; /** * AJAX-enabled and bootstrap orienteed {@link AjaxPagingNavigator} */ public class OrienteerPagingNavigator extends AjaxPagingNavigator { private static class AutoDisableParent extends WebMarkupContainer { public AutoDisableParent(String id) { super(id); } @Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); if(!get(0).isEnabledInHierarchy()) tag.append("class", "disabled", " "); } } public OrienteerPagingNavigator(String id, IPageable pageable, IPagingLabelProvider labelProvider) { super(id, pageable, labelProvider); } public OrienteerPagingNavigator(String id, IPageable pageable) { super(id, pageable); } @Override public MarkupContainer add(Component... childs) { for(Component child : childs) { String id = child.getId(); if("first".equals(id) || "prev".equals(id) || "next".equals(id) || "last".equals(id)) { super.add(new AutoDisableParent(id+"Li").add(child)); } else { super.add(child); } } return this; } @Override protected PagingNavigation newNavigation(final String id, final IPageable pageable, final IPagingLabelProvider labelProvider) { return new AjaxPagingNavigation(id, pageable, labelProvider) { @Override protected void populateItem(LoopItem loopItem) { super.populateItem(loopItem); loopItem.add(new AttributeAppender("class", Model.of("active"), " ") { @Override public boolean isEnabled(Component component) { return !((LoopItem)component).get(0).isEnabledInHierarchy(); } }); } }; } }