Esempio n. 1
0
        /// <summary>
        /// Returns the url for the composite file handler for the filePath specified.
        /// </summary>
        /// <param name="fileKey">The Base64 encoded file paths or the file map key used to lookup the required dependencies</param>
        /// <param name="type"></param>
        /// <param name="http"></param>
        /// <param name="urlType"></param>
        /// <returns></returns>
        public virtual string GetCompositeFileUrl(
            string fileKey,
            ClientDependencyType type,
            HttpContextBase http,
            CompositeUrlType urlType)
        {
            var url     = new StringBuilder();
            int version = GetVersion();

            switch (urlType)
            {
            case CompositeUrlType.Base64QueryStrings:

                //Create a URL with a base64 query string

                const string handler = "{0}?s={1}&t={2}";
                url.Append(string.Format(handler,
                                         ClientDependencySettings.Instance.CompositeFileHandlerPath,
                                         http.Server.UrlEncode(fileKey), type));
                url.Append("&cdv=");
                url.Append(version.ToString());
                break;

            default:

                //Create a URL based on base64 paths instead of a query string


                //this used to be a "." but this causes problems with mvc and ignore routes for
                //some very strange reason, so we'll just use normal paths.
                var versionDelimiter = ".";

                url.Append(ClientDependencySettings.Instance.CompositeFileHandlerPath);
                int pos = 0;
                while (fileKey.Length > pos)
                {
                    url.Append("/");
                    int len = Math.Min(fileKey.Length - pos, 240);
                    url.Append(fileKey.Substring(pos, len));
                    pos += 240;
                }
                url.Append(versionDelimiter);
                url.Append(version.ToString());
                switch (type)
                {
                case ClientDependencyType.Css:
                    url.Append(versionDelimiter);
                    url.Append("css");
                    break;

                case ClientDependencyType.Javascript:
                    url.Append(versionDelimiter);
                    url.Append("js");
                    break;
                }
                break;
            }

            return(url.ToString());
        }
        /// <summary>
        /// Returns the url for the composite file handler for the filePath specified.
        /// </summary>
        /// <param name="fileKey">The Base64 encoded file paths or the file map key used to lookup the required dependencies</param>
        /// <param name="type"></param>
        /// <param name="http"></param>
        /// <param name="urlType"></param>
        /// <param name="compositeFileHandlerPath"> </param>
        /// <param name="version"> </param>
        /// <returns></returns>
        public virtual string GetCompositeFileUrl(
            string fileKey,
            ClientDependencyType type,
            HttpContextBase http,
            CompositeUrlType urlType,
            string compositeFileHandlerPath,
            int version)
        {
            var url = new StringBuilder();

            switch (urlType)
            {
            case CompositeUrlType.Base64QueryStrings:

                //Create a URL with a base64 query string

                const string handler = "{0}?s={1}&t={2}";
                url.Append(string.Format(handler,
                                         compositeFileHandlerPath,
                                         http.Server.UrlEncode(fileKey), type));
                url.Append("&cdv=");
                url.Append(version.ToString());
                break;

            default:

                //Create a URL based on base64 paths instead of a query string

                url.Append(compositeFileHandlerPath);
                url.Append('/');

                //create the path based on the path format...
                var pathUrl = PathBasedUrlFormatter.CreatePath(PathBasedUrlFormat, fileKey, type, version);

                //append the path formatted
                url.Append(pathUrl);

                break;
            }

            return(url.ToString());
        }
        /// <summary>
        /// Returns the url for the composite file handler for the filePath specified.
        /// </summary>
        /// <param name="fileKey">The Base64 encoded file paths or the file map key used to lookup the required dependencies</param>
        /// <param name="type"></param>
        /// <param name="http"></param>
        /// <param name="urlType"></param>
        /// <returns></returns>
        public virtual string GetCompositeFileUrl(
            string fileKey, 
            ClientDependencyType type, 
            HttpContextBase http, 
            CompositeUrlType urlType)
        {
            var url = new StringBuilder();
            int version = GetVersion();
            switch (urlType)
            {
                case CompositeUrlType.Base64QueryStrings:

                    //Create a URL with a base64 query string

                    const string handler = "{0}?s={1}&t={2}";
                    url.Append(string.Format(handler,
                                             ClientDependencySettings.Instance.CompositeFileHandlerPath,
                                             http.Server.UrlEncode(fileKey), type));
                    url.Append("&cdv=");
                    url.Append(version.ToString());
                    break;
                default:

                    //Create a URL based on base64 paths instead of a query string


                    //this used to be a "." but this causes problems with mvc and ignore routes for 
                    //some very strange reason, so we'll just use normal paths.
                    var versionDelimiter = ".";

                    url.Append(ClientDependencySettings.Instance.CompositeFileHandlerPath);
                    int pos = 0;
                    while (fileKey.Length > pos)
                    {
                        url.Append("/");
                        int len = Math.Min(fileKey.Length - pos, 240);
                        url.Append(fileKey.Substring(pos, len));
                        pos += 240;
                    }
                    url.Append(versionDelimiter);
                    url.Append(version.ToString());
                    switch (type)
                    {
                        case ClientDependencyType.Css:
                            url.Append(versionDelimiter);
                            url.Append("css");
                            break;
                        case ClientDependencyType.Javascript:
                            url.Append(versionDelimiter);
                            url.Append("js");
                            break;
                    }
                    break;
            }

            return url.ToString();
        }
        public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
        {
            base.Initialize(name, config);

            if (config == null)
                return;

            if (config["enableCssMinify"] != null)
            {
                bool enableCssMinify = true;
                if (bool.TryParse(config["enableCssMinify"], out enableCssMinify))
                    EnableCssMinify = enableCssMinify;
            }
            if (config["enableJsMinify"] != null)
            {
                bool enableJsMinify = true;
                if (bool.TryParse(config["enableJsMinify"], out enableJsMinify))
                    EnableJsMinify = enableJsMinify;
            }

            if (config["persistFiles"] != null)
            {
                bool persistFiles;
                if (bool.TryParse(config["persistFiles"], out persistFiles))
                    PersistCompositeFiles = persistFiles;
            }

            if (config["urlType"] != null)
            {
                try
                {
                    UrlType = (CompositeUrlType)Enum.Parse(typeof(CompositeUrlType), config["urlType"]);
                }
                catch (ArgumentException)
                {
                    //swallow exception, we've set the default
                }
            }
            if (config["pathUrlFormat"] != null)
            {
                PathBasedUrlFormat = config["pathUrlFormat"];
                PathBasedUrlFormatter.Validate(PathBasedUrlFormat);
            }

            CompositeFilePathAsString = config["compositeFilePath"] ?? DefaultDependencyPath;

            string bundleDomains = config["bundleDomains"];
            if (bundleDomains != null)
                bundleDomains = bundleDomains.Trim();
            if (string.IsNullOrEmpty(bundleDomains))
            {
                BundleDomains = new List<string>();
            }
            else
            {
                string[] domains = bundleDomains.Split(new char[] { ',' });
                for (int i = 0; i < domains.Length; i++)
                {
                    // make sure we have a starting dot and a trailing port
                    // ie 'maps.google.com' will be stored as '.maps.google.com:80'
                    if (domains[i].IndexOf(':') < 0)
                        domains[i] = domains[i] + ":80";
                    if (!domains[i].StartsWith("."))
                        domains[i] = "." + domains[i];
                }
                BundleDomains = new List<string>(domains);
            }
        }
        /// <summary>
        /// Returns the url for the composite file handler for the filePath specified.
        /// </summary>
        /// <param name="fileKey">The Base64 encoded file paths or the file map key used to lookup the required dependencies</param>
        /// <param name="type"></param>
        /// <param name="http"></param>
        /// <param name="urlType"></param>
        /// <param name="compositeFileHandlerPath"> </param>
        /// <param name="version"> </param>
        /// <returns></returns>
        public virtual string GetCompositeFileUrl(
            string fileKey,
            ClientDependencyType type,
            HttpContextBase http,
            CompositeUrlType urlType,
            string compositeFileHandlerPath,
            int version)
        {
            var url = new StringBuilder();
            switch (urlType)
            {
                case CompositeUrlType.Base64QueryStrings:

                    //Create a URL with a base64 query string

                    const string handler = "{0}?s={1}&t={2}";
                    url.Append(string.Format(handler,
                                             compositeFileHandlerPath,
                                             http.Server.UrlEncode(fileKey), type));
                    url.Append("&cdv=");
                    url.Append(version.ToString());
                    break;
                default:

                    //Create a URL based on base64 paths instead of a query string

                    url.Append(compositeFileHandlerPath);
                    url.Append('/');

                    //create the path based on the path format...
                    var pathUrl = PathBasedUrlFormatter.CreatePath(PathBasedUrlFormat, fileKey, type, version);

                    //append the path formatted
                    url.Append(pathUrl);

                    break;
            }

            return url.ToString();
        }