Skip to content

Commit 4bb39c1

Browse files
committed
Merge remote-tracking branch 'origin/master'
# Conflicts: # src/Directory.Build.props
2 parents c3db4bf + 005b1a4 commit 4bb39c1

21 files changed

+387
-69
lines changed

src/Directory.Build.props

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<Project>
22

33
<PropertyGroup>
4+
<IsPackable>true</IsPackable>
45
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
56

67
<PackageReadmeFile>README.md</PackageReadmeFile>
@@ -10,10 +11,10 @@
1011
<Copyright>Andrew Gubskiy © 2025</Copyright>
1112
<Company>Ukrainian .NET Developer Community</Company>
1213

13-
<Version>10.5.5</Version>
14-
<AssemblyVersion>10.5.5</AssemblyVersion>
15-
<FileVersion>10.5.5</FileVersion>
16-
<PackageVersion>10.5.5</PackageVersion>
14+
<Version>10.5.8</Version>
15+
<AssemblyVersion>10.5.8</AssemblyVersion>
16+
<FileVersion>10.5.8</FileVersion>
17+
<PackageVersion>10.5.8</PackageVersion>
1718

1819
<RepositoryType>git</RepositoryType>
1920
<RepositoryUrl>https://github.com/dncuug/X.PagedList.git</RepositoryUrl>

src/X.PagedList.EF/PagedListExtensions.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ namespace X.PagedList.EF;
1111
/// <summary>
1212
/// EntityFramework extension methods designed to simplify the creation of instances of <see cref="PagedList{T}"/>.
1313
/// </summary>
14-
[PublicAPI]
1514
public static class PagedListExtensions
1615
{
1716
/// <summary>

src/X.PagedList.EF/X.PagedList.EF.csproj

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,6 @@
2424
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.8" />
2525
</ItemGroup>
2626

27-
<ItemGroup>
28-
<PackageReference Include="JetBrains.Annotations" Version="2025.2.0" PrivateAssets="all" />
29-
</ItemGroup>
30-
3127
<ItemGroup>
3228
<ProjectReference Include="..\X.PagedList\X.PagedList.csproj" />
3329
</ItemGroup>

src/X.PagedList.Mvc.Core/Fluent/HtmlPagerBuilder.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@
44

55
namespace X.PagedList.Mvc.Core.Fluent;
66

7+
/// <summary>
8+
/// Fluent builder that configures and renders a pager for an <see cref="IPagedList"/> in ASP.NET Core MVC.
9+
/// </summary>
10+
/// <remarks>
11+
/// Uses <see cref="PagedListRenderOptions"/> to configure output and <see cref="IHtmlHelper"/> to render either
12+
/// the default pager or a custom partial view.
13+
/// </remarks>
714
internal sealed class HtmlPagerBuilder : IHtmlPagerBuilder
815
{
916
private readonly IHtmlHelper _htmlHelper;
@@ -13,6 +20,11 @@ internal sealed class HtmlPagerBuilder : IHtmlPagerBuilder
1320
private PagedListRenderOptions _options;
1421
private string? _partialViewName;
1522

23+
/// <summary>
24+
/// Initializes a new instance of the <see cref="HtmlPagerBuilder"/> class.
25+
/// </summary>
26+
/// <param name="htmlHelper">The <see cref="IHtmlHelper"/> used to render HTML.</param>
27+
/// <param name="pagedList">The source <see cref="IPagedList"/> to paginate.</param>
1628
public HtmlPagerBuilder(IHtmlHelper htmlHelper, IPagedList pagedList)
1729
{
1830
_htmlHelper = htmlHelper;
@@ -21,132 +33,151 @@ public HtmlPagerBuilder(IHtmlHelper htmlHelper, IPagedList pagedList)
2133
_options = new PagedListRenderOptions();
2234
}
2335

36+
/// <inheritdoc />
2437
public IHtmlPagerBuilder Url(Func<int, string?> builder)
2538
{
2639
_generatePageUrl = builder;
2740

2841
return this;
2942
}
3043

44+
/// <inheritdoc />
3145
public IHtmlPagerBuilder DisplayLinkToFirstPage(PagedListDisplayMode displayMode = PagedListDisplayMode.Always)
3246
{
3347
_options.DisplayLinkToFirstPage = displayMode;
3448

3549
return this;
3650
}
3751

52+
/// <inheritdoc />
3853
public IHtmlPagerBuilder DisplayLinkToLastPage(PagedListDisplayMode displayMode = PagedListDisplayMode.Always)
3954
{
4055
_options.DisplayLinkToLastPage = displayMode;
4156

4257
return this;
4358
}
4459

60+
/// <inheritdoc />
4561
public IHtmlPagerBuilder DisplayLinkToPreviousPage(PagedListDisplayMode displayMode = PagedListDisplayMode.Always)
4662
{
4763
_options.DisplayLinkToPreviousPage = displayMode;
4864

4965
return this;
5066
}
5167

68+
/// <inheritdoc />
5269
public IHtmlPagerBuilder DisplayLinkToNextPage(PagedListDisplayMode displayMode = PagedListDisplayMode.Always)
5370
{
5471
_options.DisplayLinkToNextPage = displayMode;
5572

5673
return this;
5774
}
5875

76+
/// <inheritdoc />
5977
public IHtmlPagerBuilder DisplayLinkToIndividualPages(bool displayMode = true)
6078
{
6179
_options.DisplayLinkToIndividualPages = displayMode;
6280

6381
return this;
6482
}
6583

84+
/// <inheritdoc />
6685
public IHtmlPagerBuilder DisplayPageCountAndCurrentLocation(bool displayMode = true)
6786
{
6887
_options.DisplayPageCountAndCurrentLocation = displayMode;
6988

7089
return this;
7190
}
7291

92+
/// <inheritdoc />
7393
public IHtmlPagerBuilder DisplayEllipsesWhenNotShowingAllPageNumbers(bool displayMode = true)
7494
{
7595
_options.DisplayEllipsesWhenNotShowingAllPageNumbers = displayMode;
7696

7797
return this;
7898
}
7999

100+
/// <inheritdoc />
80101
public IHtmlPagerBuilder MaximumPageNumbersToDisplay(int pageNumbers)
81102
{
82103
_options.MaximumPageNumbersToDisplay = pageNumbers;
83104

84105
return this;
85106
}
86107

108+
/// <inheritdoc />
87109
public IHtmlContent Classic()
88110
{
89111
_options = PagedListRenderOptions.Classic;
90112

91113
return Build();
92114
}
93115

116+
/// <inheritdoc />
94117
public IHtmlContent ClassicPlusFirstAndLast()
95118
{
96119
_options = PagedListRenderOptions.ClassicPlusFirstAndLast;
97120

98121
return Build();
99122
}
100123

124+
/// <inheritdoc />
101125
public IHtmlContent Minimal()
102126
{
103127
_options = PagedListRenderOptions.Minimal;
104128

105129
return Build();
106130
}
107131

132+
/// <inheritdoc />
108133
public IHtmlContent MinimalWithPageCountText()
109134
{
110135
_options = PagedListRenderOptions.MinimalWithPageCountText;
111136

112137
return Build();
113138
}
114139

140+
/// <inheritdoc />
115141
public IHtmlContent MinimalWithItemCountText()
116142
{
117143
_options = PagedListRenderOptions.MinimalWithItemCountText;
118144

119145
return Build();
120146
}
121147

148+
/// <inheritdoc />
122149
public IHtmlContent PageNumbersOnly()
123150
{
124151
_options = PagedListRenderOptions.PageNumbersOnly;
125152

126153
return Build();
127154
}
128155

156+
/// <inheritdoc />
129157
public IHtmlContent OnlyShowFivePagesAtATime()
130158
{
131159
_options = PagedListRenderOptions.OnlyShowFivePagesAtATime;
132160

133161
return Build();
134162
}
135163

164+
/// <inheritdoc />
136165
public IHtmlPagerBuilder WithPartialView(string partialViewName)
137166
{
138167
_partialViewName = partialViewName;
139168

140169
return this;
141170
}
142171

172+
/// <inheritdoc />
143173
public IHtmlContent Build(PagedListRenderOptions? options)
144174
{
145175
_options = options ?? _options;
146176

147177
return Build();
148178
}
149179

180+
/// <inheritdoc />
150181
public IHtmlContent Build()
151182
{
152183
if (string.IsNullOrWhiteSpace(_partialViewName))
@@ -159,4 +190,4 @@ public IHtmlContent Build()
159190

160191
return _htmlHelper.Partial(_partialViewName, _pagedList);
161192
}
162-
}
193+
}
Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,41 @@
11
using System.Linq;
2-
using JetBrains.Annotations;
32
using Microsoft.AspNetCore.Html;
43
using Microsoft.AspNetCore.Mvc.Rendering;
54
using X.PagedList.Extensions;
65

76
namespace X.PagedList.Mvc.Core.Fluent;
87

9-
[PublicAPI]
8+
/// <summary>
9+
/// Extension methods for generating pager markup for <c>X.PagedList</c> in ASP.NET Core MVC.
10+
/// </summary>
11+
/// <remarks>
12+
/// Provides a simple entry point to either build and render a pager immediately, or obtain a fluent builder
13+
/// (<see cref="IHtmlPagerBuilder"/>) to further configure the pager before rendering.
14+
/// </remarks>
1015
public static class HtmlPagerExtensions
1116
{
17+
/// <summary>
18+
/// Builds and returns an HTML pager for an empty paged list.
19+
/// </summary>
20+
/// <param name="htmlHelper">The HTML helper used to render the pager.</param>
21+
/// <returns>An <see cref="IHtmlContent"/> containing the pager markup.</returns>
22+
/// <remarks>
23+
/// Useful when the current view model is not an <see cref="IPagedList"/> but a pager still needs to be rendered.
24+
/// Internally constructs an empty paged list via <see cref="Enumerable.Empty{TResult}"/> and <c>ToPagedList()</c>.
25+
/// </remarks>
1226
public static IHtmlContent Pager(this IHtmlHelper htmlHelper)
1327
{
1428
return new HtmlPagerBuilder(htmlHelper, Enumerable.Empty<object?>().ToPagedList()).Build();
1529
}
1630

31+
/// <summary>
32+
/// Creates a fluent pager builder for the specified paged list.
33+
/// </summary>
34+
/// <param name="htmlHelper">The HTML helper used to configure and render the pager.</param>
35+
/// <param name="list">The paged list providing paging metadata (page number, size, total item count).</param>
36+
/// <returns>An <see cref="IHtmlPagerBuilder"/> that can be further configured and rendered.</returns>
1737
public static IHtmlPagerBuilder Pager(this IHtmlHelper htmlHelper, IPagedList list)
1838
{
1939
return new HtmlPagerBuilder(htmlHelper, list);
2040
}
21-
}
41+
}

0 commit comments

Comments
 (0)