public string Render(string templateFile, ViewModel viewmodel) { string fName = Path.GetFileName(templateFile); string fDir = Path.GetDirectoryName(templateFile); var descriptor = new SparkViewDescriptor(); descriptor.AddTemplate(fName); descriptor.TargetNamespace = "templates"; this.engine.ViewFolder = new FileSystemViewFolder(fDir); var view = (MarkdownPageTemplate)this.engine.CreateInstance(descriptor); StringWriter writer = new StringWriter(); try { view.Model = viewmodel; view.RenderView(writer); return writer.ToString(); } finally { this.engine.ReleaseInstance(view); } }
private static SparkViewDescriptor Desc(params string[] templates) { var desc = new SparkViewDescriptor(); foreach (string template in templates) desc.AddTemplate(template); return desc; }
public string RenderTemplate(string templateSource, object data) { var settings = new SparkSettings { PageBaseType = typeof(TestSparkView).Name }; settings.AddViewFolder(typeof (TestingViewFolder), new Dictionary<string, string> { {"templateSource", templateSource} }); settings.AddNamespace("OpenRasta.Codecs.Spark.Tests.TestObjects"); settings.AddNamespace("OpenRasta.Codecs.Spark.IntegrationTests"); settings.AddNamespace("OpenRasta.Codecs.Spark2.ViewHelpers"); settings.AddNamespace("System.Collections.Generic"); IWindsorContainer dependencies = CreateTestDependencies(); ISparkViewEngine sparkViewEngine = new SparkViewEngine(settings) { ExtensionFactory =dependencies.Resolve<ISparkExtensionFactory>() }; var descriptor = new SparkViewDescriptor(); descriptor.AddTemplate(TestingViewFolder.SingleTemplateName); var view = (TestSparkView)sparkViewEngine.CreateInstance(descriptor); view.Uris = new UriGenerator(DependencyManager.GetService<IUriResolver>()); view.ViewData = new TestViewData(data); return Render(view); }
public virtual string CompileView(string view) { var viewFactory = new SparkViewFactory(); var descriptor = new SparkViewDescriptor {Language = LanguageType.Javascript}; descriptor.AddTemplate(string.Format("{0}{1}{2}", ControllerContext.ViewFolder, Path.DirectorySeparatorChar, view)); ((IViewSourceLoaderContainer)viewFactory).ViewSourceLoader = Context.Services.ViewSourceLoader; var entry = viewFactory.Engine.CreateEntry(descriptor); return entry.SourceCode; }
private static void appendMasterPage(SparkViewDescriptor descriptor, ITemplate template) { if (template == null) { return; } descriptor.AddTemplate(template.ViewPath); var viewDescriptor = template.Descriptor as ViewDescriptor; if (viewDescriptor != null) { appendMasterPage(descriptor, viewDescriptor.Master); } }
/// <summary> /// Called by handler classes to instantiate a view. /// </summary> /// <param name="templates"></param> /// <returns></returns> public BaseView CreateView(params string[] templates) { // the engine is created in Global.Application_Start var viewEngine = (ISparkViewEngine) Context.Application["ViewEngine"]; // a descriptor is used to "key" the type of view to instantiate var descriptor = new SparkViewDescriptor(); foreach (string template in templates) descriptor.AddTemplate(template); // create the view to return and provides the http context var view = (BaseView) viewEngine.CreateInstance(descriptor); view.Context = Context; return view; }
private static void Stub(FileSystemInfo source, FileSystemInfo destination) { if (source.FullName.EndsWith(".spark")) { // At this time the destination is already copied and processed by // 'simple' text substitution, so destination should be processed. var settings = new SparkSettings(); settings.AddNamespace("System"); var engine = new SparkViewEngine(settings) {DefaultPageBaseType = typeof(Template).FullName}; var folder = new InMemoryViewFolder {{source.Name, File.ReadAllText(destination.FullName)}}; engine.ViewFolder = folder; var descriptor = new SparkViewDescriptor(); descriptor.AddTemplate(source.Name); var view = (Template) engine.CreateInstance(descriptor); var builder = new StringBuilder(); using (var output = new StringWriter(builder)) { view.RenderView(output); File.WriteAllText(destination.FullName, output.ToString()); } engine.ReleaseInstance(view); } else if (source.FullName.EndsWith(".tt")) { var generator = new TemplateGenerator(); if (!generator.ProcessTemplate(source.FullName, destination.FullName)) { var exception = new TemplateException(source.FullName); foreach (CompilerError error in generator.Errors) { exception.AddError(error.ErrorText); } throw exception; } } }
private string renderTemplate(ITemplate template, params ITemplate[] templates) { templates = templates ?? Enumerable.Empty<Template>().ToArray(); var descriptor = new SparkViewDescriptor(); descriptor.AddTemplate(template.ViewPath); templates.Each(x => descriptor.AddTemplate(x.ViewPath)); var instance = _engine.CreateInstance(descriptor); var writer = new StringWriter(); instance.RenderView(writer); return writer.ToString(); }
private static IList<SparkViewDescriptor> AllKnownDescriptors(SparkViewFactory viewFactory) { //build the batch var batch = new SparkBatchDescriptor(); batch .For<HomeController>().Layout("Application") .For<FirstController>().Layout("Application") .For<SecondController>().Layout("Application") .For<ThirdController>().Layout("Application") .For<FourthController>().Layout("Application") .For<FifthController>().Layout("Application") .For<SixthController>().Layout("Application") .For<SeventhController>().Layout("Application") .For<EigthController>().Layout("Application") .For<NinthController>().Layout("Application") .For<TenthController>().Layout("Application"); //find all the custom themes var themeMasters = new List<string>(); var themePath = ThemeDirectory + "\\"; var themedMasterFiles = Directory.GetFiles(themePath, "index.html", SearchOption.AllDirectories); foreach (var master in themedMasterFiles) { var themeMasterName = master.Remove(0, themePath.Length); themeMasters.Add(themeMasterName); } //adjust the batch to precompile for each custom theme var generatedDescriptors = viewFactory.CreateDescriptors(batch); var allDescriptors = new List<SparkViewDescriptor>(); foreach (var descriptor in generatedDescriptors) { allDescriptors.Add(descriptor); var isAppMaster = descriptor.Templates.Any(x => x.Contains("Application")); if (!isAppMaster) continue; foreach (var themeMaster in themeMasters) { var themeDescriptor = new SparkViewDescriptor() .SetLanguage(descriptor.Language) .SetTargetNamespace(descriptor.TargetNamespace) .AddTemplate(descriptor.Templates[0]); themeDescriptor.AddTemplate(themeMaster); allDescriptors.Add(themeDescriptor); } } return allDescriptors; }
/// <summary> /// Create view /// </summary> /// <param name="context">Context used creating view</param> /// <param name="viewUri">Path to view being created.</param> /// <param name="data">Data used.</param> /// <returns>Created view.</returns> /// <exception cref="ViewNotFoundException">Failed to find spark view.</exception> private SparkView GenerateView(IControllerContext context, string viewUri, IViewData data) { var descriptor = new SparkViewDescriptor(); descriptor.AddTemplate(viewUri); // Let's not include layouts for ajax requests. if (!context.RequestContext.Request.IsAjax) { string layoutUri = SelectLayoutName(context.LayoutName); descriptor.Templates.Add(layoutUri); } if (!MvcServer.CurrentMvc.ViewProvider.Exists(viewUri)) { _logger.Info("Failed to find " + viewUri); throw new ViewNotFoundException(viewUri, "Failed to find spark view '" + viewUri + "'."); } /* Disabled since types can be null. * // since we use strongly typed accessors, we need to loop through view data. // and add direct accessors. foreach (var viewData in data) { string typeName = GetTypeName(viewData.Value.GetType(), true); descriptor.AddAccessor(typeName + " " + viewData.Key, "(" + typeName + ")ViewData[\"" + viewData.Key + "\"]"); } */ ISparkViewEntry entry; try { entry = _engine.CreateEntry(descriptor); } catch(Exception err) { _logger.Warning("Failed to compile view.", err); throw new InternalServerException("Failed to compile view '" + viewUri + "'.", err); } // only lock when adding, to avoid duplicates. if (context.RequestContext.Request.IsAjax) { lock (_ajaxMappings) { Mapping mapping; if (!_ajaxMappings.TryGetValue(viewUri, out mapping)) { mapping = new Mapping(data.GetHashCode(), entry); _ajaxMappings.Add(viewUri, mapping); } else mapping.Add(data.GetHashCode(), entry); } } else { lock (_mappings) { Mapping mapping; if (!_mappings.TryGetValue(viewUri, out mapping)) { mapping = new Mapping(data.GetHashCode(), entry); _mappings.Add(viewUri, mapping); } else mapping.Add(data.GetHashCode(), entry); } } return (SparkView) entry.CreateInstance(); }
private IList<SparkViewDescriptor> ThemableDescriptors(SparkViewFactory viewFactory) { var generatedDescriptors = RootThemableDescriptors(viewFactory); var allDescriptors = new List<SparkViewDescriptor>(); foreach (var descriptor in generatedDescriptors) { var isAppMaster = descriptor.Templates.Any(x => x.Contains(ApplicationLayout)); if (!isAppMaster) continue; var themeDescriptor = new SparkViewDescriptor() .SetLanguage(descriptor.Language) .SetTargetNamespace(descriptor.TargetNamespace) .AddTemplate(descriptor.Templates[0]); themeDescriptor.AddTemplate(MasterPage); allDescriptors.Add(themeDescriptor); } return allDescriptors; }