From 714ec54d0dfaefc3d38a987ae5d5b8bc5dd1cd24 Mon Sep 17 00:00:00 2001 From: Dave Reed Date: Mon, 27 Sep 2010 13:56:05 -0700 Subject: [PATCH] - Converted ResourceManifests to provider/builder pattern. - Removed ability to require a minimum version --HG-- branch : dev --- .../ContentsLocationResourceManifest.cs | 6 +-- .../Resources/LocalizationResourceManifest.cs | 9 ++-- .../PublishLaterResourceManifest.cs | 6 +-- .../Core/Routable/RoutableResourceManifest.cs | 6 +-- .../Core/Settings/SettingsResourceManifest.cs | 6 +-- .../Core/Shapes/CoreShapesResourceManifest.cs | 11 ++-- .../ArchiveLaterResourceManifest.cs | 6 +-- .../Orchard.Blogs/BlogsResourceManifest.cs | 11 ++-- .../ContentTypesResourceManifest.cs | 6 +-- .../IndexingResourceManifest.cs | 6 +-- .../Orchard.Media/MediaResourceManifest.cs | 6 +-- .../ModulesResourceManifest.cs | 6 +-- .../MultiTenancyResourceManifest.cs | 6 +-- .../PackagingResourceManifest.cs | 6 +-- .../Orchard.Search/SearchResourceManifest.cs | 8 +-- .../Modules/Orchard.Setup/SetupMode.cs | 3 +- .../Orchard.Themes/ThemesResourceManifest.cs | 54 +++++++++---------- .../Orchard.jQuery/jQueryResourceManifest.cs | 23 ++++---- .../TinyMce/TinyMceResourceManifest.cs | 6 +-- .../Themes/SafeMode/Views/Layout.cshtml | 2 +- src/Orchard.sln | 1 - src/Orchard/Orchard.Framework.csproj | 2 + src/Orchard/UI/Resources/IResourceManifest.cs | 14 +---- .../UI/Resources/IResourceManifestProvider.cs | 5 ++ src/Orchard/UI/Resources/RequireSettings.cs | 9 ---- src/Orchard/UI/Resources/ResourceFilter.cs | 6 --- src/Orchard/UI/Resources/ResourceManager.cs | 45 +++++++++------- src/Orchard/UI/Resources/ResourceManifest.cs | 8 ++- .../UI/Resources/ResourceManifestBuilder.cs | 27 ++++++++++ src/Orchard/UI/Resources/ResourceRegister.cs | 11 ++-- src/ResourceManager.txt | 41 -------------- 31 files changed, 166 insertions(+), 196 deletions(-) create mode 100644 src/Orchard/UI/Resources/IResourceManifestProvider.cs create mode 100644 src/Orchard/UI/Resources/ResourceManifestBuilder.cs delete mode 100644 src/ResourceManager.txt diff --git a/src/Orchard.Web/Core/ContentsLocation/ContentsLocationResourceManifest.cs b/src/Orchard.Web/Core/ContentsLocation/ContentsLocationResourceManifest.cs index 807d21e67..958de7431 100644 --- a/src/Orchard.Web/Core/ContentsLocation/ContentsLocationResourceManifest.cs +++ b/src/Orchard.Web/Core/ContentsLocation/ContentsLocationResourceManifest.cs @@ -5,9 +5,9 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.Core.ContentsLocation { - public class ContentsLocationResourceManifest : ResourceManifest { - public ContentsLocationResourceManifest() { - DefineStyle("ContentsLocationAdmin").SetUrl("admin.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineStyle("ContentsLocationAdmin").SetUrl("admin.css"); } } } diff --git a/src/Orchard.Web/Core/Localization/Resources/LocalizationResourceManifest.cs b/src/Orchard.Web/Core/Localization/Resources/LocalizationResourceManifest.cs index 172ac3411..24f50e998 100644 --- a/src/Orchard.Web/Core/Localization/Resources/LocalizationResourceManifest.cs +++ b/src/Orchard.Web/Core/Localization/Resources/LocalizationResourceManifest.cs @@ -5,11 +5,12 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.Core.Localization.Resources { - public class LocalizationResourceManifest : ResourceManifest { - public LocalizationResourceManifest() { + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + var manifest = builder.Add(); // todo: move this file - DefineStyle("Localization").SetUrl("base.css"); - DefineStyle("LocalizationAdmin").SetUrl("admin.css"); + manifest.DefineStyle("Localization").SetUrl("base.css"); + manifest.DefineStyle("LocalizationAdmin").SetUrl("admin.css"); } } } diff --git a/src/Orchard.Web/Core/PublishLater/PublishLaterResourceManifest.cs b/src/Orchard.Web/Core/PublishLater/PublishLaterResourceManifest.cs index d03ecfb2a..0c10d31ba 100644 --- a/src/Orchard.Web/Core/PublishLater/PublishLaterResourceManifest.cs +++ b/src/Orchard.Web/Core/PublishLater/PublishLaterResourceManifest.cs @@ -5,9 +5,9 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.Core.PublishLater { - public class PublishLaterResourceManifest : ResourceManifest { - public PublishLaterResourceManifest() { - DefineStyle("PublishLater_DatePicker").SetUrl("datetime.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineStyle("PublishLater_DatePicker").SetUrl("datetime.css"); } } } diff --git a/src/Orchard.Web/Core/Routable/RoutableResourceManifest.cs b/src/Orchard.Web/Core/Routable/RoutableResourceManifest.cs index a098cb595..2746fa50e 100644 --- a/src/Orchard.Web/Core/Routable/RoutableResourceManifest.cs +++ b/src/Orchard.Web/Core/Routable/RoutableResourceManifest.cs @@ -5,9 +5,9 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.Core.Routable { - public class RoutableResourceManifest : ResourceManifest { - public RoutableResourceManifest() { - DefineScript("Slugify").SetUrl("jquery.slugify.js").SetDependencies("jQuery"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineScript("Slugify").SetUrl("jquery.slugify.js").SetDependencies("jQuery"); } } } diff --git a/src/Orchard.Web/Core/Settings/SettingsResourceManifest.cs b/src/Orchard.Web/Core/Settings/SettingsResourceManifest.cs index 2321abcbd..e4be6dcb4 100644 --- a/src/Orchard.Web/Core/Settings/SettingsResourceManifest.cs +++ b/src/Orchard.Web/Core/Settings/SettingsResourceManifest.cs @@ -5,9 +5,9 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.Core.Settings { - public class SettingsResourceManifest : ResourceManifest { - public SettingsResourceManifest() { - DefineStyle("SettingsAdmin").SetUrl("admin.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineStyle("SettingsAdmin").SetUrl("admin.css"); } } } diff --git a/src/Orchard.Web/Core/Shapes/CoreShapesResourceManifest.cs b/src/Orchard.Web/Core/Shapes/CoreShapesResourceManifest.cs index 77aa90eb4..cb6505345 100644 --- a/src/Orchard.Web/Core/Shapes/CoreShapesResourceManifest.cs +++ b/src/Orchard.Web/Core/Shapes/CoreShapesResourceManifest.cs @@ -5,11 +5,12 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.Core.Shapes { - public class CoreShapesResourceManifest : ResourceManifest { - public CoreShapesResourceManifest() { - DefineScript("ShapesBase").SetUrl("base.js").SetDependencies("jQuery"); - DefineStyle("Shapes").SetUrl("site.css"); // todo: missing - DefineStyle("ShapesSpecial").SetUrl("special.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + var manifest = builder.Add(); + manifest.DefineScript("ShapesBase").SetUrl("base.js").SetDependencies("jQuery"); + manifest.DefineStyle("Shapes").SetUrl("site.css"); // todo: missing + manifest.DefineStyle("ShapesSpecial").SetUrl("special.css"); } } } diff --git a/src/Orchard.Web/Modules/Orchard.ArchiveLater/ArchiveLaterResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.ArchiveLater/ArchiveLaterResourceManifest.cs index 491e15c05..301d84005 100644 --- a/src/Orchard.Web/Modules/Orchard.ArchiveLater/ArchiveLaterResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.ArchiveLater/ArchiveLaterResourceManifest.cs @@ -5,9 +5,9 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.ArchiveLater { - public class ArchiveLaterResourceManifest : ResourceManifest { - public ArchiveLaterResourceManifest() { - DefineStyle("ArchiveLater_DatePicker").SetUrl("datetime.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineStyle("ArchiveLater_DatePicker").SetUrl("datetime.css"); } } } diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/BlogsResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.Blogs/BlogsResourceManifest.cs index 0d3507b23..8d377edda 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/BlogsResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/BlogsResourceManifest.cs @@ -5,12 +5,13 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.Blogs { - public class BlogsResourceManifest : ResourceManifest { - public BlogsResourceManifest() { - DefineStyle("BlogsAdmin").SetUrl("admin.css"); - DefineStyle("BlogsArchives").SetUrl("archives.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + var manifest = builder.Add(); + manifest.DefineStyle("BlogsAdmin").SetUrl("admin.css"); + manifest.DefineStyle("BlogsArchives").SetUrl("archives.css"); - DefineScript("BlogsArchives").SetUrl("archives.js").SetDependencies("jQuery"); + manifest.DefineScript("BlogsArchives").SetUrl("archives.js").SetDependencies("jQuery"); } } } diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/ContentTypesResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/ContentTypesResourceManifest.cs index e8f8d3247..5333fa530 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/ContentTypesResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/ContentTypesResourceManifest.cs @@ -5,9 +5,9 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.ContentTypes { - public class ContentTypesResourceManifest : ResourceManifest { - public ContentTypesResourceManifest() { - DefineStyle("ContentTypesAdmin").SetUrl("admin.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineStyle("ContentTypesAdmin").SetUrl("admin.css"); } } } diff --git a/src/Orchard.Web/Modules/Orchard.Indexing/IndexingResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.Indexing/IndexingResourceManifest.cs index 2188826de..f6bcc7f69 100644 --- a/src/Orchard.Web/Modules/Orchard.Indexing/IndexingResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.Indexing/IndexingResourceManifest.cs @@ -5,9 +5,9 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.Indexing { - public class IndexingResourceManifest : ResourceManifest { - public IndexingResourceManifest() { - DefineStyle("IndexingAdmin").SetUrl("admin.css"); // todo: this does not exist + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineStyle("IndexingAdmin").SetUrl("admin.css"); // todo: this does not exist } } } diff --git a/src/Orchard.Web/Modules/Orchard.Media/MediaResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.Media/MediaResourceManifest.cs index 0a570f3ca..dfd6a6009 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/MediaResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/MediaResourceManifest.cs @@ -3,9 +3,9 @@ using Orchard.UI.Navigation; using Orchard.UI.Resources; namespace Orchard.Media { - public class MediaResourceManifest : ResourceManifest { - public MediaResourceManifest() { - DefineStyle("MediaAdmin").SetUrl("admin.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineStyle("MediaAdmin").SetUrl("admin.css"); } } } diff --git a/src/Orchard.Web/Modules/Orchard.Modules/ModulesResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.Modules/ModulesResourceManifest.cs index 6f9774d9b..ef7366a20 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/ModulesResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.Modules/ModulesResourceManifest.cs @@ -5,9 +5,9 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.Modules { - public class ModulesResourceManifest : ResourceManifest { - public ModulesResourceManifest() { - DefineStyle("ModulesAdmin").SetUrl("admin.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineStyle("ModulesAdmin").SetUrl("admin.css"); } } } diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/MultiTenancyResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/MultiTenancyResourceManifest.cs index ee5f378b8..201577eef 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/MultiTenancyResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/MultiTenancyResourceManifest.cs @@ -5,9 +5,9 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.MultiTenancy { - public class MultiTenancyResourceManifest : ResourceManifest { - public MultiTenancyResourceManifest() { - DefineStyle("MultiTenancyAdmin").SetUrl("admin.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineStyle("MultiTenancyAdmin").SetUrl("admin.css"); } } } diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/PackagingResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.Packaging/PackagingResourceManifest.cs index f15767d2f..fc0674440 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/PackagingResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/PackagingResourceManifest.cs @@ -5,9 +5,9 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.Packaging { - public class PackagingResourceManifest : ResourceManifest { - public PackagingResourceManifest() { - DefineStyle("PackagingAdmin").SetUrl("admin.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineStyle("PackagingAdmin").SetUrl("admin.css"); } } } diff --git a/src/Orchard.Web/Modules/Orchard.Search/SearchResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.Search/SearchResourceManifest.cs index d64228c77..e3e081244 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/SearchResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/SearchResourceManifest.cs @@ -5,10 +5,10 @@ using System.Text; using Orchard.UI.Resources; namespace Orchard.Search { - public class SearchResourceManifest : ResourceManifest { - public SearchResourceManifest() { - DefineStyle("SearchAdmin").SetUrl("admin.css"); // todo: this does not appear to be used anywhere - DefineStyle("Search").SetUrl("search.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineStyle("SearchAdmin").SetUrl("admin.css"); // todo: this does not appear to be used anywhere + builder.Add().DefineStyle("Search").SetUrl("search.css"); } } } diff --git a/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs b/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs index b0bc14758..a01a216f9 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs @@ -39,6 +39,7 @@ using Orchard.UI.PageTitle; using Orchard.UI.Resources; using Orchard.UI.Zones; using IFilterProvider = Orchard.Mvc.Filters.IFilterProvider; +using ResourceManifest = Orchard.Core.Shapes.ResourceManifest; namespace Orchard.Setup { public class SetupMode : Module { @@ -63,7 +64,7 @@ namespace Orchard.Setup { builder.RegisterType().As().InstancePerLifetimeScope(); builder.RegisterType().As().InstancePerLifetimeScope(); builder.RegisterType().As().InstancePerMatchingLifetimeScope("shell"); - builder.RegisterType().As().InstancePerLifetimeScope(); + builder.RegisterType().As().InstancePerLifetimeScope(); builder.RegisterType().As().InstancePerLifetimeScope(); builder.RegisterType().As().InstancePerLifetimeScope(); diff --git a/src/Orchard.Web/Modules/Orchard.Themes/ThemesResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.Themes/ThemesResourceManifest.cs index ede30ba8f..061622f90 100644 --- a/src/Orchard.Web/Modules/Orchard.Themes/ThemesResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.Themes/ThemesResourceManifest.cs @@ -1,47 +1,45 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Orchard.UI.Resources; namespace Orchard.Themes { - public class ThemesResourceManifest : ResourceManifest { - public ThemesResourceManifest() { - DefineStyle("ThemesAdmin").SetUrl("admin.css"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + var manifest = builder.Add(); + manifest.DefineStyle("ThemesAdmin").SetUrl("admin.css"); // todo: used by core\shapes -- move it? - DefineScript("Switchable").SetUrl("jquery.switchable.js").SetDependencies("jQuery"); - DefineStyle("Switchable").SetUrl("jquery.switchable.css"); + manifest.DefineScript("Switchable").SetUrl("jquery.switchable.js").SetDependencies("jQuery"); + manifest.DefineStyle("Switchable").SetUrl("jquery.switchable.css"); // Resources for the built-in themes (under the orchard.web/themes directory) // The manifest would normally go there rather than here, but orchard.web/themes // is not registered with AutoFac. - DefineStyle("Admin").SetUrl("~/modules/orchard.themes/styles/admin.css"); - - DefineStyle("Classic").SetUrl("~/themes/classic/styles/site.css"); - DefineStyle("Classic_Blog").SetUrl("~/themes/classic/styles/blog.css"); - - DefineStyle("ClassicDark").SetUrl("~/themes/classicdark/styles/site.css"); - DefineStyle("ClassicDark_Blog").SetUrl("~/themes/classicdark/styles/blog.css"); - - DefineStyle("Contoso").SetUrl("~/themes/contoso/styles/site.css"); - DefineStyle("Contoso_Search").SetUrl("~/themes/contoso/styles/search.css"); + manifest.DefineStyle("Admin").SetUrl("~/modules/orchard.themes/styles/admin.css"); + manifest.DefineStyle("Classic").SetUrl("~/themes/classic/styles/site.css"); + manifest.DefineStyle("Classic_Blog").SetUrl("~/themes/classic/styles/blog.css"); + + manifest.DefineStyle("ClassicDark").SetUrl("~/themes/classicdark/styles/site.css"); + manifest.DefineStyle("ClassicDark_Blog").SetUrl("~/themes/classicdark/styles/blog.css"); + + manifest.DefineStyle("Contoso").SetUrl("~/themes/contoso/styles/site.css"); + manifest.DefineStyle("Contoso_Search").SetUrl("~/themes/contoso/styles/search.css"); + // todo: include and define the min.js version too // todo: move EasySlider to common location - DefineScript("EasySlider").SetUrl("~/themes/contoso/scripts/easySlider.js").SetDependencies("jQuery"); + manifest.DefineScript("EasySlider").SetUrl("~/themes/contoso/scripts/easySlider.js").SetDependencies("jQuery"); - DefineStyle("Corporate").SetUrl("~/themes/corporate/styles/site.css"); + manifest.DefineStyle("Corporate").SetUrl("~/themes/corporate/styles/site.css"); - DefineStyle("Green").SetUrl("~/themes/green/styles/site.css"); - DefineStyle("Green_Blog").SetUrl("~/themes/green/styles/blog.css"); - DefineStyle("Green_YUI").SetUrl("~/themes/green/styles/yui.css"); + manifest.DefineStyle("Green").SetUrl("~/themes/green/styles/site.css"); + manifest.DefineStyle("Green_Blog").SetUrl("~/themes/green/styles/blog.css"); + manifest.DefineStyle("Green_YUI").SetUrl("~/themes/green/styles/yui.css"); - DefineStyle("SafeMode").SetUrl("~/themes/safemode/styles/site.css"); + manifest.DefineStyle("SafeMode").SetUrl("~/themes/safemode/styles/site.css"); - DefineStyle("TheAdmin").SetUrl("~/themes/theadmin/styles/site.css"); - DefineStyle("TheAdmin_IE").SetUrl("~/themes/theadmin/styles/ie.css"); - DefineStyle("TheAdmin_IE6").SetUrl("~/themes/theadmin/styles/ie6.css"); - DefineScript("TheAdmin").SetUrl("~/themes/theadmin/scripts/admin.js").SetDependencies("jQuery"); + manifest.DefineStyle("TheAdmin").SetUrl("~/themes/theadmin/styles/site.css"); + manifest.DefineStyle("TheAdmin_IE").SetUrl("~/themes/theadmin/styles/ie.css"); + manifest.DefineStyle("TheAdmin_IE6").SetUrl("~/themes/theadmin/styles/ie6.css"); + manifest.DefineScript("TheAdmin").SetUrl("~/themes/theadmin/scripts/admin.js").SetDependencies("jQuery"); } } } diff --git a/src/Orchard.Web/Modules/Orchard.jQuery/jQueryResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.jQuery/jQueryResourceManifest.cs index 834705c6c..b03f4d3c9 100644 --- a/src/Orchard.Web/Modules/Orchard.jQuery/jQueryResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.jQuery/jQueryResourceManifest.cs @@ -1,18 +1,19 @@ namespace Orchard.UI.Resources { - public class jQueryResourceManifest : ResourceManifest { - public jQueryResourceManifest() { - DefineScript("jQuery").SetUrl("jquery-1.4.2.min.js", "jquery-1.4.2.js").SetVersion("1.4.2"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + var manifest = builder.Add(); + manifest.DefineScript("jQuery").SetUrl("jquery-1.4.2.min.js", "jquery-1.4.2.js").SetVersion("1.4.2"); // todo: include min versions - DefineScript("jQueryUtils").SetUrl("jquery.utils.js").SetDependencies("jQuery"); - DefineScript("jQueryUI_Core").SetUrl("jquery.ui.core.js").SetVersion("1.8b1").SetDependencies("jQuery"); - DefineScript("jQueryUI_Widget").SetUrl("jquery.ui.widget.js").SetVersion("1.8b1").SetDependencies("jQuery"); - DefineScript("jQueryUI_DatePicker").SetUrl("jquery.ui.datepicker.js").SetVersion("1.8b1").SetDependencies("jQueryUI_Core", "jQueryUI_Widget"); - DefineScript("jQueryUtils_TimePicker").SetUrl("ui.timepickr.js").SetVersion("0.7.0a").SetDependencies("jQueryUtils", "jQueryUI_Core"); + manifest.DefineScript("jQueryUtils").SetUrl("jquery.utils.js").SetDependencies("jQuery"); + manifest.DefineScript("jQueryUI_Core").SetUrl("jquery.ui.core.js").SetVersion("1.8b1").SetDependencies("jQuery"); + manifest.DefineScript("jQueryUI_Widget").SetUrl("jquery.ui.widget.js").SetVersion("1.8b1").SetDependencies("jQuery"); + manifest.DefineScript("jQueryUI_DatePicker").SetUrl("jquery.ui.datepicker.js").SetVersion("1.8b1").SetDependencies("jQueryUI_Core", "jQueryUI_Widget"); + manifest.DefineScript("jQueryUtils_TimePicker").SetUrl("ui.timepickr.js").SetVersion("0.7.0a").SetDependencies("jQueryUtils", "jQueryUI_Core"); - DefineStyle("jQueryUtils_TimePicker").SetUrl("ui.timepickr.css"); - DefineStyle("jQueryUI_Orchard").SetUrl("jquery-ui-1.7.2.custom.css").SetVersion("1.7.2"); - DefineStyle("jQueryUI_DatePicker").SetUrl("ui.datepicker.css").SetDependencies("jQueryUI_Orchard").SetVersion("1.7.2"); + manifest.DefineStyle("jQueryUtils_TimePicker").SetUrl("ui.timepickr.css"); + manifest.DefineStyle("jQueryUI_Orchard").SetUrl("jquery-ui-1.7.2.custom.css").SetVersion("1.7.2"); + manifest.DefineStyle("jQueryUI_DatePicker").SetUrl("ui.datepicker.css").SetDependencies("jQueryUI_Orchard").SetVersion("1.7.2"); } } } diff --git a/src/Orchard.Web/Modules/TinyMce/TinyMceResourceManifest.cs b/src/Orchard.Web/Modules/TinyMce/TinyMceResourceManifest.cs index 29663529f..49bcbbbbe 100644 --- a/src/Orchard.Web/Modules/TinyMce/TinyMceResourceManifest.cs +++ b/src/Orchard.Web/Modules/TinyMce/TinyMceResourceManifest.cs @@ -1,9 +1,9 @@ using Orchard.UI.Resources; namespace TinyMce { - public class TinyMceResourceManifest : ResourceManifest { - public TinyMceResourceManifest() { - DefineScript("TinyMce").SetUrl("tiny_mce.js", "tiny_mce_src.js"); + public class ResourceManifest : IResourceManifestProvider { + public void BuildManifests(ResourceManifestBuilder builder) { + builder.Add().DefineScript("TinyMce").SetUrl("tiny_mce.js", "tiny_mce_src.js"); } } } diff --git a/src/Orchard.Web/Themes/SafeMode/Views/Layout.cshtml b/src/Orchard.Web/Themes/SafeMode/Views/Layout.cshtml index 72ce684ae..2a6cbd3a1 100644 --- a/src/Orchard.Web/Themes/SafeMode/Views/Layout.cshtml +++ b/src/Orchard.Web/Themes/SafeMode/Views/Layout.cshtml @@ -1,6 +1,6 @@ @using Orchard.UI.Resources @{ - Script.Require("jQuery", "1.4.2"); + Script.Require("jQuery"); Script.Require("ShapesBase"); Style.Include("site.css"); RegisterLink(new LinkEntry { Condition = "lte IE 6", Rel = "stylesheet", Type="text/css", Href = Href("../Styles/ie6.css")}.AddAttribute("media", "screen, projection")); diff --git a/src/Orchard.sln b/src/Orchard.sln index bc6b978e7..b85065f36 100644 --- a/src/Orchard.sln +++ b/src/Orchard.sln @@ -49,7 +49,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Tests", "Tools\Orch EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Notes", "_Notes", "{8A49DB66-40B2-4B6A-BFF0-D4839A240D00}" ProjectSection(SolutionItems) = preProject - ResourceManager.txt = ResourceManager.txt Shapes.txt = Shapes.txt EndProjectSection EndProject diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index 0c5e4def3..7ed909988 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -160,6 +160,8 @@ + + diff --git a/src/Orchard/UI/Resources/IResourceManifest.cs b/src/Orchard/UI/Resources/IResourceManifest.cs index 32bb42b48..282dcbf7e 100644 --- a/src/Orchard/UI/Resources/IResourceManifest.cs +++ b/src/Orchard/UI/Resources/IResourceManifest.cs @@ -1,22 +1,10 @@ using System.Collections.Generic; namespace Orchard.UI.Resources { - public interface IResourceManifest : ISingletonDependency { + public interface IResourceManifest { ResourceDefinition DefineResource(string resourceType, string resourceName); string Name { get; } string BasePath { get; } IDictionary GetResources(string resourceType); } - - - - //public class DefaultResMgr { - // public DefaultResMgr(IEnumerable providers) { - - // } - //} - - //public interface IResourceDefinitionProvider { - // void GetResources(BlahBuildsinkTargetSomethingToto def); - //} } diff --git a/src/Orchard/UI/Resources/IResourceManifestProvider.cs b/src/Orchard/UI/Resources/IResourceManifestProvider.cs new file mode 100644 index 000000000..75f98267b --- /dev/null +++ b/src/Orchard/UI/Resources/IResourceManifestProvider.cs @@ -0,0 +1,5 @@ +namespace Orchard.UI.Resources { + public interface IResourceManifestProvider : ISingletonDependency { + void BuildManifests(ResourceManifestBuilder builder); + } +} diff --git a/src/Orchard/UI/Resources/RequireSettings.cs b/src/Orchard/UI/Resources/RequireSettings.cs index e23933740..2648967ed 100644 --- a/src/Orchard/UI/Resources/RequireSettings.cs +++ b/src/Orchard/UI/Resources/RequireSettings.cs @@ -8,7 +8,6 @@ namespace Orchard.UI.Resources { public string Culture { get; set; } public bool DebugMode { get; set; } public bool CdnMode { get; set; } - public string MinimumVersion { get; set; } public ResourceLocation Location { get; set; } public Action InlineDefinition { get; set; } @@ -51,13 +50,6 @@ namespace Orchard.UI.Resources { return this; } - public RequireSettings WithMinimumVersion(string minimumVersion) { - MinimumVersion = String.IsNullOrEmpty(MinimumVersion) - ? minimumVersion - : (MinimumVersion.CompareTo(minimumVersion) > 0 ? minimumVersion : MinimumVersion); - return this; - } - public RequireSettings WithBasePath(string basePath) { BasePath = basePath; return this; @@ -77,7 +69,6 @@ namespace Orchard.UI.Resources { .UseCdn(CdnMode).UseCdn(other.CdnMode) .UseDebugMode(DebugMode).UseDebugMode(other.DebugMode) .UseCulture(Culture).UseCulture(other.Culture) - .WithMinimumVersion(MinimumVersion).WithMinimumVersion(other.MinimumVersion) .Define(InlineDefinition).Define(other.InlineDefinition); } } diff --git a/src/Orchard/UI/Resources/ResourceFilter.cs b/src/Orchard/UI/Resources/ResourceFilter.cs index 2cd891475..bc09e20b9 100644 --- a/src/Orchard/UI/Resources/ResourceFilter.cs +++ b/src/Orchard/UI/Resources/ResourceFilter.cs @@ -1,13 +1,7 @@ using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; using System.Web.Mvc; using Orchard.DisplayManagement; using Orchard.Mvc.Filters; -using Orchard.Mvc.Html; -using Orchard.Mvc.ViewEngines; namespace Orchard.UI.Resources { public class ResourceFilter : FilterProvider, IResultFilter { diff --git a/src/Orchard/UI/Resources/ResourceManager.cs b/src/Orchard/UI/Resources/ResourceManager.cs index a3cf7b568..9240833c1 100644 --- a/src/Orchard/UI/Resources/ResourceManager.cs +++ b/src/Orchard/UI/Resources/ResourceManager.cs @@ -5,29 +5,42 @@ using System.Collections.Specialized; using System.Globalization; using System.Linq; using System.Web; -using System.Web.Hosting; -using JetBrains.Annotations; +using Autofac.Features.Metadata; +using Orchard.DisplayManagement.Descriptors; namespace Orchard.UI.Resources { public class ResourceManager : IResourceManager { private readonly Dictionary, RequireSettings> _required = new Dictionary, RequireSettings>(); - private readonly Lazy _dynamicResourceProvider = new Lazy(); private readonly List _links = new List(); private readonly Dictionary _metas = new Dictionary(); private readonly Dictionary> _builtResources = new Dictionary>(); + private readonly IEnumerable> _providers; + private ResourceManifest _dynamicManifest; private List _headScripts; private List _footScripts; + private IEnumerable _manifests; - public ResourceManager(IEnumerable resourceProviders) { - ResourceProviders = resourceProviders; + public ResourceManager(IEnumerable> resourceProviders) { + _providers = resourceProviders; } - public IEnumerable ResourceProviders { get; private set; } + public IEnumerable ResourceProviders { + get { + if (_manifests == null) { + var builder = new ResourceManifestBuilder(); + foreach (var provider in _providers) { + builder.Feature = provider.Metadata.Feature; + provider.Value.BuildManifests(builder); + } + _manifests = builder.ResourceManifests; + } + return _manifests; + } + } - // represents resources that were required during the request but that had no matching resource provider public virtual ResourceManifest DynamicResources { get { - return _dynamicResourceProvider.Value; + return _dynamicManifest ?? (_dynamicManifest = new ResourceManifest()); } } @@ -108,23 +121,21 @@ namespace Orchard.UI.Resources { // using the action. var name = settings.Name; var type = settings.Type; - var minimumVersion = settings.MinimumVersion; var resource = (from p in ResourceProviders from r in p.GetResources(type) - where r.Key == name && (String.IsNullOrEmpty(minimumVersion) || String.CompareOrdinal(r.Value.Version ?? "", minimumVersion) >= 0) + where r.Key == name orderby r.Value.Version descending select r.Value).FirstOrDefault(); - if (resource == null && _dynamicResourceProvider.IsValueCreated) { - resource = (from r in _dynamicResourceProvider.Value.GetResources(type) - where r.Key == name && (String.IsNullOrEmpty(minimumVersion) || String.CompareOrdinal(r.Value.Version ?? "", minimumVersion) >= 0) + if (resource == null && _dynamicManifest != null) { + resource = (from r in _dynamicManifest.GetResources(type) + where r.Key == name orderby r.Value.Version descending select r.Value).FirstOrDefault(); } if (resource == null && settings.InlineDefinition != null) { // defining it on the fly resource = DynamicResources.DefineResource(type, name) - .SetBasePath(settings.BasePath) - .SetVersion(minimumVersion); + .SetBasePath(settings.BasePath); settings.InlineDefinition(resource); } return resource; @@ -161,9 +172,7 @@ namespace Orchard.UI.Resources { foreach (var settings in GetRequiredResources(resourceType)) { var resource = FindResource(settings); if (resource == null) { - throw String.IsNullOrEmpty(settings.MinimumVersion) - ? new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, "A '{1}' named '{0}' could not be found.", settings.Name, settings.Type)) - : new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, "A '{2}' named '{0}' with version greater than or equal to '{1}' could not be found.", settings.Name, settings.MinimumVersion, settings.Type)); + throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, "A '{1}' named '{0}' could not be found.", settings.Name, settings.Type)); } ExpandDependencies(resource, settings, allResources); } diff --git a/src/Orchard/UI/Resources/ResourceManifest.cs b/src/Orchard/UI/Resources/ResourceManifest.cs index d41c780c8..857477c06 100644 --- a/src/Orchard/UI/Resources/ResourceManifest.cs +++ b/src/Orchard/UI/Resources/ResourceManifest.cs @@ -3,7 +3,7 @@ using System.Web; using Orchard.Environment.Extensions.Models; namespace Orchard.UI.Resources { - public abstract class ResourceManifest : IResourceManifest { + public class ResourceManifest : IResourceManifest { private string _basePath; private readonly IDictionary> _resources = new Dictionary>(); @@ -22,11 +22,11 @@ namespace Orchard.UI.Resources { return definition; } - protected ResourceDefinition DefineScript(string name) { + public ResourceDefinition DefineScript(string name) { return DefineResource("script", name); } - protected ResourceDefinition DefineStyle(string name) { + public ResourceDefinition DefineStyle(string name) { return DefineResource("stylesheet", name); } @@ -48,6 +48,4 @@ namespace Orchard.UI.Resources { } } - internal class DynamicResourceManifest : ResourceManifest { - } } diff --git a/src/Orchard/UI/Resources/ResourceManifestBuilder.cs b/src/Orchard/UI/Resources/ResourceManifestBuilder.cs new file mode 100644 index 000000000..03362196c --- /dev/null +++ b/src/Orchard/UI/Resources/ResourceManifestBuilder.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Orchard.Environment.Extensions.Models; + +namespace Orchard.UI.Resources { + public class ResourceManifestBuilder { + public ResourceManifestBuilder() { + ResourceManifests = new HashSet(); + } + + public Feature Feature { get; set; } + + internal HashSet ResourceManifests { get; private set; } + + public ResourceManifest Add() { + var manifest = new ResourceManifest { Feature = Feature }; + ResourceManifests.Add(manifest); + return manifest; + } + + public void Add(IResourceManifest manifest) { + ResourceManifests.Add(manifest); + } + } +} diff --git a/src/Orchard/UI/Resources/ResourceRegister.cs b/src/Orchard/UI/Resources/ResourceRegister.cs index a5d6f4225..abc2e4498 100644 --- a/src/Orchard/UI/Resources/ResourceRegister.cs +++ b/src/Orchard/UI/Resources/ResourceRegister.cs @@ -9,7 +9,7 @@ using Microsoft.WebPages; namespace Orchard.UI.Resources { public class ResourceRegister { - private string _viewVirtualPath; + private readonly string _viewVirtualPath; public ResourceRegister(IViewDataContainer container, IResourceManager resourceManager, string resourceType) { var templateControl = container as TemplateControl; @@ -29,10 +29,6 @@ namespace Orchard.UI.Resources { protected IResourceManager ResourceManager { get; private set; } protected string ResourceType { get; private set; } - public RequireSettings Require(string resourceName) { - return Require(resourceName, (string)null); - } - public RequireSettings Include(string resourcePath) { if (resourcePath == null) { throw new ArgumentNullException("resourcePath"); @@ -40,12 +36,11 @@ namespace Orchard.UI.Resources { return ResourceManager.Include(ResourceType, resourcePath, ResourceDefinition.GetBasePathFromViewPath(ResourceType, _viewVirtualPath)); } - public virtual RequireSettings Require(string resourceName, string minimumVersion) { + public virtual RequireSettings Require(string resourceName) { if (resourceName == null) { throw new ArgumentNullException("resourceName"); } - var settings = ResourceManager.Require(ResourceType, resourceName) - .WithMinimumVersion(minimumVersion); + var settings = ResourceManager.Require(ResourceType, resourceName); if (_viewVirtualPath != null) { settings.WithBasePath(ResourceDefinition.GetBasePathFromViewPath(ResourceType, _viewVirtualPath)); } diff --git a/src/ResourceManager.txt b/src/ResourceManager.txt deleted file mode 100644 index aac62a8e0..000000000 --- a/src/ResourceManager.txt +++ /dev/null @@ -1,41 +0,0 @@ -ResourceManager Notes from Bertrand -==================================== - -x No default parameters -x Refactor to take over resource manager name -Better interface pattern for defining resources -x Script.Load API that is a view engine specific helper and that directs rendering within the using (using Idisposable pattern) to a buffer that can be rendered later. -x Script.Require returns RequireSettings and has fluent api to add stuff later. -x (.Include) When using the shortcut registration+require Script.Require("../script/foo.js") we resolve the url to an app-relative path and use that as the id. -x If you want ot define a debug version in that case, just do a proper registration. -To decide if the app is in debug mode, we look at a setting on the require, then at site setting mode and as a last resort on the compilation mode of the app. -x Merge asap, then debug, then refactor. - -Raw notes from Dave during meeting: -==================================== - Script.RequireHead("TinyMce"); - Script.RequireFoot("TinyMce", new RequireSettings { DebugMode = false }); - - Script.Require("Foo", "1.4.2", d => { - d.SetUrl("dfdf") - }); - - Script.Require("~/modules/mymodule/scripts/foo.min?.js") - Script.Require("/orchardlocal/dfdfd/foo.js") - -// x no defualt params -// better interface/pattern for defining resources -// x Script.Load (view-engine specific helper required) -// x Script.Require returns RequireSettings and has fluent api? -// x (no) Add Script.RequireHead <-- or no due to fluent api -// x Rename Localization resource manager -// x (.Include) Require w/ app relative url means inline definitin of url only, resolved url is resource name -// Site setting for debug mode true false or from web.config setting -// x Moved all copies of jquery and jquery related scripts to a single location -// Get minified versions of any external scripts that we don't currently have. -// Integrate MS ajax min to build to minify our own js and css files? - - - //using(Script.InlineTailScriptAfterEverythingElseOnThePageWithoutLambda()) { - //} -