public void LoadActions() { if (this.engineManager == null || this.engineManager.IsDisposed) { this.engineManager = new EngineManager(this); } this.engineManager.Clear(); this.engineManager.Add(YuiCssEngine = new YuiCssEngine()); this.engineManager.Add(YuiJsEngine = new YuiJsEngine()); this.engineManager.Add(DeanEdwardsPackerEngine = new DeanEdwardsPackerEngine()); this.engineManager.Add(ClosureCompilerEngine = new ClosureCompilerEngine()); this.engineManager.Add(LessEngine = new LessEngine()); this.engineManager.Add(MsJsEngine = new MsJsEngine()); this.engineManager.Add(MsCssEngine = new MsCssEngine()); this.engineManager.Add(ConfigEngine = new ConfigEngine()); this.engineManager.Add(ViewEngine = new ViewEngine()); this.engineManager.Add(T4Engine = new T4Engine()); this.engineManager.Add(CoffeeScriptEngine = new CoffeeScriptEngine()); this.engineManager.Add(UglifyEngine = new UglifyEngine()); this.engineManager.Add(JSHintEngine = new JSHintEngine()); this.engineManager.Add(CSSLintEngine = new CSSLintEngine()); this.engineManager.Add(SassEngine = new SassEngine()); }
public override void Run(string fullFileName, ProjectItem projectItem) { var fileGroups = this.LoadConfigFileGroups(fullFileName); string directory = Path.GetDirectoryName(fullFileName); var productionFileText = new StringBuilder(); using (var manager = new Manager.VSProjectItemManager(this.Chirp != null ? this.Chirp.App : null, projectItem)) { foreach (var fileGroup in fileGroups) { productionFileText.Clear(); bool isJS = this.IsJsFile(fileGroup.GetName); bool isCSS = this.IsCssFile(fileGroup.GetName); string fullPath = directory + @"\" + fileGroup.Name; if (!string.IsNullOrEmpty(fileGroup.Path)) { fullPath = fileGroup.Path; } string fullPathMin = Utilities.GetBaseFileName(fullPath) + (isJS ? this.Settings.OutputExtensionJS : this.Settings.OutputExtensionCSS); if (TaskList.Instance != null) { TaskList.Instance.Remove(fullPath); TaskList.Instance.Remove(fullPathMin); } if (ImageSprite.IsImage(fileGroup.GetName)) { var img = ImageSprite.Build(fileGroup, fullPath); manager.AddFileByFileName(fullPath, img); continue; } foreach (var file in fileGroup.Files) { var path = file.Path; string code = file.GetCode(); string customArg = file.CustomArgument; if (((this.IsLessFile(path) || file.Engine == EngineType.Less) || this.IsSassFile(path) || this.IsCoffeeScriptFile(path) || file.Minify == true) && TaskList.Instance != null) { TaskList.Instance.Remove(path); } if (fileGroup.Debug) { var debugCode = "\r\n/* Chirpy Minify: {Minify}, MinifyWith: {MinifyWith}, File: {FilePath} */\r\n{Code}" .F(new { Minify = file.Minify.GetValueOrDefault(), FilePath = path, Code = isJS ? UglifyEngine.Beautify(code) : code, MinifyWith = file.MinifyWith.ToString() }); productionFileText.AppendLine(debugCode); } if (this.IsLessFile(path) || file.Engine == EngineType.Less) { code = LessEngine.TransformToCss(path, code, projectItem); } else if (this.IsCoffeeScriptFile(path)) { code = CoffeeScriptEngine.TransformToJs(path, code, projectItem); } else if (this.IsSassFile(path)) { code = SassEngine.TransformToCss(path, code, projectItem); } if (file.Minify == true) { if (this.IsCssFile(path)) { code = CssEngine.Minify(path, code, projectItem, file.MinifyWith); } else if (this.IsJsFile(path)) { code = JsEngine.Minify(path, code, projectItem, file.MinifyWith, customArg); } } productionFileText.AppendLine(code); } string output = productionFileText.ToString(); output = Utilities.ProcessText(output, fileGroup.Find, fileGroup.Replace); if (fileGroup.Minify == FileGroupXml.MinifyActions.True) { output = isJS ? JsEngine.Minify(fullPath, output, projectItem, fileGroup.MinifyWith) : CssEngine.Minify(fullPath, output, projectItem, fileGroup.MinifyWith); } //manager.AddFileByFileName(Utilities.GetBaseFileName(fullPath) + (isJS ? ".js" : isCSS ? ".css" : System.IO.Path.GetExtension(fullPath)), output); manager.AddFileByFileName(fullPath, output); if (fileGroup.Minify == FileGroupXml.MinifyActions.Both) { if (TaskList.Instance != null) { TaskList.Instance.Remove(fullPathMin); } output = isJS ? JsEngine.Minify(fullPath, output, projectItem, fileGroup.MinifyWith) : CssEngine.Minify(fullPath, output, projectItem, fileGroup.MinifyWith); manager.AddFileByFileName(fullPathMin, output); } } if (projectItem != null) { this.ReloadFileDependencies(projectItem); } } }