Completes: U4-3230 Combine/Minify manifest files to one request with CDF

This commit is contained in:
Shannon
2013-11-28 10:37:08 +11:00
parent 413248a126
commit c86f52d5ea
4 changed files with 73 additions and 50 deletions

View File

@@ -0,0 +1,63 @@
using System;
using System.Linq;
using System.Web;
using ClientDependency.Core;
using ClientDependency.Core.Config;
using Newtonsoft.Json.Linq;
namespace Umbraco.Web.UI.JavaScript
{
internal abstract class AssetInitialization
{
/// <summary>
/// This will check if we're in release mode, if so it will create a CDF URL to load them all in at once
/// </summary>
/// <param name="fileRefs"></param>
/// <param name="cdfType"></param>
/// <returns></returns>
protected JArray CheckIfReleaseAndOptimized(JArray fileRefs, ClientDependencyType cdfType)
{
if (HttpContext.Current != null && HttpContext.Current.IsDebuggingEnabled == false)
{
return GetOptimized(fileRefs, cdfType);
}
return fileRefs;
}
/// <summary>
/// Return array of optimized URLs
/// </summary>
/// <param name="fileRefs"></param>
/// <param name="cdfType"></param>
/// <returns></returns>
protected JArray GetOptimized(JArray fileRefs, ClientDependencyType cdfType)
{
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 BasicFile(cdfType) { FilePath = absolute.AbsolutePath };
}
return null;
}
return new JavascriptFile(asString);
}).Where(x => x != null);
var urls = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(
depenencies,
cdfType,
new HttpContextWrapper(HttpContext.Current));
var result = new JArray();
foreach (var u in urls)
{
result.Add(u);
}
return result;
}
}
}

View File

@@ -1,4 +1,5 @@
using Newtonsoft.Json.Linq;
using ClientDependency.Core;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -9,7 +10,7 @@ using Umbraco.Core.Manifest;
namespace Umbraco.Web.UI.JavaScript
{
internal class CssInitialization
internal class CssInitialization : AssetInitialization
{
private readonly ManifestParser _parser;
@@ -29,6 +30,9 @@ namespace Umbraco.Web.UI.JavaScript
ManifestParser.MergeJArrays(merged, m.StylesheetInitialize);
}
//now we can optimize if in release mode
merged = CheckIfReleaseAndOptimized(merged, ClientDependencyType.Css);
return ParseMain(merged);
}

View File

@@ -1,10 +1,7 @@
using System;
using System.Collections.Generic;
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;
@@ -17,7 +14,7 @@ namespace Umbraco.Web.UI.JavaScript
/// Reads from all defined manifests and ensures that any of their initialization is output with the
/// main Umbraco initialization output.
/// </summary>
internal class JsInitialization
internal class JsInitialization : AssetInitialization
{
private readonly ManifestParser _parser;
@@ -54,55 +51,13 @@ namespace Umbraco.Web.UI.JavaScript
}
//now we can optimize if in release mode
umbracoInit = CheckIfReleaseAndOptimized(umbracoInit);
umbracoInit = CheckIfReleaseAndOptimized(umbracoInit, ClientDependencyType.Javascript);
return ParseMain(
umbracoInit.ToString(),
IOHelper.ResolveUrl(SystemDirectories.Umbraco));
}
/// <summary>
/// This will check if we're in release mode, if so it will create a CDF URL to load them all in at once
/// </summary>
/// <param name="fileRefs"></param>
/// <returns></returns>
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;
}
/// <summary>
/// Returns the default config as a JArray
/// </summary>