添加项目文件。
This commit is contained in:
71
TightWiki.Library/PageSelectorGenerator.cs
Normal file
71
TightWiki.Library/PageSelectorGenerator.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using System.Text;
|
||||
|
||||
namespace TightWiki.Library
|
||||
{
|
||||
public static class PageSelectorGenerator
|
||||
{
|
||||
public static string Generate(QueryString? queryString, int? totalPageCount)
|
||||
=> Generate(string.Empty, "page", QueryStringConverter.ToDictionary(queryString), totalPageCount);
|
||||
|
||||
public static string Generate(string queryToken, IQueryCollection? queryString, int? totalPageCount)
|
||||
=> Generate(string.Empty, queryToken, QueryStringConverter.ToDictionary(queryString), totalPageCount);
|
||||
|
||||
public static string Generate(string url, string queryToken, Dictionary<string, string>? queryString, int? totalPageCount)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
int currentPage = 1;
|
||||
|
||||
var firstPage = QueryStringConverter.Clone(queryString);
|
||||
if (firstPage.TryGetValue(queryToken, out var currentPageString))
|
||||
{
|
||||
currentPage = int.Parse(currentPageString);
|
||||
}
|
||||
|
||||
firstPage.Remove(queryToken);
|
||||
firstPage.Add(queryToken, "1");
|
||||
|
||||
var prevPage = QueryStringConverter.Clone(firstPage);
|
||||
prevPage.Remove(queryToken);
|
||||
prevPage.Add(queryToken, $"{currentPage - 1}");
|
||||
|
||||
var nextPage = QueryStringConverter.Clone(firstPage);
|
||||
nextPage.Remove(queryToken);
|
||||
nextPage.Add(queryToken, $"{currentPage + 1}");
|
||||
|
||||
var lastPage = QueryStringConverter.Clone(firstPage);
|
||||
lastPage.Remove(queryToken);
|
||||
lastPage.Add(queryToken, $"{totalPageCount}");
|
||||
|
||||
if ((totalPageCount ?? 0) > 1 || currentPage > 1)
|
||||
{
|
||||
sb.Append($"<center>");
|
||||
if (currentPage > 1)
|
||||
{
|
||||
sb.Append($"<a href=\"{url}?{QueryStringConverter.FromCollection(firstPage)}\"><< First</a>");
|
||||
sb.Append(" | ");
|
||||
sb.Append($"<a href=\"{url}?{QueryStringConverter.FromCollection(prevPage)}\">< Previous</a>");
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append($"<< First | < Previous");
|
||||
}
|
||||
sb.Append(" | ");
|
||||
|
||||
if (currentPage < totalPageCount)
|
||||
{
|
||||
sb.Append($"<a href=\"{url}?{QueryStringConverter.FromCollection(nextPage)}\">Next ></a>");
|
||||
sb.Append(" | ");
|
||||
sb.Append($"<a href=\"{url}?{QueryStringConverter.FromCollection(lastPage)}\">Last >></a>");
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append("Next > | Last >>");
|
||||
}
|
||||
sb.Append($"</center>");
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user