59 lines
1.9 KiB
Plaintext
59 lines
1.9 KiB
Plaintext
@model PagingData
|
|
@{
|
|
bool has_previous = Model.CurrentPage > 0;
|
|
bool has_next = Model.CurrentPage < Model.LastPage;
|
|
|
|
int first_page = Math.Max( 0 , Model.CurrentPage - 3 );
|
|
int last_page = Math.Min( first_page + 6 , Model.LastPage );
|
|
if ( last_page - first_page < 6 )
|
|
first_page = Math.Max( 0 , last_page - 6 );
|
|
|
|
bool show_dots_before = first_page > 0;
|
|
if ( show_dots_before )
|
|
first_page += 2; // shift first page to make room for [1][...]
|
|
|
|
bool show_dots_after = last_page < Model.LastPage;
|
|
if (show_dots_after)
|
|
last_page -= 2; // shift last page to make room for [...][last]
|
|
}
|
|
|
|
@if ( Model.LastPage > 0 )
|
|
{
|
|
<nav>
|
|
<ul class="pagination justify-content-center pagination-sm">
|
|
|
|
<li class="page-item @(has_previous ? "" : "disabled")">
|
|
<a class="page-link" href="@Model.Url( Model.CurrentPage - 1 )" tabindex="-1">Previous</a>
|
|
</li>
|
|
|
|
@if ( show_dots_before )
|
|
{
|
|
<li class="page-item"><a class="page-link" href="@Model.Url( 0 )">1</a></li>
|
|
<li class="page-item disabled"><span class="page-link">...</span></li>
|
|
}
|
|
|
|
@for ( int p = first_page ; p <= last_page; p++ )
|
|
{
|
|
if ( Model.CurrentPage == p )
|
|
{
|
|
<li class="page-item active"><span class="page-link">@(p+1)</span></li>
|
|
}
|
|
else
|
|
{
|
|
<li class="page-item"><a class="page-link" href="@Model.Url( p )">@(p+1)</a></li>
|
|
}
|
|
}
|
|
|
|
@if ( show_dots_after )
|
|
{
|
|
<li class="page-item disabled"><span class="page-link">...</span></li>
|
|
<li class="page-item"><a class="page-link" href="@Model.Url( Model.LastPage )">@( Model.LastPage + 1 )</a></li>
|
|
}
|
|
|
|
<li class="page-item @(has_next ? "" : "disabled")">
|
|
<a class="page-link" href="@Model.Url( Model.CurrentPage + 1 )" tabindex="-1">Next</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
} |