From a27fc43e74b91f44416ed1a970bd4b6c96a4a814 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Mon, 3 Jun 2013 16:19:25 -0700 Subject: [PATCH] Implementing TemplateFilterForPart Allowing devs to use parts directly for settings instead of Records --HG-- branch : 1.x --- .../Handlers/TemplateFilterForPart.cs | 55 +++++++++++++++++++ src/Orchard/Orchard.Framework.csproj | 1 + 2 files changed, 56 insertions(+) create mode 100644 src/Orchard/ContentManagement/Handlers/TemplateFilterForPart.cs diff --git a/src/Orchard/ContentManagement/Handlers/TemplateFilterForPart.cs b/src/Orchard/ContentManagement/Handlers/TemplateFilterForPart.cs new file mode 100644 index 000000000..71fefa76d --- /dev/null +++ b/src/Orchard/ContentManagement/Handlers/TemplateFilterForPart.cs @@ -0,0 +1,55 @@ +using System; + +namespace Orchard.ContentManagement.Handlers { + public class TemplateFilterForPart : TemplateFilterBase where TPart : ContentPart, new() { + private readonly string _prefix; + private string _location = "Content"; + private string _position = "5"; + private readonly string _templateName; + private string _groupId; + + public TemplateFilterForPart(string prefix, string templateName) { + _prefix = prefix; + _templateName = templateName; + } + + public TemplateFilterForPart(string prefix, string templateName, string groupId) { + _prefix = prefix; + _templateName = templateName; + _groupId = groupId; + } + + public TemplateFilterForPart Location(string location) { + _location = location; + return this; + } + + public TemplateFilterForPart Position(string position) { + _position = position; + return this; + } + + public TemplateFilterForPart Group(string groupId) { + _groupId = groupId; + return this; + } + + protected override void BuildEditorShape(BuildEditorContext context, ContentPart part) { + if (!string.Equals(_groupId, context.GroupId, StringComparison.OrdinalIgnoreCase)) + return; + + var templatePart = part.As(); + var templateShape = context.New.EditorTemplate(TemplateName: _templateName, Model: templatePart, Prefix: _prefix); + context.Shape.Zones[_location].Add(templateShape, _position); + } + + protected override void UpdateEditorShape(UpdateEditorContext context, ContentPart part) { + if (!string.Equals(_groupId, context.GroupId, StringComparison.OrdinalIgnoreCase)) + return; + + var templatePart = part.As(); + context.Updater.TryUpdateModel(templatePart, _prefix, null, null); + BuildEditorShape(context, part); + } + } +} diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index 271a82547..f87d0959f 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -153,6 +153,7 @@ +