44 lines
1.5 KiB
C#
44 lines
1.5 KiB
C#
|
using System;
|
||
|
using System.Linq;
|
||
|
using System.Text.Encodings.Web;
|
||
|
using System.Threading.Tasks;
|
||
|
using Microsoft.AspNetCore.Mvc;
|
||
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||
|
using Microsoft.AspNetCore.Mvc.Routing;
|
||
|
using Microsoft.AspNetCore.Mvc.TagHelpers;
|
||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||
|
using Microsoft.AspNetCore.Razor.TagHelpers;
|
||
|
|
||
|
namespace Props.TagHelpers
|
||
|
{
|
||
|
public class NavLinkTagHelper : AnchorTagHelper
|
||
|
{
|
||
|
private IUrlHelperFactory urlHelperFactory;
|
||
|
private IUrlHelper urlHelper;
|
||
|
public NavLinkTagHelper(IHtmlGenerator generator, IUrlHelperFactory urlHelperFactory) : base(generator)
|
||
|
{
|
||
|
this.urlHelperFactory = urlHelperFactory;
|
||
|
}
|
||
|
|
||
|
public override void Init(TagHelperContext context)
|
||
|
{
|
||
|
this.urlHelper = urlHelperFactory.GetUrlHelper(ViewContext);
|
||
|
base.Init(context);
|
||
|
}
|
||
|
|
||
|
public string ActiveClass { get; set; } = "active";
|
||
|
|
||
|
public override void Process(TagHelperContext context, TagHelperOutput output)
|
||
|
{
|
||
|
base.Process(context, output);
|
||
|
TagHelperAttribute dest;
|
||
|
if (output.Attributes.TryGetAttribute("href", out dest) && urlHelper.RouteUrl(ViewContext.RouteData.Values).Equals(dest.Value))
|
||
|
{
|
||
|
output.AddClass(ActiveClass, HtmlEncoder.Default);
|
||
|
output.Attributes.Add("aria-current", "page");
|
||
|
}
|
||
|
output.TagName = "a";
|
||
|
}
|
||
|
}
|
||
|
}
|