Click here to Skip to main content
13,704,769 members
Click here to Skip to main content
Articles » Web Development » ASP.NET » Samples » Downloads

Stats

41.8K views
3.1K downloads
22 bookmarked
Posted 1 Nov 2009
Licenced Apache

Combres - WebForm & MVC Client-side Resource Combine Library

, 1 Nov 2009
A .NET library which enables minification, compression, combination, and caching of JavaScript and CSS resources for ASP.NET and ASP.NET MVC web applications. Simply put, it helps your applications rank better with YSlow and PageSpeed.
Combres
trunk
Combres
API
Common
Configuration
Exceptions
Filters
Model
Properties
Resources
Libraries
EcmaScript.NET.modified.dll
Fasterflect.dll
log4net.dll
Yahoo.Yui.Compressor.dll
Samples
MvcSample
App_Data
Content
images
ui-bg_diagonals-thick_18_b81900_40x40.png
ui-bg_diagonals-thick_20_666666_40x40.png
ui-bg_flat_10_000000_40x100.png
ui-bg_glass_100_f6f6f6_1x400.png
ui-bg_glass_100_fdf5ce_1x400.png
ui-bg_glass_65_ffffff_1x400.png
ui-bg_gloss-wave_35_f6a828_500x100.png
ui-bg_highlight-soft_100_eeeeee_1x100.png
ui-bg_highlight-soft_75_ffe45c_1x100.png
ui-icons_222222_256x240.png
ui-icons_228ef1_256x240.png
ui-icons_ef8c08_256x240.png
ui-icons_ffd27a_256x240.png
ui-icons_ffffff_256x240.png
Controllers
Properties
Scripts
Views
Home
Shared
Site.Master
WebFormSample
App_Data
Content
images
ui-bg_diagonals-thick_18_b81900_40x40.png
ui-bg_diagonals-thick_20_666666_40x40.png
ui-bg_flat_10_000000_40x100.png
ui-bg_glass_100_f6f6f6_1x400.png
ui-bg_glass_100_fdf5ce_1x400.png
ui-bg_glass_65_ffffff_1x400.png
ui-bg_gloss-wave_35_f6a828_500x100.png
ui-bg_highlight-soft_100_eeeeee_1x100.png
ui-bg_highlight-soft_75_ffe45c_1x100.png
ui-icons_222222_256x240.png
ui-icons_228ef1_256x240.png
ui-icons_ef8c08_256x240.png
ui-icons_ffd27a_256x240.png
ui-icons_ffffff_256x240.png
Properties
Scripts
Combres.dll
EcmaScript.NET.modified.dll
Fasterflect.dll
log4net.dll
Yahoo.Yui.Compressor.dll
API
Common
Configuration
Exceptions
Filters
Model
Properties
Resources
Samples
MvcSample
App_Data
Content
images
ui-bg_diagonals-thick_18_b81900_40x40.png
ui-bg_diagonals-thick_20_666666_40x40.png
ui-bg_flat_10_000000_40x100.png
ui-bg_glass_100_f6f6f6_1x400.png
ui-bg_glass_100_fdf5ce_1x400.png
ui-bg_glass_65_ffffff_1x400.png
ui-bg_gloss-wave_35_f6a828_500x100.png
ui-bg_highlight-soft_100_eeeeee_1x100.png
ui-bg_highlight-soft_75_ffe45c_1x100.png
ui-icons_222222_256x240.png
ui-icons_228ef1_256x240.png
ui-icons_ef8c08_256x240.png
ui-icons_ffd27a_256x240.png
ui-icons_ffffff_256x240.png
Controllers
Properties
Scripts
Views
Home
Shared
Site.Master
WebFormSample
App_Data
Content
images
ui-bg_diagonals-thick_18_b81900_40x40.png
ui-bg_diagonals-thick_20_666666_40x40.png
ui-bg_flat_10_000000_40x100.png
ui-bg_glass_100_f6f6f6_1x400.png
ui-bg_glass_100_fdf5ce_1x400.png
ui-bg_glass_65_ffffff_1x400.png
ui-bg_gloss-wave_35_f6a828_500x100.png
ui-bg_highlight-soft_100_eeeeee_1x100.png
ui-bg_highlight-soft_75_ffe45c_1x100.png
ui-icons_222222_256x240.png
ui-icons_228ef1_256x240.png
ui-icons_ef8c08_256x240.png
ui-icons_ffd27a_256x240.png
ui-icons_ffffff_256x240.png
Properties
Scripts
#region License
// Copyright 2009 Buu Nguyen (http://www.buunguyen.net/blog)
// 
// Licensed under the Apache License, Version 2.0 (the "License"); 
// you may not use this file except in compliance with the License. 
// You may obtain a copy of the License at 
// 
// http://www.apache.org/licenses/LICENSE-2.0 
// 
// Unless required by applicable law or agreed to in writing, software 
// distributed under the License is distributed on an "AS IS" BASIS, 
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
// See the License for the specific language governing permissions and 
// limitations under the License.
// 
// The latest version of this file can be found at http://combres.codeplex.com
#endregion

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace Combres
{
    /// <summary>
    /// Utility class providing extension methods for ASP.NET and ASP.NET MVC applications to
    /// work with the library.
    /// </summary>
    public static class WebExtensions
    {
        private const string UrlPattern = "{0}/{1}/{2}";

        /// <summary>
        /// Retrieves the URL of the Combres engine as registered in XML data file.
        /// </summary>
        /// <param name="routes">The actual argument is typically <code>RouteTable.Routes</code></param>
        /// <returns>The URL of the Combres engine as registered in XML data file</returns>
        public static string GetCombresUrl(this RouteCollection routes)
        {
            return Settings.Url.ResolveUrl();
        }

        /// <summary>
        /// Registers the combiner route to the <code>routes</code> collection.
        /// Invoke this in <code>Application_Start</code>.
        /// </summary>
        /// <param name="routes">The actual argument is typically <code>RouteTable.Routes</code></param>
        /// <param name="name">The route name</param>
        public static void AddCombresRoute(this RouteCollection routes, string name)
        {
            var adjustedUrl = Settings.Url.Substring(2); // Remove the "~/"
            routes.Add(name, new Route(adjustedUrl + "/{name}/{version}",
                new RouteValueDictionary(new { version = string.Empty }),
                new CombresRouteHandler()));
        }

        /// <summary>
        /// See <c>WebExtensions#CombresUrl</c>.
        /// </summary>
        public static string CombresUrl(this HtmlHelper html, string setName)
        {
            return CombresUrl(setName);
        }

        /// <summary>
        /// Generates the URL to the resource combiner for the specified <paramref name="setName"/>.
        /// </summary>
        /// <example>
        /// <![CDATA[<script type="text/javascript" src="<%= Html.CombresUrl("siteJsSet") %>"></script>]]>    
        /// </example>
        /// <param name="setName">The name of the resource set to be linked to</param>
        /// <returns>The URL to the reousrce combiner for the specified <paramref name="setName"/></returns>
        public static string CombresUrl(string setName)
        {
            var settings = Settings;
            var set = GetResourceSet(setName);
            var fullUrl = string.Format(UrlPattern, settings.Url, set.Name, set.Version);
            return fullUrl.ResolveUrl();
        }
        
        /// <summary>
        /// See <c>WebExtensions#CombresLink</c>.
        /// </summary>
        public static string CombresLink(this HtmlHelper html, string setName)
        {
            return CombresLink(setName);
        }

        /// <summary>
        /// Generates the link to the resource combiner for the specified 
        /// <paramref name="setName"/>.  If the set is a JavaScript set, 
        /// <![CDATA[<script type="text/javascript" src=...></script>]]> is returned.  
        /// If the set is a CSS set, <![CDATA[<link rel="stylesheet" type="text/css" href=... />]]> 
        /// is returned.
        /// </summary>
        /// <example>
        /// <![CDATA[<%= Html.CombresLink("bootstrapJs")%>]]>    
        /// </example>
        /// <param name="setName">The name of the resource set to be linked to</param>
        /// <returns>The link to the resource combiner for the specified <paramref name="setName"/></returns>
        public static string CombresLink(string setName)
        {
            var set = GetResourceSet(setName);
            string optimizerUrl = set.Type == ResourceType.JS ?
                "<script type=\"text/javascript\" src=\"{0}\"></script>" :
                "<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}\" />";
            return string.Format(optimizerUrl, CombresUrl(set.Name));
        }

        private static ResourceSet GetResourceSet(string setName)
        {
            var set = Settings[setName];
            if (set == null)
                throw new ResourceSetNotFoundException("Set " + setName + " does not exist");
            return set;
        }

        private static Settings Settings
        {
            get
            {
                return Configuration.GetSettings(HttpContext.Current);
            }
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Apache License, Version 2.0

Share

About the Author

Buu Nguyen
Chief Technology Officer KMS Technology
Vietnam Vietnam
You can visit Buu's blog at http://www.buunguyen.net/blog to read about his thoughts on software development.

You may also be interested in...

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web01-2016 | 2.8.180920.1 | Last Updated 2 Nov 2009
Article Copyright 2009 by Buu Nguyen
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid