Browse Source

Added button size. Refactored button tag helper services.

pull/279/head
Halil İbrahim Kalkan 9 years ago
parent
commit
12d8614ea0
  1. 10
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Microsoft/AspNetCore/Razor/TagHelpers/AbpTagHelperAttributeListExtensions.cs
  2. 9
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonSize.cs
  3. 20
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonSizeExtensions.cs
  4. 4
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelper.cs
  5. 43
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperService.cs
  6. 58
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperServiceBase.cs
  7. 6
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelper.cs
  8. 45
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelperService.cs
  9. 15
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/IButtonTagHelperBase.cs

10
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Microsoft/AspNetCore/Razor/TagHelpers/AbpTagHelperAttributeListExtensions.cs

@ -7,6 +7,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHel
{
public static void AddClass(this TagHelperAttributeList attributes, string className)
{
if (string.IsNullOrWhiteSpace(className))
{
return;
}
var classAttribute = attributes["class"];
if (classAttribute == null)
{
@ -21,6 +26,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHel
public static void RemoveClass(this TagHelperAttributeList attributes, string className)
{
if (string.IsNullOrWhiteSpace(className))
{
return;
}
var classAttribute = attributes["class"];
if (classAttribute == null)
{

9
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonSize.cs

@ -0,0 +1,9 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button
{
public enum AbpButtonSize
{
Default,
Small,
Large
}
}

20
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonSizeExtensions.cs

@ -0,0 +1,20 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button
{
public static class AbpButtonSizeExtensions
{
public static string ToClassName(this AbpButtonSize size)
{
switch (size)
{
case AbpButtonSize.Small:
return "btn-sm";
case AbpButtonSize.Large:
return "btn-lg";
case AbpButtonSize.Default:
return "";
default:
throw new AbpException("Unknown AbpButtonSize: " + size);
}
}
}
}

4
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelper.cs

@ -3,10 +3,12 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button
{
[HtmlTargetElement("abp-button", TagStructure = TagStructure.NormalOrSelfClosing)]
public class AbpButtonTagHelper : AbpTagHelper<AbpButtonTagHelper, AbpButtonTagHelperService>
public class AbpButtonTagHelper : AbpTagHelper<AbpButtonTagHelper, AbpButtonTagHelperService>, IButtonTagHelperBase
{
public AbpButtonType ButtonType { get; set; } = AbpButtonType.Default;
public AbpButtonSize Size { get; set; } = AbpButtonSize.Default;
public string BusyText { get; set; }
public string Text { get; set; }

43
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperService.cs

@ -2,11 +2,10 @@
using Localization.Resources.AbpUi;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.Extensions.Localization;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button
{
public class AbpButtonTagHelperService : AbpTagHelperService<AbpButtonTagHelper>
public class AbpButtonTagHelperService : AbpButtonTagHelperServiceBase<AbpButtonTagHelper>
{
protected const string DataBusyTextAttributeName = "data-busy-text";
@ -19,20 +18,12 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button
public override void Process(TagHelperContext context, TagHelperOutput output)
{
base.Process(context, output);
output.TagName = "button";
NormalizeTagStyle(context, output);
AddType(context, output);
AddClasses(context, output);
AddIcon(context, output);
AddText(context, output);
AddBusyText(context, output);
}
protected virtual void NormalizeTagStyle(TagHelperContext context, TagHelperOutput output)
{
output.TagMode = TagMode.StartTagAndEndTag;
}
protected virtual void AddType(TagHelperContext context, TagHelperOutput output)
{
if (output.Attributes.ContainsName("type"))
@ -43,36 +34,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button
output.Attributes.Add("type", "button");
}
protected virtual void AddClasses(TagHelperContext context, TagHelperOutput output)
{
output.Attributes.AddClass("btn");
if (TagHelper.ButtonType != AbpButtonType.Default)
{
output.Attributes.AddClass("btn-" + TagHelper.ButtonType.ToString().ToLowerInvariant());
}
}
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"];

58
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperServiceBase.cs

@ -0,0 +1,58 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
using System;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button
{
public abstract class AbpButtonTagHelperServiceBase<TTagHelper> : AbpTagHelperService<TTagHelper>
where TTagHelper : TagHelper, IButtonTagHelperBase
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
NormalizeTagStyle(context, output);
AddClasses(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");
if (TagHelper.ButtonType != AbpButtonType.Default)
{
output.Attributes.AddClass("btn-" + TagHelper.ButtonType.ToString().ToLowerInvariant());
}
if (TagHelper.Size != AbpButtonSize.Default)
{
output.Attributes.AddClass(TagHelper.Size.ToClassName());
}
}
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>");
}
}
}

6
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelper.cs

@ -4,15 +4,19 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button
{
[HtmlTargetElement("a", Attributes = "abp-button", TagStructure = TagStructure.NormalOrSelfClosing)]
[HtmlTargetElement("input", Attributes = "abp-button", TagStructure = TagStructure.WithoutEndTag)]
public class AbpLinkButtonTagHelper : AbpTagHelper<AbpLinkButtonTagHelper, AbpLinkButtonTagHelperService>
public class AbpLinkButtonTagHelper : AbpTagHelper<AbpLinkButtonTagHelper, AbpLinkButtonTagHelperService>, IButtonTagHelperBase
{
[HtmlAttributeName("abp-button")]
public AbpButtonType ButtonType { get; set; }
public AbpButtonSize Size { get; set; } = AbpButtonSize.Default;
public string Text { get; set; }
public string Icon { get; set; }
public FontIconType IconType { get; } = FontIconType.FontAwesome;
public AbpLinkButtonTagHelper(AbpLinkButtonTagHelperService service)
: base(service)
{

45
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpLinkButtonTagHelperService.cs

@ -1,34 +1,15 @@
using System;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button
{
public class AbpLinkButtonTagHelperService : AbpTagHelperService<AbpLinkButtonTagHelper>
public class AbpLinkButtonTagHelperService : AbpButtonTagHelperServiceBase<AbpLinkButtonTagHelper>
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
NormalizeTagStyle(context, output);
AddClasses(context, output);
AddRole(context, output);
base.Process(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");
if (TagHelper.ButtonType != AbpButtonType.Default)
{
output.Attributes.AddClass("btn-" + TagHelper.ButtonType.ToString().ToLowerInvariant());
}
AddRole(context, output);
}
protected virtual void AddType(TagHelperContext context, TagHelperOutput output)
@ -47,25 +28,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button
output.Attributes.Add("role", "button");
}
}
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>");
}
}
}

15
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/IButtonTagHelperBase.cs

@ -0,0 +1,15 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button
{
public interface IButtonTagHelperBase
{
AbpButtonType ButtonType { get; }
AbpButtonSize Size { get; }
string Text { get; }
string Icon { get; }
FontIconType IconType { get; }
}
}
Loading…
Cancel
Save