Browse Source

Merge pull request #1 from jack-gaojz/dev-issue-6369

[dev-issue-6369]Added the "scrollable" feature for the Bootstrap Modal p…
pull/6659/head
Jack Gao 6 years ago
committed by GitHub
parent
commit
1c1c0d5fa6
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelper.cs
  2. 230
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelper.cs

@ -6,6 +6,8 @@
public bool? Centered { get; set; } = false;
public bool? Scrollable { get; set; } = false;
public bool? Static { get; set; } = false;
public AbpModalTagHelper(AbpModalTagHelperService tagHelperService)

230
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs

@ -1,112 +1,118 @@
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Razor.TagHelpers;
using System.Text;
using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
{
public class AbpModalTagHelperService : AbpTagHelperService<AbpModalTagHelper>
{
public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagName = null;
var childContent = await output.GetChildContentAsync();
SetContent(context, output, childContent);
}
protected virtual void SetContent(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent)
{
var modalContent = GetModalContentElement(context, output, childContent);
var modalDialog = GetModalDialogElement(context, output, modalContent);
var modal = GetModal(context, output, modalDialog);
output.Content.SetHtmlContent(modal);
}
protected virtual TagBuilder GetModalContentElement(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent)
{
var element = new TagBuilder("div");
element.AddCssClass(GetModalContentClasses());
element.InnerHtml.SetHtmlContent(childContent);
return element;
}
protected virtual TagBuilder GetModalDialogElement(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml)
{
var element = new TagBuilder("div");
element.AddCssClass(GetModalDialogClasses());
element.Attributes.Add("role", "document");
element.InnerHtml.SetHtmlContent(innerHtml);
return element;
}
protected virtual TagBuilder GetModal(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml)
{
var element = new TagBuilder("div");
element.AddCssClass(GetModalClasses());
element.Attributes.Add("tabindex", "-1");
element.Attributes.Add("role", "dialog");
element.Attributes.Add("aria-hidden", "true");
foreach (var attr in output.Attributes)
{
element.Attributes.Add(attr.Name, attr.Value.ToString());
}
SetDataAttributes(element);
element.InnerHtml.SetHtmlContent(innerHtml);
return element;
}
protected virtual string GetModalClasses()
{
return "modal fade";
}
protected virtual string GetModalDialogClasses()
{
var classNames = new StringBuilder("modal-dialog");
if (TagHelper.Centered ?? false)
{
classNames.Append(" ");
classNames.Append("modal-dialog-centered");
}
if (TagHelper.Size != AbpModalSize.Default)
{
classNames.Append(" ");
classNames.Append(TagHelper.Size.ToClassName());
}
return classNames.ToString();
}
protected virtual string GetModalContentClasses()
{
return "modal-content";
}
protected virtual string GetDataAttributes()
{
if (TagHelper.Static == true)
{
return "data-backdrop=\"static\" ";
}
return string.Empty;
}
protected virtual void SetDataAttributes(TagBuilder builder)
{
if (TagHelper.Static == true)
{
builder.Attributes.Add("data-backdrop", "static");
}
}
}
}
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Razor.TagHelpers;
using System.Text;
using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
{
public class AbpModalTagHelperService : AbpTagHelperService<AbpModalTagHelper>
{
public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagName = null;
var childContent = await output.GetChildContentAsync();
SetContent(context, output, childContent);
}
protected virtual void SetContent(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent)
{
var modalContent = GetModalContentElement(context, output, childContent);
var modalDialog = GetModalDialogElement(context, output, modalContent);
var modal = GetModal(context, output, modalDialog);
output.Content.SetHtmlContent(modal);
}
protected virtual TagBuilder GetModalContentElement(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent)
{
var element = new TagBuilder("div");
element.AddCssClass(GetModalContentClasses());
element.InnerHtml.SetHtmlContent(childContent);
return element;
}
protected virtual TagBuilder GetModalDialogElement(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml)
{
var element = new TagBuilder("div");
element.AddCssClass(GetModalDialogClasses());
element.Attributes.Add("role", "document");
element.InnerHtml.SetHtmlContent(innerHtml);
return element;
}
protected virtual TagBuilder GetModal(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml)
{
var element = new TagBuilder("div");
element.AddCssClass(GetModalClasses());
element.Attributes.Add("tabindex", "-1");
element.Attributes.Add("role", "dialog");
element.Attributes.Add("aria-hidden", "true");
foreach (var attr in output.Attributes)
{
element.Attributes.Add(attr.Name, attr.Value.ToString());
}
SetDataAttributes(element);
element.InnerHtml.SetHtmlContent(innerHtml);
return element;
}
protected virtual string GetModalClasses()
{
return "modal fade";
}
protected virtual string GetModalDialogClasses()
{
var classNames = new StringBuilder("modal-dialog");
if (TagHelper.Centered ?? false)
{
classNames.Append(" ");
classNames.Append("modal-dialog-centered");
}
if (TagHelper.Scrollable ?? false)
{
classNames.Append(" ");
classNames.Append("modal-dialog-scrollable");
}
if (TagHelper.Size != AbpModalSize.Default)
{
classNames.Append(" ");
classNames.Append(TagHelper.Size.ToClassName());
}
return classNames.ToString();
}
protected virtual string GetModalContentClasses()
{
return "modal-content";
}
protected virtual string GetDataAttributes()
{
if (TagHelper.Static == true)
{
return "data-backdrop=\"static\" ";
}
return string.Empty;
}
protected virtual void SetDataAttributes(TagBuilder builder)
{
if (TagHelper.Static == true)
{
builder.Attributes.Add("data-backdrop", "static");
}
}
}
}

Loading…
Cancel
Save