diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs index de5e844888..7ecb351290 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs +++ b/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 = ""; + var preElementHtml = ""; var postElementHtml = ""; 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; + } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml index 624f17cf20..779494d70f 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml @@ -31,20 +31,23 @@

Example

-
- - - Popover Default - - - Popover With Title - - - Dismissible Popover - - - Disabled Popover - +
+ + + Popover Default + + + Popover With Title + + + Dismissible Popover + + + Disabled Popover + + + Disabled Popover +