Browse Source

Abp Breadcrumb tag helper

pull/279/head
yekalkan 8 years ago
parent
commit
c13ecb2931
  1. 2
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs
  2. 17
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelper.cs
  3. 48
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs
  4. 11
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelper.cs
  5. 63
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs
  6. 14
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/BreadcrumbItem.cs
  7. 32
      test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Breadcrumbs.cshtml
  8. 17
      test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Breadcrumbs.cshtml.cs
  9. 1
      test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Index.cshtml

2
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs

@ -19,12 +19,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
protected const string DropdownButtonsAsHtml = "DropdownButtonsAsHtmlContent";
protected const string TabItems = "TabItems";
protected const string AccordionItems = "AccordionItems";
protected const string BreadcrumbItemsContent = "BreadcrumbItemsContent";
protected const string TabItemsDataTogglePlaceHolder = "{{data_toggle}}";
protected const string TabItemsVerticalPillPlaceHolder = "{{vertical_pill}}";
protected const string TabItemNamePlaceHolder = "{{Tag_Name}}";
protected const string AbpFormContentPlaceHolder = "{_AbpFormContentPlaceHolder_}";
protected const string AbpTabItemActivePlaceholder = "{_Tab_Active_Placeholder_}";
protected const string AbpTabItemShowActivePlaceholder = "{_Tab_Show_Active_Placeholder_}";
protected const string AbpBreadcrumbItemActivePlaceholder = "{_Breadcrumb_Active_Placeholder_}";
protected const string AbpTabItemSelectedPlaceholder = "{_Tab_Selected_Placeholder_}";
protected const string AbpAccordionParentIdPlaceholder = "{_{{Parent_Accordion_Id}}_}";

17
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelper.cs

@ -0,0 +1,17 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb
{
public class AbpBreadcrumbItemTagHelper : AbpTagHelper<AbpBreadcrumbItemTagHelper, AbpBreadcrumbItemTagHelperService>
{
public string Href { get; set; }
public string Title { get; set; }
public bool Active { get; set; }
public AbpBreadcrumbItemTagHelper(AbpBreadcrumbItemTagHelperService tagHelperService)
: base(tagHelperService)
{
}
}
}

48
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs

@ -0,0 +1,48 @@
using System.Collections.Generic;
using System.Text.Encodings.Web;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb
{
public class AbpBreadcrumbItemTagHelperService : AbpTagHelperService<AbpBreadcrumbItemTagHelper>
{
private readonly HtmlEncoder _encoder;
public AbpBreadcrumbItemTagHelperService(HtmlEncoder encoder)
{
_encoder = encoder;
}
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "li";
output.TagMode = TagMode.StartTagAndEndTag;
output.Attributes.AddClass("breadcrumb-item");
output.Attributes.AddClass(AbpBreadcrumbItemActivePlaceholder);
var list = GetValueFromContext<List<BreadcrumbItem>>(context, BreadcrumbItemsContent);
output.Content.SetHtmlContent(GetInnerHtml(context, output));
list.Add(new BreadcrumbItem
{
Html = RenderTagHelperOutput(output, _encoder),
Active = TagHelper.Active
});
output.SuppressOutput();
}
protected virtual string GetInnerHtml(TagHelperContext context, TagHelperOutput output)
{
if (string.IsNullOrWhiteSpace(TagHelper.Href))
{
output.Attributes.Add("aria-current", "page");
return TagHelper.Title;
}
return "<a href=\"" + TagHelper.Href + "\">" + TagHelper.Title + "</a>";
}
}
}

11
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelper.cs

@ -0,0 +1,11 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb
{
public class AbpBreadcrumbTagHelper : AbpTagHelper<AbpBreadcrumbTagHelper, AbpBreadcrumbTagHelperService>
{
public AbpBreadcrumbTagHelper(AbpBreadcrumbTagHelperService tagHelperService)
: base(tagHelperService)
{
}
}
}

63
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs

@ -0,0 +1,63 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb
{
public class AbpBreadcrumbTagHelperService : AbpTagHelperService<AbpBreadcrumbTagHelper>
{
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
var list = InitilizeFormGroupContentsContext(context, output);
await output.GetChildContentAsync();
SetInnerOlTag(context, output);
SetInnerList(context, output, list);
}
protected virtual void SetInnerOlTag(TagHelperContext context, TagHelperOutput output)
{
output.PreContent.SetHtmlContent("<ol class=\"breadcrumb\">");
output.PostContent.SetHtmlContent("</ol>");
}
protected virtual void SetInnerList(TagHelperContext context, TagHelperOutput output, List<BreadcrumbItem> list)
{
var anyActiveItem = list.Any(bc => bc.Active);
if (!anyActiveItem && list.Count > 0)
{
list.Last().Active = true;
}
var html = new StringBuilder("");
foreach (var breadcrumbItem in list)
{
var htmlPart = SetActiveClassIfActiveAndGetHtml(breadcrumbItem);
html.AppendLine(htmlPart);
}
output.Content.SetHtmlContent(html.ToString());
}
protected virtual List<BreadcrumbItem> InitilizeFormGroupContentsContext(TagHelperContext context, TagHelperOutput output)
{
var items = new List<BreadcrumbItem>();
context.Items[BreadcrumbItemsContent] = items;
return items;
}
protected virtual string SetActiveClassIfActiveAndGetHtml(BreadcrumbItem item)
{
return item.Active ?
item.Html.Replace(AbpBreadcrumbItemActivePlaceholder, " active") :
item.Html.Replace(AbpBreadcrumbItemActivePlaceholder, "");
}
}
}

14
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/BreadcrumbItem.cs

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb
{
public class BreadcrumbItem
{
public string Html { get; set; }
public bool Active { get; set; }
}
}

32
test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Breadcrumbs.cshtml

@ -0,0 +1,32 @@
@page
@model Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components.BreadcrumbsModel
@{
ViewData["Title"] = "Breadcrumbs";
}
<h2>Breadcrumbs</h2>
<p>Based on <a href="https://getbootstrap.com/docs/4.1/components/breadcrumbs/" target="_blank"> Bootstrap Breadcrumb</a>.</p>
<h4># Breadcrumb Examples</h4>
<div class="demo-with-code">
<div class="demo-area">
<abp-breadcrumb>
<abp-breadcrumb-item href="#" title="Home"/>
<abp-breadcrumb-item href="#" title="Library"/>
<abp-breadcrumb-item title="Page"/>
</abp-breadcrumb>
</div>
<div class="code-area">
<pre>
&lt;abp-breadcrumb&gt;
&lt;abp-breadcrumb-item href=&quot;#&quot; title=&quot;Home&quot;/&gt;
&lt;abp-breadcrumb-item href=&quot;#&quot; title=&quot;Library&quot;/&gt;
&lt;abp-breadcrumb-item title=&quot;Page&quot;/&gt;
&lt;/abp-breadcrumb&gt;
</pre>
</div>
</div>

17
test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Breadcrumbs.cshtml.cs

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components
{
public class BreadcrumbsModel : PageModel
{
public void OnGet()
{
}
}
}

1
test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Index.cshtml

@ -19,5 +19,6 @@
<li><a asp-page="Components/collapse">Collapse</a></li>
<li><a asp-page="Components/tooltips">Tooltips</a></li>
<li><a asp-page="Components/Popovers">Popovers</a></li>
<li><a asp-page="Components/breadcrumbs">Breadcrumbs</a></li>
</ul>

Loading…
Cancel
Save