Пример #1
0
        /// <summary>
        /// Minifies a JavaScript File into a Minified JavaScript File
        /// </summary>
        /// <param name="InputFileName"></param>
        /// <param name="OutputFileName"></param>
        /// <returns></returns>
        public bool MinifyFile(string InputFileName, string OutputFileName)
        {
            try
            {
                this.FilesProcessed = 0;

                JavaScriptMinifier min = new JavaScriptMinifier();
                min.Minify(InputFileName, OutputFileName);

                Stream file = File.OpenRead(InputFileName);
                this.InputSize = (int)file.Length;
                file.Close();

                file            = File.OpenRead(OutputFileName);
                this.OutputSize = (int)file.Length;
                file.Close();

                this.FilesProcessed = 1;
            }
            catch (Exception ex)
            {
                this.ErrorMessage = ex.Message;
                return(false);
            }
            finally
            {
            }

            return(true);
        }
Пример #2
0
        /// <summary>
        /// Minifies all JavaScript files in a given directory and writes out the
        /// minified files to a new file extensions (.min.js for example).
        ///
        /// This method can be integrated into the build process, or as part of an
        /// application's startup to always create new minified scripts as needed.
        /// Scripts are only minified if the minified files don't already exist and are
        ///  older than the corresponding JavaScript file.
        ///
        /// A common usage scenario is to call this static method from
        /// Application_Start:
        ///
        /// &lt;&lt;code lang="C#"&gt;&gt;void Application_Start(object sender,
        /// EventArgs e)
        /// {
        ///     // creates minify scripts if don't exist or are changed
        ///     // NOTE: REQUIRES that IIS/ASP.NET Account has writes to write
        /// here!
        ///
        /// Westwind.Web.Controls.JavaScriptMinifier.MinifyDirectory(Server.MapPath("~/
        /// scripts"), ".min.js", true);
        /// }&lt;&lt;/code&gt;&gt;
        ///
        /// to always ensure minified files are in sync with corresponding JavaScript
        /// files.
        /// <seealso>Class JavaScriptMinifier                                                        </seealso>
        /// </summary>
        /// <param name="path">
        /// The path where files are to be minfied
        /// </param>
        /// <param name="minExtension">
        /// The extension for the minified files (ie. .min.js). Include leading dot!
        /// </param>
        /// <param name="recursive">
        /// Determines whether nested directories are also included
        /// </param>
        /// <remarks>
        /// Note that if you use this script from within an ASP.NET application it's
        /// best to hook it to a Application_Start or a static constructor so it only
        /// fires once.
        ///
        /// When called from ASP.NET this routine REQUIRES that the server account that
        ///  ASP.NET/IIS AppPool runs under (NETWORK SERVICE by default) has rights to
        /// write out the file to the folder specified. Otherwise an exception occurs.
        /// </remarks>
        public static void MinifyDirectory(string path, string minExtension, bool recursive)
        {
            JavaScriptMinifier min = new JavaScriptMinifier();

            minExtension = minExtension.ToLower();
            if (!minExtension.StartsWith("."))
            {
                minExtension = "." + minExtension;
            }


            string[] files = null;
            try
            {
                files = Directory.GetFiles(path);
            }
            catch
            {
                throw new InvalidOperationException("Invalid or inaccessible path to create Min Scripts in: " + path);
            }

            try
            {
                foreach (string file in files)
                {
                    string extension = Path.GetExtension(file).ToLower();

                    if (extension == ".js" && !file.EndsWith(minExtension))
                    {
                        string   minFile   = file.Replace(".js", minExtension);
                        DateTime fileAT    = File.GetLastWriteTimeUtc(file);
                        DateTime minFileAT = File.GetLastWriteTimeUtc(minFile);

                        if (!File.Exists(minFile) || fileAT > minFileAT)
                        {
                            min.Minify(file, file.Replace(".js", minExtension));
                        }
                    }
                }

                if (recursive)
                {
                    string[] dirs = Directory.GetDirectories(path);
                    foreach (string dir in dirs)
                    {
                        if (!dir.StartsWith("."))
                        {
                            MinifyDirectory(dir, minExtension, true);
                        }
                    }
                }
            }
            catch
            {
                throw new AccessViolationException("Couldn't create Min Scripts in: " + path + ". Make sure ASP.NET has permissions to write in this path.");
            }
        }
Пример #3
0
        public bool MinifyBatch()
        {
            try
            {
                this.FilesProcessed = 0;
                JavaScriptMinifier min = new JavaScriptMinifier();

                string scriptPath = Path.GetDirectoryName(this.InputFile);
                string renameTo   = ".min.js";
                if (!string.IsNullOrEmpty(this.OutputFile) && this.OutputFile.StartsWith("."))
                {
                    renameTo = this.OutputFile.ToLower();
                }

                int TotalInputSize  = 0;
                int TotalOutputSize = 0;

                string[] scriptFiles = Directory.GetFiles(scriptPath, "*.js");
                foreach (string file in scriptFiles)
                {
                    string scriptFile = file.ToLower();

                    // Skip VS Intellisense files
                    if (scriptFile.Contains("-vsdoc"))
                    {
                        continue;
                    }

                    if (scriptFile.EndsWith(renameTo))
                    {
                        continue;
                    }

                    this.MinifyFile(scriptFile, scriptFile.Replace(".js", renameTo));
                    this.FilesProcessed++;

                    TotalInputSize  += this.InputSize;
                    TotalOutputSize += this.OutputSize;
                }

                this.InputSize  = TotalInputSize;
                this.OutputSize = TotalOutputSize;
            }
            catch (Exception ex)
            {
                this.ErrorMessage = ex.Message;
                return(false);
            }


            return(true);
        }
Пример #4
0
        /// <summary>
        /// Minifies the inputFile and generates a .min.js file of the same name
        /// </summary>
        /// <param name="InputFileName"></param>
        /// <returns></returns>
        public bool MinifyFile(string InputFileName)
        {
            try
            {
                string OutputFileName = GetOutputFile(InputFileName);

                JavaScriptMinifier min = new JavaScriptMinifier();
                min.Minify(InputFileName, OutputFileName);
            }
            catch (Exception ex)
            {
                this.ErrorMessage = ex.Message;
                return(false);
            }

            return(true);
        }
Пример #5
0
        /// <summary>
        /// Minifies a JavaScript string into a minified JavaScript string
        /// </summary>
        /// <param name="InputString"></param>
        /// <returns></returns>
        public string MinifyString(string InputString)
        {
            try
            {
                this.FilesProcessed = 0;

                this.InputSize = InputString.Length;

                JavaScriptMinifier min = new JavaScriptMinifier();
                this.OutputText = min.MinifyString(InputString);
                this.OutputSize = this.OutputText.Length;

                this.FilesProcessed = 1;
                return(this.OutputText);
            }
            catch (Exception ex)
            {
                this.ErrorMessage = ex.Message;
                return(null);
            }
        }
Пример #6
0
        /// <summary>
        /// Minifies JavaScript content based on the properties of this class.
        /// Takes file input and minifies into OutputFile if set and OutputText
        /// </summary>
        /// <returns>true or false</returns>
        public bool MiniFy()
        {
            try
            {
                this.FilesProcessed = 0;

                JavaScriptMinifier min = new JavaScriptMinifier();

                if (this.InputFile.ToLower().Contains("*.js"))
                {
                    return(this.MinifyBatch());
                }


                bool result = this.MinifyFile(this.InputFile, this.OutputFile);

                if (!result)
                {
                    return(false);
                }

                if (!string.IsNullOrEmpty(this.OutputFile))
                {
                    StreamReader sr = StringUtilities.OpenStreamReaderWithEncoding(this.OutputFile);
                    this.OutputText = sr.ReadToEnd();
                    sr.Close();
                    this.OutputSize = this.OutputText.Length;
                }

                this.FilesProcessed = 1;
            }
            catch (Exception ex)
            {
                this.ErrorMessage = ex.Message;
                return(false);
            }

            return(true);
        }