Browse Source

abp popover tag helper

pull/279/head
yekalkan 9 years ago
parent
commit
9a1b7ea339
  1. 37
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelper.cs
  2. 109
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs
  3. 11
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/PopoverDirectory.cs
  4. 39
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tooltip/AbpTooltipTagHelperService.cs
  5. 2148
      test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Logs/logs.txt
  6. 47
      test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml
  7. 17
      test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml.cs
  8. 1
      test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Index.cshtml

37
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelper.cs

@ -0,0 +1,37 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover
{
[HtmlTargetElement("button", Attributes = "abp-popover")]
[HtmlTargetElement("button", Attributes = "abp-popover-right")]
[HtmlTargetElement("button", Attributes = "abp-popover-left")]
[HtmlTargetElement("button", Attributes = "abp-popover-top")]
[HtmlTargetElement("button", Attributes = "abp-popover-bottom")]
[HtmlTargetElement("abp-button", Attributes = "abp-popover")]
[HtmlTargetElement("abp-button", Attributes = "abp-popover-right")]
[HtmlTargetElement("abp-button", Attributes = "abp-popover-left")]
[HtmlTargetElement("abp-button", Attributes = "abp-popover-top")]
[HtmlTargetElement("abp-button", Attributes = "abp-popover-bottom")]
public class AbpPopoverTagHelper : AbpTagHelper<AbpPopoverTagHelper, AbpPopoverTagHelperService>
{
public bool? Disabled { get; set; }
public bool? Dismissible { get; set; }
public string AbpPopover { get; set; }
public string AbpPopoverRight { get; set; }
public string AbpPopoverLeft { get; set; }
public string AbpPopoverTop { get; set; }
public string AbpPopoverBottom { get; set; }
public AbpPopoverTagHelper(AbpPopoverTagHelperService tagHelperService)
: base(tagHelperService)
{
}
}
}

109
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs

@ -0,0 +1,109 @@
using System.Linq;
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover
{
public class AbpPopoverTagHelperService : AbpTagHelperService<AbpPopoverTagHelper>
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (!TagHelper.Disabled??true)
{
SetDataToggle(context, output);
SetDataPlacement(context, output);
SetPopoverData(context, output);
SetDataTriggerIfDismissible(context, output);
}
else
{
SetDisabled(context,output);
}
}
protected virtual void SetDisabled(TagHelperContext context, TagHelperOutput output)
{
var triggerAsHtml = TagHelper.Dismissible ?? false ? "datatrigger=\"focus\" " : "";
var dataPlacementAsHtml = "data-placement=\"" +GetDirectory().ToString().ToLowerInvariant() + "\" ";
var titleAttribute = output.Attributes.FirstOrDefault(at => at.Name == "title");
var titleAsHtml = titleAttribute == null? "":"title=\""+ titleAttribute.Value +"\" ";
var preElementHtml = "<span class=\"d-inline-block\" "+ titleAsHtml + triggerAsHtml + dataPlacementAsHtml + "data-toggle=\"popover\" data-content=\"" +GetDataContent()+"\">";
var postElementHtml = "</span>";
output.PreElement.SetHtmlContent(preElementHtml);
output.PostElement.SetHtmlContent(postElementHtml);
output.Attributes.Add("style", "pointer-events: none;");
}
protected virtual void SetDataTriggerIfDismissible(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.Dismissible ?? false)
{
output.Attributes.Add("data-trigger", "focus");
}
}
protected virtual void SetDataToggle(TagHelperContext context, TagHelperOutput output)
{
output.Attributes.Add("data-toggle", "popover");
}
protected virtual void SetDataPlacement(TagHelperContext context, TagHelperOutput output)
{
var directory = GetDirectory();
if (directory == PopoverDirectory.Default)
{
directory = PopoverDirectory.Bottom;
}
output.Attributes.Add("data-placement", directory.ToString().ToLowerInvariant());
}
protected virtual void SetPopoverData(TagHelperContext context, TagHelperOutput output)
{
output.Attributes.Add("data-content", GetDataContent());
}
protected virtual string GetDataContent()
{
switch (GetDirectory())
{
case PopoverDirectory.Top:
return TagHelper.AbpPopoverTop;
case PopoverDirectory.Right:
return TagHelper.AbpPopoverRight;
case PopoverDirectory.Bottom:
return TagHelper.AbpPopoverBottom;
case PopoverDirectory.Left:
return TagHelper.AbpPopoverLeft;
default:
return TagHelper.AbpPopover;
}
}
protected virtual PopoverDirectory GetDirectory()
{
if (!string.IsNullOrWhiteSpace(TagHelper.AbpPopoverTop))
{
return PopoverDirectory.Top;
}
if (!string.IsNullOrWhiteSpace(TagHelper.AbpPopoverBottom))
{
return PopoverDirectory.Bottom;
}
if (!string.IsNullOrWhiteSpace(TagHelper.AbpPopoverRight))
{
return PopoverDirectory.Right;
}
if (!string.IsNullOrWhiteSpace(TagHelper.AbpPopoverLeft))
{
return PopoverDirectory.Left;
}
return PopoverDirectory.Default;
}
}
}

11
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/PopoverDirectory.cs

@ -0,0 +1,11 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover
{
public enum PopoverDirectory
{
Default,
Right,
Left,
Bottom,
Top
}
}

39
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tooltip/AbpTooltipTagHelperService.cs

@ -26,6 +26,23 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tooltip
output.Attributes.Add("title", GetTitle());
}
protected virtual string GetTitle()
{
switch (GetDirectory())
{
case TooltipDirectory.Top:
return TagHelper.AbpTooltipTop;
case TooltipDirectory.Right:
return TagHelper.AbpTooltipRight;
case TooltipDirectory.Bottom:
return TagHelper.AbpTooltipBottom;
case TooltipDirectory.Left:
return TagHelper.AbpTooltipLeft;
default:
return TagHelper.AbpTooltip;
}
}
protected virtual TooltipDirectory GetDirectory()
{
if (!string.IsNullOrWhiteSpace(TagHelper.AbpTooltipTop))
@ -47,27 +64,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tooltip
return TooltipDirectory.Bottom;
}
protected virtual string GetTitle()
{
if (!string.IsNullOrWhiteSpace(TagHelper.AbpTooltipTop))
{
return TagHelper.AbpTooltipTop;
}
if (!string.IsNullOrWhiteSpace(TagHelper.AbpTooltipRight))
{
return TagHelper.AbpTooltipRight;
}
if (!string.IsNullOrWhiteSpace(TagHelper.AbpTooltipBottom))
{
return TagHelper.AbpTooltipBottom;
}
if (!string.IsNullOrWhiteSpace(TagHelper.AbpTooltipLeft))
{
return TagHelper.AbpTooltipLeft;
}
return TagHelper.AbpTooltip;
}
}
}

2148
test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Logs/logs.txt

File diff suppressed because it is too large

47
test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml

@ -0,0 +1,47 @@
@page
@model Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components.PopoversModel
@{
ViewData["Title"] = "Badges";
}
<h2>Popovers</h2>
<p>Based on <a href="https://getbootstrap.com/docs/4.1/components/Popovers/" target="_blank"> Bootstrap Popovers</a>.</p>
<h4># Popovers Examples</h4>
<div class="demo-with-code">
<div class="demo-area">
<abp-button abp-popover="Hi, i'm popover content!">
Popover Default
</abp-button>
<abp-button abp-popover-top="Hi, i'm popover content!" title="Popover Title">
Popover With Title
</abp-button>
<abp-button abp-popover-right="Hi, i'm popover content!" title="Popover Title" dismissible="true">
Dismissible Popover
</abp-button>
<abp-button abp-popover-left="Hi, i'm popover content!" title="Popover Title" disabled="true">
Disabled Popover
</abp-button>
</div>
<div class="code-area">
<pre>
&lt;abp-button abp-popover=&quot;Hi, i&#39;m popover content!&quot;&gt;
Popover Default
&lt;/abp-button&gt;
&lt;abp-button abp-popover-top=&quot;Hi, i&#39;m popover content!&quot; title=&quot;Popover Title&quot;&gt;
Popover With Title
&lt;/abp-button&gt;
&lt;abp-button abp-popover-right=&quot;Hi, i&#39;m popover content!&quot; title=&quot;Popover Title&quot; dismissible=&quot;true&quot;&gt;
Dismissible Popover
&lt;/abp-button&gt;
&lt;abp-button abp-popover-left=&quot;Hi, i&#39;m popover content!&quot; title=&quot;Popover Title&quot; disabled=&quot;true&quot;&gt;
Disabled Popover
&lt;/abp-button&gt;
</pre>
</div>
</div>

17
test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml.cs

@ -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 PopoversModel : PageModel
{
public void OnGet()
{
}
}
}

1
test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Index.cshtml

@ -18,5 +18,6 @@
<li><a asp-page="Components/Modals">Modals</a></li>
<li><a asp-page="Components/collapse">Collapse</a></li>
<li><a asp-page="Components/tooltips">Tooltips</a></li>
<li><a asp-page="Components/Popovers">Popovers</a></li>
</ul>

Loading…
Cancel
Save