public void LinkSyntaxParser_Does_Not_Parses_Links() { var parser = new LinkSyntaxParser(); var output = parser.Parse("<p><a href=\"http://www.linkedsite.com\"><img src=\"../../../../Content/Media/e74f82351b0b4a35819e6373e3fbfddc/testimage.png\" alt=\"linked site\" width=\"170\" height=\"64\" data-umbraco-link=\"internal\" data-umbraco-src=\"media$empty_root$$_p__nhibernate$_v__guid$_c2f2015e7e724d2a822a9ff000f20224\" /></a></p>", (hiveId) => "replacement_link"); Assert.IsTrue(output == "<p><a href=\"http://www.linkedsite.com\"><img src=\"replacement_link\" alt=\"linked site\" width=\"170\" height=\"64\" /></a></p>"); }
public void LinkSyntaxParser_Parses_Links() { var parser = new LinkSyntaxParser(); var output = parser.Parse(@"<p>Lorem <a href=""" + HiveId.Empty.ToString() + @""" title=""ipsum"" data-umbraco-link=""internal"">ipsum</a> dolar <a href=""" + HiveId.Empty.ToString() + @""" title=""sit"" data-umbraco-link=""internal"">sit</a> amet.</p>", (hiveId) => "replacement_link"); Assert.IsTrue(output == @"<p>Lorem <a href=""replacement_link"" title=""ipsum"" >ipsum</a> dolar <a href=""replacement_link"" title=""sit"" >sit</a> amet.</p>"); }
public IHtmlString RenderField(IRoutableRequestContext routableRequestContext, ControllerContext controllerContext, Content item, string fieldAlias = "", string valueAlias = "", string altFieldAlias = "", string altValueAlias = "", string altText = "", string insertBefore = "", string insertAfter = "", bool recursive = false, bool convertLineBreaks = false, bool removeParagraphTags = false, UmbracoRenderItemCaseType casing = UmbracoRenderItemCaseType.Unchanged, UmbracoRenderItemEncodingType encoding = UmbracoRenderItemEncodingType.Unchanged) { var sb = new StringBuilder(); // Handle hard coded "friendly" system keys if (fieldAlias == "Name" || fieldAlias == "UrlName") { valueAlias = fieldAlias; fieldAlias = NodeNameAttributeDefinition.AliasValue; } if (fieldAlias == "CurrentTemplateId") { fieldAlias = SelectedTemplateAttributeDefinition.AliasValue; valueAlias = "TemplateId"; } if (altFieldAlias == "Name" || altFieldAlias == "UrlName") { altValueAlias = altFieldAlias; altFieldAlias = NodeNameAttributeDefinition.AliasValue; } if (altFieldAlias == "CurrentTemplateId") { altFieldAlias = SelectedTemplateAttributeDefinition.AliasValue; altValueAlias = "TemplateId"; } var val = item.Field<string>(fieldAlias, valueAlias, recursive); if (val.IsNullOrWhiteSpace() && !altFieldAlias.IsNullOrWhiteSpace()) { val = item.Field<string>(altFieldAlias, altValueAlias, recursive); } if (val.IsNullOrWhiteSpace() && !altText.IsNullOrWhiteSpace()) { val = altText; } if(!val.IsNullOrWhiteSpace()) { switch (casing) { case UmbracoRenderItemCaseType.Upper: val = val.ToUpper(); break; case UmbracoRenderItemCaseType.Lower: val = val.ToLower(); break; case UmbracoRenderItemCaseType.Title: val = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(val); break; default: break; } switch (encoding) { case UmbracoRenderItemEncodingType.Url: val = HttpUtility.UrlEncode(val); break; case UmbracoRenderItemEncodingType.Html: val = HttpUtility.HtmlEncode(val); break; default: break; } if (convertLineBreaks) { val = val.Replace(Environment.NewLine, "<br />"); } if (removeParagraphTags) { val = val.Trim().Trim("<p>").Trim("</p>"); } sb.Append(HttpUtility.HtmlDecode(insertBefore)); sb.Append(val); sb.Append(HttpUtility.HtmlDecode(insertAfter)); } //now we need to parse the macro syntax out and replace it with the rendered macro content var macroRenderer = new MacroRenderer(routableRequestContext.RegisteredComponents, routableRequestContext); var macroParser = new MacroSyntaxParser(); IEnumerable<MacroParserResult> parseResults; var parsed = macroParser.Parse(sb.ToString(), (macroAlias, macroParams) => macroRenderer.RenderMacroAsString(macroAlias, macroParams, controllerContext, false, () => item), out parseResults); //now we need to parse any internal links and replace with actual URLs var linkParse = new LinkSyntaxParser(); parsed = linkParse.Parse(parsed, x => routableRequestContext.RoutingEngine.GetUrl(x)); return new MvcHtmlString(parsed); }
public IHtmlString RenderField(IRoutableRequestContext routableRequestContext, ControllerContext controllerContext, Content item, string fieldAlias = "", string valueAlias = "", string altFieldAlias = "", string altValueAlias = "", string altText = "", string insertBefore = "", string insertAfter = "", bool recursive = false, bool convertLineBreaks = false, bool removeParagraphTags = false, UmbracoRenderItemCaseType casing = UmbracoRenderItemCaseType.Unchanged, UmbracoRenderItemEncodingType encoding = UmbracoRenderItemEncodingType.Unchanged, string formatString = "") { var sb = new StringBuilder(); var valObj = GetFieldValue(item, fieldAlias, valueAlias, recursive); if ((valObj == null || valObj.ToString().IsNullOrWhiteSpace()) && !altFieldAlias.IsNullOrWhiteSpace()) { valObj = GetFieldValue(item, altFieldAlias, altValueAlias, recursive); } if ((valObj == null || valObj.ToString().IsNullOrWhiteSpace()) && !altText.IsNullOrWhiteSpace()) { valObj = altText; } if(!formatString.IsNullOrWhiteSpace()) formatString = "{0:" + formatString.Replace("\\", "\\\\").Replace("\"", "\\\"") + "}"; else formatString = "{0}"; var val = string.Format(formatString, valObj); if(!val.IsNullOrWhiteSpace()) { switch (casing) { case UmbracoRenderItemCaseType.Upper: val = val.ToUpper(); break; case UmbracoRenderItemCaseType.Lower: val = val.ToLower(); break; case UmbracoRenderItemCaseType.Title: val = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(val); break; default: break; } switch (encoding) { case UmbracoRenderItemEncodingType.Url: val = HttpUtility.UrlEncode(val); break; case UmbracoRenderItemEncodingType.Html: val = HttpUtility.HtmlEncode(val); break; default: break; } if (convertLineBreaks) { val = val.Replace(Environment.NewLine, "<br />"); } if (removeParagraphTags) { val = val.Trim().Trim("<p>").Trim("</p>"); } sb.Append(HttpUtility.HtmlDecode(insertBefore)); sb.Append(val); sb.Append(HttpUtility.HtmlDecode(insertAfter)); } //now we need to parse the macro syntax out and replace it with the rendered macro content var macroRenderer = new MacroRenderer(routableRequestContext.RegisteredComponents, routableRequestContext); var macroParser = new MacroSyntaxParser(); IEnumerable<MacroParserResult> parseResults; var parsed = macroParser.Parse(sb.ToString(), (macroAlias, macroParams) => macroRenderer.RenderMacroAsString(macroAlias, macroParams, controllerContext, false, () => item), out parseResults); //now we need to parse any internal links and replace with actual URLs var linkParse = new LinkSyntaxParser(); parsed = linkParse.Parse(parsed, x => routableRequestContext.RoutingEngine.GetUrl(x)); return new MvcHtmlString(parsed); }
public IHtmlString RenderField(IRoutableRequestContext routableRequestContext, ControllerContext controllerContext, Content item, string fieldAlias = "", string valueAlias = "", string altFieldAlias = "", string altValueAlias = "", string altText = "", string insertBefore = "", string insertAfter = "", bool recursive = false, bool convertLineBreaks = false, bool removeParagraphTags = false, UmbracoRenderItemCaseType casing = UmbracoRenderItemCaseType.Unchanged, UmbracoRenderItemEncodingType encoding = UmbracoRenderItemEncodingType.Unchanged) { var sb = new StringBuilder(); // Handle hard coded "friendly" system keys if (fieldAlias == "Name" || fieldAlias == "UrlName") { valueAlias = fieldAlias; fieldAlias = NodeNameAttributeDefinition.AliasValue; } if (fieldAlias == "CurrentTemplateId") { fieldAlias = SelectedTemplateAttributeDefinition.AliasValue; valueAlias = "TemplateId"; } if (altFieldAlias == "Name" || altFieldAlias == "UrlName") { altValueAlias = altFieldAlias; altFieldAlias = NodeNameAttributeDefinition.AliasValue; } if (altFieldAlias == "CurrentTemplateId") { altFieldAlias = SelectedTemplateAttributeDefinition.AliasValue; altValueAlias = "TemplateId"; } var val = item.Field <string>(fieldAlias, valueAlias, recursive); if (val.IsNullOrWhiteSpace() && !altFieldAlias.IsNullOrWhiteSpace()) { val = item.Field <string>(altFieldAlias, altValueAlias, recursive); } if (val.IsNullOrWhiteSpace() && !altText.IsNullOrWhiteSpace()) { val = altText; } if (!val.IsNullOrWhiteSpace()) { switch (casing) { case UmbracoRenderItemCaseType.Upper: val = val.ToUpper(); break; case UmbracoRenderItemCaseType.Lower: val = val.ToLower(); break; case UmbracoRenderItemCaseType.Title: val = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(val); break; default: break; } switch (encoding) { case UmbracoRenderItemEncodingType.Url: val = HttpUtility.UrlEncode(val); break; case UmbracoRenderItemEncodingType.Html: val = HttpUtility.HtmlEncode(val); break; default: break; } if (convertLineBreaks) { val = val.Replace(Environment.NewLine, "<br />"); } if (removeParagraphTags) { val = val.Trim().Trim("<p>").Trim("</p>"); } sb.Append(HttpUtility.HtmlDecode(insertBefore)); sb.Append(val); sb.Append(HttpUtility.HtmlDecode(insertAfter)); } //now we need to parse the macro syntax out and replace it with the rendered macro content var macroRenderer = new MacroRenderer(routableRequestContext.RegisteredComponents, routableRequestContext); var macroParser = new MacroSyntaxParser(); IEnumerable <MacroParserResult> parseResults; var parsed = macroParser.Parse(sb.ToString(), (macroAlias, macroParams) => macroRenderer.RenderMacroAsString(macroAlias, macroParams, controllerContext, false, () => item), out parseResults); //now we need to parse any internal links and replace with actual URLs var linkParse = new LinkSyntaxParser(); parsed = linkParse.Parse(parsed, x => routableRequestContext.RoutingEngine.GetUrl(x)); return(new MvcHtmlString(parsed)); }