/// <summary> /// Renders the macro script. /// </summary> /// <param name="helper">The helper.</param> /// <param name="language">The language.</param> /// <param name="fileLocation">The file location.</param> /// <param name="parameters">The parameters.</param> /// <returns></returns> public static IHtmlString RenderMacroScript(this UmbracoHelper helper, string language, string fileLocation, IDictionary <string, object> parameters) { var ctrl = new umbraco.presentation.templateControls.Macro() { Language = language, FileLocation = fileLocation, }; foreach (var parameter in parameters) { ctrl.Attributes.Add(parameter.Key, parameter.Value.ToString()); } return(new HtmlString(TemplateUtilities.ParseInternalLinks(ctrl.RenderToString()))); }
/// <summary> /// Renders the macro script. /// </summary> /// <param name="helper">The helper.</param> /// <param name="language">The language.</param> /// <param name="fileLocation">The file location.</param> /// <param name="parameters">The parameters.</param> /// <returns></returns> public static IHtmlString RenderMacroScript(this UmbracoHelper helper, string language, string fileLocation, IDictionary<string, object> parameters) { var ctrl = new umbraco.presentation.templateControls.Macro() { Language = language, FileLocation = fileLocation, }; foreach (var parameter in parameters) { ctrl.Attributes.Add(parameter.Key, parameter.Value.ToString()); } return new HtmlString(TemplateUtilities.ParseInternalLinks(ctrl.RenderToString())); }
public Control parseStringBuilder(StringBuilder tempOutput, page umbPage) { Control pageContent = new Control(); bool stop = false; bool debugMode = umbraco.presentation.UmbracoContext.Current.Request.IsDebug; while (!stop) { System.Web.HttpContext.Current.Trace.Write("template", "Begining of parsing rutine..."); int tagIndex = tempOutput.ToString().ToLower().IndexOf("<?umbraco"); if (tagIndex > -1) { String tempElementContent = ""; pageContent.Controls.Add(new LiteralControl(tempOutput.ToString().Substring(0, tagIndex))); tempOutput.Remove(0, tagIndex); String tag = tempOutput.ToString().Substring(0, tempOutput.ToString().IndexOf(">") + 1); Hashtable attributes = helper.ReturnAttributes(tag); // Check whether it's a single tag (<?.../>) or a tag with children (<?..>...</?...>) if (tag.Substring(tag.Length - 2, 1) != "/" && tag.IndexOf(" ") > -1) { String closingTag = "</" + (tag.Substring(1, tag.IndexOf(" ") - 1)) + ">"; // Tag with children are only used when a macro is inserted by the umbraco-editor, in the // following format: "<?UMBRACO_MACRO ...><IMG SRC="..."..></?UMBRACO_MACRO>", so we // need to delete extra information inserted which is the image-tag and the closing // umbraco_macro tag if (tempOutput.ToString().IndexOf(closingTag) > -1) { tempOutput.Remove(0, tempOutput.ToString().IndexOf(closingTag)); } } System.Web.HttpContext.Current.Trace.Write("umbTemplate", "Outputting item: " + tag); // Handle umbraco macro tags if (tag.ToString().ToLower().IndexOf("umbraco_macro") > -1) { if (debugMode) { pageContent.Controls.Add(new LiteralControl("<div title=\"Macro Tag: '" + System.Web.HttpContext.Current.Server.HtmlEncode(tag) + "'\" style=\"border: 1px solid #009;\">")); } // NH: Switching to custom controls for macros if (UmbracoConfig.For.UmbracoSettings().Templates.UseAspNetMasterPages) { umbraco.presentation.templateControls.Macro macroControl = new umbraco.presentation.templateControls.Macro(); macroControl.Alias = helper.FindAttribute(attributes, "macroalias"); IDictionaryEnumerator ide = attributes.GetEnumerator(); while (ide.MoveNext()) { if (macroControl.Attributes[ide.Key.ToString()] == null) { macroControl.Attributes.Add(ide.Key.ToString(), ide.Value.ToString()); } } pageContent.Controls.Add(macroControl); } else { macro tempMacro; String macroID = helper.FindAttribute(attributes, "macroid"); if (macroID != String.Empty) { tempMacro = getMacro(macroID); } else { tempMacro = macro.GetMacro(helper.FindAttribute(attributes, "macroalias")); } if (tempMacro != null) { try { Control c = tempMacro.renderMacro(attributes, umbPage.Elements, umbPage.PageID); if (c != null) { pageContent.Controls.Add(c); } else { System.Web.HttpContext.Current.Trace.Warn("Template", "Result of macro " + tempMacro.Name + " is null"); } } catch (Exception e) { System.Web.HttpContext.Current.Trace.Warn("Template", "Error adding macro " + tempMacro.Name, e); } } } if (debugMode) { pageContent.Controls.Add(new LiteralControl("</div>")); } } else { if (tag.ToLower().IndexOf("umbraco_getitem") > -1) { // NH: Switching to custom controls for items if (UmbracoConfig.For.UmbracoSettings().Templates.UseAspNetMasterPages) { umbraco.presentation.templateControls.Item itemControl = new umbraco.presentation.templateControls.Item(); itemControl.Field = helper.FindAttribute(attributes, "field"); IDictionaryEnumerator ide = attributes.GetEnumerator(); while (ide.MoveNext()) { if (itemControl.Attributes[ide.Key.ToString()] == null) { itemControl.Attributes.Add(ide.Key.ToString(), ide.Value.ToString()); } } pageContent.Controls.Add(itemControl); } else { try { if (helper.FindAttribute(attributes, "nodeId") != "" && int.Parse(helper.FindAttribute(attributes, "nodeId")) != 0) { cms.businesslogic.Content c = new umbraco.cms.businesslogic.Content(int.Parse(helper.FindAttribute(attributes, "nodeId"))); item umbItem = new item(c.getProperty(helper.FindAttribute(attributes, "field")).Value.ToString(), attributes); tempElementContent = umbItem.FieldContent; // Check if the content is published if (c.nodeObjectType == cms.businesslogic.web.Document._objectType) { try { cms.businesslogic.web.Document d = (cms.businesslogic.web.Document)c; if (!d.Published) { tempElementContent = ""; } } catch { } } } else { // NH adds Live Editing test stuff item umbItem = new item(umbPage.Elements, attributes); // item umbItem = new item(umbPage.PageElements[helper.FindAttribute(attributes, "field")].ToString(), attributes); tempElementContent = umbItem.FieldContent; } if (debugMode) { tempElementContent = "<div title=\"Field Tag: '" + System.Web.HttpContext.Current.Server.HtmlEncode(tag) + "'\" style=\"border: 1px solid #fc6;\">" + tempElementContent + "</div>"; } } catch (Exception e) { System.Web.HttpContext.Current.Trace.Warn("umbracoTemplate", "Error reading element (" + helper.FindAttribute(attributes, "field") + ")", e); } } } } tempOutput.Remove(0, tempOutput.ToString().IndexOf(">") + 1); tempOutput.Insert(0, tempElementContent); } else { pageContent.Controls.Add(new LiteralControl(tempOutput.ToString())); break; } } return(pageContent); }
public Control parseStringBuilder(StringBuilder tempOutput, page umbPage) { Control pageContent = new Control(); bool stop = false; bool debugMode = umbraco.presentation.UmbracoContext.Current.Request.IsDebug; while (!stop) { System.Web.HttpContext.Current.Trace.Write("template", "Begining of parsing rutine..."); int tagIndex = tempOutput.ToString().ToLower().IndexOf("<?umbraco"); if (tagIndex > -1) { String tempElementContent = ""; pageContent.Controls.Add(new LiteralControl(tempOutput.ToString().Substring(0, tagIndex))); tempOutput.Remove(0, tagIndex); String tag = tempOutput.ToString().Substring(0, tempOutput.ToString().IndexOf(">") + 1); Hashtable attributes = helper.ReturnAttributes(tag); // Check whether it's a single tag (<?.../>) or a tag with children (<?..>...</?...>) if (tag.Substring(tag.Length - 2, 1) != "/" && tag.IndexOf(" ") > -1) { String closingTag = "</" + (tag.Substring(1, tag.IndexOf(" ") - 1)) + ">"; // Tag with children are only used when a macro is inserted by the umbraco-editor, in the // following format: "<?UMBRACO_MACRO ...><IMG SRC="..."..></?UMBRACO_MACRO>", so we // need to delete extra information inserted which is the image-tag and the closing // umbraco_macro tag if (tempOutput.ToString().IndexOf(closingTag) > -1) { tempOutput.Remove(0, tempOutput.ToString().IndexOf(closingTag)); } } System.Web.HttpContext.Current.Trace.Write("umbTemplate", "Outputting item: " + tag); // Handle umbraco macro tags if (tag.ToString().ToLower().IndexOf("umbraco_macro") > -1) { if (debugMode) pageContent.Controls.Add(new LiteralControl("<div title=\"Macro Tag: '" + System.Web.HttpContext.Current.Server.HtmlEncode(tag) + "'\" style=\"border: 1px solid #009;\">")); // NH: Switching to custom controls for macros if (UmbracoSettings.UseAspNetMasterPages) { umbraco.presentation.templateControls.Macro macroControl = new umbraco.presentation.templateControls.Macro(); macroControl.Alias = helper.FindAttribute(attributes, "macroalias"); IDictionaryEnumerator ide = attributes.GetEnumerator(); while (ide.MoveNext()) if (macroControl.Attributes[ide.Key.ToString()] == null) macroControl.Attributes.Add(ide.Key.ToString(), ide.Value.ToString()); pageContent.Controls.Add(macroControl); } else { macro tempMacro; String macroID = helper.FindAttribute(attributes, "macroid"); if (macroID != String.Empty) tempMacro = getMacro(macroID); else tempMacro = macro.GetMacro(helper.FindAttribute(attributes, "macroalias")); if (tempMacro != null) { try { Control c = tempMacro.renderMacro(attributes, umbPage.Elements, umbPage.PageID); if (c != null) pageContent.Controls.Add(c); else System.Web.HttpContext.Current.Trace.Warn("Template", "Result of macro " + tempMacro.Name + " is null"); } catch (Exception e) { System.Web.HttpContext.Current.Trace.Warn("Template", "Error adding macro " + tempMacro.Name, e); } } } if (debugMode) pageContent.Controls.Add(new LiteralControl("</div>")); } else { if (tag.ToLower().IndexOf("umbraco_getitem") > -1) { // NH: Switching to custom controls for items if (UmbracoSettings.UseAspNetMasterPages) { umbraco.presentation.templateControls.Item itemControl = new umbraco.presentation.templateControls.Item(); itemControl.Field = helper.FindAttribute(attributes, "field"); IDictionaryEnumerator ide = attributes.GetEnumerator(); while (ide.MoveNext()) if (itemControl.Attributes[ide.Key.ToString()] == null) itemControl.Attributes.Add(ide.Key.ToString(), ide.Value.ToString()); pageContent.Controls.Add(itemControl); } else { try { if (helper.FindAttribute(attributes, "nodeId") != "" && int.Parse(helper.FindAttribute(attributes, "nodeId")) != 0) { cms.businesslogic.Content c = new umbraco.cms.businesslogic.Content(int.Parse(helper.FindAttribute(attributes, "nodeId"))); item umbItem = new item(c.getProperty(helper.FindAttribute(attributes, "field")).Value.ToString(), attributes); tempElementContent = umbItem.FieldContent; // Check if the content is published if (c.nodeObjectType == cms.businesslogic.web.Document._objectType) { try { cms.businesslogic.web.Document d = (cms.businesslogic.web.Document)c; if (!d.Published) tempElementContent = ""; } catch { } } } else { // NH adds Live Editing test stuff item umbItem = new item(umbPage.Elements, attributes); // item umbItem = new item(umbPage.PageElements[helper.FindAttribute(attributes, "field")].ToString(), attributes); tempElementContent = umbItem.FieldContent; } if (debugMode) tempElementContent = "<div title=\"Field Tag: '" + System.Web.HttpContext.Current.Server.HtmlEncode(tag) + "'\" style=\"border: 1px solid #fc6;\">" + tempElementContent + "</div>"; } catch (Exception e) { System.Web.HttpContext.Current.Trace.Warn("umbracoTemplate", "Error reading element (" + helper.FindAttribute(attributes, "field") + ")", e); } } } } tempOutput.Remove(0, tempOutput.ToString().IndexOf(">") + 1); tempOutput.Insert(0, tempElementContent); } else { pageContent.Controls.Add(new LiteralControl(tempOutput.ToString())); break; } } return pageContent; }