feature: update expression browser and add plugin expression extensions

This commit is contained in:
Gary Sharp committed 2025-01-16 12:36:01 +11:00
1 parent 963970feeb
commit a3e1e1d030
23 files changed
+651 -554

No files matched your search

+1 -1
View File
@@ -191,7 +191,7 @@
<Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateBulkGenerate.cs" /> <Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateBulkGenerate.cs" />
<Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateCreatePackageModel.cs" /> <Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateCreatePackageModel.cs" />
<Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateCreateModel.cs" /> <Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateCreateModel.cs" />
<Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateExpressionBrowserModel.cs" /> <Compile Include="UI\Config\Expressions\ConfigExpressionsBrowserModel.cs" />
<Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateImportStatusModel.cs" /> <Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateImportStatusModel.cs" />
<Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateIndexModel.cs" /> <Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateIndexModel.cs" />
<Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateShowPackageModel.cs" /> <Compile Include="UI\Config\DocumentTemplate\ConfigDocumentTemplateShowPackageModel.cs" />
@@ -1,8 +1,8 @@
using System.Collections.Generic; using System.Collections.Generic;
namespace Disco.Models.UI.Config.DocumentTemplate namespace Disco.Models.UI.Config.Expressions
{ {
public interface ConfigDocumentTemplateExpressionBrowserModel : BaseUIModel public interface ConfigExpressionsBrowserModel : BaseUIModel
{ {
string DeviceType { get; set; } string DeviceType { get; set; }
string UserType { get; set; } string UserType { get; set; }
@@ -10,5 +10,6 @@ namespace Disco.Models.UI.Config.DocumentTemplate
Dictionary<string, string> Variables { get; set; } Dictionary<string, string> Variables { get; set; }
Dictionary<string, string> ExtensionLibraries { get; set; } Dictionary<string, string> ExtensionLibraries { get; set; }
Dictionary<string, string> PluginExtensionLibraries { get; set; }
} }
} }
+2
View File
@@ -531,6 +531,8 @@
<Compile Include="Plugins\Features\DetailsProvider\DetailsProviderService.cs" /> <Compile Include="Plugins\Features\DetailsProvider\DetailsProviderService.cs" />
<Compile Include="Plugins\Features\DetailsProvider\UserContactFeature.cs" /> <Compile Include="Plugins\Features\DetailsProvider\UserContactFeature.cs" />
<Compile Include="Plugins\Features\DocumentHandlerProvider\DocumentHandlerProviderFeature.cs" /> <Compile Include="Plugins\Features\DocumentHandlerProvider\DocumentHandlerProviderFeature.cs" />
<Compile Include="Plugins\Features\ExpressionExtensionProvider\ExpressionExtensionProviderFeature.cs" />
<Compile Include="Plugins\Features\ExpressionExtensionProvider\ExpressionExtensionRegistration.cs" />
<Compile Include="Plugins\Features\InsuranceProvider\InsuranceProviderFeature.cs" /> <Compile Include="Plugins\Features\InsuranceProvider\InsuranceProviderFeature.cs" />
<Compile Include="Plugins\Features\InsuranceProvider\InsuranceProviderSubmitJobException.cs" /> <Compile Include="Plugins\Features\InsuranceProvider\InsuranceProviderSubmitJobException.cs" />
<Compile Include="Plugins\Features\RepairProvider\RepairProvider2Feature.cs" /> <Compile Include="Plugins\Features\RepairProvider\RepairProvider2Feature.cs" />
@@ -5,9 +5,9 @@ namespace Disco.Services.Expressions
{ {
public class EvaluateExpressionPart : IExpressionPart public class EvaluateExpressionPart : IExpressionPart
{ {
private Spring.Expressions.IExpression _Expression; private Spring.Expressions.IExpression expression;
private RecognitionException _ExpressionParseException; private RecognitionException expressionParseException;
private EvaluateExpressionParseException _EvaluateParseException; private EvaluateExpressionParseException evaluateParseException;
public string RawSource { get; set; } public string RawSource { get; set; }
public string Source { get; set; } public string Source { get; set; }
@@ -18,18 +18,18 @@ namespace Disco.Services.Expressions
{ {
get get
{ {
if (_ExpressionParseException == null) if (expressionParseException == null)
return null; return null;
else else
if (_EvaluateParseException == null) if (evaluateParseException == null)
_EvaluateParseException = EvaluateExpressionParseException.FromRecognitionException(_ExpressionParseException, Source); evaluateParseException = EvaluateExpressionParseException.FromRecognitionException(expressionParseException, Source);
return _EvaluateParseException; return evaluateParseException;
} }
} }
public bool ParseError public bool ParseError
{ {
get { return (_ExpressionParseException != null); } get { return (expressionParseException != null); }
} }
public string ParseErrorMessage public string ParseErrorMessage
{ {
@@ -61,21 +61,21 @@ namespace Disco.Services.Expressions
} }
try try
{ {
_Expression = Spring.Expressions.Expression.Parse(this.Source); expression = Spring.Expressions.Expression.Parse(this.Source);
} }
catch (RecognitionException ex) catch (RecognitionException ex)
{ {
_ExpressionParseException = ex; expressionParseException = ex;
} }
} }
object IExpressionPart.Evaluate(object ExpressionContext, IDictionary Variables) object IExpressionPart.Evaluate(object ExpressionContext, IDictionary Variables)
{ {
if (_ExpressionParseException == null) if (expressionParseException == null)
{ {
return _Expression.GetValue(ExpressionContext, Variables); return expression.GetValue(ExpressionContext, Variables);
} }
throw _ExpressionParseException; throw expressionParseException;
} }
} }
-5
View File
@@ -73,11 +73,6 @@ namespace Disco.Services.Expressions
return result; return result;
} }
internal static IExpression Parse(string source)
{
throw new NotImplementedException();
}
public Tuple<string, bool, object> Evaluate(object ExpressionContext, IDictionary Variables) public Tuple<string, bool, object> Evaluate(object ExpressionContext, IDictionary Variables)
{ {
if (Count == 0) if (Count == 0)
@@ -11,7 +11,7 @@ namespace Disco.Services.Expressions
public string Name { get; set; } public string Name { get; set; }
public List<ExpressionTypeMemberDescriptor> Members { get; set; } public List<ExpressionTypeMemberDescriptor> Members { get; set; }
public static ExpressionTypeDescriptor Build(Type t, bool StaticDeclaredMembersOnly = true) public static ExpressionTypeDescriptor Build(Type t, bool staticMembersOnly = true)
{ {
ExpressionTypeDescriptor i = new ExpressionTypeDescriptor ExpressionTypeDescriptor i = new ExpressionTypeDescriptor
{ {
@@ -21,7 +21,7 @@ namespace Disco.Services.Expressions
i.Members = new List<ExpressionTypeMemberDescriptor>(); i.Members = new List<ExpressionTypeMemberDescriptor>();
MemberInfo[] members; MemberInfo[] members;
if (StaticDeclaredMembersOnly) if (staticMembersOnly)
members = t.GetMembers(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly); members = t.GetMembers(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);
else else
members = t.GetMembers(BindingFlags.Public | BindingFlags.Instance); members = t.GetMembers(BindingFlags.Public | BindingFlags.Instance);
@@ -46,10 +46,7 @@ namespace Disco.Services.Expressions
} }
} }
} }
i.Members = ( i.Members = i.Members.OrderBy(m => m.Name).ToList();
from mi in i.Members
orderby mi.Name
select mi).ToList();
return i; return i;
} }
} }
@@ -0,0 +1,40 @@
using Spring.Core.TypeResolution;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace Disco.Services.Plugins.Features.ExpressionExtensionProvider
{
[PluginFeatureCategory(DisplayName = "Expression Extension")]
public abstract class ExpressionExtensionProviderFeature : PluginFeature
{
private static readonly Dictionary<string, ExpressionExtensionRegistration> registrations = new Dictionary<string, ExpressionExtensionRegistration>(StringComparer.OrdinalIgnoreCase);
private static readonly Dictionary<string, Assembly> pluginAssemblies = new Dictionary<string, Assembly>(StringComparer.OrdinalIgnoreCase);
public void RegisterExpressionExtension(string alias, Type extensionType)
{
if (!extensionType.IsClass || !extensionType.IsAbstract || !extensionType.IsSealed)
throw new ArgumentException("Expression Extension Types must be a static class", nameof(extensionType));
lock (registrations)
{
registrations.Add(alias, new ExpressionExtensionRegistration(Manifest, alias, extensionType));
var assemblyName = extensionType.Assembly.FullName.Substring(0, extensionType.Assembly.FullName.IndexOf(','));
pluginAssemblies[assemblyName] = extensionType.Assembly;
TypeRegistry.RegisterType(alias, extensionType);
}
}
public static List<ExpressionExtensionRegistration> GetExpressionExtensionRegistrations()
{
lock (registrations)
{
return registrations.Values.ToList();
}
}
public static bool TryGetExtensionAssembly(string assemblyName, out Assembly assembly)
=> pluginAssemblies.TryGetValue(assemblyName, out assembly);
}
}
@@ -0,0 +1,18 @@
using System;
namespace Disco.Services.Plugins.Features.ExpressionExtensionProvider
{
public class ExpressionExtensionRegistration
{
public PluginFeatureManifest FeatureManifest { get; }
public string Alias { get; }
public Type ExtensionType { get; }
public ExpressionExtensionRegistration(PluginFeatureManifest featureManifest, string alias, Type extensionType)
{
FeatureManifest = featureManifest;
Alias = alias;
ExtensionType = extensionType;
}
}
}
@@ -1,17 +1,46 @@
using Disco.Services.Authorization; using Disco.Services.Authorization;
using Disco.Services.Expressions; using Disco.Services.Expressions;
using Disco.Services.Plugins.Features.ExpressionExtensionProvider;
using Disco.Services.Web; using Disco.Services.Web;
using System;
using System.Web.Compilation;
using System.Web.Mvc; using System.Web.Mvc;
namespace Disco.Web.Areas.API.Controllers namespace Disco.Web.Areas.API.Controllers
{ {
[DiscoAuthorize(Claims.DiscoAdminAccount)]
public partial class ExpressionsController : AuthorizedDatabaseController public partial class ExpressionsController : AuthorizedDatabaseController
{ {
[HttpPost, DiscoAuthorize(Claims.DiscoAdminAccount)]
public virtual ActionResult ValidateExpression(string Expression) public virtual ActionResult ValidateExpression(string Expression)
{ {
var part = new EvaluateExpressionPart(Expression); var part = new EvaluateExpressionPart(Expression);
return Json(Models.Expressions.ValidateExpressionModel.FromEvaluateExpressionPart(part), JsonRequestBehavior.AllowGet); return Json(Models.Expressions.ValidateExpressionModel.FromEvaluateExpressionPart(part));
}
[HttpPost, DiscoAuthorize(Claims.Config.Show), ValidateAntiForgeryToken]
public virtual ActionResult TypeDescriptor(string type, bool staticMembersOnly = false)
{
if (string.IsNullOrWhiteSpace(type))
return new HttpStatusCodeResult(400, "Type is required");
var t = Type.GetType(type, false);
if (t == null)
{
var typeNameParts = type.Split(new string[] { ", " }, StringSplitOptions.None);
if (typeNameParts.Length < 2)
return Json("Invalid Type Specified");
if (!ExpressionExtensionProviderFeature.TryGetExtensionAssembly(typeNameParts[1], out var assembly))
return Json("Invalid Type Specified");
t = assembly.GetType(typeNameParts[0]);
if (t == null)
return Json("Invalid Type Specified");
}
return Json(ExpressionTypeDescriptor.Build(t, staticMembersOnly));
} }
} }
} }
@@ -7,6 +7,7 @@ using Disco.Services.Authorization;
using Disco.Services.Documents; using Disco.Services.Documents;
using Disco.Services.Documents.ManagedGroups; using Disco.Services.Documents.ManagedGroups;
using Disco.Services.Expressions; using Disco.Services.Expressions;
using Disco.Services.Plugins.Features.ExpressionExtensionProvider;
using Disco.Services.Plugins.Features.UIExtension; using Disco.Services.Plugins.Features.UIExtension;
using Disco.Services.Web; using Disco.Services.Web;
using Disco.Web.Areas.Config.Models.DocumentTemplate; using Disco.Web.Areas.Config.Models.DocumentTemplate;
@@ -24,7 +25,7 @@ namespace Disco.Web.Areas.Config.Controllers
{ {
if (string.IsNullOrEmpty(id)) if (string.IsNullOrEmpty(id))
{ {
var m = new Models.DocumentTemplate.IndexModel() var m = new IndexModel()
{ {
DocumentTemplates = Database.DocumentTemplates DocumentTemplates = Database.DocumentTemplates
.Select(dt => new .Select(dt => new
@@ -47,7 +48,7 @@ namespace Disco.Web.Areas.Config.Controllers
else else
{ {
// Normal Document Template // Normal Document Template
var m = new Models.DocumentTemplate.ShowModel() var m = new ShowModel()
{ {
DocumentTemplate = Database.DocumentTemplates.Include("JobSubTypes").FirstOrDefault(at => at.Id == id) DocumentTemplate = Database.DocumentTemplates.Include("JobSubTypes").FirstOrDefault(at => at.Id == id)
}; };
@@ -78,7 +79,7 @@ namespace Disco.Web.Areas.Config.Controllers
public virtual ActionResult ShowPackage(string id) public virtual ActionResult ShowPackage(string id)
{ {
// Document Template Package // Document Template Package
var m = new Models.DocumentTemplate.ShowPackageModel() var m = new ShowPackageModel()
{ {
Package = DocumentTemplatePackages.GetPackage(id) Package = DocumentTemplatePackages.GetPackage(id)
}; };
@@ -104,7 +105,7 @@ namespace Disco.Web.Areas.Config.Controllers
[DiscoAuthorize(Claims.Config.DocumentTemplate.ShowStatus)] [DiscoAuthorize(Claims.Config.DocumentTemplate.ShowStatus)]
public virtual ActionResult ImportStatus() public virtual ActionResult ImportStatus()
{ {
var m = new Models.DocumentTemplate.ImportStatusModel(); var m = new ImportStatusModel();
// UI Extensions // UI Extensions
UIExtensions.ExecuteExtensions<ConfigDocumentTemplateImportStatusModel>(this.ControllerContext, m); UIExtensions.ExecuteExtensions<ConfigDocumentTemplateImportStatusModel>(this.ControllerContext, m);
@@ -115,7 +116,7 @@ namespace Disco.Web.Areas.Config.Controllers
[DiscoAuthorize(Claims.Config.DocumentTemplate.UndetectedPages)] [DiscoAuthorize(Claims.Config.DocumentTemplate.UndetectedPages)]
public virtual ActionResult UndetectedPages() public virtual ActionResult UndetectedPages()
{ {
var m = new Models.DocumentTemplate.UndetectedPagesModel() var m = new UndetectedPagesModel()
{ {
DocumentTemplates = Database.DocumentTemplates.ToList() DocumentTemplates = Database.DocumentTemplates.ToList()
}; };
@@ -129,7 +130,7 @@ namespace Disco.Web.Areas.Config.Controllers
[DiscoAuthorizeAll(Claims.Config.DocumentTemplate.Create, Claims.Config.DocumentTemplate.Configure)] [DiscoAuthorizeAll(Claims.Config.DocumentTemplate.Create, Claims.Config.DocumentTemplate.Configure)]
public virtual ActionResult Create() public virtual ActionResult Create()
{ {
var m = new Models.DocumentTemplate.CreateModel(); var m = new CreateModel();
m.UpdateModel(Database); m.UpdateModel(Database);
// UI Extensions // UI Extensions
@@ -139,7 +140,7 @@ namespace Disco.Web.Areas.Config.Controllers
} }
[DiscoAuthorizeAll(Claims.Config.DocumentTemplate.Create, Claims.Config.DocumentTemplate.Configure), HttpPost] [DiscoAuthorizeAll(Claims.Config.DocumentTemplate.Create, Claims.Config.DocumentTemplate.Configure), HttpPost]
public virtual ActionResult Create(Models.DocumentTemplate.CreateModel model) public virtual ActionResult Create(CreateModel model)
{ {
model.UpdateModel(Database); model.UpdateModel(Database);
@@ -179,7 +180,7 @@ namespace Disco.Web.Areas.Config.Controllers
[DiscoAuthorizeAll(Claims.Config.DocumentTemplate.Create, Claims.Config.DocumentTemplate.Configure)] [DiscoAuthorizeAll(Claims.Config.DocumentTemplate.Create, Claims.Config.DocumentTemplate.Configure)]
public virtual ActionResult CreatePackage() public virtual ActionResult CreatePackage()
{ {
var m = new Models.DocumentTemplate.CreatePackageModel(); var m = new CreatePackageModel();
// UI Extensions // UI Extensions
UIExtensions.ExecuteExtensions<ConfigDocumentTemplateCreatePackageModel>(this.ControllerContext, m); UIExtensions.ExecuteExtensions<ConfigDocumentTemplateCreatePackageModel>(this.ControllerContext, m);
@@ -188,7 +189,7 @@ namespace Disco.Web.Areas.Config.Controllers
} }
[DiscoAuthorizeAll(Claims.Config.DocumentTemplate.Create, Claims.Config.DocumentTemplate.Configure), HttpPost] [DiscoAuthorizeAll(Claims.Config.DocumentTemplate.Create, Claims.Config.DocumentTemplate.Configure), HttpPost]
public virtual ActionResult CreatePackage(Models.DocumentTemplate.CreatePackageModel model) public virtual ActionResult CreatePackage(CreatePackageModel model)
{ {
if (ModelState.IsValid) if (ModelState.IsValid)
{ {
@@ -292,37 +293,10 @@ namespace Disco.Web.Areas.Config.Controllers
return View(MVC.Config.DocumentTemplate.Views.BulkGenerate, model); return View(MVC.Config.DocumentTemplate.Views.BulkGenerate, model);
} }
[DiscoAuthorize(Claims.Config.Show)] public virtual ActionResult ExpressionBrowser()
public virtual ActionResult ExpressionBrowser(string type, bool StaticDeclaredMembersOnly = false)
{ {
if (string.IsNullOrWhiteSpace(type)) // for backwards compatibility
{ return RedirectToAction(MVC.Config.Expressions.Browser());
var m = new Models.DocumentTemplate.ExpressionBrowserModel()
{
DeviceType = typeof(Disco.Models.Repository.Device).AssemblyQualifiedName,
JobType = typeof(Disco.Models.Repository.Job).AssemblyQualifiedName,
UserType = typeof(Disco.Models.Repository.User).AssemblyQualifiedName,
Variables = Expression.StandardVariableTypes(),
ExtensionLibraries = Expression.ExtensionLibraryTypes()
};
// UI Extensions
UIExtensions.ExecuteExtensions<ConfigDocumentTemplateExpressionBrowserModel>(this.ControllerContext, m);
return View(m);
}
else
{
var t = Type.GetType(type);
if (t != null)
{
return Json(ExpressionTypeDescriptor.Build(t, StaticDeclaredMembersOnly), JsonRequestBehavior.AllowGet);
}
else
{
return Json("Invalid Type Specified", JsonRequestBehavior.AllowGet);
}
}
} }
} }
@@ -1,24 +1,42 @@
using Disco.Services.Authorization; using Disco.Models.Repository;
using Disco.Models.UI.Config.Expressions;
using Disco.Services.Authorization;
using Disco.Services.Expressions;
using Disco.Services.Plugins.Features.ExpressionExtensionProvider;
using Disco.Services.Plugins.Features.UIExtension;
using Disco.Services.Web; using Disco.Services.Web;
using Disco.Web.Areas.Config.Models.Expressions;
using System; using System;
using System.Linq;
using System.Web.Mvc; using System.Web.Mvc;
namespace Disco.Web.Areas.Config.Controllers namespace Disco.Web.Areas.Config.Controllers
{ {
[DiscoAuthorize(Claims.DiscoAdminAccount)]
public partial class ExpressionsController : AuthorizedDatabaseController public partial class ExpressionsController : AuthorizedDatabaseController
{ {
// Under Construction - Not In Production [DiscoAuthorize(Claims.DiscoAdminAccount)]
public virtual ActionResult Index() public virtual ActionResult Index()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
//return View(Views.Editor, new Models.Expressions.EditorModel()
//{
// Expression = @"JobComponentsTotalCost() < 100 ? JobComponentsTotalCost().ToString('c') : '$100.00'"
//});
} }
[DiscoAuthorize(Claims.Config.Show)]
public virtual ActionResult Browser()
{
var m = new BrowserModel()
{
DeviceType = typeof(Device).AssemblyQualifiedName,
JobType = typeof(Job).AssemblyQualifiedName,
UserType = typeof(User).AssemblyQualifiedName,
Variables = Expression.StandardVariableTypes(),
ExtensionLibraries = Expression.ExtensionLibraryTypes(),
PluginExtensionLibraries = ExpressionExtensionProviderFeature.GetExpressionExtensionRegistrations().ToDictionary(r => r.Alias, r => r.ExtensionType.AssemblyQualifiedName)
};
// UI Extensions
UIExtensions.ExecuteExtensions<ConfigExpressionsBrowserModel>(ControllerContext, m);
return View(m);
}
} }
} }
@@ -1,9 +1,9 @@
using Disco.Models.UI.Config.DocumentTemplate; using Disco.Models.UI.Config.Expressions;
using System.Collections.Generic; using System.Collections.Generic;
namespace Disco.Web.Areas.Config.Models.DocumentTemplate namespace Disco.Web.Areas.Config.Models.Expressions
{ {
public class ExpressionBrowserModel : ConfigDocumentTemplateExpressionBrowserModel public class BrowserModel : ConfigExpressionsBrowserModel
{ {
public string DeviceType { get; set; } public string DeviceType { get; set; }
public string UserType { get; set; } public string UserType { get; set; }
@@ -11,5 +11,6 @@ namespace Disco.Web.Areas.Config.Models.DocumentTemplate
public Dictionary<string, string> Variables { get; set; } public Dictionary<string, string> Variables { get; set; }
public Dictionary<string, string> ExtensionLibraries { get; set; } public Dictionary<string, string> ExtensionLibraries { get; set; }
public Dictionary<string, string> PluginExtensionLibraries { get; set; }
} }
} }
@@ -1,134 +0,0 @@
@model Disco.Web.Areas.Config.Models.DocumentTemplate.ExpressionBrowserModel
@{
Authorization.Require(Claims.Config.Show);
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Document Templates", MVC.Config.DocumentTemplate.Index(null), "Expression Browser");
Html.BundleDeferred("~/Style/jQueryUI/dynatree");
Html.BundleDeferred("~/ClientScripts/Modules/jQueryUI-DynaTree");
}
<div id="configurationDocumentTemplateExpressionBrowser">
Expressions within Disco ICT are based on the <a href="http://www.springframework.net/"
target="_blank">Spring.NET Framework</a>. Please refer to the <a href="http://www.springframework.net/doc-latest/reference/html/expressions.html"
target="_blank">Expression Evaluation</a> documentation.
<h2 id="DeviceScope">
Device Scope</h2>
<div id="deviceScopeTree" class="expressionTree">
</div>
<h2 id="JobScope">
Job Scope</h2>
<div id="jobScopeTree" class="expressionTree">
</div>
<h2 id="UserScope">
User Scope</h2>
<div id="userScopeTree" class="expressionTree">
</div>
<h2 id="Variables">
Variables
</h2>
<div id="variableScopeTree" class="expressionTree">
</div>
<h2 id="ExtensionLibraries">
Extension Libraries</h2>
<div id="extScopeTree" class="expressionTree">
</div>
</div>
<script type="text/javascript">
$(function () {
if (!document.DiscoFunctions) {
document.DiscoFunctions = {};
}
var typeLib = {};
var loadTypeUrl = '@(Url.Action(MVC.Config.DocumentTemplate.ExpressionBrowser()))';
var deviceScopeTree = $('#deviceScopeTree');
var jobScopeTree = $('#jobScopeTree');
var userScopeTree = $('#userScopeTree');
var variableScopeTree = $('#variableScopeTree');
var extScopeTree = $('#extScopeTree');
var lazyLoadNode = function (node) {
if (node.data.expressionType) {
node.setLazyNodeStatus(DTNodeStatus_Loading);
loadType(node, node.data.expressionType, node.data.staticDeclaredMembersOnly);
} else {
if (node.data.memberDescriptor) {
loadMember(node);
} else {
node.setLazyNodeStatus(DTNodeStatus_Ok);
}
}
}
var loadMember = function (memberNode) {
var previousUpdateMode = memberNode.tree.enableUpdate(false);
var memberDescriptor = memberNode.data.memberDescriptor;
// Return Type
memberNode.addChild({ title: 'Returns: ' + memberDescriptor.ReturnType, tooltip: memberDescriptor.ReturnExpressionType, isFolder: true, expressionType: memberDescriptor.ReturnExpressionType, isLazy: true, addClass: 'object' });
// Parameters
var parametersNode = memberNode.addChild({ title: 'Parameters', isFolder: true, addClass: 'parameter' });
for (var i = 0; i < memberDescriptor.Parameters.length; i++) {
var p = memberDescriptor.Parameters[i];
parametersNode.addChild({ title: p.Name + ' [' + p.ReturnType + ']', tooltip: p.ReturnExpressionType, addClass: 'object' });
}
memberNode.setLazyNodeStatus(DTNodeStatus_Ok);
memberNode.tree.enableUpdate(previousUpdateMode);
}
var typeLoaded = function (parentNode, typeDescriptor) {
var previousUpdateMode = parentNode.tree.enableUpdate(false);
for (var i = 0; i < typeDescriptor.Members.length; i++) {
var memberDescriptor = typeDescriptor.Members[i];
parentNode.addChild({ title: memberDescriptor.Name, tooltip: memberDescriptor.ReturnType, isFolder: true, addClass: memberDescriptor.Kind, memberDescriptor: memberDescriptor, isLazy: true });
}
parentNode.setLazyNodeStatus(DTNodeStatus_Ok);
parentNode.tree.enableUpdate(previousUpdateMode);
}
var loadType = function (parentNode, type, staticDeclaredMembersOnly) {
if (typeLib[type]) {
typeLoaded(parentNode, typeLib[type]);
} else {
var requestData = { type: type, StaticDeclaredMembersOnly: staticDeclaredMembersOnly };
$.getJSON(loadTypeUrl, requestData, function (data) {
typeLib[type] = data;
typeLoaded(parentNode, data);
});
}
}
var initVariable = function (name, type) {
variableScopeTree.dynatree('getRoot').addChild({ title: name, tooltip: type, isFolder: true, addClass: 'object', expressionType: type, isLazy: true });
}
var initExpressionLibrary = function (name, type) {
extScopeTree.dynatree('getRoot').addChild({ title: name, tooltip: type, isFolder: true, addClass: 'object', expressionType: type, staticDeclaredMembersOnly: true, isLazy: true });
}
// Init
deviceScopeTree.dynatree({ onLazyRead: lazyLoadNode });
loadType(deviceScopeTree.dynatree('getRoot'), '@(Model.DeviceType)');
jobScopeTree.dynatree({ onLazyRead: lazyLoadNode });
loadType(jobScopeTree.dynatree('getRoot'), '@(Model.JobType)');
userScopeTree.dynatree({ onLazyRead: lazyLoadNode });
loadType(userScopeTree.dynatree('getRoot'), '@(Model.UserType)');
variableScopeTree.dynatree({ onLazyRead: lazyLoadNode });
document.DiscoFunctions.expressionInitVariable = initVariable;
extScopeTree.dynatree({ onLazyRead: lazyLoadNode });
document.DiscoFunctions.expressionInitExpressionLibrary = initExpressionLibrary;
});
</script>
<script type="text/javascript">
$(function () {
@{
foreach (var variable in Model.Variables)
{
<text>document.DiscoFunctions.expressionInitVariable('@(variable.Key)', '@variable.Value');</text>
}
foreach (var variable in Model.ExtensionLibraries)
{
<text>document.DiscoFunctions.expressionInitExpressionLibrary('@(variable.Key)', '@variable.Value');</text>
}
}
});
</script>
@@ -1,306 +0,0 @@
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Disco.Web.Areas.Config.Views.DocumentTemplate
{
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Web.Helpers;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using System.Web.Mvc.Html;
using System.Web.Routing;
using System.Web.Security;
using System.Web.UI;
using System.Web.WebPages;
using Disco;
using Disco.Models.Repository;
using Disco.Services;
using Disco.Services.Authorization;
using Disco.Services.Web;
using Disco.Web;
using Disco.Web.Extensions;
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
[System.Web.WebPages.PageVirtualPathAttribute("~/Areas/Config/Views/DocumentTemplate/ExpressionBrowser.cshtml")]
public partial class ExpressionBrowser : Disco.Services.Web.WebViewPage<Disco.Web.Areas.Config.Models.DocumentTemplate.ExpressionBrowserModel>
{
public ExpressionBrowser()
{
}
public override void Execute()
{
#line 2 "..\..\Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"
Authorization.Require(Claims.Config.Show);
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Document Templates", MVC.Config.DocumentTemplate.Index(null), "Expression Browser");
Html.BundleDeferred("~/Style/jQueryUI/dynatree");
Html.BundleDeferred("~/ClientScripts/Modules/jQueryUI-DynaTree");
#line default
#line hidden
WriteLiteral("\r\n<div");
WriteLiteral(" id=\"configurationDocumentTemplateExpressionBrowser\"");
WriteLiteral(">\r\n Expressions within Disco ICT are based on the <a");
WriteLiteral(" href=\"http://www.springframework.net/\"");
WriteLiteral("\r\n target=\"_blank\"");
WriteLiteral(">Spring.NET Framework</a>. Please refer to the <a");
WriteLiteral(" href=\"http://www.springframework.net/doc-latest/reference/html/expressions.html\"" +
"");
WriteLiteral("\r\n target=\"_blank\"");
WriteLiteral(">Expression Evaluation</a> documentation.\r\n <h2");
WriteLiteral(" id=\"DeviceScope\"");
WriteLiteral(">\r\n Device Scope</h2>\r\n <div");
WriteLiteral(" id=\"deviceScopeTree\"");
WriteLiteral(" class=\"expressionTree\"");
WriteLiteral(">\r\n </div>\r\n <h2");
WriteLiteral(" id=\"JobScope\"");
WriteLiteral(">\r\n Job Scope</h2>\r\n <div");
WriteLiteral(" id=\"jobScopeTree\"");
WriteLiteral(" class=\"expressionTree\"");
WriteLiteral(">\r\n </div>\r\n <h2");
WriteLiteral(" id=\"UserScope\"");
WriteLiteral(">\r\n User Scope</h2>\r\n <div");
WriteLiteral(" id=\"userScopeTree\"");
WriteLiteral(" class=\"expressionTree\"");
WriteLiteral(">\r\n </div>\r\n <h2");
WriteLiteral(" id=\"Variables\"");
WriteLiteral(">\r\n Variables\r\n </h2>\r\n <div");
WriteLiteral(" id=\"variableScopeTree\"");
WriteLiteral(" class=\"expressionTree\"");
WriteLiteral(">\r\n </div>\r\n <h2");
WriteLiteral(" id=\"ExtensionLibraries\"");
WriteLiteral(">\r\n Extension Libraries</h2>\r\n <div");
WriteLiteral(" id=\"extScopeTree\"");
WriteLiteral(" class=\"expressionTree\"");
WriteLiteral(">\r\n </div>\r\n</div>\r\n<script");
WriteLiteral(" type=\"text/javascript\"");
WriteLiteral(">\r\n $(function () {\r\n if (!document.DiscoFunctions) {\r\n docu" +
"ment.DiscoFunctions = {};\r\n }\r\n\r\n var typeLib = {};\r\n var l" +
"oadTypeUrl = \'");
#line 42 "..\..\Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"
Write(Url.Action(MVC.Config.DocumentTemplate.ExpressionBrowser()));
#line default
#line hidden
WriteLiteral("\';\r\n var deviceScopeTree = $(\'#deviceScopeTree\');\r\n var jobScopeTre" +
"e = $(\'#jobScopeTree\');\r\n var userScopeTree = $(\'#userScopeTree\');\r\n " +
" var variableScopeTree = $(\'#variableScopeTree\');\r\n var extScopeTree = " +
"$(\'#extScopeTree\');\r\n\r\n var lazyLoadNode = function (node) {\r\n " +
" if (node.data.expressionType) {\r\n node.setLazyNodeStatus(DTNodeS" +
"tatus_Loading);\r\n loadType(node, node.data.expressionType, node.d" +
"ata.staticDeclaredMembersOnly);\r\n } else {\r\n if (node." +
"data.memberDescriptor) {\r\n loadMember(node);\r\n " +
" } else {\r\n node.setLazyNodeStatus(DTNodeStatus_Ok);\r\n " +
" }\r\n }\r\n }\r\n var loadMember = function (memberN" +
"ode) {\r\n var previousUpdateMode = memberNode.tree.enableUpdate(false)" +
";\r\n var memberDescriptor = memberNode.data.memberDescriptor;\r\n " +
" // Return Type\r\n memberNode.addChild({ title: \'Returns: \' + memb" +
"erDescriptor.ReturnType, tooltip: memberDescriptor.ReturnExpressionType, isFolde" +
"r: true, expressionType: memberDescriptor.ReturnExpressionType, isLazy: true, ad" +
"dClass: \'object\' });\r\n // Parameters\r\n var parametersNode " +
"= memberNode.addChild({ title: \'Parameters\', isFolder: true, addClass: \'paramete" +
"r\' });\r\n for (var i = 0; i < memberDescriptor.Parameters.length; i++)" +
" {\r\n var p = memberDescriptor.Parameters[i];\r\n par" +
"ametersNode.addChild({ title: p.Name + \' [\' + p.ReturnType + \']\', tooltip: p.Ret" +
"urnExpressionType, addClass: \'object\' });\r\n }\r\n memberNode" +
".setLazyNodeStatus(DTNodeStatus_Ok);\r\n memberNode.tree.enableUpdate(p" +
"reviousUpdateMode);\r\n }\r\n var typeLoaded = function (parentNode, t" +
"ypeDescriptor) {\r\n var previousUpdateMode = parentNode.tree.enableUpd" +
"ate(false);\r\n for (var i = 0; i < typeDescriptor.Members.length; i++)" +
" {\r\n var memberDescriptor = typeDescriptor.Members[i];\r\n " +
" parentNode.addChild({ title: memberDescriptor.Name, tooltip: memberDescri" +
"ptor.ReturnType, isFolder: true, addClass: memberDescriptor.Kind, memberDescript" +
"or: memberDescriptor, isLazy: true });\r\n }\r\n parentNode.se" +
"tLazyNodeStatus(DTNodeStatus_Ok);\r\n parentNode.tree.enableUpdate(prev" +
"iousUpdateMode);\r\n }\r\n\r\n var loadType = function (parentNode, type" +
", staticDeclaredMembersOnly) {\r\n if (typeLib[type]) {\r\n " +
" typeLoaded(parentNode, typeLib[type]);\r\n } else {\r\n " +
"var requestData = { type: type, StaticDeclaredMembersOnly: staticDeclaredMembers" +
"Only };\r\n $.getJSON(loadTypeUrl, requestData, function (data) {\r\n" +
" typeLib[type] = data;\r\n typeLoaded(parent" +
"Node, data);\r\n });\r\n }\r\n }\r\n\r\n var initV" +
"ariable = function (name, type) {\r\n variableScopeTree.dynatree(\'getRo" +
"ot\').addChild({ title: name, tooltip: type, isFolder: true, addClass: \'object\', " +
"expressionType: type, isLazy: true });\r\n }\r\n var initExpressionLib" +
"rary = function (name, type) {\r\n extScopeTree.dynatree(\'getRoot\').add" +
"Child({ title: name, tooltip: type, isFolder: true, addClass: \'object\', expressi" +
"onType: type, staticDeclaredMembersOnly: true, isLazy: true });\r\n }\r\n\r\n " +
" // Init\r\n deviceScopeTree.dynatree({ onLazyRead: lazyLoadNode });\r\n" +
" loadType(deviceScopeTree.dynatree(\'getRoot\'), \'");
#line 106 "..\..\Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"
Write(Model.DeviceType);
#line default
#line hidden
WriteLiteral("\');\r\n\r\n jobScopeTree.dynatree({ onLazyRead: lazyLoadNode });\r\n load" +
"Type(jobScopeTree.dynatree(\'getRoot\'), \'");
#line 109 "..\..\Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"
Write(Model.JobType);
#line default
#line hidden
WriteLiteral("\');\r\n\r\n userScopeTree.dynatree({ onLazyRead: lazyLoadNode });\r\n loa" +
"dType(userScopeTree.dynatree(\'getRoot\'), \'");
#line 112 "..\..\Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"
Write(Model.UserType);
#line default
#line hidden
WriteLiteral(@"');
variableScopeTree.dynatree({ onLazyRead: lazyLoadNode });
document.DiscoFunctions.expressionInitVariable = initVariable;
extScopeTree.dynatree({ onLazyRead: lazyLoadNode });
document.DiscoFunctions.expressionInitExpressionLibrary = initExpressionLibrary;
});
</script>
<script");
WriteLiteral(" type=\"text/javascript\"");
WriteLiteral(">\r\n $(function () {\r\n");
#line 123 "..\..\Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"
foreach (var variable in Model.Variables)
{
#line default
#line hidden
WriteLiteral(" ");
WriteLiteral("document.DiscoFunctions.expressionInitVariable(\'");
#line 126 "..\..\Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"
Write(variable.Key);
#line default
#line hidden
WriteLiteral("\', \'");
#line 126 "..\..\Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"
Write(variable.Value);
#line default
#line hidden
WriteLiteral("\');");
WriteLiteral("\r\n");
#line 127 "..\..\Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"
}
foreach (var variable in Model.ExtensionLibraries)
{
#line default
#line hidden
WriteLiteral(" ");
WriteLiteral("document.DiscoFunctions.expressionInitExpressionLibrary(\'");
#line 130 "..\..\Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"
Write(variable.Key);
#line default
#line hidden
WriteLiteral("\', \'");
#line 130 "..\..\Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"
Write(variable.Value);
#line default
#line hidden
WriteLiteral("\');");
WriteLiteral("\r\n");
#line 131 "..\..\Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"
}
#line default
#line hidden
WriteLiteral("\r\n });\r\n </script>");
}
}
}
#pragma warning restore 1591
@@ -0,0 +1,160 @@
@model Disco.Web.Areas.Config.Models.Expressions.BrowserModel
@{
Authorization.Require(Claims.Config.Show);
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Expression Browser");
Html.BundleDeferred("~/Style/jQueryUI/dynatree");
Html.BundleDeferred("~/ClientScripts/Modules/jQueryUI-DynaTree");
}
<div id="Config_Expressions_Browser">
Expressions within Disco ICT are based on the <a href="http://www.springframework.net/" target="_blank">Spring.NET Framework</a>. Please refer to the <a href="http://www.springframework.net/doc-latest/reference/html/expressions.html" target="_blank">Expression Evaluation</a> documentation.
<h2 id="DeviceScope">
Device Scope
</h2>
<div id="deviceScopeTree" class="expressionTree">
</div>
<h2 id="JobScope">
Job Scope
</h2>
<div id="jobScopeTree" class="expressionTree">
</div>
<h2 id="UserScope">
User Scope
</h2>
<div id="userScopeTree" class="expressionTree">
</div>
<h2 id="Variables">
Variables
</h2>
<div id="variableScopeTree" class="expressionTree">
</div>
<h2 id="ExtensionLibraries">
Extension Libraries
</h2>
<div id="extScopeTree" class="expressionTree">
</div>
@if (Model.PluginExtensionLibraries.Any())
{
<h2 id="PluginExtensionLibraries">
Plugin Extension Libraries
</h2>
<div id="pluginExtScopeTree" class="expressionTree">
</div>
}
</div>
<script id="expressionBrowserModel" type="application/json">
@Html.Raw(Json.Encode(Model))
</script>
@using (Html.BeginForm(MVC.API.Expressions.TypeDescriptor(), FormMethod.Post, new { id = "expressionBrowserForm" }))
{
@Html.AntiForgeryToken()
}
<script type="text/javascript">
$(function () {
if (!document.DiscoFunctions) {
document.DiscoFunctions = {};
}
const typeLib = {};
const model = JSON.parse($('#expressionBrowserModel').html());
function lazyLoadNode(node) {
if (node.data.expressionType) {
node.setLazyNodeStatus(DTNodeStatus_Loading);
loadType(node, node.data.expressionType, node.data.staticMembersOnly);
} else {
if (node.data.memberDescriptor) {
loadMember(node);
} else {
node.setLazyNodeStatus(DTNodeStatus_Ok);
}
}
}
function loadMember(memberNode) {
const previousUpdateMode = memberNode.tree.enableUpdate(false);
const memberDescriptor = memberNode.data.memberDescriptor;
// Return Type
memberNode.addChild({ title: 'Returns: ' + memberDescriptor.ReturnType, tooltip: memberDescriptor.ReturnExpressionType, isFolder: true, expressionType: memberDescriptor.ReturnExpressionType, isLazy: true, addClass: 'object' });
// Parameters
const parametersNode = memberNode.addChild({ title: 'Parameters', isFolder: true, addClass: 'parameter' });
for (let i = 0; i < memberDescriptor.Parameters.length; i++) {
const p = memberDescriptor.Parameters[i];
parametersNode.addChild({ title: p.Name + ' [' + p.ReturnType + ']', tooltip: p.ReturnExpressionType, addClass: 'object' });
}
memberNode.setLazyNodeStatus(DTNodeStatus_Ok);
memberNode.tree.enableUpdate(previousUpdateMode);
}
function typeLoaded(parentNode, typeDescriptor) {
const previousUpdateMode = parentNode.tree.enableUpdate(false);
for (let i = 0; i < typeDescriptor.Members.length; i++) {
const memberDescriptor = typeDescriptor.Members[i];
parentNode.addChild({ title: memberDescriptor.Name, tooltip: memberDescriptor.ReturnType, isFolder: true, addClass: memberDescriptor.Kind, memberDescriptor: memberDescriptor, isLazy: true });
}
parentNode.setLazyNodeStatus(DTNodeStatus_Ok);
parentNode.tree.enableUpdate(previousUpdateMode);
}
async function loadType(parentNode, type, staticMembersOnly) {
let typeDef = typeLib[type];
if (!typeDef) {
$form = $('#expressionBrowserForm');
const url = $form.attr('action');
const body = new FormData($form[0]);
body.append('type', type);
if (staticMembersOnly) {
body.append('staticMembersOnly', staticMembersOnly);
}
const response = await fetch(url, {
method: 'POST',
body: body
});
if (!response.ok) {
console.error('Failed to load type', response);
return;
}
typeDef = await response.json();
typeLib[type] = typeDef;
}
typeLoaded(parentNode, typeDef);
}
const deviceScopeTree = $('#deviceScopeTree');
deviceScopeTree.dynatree({ onLazyRead: lazyLoadNode });
loadType(deviceScopeTree.dynatree('getRoot'), model.DeviceType);
const jobScopeTree = $('#jobScopeTree');
jobScopeTree.dynatree({ onLazyRead: lazyLoadNode });
loadType(jobScopeTree.dynatree('getRoot'), model.JobType);
const userScopeTree = $('#userScopeTree');
userScopeTree.dynatree({ onLazyRead: lazyLoadNode });
loadType(userScopeTree.dynatree('getRoot'), model.UserType);
const variableScopeTree = $('#variableScopeTree');
variableScopeTree.dynatree({ onLazyRead: lazyLoadNode });
Object.keys(model.Variables).forEach(name => {
const type = model.Variables[name];
variableScopeTree.dynatree('getRoot').addChild({ title: name, tooltip: type, isFolder: true, addClass: 'object', expressionType: type, isLazy: true });
})
const extScopeTree = $('#extScopeTree');
extScopeTree.dynatree({ onLazyRead: lazyLoadNode });
Object.keys(model.ExtensionLibraries).forEach(name => {
const type = model.ExtensionLibraries[name];
extScopeTree.dynatree('getRoot').addChild({ title: name, tooltip: type, isFolder: true, addClass: 'object', expressionType: type, staticMembersOnly: true, isLazy: true });
})
const pluginExtScopeTree = $('#pluginExtScopeTree');
if (pluginExtScopeTree.length) {
pluginExtScopeTree.dynatree({ onLazyRead: lazyLoadNode });
Object.keys(model.PluginExtensionLibraries).forEach(name => {
const type = model.PluginExtensionLibraries[name];
pluginExtScopeTree.dynatree('getRoot').addChild({ title: name, tooltip: type, isFolder: true, addClass: 'object', expressionType: type, staticMembersOnly: true, isLazy: true });
})
}
});
</script>
@@ -0,0 +1,277 @@
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Disco.Web.Areas.Config.Views.Expressions
{
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Web.Helpers;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using System.Web.Mvc.Html;
using System.Web.Routing;
using System.Web.Security;
using System.Web.UI;
using System.Web.WebPages;
using Disco;
using Disco.Models.Repository;
using Disco.Services;
using Disco.Services.Authorization;
using Disco.Services.Web;
using Disco.Web;
using Disco.Web.Extensions;
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
[System.Web.WebPages.PageVirtualPathAttribute("~/Areas/Config/Views/Expressions/Browser.cshtml")]
public partial class Browser : Disco.Services.Web.WebViewPage<Disco.Web.Areas.Config.Models.Expressions.BrowserModel>
{
public Browser()
{
}
public override void Execute()
{
#line 2 "..\..\Areas\Config\Views\Expressions\Browser.cshtml"
Authorization.Require(Claims.Config.Show);
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Expression Browser");
Html.BundleDeferred("~/Style/jQueryUI/dynatree");
Html.BundleDeferred("~/ClientScripts/Modules/jQueryUI-DynaTree");
#line default
#line hidden
WriteLiteral("\r\n<div");
WriteLiteral(" id=\"Config_Expressions_Browser\"");
WriteLiteral(">\r\n Expressions within Disco ICT are based on the <a");
WriteLiteral(" href=\"http://www.springframework.net/\"");
WriteLiteral(" target=\"_blank\"");
WriteLiteral(">Spring.NET Framework</a>. Please refer to the <a");
WriteLiteral(" href=\"http://www.springframework.net/doc-latest/reference/html/expressions.html\"" +
"");
WriteLiteral(" target=\"_blank\"");
WriteLiteral(">Expression Evaluation</a> documentation.\r\n <h2");
WriteLiteral(" id=\"DeviceScope\"");
WriteLiteral(">\r\n Device Scope\r\n </h2>\r\n <div");
WriteLiteral(" id=\"deviceScopeTree\"");
WriteLiteral(" class=\"expressionTree\"");
WriteLiteral(">\r\n </div>\r\n <h2");
WriteLiteral(" id=\"JobScope\"");
WriteLiteral(">\r\n Job Scope\r\n </h2>\r\n <div");
WriteLiteral(" id=\"jobScopeTree\"");
WriteLiteral(" class=\"expressionTree\"");
WriteLiteral(">\r\n </div>\r\n <h2");
WriteLiteral(" id=\"UserScope\"");
WriteLiteral(">\r\n User Scope\r\n </h2>\r\n <div");
WriteLiteral(" id=\"userScopeTree\"");
WriteLiteral(" class=\"expressionTree\"");
WriteLiteral(">\r\n </div>\r\n <h2");
WriteLiteral(" id=\"Variables\"");
WriteLiteral(">\r\n Variables\r\n </h2>\r\n <div");
WriteLiteral(" id=\"variableScopeTree\"");
WriteLiteral(" class=\"expressionTree\"");
WriteLiteral(">\r\n </div>\r\n <h2");
WriteLiteral(" id=\"ExtensionLibraries\"");
WriteLiteral(">\r\n Extension Libraries\r\n </h2>\r\n <div");
WriteLiteral(" id=\"extScopeTree\"");
WriteLiteral(" class=\"expressionTree\"");
WriteLiteral(">\r\n </div>\r\n");
#line 36 "..\..\Areas\Config\Views\Expressions\Browser.cshtml"
#line default
#line hidden
#line 36 "..\..\Areas\Config\Views\Expressions\Browser.cshtml"
if (Model.PluginExtensionLibraries.Any())
{
#line default
#line hidden
WriteLiteral(" <h2");
WriteLiteral(" id=\"PluginExtensionLibraries\"");
WriteLiteral(">\r\n Plugin Extension Libraries\r\n </h2>\r\n");
WriteLiteral(" <div");
WriteLiteral(" id=\"pluginExtScopeTree\"");
WriteLiteral(" class=\"expressionTree\"");
WriteLiteral(">\r\n </div>\r\n");
#line 43 "..\..\Areas\Config\Views\Expressions\Browser.cshtml"
}
#line default
#line hidden
WriteLiteral("</div>\r\n<script");
WriteLiteral(" id=\"expressionBrowserModel\"");
WriteLiteral(" type=\"application/json\"");
WriteLiteral(">\r\n");
#line 46 "..\..\Areas\Config\Views\Expressions\Browser.cshtml"
Write(Html.Raw(Json.Encode(Model)));
#line default
#line hidden
WriteLiteral("\r\n</script>\r\n");
#line 48 "..\..\Areas\Config\Views\Expressions\Browser.cshtml"
using (Html.BeginForm(MVC.API.Expressions.TypeDescriptor(), FormMethod.Post, new { id = "expressionBrowserForm" }))
{
#line default
#line hidden
#line 50 "..\..\Areas\Config\Views\Expressions\Browser.cshtml"
Write(Html.AntiForgeryToken());
#line default
#line hidden
#line 50 "..\..\Areas\Config\Views\Expressions\Browser.cshtml"
}
#line default
#line hidden
WriteLiteral("<script");
WriteLiteral(" type=\"text/javascript\"");
WriteLiteral(">\r\n $(function () {\r\n if (!document.DiscoFunctions) {\r\n docu" +
"ment.DiscoFunctions = {};\r\n }\r\n\r\n const typeLib = {};\r\n con" +
"st model = JSON.parse($(\'#expressionBrowserModel\').html());\r\n\r\n function " +
"lazyLoadNode(node) {\r\n if (node.data.expressionType) {\r\n " +
" node.setLazyNodeStatus(DTNodeStatus_Loading);\r\n loadType(node," +
" node.data.expressionType, node.data.staticMembersOnly);\r\n } else {\r\n" +
" if (node.data.memberDescriptor) {\r\n loadMembe" +
"r(node);\r\n } else {\r\n node.setLazyNodeStatus(D" +
"TNodeStatus_Ok);\r\n }\r\n }\r\n }\r\n function " +
"loadMember(memberNode) {\r\n const previousUpdateMode = memberNode.tree" +
".enableUpdate(false);\r\n const memberDescriptor = memberNode.data.memb" +
"erDescriptor;\r\n // Return Type\r\n memberNode.addChild({ tit" +
"le: \'Returns: \' + memberDescriptor.ReturnType, tooltip: memberDescriptor.ReturnE" +
"xpressionType, isFolder: true, expressionType: memberDescriptor.ReturnExpression" +
"Type, isLazy: true, addClass: \'object\' });\r\n // Parameters\r\n " +
" const parametersNode = memberNode.addChild({ title: \'Parameters\', isFolder: t" +
"rue, addClass: \'parameter\' });\r\n for (let i = 0; i < memberDescriptor" +
".Parameters.length; i++) {\r\n const p = memberDescriptor.Parameter" +
"s[i];\r\n parametersNode.addChild({ title: p.Name + \' [\' + p.Return" +
"Type + \']\', tooltip: p.ReturnExpressionType, addClass: \'object\' });\r\n " +
" }\r\n memberNode.setLazyNodeStatus(DTNodeStatus_Ok);\r\n memb" +
"erNode.tree.enableUpdate(previousUpdateMode);\r\n }\r\n function typeL" +
"oaded(parentNode, typeDescriptor) {\r\n const previousUpdateMode = pare" +
"ntNode.tree.enableUpdate(false);\r\n for (let i = 0; i < typeDescriptor" +
".Members.length; i++) {\r\n const memberDescriptor = typeDescriptor" +
".Members[i];\r\n parentNode.addChild({ title: memberDescriptor.Name" +
", tooltip: memberDescriptor.ReturnType, isFolder: true, addClass: memberDescript" +
"or.Kind, memberDescriptor: memberDescriptor, isLazy: true });\r\n }\r\n " +
" parentNode.setLazyNodeStatus(DTNodeStatus_Ok);\r\n parentNode" +
".tree.enableUpdate(previousUpdateMode);\r\n }\r\n\r\n async function loa" +
"dType(parentNode, type, staticMembersOnly) {\r\n let typeDef = typeLib[" +
"type];\r\n if (!typeDef) {\r\n $form = $(\'#expressionBrows" +
"erForm\');\r\n const url = $form.attr(\'action\');\r\n co" +
"nst body = new FormData($form[0]);\r\n body.append(\'type\', type);\r\n" +
" if (staticMembersOnly) {\r\n body.append(\'stati" +
"cMembersOnly\', staticMembersOnly);\r\n }\r\n\r\n const r" +
"esponse = await fetch(url, {\r\n method: \'POST\',\r\n " +
" body: body\r\n });\r\n\r\n if (!response.ok) {\r\n " +
" console.error(\'Failed to load type\', response);\r\n " +
" return;\r\n }\r\n\r\n typeDef = await response.j" +
"son();\r\n\r\n typeLib[type] = typeDef;\r\n }\r\n t" +
"ypeLoaded(parentNode, typeDef);\r\n }\r\n\r\n const deviceScopeTree = $(" +
"\'#deviceScopeTree\');\r\n deviceScopeTree.dynatree({ onLazyRead: lazyLoadNod" +
"e });\r\n loadType(deviceScopeTree.dynatree(\'getRoot\'), model.DeviceType);\r" +
"\n\r\n const jobScopeTree = $(\'#jobScopeTree\');\r\n jobScopeTree.dynatr" +
"ee({ onLazyRead: lazyLoadNode });\r\n loadType(jobScopeTree.dynatree(\'getRo" +
"ot\'), model.JobType);\r\n\r\n const userScopeTree = $(\'#userScopeTree\');\r\n " +
" userScopeTree.dynatree({ onLazyRead: lazyLoadNode });\r\n loadType(use" +
"rScopeTree.dynatree(\'getRoot\'), model.UserType);\r\n\r\n const variableScopeT" +
"ree = $(\'#variableScopeTree\');\r\n variableScopeTree.dynatree({ onLazyRead:" +
" lazyLoadNode });\r\n Object.keys(model.Variables).forEach(name => {\r\n " +
" const type = model.Variables[name];\r\n variableScopeTree.dynatr" +
"ee(\'getRoot\').addChild({ title: name, tooltip: type, isFolder: true, addClass: \'" +
"object\', expressionType: type, isLazy: true });\r\n })\r\n\r\n const ext" +
"ScopeTree = $(\'#extScopeTree\');\r\n extScopeTree.dynatree({ onLazyRead: laz" +
"yLoadNode });\r\n Object.keys(model.ExtensionLibraries).forEach(name => {\r\n" +
" const type = model.ExtensionLibraries[name];\r\n extScopeTr" +
"ee.dynatree(\'getRoot\').addChild({ title: name, tooltip: type, isFolder: true, ad" +
"dClass: \'object\', expressionType: type, staticMembersOnly: true, isLazy: true })" +
";\r\n })\r\n\r\n const pluginExtScopeTree = $(\'#pluginExtScopeTree\');\r\n " +
" if (pluginExtScopeTree.length) {\r\n pluginExtScopeTree.dynatree" +
"({ onLazyRead: lazyLoadNode });\r\n Object.keys(model.PluginExtensionLi" +
"braries).forEach(name => {\r\n const type = model.PluginExtensionLi" +
"braries[name];\r\n pluginExtScopeTree.dynatree(\'getRoot\').addChild(" +
"{ title: name, tooltip: type, isFolder: true, addClass: \'object\', expressionType" +
": type, staticMembersOnly: true, isLazy: true });\r\n })\r\n }\r\n " +
" });\r\n</script>\r\n");
}
}
}
#pragma warning restore 1591
+1 -1
View File
@@ -334,7 +334,7 @@ table.deviceProfileTable th.deviceCount {
text-align: center; text-align: center;
padding: 40px 0; padding: 40px 0;
} }
#configurationDocumentTemplateExpressionBrowser { #Config_Expressions_Browser {
padding-right: 275px; padding-right: 275px;
background-image: url(data:image/png;base64,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 truncated background-image: url(data:image/png;base64,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 truncated
background-position: right top; background-position: right top;
+1 -1
View File
@@ -302,7 +302,7 @@ table.deviceProfileTable {
padding: 40px 0; padding: 40px 0;
} }
#configurationDocumentTemplateExpressionBrowser { #Config_Expressions_Browser {
padding-right: 275px; padding-right: 275px;
background-image: url(data:image/png;base64,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 truncated background-image: url(data:image/png;base64,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 truncated
background-position: right top; background-position: right top;
+1 -1
View File
@@ -1 +1 @@
.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#updateAvailableContainer i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-70px;font-size:50px;color:#e51400;}#updateAvailableContainer button{font-size:12px;margin-top:8px;}.Config_HideAdvanced .Config_HideAdvanced_Item{display:none;}.Config_LinkedGroup_Instance{margin:4px 0 8px 4px;padding:4px 0 4px 6px;border-left:4px solid #ccc;background-color:#fff;}.Config_LinkedGroup_Instance div.code{margin-left:2px;}#Config_LinkedGroup_Dialog h3{margin-bottom:6px;}#Config_LinkedGroup_Dialog table.input{margin-top:12px;}#Config_LinkedGroup_Dialog table.input th{text-align:right;}#expressionEditor #expressionEditorExceptionContainer{display:none;border:1px dashed #ff9696;background-color:#ffd8d8;margin:10px 0;padding:10px;}#expressionEditor #expressionEditorContainer{border:1px solid #1e6dab;background-color:#f4f4f4;height:100px;}.expressionTree span.dynatree-node span.dynatree-icon{background-image:url(data:image/png;base64,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);background-position-y:0;}.expressionTree span.dynatree-node.object span.dynatree-icon{background-position-x:0;}.expressionTree span.dynatree-node.parameter span.dynatree-icon{background-position-x:-16px;}.expressionTree span.dynatree-node.function span.dynatree-icon{background-position-x:-32px;}.expressionTree span.dynatreeLine truncated .tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#updateAvailableContainer i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-70px;font-size:50px;color:#e51400;}#updateAvailableContainer button{font-size:12px;margin-top:8px;}.Config_HideAdvanced .Config_HideAdvanced_Item{display:none;}.Config_LinkedGroup_Instance{margin:4px 0 8px 4px;padding:4px 0 4px 6px;border-left:4px solid #ccc;background-color:#fff;}.Config_LinkedGroup_Instance div.code{margin-left:2px;}#Config_LinkedGroup_Dialog h3{margin-bottom:6px;}#Config_LinkedGroup_Dialog table.input{margin-top:12px;}#Config_LinkedGroup_Dialog table.input th{text-align:right;}#expressionEditor #expressionEditorExceptionContainer{display:none;border:1px dashed #ff9696;background-color:#ffd8d8;margin:10px 0;padding:10px;}#expressionEditor #expressionEditorContainer{border:1px solid #1e6dab;background-color:#f4f4f4;height:100px;}.expressionTree span.dynatree-node span.dynatree-icon{background-image:url(data:image/png;base64,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);background-position-y:0;}.expressionTree span.dynatree-node.object span.dynatree-icon{background-position-x:0;}.expressionTree span.dynatree-node.parameter span.dynatree-icon{background-position-x:-16px;}.expressionTree span.dynatree-node.function span.dynatree-icon{background-position-x:-32px;}.expressionTree span.dynatreeLine truncated
+8 -9
View File
@@ -296,6 +296,11 @@
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<DependentUpon>ShowPackage.cshtml</DependentUpon> <DependentUpon>ShowPackage.cshtml</DependentUpon>
</Compile> </Compile>
<Compile Include="Areas\Config\Views\Expressions\Browser.generated.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Browser.cshtml</DependentUpon>
</Compile>
<Compile Include="Areas\Config\Views\JobPreferences\Index.generated.cs"> <Compile Include="Areas\Config\Views\JobPreferences\Index.generated.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
@@ -443,7 +448,6 @@
<Compile Include="App_Start\FilterConfig.cs" /> <Compile Include="App_Start\FilterConfig.cs" />
<Compile Include="App_Start\RazorGeneratorMvcStart.cs" /> <Compile Include="App_Start\RazorGeneratorMvcStart.cs" />
<Compile Include="App_Start\RouteConfig.cs" /> <Compile Include="App_Start\RouteConfig.cs" />
<Compile Include="App_Start\WebApiConfig.cs" />
<Compile Include="Areas\API\APIAreaRegistration.cs" /> <Compile Include="Areas\API\APIAreaRegistration.cs" />
<Compile Include="Areas\API\Controllers\BootstrapperController.cs" /> <Compile Include="Areas\API\Controllers\BootstrapperController.cs" />
<Compile Include="Areas\API\Controllers\DeviceBatchController.cs" /> <Compile Include="Areas\API\Controllers\DeviceBatchController.cs" />
@@ -501,7 +505,7 @@
<Compile Include="Areas\Config\Models\DeviceProfile\ShowModel.cs" /> <Compile Include="Areas\Config\Models\DeviceProfile\ShowModel.cs" />
<Compile Include="Areas\Config\Models\DeviceProfile\_IndexModelItem.cs" /> <Compile Include="Areas\Config\Models\DeviceProfile\_IndexModelItem.cs" />
<Compile Include="Areas\Config\Models\DocumentTemplate\CreateModel.cs" /> <Compile Include="Areas\Config\Models\DocumentTemplate\CreateModel.cs" />
<Compile Include="Areas\Config\Models\DocumentTemplate\ExpressionBrowserModel.cs" /> <Compile Include="Areas\Config\Models\Expressions\BrowserModel.cs" />
<Compile Include="Areas\Config\Models\DocumentTemplate\IndexModel.cs" /> <Compile Include="Areas\Config\Models\DocumentTemplate\IndexModel.cs" />
<Compile Include="Areas\Config\Models\DocumentTemplate\ShowModel.cs" /> <Compile Include="Areas\Config\Models\DocumentTemplate\ShowModel.cs" />
<Compile Include="Areas\Config\Models\DocumentTemplate\UndetectedPagesModel.cs" /> <Compile Include="Areas\Config\Models\DocumentTemplate\UndetectedPagesModel.cs" />
@@ -594,11 +598,6 @@
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
</Compile> </Compile>
<Compile Include="Areas\Config\Views\DocumentTemplate\ExpressionBrowser2.generated.cs">
<DependentUpon>ExpressionBrowser.cshtml</DependentUpon>
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="Areas\Config\Views\DocumentTemplate\ImportStatus.generated.cs"> <Compile Include="Areas\Config\Views\DocumentTemplate\ImportStatus.generated.cs">
<DependentUpon>ImportStatus.cshtml</DependentUpon> <DependentUpon>ImportStatus.cshtml</DependentUpon>
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
@@ -2337,9 +2336,9 @@
<Generator>RazorGenerator</Generator> <Generator>RazorGenerator</Generator>
<LastGenOutput>Create.generated.cs</LastGenOutput> <LastGenOutput>Create.generated.cs</LastGenOutput>
</None> </None>
<None Include="Areas\Config\Views\DocumentTemplate\ExpressionBrowser.cshtml"> <None Include="Areas\Config\Views\Expressions\Browser.cshtml">
<Generator>RazorGenerator</Generator> <Generator>RazorGenerator</Generator>
<LastGenOutput>ExpressionBrowser2.generated.cs</LastGenOutput> <LastGenOutput>Browser.generated.cs</LastGenOutput>
</None> </None>
<None Include="Areas\Config\Views\DocumentTemplate\ImportStatus.cshtml"> <None Include="Areas\Config\Views\DocumentTemplate\ImportStatus.cshtml">
<Generator>RazorGenerator</Generator> <Generator>RazorGenerator</Generator>
@@ -65,6 +65,12 @@ namespace Disco.Web.Areas.API.Controllers
{ {
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ValidateExpression); return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ValidateExpression);
} }
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult TypeDescriptor()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.TypeDescriptor);
}
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ExpressionsController Actions { get { return MVC.API.Expressions; } } public ExpressionsController Actions { get { return MVC.API.Expressions; } }
@@ -82,12 +88,14 @@ namespace Disco.Web.Areas.API.Controllers
public class ActionNamesClass public class ActionNamesClass
{ {
public readonly string ValidateExpression = "ValidateExpression"; public readonly string ValidateExpression = "ValidateExpression";
public readonly string TypeDescriptor = "TypeDescriptor";
} }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionNameConstants public class ActionNameConstants
{ {
public const string ValidateExpression = "ValidateExpression"; public const string ValidateExpression = "ValidateExpression";
public const string TypeDescriptor = "TypeDescriptor";
} }
@@ -99,6 +107,15 @@ namespace Disco.Web.Areas.API.Controllers
{ {
public readonly string Expression = "Expression"; public readonly string Expression = "Expression";
} }
static readonly ActionParamsClass_TypeDescriptor s_params_TypeDescriptor = new ActionParamsClass_TypeDescriptor();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_TypeDescriptor TypeDescriptorParams { get { return s_params_TypeDescriptor; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_TypeDescriptor
{
public readonly string type = "type";
public readonly string staticMembersOnly = "staticMembersOnly";
}
static readonly ViewsClass s_views = new ViewsClass(); static readonly ViewsClass s_views = new ViewsClass();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ViewsClass Views { get { return s_views; } } public ViewsClass Views { get { return s_views; } }
@@ -130,6 +147,19 @@ namespace Disco.Web.Areas.API.Controllers
return callInfo; return callInfo;
} }
[NonAction]
partial void TypeDescriptorOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string type, bool staticMembersOnly);
[NonAction]
public override System.Web.Mvc.ActionResult TypeDescriptor(string type, bool staticMembersOnly)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.TypeDescriptor);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "type", type);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "staticMembersOnly", staticMembersOnly);
TypeDescriptorOverride(callInfo, type, staticMembersOnly);
return callInfo;
}
} }
} }
@@ -77,12 +77,6 @@ namespace Disco.Web.Areas.Config.Controllers
{ {
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerate); return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerate);
} }
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult ExpressionBrowser()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExpressionBrowser);
}
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public DocumentTemplateController Actions { get { return MVC.Config.DocumentTemplate; } } public DocumentTemplateController Actions { get { return MVC.Config.DocumentTemplate; } }
@@ -165,15 +159,6 @@ namespace Disco.Web.Areas.Config.Controllers
{ {
public readonly string id = "id"; public readonly string id = "id";
} }
static readonly ActionParamsClass_ExpressionBrowser s_params_ExpressionBrowser = new ActionParamsClass_ExpressionBrowser();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_ExpressionBrowser ExpressionBrowserParams { get { return s_params_ExpressionBrowser; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_ExpressionBrowser
{
public readonly string type = "type";
public readonly string StaticDeclaredMembersOnly = "StaticDeclaredMembersOnly";
}
static readonly ViewsClass s_views = new ViewsClass(); static readonly ViewsClass s_views = new ViewsClass();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ViewsClass Views { get { return s_views; } } public ViewsClass Views { get { return s_views; } }
@@ -188,7 +173,6 @@ namespace Disco.Web.Areas.Config.Controllers
public readonly string BulkGenerate = "BulkGenerate"; public readonly string BulkGenerate = "BulkGenerate";
public readonly string Create = "Create"; public readonly string Create = "Create";
public readonly string CreatePackage = "CreatePackage"; public readonly string CreatePackage = "CreatePackage";
public readonly string ExpressionBrowser = "ExpressionBrowser";
public readonly string ImportStatus = "ImportStatus"; public readonly string ImportStatus = "ImportStatus";
public readonly string Index = "Index"; public readonly string Index = "Index";
public readonly string Show = "Show"; public readonly string Show = "Show";
@@ -199,7 +183,6 @@ namespace Disco.Web.Areas.Config.Controllers
public readonly string BulkGenerate = "~/Areas/Config/Views/DocumentTemplate/BulkGenerate.cshtml"; public readonly string BulkGenerate = "~/Areas/Config/Views/DocumentTemplate/BulkGenerate.cshtml";
public readonly string Create = "~/Areas/Config/Views/DocumentTemplate/Create.cshtml"; public readonly string Create = "~/Areas/Config/Views/DocumentTemplate/Create.cshtml";
public readonly string CreatePackage = "~/Areas/Config/Views/DocumentTemplate/CreatePackage.cshtml"; public readonly string CreatePackage = "~/Areas/Config/Views/DocumentTemplate/CreatePackage.cshtml";
public readonly string ExpressionBrowser = "~/Areas/Config/Views/DocumentTemplate/ExpressionBrowser.cshtml";
public readonly string ImportStatus = "~/Areas/Config/Views/DocumentTemplate/ImportStatus.cshtml"; public readonly string ImportStatus = "~/Areas/Config/Views/DocumentTemplate/ImportStatus.cshtml";
public readonly string Index = "~/Areas/Config/Views/DocumentTemplate/Index.cshtml"; public readonly string Index = "~/Areas/Config/Views/DocumentTemplate/Index.cshtml";
public readonly string Show = "~/Areas/Config/Views/DocumentTemplate/Show.cshtml"; public readonly string Show = "~/Areas/Config/Views/DocumentTemplate/Show.cshtml";
@@ -320,15 +303,13 @@ namespace Disco.Web.Areas.Config.Controllers
} }
[NonAction] [NonAction]
partial void ExpressionBrowserOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string type, bool StaticDeclaredMembersOnly); partial void ExpressionBrowserOverride(T4MVC_System_Web_Mvc_ActionResult callInfo);
[NonAction] [NonAction]
public override System.Web.Mvc.ActionResult ExpressionBrowser(string type, bool StaticDeclaredMembersOnly) public override System.Web.Mvc.ActionResult ExpressionBrowser()
{ {
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExpressionBrowser); var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExpressionBrowser);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "type", type); ExpressionBrowserOverride(callInfo);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "StaticDeclaredMembersOnly", StaticDeclaredMembersOnly);
ExpressionBrowserOverride(callInfo, type, StaticDeclaredMembersOnly);
return callInfo; return callInfo;
} }
@@ -76,12 +76,14 @@ namespace Disco.Web.Areas.Config.Controllers
public class ActionNamesClass public class ActionNamesClass
{ {
public readonly string Index = "Index"; public readonly string Index = "Index";
public readonly string Browser = "Browser";
} }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionNameConstants public class ActionNameConstants
{ {
public const string Index = "Index"; public const string Index = "Index";
public const string Browser = "Browser";
} }
@@ -95,8 +97,10 @@ namespace Disco.Web.Areas.Config.Controllers
public _ViewNamesClass ViewNames { get { return s_ViewNames; } } public _ViewNamesClass ViewNames { get { return s_ViewNames; } }
public class _ViewNamesClass public class _ViewNamesClass
{ {
public readonly string Browser = "Browser";
public readonly string Editor = "Editor"; public readonly string Editor = "Editor";
} }
public readonly string Browser = "~/Areas/Config/Views/Expressions/Browser.cshtml";
public readonly string Editor = "~/Areas/Config/Views/Expressions/Editor.cshtml"; public readonly string Editor = "~/Areas/Config/Views/Expressions/Editor.cshtml";
} }
} }
@@ -117,6 +121,17 @@ namespace Disco.Web.Areas.Config.Controllers
return callInfo; return callInfo;
} }
[NonAction]
partial void BrowserOverride(T4MVC_System_Web_Mvc_ActionResult callInfo);
[NonAction]
public override System.Web.Mvc.ActionResult Browser()
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Browser);
BrowserOverride(callInfo);
return callInfo;
}
} }
} }