/// <summary> /// Remove and get framework group. /// </summary> /// <param name="itemGroup">The web asset to remove.</param> /// <returns>The web asset item group</returns> private static WebAssetItemGroup RemoveAndGetFrameworkGroup(WebAssetItemGroup itemGroup) { WebAssetItemGroup frameworkGroup = new WebAssetItemGroup("framework", false) { Combined = itemGroup.Combined, Compress = itemGroup.Compress, CacheDurationInDays = itemGroup.CacheDurationInDays, DefaultPath = itemGroup.DefaultPath, Version = itemGroup.Version }; for (int i = itemGroup.Items.Count - 1; i >= 0; i--) { WebAssetItem item = itemGroup.Items[i]; string fileName = Path.GetFileName(item.Source); if ((!fileName.Equals(ScriptRegistrar.jQuery, StringComparison.OrdinalIgnoreCase)) && (ScriptRegistrar.FrameworkScriptFileNames.Contains(fileName, StringComparer.OrdinalIgnoreCase))) { frameworkGroup.Items.Add(new WebAssetItem(item.Source)); itemGroup.Items.RemoveAt(i); } } frameworkGroup.Items.Reverse(); return(frameworkGroup); }
/// <summary> /// Is native file /// </summary> /// <param name="item">The web asset item to test.</param> /// <returns>True if native else false.</returns> private static bool IsNativeFile(WebAssetItem item) { if (item.Source.StartsWith("~/", StringComparison.Ordinal)) { string fileName = Path.GetFileName(item.Source); return(fileName.Equals(ScriptRegistrar.jQuery, StringComparison.OrdinalIgnoreCase) || fileName.Equals(ScriptRegistrar.jQueryValidation, StringComparison.OrdinalIgnoreCase) || fileName.StartsWith("Nequeo.", StringComparison.OrdinalIgnoreCase)); } return(false); }
/// <summary> /// Does the web asset already exist. /// </summary> /// <param name="item">The item to test.</param> /// <returns>True if it exists else false.</returns> private bool AlreadyExists(IWebAssetItem item) { WebAssetItem assetItem = item as WebAssetItem; WebAssetItemGroup assetItemGroup = item as WebAssetItemGroup; if (assetItem != null) { return(AssetItems.Any(i => i != item && i.Source.IsCaseInsensitiveEqual(assetItem.Source))); } if (assetItemGroup != null) { return(AssetGroups.Any(i => i != item && i.Name.IsCaseInsensitiveEqual(assetItemGroup.Name))); } return(false); }
/// <summary> /// Remove and get native files. /// </summary> /// <param name="itemGroup">The native web asset to remove</param> /// <returns>The new list of paths.</returns> private static IList <string> RemoveAndGetNativeFiles(WebAssetItemGroup itemGroup) { List <string> nativeFiles = new List <string>(); for (int i = itemGroup.Items.Count - 1; i >= 0; i--) { WebAssetItem item = itemGroup.Items[i]; if (IsNativeFile(item)) { nativeFiles.Add(Path.GetFileName(item.Source)); itemGroup.Items.RemoveAt(i); } } nativeFiles.Reverse(); return(nativeFiles); }
/// <summary> /// Merges the specified assets. /// </summary> /// <param name="contentType">Type of the content.</param> /// <param name="assetHandlerPath">The asset handler path.</param> /// <param name="isSecured">if set to <c>true</c> [is secure].</param> /// <param name="canCompress">if set to <c>true</c> [can compress].</param> /// <param name="assets">The assets.</param> /// <returns>The collection of web asset paths.</returns> public IList <string> Merge(string contentType, string assetHandlerPath, bool isSecured, bool canCompress, WebAssetItemCollection assets) { // If the instance object is null. if (contentType == null) { throw new System.ArgumentNullException("contentType"); } if (assetHandlerPath == null) { throw new System.ArgumentNullException("assetHandlerPath"); } if (assets == null) { throw new System.ArgumentNullException("assets"); } IList <string> mergedList = new List <string>(); Func <string, string, string> getRelativePath = (source, version) => _urlResolver.Resolve(_assetRegistry.Locate(source, version)); Action <WebAssetItemGroup> processGroup = group => { if (group.Combined) { string id = _assetRegistry.Store(contentType, group); string virtualPath = "{0}?{1}={2}".FormatWith(assetHandlerPath, _urlEncoder.Encode(WebAssetHttpHandler.IdParameterName), _urlEncoder.Encode(id)); string relativePath = _urlResolver.Resolve(virtualPath); if (!mergedList.Contains(relativePath, StringComparer.OrdinalIgnoreCase)) { mergedList.Add(relativePath); } } else { group.Items.Each(i => { if (!mergedList.Contains(i.Source, StringComparer.OrdinalIgnoreCase)) { mergedList.Add(getRelativePath(i.Source, group.Version)); } }); } }; if (!assets.IsEmpty()) { foreach (IWebAssetItem asset in assets) { WebAssetItem item = asset as WebAssetItem; WebAssetItemGroup itemGroup = asset as WebAssetItemGroup; if (item != null) { mergedList.Add(getRelativePath(item.Source, null)); } else if (itemGroup != null) { WebAssetItemGroup frameworkGroup = null; if ((frameworkGroup != null) && !frameworkGroup.Items.IsEmpty()) { processGroup(frameworkGroup); } if (!itemGroup.Items.IsEmpty()) { processGroup(itemGroup); } } } } // Return the list. return(mergedList.ToList()); }