Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/Foundation/Features/Preview/CatalogPartialPreviewController.cs
Original file line number Diff line number Diff line change
@@ -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<CatalogContentBase>
{
private readonly PreviewControllerHelper _previewControllerHelper;

public CatalogPartialPreviewController(PreviewControllerHelper previewControllerHelper)
{
_previewControllerHelper = previewControllerHelper;
}

public ActionResult Index(IContent currentContent)
{
return _previewControllerHelper.RenderResult(currentContent);
}
}
}
4 changes: 2 additions & 2 deletions src/Foundation/Features/Preview/Index.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
if (area.Supported)
{
<div class="clearfix" style="margin-bottom: 25px">
@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 })
</div>
}
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))
}
}

Expand Down
29 changes: 29 additions & 0 deletions src/Foundation/Features/Preview/PagePartialPreviewController.cs
Original file line number Diff line number Diff line change
@@ -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<PageData>
{
private readonly PreviewControllerHelper _previewControllerHelper;

public PagePartialPreviewController(PreviewControllerHelper previewControllerHelper)
{
_previewControllerHelper = previewControllerHelper;
}

public ActionResult Index(IContent currentContent)
{
return _previewControllerHelper.RenderResult(currentContent);
}
}
}
14 changes: 14 additions & 0 deletions src/Foundation/Features/Preview/PartialViewDisplayChannel.cs
Original file line number Diff line number Diff line change
@@ -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;
}
}
61 changes: 4 additions & 57 deletions src/Foundation/Features/Preview/PreviewController.cs
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -17,66 +14,16 @@ namespace Foundation.Features.Preview
AvailableWithoutTag = false)]
public class PreviewController : ActionControllerBase, IRenderTemplate<BlockData>
{
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<CmsHomePage>(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);
}
}
}
92 changes: 92 additions & 0 deletions src/Foundation/Features/Preview/PreviewControllerHelper.cs
Original file line number Diff line number Diff line change
@@ -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
{
/// <summary>
/// Used to keep common code for the preview controllers
/// </summary>
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<CmsHomePage>(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;
}

}
}
12 changes: 7 additions & 5 deletions src/Foundation/Features/Shared/Foundation/_Page.cshtml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@using EPiServer.Web
@using EPiServer.Web.Routing.Segments.Internal
@using Foundation.Helpers
@model FoundationPageData

Expand Down Expand Up @@ -42,24 +44,24 @@
}
}
<div class="@Model.Padding @Model.Margin">
<div class="teaser @Model.ThemeCssClass @Model.AlignmentCssClass @(Model.ApplyHoverEffect ? "teaser--hover-effect" : "teaser--show-details")" style="@teaserRatio">
<div class="teaser @Model.ThemeCssClass @Model.AlignmentCssClass @(Model.ApplyHoverEffect && RequestSegmentContext.CurrentContextMode != ContextMode.Edit ? "teaser--hover-effect" : "teaser--show-details")" style="@teaserRatio">
<div class="teaser-text @textStyle">
<h2>@Model.PageName</h2>
<h2 @Html.EditAttributes(x => x.PageName)>@Model.PageName</h2>
<div class="teaser-text__details">
@if (!String.IsNullOrWhiteSpace(Model.TeaserText))
{
<p>@Model.TeaserText</p>
<p @Html.EditAttributes(x => x.TeaserText)>@Model.TeaserText</p>
}
@if (!String.IsNullOrWhiteSpace(Model.TeaserButtonText))
{
<a class="@Model.TeaserButtonStyle" href="@Url.ContentUrl(Model.ContentLink)">@Model.TeaserButtonText</a>
<a class="@Model.TeaserButtonStyle" href="@Url.ContentUrl(Model.ContentLink)" @Html.EditAttributes(x => x.TeaserButtonText)>@Model.TeaserButtonText</a>
}
</div>
</div>
<div class="teaser-image" style="background-image: url('@Url.WebPFallbackImageUrl(Model.PageImage, 1440, null)'">
@if (Model.TeaserVideo != null)
{
<video class="teaser-video" autoplay loop playsinline muted>
<video class="teaser-video" autoplay loop playsinline muted @Html.EditAttributes(x => x.TeaserVideo)>
<source src="@Url.ContentUrl(Model.TeaserVideo)" type="video/mp4">
</video>
}
Expand Down
2 changes: 1 addition & 1 deletion src/Foundation/Features/Shared/Foundation/_Product.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
}
</a>
<div class="product-tile__title">
<a href="@Model.Url">@Model.DisplayName</a>
<a href="@Model.Url" @Html.EditAttributes(x => x.DisplayName)>@Model.DisplayName</a>
@if (Model.DiscountedPrice != Model.PlacedPrice)
{
<span class="price__old">@Model.PlacedPrice.ToString()</span>
Expand Down
4 changes: 4 additions & 0 deletions src/Foundation/Foundation.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -899,7 +899,11 @@
<Compile Include="Features\Blog\BlogItem\BlogItemController.cs" />
<Compile Include="Features\Blog\BlogListPage\BlogListPageController.cs" />
<Compile Include="Features\Collection\CollectionPageController.cs" />
<Compile Include="Features\Preview\PartialViewDisplayChannel.cs" />
<Compile Include="Features\Preview\PagePartialPreviewController.cs" />
<Compile Include="Features\Preview\CatalogPartialPreviewController.cs" />
<Compile Include="Features\Pages\CommunityPage\CommunittyPageController.cs" />
<Compile Include="Features\Preview\PreviewControllerHelper.cs" />
<Compile Include="Infrastructure\PostClickInterceptor.cs" />
<Compile Include="Features\CatalogContent\CatalogContentControllerBase.cs" />
<Compile Include="Features\CatalogContent\Variation\VariationController.cs" />
Expand Down
4 changes: 2 additions & 2 deletions src/Foundation/lang/Foundation.Core_EN.xml
Original file line number Diff line number Diff line change
Expand Up @@ -891,8 +891,8 @@
</Label>
</ProductRecommendations>
<preview>
<heading>The block '{0}' when displayed as '{1}'</heading>
<norenderer>The block '{0}' cannot be displayed as {1}</norenderer>
<heading>The content '{0}' when displayed as '{1}'</heading>
<norenderer>The content '{0}' cannot be displayed as {1}</norenderer>
<norendereratall>No renderer found for '{0}'</norendereratall>
</preview>
<Blog>
Expand Down