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)); }
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)); }
public virtual void VisitHelperExpression(HelperExpressionNode helperExpressionNode) { this.ThrowIfCanceled(); VisitChildren(helperExpressionNode); }
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); }
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); }
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); }
protected virtual TResult VisitHelperNode(HelperExpressionNode helperNode) { return(null); }
private TResult VisitHelperExpressionNode(HelperExpressionNode helperExpressionNode) { return(null); }
public static SyntaxTreeNode Helper(HelperExpressionNode helperExpression, BlockNode block, SourceLocation location) { return new HelperBlockNode { Location = location, HelperExpression = helperExpression, Block = block }; }