Changed IPublishedContentStore and IPublishedMediaStore back to internal as we don't need to expose these yet. Instead have added
an UmbracoHelper property to the PluginController class which will expose any methods needed by devs to retreive media or content. Have updated UmbracoHelper with loads of new helpful methods and moved the Wrap methods to HtmlHelper extensions because this is purely to do with rendering html (have written unit tests for it too). Updated some 'library' methods to proxy calls to UmbracoHelper so we only have to maintain one set of code. Added a convenience property to UmbracoContext to return the current NiceUrlProvider so you don't have to go through the RoutingContext to get it.
This commit is contained in:
@@ -6,6 +6,7 @@ using System.Text;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Mvc.Html;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Dynamics;
|
||||
using Umbraco.Web.Mvc;
|
||||
using umbraco;
|
||||
|
||||
@@ -16,59 +17,6 @@ namespace Umbraco.Web
|
||||
/// </summary>
|
||||
public static class HtmlHelperRenderExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Used for rendering out the Form for BeginUmbracoForm
|
||||
/// </summary>
|
||||
internal class UmbracoForm : MvcForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates an UmbracoForm
|
||||
/// </summary>
|
||||
/// <param name="viewContext"></param>
|
||||
/// <param name="surfaceController"></param>
|
||||
/// <param name="surfaceAction"></param>
|
||||
/// <param name="area"></param>
|
||||
/// <param name="additionalRouteVals"></param>
|
||||
public UmbracoForm(
|
||||
ViewContext viewContext,
|
||||
string surfaceController,
|
||||
string surfaceAction,
|
||||
string area,
|
||||
object additionalRouteVals = null)
|
||||
: base(viewContext)
|
||||
{
|
||||
//need to create a params string as Base64 to put into our hidden field to use during the routes
|
||||
var surfaceRouteParams = string.Format("c={0}&a={1}&ar={2}",
|
||||
viewContext.HttpContext.Server.UrlEncode(surfaceController),
|
||||
viewContext.HttpContext.Server.UrlEncode(surfaceAction),
|
||||
area);
|
||||
|
||||
var additionalRouteValsAsQuery = additionalRouteVals.ToDictionary<object>().ToQueryString();
|
||||
if (!additionalRouteValsAsQuery.IsNullOrWhiteSpace())
|
||||
surfaceRouteParams = "&" + additionalRouteValsAsQuery;
|
||||
|
||||
_base64String = Convert.ToBase64String(Encoding.UTF8.GetBytes(surfaceRouteParams));
|
||||
|
||||
_textWriter = viewContext.Writer;
|
||||
}
|
||||
|
||||
|
||||
private bool _disposed;
|
||||
private readonly string _base64String;
|
||||
private readonly TextWriter _textWriter;
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (this._disposed)
|
||||
return;
|
||||
this._disposed = true;
|
||||
|
||||
//write out the hidden surface form routes
|
||||
_textWriter.Write("<input name='uformpostroutevals' type='hidden' value='" + _base64String + "' />");
|
||||
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
}
|
||||
|
||||
public static MvcHtmlString EditorFor<T>(this HtmlHelper htmlHelper, string templateName = "", string htmlFieldName = "", object additionalViewData = null)
|
||||
where T : new()
|
||||
@@ -108,6 +56,63 @@ namespace Umbraco.Web
|
||||
return filteredHtmlHelper.ValidationSummary(excludePropertyErrors, message, htmlAttributes);
|
||||
}
|
||||
|
||||
#region BeginUmbracoForm
|
||||
|
||||
/// <summary>
|
||||
/// Used for rendering out the Form for BeginUmbracoForm
|
||||
/// </summary>
|
||||
internal class UmbracoForm : MvcForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates an UmbracoForm
|
||||
/// </summary>
|
||||
/// <param name="viewContext"></param>
|
||||
/// <param name="surfaceController"></param>
|
||||
/// <param name="surfaceAction"></param>
|
||||
/// <param name="area"></param>
|
||||
/// <param name="additionalRouteVals"></param>
|
||||
public UmbracoForm(
|
||||
ViewContext viewContext,
|
||||
string surfaceController,
|
||||
string surfaceAction,
|
||||
string area,
|
||||
object additionalRouteVals = null)
|
||||
: base(viewContext)
|
||||
{
|
||||
//need to create a params string as Base64 to put into our hidden field to use during the routes
|
||||
var surfaceRouteParams = string.Format("c={0}&a={1}&ar={2}",
|
||||
viewContext.HttpContext.Server.UrlEncode(surfaceController),
|
||||
viewContext.HttpContext.Server.UrlEncode(surfaceAction),
|
||||
area);
|
||||
|
||||
var additionalRouteValsAsQuery = additionalRouteVals.ToDictionary<object>().ToQueryString();
|
||||
if (!additionalRouteValsAsQuery.IsNullOrWhiteSpace())
|
||||
surfaceRouteParams = "&" + additionalRouteValsAsQuery;
|
||||
|
||||
_base64String = Convert.ToBase64String(Encoding.UTF8.GetBytes(surfaceRouteParams));
|
||||
|
||||
_textWriter = viewContext.Writer;
|
||||
}
|
||||
|
||||
|
||||
private bool _disposed;
|
||||
private readonly string _base64String;
|
||||
private readonly TextWriter _textWriter;
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (this._disposed)
|
||||
return;
|
||||
this._disposed = true;
|
||||
|
||||
//write out the hidden surface form routes
|
||||
_textWriter.Write("<input name='uformpostroutevals' type='hidden' value='" + _base64String + "' />");
|
||||
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Helper method to create a new form to execute in the Umbraco request pipeline against a locally declared controller
|
||||
/// </summary>
|
||||
@@ -143,8 +148,8 @@ namespace Umbraco.Web
|
||||
/// <param name="htmlAttributes"></param>
|
||||
/// <returns></returns>
|
||||
public static MvcForm BeginUmbracoForm(this HtmlHelper html, string action, string controllerName,
|
||||
object additionalRouteVals,
|
||||
object htmlAttributes)
|
||||
object additionalRouteVals,
|
||||
object htmlAttributes)
|
||||
{
|
||||
return html.BeginUmbracoForm(action, controllerName, additionalRouteVals, htmlAttributes.ToDictionary<object>());
|
||||
}
|
||||
@@ -159,11 +164,11 @@ namespace Umbraco.Web
|
||||
/// <param name="htmlAttributes"></param>
|
||||
/// <returns></returns>
|
||||
public static MvcForm BeginUmbracoForm(this HtmlHelper html, string action, string controllerName,
|
||||
object additionalRouteVals,
|
||||
IDictionary<string, object> htmlAttributes)
|
||||
object additionalRouteVals,
|
||||
IDictionary<string, object> htmlAttributes)
|
||||
{
|
||||
Mandate.ParameterNotNullOrEmpty(action, "action");
|
||||
Mandate.ParameterNotNullOrEmpty(controllerName, "controllerName");
|
||||
Mandate.ParameterNotNullOrEmpty(controllerName, "controllerName");
|
||||
|
||||
var area = Umbraco.Core.Configuration.GlobalSettings.UmbracoMvcArea;
|
||||
return html.BeginUmbracoForm(action, controllerName, area, additionalRouteVals, htmlAttributes);
|
||||
@@ -189,9 +194,9 @@ namespace Umbraco.Web
|
||||
/// <param name="action"></param>
|
||||
/// <returns></returns>
|
||||
public static MvcForm BeginUmbracoForm<T>(this HtmlHelper html, string action)
|
||||
where T: SurfaceController
|
||||
where T : SurfaceController
|
||||
{
|
||||
return html.BeginUmbracoForm(action, typeof (T));
|
||||
return html.BeginUmbracoForm(action, typeof(T));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -203,7 +208,7 @@ namespace Umbraco.Web
|
||||
/// <param name="additionalRouteVals"></param>
|
||||
/// <returns></returns>
|
||||
public static MvcForm BeginUmbracoForm(this HtmlHelper html, string action, Type surfaceType,
|
||||
object additionalRouteVals)
|
||||
object additionalRouteVals)
|
||||
{
|
||||
return html.BeginUmbracoForm(action, surfaceType, additionalRouteVals, new Dictionary<string, object>());
|
||||
}
|
||||
@@ -219,7 +224,7 @@ namespace Umbraco.Web
|
||||
public static MvcForm BeginUmbracoForm<T>(this HtmlHelper html, string action, object additionalRouteVals)
|
||||
where T : SurfaceController
|
||||
{
|
||||
return html.BeginUmbracoForm(action, typeof (T), additionalRouteVals);
|
||||
return html.BeginUmbracoForm(action, typeof(T), additionalRouteVals);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -232,8 +237,8 @@ namespace Umbraco.Web
|
||||
/// <param name="htmlAttributes"></param>
|
||||
/// <returns></returns>
|
||||
public static MvcForm BeginUmbracoForm(this HtmlHelper html, string action, Type surfaceType,
|
||||
object additionalRouteVals,
|
||||
object htmlAttributes)
|
||||
object additionalRouteVals,
|
||||
object htmlAttributes)
|
||||
{
|
||||
return html.BeginUmbracoForm(action, surfaceType, additionalRouteVals, htmlAttributes.ToDictionary<object>());
|
||||
}
|
||||
@@ -247,12 +252,12 @@ namespace Umbraco.Web
|
||||
/// <param name="additionalRouteVals"></param>
|
||||
/// <param name="htmlAttributes"></param>
|
||||
/// <returns></returns>
|
||||
public static MvcForm BeginUmbracoForm<T>(this HtmlHelper html, string action,
|
||||
object additionalRouteVals,
|
||||
object htmlAttributes)
|
||||
where T: SurfaceController
|
||||
public static MvcForm BeginUmbracoForm<T>(this HtmlHelper html, string action,
|
||||
object additionalRouteVals,
|
||||
object htmlAttributes)
|
||||
where T : SurfaceController
|
||||
{
|
||||
return html.BeginUmbracoForm(action, typeof (T), additionalRouteVals, htmlAttributes);
|
||||
return html.BeginUmbracoForm(action, typeof(T), additionalRouteVals, htmlAttributes);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -265,9 +270,9 @@ namespace Umbraco.Web
|
||||
/// <param name="htmlAttributes"></param>
|
||||
/// <returns></returns>
|
||||
public static MvcForm BeginUmbracoForm(this HtmlHelper html, string action, Type surfaceType,
|
||||
object additionalRouteVals,
|
||||
IDictionary<string, object> htmlAttributes)
|
||||
{
|
||||
object additionalRouteVals,
|
||||
IDictionary<string, object> htmlAttributes)
|
||||
{
|
||||
Mandate.ParameterNotNullOrEmpty(action, "action");
|
||||
Mandate.ParameterNotNull(surfaceType, "surfaceType");
|
||||
|
||||
@@ -279,7 +284,7 @@ namespace Umbraco.Web
|
||||
if (!surfaceController.Metadata.AreaName.IsNullOrWhiteSpace())
|
||||
{
|
||||
//set the area to the plugin area
|
||||
area = surfaceController.Metadata.AreaName;
|
||||
area = surfaceController.Metadata.AreaName;
|
||||
}
|
||||
return html.BeginUmbracoForm(action, surfaceController.Metadata.ControllerName, area, additionalRouteVals, htmlAttributes);
|
||||
}
|
||||
@@ -293,12 +298,12 @@ namespace Umbraco.Web
|
||||
/// <param name="additionalRouteVals"></param>
|
||||
/// <param name="htmlAttributes"></param>
|
||||
/// <returns></returns>
|
||||
public static MvcForm BeginUmbracoForm<T>(this HtmlHelper html, string action,
|
||||
object additionalRouteVals,
|
||||
IDictionary<string, object> htmlAttributes)
|
||||
where T: SurfaceController
|
||||
public static MvcForm BeginUmbracoForm<T>(this HtmlHelper html, string action,
|
||||
object additionalRouteVals,
|
||||
IDictionary<string, object> htmlAttributes)
|
||||
where T : SurfaceController
|
||||
{
|
||||
return html.BeginUmbracoForm(action, typeof (T), additionalRouteVals, htmlAttributes);
|
||||
return html.BeginUmbracoForm(action, typeof(T), additionalRouteVals, htmlAttributes);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -339,13 +344,13 @@ namespace Umbraco.Web
|
||||
/// This code is pretty much the same as the underlying MVC code that writes out the form
|
||||
/// </remarks>
|
||||
private static MvcForm RenderForm(this HtmlHelper htmlHelper,
|
||||
string formAction,
|
||||
FormMethod method,
|
||||
IDictionary<string, object> htmlAttributes,
|
||||
string surfaceController,
|
||||
string surfaceAction,
|
||||
string area,
|
||||
object additionalRouteVals = null)
|
||||
string formAction,
|
||||
FormMethod method,
|
||||
IDictionary<string, object> htmlAttributes,
|
||||
string surfaceController,
|
||||
string surfaceAction,
|
||||
string area,
|
||||
object additionalRouteVals = null)
|
||||
{
|
||||
|
||||
var tagBuilder = new TagBuilder("form");
|
||||
@@ -372,6 +377,75 @@ namespace Umbraco.Web
|
||||
return theForm;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Wrap
|
||||
|
||||
public static HtmlTagWrapper Wrap(this HtmlHelper html, string tag, string innerText, params IHtmlTagWrapper[] children)
|
||||
{
|
||||
var item = html.Wrap(tag, innerText, (object)null);
|
||||
foreach (var child in children)
|
||||
{
|
||||
item.AddChild(child);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
public static HtmlTagWrapper Wrap(this HtmlHelper html, string tag, object inner, object anonymousAttributes, params IHtmlTagWrapper[] children)
|
||||
{
|
||||
string innerText = null;
|
||||
if (inner != null && inner.GetType() != typeof(DynamicNull))
|
||||
{
|
||||
innerText = string.Format("{0}", inner);
|
||||
}
|
||||
var item = html.Wrap(tag, innerText, anonymousAttributes);
|
||||
foreach (var child in children)
|
||||
{
|
||||
item.AddChild(child);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
public static HtmlTagWrapper Wrap(this HtmlHelper html, string tag, object inner)
|
||||
{
|
||||
string innerText = null;
|
||||
if (inner != null && inner.GetType() != typeof(DynamicNull))
|
||||
{
|
||||
innerText = string.Format("{0}", inner);
|
||||
}
|
||||
return html.Wrap(tag, innerText, (object)null);
|
||||
}
|
||||
|
||||
public static HtmlTagWrapper Wrap(this HtmlHelper html, string tag, string innerText, object anonymousAttributes, params IHtmlTagWrapper[] children)
|
||||
{
|
||||
var wrap = new HtmlTagWrapper(tag);
|
||||
if (anonymousAttributes != null)
|
||||
{
|
||||
wrap.ReflectAttributesFromAnonymousType(anonymousAttributes);
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(innerText))
|
||||
{
|
||||
wrap.AddChild(new HtmlTagWrapperTextNode(innerText));
|
||||
}
|
||||
foreach (var child in children)
|
||||
{
|
||||
wrap.AddChild(child);
|
||||
}
|
||||
return wrap;
|
||||
}
|
||||
|
||||
public static HtmlTagWrapper Wrap(this HtmlHelper html, bool visible, string tag, string innerText, object anonymousAttributes, params IHtmlTagWrapper[] children)
|
||||
{
|
||||
var item = html.Wrap(tag, innerText, anonymousAttributes, children);
|
||||
item.Visible = visible;
|
||||
foreach (var child in children)
|
||||
{
|
||||
item.AddChild(child);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user