Files
mixtape/zero/TagHelpers/ActiveTagHelper.cs
T

79 lines
2.0 KiB
C#
Raw Normal View History

2022-12-12 16:11:49 +01:00
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace zero.TagHelpers;
[HtmlTargetElement(Attributes = "app-active")]
public class ActiveTagHelper : TagHelper
{
private readonly IHttpContextAccessor _httpContextAccessor;
[HtmlAttributeName("class")]
public string Classes { get; set; }
2022-12-14 01:02:37 +01:00
public override int Order => 100;
2022-12-12 16:11:49 +01:00
public ActiveTagHelper(IHttpContextAccessor contextAccessor)
{
_httpContextAccessor = contextAccessor;
}
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.Attributes.RemoveAll("app-active");
2022-12-14 15:17:13 +01:00
output.Attributes.TryGetAttribute("Href", out TagHelperAttribute _href);
string href = _href?.Value?.ToString() ?? string.Empty;
2022-12-12 16:11:49 +01:00
HashSet<string> classes = Classes?.Split(" ").ToHashSet() ?? new HashSet<string>();
2022-12-14 15:17:13 +01:00
if (_httpContextAccessor.HttpContext.IsPartOfUrl(href))
2022-12-12 16:11:49 +01:00
{
classes.Add("is-active");
}
2022-12-14 15:17:13 +01:00
if (_httpContextAccessor.HttpContext.IsUrl(href))
2022-12-12 16:11:49 +01:00
{
classes.Add("is-active-exact");
}
2022-12-27 20:56:42 +01:00
output.Attributes.SetAttribute("class", string.Join(" ", classes));
}
}
[HtmlTargetElement(Attributes = "app-active-exact")]
public class ActiveExactTagHelper : TagHelper
{
private readonly IHttpContextAccessor _httpContextAccessor;
[HtmlAttributeName("class")]
public string Classes { get; set; }
public override int Order => 100;
public ActiveExactTagHelper(IHttpContextAccessor contextAccessor)
{
_httpContextAccessor = contextAccessor;
}
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.Attributes.RemoveAll("app-active-exact");
output.Attributes.TryGetAttribute("Href", out TagHelperAttribute _href);
string href = _href?.Value?.ToString() ?? string.Empty;
HashSet<string> classes = Classes?.Split(" ").ToHashSet() ?? new HashSet<string>();
if (_httpContextAccessor.HttpContext.IsUrl(href))
{
classes.Add("is-active-exact");
}
2022-12-12 16:11:49 +01:00
output.Attributes.SetAttribute("class", string.Join(" ", classes));
}
}