Soyez le premier à donner votre avis sur cette source.
Snippet vu 28 866 fois - Téléchargée 27 fois
using System; using System.Data; using System.Collections; using System.IO; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Text.RegularExpressions; /// <summary> /// CSSHandler Compacteur de CSS /// </summary> public class CSSHandler : IHttpHandler { /// <summary> /// Compacte la CSS, sinon on envoie une erreur 404 si le fichier css n'existe pas /// </summary> /// <param name="context">Context</param> public void ProcessRequest(HttpContext context) { //on test l'existence du fichier et on déclenche une erreur 404 //s'il n'existe pas if (!new FileInfo(context.Request.PhysicalPath).Exists) throw new HttpException(404, context.Request.Path + " not found"); else //le fichier exist { string strCssContenu = ""; //on lit le fichier entièrement using (TextReader hFile = new StreamReader(context.Request.PhysicalPath)) { strCssContenu = hFile.ReadToEnd(); hFile.Close(); } //on compacte //supprime les sauts de ligne strCssContenu = new Regex("\xd\xa").Replace(strCssContenu,""); //supprime les commentaires strCssContenu = new Regex(@"(/\*.+?\*/)").Replace(strCssContenu, ""); //1: On isole les chaines " " string regChaine = @""".+?[^\\]"""; MatchCollection MatchesStrings = new Regex(regChaine, RegexOptions.IgnoreCase | RegexOptions.Singleline).Matches(strCssContenu); //2: On supprime les chaines strCssContenu = new Regex(regChaine, RegexOptions.IgnoreCase | RegexOptions.Singleline).Replace(strCssContenu, "<STRING_CACHE/>"); strCssContenu = new Regex(@"\t").Replace(strCssContenu,""); strCssContenu = new Regex(@" {2,}").Replace(strCssContenu, " "); strCssContenu = new Regex(@" *({|}|:|!|;) *").Replace(strCssContenu, "$1"); //Bug d'iE avec les attributs first-letter, first-line-> il faut un espace avant la parenthèse //du coup on le rajoute devant chaque parenthèse ouverte strCssContenu = new Regex(@"([^ ]){", optCompile).Replace(strCssContenu, @"$1 {"); //On replace les chaines foreach (Match oneString in MatchesStrings) { strCssContenu = new Regex(@"<STRING_CACHE/>", RegexOptions.IgnoreCase | RegexOptions.Singleline) .Replace(strCssContenu, oneString.Value, 1); } //Important pour FireFox oubien il ne reconnait pas la css context.Response.ContentType = "text/css"; //on écrit la css compactée dans le flux de reponse context.Response.Write(strCssContenu); //on envoie explicitement le buffer en cache context.Response.Flush(); //on ferme la connexion context.Response.End(); } } public bool IsReusable { get { return true; } } }
dépend du pattern, pour une réponse précise
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.