diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/en.json b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/en.json
index 61072f672c..d921873fa7 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/en.json
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/en.json
@@ -2,6 +2,7 @@
"culture": "en",
"texts": {
"Close": "Close",
- "Save": "Save"
+ "Save": "Save",
+ "SavingWithThreeDot": "Saving..."
}
}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/tr.json b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/tr.json
index cb7c60111c..6f05d798df 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/tr.json
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/tr.json
@@ -2,6 +2,7 @@
"culture": "tr",
"texts": {
"Close": "Kapat",
- "Save": "Kaydet"
+ "Save": "Kaydet",
+ "SavingWithThreeDot": "Kaydediliyor..."
}
}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpCardTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpCardTagHelper.cs
deleted file mode 100644
index 1ca11effc6..0000000000
--- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpCardTagHelper.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using Microsoft.AspNetCore.Razor.TagHelpers;
-
-namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
-{
- public class AbpCardTagHelper : TagHelper
- {
- public override void Process(TagHelperContext context, TagHelperOutput output)
- {
- //TODO: Remove abp-modal HTML element which is unnecessary!
- output.TagName = "div";
- output.Attributes.Add("class", "card"); //TODO: Append class if any exists
- }
- }
-
- public class AbpCardHeaderTagHelper : TagHelper
- {
- public override void Process(TagHelperContext context, TagHelperOutput output)
- {
- //TODO: Remove abp-modal HTML element which is unnecessary!
- output.TagName = "div";
- output.Attributes.Add("class", "card-header"); //TODO: Append class if any exists
- }
- }
-
- public class AbpCardBodyTagHelper : TagHelper
- {
- public override void Process(TagHelperContext context, TagHelperOutput output)
- {
- //TODO: Remove abp-modal HTML element which is unnecessary!
- output.TagName = "div";
- output.Attributes.Add("class", "card-body"); //TODO: Append class if any exists
- }
- }
-}
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperAttributeListExtensions.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperAttributeListExtensions.cs
new file mode 100644
index 0000000000..c3de6c317b
--- /dev/null
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperAttributeListExtensions.cs
@@ -0,0 +1,34 @@
+using System.Collections.Generic;
+using Microsoft.AspNetCore.Razor.TagHelpers;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
+{
+ public static class AbpTagHelperAttributeListExtensions
+ {
+ public static void AddClass(this TagHelperAttributeList attributes, string className)
+ {
+ var classAttribute = attributes["class"];
+ if (classAttribute == null)
+ {
+ attributes.Add("class", className);
+ }
+ else
+ {
+ //TODO: Check if it's already added before!
+ attributes.SetAttribute("class", classAttribute.Value + " " + className);
+ }
+ }
+
+ public static void RemoveClass(this TagHelperAttributeList attributes, string className)
+ {
+ var classAttribute = attributes["class"];
+ if (classAttribute == null)
+ {
+ return;
+ }
+
+ //Can be optimized?
+ attributes.SetAttribute("class", classAttribute.Value.ToString().Split(' ').RemoveAll(c => c == className).JoinAsString(" "));
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardBodyTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardBodyTagHelper.cs
new file mode 100644
index 0000000000..4b7e1d9793
--- /dev/null
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardBodyTagHelper.cs
@@ -0,0 +1,14 @@
+using Microsoft.AspNetCore.Razor.TagHelpers;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
+{
+ public class AbpCardBodyTagHelper : TagHelper
+ {
+ public override void Process(TagHelperContext context, TagHelperOutput output)
+ {
+ //TODO: Remove abp-modal HTML element which is unnecessary!
+ output.TagName = "div";
+ output.Attributes.AddClass("card-body");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardHeaderTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardHeaderTagHelper.cs
new file mode 100644
index 0000000000..4637809a0c
--- /dev/null
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardHeaderTagHelper.cs
@@ -0,0 +1,14 @@
+using Microsoft.AspNetCore.Razor.TagHelpers;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
+{
+ public class AbpCardHeaderTagHelper : TagHelper
+ {
+ public override void Process(TagHelperContext context, TagHelperOutput output)
+ {
+ //TODO: Remove abp-modal HTML element which is unnecessary!
+ output.TagName = "div";
+ output.Attributes.AddClass("card-header");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardTagHelper.cs
new file mode 100644
index 0000000000..41122375f6
--- /dev/null
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardTagHelper.cs
@@ -0,0 +1,14 @@
+using Microsoft.AspNetCore.Razor.TagHelpers;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
+{
+ public class AbpCardTagHelper : TagHelper
+ {
+ public override void Process(TagHelperContext context, TagHelperOutput output)
+ {
+ //TODO: Remove abp-modal HTML element which is unnecessary!
+ output.TagName = "div";
+ output.Attributes.AddClass("card");
+ }
+ }
+}
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpModalBodyTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalBodyTagHelper.cs
similarity index 62%
rename from src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpModalBodyTagHelper.cs
rename to src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalBodyTagHelper.cs
index a11f2fbefc..36b2d793e1 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpModalBodyTagHelper.cs
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalBodyTagHelper.cs
@@ -1,13 +1,13 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
-namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
{
public class AbpModalBodyTagHelper : TagHelper
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "div";
- output.Attributes.Add("class", "modal-body"); //TODO: Append class if any exists
+ output.Attributes.AddClass("modal-body");
}
}
}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpModalFooterTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelper.cs
similarity index 78%
rename from src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpModalFooterTagHelper.cs
rename to src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelper.cs
index 62d5a534ad..0e563c28e1 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpModalFooterTagHelper.cs
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelper.cs
@@ -3,7 +3,7 @@ using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.Extensions.Localization;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Localization.Resource;
-namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
{
public class AbpModalFooterTagHelper : TagHelper
{
@@ -17,7 +17,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "div";
- output.Attributes.Add("class", "modal-footer"); //TODO: Append class if any exists
+ output.Attributes.AddClass("modal-footer");
output.Content.SetHtmlContent(CreateContent());
}
@@ -26,7 +26,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
var sb = new StringBuilder();
sb.AppendLine("");
- sb.AppendLine("");
+ sb.AppendLine("");
return sb.ToString();
}
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpModalHeaderTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelper.cs
similarity index 84%
rename from src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpModalHeaderTagHelper.cs
rename to src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelper.cs
index 703fcb58fc..d50de979fe 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpModalHeaderTagHelper.cs
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelper.cs
@@ -1,7 +1,7 @@
using System.Text;
using Microsoft.AspNetCore.Razor.TagHelpers;
-namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
{
public class AbpModalHeaderTagHelper : TagHelper
{
@@ -10,7 +10,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "div";
- output.Attributes.Add("class", "modal-header"); //TODO: Append class if any exists
+ output.Attributes.AddClass("modal-header");
output.Content.SetHtmlContent(CreateContent());
}
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpModalTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelper.cs
similarity index 94%
rename from src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpModalTagHelper.cs
rename to src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelper.cs
index 36dccf2656..b559975660 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpModalTagHelper.cs
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelper.cs
@@ -1,7 +1,7 @@
using System.Text;
using Microsoft.AspNetCore.Razor.TagHelpers;
-namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
{
public class AbpModalTagHelper : TagHelper
{
diff --git a/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml b/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml
index ff2834130f..bf7433df46 100644
--- a/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml
+++ b/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml
@@ -14,6 +14,7 @@