diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Views/Account/Login.cshtml b/src/OrchardCore.Modules/OrchardCore.Users/Views/Account/Login.cshtml index d50f998d470..9764f42bbd2 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/Views/Account/Login.cshtml +++ b/src/OrchardCore.Modules/OrchardCore.Users/Views/Account/Login.cshtml @@ -1,20 +1,14 @@ @using Microsoft.AspNetCore.Identity -@using OrchardCore.DisplayManagement.ModelBinding -@using OrchardCore.Entities -@using OrchardCore.Settings -@using OrchardCore.Users @using OrchardCore.Users.Models @inject SignInManager SignInManager -@inject UserManager UserManager -@inject IDisplayManager LoginFormDisplayManager -@inject IUpdateModelAccessor UpdateModelAccessor @{ ViewLayout = "Layout__Login"; - var loginProviders = (await SignInManager.GetExternalAuthenticationSchemesAsync()).ToList(); + var loginProviders = await SignInManager.GetExternalAuthenticationSchemesAsync(); var disableLocalLogin = Site.As().DisableLocalLogin; + var hasExternalProviders = loginProviders.Any(); } @@ -29,12 +23,15 @@ @if (!disableLocalLogin) { -
+
+

@T["Log in"]

+
+ @await DisplayAsync(Model)
} - @if (loginProviders.Count > 0) + @if (hasExternalProviders) {
diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Views/LoginForm.Edit.cshtml b/src/OrchardCore.Modules/OrchardCore.Users/Views/LoginForm.Edit.cshtml index 55c314870b4..0676fe070ad 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/Views/LoginForm.Edit.cshtml +++ b/src/OrchardCore.Modules/OrchardCore.Users/Views/LoginForm.Edit.cshtml @@ -1,7 +1,4 @@ - -
-

@T["Log in"]

-
+ @if (Model.Content != null) { diff --git a/src/OrchardCore/OrchardCore.ResourceManagement/ResourceManagementConstants.cs b/src/OrchardCore/OrchardCore.ResourceManagement/ResourceManagementConstants.cs new file mode 100644 index 00000000000..314ff306abb --- /dev/null +++ b/src/OrchardCore/OrchardCore.ResourceManagement/ResourceManagementConstants.cs @@ -0,0 +1,8 @@ +namespace OrchardCore.ResourceManagement; + +internal static class ResourceManagementConstants +{ + public static readonly char[] ParameterValuesSeparator = [',', ' ']; + + public const char VersionSeparator = ':'; +} diff --git a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs index a28a1d21315..a9d6e4e17e2 100644 --- a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs +++ b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/ScriptTagHelper.cs @@ -8,8 +8,6 @@ namespace OrchardCore.ResourceManagement.TagHelpers; [HtmlTargetElement("script", Attributes = AtAttributeName)] public class ScriptTagHelper : TagHelper { - private static readonly char[] _separator = [',', ' ']; - private const string NameAttributeName = "asp-name"; private const string SrcAttributeName = "asp-src"; private const string AtAttributeName = "at"; @@ -108,7 +106,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu // This allows additions to the pre registered scripts dependencies. if (!string.IsNullOrEmpty(DependsOn)) { - setting.SetDependencies(DependsOn.Split(_separator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); + setting.SetDependencies(DependsOn.Split(ResourceManagementConstants.ParameterValuesSeparator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); } // Allow Inline to work with both named scripts, and named inline scripts. @@ -161,11 +159,11 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu if (!string.IsNullOrEmpty(DependsOn)) { - var dependencies = DependsOn.Split(_separator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); + var dependencies = DependsOn.Split(ResourceManagementConstants.ParameterValuesSeparator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); foreach (var dependency in dependencies) { - var versionParts = dependency.Split(':'); + var versionParts = dependency.Split(ResourceManagementConstants.VersionSeparator, 2); var resourceName = versionParts[0]; @@ -215,12 +213,12 @@ private void PopulateResourceDefinition(ResourceDefinition definition) if (!string.IsNullOrEmpty(Culture)) { - definition.SetCultures(Culture.Split(_separator, StringSplitOptions.RemoveEmptyEntries)); + definition.SetCultures(Culture.Split(ResourceManagementConstants.ParameterValuesSeparator, StringSplitOptions.RemoveEmptyEntries)); } if (!string.IsNullOrEmpty(DependsOn)) { - definition.SetDependencies(DependsOn.Split(_separator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); + definition.SetDependencies(DependsOn.Split(ResourceManagementConstants.ParameterValuesSeparator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); } if (AppendVersion.HasValue) diff --git a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs index 413175fb279..01171b08cbd 100644 --- a/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs +++ b/src/OrchardCore/OrchardCore.ResourceManagement/TagHelpers/StyleTagHelper.cs @@ -8,7 +8,6 @@ namespace OrchardCore.ResourceManagement.TagHelpers; [HtmlTargetElement("style", Attributes = AtAttributeName)] public class StyleTagHelper : TagHelper { - private static readonly char[] _splitSeparators = [',', ' ']; private const string NameAttributeName = "asp-name"; private const string SrcAttributeName = "asp-src"; private const string AtAttributeName = "at"; @@ -94,7 +93,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu if (!string.IsNullOrEmpty(DependsOn)) { - setting.SetDependencies(DependsOn.Split(_splitSeparators, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); + setting.SetDependencies(DependsOn.Split(ResourceManagementConstants.ParameterValuesSeparator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); } if (At == ResourceLocation.Inline) @@ -158,7 +157,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu // This allows additions to the pre registered style dependencies. if (!string.IsNullOrEmpty(DependsOn)) { - setting.SetDependencies(DependsOn.Split(_splitSeparators, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); + setting.SetDependencies(DependsOn.Split(ResourceManagementConstants.ParameterValuesSeparator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); } var childContent = await output.GetChildContentAsync(); @@ -200,12 +199,12 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu if (!string.IsNullOrEmpty(Culture)) { - definition.SetCultures(Culture.Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); + definition.SetCultures(Culture.Split(ResourceManagementConstants.ParameterValuesSeparator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); } if (!string.IsNullOrEmpty(DependsOn)) { - definition.SetDependencies(DependsOn.Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); + definition.SetDependencies(DependsOn.Split(ResourceManagementConstants.ParameterValuesSeparator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)); } // Also include the style. @@ -256,11 +255,11 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu if (!string.IsNullOrEmpty(DependsOn)) { - var dependencies = DependsOn.Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); + var dependencies = DependsOn.Split(ResourceManagementConstants.ParameterValuesSeparator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); foreach (var dependency in dependencies) { - var versionParts = dependency.Split(':'); + var versionParts = dependency.Split(ResourceManagementConstants.VersionSeparator, 2); var resourceName = versionParts[0]; diff --git a/src/OrchardCore/OrchardCore.Scripting.JavaScript/JavaScriptEngine.cs b/src/OrchardCore/OrchardCore.Scripting.JavaScript/JavaScriptEngine.cs index a4d2213b084..f3c0f902d31 100644 --- a/src/OrchardCore/OrchardCore.Scripting.JavaScript/JavaScriptEngine.cs +++ b/src/OrchardCore/OrchardCore.Scripting.JavaScript/JavaScriptEngine.cs @@ -4,6 +4,7 @@ using Jint.Runtime.Interop; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Primitives; namespace OrchardCore.Scripting.JavaScript; @@ -39,8 +40,15 @@ public IScriptingScope CreateScope(IEnumerable methods, IServicePr return ObjectWrapper.Create(e, (JsonValue)dynamicValue, type); } + if (target is StringValues stringValues) + { + return ObjectWrapper.Create(e, stringValues.Count <= 1 ? stringValues.ToString() : stringValues.ToArray(), type); + } + return ObjectWrapper.Create(e, target, type); }); + + }); foreach (var method in methods) diff --git a/src/docs/releases/3.0.0.md b/src/docs/releases/3.0.0.md index ccbac4db9d4..23fc719d41d 100644 --- a/src/docs/releases/3.0.0.md +++ b/src/docs/releases/3.0.0.md @@ -102,6 +102,17 @@ will return `false` for administrators, even though they still have full access. {% assign isAuthorized = User | has_permission: "AccessAdminPanel" %} ``` +#### LoginForm_Edit Shape Type Modification + +To simplify the `LoginForm.Edit.cshtml` view, the following code has been moved to `Views/Account/Login.cshtml`: + +```html +

@T["Log in"]

+
+``` + +If you are overriding the `Views/Account/Login.cshtml` view, you may want to add the above code to your custom version for consistency. + ### ReCaptcha In the previous implementation, the ReCaptcha module supported two modes: `AlwaysShow` and `PreventRobots`. To simplify the module and enhance integration, the `PreventRobots` mode and its related components have been removed. Going forward, **only the `AlwaysShow` mode** will be supported.