Browse Source

Add Icon and Text to buttons

pull/279/head
Halil İbrahim Kalkan 9 years ago
parent
commit
1a84121fbb
  1. 11
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelper.cs
  2. 39
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperService.cs
  3. 6
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelper.cs
  4. 47
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelperService.cs
  5. 8
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/FontIconType.cs

11
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<AbpButtonTagHelper, AbpButtonTagHelperService>
{
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)
{

39
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($"<i class=\"fa fa-{TagHelper.Icon}\"></i> ");
}
protected virtual void AddText(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.Text.IsNullOrWhiteSpace())
{
return;
}
output.Content.AppendHtml($"<span>{TagHelper.Text}</span>");
}
protected virtual void AddBusyText(TagHelperContext context, TagHelperOutput output)
{
var busyText = TagHelper.BusyText ?? L["ProcessingWithThreeDot"];
if (busyText.IsNullOrWhiteSpace())

6
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<AbpLinkButtonTagHelper, AbpLinkButtonTagHelperService>
{
[HtmlAttributeName("abp-button")]
public AbpButtonType ButtonType { get; set; }
public string Text { get; set; }
public string Icon { get; set; }
public AbpLinkButtonTagHelper(AbpLinkButtonTagHelperService service)
: base(service)
{

47
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<AbpLinkButtonTagHelper>
{
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($"<i class=\"fa fa-{TagHelper.Icon}\"></i> ");
}
protected virtual void AddText(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.Text.IsNullOrWhiteSpace())
{
return;
}
output.Content.AppendHtml($"<span>{TagHelper.Text}</span>");
}
}
}

8
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
}
}
Loading…
Cancel
Save