private dynamic ConvertRouteDescriptor(ClientRouteDescriptor descriptor) { dynamic definition = new ExpandoObject(); definition.url = descriptor.Url ?? string.Empty; if (descriptor.Abstract != null) { definition.@abstract = descriptor.Abstract; } IDictionary<string, object> views = new ExpandoObject(); foreach (var viewDescriptor in descriptor.Views) { dynamic view = new ExpandoObject(); if (viewDescriptor.TemplateUrl != null) { view.templateUrl = new JRaw(viewDescriptor.TemplateUrl); } if (viewDescriptor.TemplateProvider != null) { view.templateProvider = new JRaw(viewDescriptor.TemplateProvider); } if (viewDescriptor.Controller != null) { view.controller = viewDescriptor.Controller; } views[viewDescriptor.Name ?? string.Empty] = view; } definition.views = views; if (descriptor.Dependencies != null) { definition.dependencies = descriptor.Dependencies; } return definition; }
private IEnumerable<ClientRouteDescriptor> GenerateRoutes(List<string> distinctRouteNames, List<ClientRouteAlteration> alterations) { var routes = new List<ClientRouteDescriptor>(); foreach (var routeName in distinctRouteNames) { var descriptor = new ClientRouteDescriptor {RouteName = routeName}; foreach (var alteration in alterations.Where(item => item.RouteName == routeName)) { alteration.Alter(descriptor); } routes.Add(descriptor); } routes = routes.OrderBy(item => new Regex(@"\.").Matches(item.RouteName).Count).ToList(); return routes; }
private IDictionary<string, object> GenerateRoutes(IEnumerable<ClientRouteNode> rootNodes, List<ClientRouteAlteration> alterations) { IDictionary<string, object> routes = new ExpandoObject(); foreach (var node in rootNodes) { var descriptor = new ClientRouteDescriptor {RouteName = node.Name}; foreach (var alteration in alterations.Where(a => a.RouteName == node.FullName).ToList()) { var feature = alteration.Feature; alteration.Alter(descriptor); } dynamic route = new ExpandoObject(); route.definition = ConvertRouteDescriptor(descriptor); if (node.Children != null && node.Children.Any()) route.children = GenerateRoutes(node.Children, alterations); routes[descriptor.RouteName] = route; } return routes; }
public void Alter(ClientRouteDescriptor descriptor) { foreach (var configuration in _configurations) { configuration(descriptor); } }