示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        /// <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());
        }