Merge pull request #4135 from abpframework/maliming/tilde-slash

Use tilde slash in script and style url.
pull/4164/head
Halil İbrahim Kalkan 5 years ago committed by GitHub
commit 4a17491335
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,5 +1,7 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Threading; using Volo.Abp.Threading;
@ -8,17 +10,21 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
{ {
public abstract class AbpTagHelper : TagHelper, ITransientDependency public abstract class AbpTagHelper : TagHelper, ITransientDependency
{ {
} }
public abstract class AbpTagHelper<TTagHelper, TService> : AbpTagHelper public abstract class AbpTagHelper<TTagHelper, TService> : AbpTagHelper
where TTagHelper : AbpTagHelper<TTagHelper, TService> where TTagHelper : AbpTagHelper<TTagHelper, TService>
where TService : class, IAbpTagHelperService<TTagHelper> where TService : class, IAbpTagHelperService<TTagHelper>
{ {
protected TService Service { get; } protected TService Service { get; }
public override int Order => Service.Order; public override int Order => Service.Order;
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
protected AbpTagHelper(TService service) protected AbpTagHelper(TService service)
{ {
Service = service; Service = service;
@ -40,4 +46,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
return Service.ProcessAsync(context, output); return Service.ProcessAsync(context, output);
} }
} }
} }

@ -12,10 +12,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
[HtmlAttributeName("abp-model")] [HtmlAttributeName("abp-model")]
public ModelExpression Model { get; set; } public ModelExpression Model { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public bool? SubmitButton { get; set; } public bool? SubmitButton { get; set; }
public bool? RequiredSymbols { get; set; } = true; public bool? RequiredSymbols { get; set; } = true;

@ -29,15 +29,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
[HtmlAttributeName("required-symbol")] [HtmlAttributeName("required-symbol")]
public bool DisplayRequiredSymbol { get; set; } = true; public bool DisplayRequiredSymbol { get; set; } = true;
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
[HtmlAttributeName("asp-format")] [HtmlAttributeName("asp-format")]
public string Format { get; set; } public string Format { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Value { get; set; } public string Value { get; set; }
public AbpInputTagHelper(AbpInputTagHelperService tagHelperService) public AbpInputTagHelper(AbpInputTagHelperService tagHelperService)

@ -18,10 +18,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
public IEnumerable<SelectListItem> AspItems { get; set; } public IEnumerable<SelectListItem> AspItems { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public AbpRadioInputTagHelper(AbpRadioInputTagHelperService tagHelperService) public AbpRadioInputTagHelper(AbpRadioInputTagHelperService tagHelperService)
: base(tagHelperService) : base(tagHelperService)
{ {

@ -21,10 +21,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
[HtmlAttributeName("required-symbol")] [HtmlAttributeName("required-symbol")]
public bool DisplayRequiredSymbol { get; set; } = true; public bool DisplayRequiredSymbol { get; set; } = true;
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public AbpSelectTagHelper(AbpSelectTagHelperService tagHelperService) public AbpSelectTagHelper(AbpSelectTagHelperService tagHelperService)
: base(tagHelperService) : base(tagHelperService)
{ {

@ -11,10 +11,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination
public bool? ShowInfo { get; set; } public bool? ShowInfo { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public AbpPaginationTagHelper(AbpPaginationTagHelperService tagHelperService) public AbpPaginationTagHelper(AbpPaginationTagHelperService tagHelperService)
: base(tagHelperService) : base(tagHelperService)
{ {

@ -3,9 +3,9 @@ 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 abstract class AbpBundleItemTagHelper<TTagHelper, TTagHelperService> : AbpTagHelper<TTagHelper, TTagHelperService>, IBundleItemTagHelper public abstract class AbpBundleItemTagHelper<TTagHelper, TTagHelperService> : AbpTagHelper<TTagHelper, TTagHelperService>, IBundleItemTagHelper
where TTagHelper : AbpTagHelper<TTagHelper, TTagHelperService>, IBundleItemTagHelper where TTagHelper : AbpTagHelper<TTagHelper, TTagHelperService>, IBundleItemTagHelper
where TTagHelperService: AbpBundleItemTagHelperService<TTagHelper> where TTagHelperService: AbpBundleItemTagHelperService<TTagHelper, TTagHelperService>
{ {
/// <summary> /// <summary>
/// A file path. /// A file path.
@ -57,4 +57,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
protected abstract string GetFileExtension(); protected abstract string GetFileExtension();
} }
} }

@ -5,8 +5,9 @@ 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 abstract class AbpBundleItemTagHelperService<TTagHelper> : AbpTagHelperService<TTagHelper> public abstract class AbpBundleItemTagHelperService<TTagHelper, TService> : AbpTagHelperService<TTagHelper>
where TTagHelper : TagHelper, IBundleItemTagHelper where TTagHelper : AbpTagHelper<TTagHelper, TService>, IBundleItemTagHelper
where TService : class, IAbpTagHelperService<TTagHelper>
{ {
protected AbpTagHelperResourceService ResourceService { get; } protected AbpTagHelperResourceService ResourceService { get; }
@ -26,6 +27,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
else else
{ {
await ResourceService.ProcessAsync( await ResourceService.ProcessAsync(
TagHelper.ViewContext,
context, context,
output, output,
new List<BundleTagHelperItem> new List<BundleTagHelperItem>
@ -37,4 +39,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
} }
} }
} }
} }

@ -5,8 +5,9 @@ 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 abstract class AbpBundleTagHelperService<TTagHelper> : AbpTagHelperService<TTagHelper> public abstract class AbpBundleTagHelperService<TTagHelper, TService> : AbpTagHelperService<TTagHelper>
where TTagHelper : TagHelper, IBundleTagHelper where TTagHelper : AbpTagHelper<TTagHelper, TService>, IBundleTagHelper
where TService : class, IAbpTagHelperService<TTagHelper>
{ {
protected AbpTagHelperResourceService ResourceService { get; } protected AbpTagHelperResourceService ResourceService { get; }
@ -18,6 +19,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
await ResourceService.ProcessAsync( await ResourceService.ProcessAsync(
TagHelper.ViewContext,
context, context,
output, output,
await GetBundleItems(context, output), await GetBundleItems(context, output),
@ -33,4 +35,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
return bundleItems; return bundleItems;
} }
} }
} }

@ -1,10 +1,10 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
{ {
public class AbpScriptBundleTagHelperService : AbpBundleTagHelperService<AbpScriptBundleTagHelper> public class AbpScriptBundleTagHelperService : AbpBundleTagHelperService<AbpScriptBundleTagHelper, AbpScriptBundleTagHelperService>
{ {
public AbpScriptBundleTagHelperService(AbpTagHelperScriptService resourceHelper) public AbpScriptBundleTagHelperService(AbpTagHelperScriptService resourceHelper)
: base(resourceHelper) : base(resourceHelper)
{ {
} }
} }
} }

@ -1,10 +1,10 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
{ {
public class AbpScriptTagHelperService : AbpBundleItemTagHelperService<AbpScriptTagHelper> public class AbpScriptTagHelperService : AbpBundleItemTagHelperService<AbpScriptTagHelper, AbpScriptTagHelperService>
{ {
public AbpScriptTagHelperService(AbpTagHelperScriptService resourceService) public AbpScriptTagHelperService(AbpTagHelperScriptService resourceService)
: base(resourceService) : base(resourceService)
{ {
} }
} }
} }

@ -1,10 +1,10 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
{ {
public class AbpStyleBundleTagHelperService : AbpBundleTagHelperService<AbpStyleBundleTagHelper> public class AbpStyleBundleTagHelperService : AbpBundleTagHelperService<AbpStyleBundleTagHelper, AbpStyleBundleTagHelperService>
{ {
public AbpStyleBundleTagHelperService(AbpTagHelperStyleService resourceHelper) public AbpStyleBundleTagHelperService(AbpTagHelperStyleService resourceHelper)
: base(resourceHelper) : base(resourceHelper)
{ {
} }
} }
} }

@ -1,10 +1,10 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
{ {
public class AbpStyleTagHelperService : AbpBundleItemTagHelperService<AbpStyleTagHelper> public class AbpStyleTagHelperService : AbpBundleItemTagHelperService<AbpStyleTagHelper, AbpStyleTagHelperService>
{ {
public AbpStyleTagHelperService(AbpTagHelperStyleService resourceService) public AbpStyleTagHelperService(AbpTagHelperStyleService resourceService)
: base(resourceService) : base(resourceService)
{ {
} }
} }
} }

@ -5,6 +5,8 @@ using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@ -20,7 +22,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
protected IWebContentFileProvider WebContentFileProvider { get; } protected IWebContentFileProvider WebContentFileProvider { get; }
protected IWebHostEnvironment HostingEnvironment { get; } protected IWebHostEnvironment HostingEnvironment { get; }
protected readonly AbpBundlingOptions Options; protected readonly AbpBundlingOptions Options;
protected AbpTagHelperResourceService( protected AbpTagHelperResourceService(
IBundleManager bundleManager, IBundleManager bundleManager,
IWebContentFileProvider webContentFileProvider, IWebContentFileProvider webContentFileProvider,
@ -36,11 +38,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
} }
public virtual async Task ProcessAsync( public virtual async Task ProcessAsync(
[NotNull] ViewContext viewContext,
[NotNull] TagHelperContext context, [NotNull] TagHelperContext context,
[NotNull] TagHelperOutput output, [NotNull] TagHelperOutput output,
[NotNull] List<BundleTagHelperItem> bundleItems, [NotNull] List<BundleTagHelperItem> bundleItems,
[CanBeNull] string bundleName = null) [CanBeNull] string bundleName = null)
{ {
Check.NotNull(viewContext, nameof(viewContext));
Check.NotNull(context, nameof(context)); Check.NotNull(context, nameof(context));
Check.NotNull(output, nameof(output)); Check.NotNull(output, nameof(output));
Check.NotNull(bundleItems, nameof(bundleItems)); Check.NotNull(bundleItems, nameof(bundleItems));
@ -69,7 +73,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
throw new AbpException($"Could not find the bundle file '{bundleFile}' from {nameof(IWebContentFileProvider)}"); throw new AbpException($"Could not find the bundle file '{bundleFile}' from {nameof(IWebContentFileProvider)}");
} }
AddHtmlTag(context, output, bundleFile + "?_v=" + file.LastModified.UtcTicks); AddHtmlTag(viewContext, context, output, bundleFile + "?_v=" + file.LastModified.UtcTicks);
} }
stopwatch.Stop(); stopwatch.Stop();
@ -80,11 +84,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
protected abstract Task<IReadOnlyList<string>> GetBundleFilesAsync(string bundleName); protected abstract Task<IReadOnlyList<string>> GetBundleFilesAsync(string bundleName);
protected abstract void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file); protected abstract void AddHtmlTag(ViewContext viewContext, TagHelperContext context, TagHelperOutput output, string file);
protected virtual string GenerateBundleName(List<BundleTagHelperItem> bundleItems) protected virtual string GenerateBundleName(List<BundleTagHelperItem> bundleItems)
{ {
return bundleItems.JoinAsString("|").ToMd5(); return bundleItems.JoinAsString("|").ToMd5();
} }
} }
} }

@ -3,7 +3,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.Routing;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.VirtualFileSystem; using Volo.Abp.AspNetCore.VirtualFileSystem;
@ -39,9 +43,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
return await BundleManager.GetScriptBundleFilesAsync(bundleName); return await BundleManager.GetScriptBundleFilesAsync(bundleName);
} }
protected override void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file) protected override void AddHtmlTag(ViewContext viewContext, TagHelperContext context, TagHelperOutput output, string file)
{ {
output.Content.AppendHtml($"<script src=\"{file}\"></script>{Environment.NewLine}"); output.Content.AppendHtml($"<script src=\"{viewContext.GetUrlHelper().Content(file.EnsureStartsWith('~'))}\"></script>{Environment.NewLine}");
} }
} }
} }

@ -3,7 +3,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.Routing;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.VirtualFileSystem; using Volo.Abp.AspNetCore.VirtualFileSystem;
@ -39,9 +43,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
return await BundleManager.GetStyleBundleFilesAsync(bundleName); return await BundleManager.GetStyleBundleFilesAsync(bundleName);
} }
protected override void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file) protected override void AddHtmlTag(ViewContext viewContext, TagHelperContext context, TagHelperOutput output, string file)
{ {
output.Content.AppendHtml($"<link rel=\"stylesheet\" href=\"{file}\" />{Environment.NewLine}"); output.Content.AppendHtml($"<link rel=\"stylesheet\" href=\"{viewContext.GetUrlHelper().Content(file.EnsureStartsWith('~'))}\" />{Environment.NewLine}");
} }
} }
} }

@ -0,0 +1,15 @@
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.Routing;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.AspNetCore.Mvc.ViewFeatures
{
public static class ViewContextExtensions
{
public static IUrlHelper GetUrlHelper(this ViewContext viewContext)
{
var urlHelperFactory = viewContext.HttpContext.RequestServices.GetRequiredService<IUrlHelperFactory>();
return urlHelperFactory.GetUrlHelper(viewContext);
}
}
}
Loading…
Cancel
Save