Пример #1
0
        private async Task GenerateAsync(BundleDocument bundle, string extension, bool hasUpdated = false)
        {
            _dte.StatusBar.Text = "Generating bundle...";

            if (ProjectHelpers.GetProjectItem(bundle.FileName) == null)
            {
                ProjectHelpers.AddFileToActiveProject(bundle.FileName);
            }

            string bundleFile = Path.Combine(Path.GetDirectoryName(bundle.FileName), Path.GetFileNameWithoutExtension(bundle.FileName));

            if (!string.IsNullOrEmpty(bundle.OutputDirectory))
            {
                bundleFile = ProjectHelpers.GetAbsolutePathFromSettings(bundle.OutputDirectory, Path.Combine(Path.GetDirectoryName(bundle.FileName), Path.GetFileNameWithoutExtension(bundle.FileName)));
            }

            ProjectHelpers.CreateDirectoryInProject(bundleFile);

            bool hasChanged = await BundleGenerator.MakeBundle(bundle, bundleFile, UpdateBundleAsync);

            ProjectHelpers.AddFileToProject(bundle.FileName, bundleFile);

            if (!hasUpdated)
            {
                WebEssentialsPackage.DTE.ItemOperations.OpenFile(bundle.FileName);
            }

            if (bundle.Minified)
            {
                await BundleGenerator.MakeMinFile(bundleFile, extension, hasChanged);
            }

            _dte.StatusBar.Text = "Bundle generated";
        }
Пример #2
0
        public static async Task UpdateAllBundlesAsync(bool isBuild = false)
        {
            foreach (Project project in ProjectHelpers.GetAllProjects())
            {
                if (project.ProjectItems.Count == 0)
                {
                    continue;
                }

                string folder = ProjectHelpers.GetRootFolder(project);

                if (string.IsNullOrEmpty(folder))
                {
                    continue;
                }

                BundleFilesMenu menu = new BundleFilesMenu();

                foreach (string file in Directory.EnumerateFiles(folder, "*" + _ext, SearchOption.AllDirectories))
                {
                    if (ProjectHelpers.GetProjectItem(file) == null)
                    {
                        continue;
                    }

                    await menu.UpdateBundleAsync(file, isBuild);
                }
            }
        }
Пример #3
0
        private async void SolutionEvents_Opened()
        {
            foreach (Project project in ProjectHelpers.GetAllProjects())
            {
                if (project.ProjectItems.Count == 0)
                {
                    continue;
                }

                string folder = ProjectHelpers.GetRootFolder(project);
                Func <string, bool, Task> bundleFunc = new BundleFilesMenu().UpdateBundleAsync;
                Func <string, bool, Task> spriteFunc = new SpriteImageMenu().UpdateSpriteAsync;

                foreach (string file in Directory.EnumerateFiles(folder, "*.*", SearchOption.AllDirectories)
                         .Where(s => s.EndsWith(".bundle") || s.EndsWith(".sprite")))
                {
                    if (ProjectHelpers.GetProjectItem(file) == null)
                    {
                        continue;
                    }

                    if (file.EndsWith(".bundle", StringComparison.OrdinalIgnoreCase))
                    {
                        await BundleGenerator.WatchFiles(await BundleDocument.FromFile(file), bundleFunc);
                    }
                    else
                    {
                        await SpriteGenerator.WatchFiles(await SpriteDocument.FromFile(file), spriteFunc);
                    }
                }
            }
        }
Пример #4
0
        ///<summary>Converts a relative URL to an absolute path on disk, as resolved from the specified file.</summary>
        public static string ToAbsoluteFilePath(string relativeUrl, string relativeToFile)
        {
            var file = ProjectHelpers.GetProjectItem(relativeToFile);

            if (file == null || file.Properties == null)
            {
                return(ToAbsoluteFilePath(relativeUrl, GetRootFolder(), Path.GetDirectoryName(relativeToFile)));
            }
            return(ToAbsoluteFilePath(relativeUrl, file));
        }
Пример #5
0
        ///<summary>Gets the Project containing the specified file.</summary>
        public static Project GetProject(string item)
        {
            var projectItem = ProjectHelpers.GetProjectItem(item);

            if (projectItem == null)
            {
                return(null);
            }

            return(projectItem.ContainingProject);
        }
Пример #6
0
        public static Task RunOnAllFilesInProjectAsync(IEnumerable <string> extensionsPattern, Func <string, LintReporter> runnerFactory)
        {
            string dir = ProjectHelpers.GetRootFolder();

            if (dir == null || !Directory.Exists(dir))
            {
                return(Task.FromResult(true));
            }

            return(Task.WhenAll(
                       extensionsPattern.SelectMany(x => Directory.EnumerateFiles(dir, x, SearchOption.AllDirectories))
                       .Where(f => ProjectHelpers.GetProjectItem(f) != null)
                       .Select(f => runnerFactory(f).RunLinterAsync().HandleErrors("linting " + f))));
        }
Пример #7
0
        ///<summary>Gets the directory containing the project for the specified file.</summary>
        public static string GetProjectFolder(string fileNameOrFolder)
        {
            if (string.IsNullOrEmpty(fileNameOrFolder))
            {
                return(GetRootFolder());
            }

            ProjectItem item          = ProjectHelpers.GetProjectItem(fileNameOrFolder);
            string      projectFolder = null;

            if (item != null)
            {
                projectFolder = GetProjectFolder(item);
            }

            return(projectFolder);
        }
        private static Task <bool> Process(string filePath)
        {
            if (!File.Exists(filePath + Ext.JavaScript) && !File.Exists(filePath + Ext.TypeScript))
            {
                return(Task.FromResult(false));
            }

            return(Dispatcher.CurrentDispatcher.InvokeAsync(new Func <bool>(() =>
            {
                var item = ProjectHelpers.GetProjectItem(filePath);

                if (item == null)
                {
                    return false;
                }

                List <IntellisenseObject> list = null;

                try
                {
                    list = ProcessFile(item);
                }
                catch (Exception ex)
                {
                    Logger.Log("An error occurred while processing code in " + filePath + "\n" + ex
                               + "\n\nPlease report this bug at https://github.com/madskristensen/WebEssentials2013/issues, and include the source of the file.");
                }

                if (list == null)
                {
                    return false;
                }

                AddScript(filePath, Ext.JavaScript, list);
                AddScript(filePath, Ext.TypeScript, list);

                return true;
            }), DispatcherPriority.ApplicationIdle).Task);
        }
Пример #9
0
        public static ProjectItem AddFileToProject(string parentFileName, string fileName)
        {
            if (Path.GetFullPath(parentFileName) == Path.GetFullPath(fileName) || !File.Exists(fileName))
            {
                return(null);
            }

            fileName = Path.GetFullPath(fileName);  // WAP projects don't like paths with forward slashes

            var item = ProjectHelpers.GetProjectItem(parentFileName);

            if (item == null || item.ContainingProject == null || string.IsNullOrEmpty(item.ContainingProject.FullName))
            {
                return(null);
            }

            if (item.ContainingProject.GetType().Name == "OAProject" && item.ProjectItems != null)
            {
                // WinJS
                var currentItem = ProjectHelpers.GetProjectItem(fileName);
                // check if the file already added ( adding second time fails with ADDRESULT_Cancel )
                if (currentItem != null && currentItem.Kind != Guid.Empty.ToString("B"))
                {
                    return(currentItem);
                }

                item = ProjectHelpers.GetProjectItem(fileName);
                if (item == null)
                {
                    return(null);
                }

                ProjectItem addedItem = null;

                try
                {
                    addedItem = item.ProjectItems.AddFromFile(fileName);
                }
                catch (COMException) { }

                if (addedItem != null && Path.GetDirectoryName(parentFileName) == Path.GetDirectoryName(fileName))
                {
                    // create nesting
                    var dependentUponProperty = addedItem.Properties.Item("DependentUpon");
                    dependentUponProperty.Value = Path.GetFileName(parentFileName);
                }

                return(addedItem);
            }
            else if (item.ContainingProject.GetType().Name != "OAProject" && item.ProjectItems != null && Path.GetDirectoryName(parentFileName) == Path.GetDirectoryName(fileName))
            {   // WAP
                try
                {
                    return(item.ProjectItems.AddFromFile(fileName));
                }
                catch (COMException) { }
            }
            else if (Path.GetFullPath(fileName).StartsWith(GetRootFolder(item.ContainingProject), StringComparison.OrdinalIgnoreCase))
            {   // Website
                try
                {
                    return(item.ContainingProject.ProjectItems.AddFromFile(fileName));
                }
                catch (COMException) { }
            }

            return(null);
        }