コード例 #1
0
        /// <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());
        }
コード例 #2
0
 /// <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);
         }
     }
 }