Browse Source

Add `is-cdn` to script/style taghelper.

pull/17894/head
maliming 3 years ago
parent
commit
519b300ef2
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleConfigurationExtensions.cs
  2. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleContributorCollectionExtensions.cs
  3. 14
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleFile.cs
  4. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleFileContributor.cs
  5. 32
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleFileListExtensions.cs
  6. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleManager.cs
  7. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelper.cs
  8. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs
  9. 4
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs
  10. 4
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs
  11. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/BundleTagHelperFileItem.cs
  12. 22
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs
  13. 8
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalStyleContributor.cs

6
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleConfigurationExtensions.cs

@ -11,6 +11,12 @@ public static class BundleConfigurationExtensions
return bundleConfiguration; return bundleConfiguration;
} }
public static BundleConfiguration AddFiles(this BundleConfiguration bundleConfiguration, params BundleFile[] files)
{
bundleConfiguration.Contributors.AddFiles(files);
return bundleConfiguration;
}
public static BundleConfiguration AddCdnFiles(this BundleConfiguration bundleConfiguration, params string[] files) public static BundleConfiguration AddCdnFiles(this BundleConfiguration bundleConfiguration, params string[] files)
{ {
bundleConfiguration.Contributors.AddCdnFiles(files.Select(x => new BundleFile(x, true)).ToArray()); bundleConfiguration.Contributors.AddCdnFiles(files.Select(x => new BundleFile(x, true)).ToArray());

6
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleContributorCollectionExtensions.cs

@ -6,6 +6,12 @@ public static class BundleContributorCollectionExtensions
{ {
contributors.Add(new BundleFileContributor(files)); contributors.Add(new BundleFileContributor(files));
} }
public static void AddFiles(this BundleContributorCollection contributors, params BundleFile[] files)
{
contributors.Add(new BundleFileContributor(files));
}
public static void AddCdnFiles(this BundleContributorCollection contributors, params BundleFile[] files) public static void AddCdnFiles(this BundleContributorCollection contributors, params BundleFile[] files)
{ {
contributors.Add(new BundleFileContributor(files)); contributors.Add(new BundleFileContributor(files));

14
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleFile.cs

@ -2,13 +2,21 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling;
public class BundleFile public class BundleFile
{ {
public string File { get; set; } public string FileName { get; set; }
public bool IsCdn { get; set; } public bool IsCdn { get; set; }
public BundleFile(string file, bool isCdn = false) public BundleFile(string fileName, bool isCdn = false)
{ {
File = file; FileName = fileName;
IsCdn = isCdn; IsCdn = isCdn;
} }
/// <summary>
/// This method is used to compatible with old code.
/// </summary>
public static implicit operator BundleFile(string fileName)
{
return new BundleFile(fileName);
}
} }

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleFileContributor.cs

@ -24,7 +24,7 @@ public class BundleFileContributor : BundleContributor
{ {
foreach (var file in Files) foreach (var file in Files)
{ {
context.Files.AddIfNotContains(x => x.File.Equals(file.File, StringComparison.OrdinalIgnoreCase), () => file); context.Files.AddIfNotContains(x => x.FileName.Equals(file.FileName, StringComparison.OrdinalIgnoreCase), () => file);
} }
} }
} }

32
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleFileListExtensions.cs

@ -1,32 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling;
/// <summary>
/// This class is used to compatible with old code.
/// </summary>
public static class BundleFileListExtensions
{
public static void Add(this List<BundleFile> bundleFiles, params string[] files)
{
bundleFiles.AddRange(files.Select(file => new BundleFile(file)));
}
public static void AddRange(this List<BundleFile> bundleFiles, params string[] files)
{
bundleFiles.AddRange(files.Select(file => new BundleFile(file)));
}
public static void AddIfNotContains(this List<BundleFile> bundleFiles, params string[] files)
{
foreach (var file in files)
{
if (!bundleFiles.Any(x => x.File.Equals(file, StringComparison.OrdinalIgnoreCase)))
{
bundleFiles.Add(new BundleFile(file));
}
}
}
}

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleManager.cs

@ -83,7 +83,7 @@ public class BundleManager : IBundleManager, ITransientDependency
{ {
if (!bundleFile.IsCdn) if (!bundleFile.IsCdn)
{ {
localBundleFiles.Add(bundleFile.File); localBundleFiles.Add(bundleFile.FileName);
} }
else else
{ {

6
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelper.cs

@ -1,4 +1,5 @@
using System; using System;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.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;
@ -17,6 +18,9 @@ public abstract class AbpBundleItemTagHelper<TTagHelper, TTagHelperService> : Ab
/// </summary> /// </summary>
public Type? Type { get; set; } public Type? Type { get; set; }
[HtmlAttributeName("is-cdn")]
public bool IsCdn { get; set; }
protected AbpBundleItemTagHelper(TTagHelperService service) protected AbpBundleItemTagHelper(TTagHelperService service)
: base(service) : base(service)
{ {
@ -49,7 +53,7 @@ public abstract class AbpBundleItemTagHelper<TTagHelper, TTagHelperService> : Ab
if (Src != null) if (Src != null)
{ {
return new BundleTagHelperFileItem(Src); return new BundleTagHelperFileItem(new BundleFile(Src, IsCdn));
} }
throw new AbpException("abp-script tag helper requires to set either src or type!"); throw new AbpException("abp-script tag helper requires to set either src or type!");

6
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs

@ -71,10 +71,10 @@ public abstract class AbpTagHelperResourceService : ITransientDependency
} }
else else
{ {
var file = HostingEnvironment.WebRootFileProvider.GetFileInfo(bundleFile.File); var file = HostingEnvironment.WebRootFileProvider.GetFileInfo(bundleFile.FileName);
if (file == null || !file.Exists) if (file == null || !file.Exists)
{ {
Logger.LogError($"Could not find the bundle file '{bundleFile.File}' for the bundle '{bundleName}'!"); Logger.LogError($"Could not find the bundle file '{bundleFile.FileName}' for the bundle '{bundleName}'!");
AddErrorScript(viewContext, tagHelper, context, output, bundleFile, bundleName!); AddErrorScript(viewContext, tagHelper, context, output, bundleFile, bundleName!);
continue; continue;
} }
@ -98,7 +98,7 @@ public abstract class AbpTagHelperResourceService : ITransientDependency
protected virtual void AddErrorScript(ViewContext viewContext, TagHelper tagHelper, TagHelperContext context, TagHelperOutput output, BundleFile file, string bundleName) protected virtual void AddErrorScript(ViewContext viewContext, TagHelper tagHelper, TagHelperContext context, TagHelperOutput output, BundleFile file, string bundleName)
{ {
output.Content.AppendHtml($"<script>console.log(\"%cCould not find the bundle file '{file.File}' for the bundle '{bundleName}'!\", 'background: yellow; font-size:20px;');</script>{Environment.NewLine}"); output.Content.AppendHtml($"<script>console.log(\"%cCould not find the bundle file '{file.FileName}' for the bundle '{bundleName}'!\", 'background: yellow; font-size:20px;');</script>{Environment.NewLine}");
} }
protected virtual string GenerateBundleName(List<BundleTagHelperItem> bundleItems) protected virtual string GenerateBundleName(List<BundleTagHelperItem> bundleItems)

4
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs

@ -47,13 +47,13 @@ public class AbpTagHelperScriptService : AbpTagHelperResourceService
_ => false _ => false
}; };
var deferText = (defer || Options.DeferScriptsByDefault || Options.DeferScripts.Any(x => file.File.StartsWith(x, StringComparison.OrdinalIgnoreCase))) var deferText = (defer || Options.DeferScriptsByDefault || Options.DeferScripts.Any(x => file.FileName.StartsWith(x, StringComparison.OrdinalIgnoreCase)))
? "defer " ? "defer "
: string.Empty; : string.Empty;
var nonceText = (viewContext.HttpContext.Items.TryGetValue(AbpAspNetCoreConsts.ScriptNonceKey, out var nonce) && nonce is string nonceString && !string.IsNullOrEmpty(nonceString)) var nonceText = (viewContext.HttpContext.Items.TryGetValue(AbpAspNetCoreConsts.ScriptNonceKey, out var nonce) && nonce is string nonceString && !string.IsNullOrEmpty(nonceString))
? $"nonce=\"{nonceString}\" " ? $"nonce=\"{nonceString}\" "
: string.Empty; : string.Empty;
var src = file.IsCdn ? file.File : viewContext.GetUrlHelper().Content((file.File + "?_v=" + fileInfo!.LastModified.UtcTicks).EnsureStartsWith('~')); var src = file.IsCdn ? file.FileName : viewContext.GetUrlHelper().Content((file.FileName + "?_v=" + fileInfo!.LastModified.UtcTicks).EnsureStartsWith('~'));
output.Content.AppendHtml($"<script {deferText}{nonceText}src=\"{src}\"></script>{Environment.NewLine}"); output.Content.AppendHtml($"<script {deferText}{nonceText}src=\"{src}\"></script>{Environment.NewLine}");
} }
} }

4
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs

@ -51,8 +51,8 @@ public class AbpTagHelperStyleService : AbpTagHelperResourceService
_ => false _ => false
}; };
var href = file.IsCdn ? file.File : viewContext.GetUrlHelper().Content((file.File + "?_v=" + fileInfo!.LastModified.UtcTicks).EnsureStartsWith('~')); var href = file.IsCdn ? file.FileName : viewContext.GetUrlHelper().Content((file.FileName + "?_v=" + fileInfo!.LastModified.UtcTicks).EnsureStartsWith('~'));
if (preload || Options.PreloadStylesByDefault || Options.PreloadStyles.Any(x => file.File.StartsWith(x, StringComparison.OrdinalIgnoreCase))) if (preload || Options.PreloadStylesByDefault || Options.PreloadStyles.Any(x => file.FileName.StartsWith(x, StringComparison.OrdinalIgnoreCase)))
{ {
output.Content.AppendHtml(SecurityHeadersOptions.UseContentSecurityPolicyScriptNonce output.Content.AppendHtml(SecurityHeadersOptions.UseContentSecurityPolicyScriptNonce
? $"<link rel=\"preload\" href=\"{href}\" as=\"style\" abp-csp-style />{Environment.NewLine}" ? $"<link rel=\"preload\" href=\"{href}\" as=\"style\" abp-csp-style />{Environment.NewLine}"

6
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/BundleTagHelperFileItem.cs

@ -5,16 +5,16 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers;
public class BundleTagHelperFileItem : BundleTagHelperItem public class BundleTagHelperFileItem : BundleTagHelperItem
{ {
[NotNull] [NotNull]
public string File { get; } public BundleFile File { get; }
public BundleTagHelperFileItem([NotNull] string file) public BundleTagHelperFileItem([NotNull] BundleFile file)
{ {
File = Check.NotNull(file, nameof(file)); File = Check.NotNull(file, nameof(file));
} }
public override string ToString() public override string ToString()
{ {
return File; return File.FileName;
} }
public override void AddToConfiguration(BundleConfiguration configuration) public override void AddToConfiguration(BundleConfiguration configuration)

22
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs

@ -35,20 +35,20 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling;
)] )]
public class SharedThemeGlobalScriptContributor : BundleContributor public class SharedThemeGlobalScriptContributor : BundleContributor
{ {
public override void ConfigureBundle(BundleConfigurationContext context) public override void ConfigureBundle(BundleConfigurationContext context)
{ {
context.Files.AddRange(new[] context.Files.AddRange(new BundleFile[]
{ {
"/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js", "/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js", "/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js", "/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js", "/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js", "/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js", "/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js", "/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js", "/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js" "/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js"
}); });
} }
} }

8
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalStyleContributor.cs

@ -27,10 +27,10 @@ public class SharedThemeGlobalStyleContributor : BundleContributor
{ {
public override void ConfigureBundle(BundleConfigurationContext context) public override void ConfigureBundle(BundleConfigurationContext context)
{ {
context.Files.AddRange(new[] context.Files.AddRange(new BundleFile[]
{ {
"/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css", "/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-styles.css" "/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-styles.css"
}); });
} }
} }

Loading…
Cancel
Save