2b5de1c4cd
Improve Leaf details page
179 lines
5.9 KiB
C#
179 lines
5.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Web.Helpers;
|
|
using System.Web.Mvc;
|
|
using System.Web.WebPages;
|
|
|
|
namespace LeafWeb.WebCms.Utility
|
|
{
|
|
public static class WebGridExtensions
|
|
{
|
|
public static HelperResult PagerList(
|
|
this WebGrid webGrid,
|
|
WebGridPagerModes mode = WebGridPagerModes.NextPrevious | WebGridPagerModes.Numeric,
|
|
string firstText = "First",
|
|
string previousText = "Prev",
|
|
string nextText = "Next",
|
|
string lastText = "Last",
|
|
int numericLinksCount = 5,
|
|
string paginationStyle = null)
|
|
{
|
|
return PagerList(webGrid, mode, firstText, previousText, nextText, lastText, numericLinksCount,
|
|
paginationStyle, true);
|
|
}
|
|
|
|
/* bootstrap pagination classes */
|
|
private const string ulClass = "pagination";
|
|
private const string liClass = "page-item";
|
|
private const string aClass = "page-link";
|
|
|
|
private static HelperResult PagerList(
|
|
WebGrid webGrid,
|
|
WebGridPagerModes mode,
|
|
string firstText,
|
|
string previousText,
|
|
string nextText,
|
|
string lastText,
|
|
int numericLinksCount,
|
|
string paginationStyle,
|
|
bool explicitlyCalled)
|
|
{
|
|
var currentPage = webGrid.PageIndex;
|
|
var totalPages = webGrid.PageCount;
|
|
var lastPage = totalPages - 1;
|
|
|
|
var ul = new TagBuilder("ul");
|
|
ul.AddCssClass(ulClass);
|
|
ul.AddCssClass(paginationStyle);
|
|
|
|
var li = new List<TagBuilder>();
|
|
|
|
if (webGrid.TotalRowCount <= webGrid.PageCount)
|
|
return new HelperResult(writer => writer.Write(string.Empty));
|
|
|
|
if (ModeEnabled(mode, WebGridPagerModes.FirstLast) && totalPages > 1)
|
|
{
|
|
var part = new TagBuilder("li")
|
|
{
|
|
InnerHtml = GridLink(webGrid, webGrid.GetPageUrl(0), firstText)
|
|
};
|
|
part.AddCssClass(liClass);
|
|
|
|
if (currentPage == 0) part.AddCssClass("disabled");
|
|
|
|
li.Add(part);
|
|
}
|
|
|
|
if (ModeEnabled(mode, WebGridPagerModes.NextPrevious) && totalPages > 1)
|
|
{
|
|
var page = currentPage == 0 ? 0 : currentPage - 1;
|
|
|
|
var part = new TagBuilder("li")
|
|
{
|
|
InnerHtml = GridLink(webGrid, webGrid.GetPageUrl(page), previousText)
|
|
};
|
|
part.AddCssClass(liClass);
|
|
|
|
if (currentPage == 0) part.AddCssClass("disabled");
|
|
|
|
li.Add(part);
|
|
}
|
|
|
|
if (ModeEnabled(mode, WebGridPagerModes.Numeric) && totalPages > 1)
|
|
{
|
|
var last = currentPage + numericLinksCount / 2;
|
|
var first = last - numericLinksCount + 1;
|
|
if (last > lastPage)
|
|
{
|
|
first -= last - lastPage;
|
|
last = lastPage;
|
|
}
|
|
|
|
if (first < 0)
|
|
{
|
|
last = Math.Min(last + (0 - first), lastPage);
|
|
first = 0;
|
|
}
|
|
|
|
for (var i = first; i <= last; i++)
|
|
{
|
|
var pageText = (i + 1).ToString(CultureInfo.InvariantCulture);
|
|
var part = new TagBuilder("li")
|
|
{
|
|
InnerHtml = GridLink(webGrid, webGrid.GetPageUrl(i), pageText)
|
|
};
|
|
part.AddCssClass(liClass);
|
|
|
|
if (i == currentPage) part.AddCssClass("active");
|
|
|
|
li.Add(part);
|
|
}
|
|
}
|
|
|
|
if (ModeEnabled(mode, WebGridPagerModes.NextPrevious) && totalPages > 1)
|
|
{
|
|
var page = currentPage == lastPage ? lastPage : currentPage + 1;
|
|
|
|
var part = new TagBuilder("li")
|
|
{
|
|
InnerHtml = GridLink(webGrid, webGrid.GetPageUrl(page), nextText)
|
|
};
|
|
part.AddCssClass(liClass);
|
|
|
|
if (currentPage == lastPage) part.AddCssClass("disabled");
|
|
|
|
li.Add(part);
|
|
}
|
|
|
|
if (ModeEnabled(mode, WebGridPagerModes.FirstLast) && totalPages > 1)
|
|
{
|
|
var part = new TagBuilder("li")
|
|
{
|
|
InnerHtml = GridLink(webGrid, webGrid.GetPageUrl(lastPage), lastText)
|
|
};
|
|
|
|
if (currentPage == lastPage)
|
|
part.AddCssClass("disabled");
|
|
|
|
li.Add(part);
|
|
}
|
|
|
|
ul.InnerHtml = string.Join("", li);
|
|
|
|
var html = "";
|
|
if (explicitlyCalled && webGrid.IsAjaxEnabled)
|
|
{
|
|
var span = new TagBuilder("span");
|
|
span.MergeAttribute("data-swhgajax", "true");
|
|
span.MergeAttribute("data-swhgcontainer", webGrid.AjaxUpdateContainerId);
|
|
span.MergeAttribute("data-swhgcallback", webGrid.AjaxUpdateCallback);
|
|
|
|
span.InnerHtml = ul.ToString();
|
|
html = span.ToString();
|
|
}
|
|
else
|
|
{
|
|
html = ul.ToString();
|
|
}
|
|
|
|
return new HelperResult(writer => writer.Write(html));
|
|
}
|
|
|
|
private static string GridLink(WebGrid webGrid, string url, string text)
|
|
{
|
|
var builder = new TagBuilder("a");
|
|
builder.SetInnerText(text);
|
|
builder.MergeAttribute("href", url);
|
|
builder.AddCssClass(aClass);
|
|
if (webGrid.IsAjaxEnabled)
|
|
builder.MergeAttribute("data-swhglnk", "true");
|
|
return builder.ToString(TagRenderMode.Normal);
|
|
}
|
|
|
|
private static bool ModeEnabled(WebGridPagerModes mode, WebGridPagerModes modeCheck)
|
|
{
|
|
return (mode & modeCheck) == modeCheck;
|
|
}
|
|
}
|
|
} |