site router optimization
This commit is contained in:
parent
ace7b4e2af
commit
a4f885a2c5
|
@ -418,8 +418,10 @@
|
||||||
{
|
{
|
||||||
var paneindex = new Dictionary<string, int>();
|
var paneindex = new Dictionary<string, int>();
|
||||||
|
|
||||||
foreach (Module module in modules)
|
foreach (Module module in modules.Where(item => item.PageId == page.PageId || item.ModuleId == moduleid))
|
||||||
{
|
{
|
||||||
|
var typename = Constants.ErrorModule;
|
||||||
|
|
||||||
// initialize module control properties
|
// initialize module control properties
|
||||||
module.SecurityAccessLevel = SecurityAccessLevel.Host;
|
module.SecurityAccessLevel = SecurityAccessLevel.Host;
|
||||||
module.ControlTitle = "";
|
module.ControlTitle = "";
|
||||||
|
@ -428,113 +430,108 @@
|
||||||
module.PaneModuleIndex = -1;
|
module.PaneModuleIndex = -1;
|
||||||
module.PaneModuleCount = 0;
|
module.PaneModuleCount = 0;
|
||||||
|
|
||||||
if (module.PageId == page.PageId || module.ModuleId == moduleid)
|
if (module.ModuleDefinition != null && (module.ModuleDefinition.Runtimes == "" || module.ModuleDefinition.Runtimes.Contains(Runtime)))
|
||||||
{
|
{
|
||||||
var typename = Constants.ErrorModule;
|
page.Resources = ManagePageResources(page.Resources, module.ModuleDefinition.Resources, ResourceLevel.Module, alias, "Modules", Utilities.GetTypeName(module.ModuleDefinition.ModuleDefinitionName));
|
||||||
|
|
||||||
if (module.ModuleDefinition != null && (module.ModuleDefinition.Runtimes == "" || module.ModuleDefinition.Runtimes.Contains(Runtime)))
|
// handle default action
|
||||||
|
if (action == Constants.DefaultAction && !string.IsNullOrEmpty(module.ModuleDefinition.DefaultAction))
|
||||||
{
|
{
|
||||||
page.Resources = ManagePageResources(page.Resources, module.ModuleDefinition.Resources, ResourceLevel.Module, alias, "Modules", Utilities.GetTypeName(module.ModuleDefinition.ModuleDefinitionName));
|
action = module.ModuleDefinition.DefaultAction;
|
||||||
|
}
|
||||||
|
|
||||||
// handle default action
|
// get typename template
|
||||||
if (action == Constants.DefaultAction && !string.IsNullOrEmpty(module.ModuleDefinition.DefaultAction))
|
typename = module.ModuleDefinition.ControlTypeTemplate;
|
||||||
|
if (module.ModuleDefinition.ControlTypeRoutes != "")
|
||||||
|
{
|
||||||
|
// process custom action routes
|
||||||
|
foreach (string route in module.ModuleDefinition.ControlTypeRoutes.Split(';', StringSplitOptions.RemoveEmptyEntries))
|
||||||
{
|
{
|
||||||
action = module.ModuleDefinition.DefaultAction;
|
if (route.StartsWith(action + "="))
|
||||||
}
|
|
||||||
|
|
||||||
// get typename template
|
|
||||||
typename = module.ModuleDefinition.ControlTypeTemplate;
|
|
||||||
if (module.ModuleDefinition.ControlTypeRoutes != "")
|
|
||||||
{
|
|
||||||
// process custom action routes
|
|
||||||
foreach (string route in module.ModuleDefinition.ControlTypeRoutes.Split(';', StringSplitOptions.RemoveEmptyEntries))
|
|
||||||
{
|
{
|
||||||
if (route.StartsWith(action + "="))
|
typename = route.Replace(action + "=", "");
|
||||||
{
|
break;
|
||||||
typename = route.Replace(action + "=", "");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// create typename
|
// create typename
|
||||||
if (Constants.DefaultModuleActions.Contains(action, StringComparer.OrdinalIgnoreCase))
|
if (Constants.DefaultModuleActions.Contains(action, StringComparer.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
typename = Constants.DefaultModuleActionsTemplate.Replace(Constants.ActionToken, action);
|
typename = Constants.DefaultModuleActionsTemplate.Replace(Constants.ActionToken, action);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
typename = typename.Replace(Constants.ActionToken, action);
|
typename = typename.Replace(Constants.ActionToken, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensure component exists and implements IModuleControl
|
// ensure component exists and implements IModuleControl
|
||||||
module.ModuleType = "";
|
module.ModuleType = "";
|
||||||
Type moduletype = Type.GetType(typename, false, true); // case insensitive
|
Type moduletype = Type.GetType(typename, false, true); // case insensitive
|
||||||
if (moduletype != null && moduletype.GetInterfaces().Contains(typeof(IModuleControl)))
|
if (moduletype != null && moduletype.GetInterfaces().Contains(typeof(IModuleControl)))
|
||||||
{
|
{
|
||||||
module.ModuleType = Utilities.GetFullTypeName(moduletype.AssemblyQualifiedName); // get actual type name
|
module.ModuleType = Utilities.GetFullTypeName(moduletype.AssemblyQualifiedName); // get actual type name
|
||||||
}
|
}
|
||||||
|
|
||||||
if (moduletype != null && module.ModuleType != "")
|
if (moduletype != null && module.ModuleType != "")
|
||||||
{
|
{
|
||||||
// retrieve module component resources
|
// retrieve module component resources
|
||||||
var moduleobject = Activator.CreateInstance(moduletype) as IModuleControl;
|
var moduleobject = Activator.CreateInstance(moduletype) as IModuleControl;
|
||||||
module.RenderMode = moduleobject.RenderMode;
|
module.RenderMode = moduleobject.RenderMode;
|
||||||
|
|
||||||
page.Resources = ManagePageResources(page.Resources, moduleobject.Resources, ResourceLevel.Module, alias, "Modules", moduletype.Namespace);
|
page.Resources = ManagePageResources(page.Resources, moduleobject.Resources, ResourceLevel.Module, alias, "Modules", moduletype.Namespace);
|
||||||
if (action.ToLower() == "settings" && module.ModuleDefinition != null)
|
if (action.ToLower() == "settings" && module.ModuleDefinition != null)
|
||||||
|
{
|
||||||
|
// settings components are embedded within a framework settings module
|
||||||
|
moduletype = Type.GetType(module.ModuleDefinition.ControlTypeTemplate.Replace(Constants.ActionToken, action), false, true);
|
||||||
|
if (moduletype != null)
|
||||||
{
|
{
|
||||||
// settings components are embedded within a framework settings module
|
moduleobject = Activator.CreateInstance(moduletype) as IModuleControl;
|
||||||
moduletype = Type.GetType(module.ModuleDefinition.ControlTypeTemplate.Replace(Constants.ActionToken, action), false, true);
|
page.Resources = ManagePageResources(page.Resources, moduleobject.Resources, ResourceLevel.Module, alias, "Modules", moduletype.Namespace);
|
||||||
if (moduletype != null)
|
|
||||||
{
|
|
||||||
moduleobject = Activator.CreateInstance(moduletype) as IModuleControl;
|
|
||||||
page.Resources = ManagePageResources(page.Resources, moduleobject.Resources, ResourceLevel.Module, alias, "Modules", moduletype.Namespace);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// additional metadata needed for admin components
|
|
||||||
if (module.ModuleId == moduleid && action != "")
|
|
||||||
{
|
|
||||||
module.ControlTitle = moduleobject.Title;
|
|
||||||
module.SecurityAccessLevel = moduleobject.SecurityAccessLevel;
|
|
||||||
module.Actions = moduleobject.Actions;
|
|
||||||
module.UseAdminContainer = moduleobject.UseAdminContainer;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate that module's pane exists in current page
|
// additional metadata needed for admin components
|
||||||
if (page.Panes.FindIndex(item => item.Equals(module.Pane, StringComparison.OrdinalIgnoreCase)) == -1)
|
if (module.ModuleId == moduleid && action != "")
|
||||||
{
|
{
|
||||||
// fallback to default pane if it exists
|
module.ControlTitle = moduleobject.Title;
|
||||||
if (page.Panes.FindIndex(item => item.Equals(PaneNames.Default, StringComparison.OrdinalIgnoreCase)) != -1)
|
module.SecurityAccessLevel = moduleobject.SecurityAccessLevel;
|
||||||
{
|
module.Actions = moduleobject.Actions;
|
||||||
module.Pane = PaneNames.Default;
|
module.UseAdminContainer = moduleobject.UseAdminContainer;
|
||||||
}
|
|
||||||
else // otherwise admin pane (legacy)
|
|
||||||
{
|
|
||||||
module.Pane = PaneNames.Admin;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// calculate module position within pane
|
// validate that module's pane exists in current page
|
||||||
if (paneindex.ContainsKey(module.Pane.ToLower()))
|
if (page.Panes.FindIndex(item => item.Equals(module.Pane, StringComparison.OrdinalIgnoreCase)) == -1)
|
||||||
|
{
|
||||||
|
// fallback to default pane if it exists
|
||||||
|
if (page.Panes.FindIndex(item => item.Equals(PaneNames.Default, StringComparison.OrdinalIgnoreCase)) != -1)
|
||||||
{
|
{
|
||||||
paneindex[module.Pane.ToLower()] += 1;
|
module.Pane = PaneNames.Default;
|
||||||
}
|
}
|
||||||
else
|
else // otherwise admin pane (legacy)
|
||||||
{
|
{
|
||||||
paneindex.Add(module.Pane.ToLower(), 0);
|
module.Pane = PaneNames.Admin;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module.PaneModuleIndex = paneindex[module.Pane.ToLower()];
|
// calculate module position within pane
|
||||||
|
if (paneindex.ContainsKey(module.Pane.ToLower()))
|
||||||
|
{
|
||||||
|
paneindex[module.Pane.ToLower()] += 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
paneindex.Add(module.Pane.ToLower(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
// container fallback
|
module.PaneModuleIndex = paneindex[module.Pane.ToLower()];
|
||||||
if (string.IsNullOrEmpty(module.ContainerType))
|
|
||||||
{
|
// container fallback
|
||||||
module.ContainerType = defaultcontainertype;
|
if (string.IsNullOrEmpty(module.ContainerType))
|
||||||
}
|
{
|
||||||
|
module.ContainerType = defaultcontainertype;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user