private string renderTemplate(IRazorTemplate template, params IRazorTemplate[] templates)
        {
            var descriptor = new ViewDescriptor <IRazorTemplate>(template);
            var current    = descriptor;

            for (var i = 0; i < templates.Length; ++i)
            {
                var layoutTemplate = templates[i];
                var layout         = new ViewDescriptor <IRazorTemplate>(layoutTemplate);
                layoutTemplate.Descriptor = layout;
                current.Master            = templates[i];
                current = layout;
            }

            var modifier    = new ViewModifierService <IFubuRazorView>(Enumerable.Empty <IViewModifier <IFubuRazorView> >());
            var viewFactory = new ViewFactory(descriptor, _templateService, modifier);
            var view        = (IFubuRazorView)viewFactory.GetView();

            view.ServiceLocator    = _serviceLocator;
            view.RenderPartialWith = name =>
            {
                var partialTemplate = _sharedTemplateLocator.LocatePartial(name, view.OriginTemplate);
                partialTemplate.Descriptor = new ViewDescriptor <IRazorTemplate>(partialTemplate);
                var partialView =
                    _templateService.GetView(partialTemplate.Descriptor.As <ViewDescriptor <IRazorTemplate> >());

                var partialRendered = partialView.Run(new ExecuteContext());
                return(new TemplateWriter(x => x.Write(partialRendered)));
            };
            return(view.Run(new ExecuteContext()));
        }
Beispiel #2
0
        private IFubuRazorView CreateInstance(bool partialOnly = false)
        {
            var currentDescriptor = _viewDescriptor;
            var returnTemplate    = _templateService.GetView(currentDescriptor);

            returnTemplate.OriginTemplate = _viewDescriptor.Template;
            var currentTemplate = returnTemplate;

            while (currentDescriptor.Master != null && !partialOnly)
            {
                currentDescriptor = currentDescriptor.Master.Descriptor.As <ViewDescriptor <IRazorTemplate> >();
                var layoutTemplate = _templateService.GetView(currentDescriptor);
                layoutTemplate.OriginTemplate = returnTemplate.OriginTemplate;
                currentTemplate.UseLayout(layoutTemplate);
                currentTemplate = layoutTemplate;
            }
            returnTemplate = _service.Modify(returnTemplate);
            return(returnTemplate);
        }
Beispiel #3
0
        public override IFubuRazorView Modify(IFubuRazorView view)
        {
            var temporary = view;

            while (temporary != null)
            {
                temporary.RenderPartialWith = name =>
                {
                    var template    = _locator.LocatePartial(name, view.OriginTemplate);
                    var partialView = _templateService.GetView(template.Descriptor.As <ViewDescriptor <IRazorTemplate> >());

                    var modifier = view.Get <IViewModifierService <IFubuRazorView> >();
                    partialView = modifier.Modify(partialView);

                    var partialRendered = partialView.Run(new ExecuteContext());
                    return(new TemplateWriter(x => x.Write(partialRendered)));
                };
                temporary = temporary.Layout.As <IFubuRazorView>();
            }
            return(view);
        }