diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Drivers/VectorGraphicPartDriver.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Drivers/VectorGraphicPartDriver.cs new file mode 100644 index 000000000..fee461bbb --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Drivers/VectorGraphicPartDriver.cs @@ -0,0 +1,16 @@ +using Orchard.ContentManagement.Drivers; +using Orchard.MediaLibrary.Models; + +namespace Orchard.MediaLibrary.Drivers { + public class VectorGraphicPartDriver : ContentPartDriver { + + protected override DriverResult Display(VectorGraphicPart part, string displayType, dynamic shapeHelper) { + return Combined( + ContentShape("Parts_VectorGraphic_Metadata", () => shapeHelper.Parts_VectorGraphic_Metadata()), + ContentShape("Parts_VectorGraphic_Summary", () => shapeHelper.Parts_VectorGraphic_Summary()), + ContentShape("Parts_VectorGraphic", () => shapeHelper.Parts_VectorGraphic()), + ContentShape("Parts_VectorGraphic_SummaryAdmin", () => shapeHelper.Parts_VectorGraphic_SummaryAdmin()) + ); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Factories/VectorGraphicFactory.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Factories/VectorGraphicFactory.cs new file mode 100644 index 000000000..968b4d878 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Factories/VectorGraphicFactory.cs @@ -0,0 +1,66 @@ +using System; +using System.IO; +using System.Linq; +using Orchard.ContentManagement; +using Orchard.ContentManagement.MetaData; +using Orchard.MediaLibrary.Models; + +namespace Orchard.MediaLibrary.Factories { + + public class VectorGraphicFactorySelector : IMediaFactorySelector { + private readonly IContentManager _contentManager; + private readonly IContentDefinitionManager _contentDefinitionManager; + + public VectorGraphicFactorySelector(IContentManager contentManager, IContentDefinitionManager contentDefinitionManager) { + _contentManager = contentManager; + _contentDefinitionManager = contentDefinitionManager; + } + + + public MediaFactorySelectorResult GetMediaFactory(Stream stream, string mimeType, string contentType) { + if (!mimeType.StartsWith("image/svg")) { + return null; + } + + if (!String.IsNullOrEmpty(contentType)) { + var contentDefinition = _contentDefinitionManager.GetTypeDefinition(contentType); + if (contentDefinition == null || contentDefinition.Parts.All(x => x.PartDefinition.Name != typeof(VectorGraphicPart).Name)) { + return null; + } + } + + return new MediaFactorySelectorResult { + Priority = -5, + MediaFactory = new VectorGraphicFactory(_contentManager) + }; + + } + } + + public class VectorGraphicFactory : IMediaFactory { + private readonly IContentManager _contentManager; + + public VectorGraphicFactory(IContentManager contentManager) { + _contentManager = contentManager; + } + + public MediaPart CreateMedia(Stream stream, string path, string mimeType, string contentType) { + if (String.IsNullOrEmpty(contentType)) { + contentType = "VectorGraphic"; + } + + var part = _contentManager.New(contentType); + + part.LogicalType = "VectorGraphic"; + part.MimeType = mimeType; + part.Title = Path.GetFileNameWithoutExtension(path); + + var imagePart = part.As(); + if (imagePart == null) { + return null; + } + + return part; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Migrations.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Migrations.cs index 5ee991407..e0b944bac 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Migrations.cs @@ -30,6 +30,11 @@ namespace Orchard.MediaLibrary { .WithDescription("Provides common metadata for an Image Media.") ); + ContentDefinitionManager.AlterPartDefinition("VectorGraphicPart", part => part + .Attachable() + .WithDescription("Provides common metadata for a Vector Graphic Media.") + ); + ContentDefinitionManager.AlterPartDefinition("VideoPart", part => part .Attachable() .WithDescription("Provides common metadata for a Video Media.") @@ -61,6 +66,17 @@ namespace Orchard.MediaLibrary { .WithPart("TitlePart") ); + ContentDefinitionManager.AlterTypeDefinition("VectorGraphic", td => td + .DisplayedAs("Vector Graphic") + .WithSetting("Stereotype", "Media") + .WithSetting("MediaFileNameEditorSettings.ShowFileNameEditor", "True") + .WithPart("IdentityPart") + .WithPart("CommonPart") + .WithPart("MediaPart") + .WithPart("VectorGraphicPart") + .WithPart("TitlePart") + ); + ContentDefinitionManager.AlterTypeDefinition("Video", td => td .DisplayedAs("Video") .WithSetting("Stereotype", "Media") @@ -104,7 +120,7 @@ namespace Orchard.MediaLibrary { .WithPart("TitlePart") ); - return 6; + return 7; } public int UpdateFrom2() { @@ -164,7 +180,7 @@ namespace Orchard.MediaLibrary { return 4; } - + public int UpdateFrom4() { SchemaBuilder.AlterTable("MediaPartRecord", t => t @@ -193,5 +209,25 @@ namespace Orchard.MediaLibrary { return 6; } + + public int UpdateFrom6() { + ContentDefinitionManager.AlterPartDefinition("VectorGraphicPart", part => part + .Attachable() + .WithDescription("Provides common metadata for a Vector Graphic Media.") + ); + + ContentDefinitionManager.AlterTypeDefinition("VectorGraphic", td => td + .DisplayedAs("Vector Graphic") + .WithSetting("Stereotype", "Media") + .WithSetting("MediaFileNameEditorSettings.ShowFileNameEditor", "True") + .WithPart("IdentityPart") + .WithPart("CommonPart") + .WithPart("MediaPart") + .WithPart("VectorGraphicPart") + .WithPart("TitlePart") + ); + + return 7; + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Models/VectorGraphicPart.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Models/VectorGraphicPart.cs new file mode 100644 index 000000000..b3005eea8 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Models/VectorGraphicPart.cs @@ -0,0 +1,6 @@ +using Orchard.ContentManagement; + +namespace Orchard.MediaLibrary.Models { + public class VectorGraphicPart : ContentPart { + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj index 112e9e807..d2c8d9850 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj @@ -104,6 +104,9 @@ + + + @@ -360,6 +363,21 @@ + + + + + + + + + + + + + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Media-VectorGraphic.Thumbnail.cshtml b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Media-VectorGraphic.Thumbnail.cshtml new file mode 100644 index 000000000..29166554d --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Media-VectorGraphic.Thumbnail.cshtml @@ -0,0 +1,14 @@ +@using Orchard.ContentManagement +@using Orchard.MediaLibrary.Models +@using Orchard.Utility.Extensions +@model dynamic + +@{ + ContentItem contentItem = Model.ContentItem; + var media = contentItem.As(); + var vectorGraphic = contentItem.As(); +} + +
+ @media.AlternateText +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Parts/VectorGraphic.Metadata.cshtml b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Parts/VectorGraphic.Metadata.cshtml new file mode 100644 index 000000000..a7d84d6bf --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Parts/VectorGraphic.Metadata.cshtml @@ -0,0 +1,4 @@ +@using Orchard.MediaLibrary.Models +@{ + VectorGraphicPart vectorGraphicPart = Model.ContentPart; +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Parts/VectorGraphic.Summary.cshtml b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Parts/VectorGraphic.Summary.cshtml new file mode 100644 index 000000000..5d3d680d5 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Parts/VectorGraphic.Summary.cshtml @@ -0,0 +1,11 @@ +@using Orchard.ContentManagement +@using Orchard.MediaLibrary.Models +@{ + VectorGraphicPart vectorGraphicPart = Model.ContentPart; + var mediaPart = ((ContentItem)Model.ContentItem).As(); +} + +@* Use a 200x200 profile in order to reuse the general thumbnail *@ + + @mediaPart.AlternateText + \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Parts/VectorGraphic.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Parts/VectorGraphic.SummaryAdmin.cshtml new file mode 100644 index 000000000..5c134c59f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Parts/VectorGraphic.SummaryAdmin.cshtml @@ -0,0 +1,9 @@ +@using Orchard.ContentManagement +@using Orchard.MediaLibrary.Models +@{ + VectorGraphicPart vectorGraphicPart = Model.ContentPart; + var mediaPart = ((ContentItem) Model.ContentItem).As(); +} + +@* Use a 200x200 profile in order to reuse the general thumbnail *@ +@mediaPart.AlternateText \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Parts/VectorGraphic.cshtml b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Parts/VectorGraphic.cshtml new file mode 100644 index 000000000..c5ed65e70 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Parts/VectorGraphic.cshtml @@ -0,0 +1,7 @@ +@using Orchard.ContentManagement +@using Orchard.MediaLibrary.Models +@{ + VectorGraphicPart vectorGraphicPart = Model.ContentPart; + var mediaPart = ((ContentItem)Model.ContentItem).As(); +} +@mediaPart.AlternateText \ No newline at end of file