private static Action <StringBuilder, ContextObject> HandleSingleValue(TokenTuple token, ParsingOptions options, InferredTemplateModel scope) { if (scope != null) { scope = scope.GetInferredModelForPath(token.Value, InferredTemplateModel.UsedAs.Scalar); } return((builder, context) => { if (context != null) { //try to locate the value in the context, if it exists, append it. var c = context.GetContextForPath(token.Value); if (c.Value != null) { if (token.Type == TokenType.EscapedSingleValue && !options.DisableContentSafety) { builder.Append(HtmlEncodeString(c.ToString())); } else { builder.Append(c); } } } }); }
private static Action <StringBuilder, ContextObject> HandleElementOpen(TokenTuple token, Queue <TokenTuple> remainder, ParsingOptions options, InferredTemplateModel scope) { if (scope != null) { scope = scope.GetInferredModelForPath(token.Value, InferredTemplateModel.UsedAs.ConditionalValue); } var innerTemplate = Parse(remainder, options, scope); return((builder, context) => { var c = context.GetContextForPath(token.Value); //"falsey" values by Javascript standards... if (c.Exists()) { innerTemplate(builder, c); } }); }
private static Action <StringBuilder, ContextObject> HandleCollectionOpen(TokenTuple token, Queue <TokenTuple> remainder, ParsingOptions options, InferredTemplateModel scope) { if (scope != null) { scope = scope.GetInferredModelForPath(token.Value, InferredTemplateModel.UsedAs.Collection); } var innerTemplate = Parse(remainder, options, scope); return((builder, context) => { //if we're in the same scope, just negating, then we want to use the same object var c = context.GetContextForPath(token.Value); //"falsey" values by Javascript standards... if (!c.Exists()) { return; } if (c.Value is IEnumerable && !(c.Value is String) && !(c.Value is IDictionary <string, object>)) { var index = 0; foreach (object i in c.Value as IEnumerable) { var innerContext = new ContextObject() { Value = i, Key = String.Format("[{0}]", index), Parent = c }; innerTemplate(builder, innerContext); index++; } } else { throw new IndexedParseException("'{0}' is used like an array by the template, but is a scalar value or object in your model.", token.Value); } }); }