Changes the Preview Index.cshtml to use a real model instead of viewdata, adds the correct razor web.config for these preview views, changes the enabled feature to be able to inject a razor view instead of strings

This commit is contained in:
Shannon
2018-03-14 13:56:49 +11:00
parent 7db4f841e3
commit 3e2fa64820
9 changed files with 41 additions and 15 deletions

View File

@@ -849,6 +849,7 @@
<Content Include="Umbraco\Views\Preview\Radius.cshtml" />
<Content Include="Umbraco\Views\Preview\Shadow.cshtml" />
<Content Include="Umbraco\Views\Preview\Slider.cshtml" />
<Content Include="Umbraco\Views\Preview\web.config" />
<None Include="Web.Debug.config.transformed" />
<None Include="web.Template.Debug.config">
<DependentUpon>Web.Template.config</DependentUpon>

View File

@@ -1,8 +1,5 @@
@inherits System.Web.Mvc.WebViewPage
@{
var disableDevicePreview = ViewData["DisableDevicePreview"].ToString().ToLowerInvariant();
var extendPreviewHtml = ViewData["ExtendPreviewHtml"] != null ? ViewData["ExtendPreviewHtml"].ToString() : null;
}
@inherits System.Web.Mvc.WebViewPage<Umbraco.Web.Models.ContentEditing.BackOfficePreview>
<!DOCTYPE html>
<html lang="en">
<head>
@@ -12,15 +9,15 @@
<link href="../lib/jquery-ui/jquery-ui-1.10.4.custom.min.css" type="text/css" rel="stylesheet" />
</head>
<body id="canvasdesignerPanel" ng-mouseover="outlinePositionHide()" ng-class="{ leftOpen: (showStyleEditor || showPalettePicker) && !showDevicesPreview }" ng-controller="Umbraco.canvasdesignerController">
@if (extendPreviewHtml != null)
@if (string.IsNullOrWhiteSpace(Model.PreviewExtendedView) == false)
{
@Html.Raw(extendPreviewHtml)
@Html.Partial(Model.PreviewExtendedView)
}
<div class="wait" ng-show="!frameLoaded"></div>
<div id="demo-iframe-wrapper" ng-show="frameLoaded" class="{{previewDevice.css}}">
<iframe id="resultFrame" ng-src="{{pageUrl}}" frameborder="0" iframe-is-loaded></iframe>
</div>
<div class="canvasdesigner" ng-init="showDevicesPreview = true; showDevices = !@(disableDevicePreview); showPalettePicker = true" ng-mouseenter="positionSelectedHide()">
<div class="canvasdesigner" ng-init="showDevicesPreview = true; showDevices = !@Model.DisableDevicePreview; showPalettePicker = true" ng-mouseenter="positionSelectedHide()">
<div class="fix-left-menu selected">
<div class="avatar">
<img ng-src="../assets/img/application/logo.png"

View File

@@ -3,6 +3,7 @@ using System.Web.Mvc;
using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Web.Features;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Mvc;
namespace Umbraco.Web.Editors
@@ -14,11 +15,21 @@ namespace Umbraco.Web.Editors
public ActionResult Index()
{
ViewData["DisableDevicePreview"] = FeaturesResolver.Current.Features.Disabled.DevicePreview;
if (string.IsNullOrWhiteSpace(FeaturesResolver.Current.Features.Enabled.ExtendPreviewHtml) == false)
var model = new BackOfficePreview
{
ViewData["ExtendPreviewHtml"] = FeaturesResolver.Current.Features.Enabled.ExtendPreviewHtml;
DisableDevicePreview = FeaturesResolver.Current.Features.Disabled.DisableDevicePreview,
PreviewExtendedView = FeaturesResolver.Current.Features.Enabled.PreviewExtendedView
};
if (model.PreviewExtendedView.IsNullOrWhiteSpace() == false)
{
var viewEngineResult = ViewEngines.Engines.FindPartialView(ControllerContext, model.PreviewExtendedView);
if (viewEngineResult.View == null)
{
throw new InvalidOperationException("Could not find the view " + model.PreviewExtendedView + ", the following locations were searched: " + Environment.NewLine + string.Join(Environment.NewLine, viewEngineResult.SearchedLocations));
}
}
return View(GlobalSettings.Path.EnsureEndsWith('/') + "Views/Preview/" + "Index.cshtml");
}

View File

@@ -24,7 +24,7 @@ namespace Umbraco.Web.Features
/// <summary>
/// Disables the device preview feature of previewing.
/// </summary>
public bool DevicePreview { get; set; }
public bool DisableDevicePreview { get; set; }
/// <summary>
/// If true, all references to templates will be removed in the back office and routing

View File

@@ -7,8 +7,11 @@ namespace Umbraco.Web.Features
{
/// <summary>
/// This allows us to inject html into the preview function extending the view with custom data.
/// This allows us to inject a razor view into the Umbraco preview view to extend it
/// </summary>
public string ExtendPreviewHtml { get; set; }
/// <remarks>
/// This is set to a virtual path of a razor view file
/// </remarks>
public string PreviewExtendedView { get; set; }
}
}

View File

@@ -14,6 +14,7 @@ namespace Umbraco.Web.Features
public UmbracoFeatures()
{
Disabled = new DisabledFeatures();
Enabled = new EnabledFeatures();
}
/// <summary>

View File

@@ -6,6 +6,7 @@ using Umbraco.Core.Models;
namespace Umbraco.Web.Models.ContentEditing
{
[DataContract(Name = "auditLog", Namespace = "")]
public class AuditLog
{
@@ -31,4 +32,4 @@ namespace Umbraco.Web.Models.ContentEditing
[DataMember(Name = "comment")]
public string Comment { get; set; }
}
}
}

View File

@@ -0,0 +1,11 @@
namespace Umbraco.Web.Models.ContentEditing
{
/// <summary>
/// The model representing Previewing of a content item from the back office
/// </summary>
public class BackOfficePreview
{
public string PreviewExtendedView { get; set; }
public bool DisableDevicePreview { get; set; }
}
}

View File

@@ -334,6 +334,7 @@
<Compile Include="Editors\TourController.cs" />
<Compile Include="Features\EnabledFeatures.cs" />
<Compile Include="Models\BackOfficeTourFilter.cs" />
<Compile Include="Models\ContentEditing\BackOfficePreview.cs" />
<Compile Include="Models\Mapping\AutoMapperExtensions.cs" />
<Compile Include="Models\Mapping\ContentTreeNodeUrlResolver.cs" />
<Compile Include="Models\Mapping\MemberTreeNodeUrlResolver.cs" />