diff --git a/src/Foundation/Features/Preview/CatalogPartialPreviewController.cs b/src/Foundation/Features/Preview/CatalogPartialPreviewController.cs new file mode 100644 index 000000000..5d81b2520 --- /dev/null +++ b/src/Foundation/Features/Preview/CatalogPartialPreviewController.cs @@ -0,0 +1,30 @@ +using System.Web.Mvc; +using EPiServer.Commerce.Catalog.ContentTypes; +using EPiServer.Core; +using EPiServer.Framework.DataAnnotations; +using EPiServer.Framework.Web.Mvc; +using EPiServer.Web.Mvc; + +namespace Foundation.Features.Preview +{ + [TemplateDescriptor( + Inherited = true, + Tags = new[] { PartialViewDisplayChannel.PartialViewDisplayChannelName }, + AvailableWithoutTag = false)] + [VisitorGroupImpersonation] + [RequireClientResources] + public class CatalogPartialPreviewController : ContentController + { + private readonly PreviewControllerHelper _previewControllerHelper; + + public CatalogPartialPreviewController(PreviewControllerHelper previewControllerHelper) + { + _previewControllerHelper = previewControllerHelper; + } + + public ActionResult Index(IContent currentContent) + { + return _previewControllerHelper.RenderResult(currentContent); + } + } +} \ No newline at end of file diff --git a/src/Foundation/Features/Preview/Index.cshtml b/src/Foundation/Features/Preview/Index.cshtml index 3b4a58e96..ad6c87bb1 100644 --- a/src/Foundation/Features/Preview/Index.cshtml +++ b/src/Foundation/Features/Preview/Index.cshtml @@ -13,13 +13,13 @@ if (area.Supported) {
- @Html.Partial("TemplateHint", string.Format(Html.TranslateFallback("/preview/heading", "The block '{0}' when displayed as '{1}'"), Model.PreviewContent.Name, Html.Translate(area.AreaName))) + @Html.Partial("TemplateHint", string.Format(Html.TranslateFallback("/preview/heading", "The content '{0}' when displayed as '{1}'"), Model.PreviewContent.Name, Html.Translate(area.AreaName))) @Html.DisplayFor(x => area.ContentArea, new { Tag = area.AreaTag })
} else { - @Html.Partial("TemplateHint", string.Format(Html.TranslateFallback("/preview/norenderer", "The block '{0}' cannot be displayed as {1}"), Model.PreviewContent.Name, area.AreaName)) + @Html.Partial("TemplateHint", string.Format(Html.TranslateFallback("/preview/norenderer", "The content '{0}' cannot be displayed as {1}"), Model.PreviewContent.Name, area.AreaName)) } } diff --git a/src/Foundation/Features/Preview/PagePartialPreviewController.cs b/src/Foundation/Features/Preview/PagePartialPreviewController.cs new file mode 100644 index 000000000..3dca86212 --- /dev/null +++ b/src/Foundation/Features/Preview/PagePartialPreviewController.cs @@ -0,0 +1,29 @@ +using System.Web.Mvc; +using EPiServer.Core; +using EPiServer.Framework.DataAnnotations; +using EPiServer.Framework.Web.Mvc; +using EPiServer.Web.Mvc; + +namespace Foundation.Features.Preview +{ + [TemplateDescriptor( + Inherited = true, + Tags = new[] { PartialViewDisplayChannel.PartialViewDisplayChannelName }, + AvailableWithoutTag = false)] + [VisitorGroupImpersonation] + [RequireClientResources] + public class PagePartialPreviewController : PageController + { + private readonly PreviewControllerHelper _previewControllerHelper; + + public PagePartialPreviewController(PreviewControllerHelper previewControllerHelper) + { + _previewControllerHelper = previewControllerHelper; + } + + public ActionResult Index(IContent currentContent) + { + return _previewControllerHelper.RenderResult(currentContent); + } + } +} \ No newline at end of file diff --git a/src/Foundation/Features/Preview/PartialViewDisplayChannel.cs b/src/Foundation/Features/Preview/PartialViewDisplayChannel.cs new file mode 100644 index 000000000..49b7948fe --- /dev/null +++ b/src/Foundation/Features/Preview/PartialViewDisplayChannel.cs @@ -0,0 +1,14 @@ +using System.Web; +using EPiServer.Web; + +namespace Foundation.Features.Preview +{ + public class PartialViewDisplayChannel : DisplayChannel + { + public const string PartialViewDisplayChannelName = "Partial View Preview"; + + public override string ChannelName => PartialViewDisplayChannelName; + + public override bool IsActive(HttpContextBase context) => false; + } +} \ No newline at end of file diff --git a/src/Foundation/Features/Preview/PreviewController.cs b/src/Foundation/Features/Preview/PreviewController.cs index 74615ccc3..0cb5f54f8 100644 --- a/src/Foundation/Features/Preview/PreviewController.cs +++ b/src/Foundation/Features/Preview/PreviewController.cs @@ -1,11 +1,8 @@ -using EPiServer; using EPiServer.Core; using EPiServer.Framework.DataAnnotations; using EPiServer.Framework.Web; using EPiServer.Web; using EPiServer.Web.Mvc; -using Foundation.Cms.Pages; -using System.Linq; using System.Web.Mvc; namespace Foundation.Features.Preview @@ -17,66 +14,16 @@ namespace Foundation.Features.Preview AvailableWithoutTag = false)] public class PreviewController : ActionControllerBase, IRenderTemplate { - private readonly IContentLoader _contentLoader; - private readonly TemplateResolver _templateResolver; - private readonly DisplayOptions _displayOptions; + private readonly PreviewControllerHelper _previewControllerHelper; - public PreviewController(IContentLoader contentLoader, TemplateResolver templateResolver, DisplayOptions displayOptions) + public PreviewController(PreviewControllerHelper previewControllerHelper) { - _contentLoader = contentLoader; - _templateResolver = templateResolver; - _displayOptions = displayOptions; + _previewControllerHelper = previewControllerHelper; } public ActionResult Index(IContent currentContent) { - //As the layout requires a page for title etc we "borrow" the start page - var startPage = _contentLoader.Get(ContentReference.StartPage); - - var model = new PreviewModel(startPage, currentContent); - - var supportedDisplayOptions = _displayOptions - .Select(x => new - { - x.Tag, - x.Name, - Supported = SupportsTag(currentContent, x.Tag) - }).ToList(); - - if (!supportedDisplayOptions.Any(x => x.Supported)) - { - return View(model); - } - foreach (var displayOption in supportedDisplayOptions) - { - var contentArea = new ContentArea(); - contentArea.Items.Add(new ContentAreaItem - { - ContentLink = currentContent.ContentLink - }); - var areaModel = new PreviewModel.PreviewArea - { - Supported = displayOption.Supported, - AreaTag = displayOption.Tag, - AreaName = displayOption.Name, - ContentArea = contentArea - }; - - model.Areas.Add(areaModel); - } - - return View(model); - } - - private bool SupportsTag(IContent content, string tag) - { - var templateModel = _templateResolver.Resolve(HttpContext, - content.GetOriginalType(), - content, - TemplateTypeCategories.MvcPartial, - tag); - - return templateModel != null; + return _previewControllerHelper.RenderResult(currentContent); } } } \ No newline at end of file diff --git a/src/Foundation/Features/Preview/PreviewControllerHelper.cs b/src/Foundation/Features/Preview/PreviewControllerHelper.cs new file mode 100644 index 000000000..beb6e6f91 --- /dev/null +++ b/src/Foundation/Features/Preview/PreviewControllerHelper.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; +using EPiServer; +using EPiServer.Core; +using EPiServer.Framework.Web; +using EPiServer.Web; +using Foundation.Cms.Pages; + +namespace Foundation.Features.Preview +{ + /// + /// Used to keep common code for the preview controllers + /// + public class PreviewControllerHelper + { + private readonly IContentLoader _contentLoader; + private readonly TemplateResolver _templateResolver; + private readonly DisplayOptions _displayOptions; + private readonly HttpContextBase _httpContext; + + public PreviewControllerHelper(IContentLoader contentLoader, TemplateResolver templateResolver, DisplayOptions displayOptions, HttpContextBase httpContext) + { + _contentLoader = contentLoader; + _templateResolver = templateResolver; + _displayOptions = displayOptions; + _httpContext = httpContext; + } + + public ActionResult RenderResult(IContent currentContent) + { + //As the layout requires a page for title etc we "borrow" the start page + var startPage = _contentLoader.Get(ContentReference.StartPage); + + var model = new PreviewModel(startPage, currentContent); + + var supportedDisplayOptions = _displayOptions + .Select(x => new + { + x.Tag, + x.Name, + Supported = SupportsTag(currentContent, x.Tag) + }).ToList(); + + if (!supportedDisplayOptions.Any(x => x.Supported)) + { + return new ViewResult + { + ViewName = "~/Features/Preview/Index.cshtml", + ViewData = { Model = model } + }; + } + foreach (var displayOption in supportedDisplayOptions) + { + var contentArea = new ContentArea(); + contentArea.Items.Add(new ContentAreaItem + { + ContentLink = currentContent.ContentLink + }); + var areaModel = new PreviewModel.PreviewArea + { + Supported = displayOption.Supported, + AreaTag = displayOption.Tag, + AreaName = displayOption.Name, + ContentArea = contentArea + }; + + model.Areas.Add(areaModel); + } + + return new ViewResult + { + ViewName = "~/Features/Preview/Index.cshtml", + ViewData = {Model = model} + }; + } + + private bool SupportsTag(IContent content, string tag) + { + var templateModel = _templateResolver.Resolve(_httpContext, + content.GetOriginalType(), + content, + TemplateTypeCategories.MvcPartial, + tag); + + return templateModel != null; + } + + } +} \ No newline at end of file diff --git a/src/Foundation/Features/Shared/Foundation/_Page.cshtml b/src/Foundation/Features/Shared/Foundation/_Page.cshtml index f60dc978c..537c06550 100644 --- a/src/Foundation/Features/Shared/Foundation/_Page.cshtml +++ b/src/Foundation/Features/Shared/Foundation/_Page.cshtml @@ -1,3 +1,5 @@ +@using EPiServer.Web +@using EPiServer.Web.Routing.Segments.Internal @using Foundation.Helpers @model FoundationPageData @@ -42,24 +44,24 @@ } }
-
+
-

@Model.PageName

+

x.PageName)>@Model.PageName

@if (!String.IsNullOrWhiteSpace(Model.TeaserText)) { -

@Model.TeaserText

+

x.TeaserText)>@Model.TeaserText

} @if (!String.IsNullOrWhiteSpace(Model.TeaserButtonText)) { - @Model.TeaserButtonText + x.TeaserButtonText)>@Model.TeaserButtonText }
@if (Model.TeaserVideo != null) { -