Configurable post page

This commit is contained in:
2025-12-12 00:10:57 +08:00
parent 8181938aaf
commit 8642737a07
6 changed files with 87 additions and 38 deletions

View File

@@ -2,10 +2,9 @@
@model DysonNetwork.Zone.Pages.PostsModel
@{
Layout = "_LayoutContained";
const string defaultAvatar = "https://www.gravatar.com/avatar/00000000000000000000000000000000?d=mp";
var pageTitle = "Posts";
var pageDescription = "A collection of posts.";
var pageTitle = Model.LayoutConfig?.Title ?? "Posts";
var pageDescription = Model.LayoutConfig?.Description ?? "A collection of posts.";
string? ogImageUrl = null;
var canonicalUrl = $"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}";
var siteName = Model.Site?.Name ?? "Solar Network";
@@ -48,7 +47,7 @@
<div class="container mx-auto px-8 py-8">
<h1 class="text-3xl font-bold mb-8 px-5">
<span class="mdi mdi-note-text-outline"></span> Posts
<span class="mdi mdi-note-text-outline"></span> @pageTitle
</h1>
<div class="w-full grid grid-cols-3 gap-4">
@@ -75,8 +74,8 @@
<div class="join">
@{
const int maxPagesToShow = 5; // e.g., 2 before, current, 2 after
var startPage = Math.Max(1, Model.CurrentPage - (maxPagesToShow / 2));
var endPage = Math.Min(Model.TotalPages, Model.CurrentPage + (maxPagesToShow / 2));
var startPage = Math.Max(1, Model.Index - (maxPagesToShow / 2));
var endPage = Math.Min(Model.TotalPages, Model.Index + (maxPagesToShow / 2));
// Adjust startPage and endPage to ensure exactly maxPagesToShow are shown if possible
if (endPage - startPage + 1 < maxPagesToShow)
@@ -92,15 +91,14 @@
}
}
<a asp-page="/Posts"
asp-route-currentPage="@(Model.CurrentPage > 1 ? Model.CurrentPage - 1 : 1)"
class="join-item btn @(Model.CurrentPage == 1 ? "btn-disabled" : "")">«</a>
<a href="/posts?index=@(Model.Index > 1 ? Model.Index - 1 : 1)"
class="join-item btn @(Model.Index == 1 ? "btn-disabled" : "")">«</a>
@if (startPage > 1)
{
<a asp-page="/Posts"
asp-route-currentPage="1"
class="join-item btn @(1 == Model.CurrentPage ? "btn-active" : "")">
class="join-item btn @(1 == Model.Index ? "btn-active" : "")">
1
</a>
@if (startPage > 2)
@@ -111,11 +109,8 @@
@for (var idx = startPage; idx <= endPage; idx++)
{
var pageIdx = idx;
<a asp-page="/Posts"
asp-route-currentPage="@pageIdx"
class="join-item btn @(pageIdx == Model.CurrentPage ? "btn-active" : "")">
@pageIdx
<a href="/posts?index=@(idx)" class="join-item btn @(idx == Model.Index ? "btn-active" : "")">
@idx
</a>
}
@@ -125,16 +120,14 @@
{
<span class="join-item btn btn-disabled">...</span>
}
<a asp-page="/Posts"
asp-route-currentPage="@Model.TotalPages"
class="join-item btn @(Model.TotalPages == Model.CurrentPage ? "btn-active" : "")">
<a href="/posts?index=@(Model.TotalPages)"
class="join-item btn @(Model.TotalPages == Model.Index ? "btn-active" : "")">
@Model.TotalPages
</a>
}
<a asp-page="/Posts"
asp-route-currentPage="@(Model.CurrentPage < Model.TotalPages ? Model.CurrentPage + 1 : Model.TotalPages)"
class="join-item btn @(Model.CurrentPage == Model.TotalPages ? "btn-disabled" : "")">»</a>
<a href="/posts?index=@(Model.Index < Model.TotalPages ? Model.Index + 1 : Model.TotalPages)"
class="join-item btn @(Model.Index == Model.TotalPages ? "btn-disabled" : "")">»</a>
</div>
</div>
}