public override void RenderChildren(IParrotWriter writer, Nodes.Statement statement, IRendererFactory rendererFactory, IDictionary <string, object> documentHost, object model, string defaultTag = null) { if (string.IsNullOrEmpty(defaultTag)) { defaultTag = DefaultChildTag; } //get model from parameter //required - do not remove if (statement.Parameters != null && statement.Parameters.Count == 1) { var localModel = GetLocalModel(documentHost, statement, model); if (localModel is IEnumerable) { //create locals object to handle local values to the method Locals locals = new Locals(documentHost); IList <object> items = ToList(model as IEnumerable); for (int i = 0; i < items.Count; i++) { var localItem = items[i]; locals.Push(IteratorItem(i, items)); base.RenderChildren(writer, statement.Children, rendererFactory, documentHost, defaultTag, localItem); locals.Pop(); } } } else { base.RenderChildren(writer, statement.Children, rendererFactory, documentHost, defaultTag, model); } }
public While(Condition condition, Statement first, End end) { Condition = condition; FirstStatement = first; Head = condition; Tail = end; }
public override void Render(Parrot.Infrastructure.IParrotWriter writer, IRendererFactory rendererFactory, Nodes.Statement statement, IDictionary <string, object> documentHost, object model) { var localModel = GetLocalModel(documentHost, statement, model); if (localModel is bool && (bool)localModel) { RenderChildren(writer, statement.Children, rendererFactory, documentHost, base.DefaultChildTag, model); } }
protected override void CreateTag(Parrot.Infrastructure.IParrotWriter writer, IRendererFactory rendererFactory, IDictionary <string, object> documentHost, object model, Nodes.Statement statement) { var xhtml = false; if (documentHost.ContainsKey("doctype")) { //we have a registered doctype, is it xml? if (documentHost["doctype"].ToString().IndexOf("xhtml", StringComparison.OrdinalIgnoreCase) != -1) { //it's xhtml, we need to output cdata xhtml = true; } } string tagName = string.IsNullOrWhiteSpace(statement.Name) ? DefaultChildTag : statement.Name; TagBuilder builder = new TagBuilder(tagName); //add attributes RenderAttributes(rendererFactory, documentHost, model, statement, builder); //AppendAttributes(builder, statement.Attributes, documentHost, modelValueProvider); writer.Write(builder.ToString(TagRenderMode.StartTag)); //render children if (xhtml) { writer.Write("//<![CDATA["); } if (statement.Children.Count > 0) { RenderChildren(writer, statement, rendererFactory, documentHost, model); } if (xhtml) { writer.Write("//]]>"); } writer.Write(builder.ToString(TagRenderMode.EndTag)); }