Browse Source

Added multi usage attributes together

pull/3282/head
Galip Tolga Erdem 6 years ago
parent
commit
6d0759ff76
  1. 66
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs
  2. 31
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml

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

@ -1,4 +1,5 @@
using System.Linq;
using System;
using System.Linq;
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover
@ -13,44 +14,67 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover
SetDataPlacement(context, output);
SetPopoverData(context, output);
SetDataTriggerIfDismissible(context, output);
SetDataTriggerIfHoverable(context, output);
}
else
{
SetDisabled(context, output);
}
}
}
protected virtual void SetDisabled(TagHelperContext context, TagHelperOutput output)
{
var triggerAsHtml = TagHelper.Dismissible ?? false ? "datatrigger=\"focus\" " : "";
// If not dismissable for hoverable condition
if (string.IsNullOrEmpty(triggerAsHtml))
var triggerAsHtml = TagHelper.Dismissible ?? false ? "data-trigger=\"focus\" " : "";
if (TagHelper.Hoverable ?? false)
{
triggerAsHtml = TagHelper.Hoverable ?? false ? "data-trigger=\"hover\" " : string.Empty;
if (triggerAsHtml.Contains("focus"))
{
triggerAsHtml = triggerAsHtml.Replace("focus", "focus hover");
}
else
{
triggerAsHtml = "data-trigger=\"hover\" ";
}
}
var dataPlacementAsHtml = "data-placement=\"" + GetDirectory().ToString().ToLowerInvariant() + "\" ";
// data-placement="default" with data-trigger="focus" causes Cannot read property 'indexOf' of undefined at computeAutoPlacement(bootstrap.bundle.js?_v=637146714627330435:2185) error
if (IsDismissibleOrHoverable() && GetDirectory() == PopoverDirectory.Default)
{
//dataPlacementAsHtml = string.Empty; //bootstrap default placement is right, abp's is top.
dataPlacementAsHtml = dataPlacementAsHtml.Replace("default", "top");
}
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 preElementHtml = "<span tabindex=\"0\" 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");
}
// Dismissible has priority over hoverable
else if (TagHelper.Hoverable ?? false)
{
output.Attributes.Add("data-trigger", "hover");
}
}
protected virtual void SetDataTriggerIfHoverable(TagHelperContext context, TagHelperOutput output)
{
if (TagHelper.Hoverable ?? false)
{
//If already has focus data trigger
if (output.Attributes.TryGetAttribute("data-trigger", out _))
{
output.Attributes.SetAttribute(new TagHelperAttribute("data-trigger", "focus hover"));
}
else
{
output.Attributes.Add("data-trigger", "hover");
}
}
}
protected virtual void SetDataToggle(TagHelperContext context, TagHelperOutput output)
@ -111,5 +135,17 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover
return PopoverDirectory.Default;
}
protected virtual bool IsDismissibleOrHoverable()
{
if (TagHelper.Dismissible ?? false)
{
return true;
}
if (TagHelper.Hoverable ?? false)
{
return true;
}
return false;
}
}
}

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

@ -31,20 +31,23 @@
<h4>Example</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" hoverable="true">
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 class="demo-area">
<abp-button abp-popover="Hi, i'm popover content!">
Popover Default
</abp-button>
<abp-button abp-popover-top="Hi, i'm hoverable popover content!" title="Popover Title" hoverable="true">
Popover With Title
</abp-button>
<abp-button abp-popover-right="Hi, i'm dismissible popover content!" title="Popover Title" dismissible="true">
Dismissible Popover
</abp-button>
<abp-button abp-popover-left="Hi, i'm disabled popover content!" title="Popover Title" disabled="true">
Disabled Popover
</abp-button>
<abp-button abp-popover="Hi, i'm disabled dismissible hoverable popover content!" title="Popover Title" disabled="true" dismissible="true" hoverable="true">
Disabled Popover
</abp-button>
</div>
<div class="code-area">
<abp-tabs>

Loading…
Cancel
Save