private static void WriteMinFile(string filePath, string bundlePath, string content, string extension) { string minPath = bundlePath.Replace(Path.GetExtension(bundlePath), ".min" + Path.GetExtension(bundlePath)); if (extension.Equals(".js", StringComparison.OrdinalIgnoreCase)) { JavaScriptSaveListener.Minify(bundlePath, minPath, true); MarginBase.AddFileToProject(filePath, minPath); if (WESettings.GetBoolean(WESettings.Keys.GenerateJavaScriptSourceMaps)) { MarginBase.AddFileToProject(filePath, minPath + ".map"); } MarginBase.AddFileToProject(filePath, minPath + ".gzip"); } else if (extension.Equals(".css", StringComparison.OrdinalIgnoreCase)) { string minContent = MinifyFileMenu.MinifyString(extension, content); ProjectHelpers.CheckOutFileFromSourceControl(minPath); using (StreamWriter writer = new StreamWriter(minPath, false, new UTF8Encoding(true))) { writer.Write(minContent); } MarginBase.AddFileToProject(filePath, minPath); if (WESettings.GetBoolean(WESettings.Keys.CssEnableGzipping)) { CssSaveListener.GzipFile(filePath, minPath, minContent); } } }
//private void MinifySelection() //{ // var view = ProjectHelpers.GetCurentTextView(); // if (view != null) // { // _dte.UndoContext.Open("Minify"); // string content = view.Selection.SelectedSpans[0].GetText(); // string extension = Path.GetExtension(_dte.ActiveDocument.FullName).ToLowerInvariant(); // string result = MinifyString(extension, content); // view.TextBuffer.Replace(view.Selection.SelectedSpans[0].Span, result); // _dte.UndoContext.Close(); // } //} private void MinifyFile(string extension) { var selectedPaths = GetSelectedFilePaths(_dte); foreach (string path in selectedPaths.Where(p => p.EndsWith(extension, StringComparison.OrdinalIgnoreCase))) { string minPath = GetMinFileName(path, extension); if (!path.EndsWith(".min" + extension) && !File.Exists(minPath) && _dte.Solution.FindProjectItem(path) != null) { if (extension.Equals(".js", StringComparison.OrdinalIgnoreCase)) { JavaScriptSaveListener.Minify(path, minPath, false); } else { CssSaveListener.Minify(path, minPath); } MarginBase.AddFileToProject(path, minPath); } } EnableSync(extension); }
public static void MinifyFile(string lessFileName, string source) { if (WESettings.GetBoolean(WESettings.Keys.LessMinify)) { string content = MinifyFileMenu.MinifyString(".css", source); string minFile = MarginBase.GetCompiledFileName(lessFileName, ".min.css", WESettings.GetBoolean(WESettings.Keys.LessCompileToFolder)); //lessFileName.Replace(".less", ".min.css"); string old = File.ReadAllText(minFile); if (old != content) { bool fileExist = File.Exists(minFile); bool useBom = WESettings.GetBoolean(WESettings.Keys.UseBom); ProjectHelpers.CheckOutFileFromSourceControl(minFile); using (StreamWriter writer = new StreamWriter(minFile, false, new UTF8Encoding(useBom))) { writer.Write(content); } if (!fileExist) { MarginBase.AddFileToProject(lessFileName, minFile); } } } }
public static void GzipFile(string file, string minFile, string content) { string gzipFile = minFile + ".gzip"; ProjectHelpers.CheckOutFileFromSourceControl(gzipFile); byte[] gzipContent = Compress(content); File.WriteAllBytes(gzipFile, gzipContent); ProjectHelpers.AddFileToActiveProject(gzipFile); MarginBase.AddFileToProject(file, gzipFile); }
private static void GzipFile(string file, string minFile, string content) { if (WESettings.GetBoolean(WESettings.Keys.CssEnableGzipping)) { string gzipFile = minFile + ".gzip"; ProjectHelpers.CheckOutFileFromSourceControl(gzipFile); byte[] gzipContent = CssSaveListener.Compress(content); File.WriteAllBytes(gzipFile, gzipContent); ProjectHelpers.AddFileToActiveProject(gzipFile); MarginBase.AddFileToProject(file, gzipFile); } }
private static void MinifyFileWithSourceMap(string file, string minFile, CodeSettings settings, bool isBundle) { string mapPath = minFile + ".map"; ProjectHelpers.CheckOutFileFromSourceControl(mapPath); using (TextWriter writer = new StreamWriter(mapPath, false, new UTF8Encoding(false))) using (V3SourceMap sourceMap = new V3SourceMap(writer)) { settings.SymbolsMap = sourceMap; sourceMap.StartPackage(Path.GetFileName(minFile), Path.GetFileName(mapPath)); // This fails when debugger is attached. Bug raised with Ron Logan MinifyFile(file, minFile, settings, isBundle); sourceMap.EndPackage(); if (!isBundle) { MarginBase.AddFileToProject(file, mapPath); } } }
private static void WriteBundleFile(string filePath, XmlDocument doc) { XmlNode bundleNode = doc.SelectSingleNode("//bundle"); if (bundleNode == null) { return; } XmlNode outputAttr = bundleNode.Attributes["output"]; if (outputAttr != null && (outputAttr.InnerText.Contains("/") || outputAttr.InnerText.Contains("\\"))) { MessageBox.Show("The 'output' attribute should contain a file name without a path", "Web Essentials"); return; } Dictionary <string, string> files = new Dictionary <string, string>(); string extension = Path.GetExtension(filePath.Replace(_ext, string.Empty)); XmlNodeList nodes = doc.SelectNodes("//file"); foreach (XmlNode node in nodes) { string absolute; if (node.InnerText.Contains(":\\")) { absolute = node.InnerText; } else { absolute = ProjectHelpers.ToAbsoluteFilePath(node.InnerText, ProjectHelpers.GetProjectFolder(filePath)).Replace("\\\\", "\\"); } if (File.Exists(absolute)) { if (!files.ContainsKey(absolute)) { files.Add(absolute, node.InnerText); } } else { string error = string.Format("Bundle error: The file '{0}' doesn't exist", node.InnerText); _dte.ItemOperations.OpenFile(filePath); MessageBox.Show(error, "Web Essentials"); return; } } string bundlePath = outputAttr != null?Path.Combine(Path.GetDirectoryName(filePath), outputAttr.InnerText) : filePath.Replace(_ext, string.Empty); StringBuilder sb = new StringBuilder(); foreach (string file in files.Keys) { //if (extension.Equals(".css", StringComparison.OrdinalIgnoreCase)) //{ // sb.AppendLine("/*#source " + files[file] + " */"); //} if (extension.Equals(".js", StringComparison.OrdinalIgnoreCase) && WESettings.GetBoolean(WESettings.Keys.GenerateJavaScriptSourceMaps)) { sb.AppendLine("///#source 1 1 " + files[file]); } sb.AppendLine(File.ReadAllText(file)); } if (!File.Exists(bundlePath) || File.ReadAllText(bundlePath) != sb.ToString()) { ProjectHelpers.CheckOutFileFromSourceControl(bundlePath); using (StreamWriter writer = new StreamWriter(bundlePath, false, new UTF8Encoding(true))) { writer.Write(sb.ToString()); Logger.Log("Updating bundle: " + Path.GetFileName(bundlePath)); } MarginBase.AddFileToProject(filePath, bundlePath); if (bundleNode.Attributes["minify"] != null || bundleNode.Attributes["minify"].InnerText == "true") { WriteMinFile(filePath, bundlePath, sb.ToString(), extension); } } }