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? 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($"
"); if (currentPage > 1) { sb.Append($"<< First"); sb.Append("  |  "); sb.Append($"< Previous"); } else { sb.Append($"<< First   |   < Previous"); } sb.Append("  |  "); if (currentPage < totalPageCount) { sb.Append($"Next >"); sb.Append("  |  "); sb.Append($"Last >>"); } else { sb.Append("Next >   |   Last >>"); } sb.Append($"
"); } return sb.ToString(); } } }