using System.Web.Mvc; using Umbraco.Web.Composing; using Umbraco.Core.Hosting; using Umbraco.Core.Runtime; using Umbraco.Core.WebAssets; namespace Umbraco.Web.Mvc { /// /// Minifies the result for the JavaScriptResult /// /// /// Only minifies in release mode /// /// Migrated already to .Net Core public class MinifyJavaScriptResultAttribute : ActionFilterAttribute { private readonly IHostingEnvironment _hostingEnvironment; private readonly IRuntimeMinifier _runtimeMinifier; public MinifyJavaScriptResultAttribute() { _hostingEnvironment = Current.HostingEnvironment; _runtimeMinifier = Current.RuntimeMinifier; } public MinifyJavaScriptResultAttribute(IHostingEnvironment hostingEnvironment, IRuntimeMinifier runtimeMinifier) { _hostingEnvironment = hostingEnvironment; _runtimeMinifier = runtimeMinifier; } /// /// Minify the result if in release mode /// /// public override void OnResultExecuting(ResultExecutingContext filterContext) { base.OnResultExecuting(filterContext); if (filterContext.Result == null) return; var jsResult = filterContext.Result as JavaScriptResult; if (jsResult == null) return; if (_hostingEnvironment.IsDebugMode) return; //minify the result var result = jsResult.Script; var minified = _runtimeMinifier.MinifyAsync(result, AssetType.Javascript).GetAwaiter().GetResult(); jsResult.Script = minified; } } }