From 052128c041928569dba01a9237fe689618575af6 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Mon, 18 Jun 2018 11:28:12 +0300 Subject: [PATCH] Refactored bundling --- .../TagHelpers/AbpBundleItemTagHelper.cs | 58 ++++++++ .../TagHelpers/AbpBundleTagHelperBase.cs | 22 +++ .../AbpBundleTagHelperServiceBase.cs | 20 +-- .../TagHelpers/AbpScriptBundleTagHelper.cs | 9 +- .../AbpScriptBundleTagHelperService.cs | 6 +- .../Bundling/TagHelpers/AbpScriptTagHelper.cs | 49 +------ .../TagHelpers/AbpScriptTagHelperService.cs | 35 +---- .../TagHelpers/AbpStyleBundleTagHelper.cs | 12 +- .../AbpStyleBundleTagHelperService.cs | 2 +- .../Bundling/TagHelpers/AbpStyleTagHelper.cs | 49 +------ .../TagHelpers/AbpStyleTagHelperService.cs | 37 +----- .../TagHelpers/AbpTagHelperResourceHelper.cs | 125 ------------------ .../AbpTagHelperResourceItemService.cs | 40 ++++++ .../TagHelpers/IBundleItemTagHelper.cs | 7 + .../Internal/AbpTagHelperResourceService.cs | 73 ++++++++++ .../Internal/AbpTagHelperScriptService.cs | 37 ++++++ .../Internal/AbpTagHelperStyleService.cs | 37 ++++++ 17 files changed, 303 insertions(+), 315 deletions(-) create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelper.cs create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperBase.cs delete mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceHelper.cs create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceItemService.cs create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/IBundleItemTagHelper.cs create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/Internal/AbpTagHelperResourceService.cs create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/Internal/AbpTagHelperScriptService.cs create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/Internal/AbpTagHelperStyleService.cs diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelper.cs new file mode 100644 index 0000000000..e0421e26ba --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelper.cs @@ -0,0 +1,58 @@ +using System; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers +{ + public abstract class AbpBundleItemTagHelper : AbpTagHelper, IBundleItemTagHelper + where TTagHelper : AbpTagHelper, IBundleItemTagHelper + where TTagHelperService: AbpTagHelperResourceItemService + { + /// + /// A file path. + /// + public string Src { get; set; } + + /// + /// A bundle contributor type. + /// + public Type Type { get; set; } + + protected AbpBundleItemTagHelper(TTagHelperService service) + : base(service) + { + } + + public string GetNameOrNull() + { + if (Type != null) + { + return Type.FullName; + } + + if (Src != null) + { + return Src + .RemovePreFix("/") + .RemovePostFix(StringComparison.OrdinalIgnoreCase, ".js") + .Replace("/", "."); + } + + throw new AbpException("abp-script tag helper requires to set either src or type!"); + } + + public BundleTagHelperItem CreateBundleTagHelperItem() + { + if (Type != null) + { + return new BundleTagHelperItem(Type); + } + + if (Src != null) + { + return new BundleTagHelperItem(Src); + } + + throw new AbpException("abp-script tag helper requires to set either src or type!"); + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperBase.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperBase.cs new file mode 100644 index 0000000000..92b4c4fc52 --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperBase.cs @@ -0,0 +1,22 @@ +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers +{ + public abstract class AbpBundleTagHelperBase : AbpTagHelper, IBundleTagHelper + where TTagHelper : AbpTagHelper + where TService : class, IAbpTagHelperService + { + public string Name { get; set; } + + protected AbpBundleTagHelperBase(TService service) + : base(service) + { + + } + + public virtual string GetNameOrNull() + { + return Name; + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperServiceBase.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperServiceBase.cs index a16fbced35..0e4a6c3b47 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperServiceBase.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperServiceBase.cs @@ -8,29 +8,29 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers public abstract class AbpBundleTagHelperServiceBase : AbpTagHelperService where TTagHelper : TagHelper, IBundleTagHelper { - protected AbpTagHelperResourceHelper ResourceHelper { get; } + protected AbpTagHelperResourceService ResourceService { get; } - protected AbpBundleTagHelperServiceBase(AbpTagHelperResourceHelper resourceHelper) + protected AbpBundleTagHelperServiceBase(AbpTagHelperResourceService resourceService) { - ResourceHelper = resourceHelper; + ResourceService = resourceService; } public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { - await ResourceHelper.ProcessAsync( + await ResourceService.ProcessAsync( context, output, - TagHelper.GetNameOrNull(), - await GetBundleItems(context, output) + await GetBundleItems(context, output), + TagHelper.GetNameOrNull() ); } protected virtual async Task> GetBundleItems(TagHelperContext context, TagHelperOutput output) { - var fileList = new List(); - context.Items[AbpTagHelperConsts.ContextBundleItemListKey] = fileList; - await output.GetChildContentAsync(); //TODO: Suppress child execution! - return fileList; + var bundleItems = new List(); + context.Items[AbpTagHelperConsts.ContextBundleItemListKey] = bundleItems; + await output.GetChildContentAsync(); //TODO: Is there a way of executing children without getting content? + return bundleItems; } } } \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptBundleTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptBundleTagHelper.cs index d225ecb946..7ea9e341ae 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptBundleTagHelper.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptBundleTagHelper.cs @@ -1,21 +1,14 @@ using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { [HtmlTargetElement("abp-script-bundle", TagStructure = TagStructure.NormalOrSelfClosing)] - public class AbpScriptBundleTagHelper : AbpTagHelper, IBundleTagHelper + public class AbpScriptBundleTagHelper : AbpBundleTagHelperBase, IBundleTagHelper { - public string Name { get; set; } - public AbpScriptBundleTagHelper(AbpScriptBundleTagHelperService service) : base(service) { - } - public string GetNameOrNull() - { - return Name; } } } \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptBundleTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptBundleTagHelperService.cs index 9f4f4ad063..0b32cd294f 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptBundleTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptBundleTagHelperService.cs @@ -1,8 +1,10 @@ -namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers +using Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers.Internal; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { public class AbpScriptBundleTagHelperService : AbpBundleTagHelperServiceBase { - public AbpScriptBundleTagHelperService(AbpTagHelperScriptHelper resourceHelper) + public AbpScriptBundleTagHelperService(AbpTagHelperScriptService resourceHelper) : base(resourceHelper) { } diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptTagHelper.cs index d1681441a6..645f2cfdd8 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptTagHelper.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptTagHelper.cs @@ -1,59 +1,14 @@ -using System; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; +using Microsoft.AspNetCore.Razor.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { [HtmlTargetElement("abp-script", TagStructure = TagStructure.NormalOrSelfClosing)] - public class AbpScriptTagHelper : AbpTagHelper, IBundleTagHelper + public class AbpScriptTagHelper : AbpBundleItemTagHelper, IBundleItemTagHelper { - /// - /// A file path. - /// - public string Src { get; set; } - - /// - /// A bundle contributor type. - /// - public Type Type { get; set; } - public AbpScriptTagHelper(AbpScriptTagHelperService service) : base(service) { } - - public string GetNameOrNull() - { - if (Type != null) - { - return Type.FullName; - } - - if (Src != null) - { - return Src - .RemovePreFix("/") - .RemovePostFix(StringComparison.OrdinalIgnoreCase, ".js") - .Replace("/", "."); - } - - throw new AbpException("abp-script tag helper requires to set either src or type!"); - } - - public BundleTagHelperItem CreateBundleTagHelperItem() - { - if (Type != null) - { - return new BundleTagHelperItem(Type); - } - - if (Src != null) - { - return new BundleTagHelperItem(Src); - } - - throw new AbpException("abp-script tag helper requires to set either src or type!"); - } } } \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptTagHelperService.cs index 18942f6bce..e68a7102f8 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptTagHelperService.cs @@ -1,39 +1,12 @@ -using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers.Internal; namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { - public class AbpScriptTagHelperService : AbpTagHelperService + public class AbpScriptTagHelperService : AbpTagHelperResourceItemService { - protected AbpTagHelperScriptHelper ResourceHelper { get; } - - public AbpScriptTagHelperService(AbpTagHelperScriptHelper resourceHelper) - { - ResourceHelper = resourceHelper; - } - - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public AbpScriptTagHelperService(AbpTagHelperScriptService resourceService) + : base(resourceService) { - var tagHelperItems = context.Items.GetOrDefault(AbpTagHelperConsts.ContextBundleItemListKey) as List; - if (tagHelperItems != null) - { - output.SuppressOutput(); - tagHelperItems.Add(TagHelper.CreateBundleTagHelperItem()); - } - else - { - await ResourceHelper.ProcessAsync( - context, - output, - TagHelper.GetNameOrNull(), - new List - { - TagHelper.CreateBundleTagHelperItem() - } - ); - } } } } \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleBundleTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleBundleTagHelper.cs index 7216df490c..7809cb6f30 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleBundleTagHelper.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleBundleTagHelper.cs @@ -1,23 +1,13 @@ using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { - //TODO: Move to Volo.Abp.AspNetCore.Mvc.UI package. - [HtmlTargetElement("abp-style-bundle", TagStructure = TagStructure.NormalOrSelfClosing)] - public class AbpStyleBundleTagHelper : AbpTagHelper, IBundleTagHelper + public class AbpStyleBundleTagHelper : AbpBundleTagHelperBase, IBundleTagHelper { - public string Name { get; set; } - public AbpStyleBundleTagHelper(AbpStyleBundleTagHelperService service) : base(service) { } - - public string GetNameOrNull() - { - return Name; - } } } diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleBundleTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleBundleTagHelperService.cs index 530140a1af..5ab2aef42a 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleBundleTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleBundleTagHelperService.cs @@ -2,7 +2,7 @@ { public class AbpStyleBundleTagHelperService : AbpBundleTagHelperServiceBase { - public AbpStyleBundleTagHelperService(AbpTagHelperStyleHelper resourceHelper) + public AbpStyleBundleTagHelperService(AbpTagHelperStyleService resourceHelper) : base(resourceHelper) { } diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleTagHelper.cs index 9b27edfa26..0910206a1f 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleTagHelper.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleTagHelper.cs @@ -1,59 +1,14 @@ -using System; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; +using Microsoft.AspNetCore.Razor.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { [HtmlTargetElement("abp-style", TagStructure = TagStructure.NormalOrSelfClosing)] - public class AbpStyleTagHelper : AbpTagHelper, IBundleTagHelper + public class AbpStyleTagHelper : AbpBundleItemTagHelper, IBundleItemTagHelper { - /// - /// A file path. - /// - public string Src { get; set; } - - /// - /// A bundle contributor type. - /// - public Type Type { get; set; } - public AbpStyleTagHelper(AbpStyleTagHelperService service) : base(service) { } - - public string GetNameOrNull() - { - if (Type != null) - { - return Type.FullName; - } - - if (Src != null) - { - return Src - .RemovePreFix("/") - .RemovePostFix(StringComparison.OrdinalIgnoreCase, ".css") - .Replace("/", "."); - } - - throw new AbpException("abp-style tag helper requires to set either src or type!"); - } - - public BundleTagHelperItem CreateBundleTagHelperItem() - { - if (Type != null) - { - return new BundleTagHelperItem(Type); - } - - if (Src != null) - { - return new BundleTagHelperItem(Src); - } - - throw new AbpException("abp-style tag helper requires to set either src or type!"); - } } } \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleTagHelperService.cs index f6f31e5df1..15342080cc 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleTagHelperService.cs @@ -1,39 +1,10 @@ -using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers +namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { - public class AbpStyleTagHelperService : AbpTagHelperService + public class AbpStyleTagHelperService : AbpTagHelperResourceItemService { - protected AbpTagHelperStyleHelper ResourceHelper { get; } - - public AbpStyleTagHelperService(AbpTagHelperStyleHelper resourceHelper) + public AbpStyleTagHelperService(AbpTagHelperStyleService resourceService) + : base(resourceService) { - ResourceHelper = resourceHelper; - } - - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) - { - var tagHelperItems = context.Items.GetOrDefault(AbpTagHelperConsts.ContextBundleItemListKey) as List; - if (tagHelperItems != null) - { - output.SuppressOutput(); - tagHelperItems.Add(TagHelper.CreateBundleTagHelperItem()); - } - else - { - await ResourceHelper.ProcessAsync( - context, - output, - TagHelper.GetNameOrNull(), - new List - { - TagHelper.CreateBundleTagHelperItem() - } - ); - } } } } \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceHelper.cs deleted file mode 100644 index c69a18ef9b..0000000000 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceHelper.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.VirtualFileSystem; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers -{ - public abstract class AbpTagHelperResourceHelper : ITransientDependency - { - protected IBundleManager BundleManager { get; } - protected IHybridWebRootFileProvider WebRootFileProvider { get; } - - protected AbpTagHelperResourceHelper( - IBundleManager bundleManager, - IHybridWebRootFileProvider webRootFileProvider) - { - BundleManager = bundleManager; - WebRootFileProvider = webRootFileProvider; - } - - public virtual async Task ProcessAsync( - TagHelperContext context, - TagHelperOutput output, - string bundleName, - List files) - { - output.TagName = null; - - if (bundleName.IsNullOrEmpty()) - { - bundleName = GenerateBundleName(files); - } - - CreateBundle(bundleName, files); - - var bundleFiles = GetBundleFiles(bundleName); - - output.Content.Clear(); - - foreach (var bundleFile in bundleFiles) - { - var file = WebRootFileProvider.GetFileInfo(bundleFile); - if (file == null) - { - throw new AbpException($"Could not find the bundle file from {nameof(IHybridWebRootFileProvider)}"); - } - - AddHtmlTag(context, output, bundleFile + "?_v=" + file.LastModified.UtcTicks); - } - } - - protected abstract void CreateBundle(string bundleName, List bundleItems); - - protected abstract IReadOnlyList GetBundleFiles(string bundleName); - - protected abstract void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file); - - protected virtual string GenerateBundleName(List bundleItems) - { - return bundleItems.JoinAsString("|").ToMd5(); - } - } - - public class AbpTagHelperScriptHelper : AbpTagHelperResourceHelper - { - public AbpTagHelperScriptHelper( - IBundleManager bundleManager, - IHybridWebRootFileProvider webRootFileProvider - ) : base( - bundleManager, - webRootFileProvider) - { - } - - protected override void CreateBundle(string bundleName, List bundleItems) - { - BundleManager.CreateScriptBundle( - bundleName, - configuration => bundleItems.ForEach(bi => bi.AddToConfiguration(configuration)) - ); - } - - protected override IReadOnlyList GetBundleFiles(string bundleName) - { - return BundleManager.GetScriptBundleFiles(bundleName); - } - - protected override void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file) - { - output.Content.AppendHtml($"{Environment.NewLine}"); - } - } - - public class AbpTagHelperStyleHelper : AbpTagHelperResourceHelper - { - public AbpTagHelperStyleHelper( - IBundleManager bundleManager, - IHybridWebRootFileProvider webRootFileProvider - ) : base( - bundleManager, - webRootFileProvider) - { - } - - protected override void CreateBundle(string bundleName, List bundleItems) - { - BundleManager.CreateStyleBundle( - bundleName, - configuration => bundleItems.ForEach(bi => bi.AddToConfiguration(configuration)) - ); - } - - protected override IReadOnlyList GetBundleFiles(string bundleName) - { - return BundleManager.GetStyleBundleFiles(bundleName); - } - - protected override void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file) - { - output.Content.AppendHtml($"{Environment.NewLine}"); - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceItemService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceItemService.cs new file mode 100644 index 0000000000..1aa67ad02e --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceItemService.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers +{ + public abstract class AbpTagHelperResourceItemService : AbpTagHelperService + where TTagHelper : TagHelper, IBundleItemTagHelper + { + protected AbpTagHelperResourceService ResourceService { get; } + + protected AbpTagHelperResourceItemService(AbpTagHelperResourceService resourceService) + { + ResourceService = resourceService; + } + + public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + { + var tagHelperItems = context.Items.GetOrDefault(AbpTagHelperConsts.ContextBundleItemListKey) as List; + if (tagHelperItems != null) + { + output.SuppressOutput(); + tagHelperItems.Add(TagHelper.CreateBundleTagHelperItem()); + } + else + { + await ResourceService.ProcessAsync( + context, + output, + new List + { + TagHelper.CreateBundleTagHelperItem() + }, + TagHelper.GetNameOrNull() + ); + } + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/IBundleItemTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/IBundleItemTagHelper.cs new file mode 100644 index 0000000000..a3b73e748c --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/IBundleItemTagHelper.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers +{ + public interface IBundleItemTagHelper : IBundleTagHelper + { + BundleTagHelperItem CreateBundleTagHelperItem(); + } +} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/Internal/AbpTagHelperResourceService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/Internal/AbpTagHelperResourceService.cs new file mode 100644 index 0000000000..05562a929a --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/Internal/AbpTagHelperResourceService.cs @@ -0,0 +1,73 @@ +using JetBrains.Annotations; +using Microsoft.AspNetCore.Razor.TagHelpers; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.VirtualFileSystem; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers +{ + public abstract class AbpTagHelperResourceService : ITransientDependency + { + protected IBundleManager BundleManager { get; } + + protected IHybridWebRootFileProvider WebRootFileProvider { get; } + + protected AbpTagHelperResourceService( + IBundleManager bundleManager, + IHybridWebRootFileProvider webRootFileProvider) + { + BundleManager = bundleManager; + WebRootFileProvider = webRootFileProvider; + } + + public virtual Task ProcessAsync( + [NotNull] TagHelperContext context, + [NotNull] TagHelperOutput output, + [NotNull] List bundleItems, + [CanBeNull] string bundleName = null) + { + Check.NotNull(context, nameof(context)); + Check.NotNull(output, nameof(output)); + Check.NotNull(bundleItems, nameof(bundleItems)); + + output.TagName = null; + + if (bundleName.IsNullOrEmpty()) + { + bundleName = GenerateBundleName(bundleItems); + } + + CreateBundle(bundleName, bundleItems); + + var bundleFiles = GetBundleFiles(bundleName); + + output.Content.Clear(); + + foreach (var bundleFile in bundleFiles) + { + var file = WebRootFileProvider.GetFileInfo(bundleFile); + if (file == null) + { + throw new AbpException($"Could not find the bundle file from {nameof(IHybridWebRootFileProvider)}"); + } + + AddHtmlTag(context, output, bundleFile + "?_v=" + file.LastModified.UtcTicks); + } + + return Task.CompletedTask; + } + + protected abstract void CreateBundle(string bundleName, List bundleItems); + + protected abstract IReadOnlyList GetBundleFiles(string bundleName); + + protected abstract void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file); + + protected virtual string GenerateBundleName(List bundleItems) + { + return bundleItems.JoinAsString("|").ToMd5(); + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/Internal/AbpTagHelperScriptService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/Internal/AbpTagHelperScriptService.cs new file mode 100644 index 0000000000..9f468893b8 --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/Internal/AbpTagHelperScriptService.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Volo.Abp.AspNetCore.VirtualFileSystem; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers.Internal +{ + public class AbpTagHelperScriptService : AbpTagHelperResourceService + { + public AbpTagHelperScriptService( + IBundleManager bundleManager, + IHybridWebRootFileProvider webRootFileProvider + ) : base( + bundleManager, + webRootFileProvider) + { + } + + protected override void CreateBundle(string bundleName, List bundleItems) + { + BundleManager.CreateScriptBundle( + bundleName, + configuration => bundleItems.ForEach(bi => bi.AddToConfiguration(configuration)) + ); + } + + protected override IReadOnlyList GetBundleFiles(string bundleName) + { + return BundleManager.GetScriptBundleFiles(bundleName); + } + + protected override void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file) + { + output.Content.AppendHtml($"{Environment.NewLine}"); + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/Internal/AbpTagHelperStyleService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/Internal/AbpTagHelperStyleService.cs new file mode 100644 index 0000000000..464c4a370f --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/Internal/AbpTagHelperStyleService.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Volo.Abp.AspNetCore.VirtualFileSystem; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers +{ + public class AbpTagHelperStyleService : AbpTagHelperResourceService + { + public AbpTagHelperStyleService( + IBundleManager bundleManager, + IHybridWebRootFileProvider webRootFileProvider + ) : base( + bundleManager, + webRootFileProvider) + { + } + + protected override void CreateBundle(string bundleName, List bundleItems) + { + BundleManager.CreateStyleBundle( + bundleName, + configuration => bundleItems.ForEach(bi => bi.AddToConfiguration(configuration)) + ); + } + + protected override IReadOnlyList GetBundleFiles(string bundleName) + { + return BundleManager.GetStyleBundleFiles(bundleName); + } + + protected override void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file) + { + output.Content.AppendHtml($"{Environment.NewLine}"); + } + } +} \ No newline at end of file