Browse Source

Bundling refactor.

pull/301/head
Halil ibrahim Kalkan 8 years ago
parent
commit
7108dbc2c2
  1. 2
      src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleManager.cs
  2. 9
      src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs
  3. 9
      src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs
  4. 11
      src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs
  5. 16
      src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/IWebRequestBundleCoordinator.cs
  6. 19
      src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/IWebRequestResources.cs
  7. 29
      src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/WebRequestBundleCoordinator.cs
  8. 40
      src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/WebRequestResources.cs
  9. 17
      src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryValidation/JQueryValidationScriptContributor.cs

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

@ -67,7 +67,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling
protected virtual IReadOnlyList<string> GetBundleFiles(BundleConfigurationCollection bundles, string bundleName, IBundler bundler)
{
var files = RequestResources.TryAdd(CreateFileList(bundles, bundleName));
var files = RequestResources.Filter(CreateFileList(bundles, bundleName));
if (!IsBundlingEnabled())
{

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

@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Razor.TagHelpers;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc.UI.Resources;
using Volo.Abp.AspNetCore.VirtualFileSystem;
using Volo.Abp.DependencyInjection;
@ -14,12 +15,16 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
protected IHybridWebRootFileProvider WebRootFileProvider { get; }
protected IWebRequestResources WebRequestResources { get; }
protected AbpTagHelperResourceService(
IBundleManager bundleManager,
IHybridWebRootFileProvider webRootFileProvider)
IHybridWebRootFileProvider webRootFileProvider,
IWebRequestResources webRequestResources)
{
BundleManager = bundleManager;
WebRootFileProvider = webRootFileProvider;
WebRequestResources = webRequestResources;
}
public virtual Task ProcessAsync(
@ -56,6 +61,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
AddHtmlTag(context, output, bundleFile + "?_v=" + file.LastModified.UtcTicks);
}
WebRequestResources.Add(bundleFiles);
return Task.CompletedTask;
}

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

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Resources;
using Volo.Abp.AspNetCore.VirtualFileSystem;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
@ -9,10 +10,12 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
{
public AbpTagHelperScriptService(
IBundleManager bundleManager,
IHybridWebRootFileProvider webRootFileProvider
IHybridWebRootFileProvider webRootFileProvider,
IWebRequestResources webRequestResources
) : base(
bundleManager,
webRootFileProvider)
bundleManager,
webRootFileProvider,
webRequestResources)
{
}

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

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Resources;
using Volo.Abp.AspNetCore.VirtualFileSystem;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
@ -9,10 +10,12 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
{
public AbpTagHelperStyleService(
IBundleManager bundleManager,
IHybridWebRootFileProvider webRootFileProvider
) : base(
bundleManager,
webRootFileProvider)
IHybridWebRootFileProvider webRootFileProvider,
IWebRequestResources webRequestResources
) : base(
bundleManager,
webRootFileProvider,
webRequestResources)
{
}

16
src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/IWebRequestBundleCoordinator.cs

@ -1,16 +0,0 @@
using System.Collections.Generic;
namespace Volo.Abp.AspNetCore.Mvc.UI.Resources
{
public interface IWebRequestResources
{
/// <summary>
/// Adds resouces to to current web request except the ones added before.
/// </summary>
/// <param name="resources">Candidate resources to be added</param>
/// <returns>Resources actually added</returns>
List<string> TryAdd(IEnumerable<string> resources);
bool TryAdd(string resource);
}
}

19
src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/IWebRequestResources.cs

@ -0,0 +1,19 @@
using System.Collections.Generic;
namespace Volo.Abp.AspNetCore.Mvc.UI.Resources
{
public interface IWebRequestResources
{
/// <summary>
/// Filters given resources and returns a list of resources those are not
/// added to the page for current web request.
/// </summary>
List<string> Filter(IEnumerable<string> resources);
bool IsAddedBefore(string resource);
void Add(IEnumerable<string> resources);
IReadOnlyList<string> GetAll();
}
}

29
src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/WebRequestBundleCoordinator.cs

@ -1,29 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.UI.Resources
{
public class WebRequestResources : IWebRequestResources, IScopedDependency
{
protected List<string> Resources { get; }
public WebRequestResources()
{
Resources = new List<string>();
}
public virtual List<string> TryAdd(IEnumerable<string> resources)
{
var newFiles = resources.Except(Resources).ToList();
Resources.AddRange(newFiles);
return newFiles;
}
public bool TryAdd(string resource)
{
return Resources.AddIfNotContains(resource);
}
}
}

40
src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Resources/WebRequestResources.cs

@ -0,0 +1,40 @@
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.UI.Resources
{
public class WebRequestResources : IWebRequestResources, IScopedDependency
{
protected List<string> Resources { get; }
public WebRequestResources()
{
Resources = new List<string>();
}
public List<string> Filter(IEnumerable<string> resources)
{
return resources.Except(Resources).ToList();
}
public bool IsAddedBefore(string resource)
{
return Resources.Contains(resource);
}
public void Add(IEnumerable<string> resources)
{
foreach (var resource in resources)
{
Resources.AddIfNotContains(resource);
}
}
public IReadOnlyList<string> GetAll()
{
return Resources.ToImmutableList();
}
}
}

17
src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryValidation/JQueryValidationScriptContributor.cs

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Globalization;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery;
using Volo.Abp.Modularity;
@ -8,9 +9,25 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.JQueryValidation
[DependsOn(typeof(JQueryScriptContributor))]
public class JQueryValidationScriptContributor : BundleContributor
{
public const string DefaultLocalizationFolder = "/libs/jquery-validation/localization/";
public static Dictionary<string, string> LocalizationMapping { get; } = new Dictionary<string, string>
{
//TODO: Add all!
{"ar", DefaultLocalizationFolder + "messages_ar.js"},
{"tr", DefaultLocalizationFolder + "messages_tr.js"}
};
public override void ConfigureBundle(BundleConfigurationContext context)
{
context.Files.AddIfNotContains("/libs/jquery-validation/jquery.validate.js");
//context.PostDynamicFiles.AddIfNotContains("/libs/jquery-validation/localization/messages_" + CultureInfo.CurrentUICulture.Name + ".js");
}
public void ConfigureDynamic(BundleConfigurationContext context)
{
//TODO: !!!
context.Files.AddIfNotContains("/libs/jquery-validation/localization/messages_" + CultureInfo.CurrentUICulture.Name + ".js");
}
}
}

Loading…
Cancel
Save