diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ShapeDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ShapeDriver.cs new file mode 100644 index 000000000..535c3a083 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ShapeDriver.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using Orchard.DisplayManagement; +using Orchard.Forms.Services; +using Orchard.Layouts.Elements; +using Orchard.Layouts.Framework.Display; +using Orchard.Layouts.Framework.Drivers; + +namespace Orchard.Layouts.Drivers { + public class ShapeDriver : FormsElementDriver { + private readonly IShapeFactory _shapeFactory; + + public ShapeDriver(IFormManager formManager, IShapeFactory shapeFactory) + : base(formManager) { + _shapeFactory = shapeFactory; + } + + protected override IEnumerable FormNames { + get { yield return "ShapeElement"; } + } + + protected override void OnDisplaying(Shape element, ElementDisplayContext context) { + if (String.IsNullOrWhiteSpace(element.ShapeType)) + return; + + var shape = _shapeFactory.Create(element.ShapeType); + context.ElementShape.Shape = shape; + } + + protected override void DescribeForm(DescribeContext context) { + context.Form("ShapeElement", shapeFactory => { + var factory = (dynamic)shapeFactory; + var form = factory.Fieldset( + Id: "ShapeElement", + _ShapeType: factory.Textbox( + Id: "shapeType", + Name: "ShapeType", + Title: T("Shape Type"), + Description: T("The shape type name to dislay."), + Classes: new[] { "text", "large", "tokenized" })); + + return form; + }); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Elements/Shape.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Elements/Shape.cs new file mode 100644 index 000000000..fbf523307 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Elements/Shape.cs @@ -0,0 +1,19 @@ +using Orchard.Layouts.Framework.Elements; +using Orchard.Layouts.Helpers; + +namespace Orchard.Layouts.Elements { + public class Shape : Element { + public override string Category { + get { return "Snippets"; } + } + + public string ShapeType { + get { return State.Get("ShapeType"); } + set { State["ShapeType"] = value; } + } + + public override bool HasEditor { + get { return true; } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj b/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj index ddc87a571..abbc0014c 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj @@ -214,6 +214,8 @@ + + @@ -387,7 +389,12 @@ - + + + + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Snippets-Shape.Design.cshtml b/src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Snippets-Shape.Design.cshtml new file mode 100644 index 000000000..84f60ed49 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Snippets-Shape.Design.cshtml @@ -0,0 +1,8 @@ +@using Orchard.Layouts.Elements +@{ + var element = (Shape) Model.Element; +} +
+ @T("Shape -") + @element.ShapeType +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Snippets-Shape.cshtml b/src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Snippets-Shape.cshtml new file mode 100644 index 000000000..08def2a8c --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Snippets-Shape.cshtml @@ -0,0 +1,10 @@ +@using Orchard.DisplayManagement.Shapes +@using Orchard.Layouts.Helpers +@{ + var tagBuilder = (OrchardTagBuilder)TagBuilderExtensions.AddCommonElementAttributes(new OrchardTagBuilder("div"), Model); +} +@if (Model.Shape != null) { + @tagBuilder.StartElement + @Display(Model.Shape) + @tagBuilder.EndElement +} \ No newline at end of file