diff --git a/src/Web/Grand.Web.Common/TagHelpers/IResourceManager.cs b/src/Web/Grand.Web.Common/TagHelpers/IResourceManager.cs index de81e772c..ba98fb9a3 100644 --- a/src/Web/Grand.Web.Common/TagHelpers/IResourceManager.cs +++ b/src/Web/Grand.Web.Common/TagHelpers/IResourceManager.cs @@ -10,18 +10,18 @@ public interface IResourceManager /// Registers a script tag on the head /// /// - void RegisterHeadScript(IHtmlContent script); + void RegisterHeadScript(IHtmlContent script, int order); /// /// Registers a custom script tag on at the header. /// - void RegisterHeaderScript(IHtmlContent script); + void RegisterHeaderScript(IHtmlContent script, int order); /// /// Registers a custom script tag on at the foot. /// /// - void RegisterFootScript(IHtmlContent script); + void RegisterFootScript(IHtmlContent script, int order); /// /// Registers a custom template tag. diff --git a/src/Web/Grand.Web.Common/TagHelpers/ResourceManager.cs b/src/Web/Grand.Web.Common/TagHelpers/ResourceManager.cs index df9f7f286..ef1f60a11 100644 --- a/src/Web/Grand.Web.Common/TagHelpers/ResourceManager.cs +++ b/src/Web/Grand.Web.Common/TagHelpers/ResourceManager.cs @@ -8,60 +8,49 @@ namespace Grand.Web.Common.TagHelpers { public class ResourceManager : IResourceManager { - private List _headScripts; - private List _headerScripts; - private List _footScripts; + private List<(IHtmlContent content, int order)> _headScripts; + private List<(IHtmlContent content, int order)> _headerScripts; + private List<(IHtmlContent content, int order)> _footScripts; private List _templates; private List _links; public ResourceManager() { _links = new List(); + _headScripts = new List<(IHtmlContent content, int order)>(); + _headerScripts = new List<(IHtmlContent content, int order)>(); + _footScripts = new List<(IHtmlContent content, int order)>(); } public IEnumerable GetRegisteredHeadScripts() { - return _headScripts == null ? Enumerable.Empty() : _headScripts; + return _headScripts.OrderBy(x => x.order).Select(x => x.content); } public IEnumerable GetRegisteredHeaderScripts() { - return _headerScripts == null ? Enumerable.Empty() : _headerScripts; + return _headerScripts.OrderBy(x => x.order).Select(x => x.content); } public IEnumerable GetRegisteredFootScripts() { - return _footScripts == null ? Enumerable.Empty() : _footScripts; + return _footScripts.OrderBy(x => x.order).Select(x => x.content); } public IEnumerable GetRegisteredTemplates() { return _templates == null ? Enumerable.Empty() : _templates; } - public void RegisterHeadScript(IHtmlContent script) + public void RegisterHeadScript(IHtmlContent script, int order) { - if (_headScripts == null) - { - _headScripts = new List(); - } - _headScripts.Add(script); + _headScripts.Add((script, order)); } - public void RegisterHeaderScript(IHtmlContent script) + public void RegisterHeaderScript(IHtmlContent script, int order) { - if (_headerScripts == null) - { - _headerScripts = new List(); - } - - _headerScripts.Add(script); + _headerScripts.Add((script, order)); } - public void RegisterFootScript(IHtmlContent script) + public void RegisterFootScript(IHtmlContent script, int order) { - if (_footScripts == null) - { - _footScripts = new List(); - } - - _footScripts.Add(script); + _footScripts.Add((script, order)); } public void RegisterTemplate(IHtmlContent script) { diff --git a/src/Web/Grand.Web.Common/TagHelpers/ScriptTagHelper.cs b/src/Web/Grand.Web.Common/TagHelpers/ScriptTagHelper.cs index ef7b0b00e..7b7acaa23 100644 --- a/src/Web/Grand.Web.Common/TagHelpers/ScriptTagHelper.cs +++ b/src/Web/Grand.Web.Common/TagHelpers/ScriptTagHelper.cs @@ -8,11 +8,13 @@ namespace Grand.Web.Common.TagHelpers [HtmlTargetElement("script", Attributes = LocationAttributeName)] [HtmlTargetElement("script", Attributes = SrcAttributeName)] + [HtmlTargetElement("script", Attributes = OrderAttributeName)] public class ScriptTagHelper : TagHelper { private const string LocationAttributeName = "asp-location"; private const string SrcAttributeName = "asp-src"; + private const string OrderAttributeName = "asp-order"; [HtmlAttributeName(LocationAttributeName)] public ScriptLocation Location { get; set; } @@ -20,6 +22,9 @@ public class ScriptTagHelper : TagHelper [HtmlAttributeName(SrcAttributeName)] public string Src { get; set; } + [HtmlAttributeName(OrderAttributeName)] + public int DisplayOrder { get; set; } + private readonly IResourceManager _resourceManager; private readonly IHttpContextAccessor _httpContextAccessor; @@ -52,15 +57,15 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu switch (Location) { case ScriptLocation.Head: - _resourceManager.RegisterHeadScript(builder); + _resourceManager.RegisterHeadScript(builder, DisplayOrder); break; case ScriptLocation.Header: - _resourceManager.RegisterHeaderScript(builder); + _resourceManager.RegisterHeaderScript(builder, DisplayOrder); break; case ScriptLocation.Footer: - _resourceManager.RegisterFootScript(builder); + _resourceManager.RegisterFootScript(builder, DisplayOrder); break; default: diff --git a/src/Web/Grand.Web/Validators/Customer/LoginValidator.cs b/src/Web/Grand.Web/Validators/Customer/LoginValidator.cs index 45f43d00b..9dbbaa542 100644 --- a/src/Web/Grand.Web/Validators/Customer/LoginValidator.cs +++ b/src/Web/Grand.Web/Validators/Customer/LoginValidator.cs @@ -16,10 +16,15 @@ public LoginValidator( { if (!customerSettings.UsernamesEnabled) { - //login by email RuleFor(x => x.Email).NotEmpty().WithMessage(translationService.GetResource("Account.Login.Fields.Email.Required")); + RuleFor(x => x.Password).NotEmpty().WithMessage(translationService.GetResource("Account.Login.Fields.Password.Required")); RuleFor(x => x.Email).EmailAddress().WithMessage(translationService.GetResource("Common.WrongEmail")); } + else + { + RuleFor(x => x.Username).NotEmpty().WithMessage(translationService.GetResource("Account.Login.Fields.UserName.Required")); + RuleFor(x => x.Password).NotEmpty().WithMessage(translationService.GetResource("Account.Login.Fields.Password.Required")); + } } } } \ No newline at end of file diff --git a/src/Web/Grand.Web/Views/Account/AddressAdd.cshtml b/src/Web/Grand.Web/Views/Account/AddressAdd.cshtml index e6c82c0c5..50094a399 100644 --- a/src/Web/Grand.Web/Views/Account/AddressAdd.cshtml +++ b/src/Web/Grand.Web/Views/Account/AddressAdd.cshtml @@ -12,19 +12,21 @@ @await Component.InvokeAsync("CustomerNavigation", new { selectedTabId = AccountNavigationEnum.Addresses }) } -
-