/// <summary> /// Processes the template contents. /// </summary> private List <IAbstractControl> ProcessTemplate(IAbstractTreeNode parent, IEnumerable <DothtmlNode> elementContent, IDataContextStack dataContext) { var content = elementContent.Select(e => ProcessNode(parent, e, placeholderMetadata.Value, dataContext)).Where(e => e != null); return(content.ToList()); }
/// <summary> /// Processes the parser node and builds a control. /// </summary> public IAbstractControl ProcessNode(IAbstractTreeNode parent, DothtmlNode node, IControlResolverMetadata parentMetadata, IDataContextStack dataContext) { try { if (node is DothtmlBindingNode) { // binding in text EnsureContentAllowed(parentMetadata, node); return(ProcessBindingInText(node, dataContext)); } else if (node is DotHtmlCommentNode) { // HTML comment var commentNode = node as DotHtmlCommentNode; return(ProcessHtmlComment(node, dataContext, commentNode)); } else if (node is DothtmlLiteralNode) { // text content var literalNode = (DothtmlLiteralNode)node; return(ProcessText(node, parentMetadata, dataContext, literalNode)); } else if (node is DothtmlElementNode) { // HTML element EnsureContentAllowed(parentMetadata, node); var element = (DothtmlElementNode)node; return(ProcessObjectElement(element, dataContext)); } else { throw new NotSupportedException($"The node of type '{node.GetType()}' is not supported!"); } } catch (DotvvmCompilationException ex) { if (ex.Tokens == null) { ex.Tokens = node.Tokens; ex.ColumnNumber = node.Tokens.First().ColumnNumber; ex.LineNumber = node.Tokens.First().LineNumber; } if (!LogError(ex, node)) { throw; } else { return(null); } } catch (Exception ex) { if (!LogError(ex, node)) { throw new DotvvmCompilationException("", ex, node.Tokens); } else { return(null); } } }