diff --git a/src/Orchard.Web/Modules/Orchard.Templates/Orchard.Templates.csproj b/src/Orchard.Web/Modules/Orchard.Templates/Orchard.Templates.csproj index 04c364831..7b7bf542c 100644 --- a/src/Orchard.Web/Modules/Orchard.Templates/Orchard.Templates.csproj +++ b/src/Orchard.Web/Modules/Orchard.Templates/Orchard.Templates.csproj @@ -173,7 +173,6 @@ - @@ -191,7 +190,9 @@ - + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/src/Orchard.Web/Modules/Orchard.Templates/Services/DefaultTemplateService.cs b/src/Orchard.Web/Modules/Orchard.Templates/Services/DefaultTemplateService.cs index c6c849729..3f0159a98 100644 --- a/src/Orchard.Web/Modules/Orchard.Templates/Services/DefaultTemplateService.cs +++ b/src/Orchard.Web/Modules/Orchard.Templates/Services/DefaultTemplateService.cs @@ -1,10 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Web; -using System.Web.Mvc; using Orchard.ContentManagement; -using Orchard.DisplayManagement; using Orchard.DisplayManagement.Implementation; using Orchard.Templates.Models; @@ -13,40 +10,14 @@ namespace Orchard.Templates.Services { public const string TemplatesSignal = "Orchard.Templates"; - private readonly IShapeFactory _shapeFactory; - private readonly IDisplayHelperFactory _displayHelperFactory; - private readonly IWorkContextAccessor _workContextAccessor; private readonly IContentManager _contentManager; private readonly IEnumerable _processors; - private readonly HttpContextBase _httpContextBase; public DefaultTemplateService( - IShapeFactory shapeFactory, - IDisplayHelperFactory displayHelperFactory, - IWorkContextAccessor workContextAccessor, IContentManager contentManager, - IEnumerable processors, - HttpContextBase httpContextBase) { - _shapeFactory = shapeFactory; - _displayHelperFactory = displayHelperFactory; - _workContextAccessor = workContextAccessor; + IEnumerable processors) { _contentManager = contentManager; _processors = processors; - _httpContextBase = httpContextBase; - } - - public string ExecuteShape(string shapeType) { - return ExecuteShape(shapeType, null); - } - - public string ExecuteShape(string shapeType, INamedEnumerable parameters) { - var shape = _shapeFactory.Create(shapeType, parameters); - - var viewContext = new ViewContext { HttpContext = _httpContextBase }; - viewContext.RouteData.DataTokens["IWorkContextAccessor"] = _workContextAccessor; - var display = _displayHelperFactory.CreateHelper(viewContext, new ViewDataContainer()); - - return ((DisplayHelper)display).ShapeExecute(shape).ToString(); } public string Execute(string template, string name, string language, TModel model = default(TModel)) { @@ -62,12 +33,5 @@ namespace Orchard.Templates.Services { return _contentManager.Query(versionOptions ?? VersionOptions.Published).List(); } - private class ViewDataContainer : IViewDataContainer { - public ViewDataDictionary ViewData { get; set; } - - public ViewDataContainer() { - ViewData = new ViewDataDictionary(); - } - } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Templates/Services/ITemplateService.cs b/src/Orchard.Web/Modules/Orchard.Templates/Services/ITemplateService.cs index 04e71af00..190d2fad2 100644 --- a/src/Orchard.Web/Modules/Orchard.Templates/Services/ITemplateService.cs +++ b/src/Orchard.Web/Modules/Orchard.Templates/Services/ITemplateService.cs @@ -1,14 +1,10 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Orchard.ContentManagement; -using Orchard.DisplayManagement; using Orchard.DisplayManagement.Implementation; using Orchard.Templates.Models; namespace Orchard.Templates.Services { public interface ITemplateService : IDependency { - string ExecuteShape(string shapeType); - string ExecuteShape(string shapeType, INamedEnumerable parameters); string Execute(string template, string name, string language, TModel model = default(TModel)); string Execute(string template, string name, string language, DisplayContext context, TModel model = default(TModel)); IEnumerable GetTemplates(VersionOptions versionOptions = null); diff --git a/src/Orchard.Web/Modules/Orchard.Templates/Tests/Orchard.Templates.Tests/TemplateServiceTests.cs b/src/Orchard.Web/Modules/Orchard.Templates/Tests/Orchard.Templates.Tests/TemplateServiceTests.cs index 117729a07..24b1bb0f3 100644 --- a/src/Orchard.Web/Modules/Orchard.Templates/Tests/Orchard.Templates.Tests/TemplateServiceTests.cs +++ b/src/Orchard.Web/Modules/Orchard.Templates/Tests/Orchard.Templates.Tests/TemplateServiceTests.cs @@ -57,9 +57,9 @@ namespace Orchard.Templates.Tests { [Test] public void RenderSomething() { - var templateService = _container.Resolve(); - var result = templateService.ExecuteShape("Something"); - Assert.That(result, Is.EqualTo("
")); + //var templateService = _container.Resolve(); + //var result = templateService.ExecuteShape("Something"); + //Assert.That(result, Is.EqualTo("
")); } } } diff --git a/src/Orchard.Web/Modules/Orchard.Tokens/Orchard.Tokens.csproj b/src/Orchard.Web/Modules/Orchard.Tokens/Orchard.Tokens.csproj index adb74d206..20b7004ca 100644 --- a/src/Orchard.Web/Modules/Orchard.Tokens/Orchard.Tokens.csproj +++ b/src/Orchard.Web/Modules/Orchard.Tokens/Orchard.Tokens.csproj @@ -96,6 +96,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Templates/Tokens/ShapeTokenProvider.cs b/src/Orchard.Web/Modules/Orchard.Tokens/Providers/ShapeTokens.cs similarity index 61% rename from src/Orchard.Web/Modules/Orchard.Templates/Tokens/ShapeTokenProvider.cs rename to src/Orchard.Web/Modules/Orchard.Tokens/Providers/ShapeTokens.cs index 1146d9da2..62cd17c52 100644 --- a/src/Orchard.Web/Modules/Orchard.Templates/Tokens/ShapeTokenProvider.cs +++ b/src/Orchard.Web/Modules/Orchard.Tokens/Providers/ShapeTokens.cs @@ -1,14 +1,14 @@ using System; using Orchard.DisplayManagement; -using Orchard.Templates.Services; -using Orchard.Tokens; -namespace Orchard.Templates.Tokens { - public class ShapeTokenProvider : Component, ITokenProvider { - private readonly ITemplateService _templateService; +namespace Orchard.Tokens.Providers { + public class ShapeTokens : Component, ITokenProvider { + private readonly IShapeDisplay _shapeDisplay; + private readonly IShapeFactory _shapeFactory; - public ShapeTokenProvider(ITemplateService templateService) { - _templateService = templateService; + public ShapeTokens(IShapeDisplay shapeDisplay, IShapeFactory shapeFactory) { + _shapeDisplay = shapeDisplay; + _shapeFactory = shapeFactory; } public void Describe(DescribeContext context) { @@ -23,7 +23,8 @@ namespace Orchard.Templates.Tokens { private object TokenValue(EvaluateContext context, string shapeName, string data) { var parameters = Arguments.From(context.Data.Values, context.Data.Keys); - return _templateService.ExecuteShape(shapeName, parameters); + var shape = _shapeFactory.Create(shapeName, parameters); + return _shapeDisplay.Display(shape); } } } \ No newline at end of file diff --git a/src/Orchard/DisplayManagement/Arguments.cs b/src/Orchard/DisplayManagement/Arguments.cs index 3a24e5651..a4b67d05f 100644 --- a/src/Orchard/DisplayManagement/Arguments.cs +++ b/src/Orchard/DisplayManagement/Arguments.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Reflection; namespace Orchard.DisplayManagement { public static class Arguments { @@ -13,6 +14,16 @@ namespace Orchard.DisplayManagement { return new NamedEnumerable(arguments, names); } + public static INamedEnumerable From(IDictionary dictionary) { + return From(dictionary.Values, dictionary.Keys); + } + + public static INamedEnumerable From(object propertyObject) { + var properties = propertyObject.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public); + var values = properties.Select(x => x.GetGetMethod().Invoke(propertyObject, null)); + return new NamedEnumerable(values, properties.Select(x => x.Name)); + } + class NamedEnumerable : INamedEnumerable { readonly IEnumerable _arguments; readonly IEnumerable _names; diff --git a/src/Orchard/DisplayManagement/IShapeDisplay.cs b/src/Orchard/DisplayManagement/IShapeDisplay.cs new file mode 100644 index 000000000..b4c5e6c97 --- /dev/null +++ b/src/Orchard/DisplayManagement/IShapeDisplay.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; +using Orchard.DisplayManagement.Implementation; +using Orchard.DisplayManagement.Shapes; + +namespace Orchard.DisplayManagement { + public interface IShapeDisplay : IDependency { + string Display(Shape shape); + string Display(object shape); + IEnumerable Display(IEnumerable shapes); + } + + public class ShapeDisplay : IShapeDisplay { + private readonly IDisplayHelperFactory _displayHelperFactory; + private readonly IWorkContextAccessor _workContextAccessor; + private readonly HttpContextBase _httpContextBase; + + public ShapeDisplay( + IDisplayHelperFactory displayHelperFactory, + IWorkContextAccessor workContextAccessor, + HttpContextBase httpContextBase) { + _displayHelperFactory = displayHelperFactory; + _workContextAccessor = workContextAccessor; + _httpContextBase = httpContextBase; + } + + public string Display(Shape shape) { + return Display((object) shape); + } + + public string Display(object shape) { + var viewContext = new ViewContext { HttpContext = _httpContextBase }; + viewContext.RouteData.DataTokens["IWorkContextAccessor"] = _workContextAccessor; + var display = _displayHelperFactory.CreateHelper(viewContext, new ViewDataContainer()); + + return ((DisplayHelper)display).ShapeExecute(shape).ToString(); + } + + public IEnumerable Display(IEnumerable shapes) { + return shapes.Select(Display).ToArray(); + } + + private class ViewDataContainer : IViewDataContainer { + public ViewDataDictionary ViewData { get; set; } + + public ViewDataContainer() { + ViewData = new ViewDataDictionary(); + } + } + } +} diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index dae5a497e..6704c1665 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -220,6 +220,7 @@ +