public static string LoadAtom() { var config = Settings.Load(); string site = config.SiteUrl; if (string.IsNullOrEmpty(site)) { return(string.Empty); } string id = "DownSiteID"; SyndicationFeed feed = new SyndicationFeed(config.SiteName ?? "Test", config.SiteDescription ?? "Test", new Uri(site), id, DateTime.Now); List <SyndicationItem> items = new List <SyndicationItem>(); var blog = Database.Db.Select <Article>(x => x.ShowInBlog).OrderByDescending(x => x.Created); foreach (var a in blog) { string html = new CustomMarkdownSharp.Markdown() { Static = true }.Transform(a.Content); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); string text = new HtmlToText().ConvertHtml(html); SyndicationItem item = new SyndicationItem(a.Title, text, new Uri(site + a.Link), a.Id.ToString(), a.Created); items.Add(item); } feed.Items = items; Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed); MemoryStream mem = new MemoryStream(); using (var writer = System.Xml.XmlWriter.Create(mem, new System.Xml.XmlWriterSettings() { Encoding = Encoding.UTF8, OmitXmlDeclaration = false })) atomFormatter.WriteTo(writer); string ret = Encoding.UTF8.GetString(mem.ToArray()); return(ret); }
//[AddHeader(ContentType = MimeTypes.Html)] public object GetHtml(Article request, bool staticpage = false) { var preview = Request != null?Request.AbsoluteUri.EndsWith("?preview") : false; //var article = Database.db.Single<Article>(x => x.Title == request.Title || x.Id == request.Id); var article = Database.Db.LoadSelect <Article>(x => x.Title == request.Title || x.Id == request.Id).SingleOrDefault(); if (article == null) { return(new HttpResult(HttpStatusCode.NotFound, "no such article.")); } //var author = Database.db.Single<User>(x => x.Id == article.AuthorId); //var category = string.Join(",", Database.db.Select<Category>(x => x.ArticleId == article.Id).OrderBy(x => x.Name).Select(x => x.Name)); var category = article.Category != null?string.Join(",", article.Category.OrderBy(x => x.Name).Select(x => x.Name)) : ""; if (article.Author != null) { article.AuthorName = article.Author.UserName; } else { article.AuthorName = "unknown author"; } //var parts = Database.db.Select<Part>(x => x.ArticleId == article.Id).OrderBy(x => x.Number).ToArray(); string header = "<h1>" + article.Title + "</h1><p>" + (article.AuthorName ?? "unknown author") + ", " + article.Created + " [" + category + "]</p>"; string html = ""; string previewtext = ""; if (!string.IsNullOrWhiteSpace(article.Content)) { if (preview) { previewtext += new HtmlToText().ConvertHtml(article.Content); } else { html += new CustomMarkdownSharp.Markdown() { Static = staticpage } }.Transform(article.Content);
public static string Preview(string markdown, bool staticpage = false) { string html = new CustomMarkdownSharp.Markdown() { Static = staticpage }.Transform(markdown); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); string text = new HtmlToText().ConvertHtml(html); if (text.Length > 50) { text = text.Substring(0, 50); } bool br_inserted = false; { var imgs = doc.DocumentNode.SelectNodes("//img"); if (imgs != null) { foreach (HtmlNode img in imgs) { string url = img.GetAttributeValue("src", null); if (url != null && url.Length > 1 && url[0] == '/' && url[1] != '/') { if (url.StartsWith("/image/")) { url = url.Substring(7); url = Path.GetFileNameWithoutExtension(url); url = url.Split(Constants.Seperator[0])[0]; url += Constants.Seperator + "thumb.jpg"; url = "/image/" + url; if (!br_inserted) { text += "<br/>"; br_inserted = true; } text += string.Format(@"<img src=""{0}""/>", url); } } } } } { var videos = doc.DocumentNode.SelectNodes("//video"); if (videos != null) { foreach (HtmlNode video in videos) { string url = video.GetAttributeValue("src", null); if (url != null && url.Length > 1 && url[0] == '/' && url[1] != '/') { if (url.StartsWith("/image/")) { url = url.Substring(7); url = Path.GetFileNameWithoutExtension(url); url = url.Split(Constants.Seperator[0])[0]; url += Constants.Seperator + "thumb.jpg"; url = "/image/" + url; if (!br_inserted) { text += "<br/>"; br_inserted = true; } text += string.Format(@"<img src=""{0}""/>", url); } } } } } Regex regex = new Regex(@"!\[youtube\]\(([A-Za-z0-9\-]+)\)"); Match match = regex.Match(markdown); if (match.Success) { do { string youtube_id = match.Groups[1].Value; text += string.Format(@"<img src=""{0}""/>", "https://img.youtube.com/vi/" + youtube_id + "/1.jpg"); match = match.NextMatch(); }while (match.Success); } return(text); }