internal static HtmlContentBuilder CreateHtmlContentBuilder(PaginatedOptions options)
        {
            HtmlContentBuilder content = new HtmlContentBuilder();

            content.AppendHtml($"<ul class=\"{options.CssClassUl}\">");
            content.AppendHtmlLine(Environment.NewLine);
            return(content);
        }
        internal static IHtmlContent PaginationNumbers <T>(IPaginated <T> paginated, Func <int, string> generatePageUrl, PaginatedOptions options = null)
        {
            if (options == null)
            {
                options = new PaginatedOptions();
            }
            HtmlContentBuilder content = CreateHtmlContentBuilder(options);

            Numbers(content, paginated, generatePageUrl, options);
            content.AppendHtml("</ul>");
            return(content);
        }
        internal static IHtmlContent PaginationFirstPreviousNextLast <T>(IPaginated <T> paginated, Func <int, string> generatePageUrl, PaginatedOptions options = null)
        {
            if (options == null)
            {
                options = new PaginatedOptions();
            }
            HtmlContentBuilder content = CreateHtmlContentBuilder(options);

            First(content, paginated, generatePageUrl, options);
            Previous(content, paginated, generatePageUrl, options);
            Next(content, paginated, generatePageUrl, options);
            Last(content, paginated, generatePageUrl, options);
            content.AppendHtml("</ul>");
            return(content);
        }
        internal static HtmlContentBuilder Next <T>(HtmlContentBuilder content, IPaginated <T> paginated, Func <int, string> generatePageUrl, PaginatedOptions options)
        {
            TagBuilder tag = TagLink(paginated.IsLastPage ? "#" : generatePageUrl(paginated.PageNumber + 1), options.NextLabel, options.CssClassAnchor);

            content.AppendHtml(tag, paginated.IsLastPage ? options.CssClassLiDisabled : null);
            return(content);
        }
        public static IHtmlContent Pagination <T>(this IHtmlHelper htmlHelper, IPaginated <T> paginated, Func <int, string> generatePageUrl, PaginatedStyle paginatedStyle = PaginatedStyle.NumbersWithFirstPreviousNextLast, PaginatedOptions options = default(PaginatedOptions))
        {
            IHtmlContent content = null;

            switch (paginatedStyle)
            {
            case PaginatedStyle.FirstPreviousNextLast:
            {
                content = PaginationFirstPreviousNextLast(paginated, generatePageUrl, options);
                break;
            }

            case PaginatedStyle.Numbers:
            {
                content = PaginationNumbers(paginated, generatePageUrl, options);
                break;
            }

            case PaginatedStyle.NumbersWithFirstPreviousNextLast:
            {
                content = PaginationNumbersWithFirstPreviousNextLast(paginated, generatePageUrl, options);
                break;
            }

            case PaginatedStyle.NumbersWithPreviousNext:
            {
                content = PaginationNumbersWithPreviousNext(paginated, generatePageUrl, options);
                break;
            }

            case PaginatedStyle.PreviousNext:
            {
                content = PaginationPreviousNext(paginated, generatePageUrl, options);
                break;
            }
            }
            return(content);
        }
 internal static HtmlContentBuilder Numbers <T>(HtmlContentBuilder content, IPaginated <T> paginated, Func <int, string> generatePageUrl, PaginatedOptions options)
 {
     if (options.MaximumPageNumbersToDisplay != 8)
     {
         paginated.SetPages(options.MaximumPageNumbersToDisplay);
     }
     paginated
     .Pages
     .ToList()
     .ForEach(x =>
     {
         var tagLink = TagLink((paginated.PageNumber != x) ? generatePageUrl(x) : "#", x.ToString(), options.CssClassAnchor);
         content.AppendHtml(tagLink, (paginated.PageNumber == x)
                ? options.CssClassLiActive + " " + options.CssClassLi
                : options.CssClassLi);
     });
     return(content);
 }