//生成中间页 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(); } }
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}; }
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(""); } }
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); } }
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); }
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; }
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); }
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; }
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()); } }