Update: Use Generics for Compiled View

Also standardize inclusion of StyleSheets/Scripts for Plugin Resources
This commit is contained in:
Gary Sharp
2013-10-21 20:05:33 +11:00
parent 4dfe9ad086
commit 401ae029f1
10 changed files with 92 additions and 36 deletions
@@ -13,18 +13,18 @@ namespace Disco.Services.Plugins.Features.UIExtension.Results
public class PluginResourceCssResult : UIExtensionResult
{
private string _resource;
private HtmlString _resourceUrl;
private string _resourceUrl;
public PluginResourceCssResult(PluginFeatureManifest Source, string Resource)
: base(Source)
{
this._resource = Resource;
this._resourceUrl = new HtmlString(Source.PluginManifest.WebResourceUrl(Resource));
this._resourceUrl = Source.PluginManifest.WebResourceUrl(Resource);
var deferredBundles = HttpContext.Current.Items[Bundle.UIExtensionCssKey] as List<HtmlString>;
var deferredBundles = HttpContext.Current.Items[Bundle.UIExtensionCssKey] as List<string>;
if (deferredBundles == null)
{
deferredBundles = new List<HtmlString>();
deferredBundles = new List<string>();
HttpContext.Current.Items[Bundle.UIExtensionCssKey] = deferredBundles;
}
if (!deferredBundles.Contains(this._resourceUrl))
@@ -11,22 +11,22 @@ namespace Disco.Services.Plugins.Features.UIExtension.Results
public class PluginResourceScriptResult : UIExtensionResult
{
private string _resource;
private HtmlString _resourceUrl;
private string _resourceUrl;
private bool _placeInPageHead;
public PluginResourceScriptResult(PluginFeatureManifest Source, string Resource, bool PlaceInPageHead)
: base(Source)
{
this._resource = Resource;
this._resourceUrl = new HtmlString(Source.PluginManifest.WebResourceUrl(Resource));
this._resourceUrl = Source.PluginManifest.WebResourceUrl(Resource);
this._placeInPageHead = PlaceInPageHead;
if (this._placeInPageHead)
{
var deferredBundles = HttpContext.Current.Items[Bundle.UIExtensionScriptsKey] as List<HtmlString>;
var deferredBundles = HttpContext.Current.Items[Bundle.UIExtensionScriptsKey] as List<string>;
if (deferredBundles == null)
{
deferredBundles = new List<HtmlString>();
deferredBundles = new List<string>();
HttpContext.Current.Items[Bundle.UIExtensionScriptsKey] = deferredBundles;
}
if (!deferredBundles.Contains(this._resourceUrl))
@@ -12,8 +12,27 @@ namespace Disco.Services.Plugins.Features.UIExtension
[PluginFeatureCategory(DisplayName = "User Interface Extensions")]
public abstract class UIExtensionFeature<UIModel> : PluginFeature where UIModel : BaseUIModel
{
public ControllerContext Context { get; set; }
public abstract UIExtensionResult ExecuteAction(ControllerContext context, UIModel model);
#region Bundles
public void IncludeStyleSheet(string Resource)
{
if (this.Context == null)
throw new NullReferenceException("This method can only be called when a Context is available");
this.Context.HttpContext.IncludeStyleSheetResource(Resource, this.Manifest.PluginManifest);
}
public void IncludeScript(string Resource)
{
if (this.Context == null)
throw new NullReferenceException("This method can only be called when a Context is available");
this.Context.HttpContext.IncludeScriptResource(Resource, this.Manifest.PluginManifest);
}
#endregion
#region ActionResults
protected LiteralResult Literal(string Content)
@@ -40,10 +59,15 @@ namespace Disco.Services.Plugins.Features.UIExtension
{
return new MultipleResult(this.Manifest, Results);
}
[Obsolete("Use: PartialCompiled<ViewType>(dynamic Model)")]
protected PrecompiledPartialViewResult Partial(Type PartialViewType, object Model = null)
{
return new PrecompiledPartialViewResult(this.Manifest, PartialViewType, Model);
}
protected PrecompiledPartialViewResult PartialCompiled<ViewType>(dynamic Model = null) where ViewType : WebViewPage
{
return new PrecompiledPartialViewResult(this.Manifest, typeof(ViewType), Model);
}
#endregion
@@ -46,6 +46,7 @@ namespace Disco.Services.Plugins.Features.UIExtension
{
using (var uiExtInstance = uiExt.CreateInstance<UIExtensionFeature<UIModel>>())
{
uiExtInstance.Context = context;
uiExtResults.Enqueue(uiExtInstance.ExecuteAction(context, model));
}
}