public static int ComparerIndex(Page a, Page b) { int r = a.Index.CompareTo(b.Index); if (r != 0) return r; return a.Name.CompareTo(b.Name); }
public Html Generate(Site site, Page page) { var t = new TemplateInstance(this); t.LastModified = page.LastModified; t["title"] = page.Title; t["contents"] = Html.Raw(Generator.Markdown.Transform(page.Content)); return t.ToHtml(); }
public void Add(Page p) { Pages.Add(p); }
static void LoadData(Site site) { //Scan for pages string[] pageFiles = Directory.GetFiles(site.DataPath, "*.page", SearchOption.AllDirectories); foreach (string pageFile in pageFiles) { Page p = new Page(site.DataPath, pageFile); //Ignore news pages if (p.HasDate) continue; site.Add(p); //Console.WriteLine("Page: " + p); } site.Pages.Sort(Page.ComparerIndex); //Scan for posts string[] postFiles = Directory.GetFiles(site.DataPath, "*.post", SearchOption.AllDirectories); foreach (string postFile in postFiles) { Post p = new Post(postFile); //Ignore non news pages if (p.Date == DateTime.MinValue) continue; site.Add(p); //Console.WriteLine("News: " + p); } site.Posts.Sort(Post.ComparerLatestFirst); }
static Html GenerateTabs(Site site, Page page, Post post) { //Find out if we have an index page Page indexPage = null; foreach (Page p in site.Pages) { if (p.Name == "index") { indexPage = p; break; } } Html tabs = new Html(); if (indexPage == null) tabs += LiTag(site.UrlPath, "", "News", page == null && post == null, DateTime.MinValue); else tabs += LiTag(site.UrlPath, indexPage.Title, indexPage.LinkTitle, page == indexPage, indexPage.LastModified); foreach (Page p in site.Pages) { if (p.LinkTitle == "") continue; if (p == indexPage) continue; tabs += LiTag(p.LinkUrl ?? site.UrlPath + p.Path, p.Title, p.LinkTitle, p == page, p.LastModified); } return tabs; }
static void GeneratePage(Site site, Page p, PageTemplate pageTemplate, IndexTemplate indexTemplate) { string dirPath = Path.Combine(site.WebPath, p.Path); if (p.Path == "index/") dirPath = site.WebPath; Directory.CreateDirectory(dirPath); if (Directory.Exists(p.SourceDir)) FileManager.Clone(p.SourceDir, dirPath); var indexInstance = indexTemplate.Create(site); indexInstance["title"] = p.Title; indexInstance["tabs"] = GenerateTabs(site, p, null); indexInstance["contents"] = pageTemplate.Generate(site, p); indexInstance.Write(Path.Combine(dirPath, "index.html")); }