diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/ScriptTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/ScriptTagHelper.cs new file mode 100644 index 0000000000..2328b73baf --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/ScriptTagHelper.cs @@ -0,0 +1,33 @@ +using System; +using System.Linq; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.Extensions.Options; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers; + +[HtmlTargetElement("script")] +public class ScriptTagHelper : AbpTagHelper +{ + protected AbpBundlingOptions Options { get; } + + [HtmlAttributeName("src")] + public string Src { get; set; } = default!; + + public ScriptTagHelper(IOptions options) + { + Options = options.Value; + } + public override void Process(TagHelperContext context, TagHelperOutput output) + { + if (Options.DeferScriptsByDefault) + { + output.Attributes.Add("defer", ""); + } + + if (!Src.IsNullOrWhiteSpace() && Options.DeferScripts.Any(x => Src.Equals(x, StringComparison.OrdinalIgnoreCase))) + { + output.Attributes.Add("defer", ""); + } + } +} \ No newline at end of file