diff --git a/src/Umbraco.Web/JavaScript/AssetInitialization.cs b/src/Umbraco.Web/JavaScript/AssetInitialization.cs index 42c750ffd3..63f3cdf5f9 100644 --- a/src/Umbraco.Web/JavaScript/AssetInitialization.cs +++ b/src/Umbraco.Web/JavaScript/AssetInitialization.cs @@ -1,11 +1,10 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Reflection; using System.Web; -using ClientDependency.Core; -using ClientDependency.Core.Config; using Umbraco.Core; +using Umbraco.Core.Assets; +using Umbraco.Core.Runtime; using Umbraco.Web.Composing; using Umbraco.Web.PropertyEditors; @@ -13,7 +12,14 @@ namespace Umbraco.Web.JavaScript { internal abstract class AssetInitialization { - protected IEnumerable ScanPropertyEditors(ClientDependencyType assetType, HttpContextBase httpContext) + private readonly IRuntimeMinifier _runtimeMinifier; + + public AssetInitialization(IRuntimeMinifier runtimeMinifier) + { + _runtimeMinifier = runtimeMinifier; + } + + protected IEnumerable ScanPropertyEditors(AssetType assetType, HttpContextBase httpContext) { if (httpContext == null) throw new ArgumentNullException(nameof(httpContext)); var attributes = Current.PropertyEditors @@ -22,14 +28,10 @@ namespace Umbraco.Web.JavaScript .Select(x => x.DependencyFile) .ToList(); - var renderer = ClientDependencySettings.Instance.MvcRendererCollection["Umbraco.DependencyPathRenderer"]; - renderer.RegisterDependencies(attributes, new HashSet(), out var scripts, out var stylesheets, httpContext); - - var toParse = assetType == ClientDependencyType.Javascript ? scripts : stylesheets; - return toParse.Split(new[] { DependencyPathRenderer.Delimiter }, StringSplitOptions.RemoveEmptyEntries); + return _runtimeMinifier.GetAssetPaths(assetType, attributes); } - internal static IEnumerable OptimizeAssetCollection(IEnumerable assets, ClientDependencyType assetType, HttpContextBase httpContext) + internal static IEnumerable OptimizeAssetCollection(IEnumerable assets, AssetType assetType, HttpContextBase httpContext, IRuntimeMinifier runtimeMinifier) { if (httpContext == null) throw new ArgumentNullException(nameof(httpContext)); @@ -42,24 +44,16 @@ namespace Umbraco.Web.JavaScript // like lib/blah/blah.js so we need to turn them into absolutes here if (x.StartsWith("/") == false && Uri.IsWellFormedUriString(x, UriKind.Relative)) { - return new BasicFile(assetType) { FilePath = new Uri(requestUrl, x).AbsolutePath }; + return new AssetFile(assetType) { FilePath = new Uri(requestUrl, x).AbsolutePath }; } - return assetType == ClientDependencyType.Javascript + return assetType == AssetType.Javascript ? new JavascriptFile(x) - : (IClientDependencyFile) new CssFile(x); + : (IAssetFile) new CssFile(x); }).ToList(); - // get the output string for these registrations which will be processed by CDF correctly to stagger the output based - // on internal vs external resources. The output will be delimited based on our custom Umbraco.Web.UI.JavaScript.DependencyPathRenderer - var renderer = ClientDependencySettings.Instance.MvcRendererCollection["Umbraco.DependencyPathRenderer"]; - renderer.RegisterDependencies(dependencies, new HashSet(), out var scripts, out var stylesheets, httpContext); - var urls = assetType == ClientDependencyType.Javascript - ? scripts.Split(new[] { DependencyPathRenderer.Delimiter }, StringSplitOptions.RemoveEmptyEntries) - : stylesheets.Split(new[] { DependencyPathRenderer.Delimiter }, StringSplitOptions.RemoveEmptyEntries); - - return urls; + return runtimeMinifier.GetAssetPaths(assetType, dependencies);; } } } diff --git a/src/Umbraco.Web/JavaScript/ClientDependencyRuntimeMinifier.cs b/src/Umbraco.Web/JavaScript/ClientDependencyRuntimeMinifier.cs index ba8a9f7ea7..54eb446450 100644 --- a/src/Umbraco.Web/JavaScript/ClientDependencyRuntimeMinifier.cs +++ b/src/Umbraco.Web/JavaScript/ClientDependencyRuntimeMinifier.cs @@ -71,7 +71,7 @@ namespace Umbraco.Web.JavaScript foreach (var assetFile in attributes) { - if(!(assetFile is null)) + if(!((AssetFile)assetFile is null)) dependencies.Add(MapAssetFile(assetFile)); } diff --git a/src/Umbraco.Web/JavaScript/CssInitialization.cs b/src/Umbraco.Web/JavaScript/CssInitialization.cs index 8cf9067606..550f7be8d6 100644 --- a/src/Umbraco.Web/JavaScript/CssInitialization.cs +++ b/src/Umbraco.Web/JavaScript/CssInitialization.cs @@ -3,18 +3,21 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; -using ClientDependency.Core; +using Umbraco.Core.Assets; using Umbraco.Core.Manifest; +using Umbraco.Core.Runtime; namespace Umbraco.Web.JavaScript { internal class CssInitialization : AssetInitialization { private readonly IManifestParser _parser; + private readonly IRuntimeMinifier _runtimeMinifier; - public CssInitialization(IManifestParser parser) + public CssInitialization(IManifestParser parser, IRuntimeMinifier runtimeMinifier) : base(runtimeMinifier) { _parser = parser; + _runtimeMinifier = runtimeMinifier; } /// @@ -29,11 +32,11 @@ namespace Umbraco.Web.JavaScript public IEnumerable GetStylesheetFiles(HttpContextBase httpContext) { var stylesheets = new HashSet(); - var optimizedManifest = OptimizeAssetCollection(_parser.Manifest.Stylesheets, ClientDependencyType.Css, httpContext); + var optimizedManifest = OptimizeAssetCollection(_parser.Manifest.Stylesheets, AssetType.Css, httpContext, _runtimeMinifier); foreach (var stylesheet in optimizedManifest) stylesheets.Add(stylesheet); - foreach (var stylesheet in ScanPropertyEditors(ClientDependencyType.Css, httpContext)) + foreach (var stylesheet in ScanPropertyEditors(AssetType.Css, httpContext)) stylesheets.Add(stylesheet); return stylesheets.ToArray(); diff --git a/src/Umbraco.Web/JavaScript/JsInitialization.cs b/src/Umbraco.Web/JavaScript/JsInitialization.cs index f576ae791c..21774ea3bd 100644 --- a/src/Umbraco.Web/JavaScript/JsInitialization.cs +++ b/src/Umbraco.Web/JavaScript/JsInitialization.cs @@ -3,14 +3,15 @@ using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Web; -using ClientDependency.Core; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Umbraco.Core; +using Umbraco.Core.Assets; using Umbraco.Web.Composing; using Umbraco.Core.Manifest; using Umbraco.Core.Configuration; using Umbraco.Core.IO; +using Umbraco.Core.Runtime; namespace Umbraco.Web.JavaScript { @@ -21,10 +22,12 @@ namespace Umbraco.Web.JavaScript internal class JsInitialization : AssetInitialization { private readonly IManifestParser _parser; + private readonly IRuntimeMinifier _runtimeMinifier; - public JsInitialization(IManifestParser parser) + public JsInitialization(IManifestParser parser, IRuntimeMinifier runtimeMinifier) : base(runtimeMinifier) { _parser = parser; + _runtimeMinifier = runtimeMinifier; } // deal with javascript functions inside of json (not a supported json syntax) @@ -86,9 +89,9 @@ namespace Umbraco.Web.JavaScript foreach (var script in additionalJsFiles) scripts.Add(script); - scripts = new HashSet(OptimizeAssetCollection(scripts, ClientDependencyType.Javascript, httpContext)); + scripts = new HashSet(OptimizeAssetCollection(scripts, AssetType.Javascript, httpContext, _runtimeMinifier)); - foreach (var script in ScanPropertyEditors(ClientDependencyType.Javascript, httpContext)) + foreach (var script in ScanPropertyEditors(AssetType.Javascript, httpContext)) scripts.Add(script); return scripts.ToArray(); @@ -99,17 +102,18 @@ namespace Umbraco.Web.JavaScript /// /// /// + /// /// /// /// Used to cache bust and optimize script paths /// - public static IEnumerable OptimizeScriptFiles(HttpContextBase httpContext, IEnumerable scriptFiles) + public static IEnumerable OptimizeScriptFiles(HttpContextBase httpContext, IEnumerable scriptFiles, IRuntimeMinifier runtimeMinifier) { var scripts = new HashSet(); foreach (var script in scriptFiles) scripts.Add(script); - scripts = new HashSet(OptimizeAssetCollection(scripts, ClientDependencyType.Javascript, httpContext)); + scripts = new HashSet(OptimizeAssetCollection(scripts, AssetType.Javascript, httpContext, runtimeMinifier)); return scripts.ToArray(); } @@ -140,9 +144,9 @@ namespace Umbraco.Web.JavaScript return resources.Where(x => x.Type == JTokenType.String).Select(x => x.ToString()); } - internal static IEnumerable OptimizeTinyMceScriptFiles(HttpContextBase httpContext) + internal static IEnumerable OptimizeTinyMceScriptFiles(HttpContextBase httpContext, IRuntimeMinifier runtimeMinifier) { - return OptimizeScriptFiles(httpContext, GetTinyMceInitialization()); + return OptimizeScriptFiles(httpContext, GetTinyMceInitialization(), runtimeMinifier); } /// diff --git a/src/Umbraco.Web/Mvc/MinifyJavaScriptResultAttribute.cs b/src/Umbraco.Web/Mvc/MinifyJavaScriptResultAttribute.cs index 49eee35598..fa1e041d85 100644 --- a/src/Umbraco.Web/Mvc/MinifyJavaScriptResultAttribute.cs +++ b/src/Umbraco.Web/Mvc/MinifyJavaScriptResultAttribute.cs @@ -1,9 +1,7 @@ using System.Web.Mvc; -using System.Web.UI; -using ClientDependency.Core; -using ClientDependency.Core.CompositeFiles; -using Umbraco.Composing; +using Umbraco.Web.Composing; using Umbraco.Core.Hosting; +using Umbraco.Core.Runtime; namespace Umbraco.Web.Mvc { @@ -16,15 +14,18 @@ namespace Umbraco.Web.Mvc public class MinifyJavaScriptResultAttribute : ActionFilterAttribute { private readonly IHostingEnvironment _hostingEnvironment; + private readonly IRuntimeMinifier _runtimeMinifier; public MinifyJavaScriptResultAttribute() { _hostingEnvironment = Current.HostingEnvironment; + _runtimeMinifier = Current.RuntimeMinifier; } - public MinifyJavaScriptResultAttribute(IHostingEnvironment hostingEnvironment) + public MinifyJavaScriptResultAttribute(IHostingEnvironment hostingEnvironment, IRuntimeMinifier runtimeMinifier) { _hostingEnvironment = hostingEnvironment; + _runtimeMinifier = runtimeMinifier; } /// @@ -42,10 +43,8 @@ namespace Umbraco.Web.Mvc //minify the result var result = jsResult.Script; - var minifier = new JSMin(); - var minified = minifier.Minify(result); + var minified = _runtimeMinifier.Minify(result); jsResult.Script = minified; } - } } diff --git a/src/Umbraco.Web/PropertyEditors/PropertyEditorAssetAttribute.cs b/src/Umbraco.Web/PropertyEditors/PropertyEditorAssetAttribute.cs index 0953fa2e4c..c142e31b91 100644 --- a/src/Umbraco.Web/PropertyEditors/PropertyEditorAssetAttribute.cs +++ b/src/Umbraco.Web/PropertyEditors/PropertyEditorAssetAttribute.cs @@ -1,5 +1,5 @@ using System; -using ClientDependency.Core; +using Umbraco.Core.Assets; namespace Umbraco.Web.PropertyEditors { @@ -12,25 +12,19 @@ namespace Umbraco.Web.PropertyEditors [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] public class PropertyEditorAssetAttribute : Attribute { - public ClientDependencyType AssetType { get; private set; } + public AssetType AssetType { get; private set; } public string FilePath { get; private set; } public int Priority { get; set; } /// /// Returns a CDF file reference /// - public IClientDependencyFile DependencyFile - { - get - { - return Priority == int.MinValue - ? new BasicFile(AssetType) {FilePath = FilePath} - : new BasicFile(AssetType) {FilePath = FilePath, Priority = Priority}; + public IAssetFile DependencyFile => + Priority == int.MinValue + ? new AssetFile(AssetType) {FilePath = FilePath} + : new AssetFile(AssetType) {FilePath = FilePath, Priority = Priority}; - } - } - - public PropertyEditorAssetAttribute(ClientDependencyType assetType, string filePath) + public PropertyEditorAssetAttribute(AssetType assetType, string filePath) { AssetType = assetType; FilePath = filePath; diff --git a/src/Umbraco.Web/UrlHelperExtensions.cs b/src/Umbraco.Web/UrlHelperExtensions.cs index a0bf5d3ded..8be68631e7 100644 --- a/src/Umbraco.Web/UrlHelperExtensions.cs +++ b/src/Umbraco.Web/UrlHelperExtensions.cs @@ -4,9 +4,7 @@ using System.Linq; using System.Linq.Expressions; using System.Web.Mvc; using System.Web.Routing; -using ClientDependency.Core.Config; using Umbraco.Core; -using Umbraco.Core.Configuration; using Umbraco.Web.Composing; using Umbraco.Web.Mvc; using Umbraco.Web.WebApi; @@ -18,7 +16,6 @@ namespace Umbraco.Web /// public static class UrlHelperExtensions { - /// /// Return the Url for a Web Api service /// @@ -147,9 +144,9 @@ namespace Umbraco.Web { return DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture).GenerateHash(); } - + var version = Current.RuntimeState.SemanticVersion.ToSemanticString(); - return $"{version}.{ClientDependencySettings.Instance.Version}".GenerateHash(); + return $"{version}.{Current.RuntimeMinifier.Version}".GenerateHash(); } } }