public PageControlInfo CalculateAtPageIndex(int pageIndex) { if (pageIndex < 1 || TotalPageCount == 0) { return(PageControlInfo.NewEmptyResult()); } return(pageIndex > TotalPageCount ? GetResultFrom(TotalPageCount) : GetResultFrom(pageIndex)); }
public static void SequenceCanonicalControls(this PageControlInfo controlInfo, Action <int?> onPrevious, Action onGap, Action <int, bool> onOrdinal, Action <int?> onNext) { var controlIndexMap = controlInfo.ControlIndexMap; var centralWindow = controlInfo.SequentialIndexWindow; var currentPageIndex = controlInfo.CurrentPageIndex; onPrevious(controlIndexMap.Previous != default(int) ? (int?)controlIndexMap.Previous : null); if (controlInfo.FirstIndexIsOutsideWindow) { onOrdinal(1, false); } var leftGapSize = controlInfo.WindowLeftGapSize; if (leftGapSize == 2) { onOrdinal(2, false); } else if (leftGapSize > 2) { onGap(); } foreach (var index in centralWindow) { onOrdinal(index, index == currentPageIndex); } var rightGapSize = controlInfo.WindowRightGapSize; if (rightGapSize > 2) { onGap(); } else if (rightGapSize == 2) { var index = controlIndexMap.Last - 1; onOrdinal(index, false); } if (controlInfo.LastIndexIsOutsideWindow) { onOrdinal(controlIndexMap.Last, false); } onNext(controlIndexMap.Next != default(int) ? (int?)controlIndexMap.Next : null); }
private RenderedNavigationInfo RenderControls(PageControlInfo controlInfo) { if (controlInfo.ItemRange.TotalItemCount == 0) { return(new RenderedNavigationInfo("", controlInfo.ItemRange, controlInfo.TotalPageCount)); } var builder = new StringBuilder(); controlInfo.SequenceCanonicalControls(index => builder.Append(_selector.RenderPreviousControl(index)), () => builder.Append(_selector.RenderGapMarker()), (index, isSelected) => builder.Append(_selector.RenderOrdinalControl(index, isSelected)), index => builder.Append(_selector.RenderNextControl(index))); var result = new RenderedNavigationInfo(builder.ToString(), controlInfo.ItemRange, _calculator.TotalPageCount); return(result); }