diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelper.cs index be60e50308..ef6232b30f 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelper.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelper.cs @@ -1,11 +1,20 @@ -namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button +using Microsoft.AspNetCore.Razor.TagHelpers; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button { + [HtmlTargetElement("abp-button", TagStructure = TagStructure.NormalOrSelfClosing)] public class AbpButtonTagHelper : AbpTagHelper { public AbpButtonType ButtonType { get; set; } = AbpButtonType.Default; public string BusyText { get; set; } + public string Text { get; set; } + + public string Icon { get; set; } + + public FontIconType IconType { get; set; } = FontIconType.FontAwesome; + public AbpButtonTagHelper(AbpButtonTagHelperService service) : base(service) { diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperService.cs index 5e040c6798..053de384b4 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperService.cs @@ -20,13 +20,20 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "button"; + NormalizeTagStyle(context, output); + AddType(context, output); + AddClasses(context, output); + AddIcon(context, output); + AddText(context, output); + AddBusyText(context, output); + } - AddType(output); - AddButtonClasses(output); - AddButtonBusyText(context, output); + protected virtual void NormalizeTagStyle(TagHelperContext context, TagHelperOutput output) + { + output.TagMode = TagMode.StartTagAndEndTag; } - private static void AddType(TagHelperOutput output) + protected virtual void AddType(TagHelperContext context, TagHelperOutput output) { if (output.Attributes.ContainsName("type")) { @@ -36,7 +43,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button output.Attributes.Add("type", "button"); } - private void AddButtonClasses(TagHelperOutput output) + protected virtual void AddClasses(TagHelperContext context, TagHelperOutput output) { output.Attributes.AddClass("btn"); @@ -46,7 +53,27 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button } } - protected virtual void AddButtonBusyText(TagHelperContext context, TagHelperOutput output) + protected virtual void AddIcon(TagHelperContext context, TagHelperOutput output) + { + if (TagHelper.Icon.IsNullOrWhiteSpace()) + { + return; + } + + output.Content.AppendHtml($" "); + } + + protected virtual void AddText(TagHelperContext context, TagHelperOutput output) + { + if (TagHelper.Text.IsNullOrWhiteSpace()) + { + return; + } + + output.Content.AppendHtml($"{TagHelper.Text}"); + } + + protected virtual void AddBusyText(TagHelperContext context, TagHelperOutput output) { var busyText = TagHelper.BusyText ?? L["ProcessingWithThreeDot"]; if (busyText.IsNullOrWhiteSpace()) diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelper.cs index 603fc80ca1..a91ba0f093 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelper.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelper.cs @@ -2,13 +2,17 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button { - [HtmlTargetElement("a", Attributes = "abp-button")] + [HtmlTargetElement("a", Attributes = "abp-button", TagStructure = TagStructure.NormalOrSelfClosing)] [HtmlTargetElement("input", Attributes = "abp-button", TagStructure = TagStructure.WithoutEndTag)] public class AbpLinkButtonTagHelper : AbpTagHelper { [HtmlAttributeName("abp-button")] public AbpButtonType ButtonType { get; set; } + public string Text { get; set; } + + public string Icon { get; set; } + public AbpLinkButtonTagHelper(AbpLinkButtonTagHelperService service) : base(service) { diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelperService.cs index 46ba1c20a5..51ec084f50 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelperService.cs @@ -7,6 +7,21 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button public class AbpLinkButtonTagHelperService : AbpTagHelperService { public override void Process(TagHelperContext context, TagHelperOutput output) + { + NormalizeTagStyle(context, output); + AddClasses(context, output); + AddRole(context, output); + AddType(context, output); + AddIcon(context, output); + AddText(context, output); + } + + protected virtual void NormalizeTagStyle(TagHelperContext context, TagHelperOutput output) + { + output.TagMode = TagMode.StartTagAndEndTag; + } + + protected virtual void AddClasses(TagHelperContext context, TagHelperOutput output) { output.Attributes.AddClass("btn"); @@ -14,17 +29,43 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button { output.Attributes.AddClass("btn-" + TagHelper.ButtonType.ToString().ToLowerInvariant()); } + } + + protected virtual void AddType(TagHelperContext context, TagHelperOutput output) + { + if (!output.Attributes.ContainsName("type") && + output.TagName.Equals("input", StringComparison.InvariantCultureIgnoreCase)) + { + output.Attributes.Add("type", "button"); + } + } + protected virtual void AddRole(TagHelperContext context, TagHelperOutput output) + { if (!output.Attributes.ContainsName("role")) { output.Attributes.Add("role", "button"); } + } - if (!output.Attributes.ContainsName("type") && - output.TagName.Equals("input", StringComparison.InvariantCultureIgnoreCase)) + protected virtual void AddIcon(TagHelperContext context, TagHelperOutput output) + { + if (TagHelper.Icon.IsNullOrWhiteSpace()) { - output.Attributes.Add("type", "button"); + return; } + + output.Content.AppendHtml($" "); + } + + protected virtual void AddText(TagHelperContext context, TagHelperOutput output) + { + if (TagHelper.Text.IsNullOrWhiteSpace()) + { + return; + } + + output.Content.AppendHtml($"{TagHelper.Text}"); } } } \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/FontIconType.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/FontIconType.cs new file mode 100644 index 0000000000..81debc06b0 --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/FontIconType.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers +{ + public enum FontIconType + { + FontAwesome, + Other + } +} \ No newline at end of file