From ce162e265724dde4285adae906a9f6917ced78c5 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 27 Nov 2013 18:42:35 +1100 Subject: [PATCH] Gets the JS done for: U4-3230 Combine/Minify manifest files to one request with CDF - now loading incredibly fast. --- .../UI/JavaScript/JsInitialization.cs | 62 ++++++++++++++++++- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web/UI/JavaScript/JsInitialization.cs b/src/Umbraco.Web/UI/JavaScript/JsInitialization.cs index 14d0fc9311..200bf6c4d2 100644 --- a/src/Umbraco.Web/UI/JavaScript/JsInitialization.cs +++ b/src/Umbraco.Web/UI/JavaScript/JsInitialization.cs @@ -1,9 +1,15 @@ -using System.IO; +using System; +using System.Collections.Generic; +using System.IO; using System.Text.RegularExpressions; +using System.Web; +using ClientDependency.Core; +using ClientDependency.Core.Config; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Umbraco.Core.IO; using Umbraco.Core.Manifest; +using System.Linq; namespace Umbraco.Web.UI.JavaScript { @@ -47,11 +53,56 @@ namespace Umbraco.Web.UI.JavaScript ManifestParser.MergeJArrays(umbracoInit, additionalJsFiles); } + //now we can optimize if in release mode + umbracoInit = CheckIfReleaseAndOptimized(umbracoInit); + return ParseMain( umbracoInit.ToString(), IOHelper.ResolveUrl(SystemDirectories.Umbraco)); } + /// + /// This will check if we're in release mode, if so it will create a CDF URL to load them all in at once + /// + /// + /// + internal JArray CheckIfReleaseAndOptimized(JArray fileRefs) + { + if (HttpContext.Current != null && HttpContext.Current.IsDebuggingEnabled == false) + { + return GetOptimized(fileRefs); + } + return fileRefs; + } + + internal JArray GetOptimized(JArray fileRefs) + { + var depenencies = fileRefs.Select(x => + { + var asString = x.ToString(); + if (asString.StartsWith("/") == false) + { + if (Uri.IsWellFormedUriString(asString, UriKind.Relative)) + { + var absolute = new Uri(HttpContext.Current.Request.Url, asString); + return new JavascriptFile(absolute.AbsolutePath); + } + return null; + } + return new JavascriptFile(asString); + }).Where(x => x != null); + + var urls = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList( + depenencies, ClientDependencyType.Javascript, new HttpContextWrapper(HttpContext.Current)); + + var result = new JArray(); + foreach (var u in urls) + { + result.Add(u); + } + return result; + } + /// /// Returns the default config as a JArray /// @@ -59,8 +110,13 @@ namespace Umbraco.Web.UI.JavaScript internal static JArray GetDefaultInitialization() { var init = Resources.JsInitialize; - var jArr = JsonConvert.DeserializeObject(init); - return jArr; + var deserialized = JsonConvert.DeserializeObject(init); + var result = new JArray(); + foreach (var j in deserialized.Where(j => j.Type == JTokenType.String)) + { + result.Add(j); + } + return result; } ///