From 7108dbc2c25e445a67dbf125a815e12f5af9ff66 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Tue, 19 Jun 2018 08:23:02 +0300 Subject: [PATCH] Bundling refactor. --- .../Mvc/UI/Bundling/BundleManager.cs | 2 +- .../TagHelpers/AbpTagHelperResourceService.cs | 9 ++++- .../TagHelpers/AbpTagHelperScriptService.cs | 9 +++-- .../TagHelpers/AbpTagHelperStyleService.cs | 11 +++-- .../Resources/IWebRequestBundleCoordinator.cs | 16 -------- .../Mvc/UI/Resources/IWebRequestResources.cs | 19 +++++++++ .../Resources/WebRequestBundleCoordinator.cs | 29 -------------- .../Mvc/UI/Resources/WebRequestResources.cs | 40 +++++++++++++++++++ .../JQueryValidationScriptContributor.cs | 17 ++++++++ 9 files changed, 98 insertions(+), 54 deletions(-) delete mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/IWebRequestBundleCoordinator.cs create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/IWebRequestResources.cs delete mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/WebRequestBundleCoordinator.cs create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/WebRequestResources.cs diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleManager.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleManager.cs index ec69158227..760be2de70 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleManager.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleManager.cs @@ -67,7 +67,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling protected virtual IReadOnlyList GetBundleFiles(BundleConfigurationCollection bundles, string bundleName, IBundler bundler) { - var files = RequestResources.TryAdd(CreateFileList(bundles, bundleName)); + var files = RequestResources.Filter(CreateFileList(bundles, bundleName)); if (!IsBundlingEnabled()) { diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs index 05562a929a..8c6b67e7ee 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Razor.TagHelpers; using System; using System.Collections.Generic; using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Mvc.UI.Resources; using Volo.Abp.AspNetCore.VirtualFileSystem; using Volo.Abp.DependencyInjection; @@ -14,12 +15,16 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers protected IHybridWebRootFileProvider WebRootFileProvider { get; } + protected IWebRequestResources WebRequestResources { get; } + protected AbpTagHelperResourceService( IBundleManager bundleManager, - IHybridWebRootFileProvider webRootFileProvider) + IHybridWebRootFileProvider webRootFileProvider, + IWebRequestResources webRequestResources) { BundleManager = bundleManager; WebRootFileProvider = webRootFileProvider; + WebRequestResources = webRequestResources; } public virtual Task ProcessAsync( @@ -56,6 +61,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers AddHtmlTag(context, output, bundleFile + "?_v=" + file.LastModified.UtcTicks); } + WebRequestResources.Add(bundleFiles); + return Task.CompletedTask; } diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs index 0ea18da43e..f8f2208f99 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using Microsoft.AspNetCore.Razor.TagHelpers; +using Volo.Abp.AspNetCore.Mvc.UI.Resources; using Volo.Abp.AspNetCore.VirtualFileSystem; namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers @@ -9,10 +10,12 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { public AbpTagHelperScriptService( IBundleManager bundleManager, - IHybridWebRootFileProvider webRootFileProvider + IHybridWebRootFileProvider webRootFileProvider, + IWebRequestResources webRequestResources ) : base( - bundleManager, - webRootFileProvider) + bundleManager, + webRootFileProvider, + webRequestResources) { } diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs index 464c4a370f..27ef0086e2 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using Microsoft.AspNetCore.Razor.TagHelpers; +using Volo.Abp.AspNetCore.Mvc.UI.Resources; using Volo.Abp.AspNetCore.VirtualFileSystem; namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers @@ -9,10 +10,12 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { public AbpTagHelperStyleService( IBundleManager bundleManager, - IHybridWebRootFileProvider webRootFileProvider - ) : base( - bundleManager, - webRootFileProvider) + IHybridWebRootFileProvider webRootFileProvider, + IWebRequestResources webRequestResources + ) : base( + bundleManager, + webRootFileProvider, + webRequestResources) { } diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/IWebRequestBundleCoordinator.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/IWebRequestBundleCoordinator.cs deleted file mode 100644 index 9928f1d6a1..0000000000 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/IWebRequestBundleCoordinator.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Collections.Generic; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Resources -{ - public interface IWebRequestResources - { - /// - /// Adds resouces to to current web request except the ones added before. - /// - /// Candidate resources to be added - /// Resources actually added - List TryAdd(IEnumerable resources); - - bool TryAdd(string resource); - } -} diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/IWebRequestResources.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/IWebRequestResources.cs new file mode 100644 index 0000000000..d8b7211485 --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/IWebRequestResources.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Resources +{ + public interface IWebRequestResources + { + /// + /// Filters given resources and returns a list of resources those are not + /// added to the page for current web request. + /// + List Filter(IEnumerable resources); + + bool IsAddedBefore(string resource); + + void Add(IEnumerable resources); + + IReadOnlyList GetAll(); + } +} diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/WebRequestBundleCoordinator.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/WebRequestBundleCoordinator.cs deleted file mode 100644 index c3f1e580ef..0000000000 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/WebRequestBundleCoordinator.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Volo.Abp.AspNetCore.Mvc.UI.Bundling; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Resources -{ - public class WebRequestResources : IWebRequestResources, IScopedDependency - { - protected List Resources { get; } - - public WebRequestResources() - { - Resources = new List(); - } - - public virtual List TryAdd(IEnumerable resources) - { - var newFiles = resources.Except(Resources).ToList(); - Resources.AddRange(newFiles); - return newFiles; - } - - public bool TryAdd(string resource) - { - return Resources.AddIfNotContains(resource); - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/WebRequestResources.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/WebRequestResources.cs new file mode 100644 index 0000000000..25673f944e --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/WebRequestResources.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Resources +{ + public class WebRequestResources : IWebRequestResources, IScopedDependency + { + protected List Resources { get; } + + public WebRequestResources() + { + Resources = new List(); + } + + public List Filter(IEnumerable resources) + { + return resources.Except(Resources).ToList(); + } + + public bool IsAddedBefore(string resource) + { + return Resources.Contains(resource); + } + + public void Add(IEnumerable resources) + { + foreach (var resource in resources) + { + Resources.AddIfNotContains(resource); + } + } + + public IReadOnlyList GetAll() + { + return Resources.ToImmutableList(); + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryValidation/JQueryValidationScriptContributor.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryValidation/JQueryValidationScriptContributor.cs index d3c8c7c0f5..53f6b077f5 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryValidation/JQueryValidationScriptContributor.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryValidation/JQueryValidationScriptContributor.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Globalization; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery; using Volo.Abp.Modularity; @@ -8,9 +9,25 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.JQueryValidation [DependsOn(typeof(JQueryScriptContributor))] public class JQueryValidationScriptContributor : BundleContributor { + public const string DefaultLocalizationFolder = "/libs/jquery-validation/localization/"; + + public static Dictionary LocalizationMapping { get; } = new Dictionary + { + //TODO: Add all! + {"ar", DefaultLocalizationFolder + "messages_ar.js"}, + {"tr", DefaultLocalizationFolder + "messages_tr.js"} + }; + public override void ConfigureBundle(BundleConfigurationContext context) { context.Files.AddIfNotContains("/libs/jquery-validation/jquery.validate.js"); + //context.PostDynamicFiles.AddIfNotContains("/libs/jquery-validation/localization/messages_" + CultureInfo.CurrentUICulture.Name + ".js"); + } + + public void ConfigureDynamic(BundleConfigurationContext context) + { + //TODO: !!! + context.Files.AddIfNotContains("/libs/jquery-validation/localization/messages_" + CultureInfo.CurrentUICulture.Name + ".js"); } } }