Skip to content

Commit 790f625

Browse files
Updates to Modals
1 parent bc7524f commit 790f625

File tree

3 files changed

+94
-2
lines changed

3 files changed

+94
-2
lines changed

src/AspNetCore.Utilities.Bootstrap5TagHelpers.Sample/Views/Home/Index.cshtml

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@
336336
Launch Demo
337337
</modal-toggle>
338338

339-
<modal id="testing" class="im-weird">
339+
<modal id="testing" class="im-weird" vertically-centered="true" >
340340
<modal-header Title="Testing Modal Header">
341341
<modal-header-dismiss></modal-header-dismiss>
342342
</modal-header>
@@ -367,7 +367,45 @@
367367
&lt;/modal&gt;
368368
</code>
369369
</td>
370-
</tr>
370+
</tr>
371+
<tr>
372+
<td>
373+
<modal-toggle Target="testing-secondary">
374+
Launch Demo
375+
</modal-toggle>
376+
377+
<modal id="testing-secondary" class="im-weird" vertically-centered="true" static-backdrop="true" >
378+
<modal-header Title="Testing Modal Header">
379+
<modal-header-dismiss></modal-header-dismiss>
380+
</modal-header>
381+
<modal-body>
382+
<form-input asp-for="FirstName"></form-input>
383+
</modal-body>
384+
<modal-footer>
385+
<bs-button bs-color="Secondary" dismisses="modal">Close</bs-button>
386+
</modal-footer>
387+
</modal>
388+
</td>
389+
<td>
390+
<code>
391+
&lt;modal-toggle Target=&quot;testing&quot;&gt;
392+
Launch Demo
393+
&lt;/modal-toggle&gt;
394+
395+
&lt;modal id=&quot;testing&quot;&gt;
396+
&lt;modal-header Title=&quot;Testing Modal Header&quot;&gt;
397+
&lt;modal-header-dismiss&gt;&lt;/modal-header-dismiss&gt;
398+
&lt;/modal-header&gt;
399+
&lt;modal-body&gt;
400+
&lt;form-input asp-for=&quot;FirstName&quot;&gt;&lt;/form-input&gt;
401+
&lt;/modal-body&gt;
402+
&lt;modal-footer&gt;
403+
&lt;button type=&quot;button&quot; class=&quot;btn btn-secondary&quot; data-dismiss=&quot;modal&quot;&gt;Close&lt;/button&gt;
404+
&lt;/modal-footer&gt;
405+
&lt;/modal&gt;
406+
</code>
407+
</td>
408+
</tr>
371409
</tbody>
372410
</table>
373411

src/AspNetCore.Utilities.Bootstrap5TagHelpers.Tests/Modal/ModalTagHelperTests.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ public async Task Should_Render_Static_Backdrop_Attribute_When_Flagged(bool stat
139139
}
140140
}
141141

142+
142143
[Fact]
143144
public async Task Should_Render_Proper_InnerHtmlStructure_WithNoChildContent()
144145
{
@@ -153,4 +154,36 @@ public async Task Should_Render_Proper_InnerHtmlStructure_WithNoChildContent()
153154
//Assert
154155
Assert.Equal(expectedContent, output.Content.GetContent());
155156
}
157+
158+
[Fact]
159+
public async Task Should_Render_Centered_Class_When_Flagged()
160+
{
161+
//Arrange
162+
TagHelperContext context = MakeTagHelperContext();
163+
TagHelperOutput output = MakeTagHelperOutput(" ");
164+
var expectedContent = "<div class=\"modal-dialog modal-dialog-centered\"><div class=\"modal-content\"></div></div>";
165+
166+
//Act
167+
var helper = new ModalTagHelper { VerticallyCentered = true };
168+
await helper.ProcessAsync(context, output);
169+
170+
//Assert
171+
Assert.Equal(expectedContent, output.Content.GetContent());
172+
}
173+
174+
[Fact]
175+
public async Task Should_Render_Scrollable_Class_When_Flagged()
176+
{
177+
//Arrange
178+
TagHelperContext context = MakeTagHelperContext();
179+
TagHelperOutput output = MakeTagHelperOutput(" ");
180+
var expectedContent = "<div class=\"modal-dialog modal-dialog-scrollable\"><div class=\"modal-content\"></div></div>";
181+
182+
//Act
183+
var helper = new ModalTagHelper { Scrollable = true };
184+
await helper.ProcessAsync(context, output);
185+
186+
//Assert
187+
Assert.Equal(expectedContent, output.Content.GetContent());
188+
}
156189
}

src/AspNetCore.Utilities.Bootstrap5TagHelpers/Modal/ModalTagHelper.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,23 @@ public class ModalTagHelper : TagHelper
1818
/// </summary>
1919
public bool StaticBackdrop { get; set; } = false;
2020

21+
/// <summary>
22+
/// If set to true the modal will have the added class of modal-dialog-centered
23+
/// </summary>
24+
public bool VerticallyCentered { get; set; } = false;
25+
26+
/// <summary>
27+
/// If set to true the modal will have the added class of modal-dialog-scrollable
28+
/// </summary>
29+
public bool Scrollable { get; set; } = false;
30+
31+
public override void Init(TagHelperContext context)
32+
{
33+
//Reset
34+
if(context.Items.ContainsKey(typeof(ModalContext)))
35+
context.Items.Remove(typeof(ModalContext));
36+
}
37+
2138
/// <summary>
2239
/// Renders the tag helper
2340
/// </summary>
@@ -53,6 +70,10 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu
5370
output.Attributes.Add("tabindex", "-1");
5471
var dialogWrapper = new TagBuilder("div");
5572
dialogWrapper.AddCssClass("modal-dialog");
73+
if (VerticallyCentered)
74+
dialogWrapper.AddCssClass("modal-dialog-centered");
75+
if (Scrollable)
76+
dialogWrapper.AddCssClass("modal-dialog-scrollable");
5677
var dialogContent = new TagBuilder("div");
5778
dialogContent.AddCssClass("modal-content");
5879
dialogContent.InnerHtml.AppendHtml(body);

0 commit comments

Comments
 (0)