protected override async Task BootstrapProcessAsync(TagHelperContext context, TagHelperOutput output) { output.TagName = "nav"; output.PreContent.AppendHtml(Size == SimpleSize.Default ? "<ul class=\"pagination\">" : $"<ul class=\"pagination pagination-{Size.GetDescription()}\">"); ChildDetectionMode = true; context.SetPaginationContext(this); await output.GetChildContentAsync(true); ChildDetectionMode = false; if (!DisableAutoActive && Items.TrueForAll(pI => !pI.Active)) { PaginationItemTagHelper activeItem = Items.FirstOrDefault(ItemHasCurrentUrl); if (activeItem != null) activeItem.Active = true; } for (var i = 0; i < Items.Count; i++) if (string.IsNullOrEmpty(Items[i].Content)) Items[i].Content = (i + 1).ToString(); if (Items.Any(pI => pI.Active)) { if (PrevHref == null) PrevHref = Items.TakeWhile(pI => !pI.Active).LastOrDefault(pI => !pI.Disabled)?.Href; if (NextHref == null) NextHref = Items.SkipWhile(pI => !pI.Active).Skip(1).FirstOrDefault(pI => !pI.Disabled)?.Href; } DisableNext = NextHref == null || DisableNext.HasValue && DisableNext.Value == false; DisablePrev = PrevHref == null || DisablePrev.HasValue && DisablePrev.Value == false; output.PreContent.AppendHtml( PaginationItemTagHelper.RenderItemTag( "<span aria-hidden=\"true\">«</span>", PrevHref, DisablePrev.Value, false, PrevText ?? Ressources.Previous)); output.PostContent.AppendHtml( PaginationItemTagHelper.RenderItemTag( "<span aria-hidden=\"true\">»</span>", NextHref, DisableNext.Value, false, NextText ?? Ressources.Next)); if (MaxDisplayedItems > 0 && Items.Count > MaxDisplayedItems) if (Items.Any(pI => pI.Active)) { MaxDisplayedItems--; List<PaginationItemTagHelper> itemsBeforeActive = Items.TakeWhile(pI => !pI.Active).Reverse().ToList(); List<PaginationItemTagHelper> itemsAfterActive = Items.SkipWhile(pI => !pI.Active).Skip(1).ToList(); var itemsCountBeforeActive = (int) Math.Floor((decimal) MaxDisplayedItems/2); var itemsCountAfterActive = (int) Math.Ceiling((decimal) MaxDisplayedItems/2); if (itemsCountAfterActive > itemsAfterActive.Count) itemsCountBeforeActive += itemsCountAfterActive - itemsAfterActive.Count; else if (itemsCountBeforeActive > itemsBeforeActive.Count) itemsCountAfterActive += itemsCountBeforeActive - itemsBeforeActive.Count; foreach (PaginationItemTagHelper item in itemsBeforeActive.Skip(itemsCountBeforeActive)) item.RenderOutput = false; foreach (PaginationItemTagHelper item in itemsAfterActive.Skip(itemsCountAfterActive)) item.RenderOutput = false; } else foreach (PaginationItemTagHelper item in Items.Skip(MaxDisplayedItems)) item.RenderOutput = false; foreach (PaginationItemTagHelper item in Items.Where(pI => pI.RenderOutput)) output.Content.AppendHtml(PaginationItemTagHelper.RenderItemTag(item)); }