コード例 #1
0
        //生成中间页
        private void CreateMiddPage(List <string> list, ArticleInfoVO ainfo, AdPageInfoVO adinfo)
        {
            string html = "";

            string indexpath = HttpContext.Current.Server.MapPath(string.Format("{0}{1}", m_template, m_html_default));

            using (StreamReader reader = new StreamReader(indexpath))
            {
                html = reader.ReadToEnd();
            }

            string jsscript = "var domains = ['$domains$']; var rdmain = \"\"; if (domains.length == 1){ rdmain = domains[0];  }  else  { rdmain = domains[Math.floor(Math.random() * domains.length)]; }document.location.href = \"http://\" + rdmain;";

            jsscript = jsscript.Replace("$domains$", string.Join("','", list.ToArray()));
            Yahoo.Yui.Compressor.JavaScriptCompressor js = new Yahoo.Yui.Compressor.JavaScriptCompressor();

            string jstext = js.Compress(jsscript);

            html = html.Replace("$script$", jstext)
                   .Replace("$adid$", adinfo.Id.ToString())
                   .Replace("$ArticleDetail$", DN.Framework.Utility.HtmlHelper.DecodeHtml(ainfo.Content));

            string dir       = HttpContext.Current.Server.MapPath(m_diction);
            string nhtmlpath = Path.Combine(dir, "index.html");

            using (StreamWriter write = new StreamWriter(nhtmlpath))
            {
                write.Write(html);
                write.Flush();
                write.Close();
            }
        }
コード例 #2
0
 protected BaseCompressManager()
 {
     Minifier             = new Microsoft.Ajax.Utilities.Minifier();
     JavaScriptCompressor = new Yahoo.Yui.Compressor.JavaScriptCompressor {
         Encoding = Encoding.UTF8, ObfuscateJavascript = false
     };
     //_cssCompressor = new Yahoo.Yui.Compressor.CssCompressor() { RemoveComments=true};
 }
コード例 #3
0
ファイル: c.aspx.cs プロジェクト: balageesala/IntellidateR2
        private string CompressedJS(string InString)
        {
            try
            {
                var compressor = new Yahoo.Yui.Compressor.JavaScriptCompressor
                {
                    Encoding              = UTF8Encoding.UTF8,
                    DisableOptimizations  = false,
                    ObfuscateJavascript   = true,
                    PreserveAllSemicolons = true,
                    IgnoreEval            = false
                };

                // Read full script file
                string   _Decrypted   = new IntellidateR1.EncryptDecrypt().Decrypt(InString.Split('-')[0]);
                string[] _ScriptsPath = _Decrypted.Split(',');

                string _JsContent  = "";
                string _RootFolder = Server.MapPath("~").ToString();

                foreach (var EachScript in _ScriptsPath)
                {
                    if (EachScript.ToUpper().EndsWith("MIN"))
                    {
                        _JsContent = _JsContent + "\n" + File.ReadAllText(_RootFolder + "\\" + EachScript + ".js");
                    }
                    else
                    {
                        if (ConfigurationManager.AppSettings["StaticDebug"].ToString() == "Y")
                        {
                            _JsContent = _JsContent + "\n" + File.ReadAllText(_RootFolder + "\\" + EachScript + ".js");
                        }
                        else
                        {
                            try
                            {
                                _JsContent = _JsContent + "\n" + compressor.Compress(File.ReadAllText(_RootFolder + "\\" + EachScript + ".js"));
                            }
                            catch (Exception)
                            {
                                _JsContent = _JsContent + "\n" + File.ReadAllText(_RootFolder + "\\" + EachScript + ".js");
                            }
                        }
                    }
                }

                return(_JsContent);
            }
            catch (Exception)
            {
                return("");
            }
        }
コード例 #4
0
        public void BundleFilesOnSeparateRows()
        {
            //If a bundled file ends with a //# sourceMappingURL comment, the next define() would be commented out
            var yui = new Yahoo.Yui.Compressor.JavaScriptCompressor {
                Encoding = System.Text.Encoding.UTF8
            };
            var taskLog = new Helpers.InMemoryLogAdapter();

            var files = new[] {
                TestData.FileSpecs.Scripts_BundleIncludedDirectory_a(projectPath),
                TestData.FileSpecs.Scripts_BundleIncludedDirectory_b(projectPath)
            };

            var expected = "define(\"bundleincludeddirectory/a\",[],function(){console.log(\"a.js\")});\r\ndefine(\"bundleincludeddirectory/b\",[],function(){console.log(\"b.js\")});\r\n";

            var outputFile = Path.GetTempFileName();

            try
            {
                var taskEngine = new RequireJsNet.Compressor.CompressorTaskEngine(taskLog, yui)
                {
                    CompressionType   = "standard",
                    DeleteSourceFiles = false,
                    LineBreakPosition = -1,
                    LoggingType       = "none",
                    OutputFile        = outputFile,
                    SourceFiles       = files
                };
                taskEngine.Execute();

                var actual = File.ReadAllText(outputFile);

                Assert.Equal(expected, actual);
            }
            finally
            {
                File.Delete(outputFile);
            }
        }
コード例 #5
0
        public void BundleFilesOnSeparateRows()
        {
            //If a bundled file ends with a //# sourceMappingURL comment, the next define() would be commented out
            var yui = new Yahoo.Yui.Compressor.JavaScriptCompressor { Encoding = System.Text.Encoding.UTF8 };
            var taskLog = new Helpers.InMemoryLogAdapter();

            var files = new[] {
                TestData.FileSpecs.Scripts_BundleIncludedDirectory_a(projectPath),
                TestData.FileSpecs.Scripts_BundleIncludedDirectory_b(projectPath)
            };

            var expected = "define(\"bundleincludeddirectory/a\",[],function(){console.log(\"a.js\")});\r\ndefine(\"bundleincludeddirectory/b\",[],function(){console.log(\"b.js\")});\r\n";

            var outputFile = Path.GetTempFileName();
            try
            {
                var taskEngine = new RequireJsNet.Compressor.CompressorTaskEngine(taskLog, yui)
                {
                    CompressionType = "standard",
                    DeleteSourceFiles = false,
                    LineBreakPosition = -1,
                    LoggingType = "none",
                    OutputFile = outputFile,
                    SourceFiles = files
                };
                taskEngine.Execute();

                var actual = File.ReadAllText(outputFile);

                Assert.Equal(expected, actual);
            }
            finally
            {
                File.Delete(outputFile);
            }
        }
コード例 #6
0
        public void ProcessRequest(HttpContext context)
        {
            var cache      = context.Cache;
            var scriptType = (ScriptType)Enum.Parse(typeof(ScriptType), context.Request.Params["type"]);

            switch (scriptType)
            {
            case ScriptType.JavaScript:
                context.Response.ContentType = @"application/javascript";
                break;

            case ScriptType.Stylesheet:
                context.Response.ContentType = @"text/css";
                break;
            }

            //cached
            var hashString = context.Request.Params["hash"];

            if (!String.IsNullOrWhiteSpace(hashString))
            {
                var result = cache[HttpUtility.UrlDecode(hashString)] as string;
                if (!string.IsNullOrWhiteSpace(result))
                {
                    context.Application["__rsm__" + scriptType.ToString()] = null;
                    context.Response.Write(result);
                    return;
                }
            }

            //not cached
            var scripts = context.Application["__rsm__" + scriptType.ToString()] as IEnumerable <ScriptInfo>;

            context.Application["__rsm__" + scriptType.ToString()] = null;
            if (scripts == null)
            {
                return;
            }
            var scriptbody = new StringBuilder();

            scripts = scripts.Distinct(new ScriptInfoComparer());

            //add sitewide scripts FIRST, so they're accessible to local scripts
            var siteScripts  = scripts.Where(s => s.SiteWide);
            var localScripts = scripts.Where(s => !s.SiteWide).Except(siteScripts, new ScriptInfoComparer());
            var scriptPaths  = siteScripts.Concat(localScripts).Select(s => s.LocalPath);
            var minify       = bool.Parse(ConfigurationManager.AppSettings["CompressScripts"]);

            foreach (var script in scriptPaths)
            {
                if (!String.IsNullOrWhiteSpace(script))
                {
                    using (var file = new System.IO.StreamReader(script)) {
                        var fileContent = file.ReadToEnd();
                        if (scriptType == ScriptType.Stylesheet)
                        {
                            var fromUri = new Uri(context.Server.MapPath("~/"));
                            var toUri   = new Uri(new FileInfo(script).DirectoryName);
                            fileContent = fileContent.Replace("url(", "url(/" + fromUri.MakeRelativeUri(toUri).ToString() + "/");
                        }
                        if (!minify)
                        {
                            scriptbody.AppendLine(String.Format("/* {0} */", script));
                        }
                        scriptbody.AppendLine(fileContent);
                    }
                }
            }

            var    hash         = GetHash(scripts);
            string scriptOutput = scriptbody.ToString();

            if (minify)
            {
                switch (scriptType)
                {
                case ScriptType.JavaScript:
                    var jscompressor = new Yahoo.Yui.Compressor.JavaScriptCompressor(scriptOutput);
                    scriptOutput = jscompressor.Compress();
                    break;

                case ScriptType.Stylesheet:
                    scriptOutput = Yahoo.Yui.Compressor.CssCompressor.Compress(scriptOutput);
                    break;
                }
            }
            cache[hash] = scriptOutput;
            context.Response.Write(scriptOutput);
        }
コード例 #7
0
ファイル: JsController.cs プロジェクト: sebnilsson/Squishify
        public MinificationResult Get(JObject jsonData)
        {
            dynamic json = jsonData;
            string source = json.source;

            if (string.IsNullOrWhiteSpace(source))
            {
                throw new ArgumentNullException("source");
            }

            var result = new MinificationResult { OriginalSize = new FileSize(source.Length), };

            //var closureMin = new SquishIt.Framework.Minifiers.JavaScript.ClosureMinifier();
            //string closeureMinContent = closureMin.Minify(source).TrimStart('\n', ' ');

            //var closureResultType = new MinificationType(result, "JsMinMinifier")
            //                            {
            //                                MinifiedContent = closeureMinContent,
            //                                MinifiedSize =
            //                                    new FileSize(
            //                                    closeureMinContent.Length),
            //                            };

            var jsMin = new SquishIt.Framework.Minifiers.JavaScript.JsMinMinifier();
            string jsMinContent = jsMin.Minify(source).TrimStart('\n', ' ');

            var jsMinResultType = new MinificationType(result, "JsMinMinifier")
                                      {
                                          MinifiedContent = jsMinContent,
                                          MinifiedSize =
                                              new FileSize(jsMinContent.Length),
                                      };

            var ms = new SquishIt.Framework.Minifiers.JavaScript.MsMinifier();
            string msConfig = ms.Minify(source).TrimStart('\n', ' ');

            var msResultType = new MinificationType(result, "MsMinifier")
                                   {
                                       MinifiedContent = msConfig,
                                       MinifiedSize = new FileSize(msConfig.Length),
                                   };

            var yui = new Yahoo.Yui.Compressor.JavaScriptCompressor
                          {
                              CompressionType =
                                  Yahoo.Yui.Compressor.CompressionType
                                       .Standard,
                              DisableOptimizations = false,
                          };
            string yuiContent = yui.Compress(source).TrimStart('\n', ' ');

            var yuiResultType = new MinificationType(result, "YuiMinifier")
                                    {
                                        MinifiedContent = yuiContent,
                                        MinifiedSize =
                                            new FileSize(yuiContent.Length),
                                    };

            result.Types = new[] { jsMinResultType, msResultType, yuiResultType }; //, closureResultType };
            return result;
        }
コード例 #8
0
        internal void CompressJavascript()
        {
            if (string.IsNullOrEmpty(this.IncludeJSFile) || string.IsNullOrEmpty(OutputJSFile))
            {
                LogWarning("JavaScript files to include or Javascript output is empty.");
                return;
            }
            LogInformation("Compressing JavaScript files in {0} with {1} compression level to {2}", this.IncludeJSFile, this.JSCompressionType, this.OutputJSFile);
            var           compressor = new Yahoo.Yui.Compressor.JavaScriptCompressor();
            StringBuilder finalResult = null;
            int           originalContentLength = 0, inputFiles = 0, outputFiles = 0, outputLength = 0;

            compressor.CompressionType       = (Yahoo.Yui.Compressor.CompressionType)Enum.Parse(typeof(Yahoo.Yui.Compressor.CompressionType), this.JSCompressionType, true);
            compressor.LineBreakPosition     = this.JSLineBreakPosition;
            compressor.DisableOptimizations  = this.JSDisableOptimizations;
            compressor.Encoding              = System.Text.Encoding.Default;
            compressor.ObfuscateJavascript   = this.ObfuscateJS;
            compressor.PreserveAllSemicolons = this.JSPreserveSemicolons;
            compressor.IgnoreEval            = this.JSIgnoreEval;
            var files = FilesToCompress(this.IncludeJSFile, this.ExcludeJSPattern, this.JSRecursive);

            foreach (var d in files)
            {
                foreach (var c in d.Value)
                {
                    if (Verbose)
                    {
                        LogInformation("CompressJS working on: {0}", c);
                    }
                    if (File.Exists(c))
                    {
                        var originalContent = File.ReadAllText(c);
                        originalContentLength += originalContent.Length;
                        inputFiles++;
                        if (string.IsNullOrEmpty(originalContent))
                        {
                            LogInformation("File {0} is empty.", c);
                        }
                        else
                        {
                            var compressedContent = compressor.Compress(originalContent);
                            if (!string.IsNullOrEmpty(compressedContent))
                            {
                                if (null == finalResult)
                                {
                                    finalResult = new StringBuilder();
                                }
                                finalResult.Append(compressedContent);
                            }
                        }
                        if (this.JSDeleteOriginal)
                        {
                            File.Delete(c);
                        }
                        if (this.CompressJSInPlace && (null != finalResult) && (finalResult.Length > 0))
                        {
                            File.WriteAllText(c, finalResult.ToString());
                            outputLength += finalResult.Length;
                            outputFiles++;
                            finalResult = null;
                        }
                    }
                }
                if (this.PreserveJSSubdirectories && (null != finalResult) && (finalResult.Length > 0))
                {
                    var currentDir = Path.GetDirectoryName(ResolveDirectory(d.Key));
                    if (null != finalResult && finalResult.Length > 0)
                    {
                        File.WriteAllText(Path.Combine(currentDir, this.OutputJSFile), finalResult.ToString());
                        outputLength += finalResult.Length;
                        outputFiles++;
                    }
                    finalResult = null;
                }
            }
            if (null != finalResult && finalResult.Length > 0)
            {
                File.WriteAllText(ResolveDirectory(this.OutputJSFile), finalResult.ToString());
                outputLength += finalResult.Length;
                outputFiles++;
            }
            LogInformation("Completed compressing {0} JavaScript files into {1} files. Original size: {2}, compressed size: {3}", inputFiles, outputFiles, originalContentLength, outputLength);
        }
コード例 #9
0
        private string Merge(IScriptGenerationInfo info, IEnumerable<IScriptInfo> scripts)
        {
            var scriptbody = new StringBuilder();
            scriptbody.AppendFormat("/* Generated: {0} */\n", DateTime.Now.ToString());

            var scriptsToRender = scripts;
            var minify = bool.Parse(ConfigurationManager.AppSettings["SJ.Compress"]);

            foreach (var script in scriptsToRender)
            {
                if (!script.IsInline && !string.IsNullOrWhiteSpace(script.LocalPath))
                {
                    using (var fs = new FileStream(script.LocalPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    {
                        using (var file = new StreamReader(fs))
                        {
                            var fileContent = file.ReadToEnd();

                            if (info.Type == ScriptType.Stylesheet)
                            {
                                var fromUri = new Uri(HttpContext.Current.Server.MapPath("~/"));
                                var toUri = new Uri(new FileInfo(script.LocalPath).DirectoryName);

                                string imageUrlRoot = (HttpContext.Current.Request.ApplicationPath.EndsWith("/")) ? HttpContext.Current.Request.ApplicationPath : HttpContext.Current.Request.ApplicationPath + "/";
                                imageUrlRoot += fromUri.MakeRelativeUri(toUri).ToString();
                                fileContent = fileContent.Replace("url(\"images", "url(\"" + imageUrlRoot + "/images");
                            }

                            if (!minify)
                            {
                                scriptbody.AppendLine(String.Format("/* {0} */\n", script.Url));
                            }

                            scriptbody.AppendLine(fileContent);
                            file.Close();
                        }
                    }
                }
                else if (script.IsInline)
                {
                    scriptbody.AppendLine(String.Format("/* {0} */\n", script.UniqueKey));
                    scriptbody.AppendLine(script.Source);
                }
            }

            string scriptOutput = scriptbody.ToString();

            if (minify)
            {
                switch (info.Type)
                {
                    case ScriptType.JavaScript:
                        var jsCompressor = new Yahoo.Yui.Compressor.JavaScriptCompressor();
                        scriptOutput = jsCompressor.Compress(scriptOutput);
                        break;
                    case ScriptType.Stylesheet:
                        var cssCompressor = new Yahoo.Yui.Compressor.CssCompressor();
                        scriptOutput = cssCompressor.Compress(scriptOutput);
                        break;
                }
            }

            return scriptOutput;
        }
コード例 #10
0
        public virtual string GenerateScripts(UrlHelper urlHelper, ResourceLocation location, bool?bundleFiles = null)
        {
            if ((!_scriptParts.ContainsKey(location) || _scriptParts[location] == null) &&
                (!_inlineScripts.ContainsKey(location) || _inlineScripts[location] == null))
            {
                return("");
            }

            if (!_scriptParts.Any() && !_inlineScripts.Any())
            {
                return("");
            }

            if (!bundleFiles.HasValue)
            {
                //use setting if no value is specified
                bundleFiles = _siteSettings.EnableJsBundling && BundleTable.EnableOptimizations;
            }

            if (bundleFiles.Value)
            {
                var partsToBundle           = new List <ScriptReferenceMeta>();
                var inlinePartsToBundle     = new List <ScriptReferenceMeta>();
                var partsToDontBundle       = new List <ScriptReferenceMeta>();
                var inlinePartsToDontBundle = new List <ScriptReferenceMeta>();

                if (_scriptParts.ContainsKey(location))
                {
                    partsToBundle.AddRange(_scriptParts[location]
                                           .Where(x => !x.ExcludeFromBundle)
                                           .Distinct());
                    partsToDontBundle.AddRange(_scriptParts[location]
                                               .Where(x => x.ExcludeFromBundle)
                                               .Distinct());
                }

                if (_inlineScripts.ContainsKey(location))
                {
                    inlinePartsToBundle.AddRange(_inlineScripts[location]
                                                 .Where(x => !x.ExcludeFromBundle)
                                                 .Distinct());
                    inlinePartsToDontBundle.AddRange(_inlineScripts[location]
                                                     .Where(x => x.ExcludeFromBundle)
                                                     .Distinct());
                }

                var result     = new StringBuilder();
                var allScripts = new List <string>();
                allScripts.AddRange(partsToBundle.Select(x => x.Part));
                allScripts.AddRange(inlinePartsToBundle.Select(x => x.Part));
                if (allScripts.Any())
                {
                    var    hash = ComputeHash(allScripts.ToArray());
                    string bundleVirtualPath = "~/bundles/scripts/" + hash;
                    //create bundle
                    lock (SLock)
                    {
                        var bundleFor = BundleTable.Bundles.GetBundleFor(bundleVirtualPath);
                        if (bundleFor == null)
                        {
                            var bundle = new ScriptBundle(bundleVirtualPath);

                            bundle.Include(partsToBundle.Select(x => x.Part).ToArray());

                            if (inlinePartsToBundle.Any())
                            {
                                var inlineScriptFilePath = HttpContext.Current.Server.MapPath($"~/App_Data/{hash}.js");
                                File.WriteAllText(inlineScriptFilePath,
                                                  string.Join(Environment.NewLine, inlinePartsToBundle.Select(x => x.Part)));
                                bundle.Include($"~/App_Data/{hash}.js");
                            }

                            var scriptTransformer = new ScriptTransformer(new YuiJsMinifier(new YuiSettings()
                            {
                                JsMinifier =
                                {
                                    CompressionType       = CompressionType.Standard,
                                    ObfuscateJavascript   = true,
                                    Encoding              = "UTF8",
                                    PreserveAllSemicolons = true,
                                    Severity              = 0
                                }
                            }))
                            {
                                EnableTracing = false,
                                CombineFilesBeforeMinification = false,
                                UsePreMinifiedFiles            = true
                            };

                            BundleResolver.Current = new CustomBundleResolver();
                            bundle.Builder         = new NullBuilder();
                            bundle.Transforms.Clear();
                            bundle.Transforms.Add(scriptTransformer);
                            bundle.Orderer = new NullOrderer();

                            BundleTable.Bundles.Add(bundle);
                        }
                    }

                    //parts to bundle
                    result.AppendLine(Scripts.Render(bundleVirtualPath).ToString());
                }

                //parts to do not bundle
                foreach (var item in partsToDontBundle)
                {
                    result.AppendFormat("<script {2}src=\"{0}\" type=\"{1}\"></script>", urlHelper.Content(item.Part), "text/javascript", item.IsAsync ? "async " : "");
                    result.Append(Environment.NewLine);
                }

                //inline scripts to do not bundle
                if (inlinePartsToDontBundle.Any())
                {
                    string script = "";
                    foreach (var item in inlinePartsToDontBundle.Select(x => x.Part).Distinct())
                    {
                        script += urlHelper.Content(item);
                        script += Environment.NewLine;
                    }

                    if (_siteSettings.EnableInlineJsMinification)
                    {
                        var minifier = new Yahoo.Yui.Compressor.JavaScriptCompressor()
                        {
                            CompressionType       = Yahoo.Yui.Compressor.CompressionType.Standard,
                            Encoding              = Encoding.UTF8,
                            ObfuscateJavascript   = true,
                            PreserveAllSemicolons = true,
                        };

                        script = minifier.Compress(script);
                    }

                    result.Append("<script type=\"text/javascript\">");
                    result.Append(Environment.NewLine);
                    result.Append(script);
                    result.Append(Environment.NewLine);
                    result.Append("</script>");
                }

                return(result.ToString());
            }
            else
            {
                //bundling is disabled
                var result = new StringBuilder();
                if (_scriptParts.ContainsKey(location))
                {
                    foreach (var item in _scriptParts[location].Select(x => new { x.Part, x.IsAsync }).Distinct())
                    {
                        result.AppendFormat("<script {2}src=\"{0}\" type=\"{1}\"></script>", urlHelper.Content(item.Part), "text/javascript", item.IsAsync ? "async " : "");
                        result.Append(Environment.NewLine);
                    }
                }

                //inline scripts
                if (_inlineScripts.ContainsKey(location))
                {
                    string script = "";
                    foreach (var item in _inlineScripts[location].Select(x => new { x.Part }).Distinct())
                    {
                        script += urlHelper.Content(item.Part);
                        script += Environment.NewLine;
                    }

                    if (_siteSettings.EnableInlineJsMinification)
                    {
                        var minifier = new Yahoo.Yui.Compressor.JavaScriptCompressor()
                        {
                            CompressionType       = Yahoo.Yui.Compressor.CompressionType.Standard,
                            Encoding              = Encoding.UTF8,
                            ObfuscateJavascript   = true,
                            PreserveAllSemicolons = true,
                        };

                        script = minifier.Compress(script);
                    }

                    result.Append("<script type=\"text/javascript\">");
                    result.Append(Environment.NewLine);
                    result.Append(script);
                    result.Append(Environment.NewLine);
                    result.Append("</script>");
                }


                return(result.ToString());
            }
        }