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;
        }
Пример #4
0
 public void Alter(ClientRouteDescriptor descriptor) {
     foreach (var configuration in _configurations) {
         configuration(descriptor);
     }
 }