diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Orchard.Workflows.csproj b/src/Orchard.Web/Modules/Orchard.Workflows/Orchard.Workflows.csproj index 13ab0937e..fd05a7a25 100644 --- a/src/Orchard.Web/Modules/Orchard.Workflows/Orchard.Workflows.csproj +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Orchard.Workflows.csproj @@ -110,7 +110,6 @@ - diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/ResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.Workflows/ResourceManifest.cs index 140486403..0d0fdf829 100644 --- a/src/Orchard.Web/Modules/Orchard.Workflows/ResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.Workflows/ResourceManifest.cs @@ -1,6 +1,8 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; -using System.Web; +using System.Linq; +using Orchard.Caching; using Orchard.Environment; using Orchard.Environment.Extensions; using Orchard.FileSystems.VirtualPath; @@ -14,16 +16,19 @@ namespace Orchard.Workflows { private readonly IHostEnvironment _hostEnvironment; private readonly IExtensionManager _extensionManager; private readonly IVirtualPathProvider _virtualPathProvider; + private readonly ICacheManager _cacheManager; public ResourceManifest( Work activitiesManager, IHostEnvironment hostEnvironment, IExtensionManager extensionManager, - IVirtualPathProvider virtualPathProvider) { + IVirtualPathProvider virtualPathProvider, + ICacheManager cacheManager) { _activitiesManager = activitiesManager; _hostEnvironment = hostEnvironment; _extensionManager = extensionManager; _virtualPathProvider = virtualPathProvider; + _cacheManager = cacheManager; } public void BuildManifests(ResourceManifestBuilder builder) { @@ -31,28 +36,44 @@ namespace Orchard.Workflows { manifest.DefineStyle("WorkflowsAdmin").SetUrl("orchard-workflows-admin.css").SetDependencies("~/Themes/TheAdmin/Styles/Site.css"); - var resourceNames = new List(); + manifest.DefineScript("jsPlumb").SetUrl("jquery.jsPlumb-1.4.1-all-min.js").SetDependencies("jQueryUI"); - foreach (var activity in _activitiesManager.Value.GetActivities()) { - var assemblyName = activity.GetType().Assembly.GetName().Name; - var descriptor = _extensionManager.GetExtension(assemblyName); - if (descriptor == null) continue; - var stylesPath = _virtualPathProvider.Combine(descriptor.VirtualPath, "Styles"); - var resourceName = "WorkflowsActivity-" + activity.Name; - var filename = resourceName.HtmlClassify() + ".css"; - var filePath = _virtualPathProvider.Combine(_hostEnvironment.MapPath(stylesPath), filename); + // Trying to find a matching activity CSS for each activity in the extensions they come from. + var resourceNamesAndPaths = _cacheManager.Get("Orchard.Workflows.ActivityResourceNames", context => { + var resourceNameAndPathList = new List>(); - if (File.Exists(filePath)) { - resourceNames.Add(resourceName); + foreach (var activity in _activitiesManager.Value.GetActivities()) { + var assemblyName = activity.GetType().Assembly.GetName().Name; + var extension = _extensionManager.GetExtension(assemblyName); + if (extension == null) continue; - manifest.DefineStyle(resourceName).SetUrl(filename).SetDependencies("WorkflowsAdmin"); + var stylesPath = _virtualPathProvider.Combine(extension.VirtualPath, "Styles"); + var resourceName = "WorkflowsActivity-" + activity.Name; + var filename = resourceName.HtmlClassify() + ".css"; + var filePath = _virtualPathProvider.Combine(_hostEnvironment.MapPath(stylesPath), filename); + + if (File.Exists(filePath)) { + /* Since stylesheets are shapes, we don't need to create the resource with the full path to the CSS file, + * because extensions can override those shapes by file name if they reference Orchard.Workflows, + * even when they don't exist in Orchard.Workflows. */ + resourceNameAndPathList.Add(Tuple.Create(resourceName, filename)); + } } + + return resourceNameAndPathList; + }); + + foreach (var resourceNameAndPath in resourceNamesAndPaths) { + manifest + .DefineStyle(resourceNameAndPath.Item1) + .SetUrl(resourceNameAndPath.Item2) + .SetDependencies("WorkflowsAdmin"); } - manifest.DefineStyle("WorkflowsActivities").SetUrl("workflows-activity.css").SetDependencies(resourceNames.ToArray()); - - manifest.DefineScript("jsPlumb").SetUrl("jquery.jsPlumb-1.4.1-all-min.js").SetDependencies("jQueryUI"); + manifest + .DefineStyle("WorkflowsActivities") + .SetDependencies(resourceNamesAndPaths.Select(resourceNameAndPath => resourceNameAndPath.Item1).ToArray()); } } } diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Styles/workflows-activity.css b/src/Orchard.Web/Modules/Orchard.Workflows/Styles/workflows-activity.css deleted file mode 100644 index 5f282702b..000000000 --- a/src/Orchard.Web/Modules/Orchard.Workflows/Styles/workflows-activity.css +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file