Example #1
0
 public static SyntaxTreeNode Helper(HelperExpressionNode helperExpression, BlockNode block, SourceLocation location)
 {
     return(new HelperBlockNode
     {
         Location = location,
         HelperExpression = helperExpression,
         Block = block
     });
 }
            protected override IClientModel VisitHelperNode(HelperExpressionNode helperNode)
            {
                var helperHandlerClient = helperNode.HelperHandler as IHelperHandlerClient;

                if (helperHandlerClient != null)
                {
                    return(helperHandlerClient.Evaluate(_clientContext, _modelStack.Peek(), helperNode.Name, helperNode.Parameters));
                }

                return(base.VisitHelperNode(helperNode));
            }
Example #3
0
            protected override JSchema VisitHelperNode(HelperExpressionNode helperNode)
            {
                var provider = helperNode.HelperHandler as IHelperHandlerWithSchema;

                if (provider != null)
                {
                    var schema = provider.GetSchema(helperNode.Name, helperNode.Parameters);
                    if (schema != null)
                    {
                        var result = new SchemaCombiner().Apply(_schemas.Pop(), schema, new SchemaComparisionReport());
                        _schemas.Push(result);
                        return(result);
                    }
                }
                return(base.VisitHelperNode(helperNode));
            }
Example #4
0
        public virtual void VisitHelperExpression(HelperExpressionNode helperExpressionNode)
        {
            this.ThrowIfCanceled();

            VisitChildren(helperExpressionNode);
        }
Example #5
0
        public override void VisitSpan(Span span)
        {
            if (span.Length > 0)
            {
                var contentPart = content.Substring(span.Start.AbsoluteIndex, span.Length);
                var kind        = span.Kind;

                VisitEnter(span, contentPart);

                switch (kind)
                {
                case SpanKind.Code:

                    switch (currentBlockType)
                    {
                    case BlockType.Directive:

                        var rootNode      = (RootNode)this.CurrentNode;
                        var directiveNode = new DirectiveNode(this, span, contentPart);

                        this.Push(directiveNode);

                        rootNode.Directives.Add(directiveNode);
                        this.CodeNodes.AddLast(directiveNode);

                        break;

                    default:

                        CodeNode codeNode;

                        if (renderStarted)
                        {
                            if (enterExpression)
                            {
                                if (IsHelperExpression(contentPart))
                                {
                                    codeNode = new HelperExpressionNode(this, span, contentPart);

                                    AddPushCode(codeNode);
                                }
                                else
                                {
                                    if (enterScriptsSection)
                                    {
                                        codeNode = new ScriptExpressionNode(this, span, contentPart);

                                        AddPushCode(codeNode);
                                    }
                                    else
                                    {
                                        codeNode = new CodeExpressionNode(this, span, contentPart);

                                        AddPushCode(codeNode);
                                    }
                                }

                                enterExpression = false;
                            }
                            else
                            {
                                codeNode = new RenderNode(this, span, contentPart);

                                AddPushCode(codeNode);
                            }
                        }
                        else
                        {
                            codeNode = new CodeNode(this, span, contentPart);

                            AddCode(codeNode);
                        }

                        break;
                    }

                    break;

                case SpanKind.Markup:

                    var markupNode = new MarkupNode(span, contentPart);

                    if (enterAtModel)
                    {
                        var rootNode  = (RootNode)this.CurrentNode;
                        var modelNode = new ModelNode(this, span, contentPart);

                        rootNode.ModelNode = modelNode;
                        this.CodeNodes.AddLast(modelNode);

                        enterAtModel = false;

                        markupNode.IsModelMarkup = true;
                    }

                    this.CurrentNode.AddChild(markupNode);

                    break;

                case SpanKind.MetaCode:

                    if (currentBlockType == BlockType.Section)
                    {
                        var identifiers     = span.Symbols.Cast <CSharpSymbol>().Where(s => s.Type == CSharpSymbolType.Identifier);
                        var firstIdentifier = identifiers.First();

                        if (firstIdentifier.Content == "section")
                        {
                            var lastIdentifier = identifiers.ElementAt(1);
                        }
                        else
                        {
                            DebugUtils.Break();
                        }
                    }

                    break;

                case SpanKind.Transition:
                    break;

                case SpanKind.Comment:
                    break;

                default:
                    DebugUtils.Break();
                    break;
                }
            }

            base.VisitSpan(span);
        }
Example #6
0
 public override void VisitHelperExpression(HelperExpressionNode helperExpressionNode)
 {
     base.VisitHelperExpression(helperExpressionNode);
 }
        public override void VisitHelperExpression(HelperExpressionNode helperExpressionNode)
        {
            if (helperExpressionNode.Method == "Partial")
            {
                var    partialViewNameArg = helperExpressionNode.Arguments[0].Expression;
                var    modelArg           = helperExpressionNode.Arguments[1]?.Expression;
                var    viewDataArg        = helperExpressionNode.Arguments[2]?.Expression;
                var    viewData           = new Dictionary <string, object>();
                string partialViewName    = null;
                var    baseObject         = this.BaseObject;
                var    modelObjectGraph   = new List <IBase>()
                {
                    baseObject
                };

                SwitchExtensions.Switch(partialViewNameArg, () => partialViewNameArg.GetType().Name,

                                        SwitchExtensions.Case <LiteralExpressionSyntax>("LiteralExpressionSyntax", (literalExpression) =>
                {
                    partialViewName = literalExpression.Token.Text.RemoveQuotes();

                    DebugUtils.NoOp();
                }),
                                        SwitchExtensions.CaseElse(() =>
                {
                    var a = partialViewNameArg;
                    var t = partialViewNameArg.GetType().Name;

                    // implementation here or throw error

                    DebugUtils.Break();
                })
                                        );

                if (modelArg != null)
                {
                    SwitchExtensions.Switch(modelArg, () => modelArg.GetType().Name,

                                            SwitchExtensions.Case <MemberAccessExpressionSyntax>("MemberAccessExpressionSyntax", (memberAccessExpression) =>
                    {
                        var identifiers = memberAccessExpression.GetMemberIdentifiers();
                        var joined      = string.Empty;

                        foreach (var identifier in identifiers)
                        {
                            if (identifier is IdentifierNameSyntax)
                            {
                                var identifierName = (IdentifierNameSyntax)identifier;
                                var identifierText = identifierName.Identifier.Text;
                                joined             = joined.Append(identifierText.PrependIf(".", !joined.IsNullOrEmpty()));

                                if (joined.StartsWith("Model.Entity."))
                                {
                                    var parentBase    = (IParentBase)baseObject;
                                    IBase childObject = null;

                                    if (parentBase is Entity_Set)
                                    {
                                        baseObject = parentBase.ChildElements.Single();
                                        parentBase = (IParentBase)baseObject;

                                        modelObjectGraph.Add(parentBase);
                                    }

                                    childObject = parentBase.ChildNodes.Single(b => b.Name == identifierText);
                                    modelObjectGraph.Add(childObject);
                                }
                            }
                            else
                            {
                                DebugUtils.Break();
                            }
                        }

                        DebugUtils.NoOp();
                    }),
                                            SwitchExtensions.CaseElse(() =>
                    {
                        var a = modelArg;
                        var t = modelArg.GetType().Name;

                        // implementation here or throw error

                        DebugUtils.Break();
                    })
                                            );
                }

                if (viewDataArg != null)
                {
                    SwitchExtensions.Switch(viewDataArg, () => viewDataArg.GetType().Name,

                                            SwitchExtensions.Case <ObjectCreationExpressionSyntax>("ObjectCreationExpressionSyntax", (objectCreationExpression) =>
                    {
                        var typeName    = objectCreationExpression.Type.GetName();
                        var argList     = objectCreationExpression.ArgumentList.Arguments;
                        var initializer = objectCreationExpression.Initializer;

                        if (typeName == "ViewDataDictionary")
                        {
                            var includeOurViewData = false;

                            if (argList.Count > 0)
                            {
                                var sourceArg           = argList.Single();
                                var sourceArgExpression = sourceArg.Expression;

                                SwitchExtensions.Switch(sourceArgExpression, () => sourceArgExpression.GetType().Name,

                                                        SwitchExtensions.Case <MemberAccessExpressionSyntax>("MemberAccessExpressionSyntax", (memberAccessExpression) =>
                                {
                                    if (memberAccessExpression.HasThisExpression())
                                    {
                                        var identifiers = memberAccessExpression.GetMemberIdentifiers(true);

                                        if (identifiers.Count() == 1)
                                        {
                                            var identifier = identifiers.Single();

                                            if (identifier is IdentifierNameSyntax)
                                            {
                                                var identifierName = (IdentifierNameSyntax)identifier;
                                                var identifierText = identifierName.Identifier.Text;

                                                if (identifierText == "ViewData")
                                                {
                                                    includeOurViewData = true;
                                                }
                                                else
                                                {
                                                    DebugUtils.Break();
                                                }
                                            }
                                            else
                                            {
                                                DebugUtils.Break();
                                            }
                                        }
                                    }
                                    else
                                    {
                                        DebugUtils.Break();
                                    }

                                    DebugUtils.NoOp();
                                }),
                                                        SwitchExtensions.CaseElse(() =>
                                {
                                    var a = sourceArgExpression;
                                    var t = sourceArgExpression.GetType().Name;

                                    // implementation here or throw error

                                    DebugUtils.Break();
                                })
                                                        );

                                if (initializer != null)
                                {
                                    var kind = initializer.Kind();

                                    if (kind == SyntaxKind.CollectionInitializerExpression)
                                    {
                                        foreach (var expression in initializer.Expressions.Cast <InitializerExpressionSyntax>())
                                        {
                                            var expressions = expression.Expressions.ToList();
                                            var key         = ((LiteralExpressionSyntax)expressions[0]).Token.Text.RemoveQuotes();
                                            var value       = ((LiteralExpressionSyntax)expressions[1]).Token.Value;

                                            viewData.Add(key, value);
                                        }
                                    }
                                    else
                                    {
                                        DebugUtils.Break();
                                    }
                                }

                                if (includeOurViewData)
                                {
                                    viewData = viewData.Concat(this.ViewData).ToDictionary(k => k.Key, k => k.Value);
                                }
                            }
                        }
                        else
                        {
                            DebugUtils.Break();
                        }

                        DebugUtils.NoOp();
                    }),
                                            SwitchExtensions.CaseElse(() =>
                    {
                        var a = viewDataArg;
                        var t = viewDataArg.GetType().Name;

                        // implementation here or throw error

                        DebugUtils.Break();
                    })
                                            );
                }

                var args = new ChildViewHandlerEventArgs(partialViewName, modelObjectGraph, viewData);

                OnChildView(this, args);

                /// kn - you are here, raise OnChildView, handled by GeneratorConfiguration.HandleViews, remove from sortedList
                /// 1. pass args, i.e. Model, ViewDataDictionary
                /// 2. retrieve PartialView component name back
            }
            else
            {
                DebugUtils.Break();
            }

            base.VisitHelperExpression(helperExpressionNode);
        }
Example #8
0
 public static void Leave(IBlockHelperHandler handler, object model, RenderingContext renderingContext, HelperExpressionNode node)
 {
     handler.Leave(model, renderingContext, node.Name, node.Parameters);
 }
Example #9
0
 public static void Evaluate(IHelperHandler handler, object model, RenderingContext renderingContext, HelperExpressionNode node)
 {
     handler.Evaluate(model, renderingContext, node.Parameters);
 }
Example #10
0
 protected virtual TResult VisitHelperNode(HelperExpressionNode helperNode)
 {
     return(null);
 }
Example #11
0
 private TResult VisitHelperExpressionNode(HelperExpressionNode helperExpressionNode)
 {
     return(null);
 }
		public static void Leave(IBlockHelperHandler handler, object model, RenderingContext renderingContext, HelperExpressionNode node)
		{
			handler.Leave(model, renderingContext, node.Name, node.Parameters);
		}
        public static void Evaluate(IHelperHandler handler, object model, RenderingContext renderingContext, HelperExpressionNode node)
        {
			handler.Evaluate(model, renderingContext, node.Parameters);
        }
Example #14
0
	    public static SyntaxTreeNode Helper(HelperExpressionNode helperExpression, BlockNode block, SourceLocation location)
	    {
		    return new HelperBlockNode
		    {
				Location = location,
				HelperExpression = helperExpression,
				Block = block
		    };
	    }