using System.Web; using System.Web.Mvc; using MarkdownDeep; namespace Yavsc.Helpers { /// /// Helper class for transforming Markdown. /// public static partial class MarkdownHelper { /// /// Transforms a string of Markdown into HTML. /// /// The Markdown that should be transformed. /// The HTML representation of the supplied Markdown. public static IHtmlString Markdown(string text) { // Transform the supplied text (Markdown) into HTML. var markdownTransformer = new Markdown(); markdownTransformer.ExtraMode = true; string html = markdownTransformer.Transform(text); // Wrap the html in an MvcHtmlString otherwise it'll be HtmlEncoded and displayed to the user as HTML :( return new MvcHtmlString(html); } /// /// Transforms a string of Markdown into HTML. /// /// HtmlHelper - Not used, but required to make this an extension method. /// The Markdown that should be transformed. /// The url Base Location. /// The HTML representation of the supplied Markdown. public static IHtmlString Markdown(this HtmlHelper helper, string text, string urlBaseLocation="") { // Transform the supplied text (Markdown) into HTML. var markdownTransformer = new Markdown(); markdownTransformer.ExtraMode = true; markdownTransformer.UrlBaseLocation = urlBaseLocation; string html = markdownTransformer.Transform(text); // Wrap the html in an MvcHtmlString otherwise it'll be HtmlEncoded and displayed to the user as HTML :( return new MvcHtmlString(html); } public static IHtmlString MarkdownToHtmlIntro(this HtmlHelper helper, out bool truncated, string text, string urlBaseLocation="") { int maxLen = 250; // Transform the supplied text (Markdown) into HTML. var markdownTransformer = new Markdown(); markdownTransformer.ExtraMode = true; markdownTransformer.UrlBaseLocation = urlBaseLocation; if (text.Length < maxLen) { truncated = false; return new MvcHtmlString(markdownTransformer.Transform(text)); } string intro = text.Remove (maxLen); truncated = true; int inl = intro.LastIndexOf ("\n"); if (inl > 20) intro = intro.Remove (inl); intro += " ..."; string html = markdownTransformer.Transform(intro); // Wrap the html in an MvcHtmlString otherwise it'll be HtmlEncoded and displayed to the user as HTML :( return new MvcHtmlString(html); } /// /// Transforms a string of Markdown into HTML. /// /// HtmlHelper - Not used, but required to make this an extension method. /// The Markdown that should be transformed. /// The HTML representation of the supplied Markdown. public static IHtmlString Markdown(this HtmlHelper helper, string text) { // Just call the other one, to avoid having two copies (we don't use the HtmlHelper). return Markdown(text); } } }