protected override string RenderTemplate(string content, PageContext pageData) { var serviceConfiguration = new TemplateServiceConfiguration { TemplateManager = new IncludesResolver(FileSystem, includesPath), BaseTemplateType = typeof(ExtensibleTemplate<>), DisableTempFileLocking = true, CachingProvider = new DefaultCachingProvider(t => { }) }; serviceConfiguration.Activator = new ExtensibleActivator(serviceConfiguration.Activator, Filters, _allTags); Engine.Razor = RazorEngineService.Create(serviceConfiguration); content = Regex.Replace(content, "<p>(@model .*?)</p>", "$1"); var pageContent = pageData.Content; pageData.Content = pageData.FullContent; try { content = Engine.Razor.RunCompile(content, pageData.Page.File, typeof(PageContext), pageData); pageData.Content = pageContent; return content; } catch (Exception e) { Tracing.Error(@"Failed to render template, falling back to direct content"); Tracing.Debug(e.Message); Tracing.Debug(e.StackTrace); return content; } }
protected override string RenderTemplate(string templateContents, PageContext pageData) { var data = CreatePageData(pageData); var template = Template.Parse(templateContents); Template.FileSystem = new Includes(Context.SourceFolder); return template.Render(data); }
private Hash CreatePageData(PageContext pageContext) { var y = Hash.FromDictionary(pageContext.Bag); if (y.ContainsKey("title")) { if (string.IsNullOrWhiteSpace(y["title"].ToString())) { y["title"] = context.Title; } } else { y.Add("title", context.Title); } var x = Hash.FromAnonymousObject(new { site = contextDrop, page = y, content = pageContext.Content }); return x; }
private Hash CreatePageData(PageContext pageContext) { var y = Hash.FromDictionary(pageContext.Bag); if (y.ContainsKey("title")) { if (string.IsNullOrWhiteSpace(y["title"].ToString())) { y["title"] = Context.Title; } } else { y.Add("title", Context.Title); } var x = Hash.FromAnonymousObject(new { site = contextDrop.ToHash(), wtftime = Hash.FromAnonymousObject(new { date = DateTime.Now }), page = y, content = pageContext.Content, paginator = pageContext.Paginator, }); return x; }
Hash CreatePageData(PageContext pageContext) { var y = Hash.FromDictionary(pageContext.Bag); if (y.ContainsKey("title")) { if (string.IsNullOrWhiteSpace(y["title"].ToString())) { y["title"] = Context.Title; } } else { y.Add("title", Context.Title); } var x = Hash.FromAnonymousObject(new { site = contextDrop.ToHash(), wtftime = Hash.FromAnonymousObject(new { date = DateTime.Now }), page = y, content = pageContext.Content,//)//Markdown.Transform(contents.ExcludeHeader()), }); if (Context.Config.ContainsKey("paginate") && pageContext.OutputPath.EndsWith("index.html")) { x.Add("paginator", new Paginator(Context)); } return x; }
protected override string RenderTemplate(string content, PageContext pageData) { var includesPath = Path.Combine(pageData.Site.SourceFolder, "_includes"); var serviceConfig = new TemplateServiceConfiguration { Resolver = new IncludesResolver(FileSystem, includesPath) }; RazorEngine.Razor.SetTemplateService(new TemplateService(serviceConfig)); content = Regex.Replace(content, "<p>(@model .*?)</p>", "$1"); return RazorEngine.Razor.Parse(content, pageData); }
protected override string RenderTemplate(string templateContents, PageContext pageData) { // Replace all em HTML tags in liquid tags ({{ or {%) by underscores templateContents = emHtmlRegex.Replace(templateContents, "_"); var data = CreatePageData(pageData); var template = Template.Parse(templateContents); var output = template.Render(data); return output; }
public PageContext(PageContext context) { Title = context.Title; OutputPath = context.OutputPath; Bag = context.Bag; Content = context.Content; Site = context.Site; Page = context.Page; Previous = context.Previous; Next = context.Next; Paginator = context.Paginator; }
public PageContext(PageContext context) { Title = context.Title; OutputPath = context.OutputPath; Bag = new Dictionary<string, object>(context.Bag); Content = context.Content; Site = context.Site; Page = context.Page; Previous = context.Previous; Next = context.Next; Paginator = context.Paginator; }
public static PageContext FromDictionary(IDictionary<string, object> metadata, string outputPath, string defaultOutputPath) { var context = new PageContext { OutputPath = metadata.ContainsKey("permalink") ? Path.Combine(outputPath, metadata["permalink"].ToString().ToRelativeFile()) : defaultOutputPath }; if (metadata.ContainsKey("title")) { context.Title = metadata["title"].ToString(); } context.Bag = metadata; return context; }
protected override string RenderTemplate(string content, PageContext pageData) { var includesPath = Path.Combine(pageData.Site.SourceFolder, "_includes"); var serviceConfig = new TemplateServiceConfiguration { Resolver = new IncludesResolver(FileSystem, includesPath), BaseTemplateType = typeof (ExtensibleTemplate<>) }; serviceConfig.Activator = new ExtensibleActivator(serviceConfig.Activator, Filters); RazorEngine.Razor.SetTemplateService(new TemplateService(serviceConfig)); content = Regex.Replace(content, "<p>(@model .*?)</p>", "$1"); try { return RazorEngine.Razor.Parse(content, pageData); } catch (Exception) { Console.WriteLine(@"Failed to render template, falling back to direct content"); return content; } }
public static PageContext FromPage(SiteContext siteContext, Page page, string outputPath, string defaultOutputPath) { var context = new PageContext(siteContext, page); if (page.Bag.ContainsKey("permalink") || siteContext.Config.ContainsKey("permalink")) { context.OutputPath = Path.Combine(outputPath, page.Url.ToRelativeFile()); } else { context.OutputPath = defaultOutputPath; page.Bag.Add("permalink", page.File); } if (context.OutputPath.EndsWith(Path.DirectorySeparatorChar.ToString())) { context.OutputPath = Path.Combine(context.OutputPath, "index.html"); } page.OutputFile = context.OutputPath; if (page.Bag.ContainsKey("title")) { context.Title = page.Bag["title"].ToString(); } if (string.IsNullOrEmpty(context.Title)) { context.Title = siteContext.Title; } context.Content = page.Content; context.FullContent = page.Content; context.Bag = page.Bag; context.Bag["id"] = page.Id; context.Bag["url"] = page.Url; return context; }
protected override string RenderTemplate(string content, PageContext pageData) { var serviceConfiguration = new TemplateServiceConfiguration { TemplateManager = new IncludesResolver(FileSystem, includesPath), BaseTemplateType = typeof(ExtensibleTemplate<>) }; serviceConfiguration.Activator = new ExtensibleActivator(serviceConfiguration.Activator, Filters, Tags); Engine.Razor = RazorEngineService.Create(serviceConfiguration); content = Regex.Replace(content, "<p>(@model .*?)</p>", "$1"); try { return Engine.Razor.RunCompile(content, pageData.Page.File, typeof(PageContext), pageData); } catch (Exception ex) { Tracing.Debug(ex.Message + Environment.NewLine + ex.StackTrace); Console.WriteLine(@"Failed to render template, falling back to direct content"); return content; } }
public static PageContext FromPage(Page page, string outputPath, string defaultOutputPath) { var context = new PageContext(); if (page.Bag.ContainsKey("permalink")) { context.OutputPath = Path.Combine(outputPath, page.Url.ToRelativeFile()); } else { context.OutputPath = defaultOutputPath; page.Bag.Add("permalink", page.File); } if (page.Bag.ContainsKey("title")) { context.Title = page.Bag["title"].ToString(); } context.Content = page.Content; context.Bag = page.Bag; context.Bag.Add("id", page.Id); context.Bag.Add("url", page.Url); return context; }
protected abstract string RenderTemplate(string content, PageContext pageData);
private IDictionary<string, object> ProcessTemplate(PageContext pageContext, string path) { var templateFile = FileSystem.File.ReadAllText(path); var metadata = templateFile.YamlHeader(); var templateContent = templateFile.ExcludeHeader(); pageContext.Content = RenderTemplate(templateContent, pageContext); return metadata; }
protected override string RenderTemplate(string content, PageContext pageData) { content = Regex.Replace(content, "<p>(@model .*?)</p>", "$1"); return RazorEngine.Razor.Parse(content, pageData); }
private void ProcessFile(string outputDirectory, Page page, Page previous, Page next, bool skipFileOnError, string relativePath = "") { if (string.IsNullOrWhiteSpace(relativePath)) relativePath = MapToOutputPath(page.File); page.OutputFile = Path.Combine(outputDirectory, relativePath); var extension = Path.GetExtension(page.File); if (extension.IsImageFormat()) { CreateOutputDirectory(page.OutputFile); CopyFileIfSourceNewer(page.File, page.OutputFile, true); return; } if (page is NonProcessedPage) { CreateOutputDirectory(page.OutputFile); CopyFileIfSourceNewer(page.File, page.OutputFile, true); return; } if (extension.IsMarkdownFile() || extension.IsRazorFile()) page.OutputFile = page.OutputFile.Replace(extension, ".html"); var pageContext = PageContext.FromPage(Context, page, outputDirectory, page.OutputFile); pageContext.Previous = previous; pageContext.Next = next; var pageContexts = new List<PageContext> { pageContext }; object paginateObj; if (page.Bag.TryGetValue("paginate", out paginateObj)) { var paginate = Convert.ToInt32(paginateObj); var totalPages = (int)Math.Ceiling(Context.Posts.Count / Convert.ToDouble(paginateObj)); var paginator = new Paginator(Context, totalPages, paginate, 1); pageContext.Paginator = paginator; var paginateLink = "/page/:page/index.html"; if (page.Bag.ContainsKey("paginate_link")) paginateLink = Convert.ToString(page.Bag["paginate_link"]); var prevLink = page.Url; for (var i = 2; i <= totalPages; i++) { var newPaginator = new Paginator(Context, totalPages, paginate, i) { PreviousPageUrl = prevLink }; var link = paginateLink.Replace(":page", Convert.ToString(i)); paginator.NextPageUrl = link; paginator = newPaginator; prevLink = link; var path = Path.Combine(outputDirectory, link.ToRelativeFile()); if (path.EndsWith(FileSystem.Path.DirectorySeparatorChar.ToString())) { path = Path.Combine(path, "index.html"); } var context = new PageContext(pageContext) { Paginator = newPaginator, OutputPath = path }; context.Bag["url"] = link; pageContexts.Add(context); } } foreach (var context in pageContexts) { var metadata = page.Bag; var failed = false; var excerptSeparator = context.Bag.ContainsKey("excerpt_separator") ? context.Bag["excerpt_separator"].ToString() : Context.ExcerptSeparator; try { context.Bag["excerpt"] = GetContentExcerpt(RenderTemplate(context.Content, context), excerptSeparator); } catch (Exception ex) { if (!skipFileOnError) { var message = string.Format("Failed to process {0}, see inner exception for more details", context.OutputPath); throw new PageProcessingException(message, ex); } Console.WriteLine(@"Failed to process {0}, see inner exception for more details", context.OutputPath); continue; } while (metadata.ContainsKey("layout")) { var layout = metadata["layout"]; if ((string)layout == "nil" || layout == null) break; var path = FindLayoutPath(layout.ToString()); if (path == null) break; try { metadata = ProcessTemplate(context, path); } catch (Exception ex) { if (!skipFileOnError) { var message = string.Format("Failed to process layout {0} for {1}, see inner exception for more details", layout, context.OutputPath); throw new PageProcessingException(message, ex); } Console.WriteLine(@"Failed to process layout {0} for {1} because '{2}'. Skipping file", layout, context.OutputPath, ex.Message); failed = true; break; } } if (failed) continue; try { context.Content = RenderTemplate(context.Content, context); } catch (Exception ex) { if (!skipFileOnError) { var message = string.Format("Failed to process {0}, see inner exception for more details", context.OutputPath); throw new PageProcessingException(message, ex); } Console.WriteLine(@"Failed to process {0}, see inner exception for more details", context.OutputPath); continue; } CreateOutputDirectory(context.OutputPath); FileSystem.File.WriteAllText(context.OutputPath, context.Content); } }
protected override string RenderTemplate(string content, PageContext pageData) { throw new NotImplementedException(); }
private static Hash CreatePageData(SiteContext context, PageContext pageContext) { var title = string.IsNullOrWhiteSpace(pageContext.Title) ? context.Title : pageContext.Title; var drop = new SiteContextDrop(context); return Hash.FromAnonymousObject(new { site = drop, page = new { title }, content = pageContext.Content }); }