pull/279/head
Halil İbrahim Kalkan 8 years ago
commit 3a2c2b0453

3
.gitignore vendored

@ -260,4 +260,5 @@ src/MicroserviceDemo/MicroserviceDemo.TenantService/Logs/*.txt
src/MicroserviceDemo/MicroserviceDemo.AuthServer/Logs/*.txt
src/MicroserviceDemo/MicroserviceDemo.TenancyService/Logs/*.txt
src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll
/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Logs/logs.txt
/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Logs/logs.txt
test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Logs/logs.txt

@ -16,21 +16,24 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
where TTagHelper : TagHelper
{
protected const string FormGroupContents = "FormGroupContents";
protected const string DropdownButtonsAsHtml = "DropdownButtonsAsHtmlContent";
protected const string NavItemContents = "FormGroupContents";
protected const string TabItems = "TabItems";
protected const string AccordionItems = "AccordionItems";
protected const string BreadcrumbItemsContent = "BreadcrumbItemsContent";
protected const string CarouselItemsContent = "CarouselItemsContent";
protected const string TabItemsDataTogglePlaceHolder = "{{data_toggle}}";
protected const string TabItemsVerticalPillPlaceHolder = "{{vertical_pill}}";
protected const string TabItemNamePlaceHolder = "{{Tag_Name}}";
protected const string TabItemsDataTogglePlaceHolder = "{_data_toggle_Placeholder_}";
protected const string TabItemsVerticalPillPlaceHolder = "{_vertical_pill_Placeholder_}";
protected const string TabItemNamePlaceHolder = "{_Tab_Tag_Name_Placeholder_}";
protected const string AbpFormContentPlaceHolder = "{_AbpFormContentPlaceHolder_}";
protected const string AbpTabItemActivePlaceholder = "{_Tab_Active_Placeholder_}";
protected const string AbpTabItemShowActivePlaceholder = "{_Tab_Show_Active_Placeholder_}";
protected const string AbpBreadcrumbItemActivePlaceholder = "{_Breadcrumb_Active_Placeholder_}";
protected const string AbpCarouselItemActivePlaceholder = "{_CarouselItem_Active_Placeholder_}";
protected const string AbpNavItemActivePlaceholder = "{_NavItem_Active_Placeholder_}";
protected const string AbpNavItemResponsiveFlexPlaceholder = "{_NavItem_Responsive_Flex_Placeholder_}";
protected const string AbpNavItemResponsiveAlignPlaceholder = "{_NavItem_Responsive_Align_Placeholder_}";
protected const string AbpTabItemSelectedPlaceholder = "{_Tab_Selected_Placeholder_}";
protected const string AbpAccordionParentIdPlaceholder = "{_{{Parent_Accordion_Id}}_}";
protected const string AbpAccordionParentIdPlaceholder = "{_Parent_Accordion_Id_}";
public TTagHelper TagHelper { get; internal set; }
@ -106,7 +109,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
{
if (!context.Items.ContainsKey(key))
{
return default;
return default(T);
}
return (T)context.Items[key];

@ -2,15 +2,14 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Alert
{
[HtmlTargetElement("h1", Attributes = "abp-alert-header", TagStructure = TagStructure.NormalOrSelfClosing)]
[HtmlTargetElement("h2", Attributes = "abp-alert-header", TagStructure = TagStructure.NormalOrSelfClosing)]
[HtmlTargetElement("h3", Attributes = "abp-alert-header", TagStructure = TagStructure.NormalOrSelfClosing)]
[HtmlTargetElement("h4", Attributes = "abp-alert-header", TagStructure = TagStructure.NormalOrSelfClosing)]
[HtmlTargetElement("h5", Attributes = "abp-alert-header", TagStructure = TagStructure.NormalOrSelfClosing)]
[HtmlTargetElement("h6", Attributes = "abp-alert-header", TagStructure = TagStructure.NormalOrSelfClosing)]
[HtmlTargetElement("h1", ParentTag = "abp-alert", TagStructure = TagStructure.NormalOrSelfClosing)]
[HtmlTargetElement("h2", ParentTag = "abp-alert", TagStructure = TagStructure.NormalOrSelfClosing)]
[HtmlTargetElement("h3", ParentTag = "abp-alert", TagStructure = TagStructure.NormalOrSelfClosing)]
[HtmlTargetElement("h4", ParentTag = "abp-alert", TagStructure = TagStructure.NormalOrSelfClosing)]
[HtmlTargetElement("h5", ParentTag = "abp-alert", TagStructure = TagStructure.NormalOrSelfClosing)]
[HtmlTargetElement("h6", ParentTag = "abp-alert", TagStructure = TagStructure.NormalOrSelfClosing)]
public class AbpAlertHeaderTagHelper : AbpTagHelper<AbpAlertHeaderTagHelper, AbpAlertHeaderTagHelperService>
{
public AbpAlertHeaderTagHelper(AbpAlertHeaderTagHelperService tagHelperService)
: base(tagHelperService)
{

@ -8,7 +8,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Alert
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.Attributes.AddClass("alert-heading");
output.Attributes.RemoveAll("abp-alert-header");
}
}
}

@ -8,8 +8,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Alert
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.Attributes.AddClass("alert-link");
output.Attributes.RemoveAll("abp-alert-link");
}
}
}

@ -6,14 +6,12 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Alert
{
public class AbpAlertTagHelperService : AbpTagHelperService<AbpAlertTagHelper>
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "div";
output.TagMode = TagMode.StartTagAndEndTag;
AddClasses(context, output);
AddDismissButtonIfDismissible(context, output);
}
@ -45,10 +43,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Alert
var buttonAsHtml =
"<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\">" + Environment.NewLine +
" <span aria-hidden=\"true\">&times;</span>" + Environment.NewLine +
" </button>";
" </button>";
output.PostContent.SetHtmlContent(buttonAsHtml);
}
}
}

@ -1,5 +1,4 @@
using System.Linq;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Badge
@ -8,21 +7,33 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Badge
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
var badgeType = TagHelper.BadgeType != AbpBadgeType._? TagHelper.BadgeType : TagHelper.BadgePillType;
SetBadgeClass(context, output);
SetBadgeStyle(context, output);
}
output.Attributes.AddClass("badge");
protected virtual void SetBadgeStyle(TagHelperContext context, TagHelperOutput output)
{
var badgeType = GetBadgeType(context, output);
if (TagHelper.BadgePillType != AbpBadgeType._)
if (badgeType != AbpBadgeType.Default && badgeType != AbpBadgeType._)
{
output.Attributes.AddClass("badge-pill");
output.Attributes.AddClass("badge-" + badgeType.ToString().ToLowerInvariant());
}
}
if (badgeType != AbpBadgeType.Default && badgeType != AbpBadgeType._)
protected virtual void SetBadgeClass(TagHelperContext context, TagHelperOutput output)
{
output.Attributes.AddClass("badge");
if (TagHelper.BadgePillType != AbpBadgeType._)
{
output.Attributes.AddClass("badge-" + badgeType.ToString().ToLowerInvariant());
output.Attributes.AddClass("badge-pill");
}
}
protected virtual AbpBadgeType GetBadgeType(TagHelperContext context, TagHelperOutput output)
{
return TagHelper.BadgeType != AbpBadgeType._ ? TagHelper.BadgeType : TagHelper.BadgePillType;
}
}
}

@ -2,7 +2,7 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Blockquote
{
[HtmlTargetElement("footer", ParentTag = "blockquote")]
[HtmlTargetElement("footer", ParentTag = "abp-blockquote")]
public class AbpBlockquoteFooterTagHelper : AbpTagHelper<AbpBlockquoteFooterTagHelper, AbpBlockquoteFooterTagHelperService>
{
public AbpBlockquoteFooterTagHelper(AbpBlockquoteFooterTagHelperService tagHelperService)

@ -2,7 +2,7 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Blockquote
{
[HtmlTargetElement("p", ParentTag = "blockquote")]
[HtmlTargetElement("p", ParentTag = "abp-blockquote")]
public class AbpBlockquoteParagraphTagHelper : AbpTagHelper<AbpBlockquoteParagraphTagHelper, AbpBlockquoteParagraphTagHelperService>
{
public AbpBlockquoteParagraphTagHelper(AbpBlockquoteParagraphTagHelperService tagHelperService)

@ -1,8 +1,5 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Blockquote
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Blockquote
{
[HtmlTargetElement("blockquote")]
public class AbpBlockquoteTagHelper : AbpTagHelper<AbpBlockquoteTagHelper, AbpBlockquoteTagHelperService>
{
public AbpBlockquoteTagHelper(AbpBlockquoteTagHelperService tagHelperService)

@ -23,8 +23,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb
var list = GetValueFromContext<List<BreadcrumbItem>>(context, BreadcrumbItemsContent);
output.Content.SetHtmlContent(GetInnerHtml(context, output));
list.Add(new BreadcrumbItem
{
Html = RenderTagHelperOutput(output, _encoder),

@ -26,12 +26,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb
protected virtual void SetInnerList(TagHelperContext context, TagHelperOutput output, List<BreadcrumbItem> list)
{
var anyActiveItem = list.Any(bc => bc.Active);
if (!anyActiveItem && list.Count > 0)
{
list.Last().Active = true;
}
SetLastOneActiveIfThereIsNotAny(context, output, list);
var html = new StringBuilder("");
@ -52,6 +47,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb
return items;
}
protected virtual void SetLastOneActiveIfThereIsNotAny(TagHelperContext context, TagHelperOutput output, List<BreadcrumbItem> list)
{
if (list.Count > 0 && !list.Any(bc => bc.Active))
{
list.Last().Active = true;
}
}
protected virtual string SetActiveClassIfActiveAndGetHtml(BreadcrumbItem item)
{
return item.Active ?

@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb
{
public class BreadcrumbItem
{

@ -72,7 +72,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel
protected virtual void SetIndicators(TagHelperContext context, TagHelperOutput output, List<CarouselItem> itemList)
{
if (!TagHelper.Indicators??false)
if (!TagHelper.Indicators ?? false)
{
return;
}
@ -83,9 +83,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel
{
html.AppendLine(
"<li " +
"data-target=\"#"+TagHelper.Id+"\"" +
" data-slide-to=\""+i+"\"" +
(itemList[i].Active?" class=\"active\">":"") +
"data-target=\"#" + TagHelper.Id + "\"" +
" data-slide-to=\"" + i + "\"" +
(itemList[i].Active ? " class=\"active\">" : "") +
"</li>");
}
@ -95,7 +95,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel
protected virtual void SetOneItemAsActive(TagHelperContext context, TagHelperOutput output, List<CarouselItem> itemList)
{
if (!itemList.Any(it=> it.Active) && itemList.Count > 0)
if (!itemList.Any(it => it.Active) && itemList.Count > 0)
{
itemList.FirstOrDefault().Active = true;
}
@ -117,7 +117,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel
protected virtual void SetFadeAnimation(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.Crossfade??false)
if (TagHelper.Crossfade ?? false)
{
output.Attributes.AddClass("carousel-fade");
}

@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel
{
public class CarouselItem
{

@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Nito.AsyncEx;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse
{

@ -1,8 +1,6 @@
using System;
using System.Linq;
using System.Text;
using System.Text.Encodings.Web;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;

@ -11,6 +11,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown
output.Attributes.AddClass("dropdown-divider");
output.TagMode = TagMode.StartTagAndEndTag;
}
}
}

@ -11,6 +11,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown
output.Attributes.AddClass("dropdown-header");
output.TagMode = TagMode.StartTagAndEndTag;
}
}
}

@ -25,6 +25,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown
return;
}
}
}
}

@ -1,12 +1,11 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown
{
public class AbpDropdownTagHelperService : AbpTagHelperService<AbpDropdownTagHelper>
{
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "div";
output.Attributes.AddClass("btn-group");
@ -16,11 +15,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown
output.TagMode = TagMode.StartTagAndEndTag;
}
protected virtual string GetButtonsAsHtml(TagHelperContext context, TagHelperOutput output)
{
return context.Items[DropdownButtonsAsHtml] as string;
}
protected virtual void SetDirection(TagHelperContext context, TagHelperOutput output)
{
switch (TagHelper.Direction)
@ -38,6 +32,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown
return;
}
}
}
}

@ -10,6 +10,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Figure
output.TagName = "figcaption";
output.Attributes.AddClass("figure-caption");
}
}
}

@ -9,6 +9,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Figure
{
output.Attributes.AddClass("figure-img");
}
}
}

@ -10,6 +10,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Figure
output.TagName = "figure";
output.Attributes.AddClass("figure");
}
}
}

@ -8,7 +8,6 @@ using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.TagHelpers;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button;

@ -1,5 +1,4 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
{

@ -3,12 +3,10 @@ using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text.Encodings.Web;
using Localization.Resources.AbpUi;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.TagHelpers;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
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.Form

@ -11,6 +11,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Grid
output.Attributes.AddClass("w-100");
output.TagMode = TagMode.StartTagAndEndTag;
}
}
}

@ -1,12 +1,10 @@
using System;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Image
{
public class AbpImageTagHelperService : AbpTagHelperService<AbpImageTagHelper>
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "img";
@ -66,6 +64,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Image
{
output.Attributes.Add("alt",TagHelper.Alt);
}
}
}

@ -8,6 +8,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Label
{
//TODO: fill
}
}
}

@ -37,7 +37,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.ListGroup
{
output.Attributes.AddClass("list-group-item");
if (TagHelper.Active ?? false) output.Attributes.AddClass("active");
if (TagHelper.Disabled ?? false) output.Attributes.AddClass("disabled");
if (TagHelper.Type != AbpListItemType.Default) { output.Attributes.AddClass("list-group-item-" + TagHelper.Type.ToString().ToLowerInvariant()); }

@ -15,6 +15,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.ListGroup
output.Attributes.AddClass("list-group-flush");
}
}
}
}

@ -0,0 +1,10 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Nav
{
public enum AbpNavAlign
{
Default,
Start,
Center,
End
}
}

@ -0,0 +1,17 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Nav
{
public class AbpNavItemTagHelper : AbpTagHelper<AbpNavItemTagHelper, AbpNavItemTagHelperService>
{
public bool? Active { get; set; }
public bool? Disabled { get; set; }
public string Href { get; set; }
public AbpNavItemTagHelper(AbpNavItemTagHelperService tagHelperService)
: base(tagHelperService)
{
}
}
}

@ -0,0 +1,64 @@
using System.Collections.Generic;
using System.Text.Encodings.Web;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Nav
{
public class AbpNavItemTagHelperService : AbpTagHelperService<AbpNavItemTagHelper>
{
private readonly HtmlEncoder _encoder;
public AbpNavItemTagHelperService(HtmlEncoder encoder)
{
_encoder = encoder;
}
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a";
output.TagMode = TagMode.StartTagAndEndTag;
output.Attributes.Add("href",TagHelper.Href);
SetClasses(context, output);
output.Content.SetHtmlContent(await output.GetChildContentAsync());
var list = GetValueFromContext<List<NavItem>>(context, NavItemContents);
list.Add(new NavItem
{
Html = SurroundTagWithNavItem(context, output,RenderTagHelperOutput(output, _encoder)),
Active = TagHelper.Active??false
});
output.SuppressOutput();
}
protected virtual void SetClasses(TagHelperContext context, TagHelperOutput output)
{
output.Attributes.AddClass("nav-link");
SetDisabledClass(context, output);
SetActiveClass(context, output);
}
protected virtual void SetDisabledClass(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.Disabled ?? false)
{
output.Attributes.AddClass("disabled");
}
}
protected virtual void SetActiveClass(TagHelperContext context, TagHelperOutput output)
{
output.Attributes.AddClass(AbpNavItemActivePlaceholder);
}
protected virtual string SurroundTagWithNavItem(TagHelperContext context, TagHelperOutput output, string html)
{
return "<li class=\"nav-item "+ AbpNavItemResponsiveAlignPlaceholder +" " + AbpNavItemResponsiveFlexPlaceholder + "\">" + html + "</li>";
}
}
}

@ -0,0 +1,17 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Nav
{
public class AbpNavTagHelper : AbpTagHelper<AbpNavTagHelper, AbpNavTagHelperService>
{
public AbpNavAlign Align { get; set; } = AbpNavAlign.Default;
public NavStyle NavStyle { get; set; } = NavStyle.Default;
public bool? Responsive { get; set; }
public AbpNavTagHelper(AbpNavTagHelperService tagHelperService)
: base(tagHelperService)
{
}
}
}

@ -0,0 +1,112 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Nav
{
public class AbpNavTagHelperService : AbpTagHelperService<AbpNavTagHelper>
{
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "ul";
output.TagMode = TagMode.StartTagAndEndTag;
output.Attributes.AddClass("nav");
SetAlign(context, output);
SetNavStyle(context, output);
SetResponsiveness(context, output);
var list = InitilizeFormGroupContentsContext(context, output);
await output.GetChildContentAsync();
SetInnerList(context, output, list);
}
protected virtual void SetInnerList(TagHelperContext context, TagHelperOutput output, List<NavItem> list)
{
SetFirstOneActiveIfThereIsNotAny(context, output, list);
var html = new StringBuilder("");
foreach (var navItem in list)
{
var htmlPart = SetPlaceHolderClassesIfActiveAndGetHtml(navItem);
html.AppendLine(htmlPart);
}
output.Content.SetHtmlContent(html.ToString());
}
protected virtual string SetPlaceHolderClassesIfActiveAndGetHtml(NavItem item)
{
var html = item.Html;
html = item.Active ?
item.Html.Replace(AbpNavItemActivePlaceholder, " active") :
item.Html.Replace(AbpNavItemActivePlaceholder, "");
html = TagHelper.Responsive?? false? html.Replace(AbpNavItemResponsiveFlexPlaceholder, "flex-sm-fill").Replace(AbpNavItemResponsiveAlignPlaceholder, "text-sm-center") :
html.Replace(AbpNavItemResponsiveFlexPlaceholder, "").Replace(AbpNavItemResponsiveAlignPlaceholder, "");
return html;
}
protected virtual void SetFirstOneActiveIfThereIsNotAny(TagHelperContext context, TagHelperOutput output, List<NavItem> list)
{
if (list.Count > 0 && !list.Any(bc => bc.Active))
{
list.FirstOrDefault().Active = true;
}
}
protected virtual void SetResponsiveness(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.Responsive??false)
{
output.Attributes.AddClass("flex-sm-row");
output.Attributes.AddClass("flex-column");
}
}
protected virtual List<NavItem> InitilizeFormGroupContentsContext(TagHelperContext context, TagHelperOutput output)
{
var items = new List<NavItem>();
context.Items[NavItemContents] = items;
return items;
}
protected virtual void SetAlign(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.Align == AbpNavAlign.Default)
{
return;
}
output.Attributes.AddClass("justify-content-" + TagHelper.Align.ToString().ToLowerInvariant());
}
protected virtual void SetNavStyle(TagHelperContext context, TagHelperOutput output)
{
switch (TagHelper.NavStyle)
{
case NavStyle.Default:
return;
case NavStyle.Pill:
output.Attributes.AddClass("nav-pills");
break;
case NavStyle.Vertical:
output.Attributes.AddClass("flex-column");
break;
case NavStyle.PillVertical:
output.Attributes.AddClass("nav-pills");
output.Attributes.AddClass("flex-column");
break;
}
}
}
}

@ -0,0 +1,9 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Nav
{
public class NavItem
{
public string Html { get; set; }
public bool Active { get; set; }
}
}

@ -0,0 +1,10 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Nav
{
public enum NavStyle
{
Default,
Vertical,
Pill,
PillVertical
}
}

@ -1,5 +1,4 @@
using System.Dynamic;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
{

@ -1,6 +1,4 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices.ComTypes;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;

@ -0,0 +1,9 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Table
{
public enum AbpTableBorderStyle
{
Default,
Bordered,
Borderless
}
}

@ -0,0 +1,16 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Table
{
[HtmlTargetElement("th")]
public class AbpTableHeadScopeTagHelper : AbpTagHelper<AbpTableHeadScopeTagHelper, AbpTableHeadScopeTagHelperService>
{
public AbpThScope Scope { get; set; } = AbpThScope.Default;
public AbpTableHeadScopeTagHelper(AbpTableHeadScopeTagHelperService tagHelperService)
: base(tagHelperService)
{
}
}
}

@ -0,0 +1,27 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Table
{
public class AbpTableHeadScopeTagHelperService : AbpTagHelperService<AbpTableHeadScopeTagHelper>
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
SetScope(context, output);
}
protected virtual void SetScope(TagHelperContext context, TagHelperOutput output)
{
switch (TagHelper.Scope)
{
case AbpThScope.Default:
return;
case AbpThScope.Row:
output.Attributes.Add("scope", "row");
return;
case AbpThScope.Column:
output.Attributes.Add("scope","col");
return;
}
}
}
}

@ -0,0 +1,16 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Table
{
[HtmlTargetElement("thead")]
public class AbpTableHeaderTagHelper : AbpTagHelper<AbpTableHeaderTagHelper, AbpTableHeaderTagHelperService>
{
public AbpTableHeaderTheme Theme { get; set; } = AbpTableHeaderTheme.Default;
public AbpTableHeaderTagHelper(AbpTableHeaderTagHelperService tagHelperService)
: base(tagHelperService)
{
}
}
}

@ -0,0 +1,28 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Table
{
public class AbpTableHeaderTagHelperService : AbpTagHelperService<AbpTableHeaderTagHelper>
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
SetTheme(context, output);
}
protected virtual void SetTheme(TagHelperContext context, TagHelperOutput output)
{
switch (TagHelper.Theme)
{
case AbpTableHeaderTheme.Default:
return;
case AbpTableHeaderTheme.Dark:
output.Attributes.AddClass("thead-dark");
return;
case AbpTableHeaderTheme.Light:
output.Attributes.AddClass("thead-light");
return;
}
}
}
}

@ -0,0 +1,9 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Table
{
public enum AbpTableHeaderTheme
{
Default,
Light,
Dark
}
}

@ -0,0 +1,16 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Table
{
public enum AbpTableStyle
{
Default,
Primary,
Secondary,
Success,
Danger,
Warning,
Info,
Light,
Dark,
Active,
}
}

@ -0,0 +1,19 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Table
{
[HtmlTargetElement("tr")]
[HtmlTargetElement("td")]
public class AbpTableStyleTagHelper : AbpTagHelper<AbpTableStyleTagHelper, AbpTableStyleTagHelperService>
{
public AbpTableStyle AbpTableStyle { get; set; } = AbpTableStyle.Default;
public AbpTableStyle AbpDarkTableStyle { get; set; } = AbpTableStyle.Default;
public AbpTableStyleTagHelper(AbpTableStyleTagHelperService tagHelperService)
: base(tagHelperService)
{
}
}
}

@ -0,0 +1,29 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Table
{
public class AbpTableStyleTagHelperService : AbpTagHelperService<AbpTableStyleTagHelper>
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
SetStyle(context,output);
}
protected virtual void SetStyle(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.AbpTableStyle != AbpTableStyle.Default)
{
output.Attributes.AddClass("table-" + TagHelper.AbpTableStyle.ToString().ToLowerInvariant());
}
}
protected virtual void SetDarkTableStyle(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.AbpDarkTableStyle != AbpTableStyle.Default)
{
output.Attributes.AddClass("bg-" + TagHelper.AbpDarkTableStyle.ToString().ToLowerInvariant());
}
}
}
}

@ -0,0 +1,27 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Table
{
public class AbpTableTagHelper : AbpTagHelper<AbpTableTagHelper, AbpTableTagHelperService>
{
public bool? Responsive { get; set; }
public bool? ResponsiveSm { get; set; }
public bool? ResponsiveMd { get; set; }
public bool? ResponsiveLg { get; set; }
public bool? ResponsiveXl { get; set; }
public bool? DarkTheme { get; set; }
public bool? StripedRows { get; set; }
public bool? HoverableRows { get; set; }
public bool? Small { get; set; }
public AbpTableBorderStyle BorderStyle { get; set; } = AbpTableBorderStyle.Default;
public AbpTableTagHelper(AbpTableTagHelperService tagHelperService)
: base(tagHelperService)
{
}
}
}

@ -0,0 +1,98 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Table
{
public class AbpTableTagHelperService : AbpTagHelperService<AbpTableTagHelper>
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "table";
output.Attributes.AddClass("table");
SetResponsiveness(context, output);
SetTheme(context, output);
SetHoverableRows(context, output);
SetBorderStyle(context, output);
SetSmall(context, output);
SetStripedRows(context, output);
}
protected virtual void SetResponsiveness(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.Responsive ?? false)
{
output.PreElement.SetHtmlContent("<div class=\"table-responsive\">");
}
else if (TagHelper.ResponsiveSm ?? false)
{
output.PreElement.SetHtmlContent("<div class=\"table-responsive-sm\">");
}
else if (TagHelper.ResponsiveMd ?? false)
{
output.PreElement.SetHtmlContent("<div class=\"table-responsive-md\">");
}
else if (TagHelper.ResponsiveLg ?? false)
{
output.PreElement.SetHtmlContent("<div class=\"table-responsive-lg\">");
}
else if (TagHelper.ResponsiveXl ?? false)
{
output.PreElement.SetHtmlContent("<div class=\"table-responsive-xl\">");
}
else
{
return;
}
output.PostElement.SetHtmlContent("</div>");
}
protected virtual void SetTheme(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.DarkTheme ?? false)
{
output.Attributes.AddClass("table-dark");
}
}
protected virtual void SetStripedRows(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.StripedRows ?? false)
{
output.Attributes.AddClass("table-striped");
}
}
protected virtual void SetHoverableRows(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.HoverableRows ?? false)
{
output.Attributes.AddClass("table-hover");
}
}
protected virtual void SetSmall(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.Small ?? false)
{
output.Attributes.AddClass("table-sm");
}
}
protected virtual void SetBorderStyle(TagHelperContext context, TagHelperOutput output)
{
switch (TagHelper.BorderStyle)
{
case AbpTableBorderStyle.Default:
return;
case AbpTableBorderStyle.Bordered:
output.Attributes.AddClass("table-bordered");
return;
case AbpTableBorderStyle.Borderless:
output.Attributes.AddClass("table-borderless");
return;
}
}
}
}

@ -0,0 +1,9 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Table
{
public enum AbpThScope
{
Default,
Row,
Column
}
}

@ -14,5 +14,9 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.AspNetCore.Mvc.UI\Volo.Abp.AspNetCore.Mvc.UI.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="TagHelpers\Navbar\" />
</ItemGroup>
</Project>

File diff suppressed because it is too large Load Diff

@ -71,7 +71,7 @@
<div class="demo-area">
<abp-alert alert-type="Primary">
<h4 abp-alert-header>Header</h4>
<h4>Header</h4>
I'm an abp alert!
</abp-alert>
@ -79,7 +79,7 @@
<div class="code-area">
<pre>
&lt;abp-alert alert-type=&quot;Primary&quot;&gt;
&lt;h4 abp-alert-header&gt;Header&lt;/h4&gt;
&lt;h4&gt;Header&lt;/h4&gt;
I&#39;m an abp alert!
&lt;/abp-alert&gt;
</pre>

@ -12,17 +12,17 @@
<div class="demo-with-code">
<div class="demo-area">
<blockquote>
<abp-blockquote>
<p>"I love deadlines. I love the whooshing noise they make as they go by."</p>
<footer> Douglas Adams, The Salmon of Doubt </footer>
</blockquote>
</abp-blockquote>
</div>
<div class="code-area">
<pre>
&lt;blockquote&gt;
&lt;abp-blockquote&gt;
&lt;p&gt;&quot;I love deadlines. I love the whooshing noise they make as they go by.&quot;&lt;/p&gt;
&lt;footer&gt; Douglas Adams, The Salmon of Doubt &lt;/footer&gt;
&lt;/blockquote&gt;
&lt;/abp-blockquote&gt;
</pre>
</div>
</div>

@ -0,0 +1,34 @@
@page
@model Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components.NavsModel
@{
ViewData["Title"] = "Navs";
}
<h2>Navs</h2>
<p>Based on <a href="https://getbootstrap.com/docs/4.1/components/navs/" target="_blank"> Bootstrap Navs</a>.</p>
<h4># Navs Examples</h4>
<div class="demo-with-code">
<div class="demo-area">
<abp-nav nav-style="Pill" responsive="true" align="Center">
<abp-nav-item href="#">Active</abp-nav-item>
<abp-nav-item href="#">Longer nav link</abp-nav-item>
<abp-nav-item href="#">Link</abp-nav-item>
<abp-nav-item href="#" disabled="true">Disabled</abp-nav-item>
</abp-nav>
</div>
<div class="code-area">
<pre>
&lt;abp-nav nav-style=&quot;Pill&quot; responsive=&quot;true&quot; align=&quot;Center&quot;&gt;
&lt;abp-nav-item href=&quot;#&quot;&gt;Active&lt;/abp-nav-item&gt;
&lt;abp-nav-item href=&quot;#&quot;&gt;Longer nav link&lt;/abp-nav-item&gt;
&lt;abp-nav-item href=&quot;#&quot;&gt;Link&lt;/abp-nav-item&gt;
&lt;abp-nav-item href=&quot;#&quot; disabled=&quot;true&quot;&gt;Disabled&lt;/abp-nav-item&gt;
&lt;/abp-nav&gt;
</pre>
</div>
</div>

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components
{
public class NavsModel : PageModel
{
public void OnGet()
{
}
}
}

@ -0,0 +1,82 @@
@page
@model Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components.TablesModel
@{
ViewData["Title"] = "Tables";
}
<h2>Tables</h2>
<p>Based on <a href="https://getbootstrap.com/docs/4.1/content/Tables/" target="_blank"> Bootstrap Tables</a>.</p>
<h4># Tables Examples</h4>
<div class="demo-with-code">
<div class="demo-area">
<abp-table striped-rows="true" hoverable-rows="true" responsive-sm="true">
<thead theme="Dark">
<tr>
<th scope="Column">#</th>
<th scope="Column">First</th>
<th scope="Column">Last</th>
<th scope="Column">Handle</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="Row">1</th>
<td>Mark</td>
<td>Otto</td>
<td abp-table-style="Danger">mdo</td>
</tr>
<tr abp-table-style="Warning">
<th scope="Row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>fat</td>
</tr>
<tr>
<th scope="Row">3</th>
<td abp-table-style="Success">Larry</td>
<td>the Bird</td>
<td>twitter</td>
</tr>
</tbody>
</abp-table>
</div>
<div class="code-area">
<pre>
&lt;abp-table striped-rows=&quot;true&quot; small=&quot;true&quot; hoverable-rows=&quot;true&quot; responsive-sm=&quot;true&quot;&gt;
&lt;thead theme=&quot;Dark&quot;&gt;
&lt;tr&gt;
&lt;th scope=&quot;Column&quot;&gt;#&lt;/th&gt;
&lt;th scope=&quot;Column&quot;&gt;First&lt;/th&gt;
&lt;th scope=&quot;Column&quot;&gt;Last&lt;/th&gt;
&lt;th scope=&quot;Column&quot;&gt;Handle&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th scope=&quot;Row&quot;&gt;1&lt;/th&gt;
&lt;td&gt;Mark&lt;/td&gt;
&lt;td&gt;Otto&lt;/td&gt;
&lt;td abp-table-style=&quot;Danger&quot;&gt;mdo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr abp-table-style=&quot;Warning&quot;&gt;
&lt;th scope=&quot;Row&quot;&gt;2&lt;/th&gt;
&lt;td&gt;Jacob&lt;/td&gt;
&lt;td&gt;Thornton&lt;/td&gt;
&lt;td&gt;fat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th scope=&quot;Row&quot;&gt;3&lt;/th&gt;
&lt;td abp-table-style=&quot;Success&quot;&gt;Larry&lt;/td&gt;
&lt;td&gt;the Bird&lt;/td&gt;
&lt;td&gt;twitter&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/abp-table&gt;
</pre>
</div>
</div>

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components
{
public class TablesModel : PageModel
{
public void OnGet()
{
}
}
}

@ -25,5 +25,7 @@
<li><a asp-page="Components/images">Images</a></li>
<li><a asp-page="Components/Carousel">Carousel</a></li>
<li><a asp-page="Components/ListGroup">List Groups</a></li>
<li><a asp-page="Components/Tables">Tables</a></li>
<li><a asp-page="Components/Navs">Navs</a></li>
</ul>

Loading…
Cancel
Save