protected BSPaginationPanel newPagination(String id, DataTable<?, ?> table) { return new BSPaginationPanel(id, table); }
@Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); checkComponentTag(tag, "nav"); }
private List<Long> getMiddlePagesRange() { long rangeLength = Math.min(1 + (getMiddlePagesRadius() * 2L), getPageCount()); List<Long> list = new ArrayList<>(); long start = Math.min(Math.max(0, getCurrentPage() - getMiddlePagesRadius()), getPageCount() - rangeLength); for (long i = 0; i < rangeLength; i++) list.add(start++); return list; }
public <P extends Component & IPageableItems> BSPaginationPanel(String id, P pageable) { super(id); this.pageable = pageable; add(new OffsetLink("previous", getPageable(), -1)); add(new FirstLink("first", getPageable())); add(new WebMarkupContainer("firstEllipse") .add($b.visibleIf($m.get(() -> (getCurrentPage() - getMiddlePagesRadius()) > 1)))); add(new RefreshingView<Long>("pages") { @Override protected Iterator<IModel<Long>> getItemModels() { return getMiddlePagesRange().stream().map($m::ofValue).map(m -> (IModel<Long>)m).iterator(); } @Override protected void populateItem(Item<Long> item) { item .add(newNumberedPageLink(item)) .add($b.classAppender("active", $m.get(() -> item.getModelObject() == getCurrentPage()))); } }); add(new WebMarkupContainer("lastEllipse") .add($b.visibleIf($m.get(() -> (getCurrentPage() + getMiddlePagesRadius()) < getLastPage() - 1)))); add(new LastLink("last", getPageable())); add(new OffsetLink("next", getPageable(), +1)); }
public <P extends Component & IPageableItems> BSPaginationPanel(String id, P pageable) { super(id); this.pageable = pageable; add(new OffsetLink("previous", -1)); add(new FirstLink("first")); add(new WebMarkupContainer("firstEllipse") .add($b.visibleIf($m.get(() -> (getCurrentPage() - getMiddlePagesRadius()) > 1)))); add(new ListView<Long>("pages", $m.get(() -> getMiddlePagesRange())) { @Override protected void populateItem(ListItem<Long> item) { item .add(new PageNavLink("page") { @Override protected long getTargetPage() { return item.getModelObject(); } }.setBody($m.get(() -> 1 + item.getModelObject()))) .add($b.classAppender("active", $m.get(() -> item.getModelObject() == getCurrentPage()))); } }); add(new WebMarkupContainer("lastEllipse") .add($b.visibleIf($m.get(() -> (getCurrentPage() + getMiddlePagesRadius()) < getLastPage() - 1)))); add(new LastLink("last")); add(new OffsetLink("next", +1)); }
@Override protected long getTargetPage() { return getPageable().getCurrentPage() + ((long) pageDelta); } @Override
private long getLastPage() { return getPageCount() - 1; } private long getPageCount() {
@Override protected void populateItem(Item<Long> item) { item .add(newNumberedPageLink(item)) .add($b.classAppender("active", $m.get(() -> item.getModelObject() == getCurrentPage()))); }
private long getPageCount() { return getPageable().getPageCount(); } private long getCurrentPage() {
private long getLastPage() { return getPageCount() - 1; } private long getPageCount() {
private List<Long> getMiddlePagesRange() { long rangeLength = Math.min(1 + (getMiddlePagesRadius() * 2L), getPageCount()); List<Long> list = new ArrayList<>(); long start = Math.min(Math.max(0, getCurrentPage() - getMiddlePagesRadius()), getPageCount() - rangeLength); for (long i = 0; i < rangeLength; i++) list.add(start++); return list; }
private long getCurrentPage() { return getPageable().getCurrentPage(); }
@Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); checkComponentTag(tag, "nav"); }
public BSPaginationToolbar(DataTable<?, ?> table) { super(table); paginator = new WebMarkupContainer("paginator"); add(paginator); paginator.add(new BSPaginationPanel("pagination", table)); itensPerPageSelector = $b.addAjaxUpdate( new BSItemsPerPageDropDown("itemsPerPage", getTable()), (a, c) -> a.add(getTable())) .getTargetComponent(); add(itensPerPageSelector); }
private long getPageCount() { return getPageable().getPageCount(); } private long getCurrentPage() {
private long getCurrentPage() { return getPageable().getCurrentPage(); }
@Override public void onClick(AjaxRequestTarget target) { if (isEnabledInHierarchy()) { getPageable().setCurrentPage(getTargetPage()); target.add(getPageable()); } } @Override
/** * Return the number of elements in the page. * Example: 15 Itens per page. * In page 1 will have 15 itens. * In page 2 will have 30 itens. * In page 3 will have 45 itens. * * @return number max of elements per page. */ private long getMaxNumberElementsPerPage() { return (pagination.getPageable().getCurrentPage() + 1) * this.getTable().getItemsPerPage(); } }
protected NumberedPageLink newNumberedPageLink(ListItem<Long> item) { NumberedPageLink link = new NumberedPageLink("page", getPageable(), item.getModel()); link.setBody($m.get(() -> 1 + item.getModelObject())); return link; }