diff --git a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs
index 14e8e7ece4..68df221c68 100644
--- a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs
+++ b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs
@@ -9,6 +9,7 @@ using System.Web.Mvc.Html;
using System.Web.Routing;
using Umbraco.Core;
using Umbraco.Core.Dynamics;
+using Umbraco.Core.IO;
using Umbraco.Web.Mvc;
using umbraco;
using umbraco.cms.businesslogic.member;
@@ -20,6 +21,30 @@ namespace Umbraco.Web
///
public static class HtmlHelperRenderExtensions
{
+ ///
+ /// Will render the preview badge when in preview mode which is not required ever unless the MVC page you are
+ /// using does not inherit from UmbracoTemplatePage
+ ///
+ ///
+ ///
+ ///
+ /// See: http://issues.umbraco.org/issue/U4-1614
+ ///
+ public static MvcHtmlString PreviewBadge(this HtmlHelper helper)
+ {
+ if (UmbracoContext.Current.InPreviewMode)
+ {
+ var htmlBadge =
+ String.Format(UmbracoSettings.PreviewBadge,
+ IOHelper.ResolveUrl(SystemDirectories.Umbraco),
+ IOHelper.ResolveUrl(SystemDirectories.UmbracoClient),
+ UmbracoContext.Current.HttpContext.Server.UrlEncode(UmbracoContext.Current.HttpContext.Request.Path));
+ return new MvcHtmlString(htmlBadge);
+ }
+ return new MvcHtmlString("");
+
+ }
+
public static IHtmlString CachedPartial(
this HtmlHelper htmlHelper,
string partialViewName,
diff --git a/src/Umbraco.Web/Mvc/UmbracoTemplatePage.cs b/src/Umbraco.Web/Mvc/UmbracoTemplatePage.cs
index 962fba50be..5f762b430e 100644
--- a/src/Umbraco.Web/Mvc/UmbracoTemplatePage.cs
+++ b/src/Umbraco.Web/Mvc/UmbracoTemplatePage.cs
@@ -1,5 +1,10 @@
+using System;
+using Umbraco.Core;
+using Umbraco.Core.Configuration;
using Umbraco.Core.Dictionary;
using Umbraco.Core.Dynamics;
+using Umbraco.Core.IO;
+using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Web.Models;
@@ -60,5 +65,33 @@ namespace Umbraco.Web.Mvc
get { return _helper ?? (_helper = new UmbracoHelper(UmbracoContext, Model.Content)); }
}
+ ///
+ /// This will detect the end /body tag and insert the preview badge if in preview mode
+ ///
+ ///
+ public override void WriteLiteral(object value)
+ {
+ // filter / add preview banner
+ if (Response.ContentType.InvariantEquals("text/html") && UmbracoContext.Current.InPreviewMode) // ASP.NET default value
+ {
+ var text = value.ToString().ToLowerInvariant();
+ int pos = text.IndexOf("