using Microsoft.AspNetCore.Razor.TagHelpers;
using System.Threading.Tasks;
namespace AcdiuTools.TagHelpers
{
///
/// SVG Sprite 封装标签
/// 用法:
///
[HtmlTargetElement("bsicon")]
public class BsIconTagHelper : TagHelper
{
// 路径指向你存放总 SVG 的位置
///
/// 表示用于引用图标符号的 SVG矢量图库文件的相对路径
///
/// 此路径应指向包含所有 图标定义的SVG文件
/// 如果图标库被移动或升级,则需要更新该值
const string spritePath = "/lib/bootstrap-icons-1.13.1/bootstrap-icons.svg";
///
/// 图标名称 (必填)
///
[HtmlAttributeName("i")]
public required string IconName { get; set; }
///
/// 宽度 (默认为空,若为空时设置了高度,则使用高度的值,否则为元素 ClassName 添加 w-1r 以使其默认宽度为 1rem)
///
[HtmlAttributeName("w")]
public string Width { get; set; } = string.Empty;
///
/// 高度 (默认为空,若为空时设置了宽度,则使用宽度的值,否则为元素 ClassName 添加 h-1r 以使其默认高度为 1rem)
///
[HtmlAttributeName("h")]
public string Height { get; set; } = string.Empty;
///
/// 填充颜色 (默认 currentColor 即当前元素颜色)
///
[HtmlAttributeName("f")]
public string Fill { get; set; } = "currentColor";
///
/// 自定义 class 名称,允许用户添加额外的样式类 (默认空)
///
[HtmlAttributeName("cn")]
public string ClassName { get; set; } = string.Empty;
///
/// 根据指定的图标名称和属性,处理标签助手以渲染SVG矢量图标
///
/// 若未指定图标名称或为空,则输出被抑制且不生成SVG
/// 渲染后,该方法会将原始标签替换为<svg>元素并设置标准的SVG属性
/// 包括类名、宽度、高度、填充颜色和图标ID名称。该SVG引用了 中的图标
/// 使用<use>元素引用的矢量图形
/// 用于标签辅助程序执行的上下文,包含当前HTML标签及其属性的相关信息
/// 标签辅助器的输出,用于修改渲染的HTML元素及其内容
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (string.IsNullOrWhiteSpace(IconName))
{
output.SuppressOutput(); // 如果没写图标名,则不渲染
return;
}
// 1. 将外层标签替换为