using AcdiuTools.Services; using Microsoft.AspNetCore.Razor.TagHelpers; using System.Threading.Tasks; namespace AcdiuTools.TagHelpers { /// /// 主题切换按钮 Tag Helper /// 用法: /// [HtmlTargetElement("theme-toggle")] public class ThemeToggleTagHelper(IThemeService themeService) : TagHelper { private readonly IThemeService _themeService = themeService; public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { // 获取当前主题 var currentTheme = await _themeService.GetUserThemeAsync(); bool isDark = currentTheme == "dark"; // 设置标签名为 button output.TagName = "button"; output.TagMode = TagMode.StartTagAndEndTag; // 添加基础 CSS 类 (Bootstrap) output.Attributes.Add("class", "btn btn-outline-secondary border-0"); output.Attributes.Add("id", "theme-toggle-btn"); output.Attributes.Add("type", "button"); output.Attributes.Add("aria-label", "Toggle Theme"); // 添加 Tooltip (Bootstrap data-bs-toggle) output.Attributes.Add("data-bs-toggle", "tooltip"); output.Attributes.Add("data-bs-placement", "bottom"); output.Attributes.Add("title", isDark ? "切换到浅色模式" : "切换到深色模式"); // 根据当前主题设置图标内容 // 使用 Bootstrap Icons 或 FontAwesome string iconHtml = isDark ? "" // 深色模式下显示太阳图标(暗示切换到亮) : ""; // 浅色模式下显示月亮图标 output.Content.SetHtmlContent(iconHtml); } } }