コード例 #1
0
        public override IEnumerable<IPageLinkModel> LinkPages(IPageRequestModel request, IPageResultsModel results)
        {
            if (null == request) throw new ArgumentNullException("request");
            if (null == results) throw new ArgumentNullException("results");

            var list = new List<IPageLinkModel>();
            var forcePrevNext = ForcePrevNext;
            var requestedPage = request.RequestedPage;

            var testPrev = requestedPage > 0;
            if (forcePrevNext || testPrev) {
                list.Add(new PageLinkModel(request, testPrev ? requestedPage - 1 : requestedPage, PrevText));
            }

            var baseLinker = BaseLinker;
            if (baseLinker != null) {
                list.AddRange(baseLinker.LinkPages(request, results));
            }

            var testNext = requestedPage < results.TotalPageCount - 1;
            if (forcePrevNext || testNext) {
                list.Add(new PageLinkModel(request, testNext ? requestedPage + 1 : requestedPage, NextText));
            }

            return list;
        }
コード例 #2
0
 /// <summary>
 /// Creates an instance of <see cref="T:RouteValueDictionary"/> that contains the route information
 /// necessary to duplicate the <paramref name="pageRequestModel"/> for the given <paramref name="requestedPage"/>.
 /// </summary>
 /// <param name="pageRequestModel">The model for which the <see cref="T:RouteValueDictionary"/> is created.</param>
 /// <param name="requestedPage">The requested page for which the <see cref="T:RouteValueDictionary"/> is created.</param>
 /// <returns>
 /// A new instance of <see cref="T:RouteValueDictionary"/> with the route information necessary to
 /// duplicate the <paramref name="pageRequestModel"/> for the given <paramref name="requestedPage"/>.
 /// </returns>
 public static RouteValueDictionary GetRouteValues(this IPageRequestModel pageRequestModel, int requestedPage)
 {
     if (null == pageRequestModel)
     {
         throw new ArgumentNullException("pageRequestModel");
     }
     return(new RouteValueDictionary(pageRequestModel.GetRequestValues(requestedPage)));
 }
コード例 #3
0
ファイル: DynamicLinker.cs プロジェクト: pombreda/Pagination
 public LinkFactory(IPageRequestModel request, bool isBase1)
 {
     if (null == request)
     {
         throw new ArgumentNullException("request");
     }
     _Request = request;
     _IsBase1 = isBase1;
 }
コード例 #4
0
 protected PageLinkModelBase(IPageRequestModel request, string linkText, int lowerPage, int upperPage)
 {
     if (null == request) throw new ArgumentNullException("request");
     _Request = request;
     _LinkPage = lowerPage;
     _LinkText = linkText;
     _LowerPage = lowerPage;
     _UpperPage = upperPage;
     _IsPageRange = true;
     _IsRequestedPage = false;
 }
コード例 #5
0
ファイル: DynamicLinker.cs プロジェクト: pombreda/Pagination
        public override IEnumerable <IPageLinkModel> LinkPages(IPageRequestModel request, IPageResultsModel results)
        {
            if (null == request)
            {
                throw new ArgumentNullException("request");
            }
            if (null == results)
            {
                throw new ArgumentNullException("results");
            }

            var list = new List <IPageLinkModel>();

            if (results.TotalPageCount > 1)
            {
                var requestedPage  = request.RequestedPage;
                var totalPageCount = results.TotalPageCount;
                var factory        = new LinkFactory(request, IsBase1);

                list.Add(factory.CreateLink(0));

                if (requestedPage > 1)
                {
                    var test = requestedPage == totalPageCount - 1 && totalPageCount > 3;
                    list.Add(factory.CreateRange(1, test ? requestedPage - 3 : requestedPage - 2));
                    if (test)
                    {
                        list.Add(factory.CreateLink(requestedPage - 2));
                    }
                    list.Add(factory.CreateLink(requestedPage - 1));
                }

                if (requestedPage != 0 && requestedPage != totalPageCount - 1)
                {
                    list.Add(factory.CreateLink(requestedPage));
                }

                if (requestedPage < totalPageCount - 2)
                {
                    var test = requestedPage == 0 && totalPageCount > 3;
                    list.Add(factory.CreateLink(requestedPage + 1));
                    if (test)
                    {
                        list.Add(factory.CreateLink(requestedPage + 2));
                    }
                    list.Add(factory.CreateRange(test ? requestedPage + 3 : requestedPage + 2, totalPageCount - 2));
                }

                list.Add(factory.CreateLink(totalPageCount - 1));
            }

            return(list);
        }
コード例 #6
0
ファイル: NumberLinker.cs プロジェクト: hoppersoft/Pagination
        public override IEnumerable<IPageLinkModel> LinkPages(IPageRequestModel request, IPageResultsModel results)
        {
            if (null == request) throw new ArgumentNullException("request");
            if (null == results) throw new ArgumentNullException("results");

            var list = new List<IPageLinkModel>();
            var isBase1 = IsBase1;
            var requestedPage = request.RequestedPage;
            for (var i = 0; i < results.TotalPageCount; i++) {
                list.Add(new PageLinkModel(request, i, isBase1 ? (i + 1).ToString() : i.ToString()));
            }

            return list;
        }
コード例 #7
0
 protected PageLinkModelBase(IPageRequestModel request, string linkText, int lowerPage, int upperPage)
 {
     if (null == request)
     {
         throw new ArgumentNullException("request");
     }
     _Request         = request;
     _LinkPage        = lowerPage;
     _LinkText        = linkText;
     _LowerPage       = lowerPage;
     _UpperPage       = upperPage;
     _IsPageRange     = true;
     _IsRequestedPage = false;
 }
コード例 #8
0
        public override IEnumerable<IPageLinkModel> LinkPages(IPageRequestModel request, IPageResultsModel results)
        {
            if (null == request) throw new ArgumentNullException("request");
            if (null == results) throw new ArgumentNullException("results");

            var list = new List<IPageLinkModel>();
            if (results.TotalPageCount > 1) {

                var requestedPage = request.RequestedPage;
                var totalPageCount = results.TotalPageCount;
                var factory = new LinkFactory(request, IsBase1);

                list.Add(factory.CreateLink(0));

                if (requestedPage > 1) {
                    var test = requestedPage == totalPageCount - 1 && totalPageCount > 3;
                    list.Add(factory.CreateRange(1, test ? requestedPage - 3 : requestedPage - 2));
                    if (test) {
                        list.Add(factory.CreateLink(requestedPage - 2));
                    }
                    list.Add(factory.CreateLink(requestedPage - 1));
                }

                if (requestedPage != 0 && requestedPage != totalPageCount - 1) {
                    list.Add(factory.CreateLink(requestedPage));
                }

                if (requestedPage < totalPageCount - 2) {
                    var test = requestedPage == 0 && totalPageCount > 3;
                    list.Add(factory.CreateLink(requestedPage + 1));
                    if (test) {
                        list.Add(factory.CreateLink(requestedPage + 2));
                    }
                    list.Add(factory.CreateRange(test ? requestedPage + 3 : requestedPage + 2, totalPageCount - 2));
                }

                list.Add(factory.CreateLink(totalPageCount - 1));
            }

            return list;
        }
コード例 #9
0
ファイル: NumberLinker.cs プロジェクト: pombreda/Pagination
        public override IEnumerable <IPageLinkModel> LinkPages(IPageRequestModel request, IPageResultsModel results)
        {
            if (null == request)
            {
                throw new ArgumentNullException("request");
            }
            if (null == results)
            {
                throw new ArgumentNullException("results");
            }

            var list          = new List <IPageLinkModel>();
            var isBase1       = IsBase1;
            var requestedPage = request.RequestedPage;

            for (var i = 0; i < results.TotalPageCount; i++)
            {
                list.Add(new PageLinkModel(request, i, isBase1 ? (i + 1).ToString() : i.ToString()));
            }

            return(list);
        }
コード例 #10
0
ファイル: PrevNextLinker.cs プロジェクト: pombreda/Pagination
        public override IEnumerable <IPageLinkModel> LinkPages(IPageRequestModel request, IPageResultsModel results)
        {
            if (null == request)
            {
                throw new ArgumentNullException("request");
            }
            if (null == results)
            {
                throw new ArgumentNullException("results");
            }

            var list          = new List <IPageLinkModel>();
            var forcePrevNext = ForcePrevNext;
            var requestedPage = request.RequestedPage;

            var testPrev = requestedPage > 0;

            if (forcePrevNext || testPrev)
            {
                list.Add(new PageLinkModel(request, testPrev ? requestedPage - 1 : requestedPage, PrevText));
            }

            var baseLinker = BaseLinker;

            if (baseLinker != null)
            {
                list.AddRange(baseLinker.LinkPages(request, results));
            }

            var testNext = requestedPage < results.TotalPageCount - 1;

            if (forcePrevNext || testNext)
            {
                list.Add(new PageLinkModel(request, testNext ? requestedPage + 1 : requestedPage, NextText));
            }

            return(list);
        }
コード例 #11
0
ファイル: PageLinker.cs プロジェクト: hoppersoft/Pagination
 /// <summary>
 /// Creates a collection of <see cref="T:IPageLinkModel"/> objects from the specified <paramref name="request"/> and <paramref name="results"/>.
 /// </summary>
 /// <param name="request">The request for which the collection of <see cref="T:IPageLinkModel"/> objects is to be created.</param>
 /// <param name="results">The results for which the collection of <see cref="T:IPageLinkModel"/> objects is to be created.</param>
 /// <returns>A collection of <see cref="T:IPageLinkModel"/> objects from the specified <paramref name="request"/> and <paramref name="results"/>.</returns>
 public abstract IEnumerable<IPageLinkModel> LinkPages(IPageRequestModel request, IPageResultsModel results);
コード例 #12
0
ファイル: PageLinker.cs プロジェクト: pombreda/Pagination
 /// <summary>
 /// Creates a collection of <see cref="T:IPageLinkModel"/> objects from the specified <paramref name="request"/> and <paramref name="results"/>.
 /// </summary>
 /// <param name="request">The request for which the collection of <see cref="T:IPageLinkModel"/> objects is to be created.</param>
 /// <param name="results">The results for which the collection of <see cref="T:IPageLinkModel"/> objects is to be created.</param>
 /// <returns>A collection of <see cref="T:IPageLinkModel"/> objects from the specified <paramref name="request"/> and <paramref name="results"/>.</returns>
 public abstract IEnumerable <IPageLinkModel> LinkPages(IPageRequestModel request, IPageResultsModel results);
コード例 #13
0
 public PageRangeModel(IPageRequestModel request, int lowerPage, int upperPage)
     : base(request, "...", lowerPage, upperPage)
 {
 }
コード例 #14
0
 public LinkFactory(IPageRequestModel request, bool isBase1)
 {
     if (null == request) throw new ArgumentNullException("request");
     _Request = request;
     _IsBase1 = isBase1;
 }
コード例 #15
0
ファイル: PageRangeModel.cs プロジェクト: pombreda/Pagination
 public PageRangeModel(IPageRequestModel request, int lowerPage, int upperPage) : base(request, "...", lowerPage, upperPage)
 {
 }
コード例 #16
0
ファイル: PageLinkModel.cs プロジェクト: pombreda/Pagination
 public PageLinkModel(IPageRequestModel request, int linkPage, string linkText) : base(request, linkPage, linkText)
 {
 }