diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleContributorTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleContributorTagHelper.cs deleted file mode 100644 index 3a5e85fc7a..0000000000 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleContributorTagHelper.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers -{ - [HtmlTargetElement("abp-bundle-contributor", TagStructure = TagStructure.NormalOrSelfClosing, ParentTag = "abp-style-bundle")] - [HtmlTargetElement("abp-bundle-contributor", TagStructure = TagStructure.NormalOrSelfClosing, ParentTag = "abp-script-bundle")] - public class AbpBundleContributorTagHelper : AbpTagHelper - { - public Type Type { get; set; } - - public AbpBundleContributorTagHelper(AbpBundleContributorTagHelperService service) - : base(service) - { - - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleContributorTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleContributorTagHelperService.cs deleted file mode 100644 index f34f47b280..0000000000 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleContributorTagHelperService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections.Generic; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers -{ - public class AbpBundleContributorTagHelperService : AbpTagHelperService - { - public override void Process(TagHelperContext context, TagHelperOutput output) - { - output.SuppressOutput(); - - var files = (List)context.Items[AbpTagHelperConsts.ContextBundleItemListKey]; - files.Add(new BundleTagHelperItem(TagHelper.Type)); - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleFileTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleFileTagHelper.cs deleted file mode 100644 index 91fcb17eb3..0000000000 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleFileTagHelper.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers -{ - [HtmlTargetElement("abp-bundle-file", TagStructure = TagStructure.NormalOrSelfClosing, ParentTag = "abp-style-bundle")] - [HtmlTargetElement("abp-bundle-file", TagStructure = TagStructure.NormalOrSelfClosing, ParentTag = "abp-script-bundle")] - public class AbpBundleFileTagHelper : AbpTagHelper - { - public string Src { get; set; } - - public AbpBundleFileTagHelper(AbpBundleFileTagHelperService service) - : base(service) - { - - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleFileTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleFileTagHelperService.cs deleted file mode 100644 index f9e5b22fda..0000000000 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleFileTagHelperService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections.Generic; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers -{ - public class AbpBundleFileTagHelperService : AbpTagHelperService - { - public override void Process(TagHelperContext context, TagHelperOutput output) - { - output.SuppressOutput(); - - var files = (List)context.Items[AbpTagHelperConsts.ContextBundleItemListKey]; - files.Add(new BundleTagHelperItem(TagHelper.Src)); - } - } -} \ 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 c2a5cc48d2..a16fbced35 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 @@ -1,63 +1,28 @@ -using System; -using System.Collections.Generic; +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.VirtualFileSystem; namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { public abstract class AbpBundleTagHelperServiceBase : AbpTagHelperService where TTagHelper : TagHelper, IBundleTagHelper { - protected IBundleManager BundleManager { get; } - protected IHybridWebRootFileProvider WebRootFileProvider { get; } + protected AbpTagHelperResourceHelper ResourceHelper { get; } - protected AbpBundleTagHelperServiceBase(IBundleManager bundleManager, IHybridWebRootFileProvider webRootFileProvider) + protected AbpBundleTagHelperServiceBase(AbpTagHelperResourceHelper resourceHelper) { - BundleManager = bundleManager; - WebRootFileProvider = webRootFileProvider; + ResourceHelper = resourceHelper; } public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { - output.TagName = null; - - var files = await GetBundleItems(context, output); - - var bundleName = TagHelper.GetNameOrNull(); - 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(); + await ResourceHelper.ProcessAsync( + context, + output, + TagHelper.GetNameOrNull(), + await GetBundleItems(context, output) + ); } protected virtual async Task> GetBundleItems(TagHelperContext context, TagHelperOutput output) 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 9df29c8106..9f4f4ad063 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,38 +1,10 @@ -using System; -using System.Collections.Generic; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.VirtualFileSystem; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers +namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { public class AbpScriptBundleTagHelperService : AbpBundleTagHelperServiceBase { - public AbpScriptBundleTagHelperService( - IBundleManager bundleManager, - IHybridWebRootFileProvider webRootFileProvider) - : base( - bundleManager, - webRootFileProvider) + public AbpScriptBundleTagHelperService(AbpTagHelperScriptHelper resourceHelper) + : base(resourceHelper) { - - } - - 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/AbpScriptTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpScriptTagHelperService.cs index e6b947ada0..18942f6bce 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,48 +1,39 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.VirtualFileSystem; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { - public class AbpScriptTagHelperService : AbpBundleTagHelperServiceBase + public class AbpScriptTagHelperService : AbpTagHelperService { - public AbpScriptTagHelperService( - IBundleManager bundleManager, - IHybridWebRootFileProvider webRootFileProvider) - : base( - bundleManager, - webRootFileProvider) - { - } - - //TODO: CreateBundle, GetBundleFiles & AddHtmlTag are identical with the AbpScriptBundleTagHelperService. Try to remove duplication! - - protected override void CreateBundle(string bundleName, List bundleItems) - { - BundleManager.CreateScriptBundle( - bundleName, - configuration => bundleItems.ForEach(bi => bi.AddToConfiguration(configuration)) - ); - } + protected AbpTagHelperScriptHelper ResourceHelper { get; } - protected override IReadOnlyList GetBundleFiles(string bundleName) + public AbpScriptTagHelperService(AbpTagHelperScriptHelper resourceHelper) { - return BundleManager.GetScriptBundleFiles(bundleName); + ResourceHelper = resourceHelper; } - protected override void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file) + public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { - output.Content.AppendHtml($"{Environment.NewLine}"); - } - - protected override Task> GetBundleItems(TagHelperContext context, TagHelperOutput output) - { - return Task.FromResult(new List + var tagHelperItems = context.Items.GetOrDefault(AbpTagHelperConsts.ContextBundleItemListKey) as List; + if (tagHelperItems != null) + { + output.SuppressOutput(); + tagHelperItems.Add(TagHelper.CreateBundleTagHelperItem()); + } + else { - TagHelper.CreateBundleTagHelperItem() - }); + 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/AbpStyleBundleTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleBundleTagHelperService.cs index b8005535ef..530140a1af 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 @@ -1,38 +1,10 @@ -using System; -using System.Collections.Generic; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.VirtualFileSystem; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers +namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { public class AbpStyleBundleTagHelperService : AbpBundleTagHelperServiceBase { - public AbpStyleBundleTagHelperService( - IBundleManager bundleManager, - IHybridWebRootFileProvider webRootFileProvider) - : base( - bundleManager, - webRootFileProvider) + public AbpStyleBundleTagHelperService(AbpTagHelperStyleHelper resourceHelper) + : base(resourceHelper) { - - } - - 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/AbpStyleTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpStyleTagHelperService.cs index 4755c41231..f6f31e5df1 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,48 +1,39 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.VirtualFileSystem; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers { - public class AbpStyleTagHelperService : AbpBundleTagHelperServiceBase + public class AbpStyleTagHelperService : AbpTagHelperService { - public AbpStyleTagHelperService( - IBundleManager bundleManager, - IHybridWebRootFileProvider webRootFileProvider) - : base( - bundleManager, - webRootFileProvider) - { - } - - //TODO: CreateBundle, GetBundleFiles & AddHtmlTag are identical with the AbpStyleBundleTagHelperService. Try to remove duplication! - - protected override void CreateBundle(string bundleName, List bundleItems) - { - BundleManager.CreateStyleBundle( - bundleName, - configuration => bundleItems.ForEach(bi => bi.AddToConfiguration(configuration)) - ); - } + protected AbpTagHelperStyleHelper ResourceHelper { get; } - protected override IReadOnlyList GetBundleFiles(string bundleName) + public AbpStyleTagHelperService(AbpTagHelperStyleHelper resourceHelper) { - return BundleManager.GetStyleBundleFiles(bundleName); + ResourceHelper = resourceHelper; } - protected override void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file) + public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { - output.Content.AppendHtml($"{Environment.NewLine}"); - } - - protected override Task> GetBundleItems(TagHelperContext context, TagHelperOutput output) - { - return Task.FromResult(new List + var tagHelperItems = context.Items.GetOrDefault(AbpTagHelperConsts.ContextBundleItemListKey) as List; + if (tagHelperItems != null) + { + output.SuppressOutput(); + tagHelperItems.Add(TagHelper.CreateBundleTagHelperItem()); + } + else { - TagHelper.CreateBundleTagHelperItem() - }); + 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 new file mode 100644 index 0000000000..c69a18ef9b --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceHelper.cs @@ -0,0 +1,125 @@ +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