From a0be6c23dde603e9bdf0a22e4dca9f4e61596716 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Fri, 7 Nov 2014 16:34:28 -0800 Subject: [PATCH] Adding VectorGraphic element. --- .../Orchard.Layouts/Drivers/ImageDriver.cs | 6 +-- .../Drivers/VectorGraphicDriver.cs | 48 +++++++++++++++++++ .../Modules/Orchard.Layouts/Elements/Image.cs | 6 +-- .../Orchard.Layouts/Elements/VectorGraphic.cs | 19 ++++++++ .../Orchard.Layouts/Orchard.Layouts.csproj | 12 +++++ .../VectorGraphicEditorViewModel.cs | 8 ++++ .../Elements.VectorGraphic.cshtml | 22 +++++++++ .../Element-Media-VectorGraphic.Design.cshtml | 21 ++++++++ .../Views/Element-Media-VectorGraphic.cshtml | 18 +++++++ 9 files changed, 154 insertions(+), 6 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.Layouts/Drivers/VectorGraphicDriver.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Layouts/Elements/VectorGraphic.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Layouts/ViewModels/VectorGraphicEditorViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Layouts/Views/EditorTemplates/Elements.VectorGraphic.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Media-VectorGraphic.Design.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Media-VectorGraphic.cshtml diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ImageDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ImageDriver.cs index a3c3906d6..f6e3bb886 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ImageDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ImageDriver.cs @@ -22,17 +22,17 @@ namespace Orchard.Layouts.Drivers { if (context.Updater != null) { context.Updater.TryUpdateModel(viewModel, context.Prefix, null, null); - element.ImageId = ParseImageId(viewModel.ImageId); + element.MediaId = ParseImageId(viewModel.ImageId); } - var imageId = element.ImageId; + var imageId = element.MediaId; viewModel.CurrentImage = imageId != null ? GetImage(imageId.Value) : default(ImagePart); return Editor(context, editor); } protected override void OnDisplaying(Image element, ElementDisplayContext context) { - var imageId = element.ImageId; + var imageId = element.MediaId; var image = imageId != null ? GetImage(imageId.Value) : default(ImagePart); context.ElementShape.ImagePart = image; } diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/VectorGraphicDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/VectorGraphicDriver.cs new file mode 100644 index 000000000..ead11579e --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/VectorGraphicDriver.cs @@ -0,0 +1,48 @@ +using System.Linq; +using Orchard.ContentManagement; +using Orchard.Layouts.Elements; +using Orchard.Layouts.Framework.Display; +using Orchard.Layouts.Framework.Drivers; +using Orchard.Layouts.ViewModels; +using Orchard.MediaLibrary.Models; +using ContentItem = Orchard.Layouts.Elements.ContentItem; + +namespace Orchard.Layouts.Drivers { + public class VectorGraphicDriver : ElementDriver { + private readonly IContentManager _contentManager; + + public VectorGraphicDriver(IContentManager contentManager) { + _contentManager = contentManager; + } + + protected override EditorResult OnBuildEditor(VectorGraphic element, ElementEditorContext context) { + + var viewModel = new VectorGraphicEditorViewModel(); + var editor = context.ShapeFactory.EditorTemplate(TemplateName: "Elements.VectorGraphic", Model: viewModel); + + if (context.Updater != null) { + context.Updater.TryUpdateModel(viewModel, context.Prefix, null, null); + element.MediaId = ParseVectorGraphicId(viewModel.VectorGraphicId); + } + + var mediaId = element.MediaId; + viewModel.CurrentVectorGraphic = mediaId != null ? GetVectorGraphic(mediaId.Value) : default(VectorGraphicPart); + + return Editor(context, editor); + } + + protected override void OnDisplaying(VectorGraphic element, ElementDisplayContext context) { + var mediaId = element.MediaId; + var vectorGraphic = mediaId != null ? GetVectorGraphic(mediaId.Value) : default(VectorGraphicPart); + context.ElementShape.VectorGraphicPart = vectorGraphic; + } + + protected VectorGraphicPart GetVectorGraphic(int id) { + return _contentManager.Get(id, VersionOptions.Published); + } + + private static int? ParseVectorGraphicId(string imageId) { + return ContentItem.Deserialize(imageId).FirstOrDefault(); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Elements/Image.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Elements/Image.cs index 83882dd93..d9a90b8f0 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Elements/Image.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Elements/Image.cs @@ -11,9 +11,9 @@ namespace Orchard.Layouts.Elements { get { return true; } } - public int? ImageId { - get { return State.Get("ImageId").ToInt32(); } - set { State["ImageId"] = value.ToString(); } + public int? MediaId { + get { return State.Get("MediaId").ToInt32(); } + set { State["MediaId"] = value.ToString(); } } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Elements/VectorGraphic.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Elements/VectorGraphic.cs new file mode 100644 index 000000000..6c88bbc83 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Elements/VectorGraphic.cs @@ -0,0 +1,19 @@ +using Orchard.Layouts.Framework.Elements; +using Orchard.Layouts.Helpers; + +namespace Orchard.Layouts.Elements { + public class VectorGraphic : Element { + public override string Category { + get { return "Media"; } + } + + public override bool HasEditor { + get { return true; } + } + + public int? MediaId { + get { return State.Get("MediaId").ToInt32(); } + set { State["MediaId"] = value.ToString(); } + } + } +} \ 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 d66fd91eb..d0259c0af 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj @@ -214,9 +214,11 @@ + + @@ -279,6 +281,7 @@ + @@ -365,6 +368,15 @@ + + + + + + + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/ViewModels/VectorGraphicEditorViewModel.cs b/src/Orchard.Web/Modules/Orchard.Layouts/ViewModels/VectorGraphicEditorViewModel.cs new file mode 100644 index 000000000..e987a7eca --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Layouts/ViewModels/VectorGraphicEditorViewModel.cs @@ -0,0 +1,8 @@ +using Orchard.MediaLibrary.Models; + +namespace Orchard.Layouts.ViewModels { + public class VectorGraphicEditorViewModel { + public string VectorGraphicId { get; set; } + public VectorGraphicPart CurrentVectorGraphic { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Views/EditorTemplates/Elements.VectorGraphic.cshtml b/src/Orchard.Web/Modules/Orchard.Layouts/Views/EditorTemplates/Elements.VectorGraphic.cshtml new file mode 100644 index 000000000..33779a67e --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Views/EditorTemplates/Elements.VectorGraphic.cshtml @@ -0,0 +1,22 @@ +@using Orchard.ContentManagement +@model Orchard.Layouts.ViewModels.VectorGraphicEditorViewModel +@{ + var contentItems = new List(); + + if (Model.CurrentVectorGraphic != null) { + contentItems.Add(Model.CurrentVectorGraphic.ContentItem); + } +} +
+
+ @Display.MediaLibraryPicker( + Required: false, + Multiple: false, + DisplayName: T("Vector Graphic").Text, + FieldName: Html.FieldNameFor(m => m.VectorGraphicId), + ContentItems: contentItems.ToArray(), + Hint: "", + PromptOnNavigate: false, + ShowSaveWarning: false) +
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Media-VectorGraphic.Design.cshtml b/src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Media-VectorGraphic.Design.cshtml new file mode 100644 index 000000000..ec86a9ba5 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Media-VectorGraphic.Design.cshtml @@ -0,0 +1,21 @@ +@using Orchard.ContentManagement +@using Orchard.DisplayManagement.Shapes +@using Orchard.Layouts.Helpers +@using Orchard.MediaLibrary.Models +@{ + var tagBuilder = (OrchardTagBuilder)TagBuilderExtensions.AddCommonElementAttributes(new OrchardTagBuilder("img"), Model); + var vectorGraphicPart = (VectorGraphicPart)Model.VectorGraphicPart; + var mediaPart = vectorGraphicPart != null ? vectorGraphicPart.As() : default(MediaPart); + + if (mediaPart != null) { + tagBuilder.Attributes["src"] = mediaPart.MediaUrl; + tagBuilder.Attributes["alt"] = mediaPart.AlternateText; + } + else { + tagBuilder.Attributes["alt"] = T("Image not found").Text; + } +} +
+
@T("Vector Graphic")
+ @Html.Raw(tagBuilder.ToString(TagRenderMode.SelfClosing)) +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Media-VectorGraphic.cshtml b/src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Media-VectorGraphic.cshtml new file mode 100644 index 000000000..9e208b087 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Views/Element-Media-VectorGraphic.cshtml @@ -0,0 +1,18 @@ +@using Orchard.ContentManagement +@using Orchard.DisplayManagement.Shapes +@using Orchard.Layouts.Helpers +@using Orchard.MediaLibrary.Models +@{ + var tagBuilder = (OrchardTagBuilder)TagBuilderExtensions.AddCommonElementAttributes(new OrchardTagBuilder("img"), Model); + var vectorGraphicPart = (VectorGraphicPart)Model.ImagePart; + var mediaPart = vectorGraphicPart != null ? vectorGraphicPart.As() : default(MediaPart); + + if (mediaPart != null) { + tagBuilder.Attributes["src"] = Url.Content(mediaPart.MediaUrl); + tagBuilder.Attributes["alt"] = mediaPart.AlternateText; + } + else { + tagBuilder.Attributes["alt"] = T("Image not found").Text; + } +} +@Html.Raw(tagBuilder.ToString(TagRenderMode.SelfClosing)) \ No newline at end of file