Beispiel #1
0
            public override async Task WriteAsync(
                TemplateScopeContext scope, PageBlockFragment block, CancellationToken token)
            {
                var collection = (IEnumerable)block.Argument.GetJsExpressionAndEvaluate(scope,
                                                                                        ifNone: () => throw new NotSupportedException("'each' block does not have a valid expression"));

                var index = 0;

                if (collection != null)
                {
                    foreach (var element in collection)
                    {
                        var scopeArgs = element.ToObjectDictionary();
                        scopeArgs["it"]          = element;
                        scopeArgs[nameof(index)] = index++;

                        var itemScope = scope.ScopeWithParams(scopeArgs);
                        await WriteBodyAsync(itemScope, block, token);
                    }
                }

                if (index == 0)
                {
                    await WriteElseAsync(scope, block.ElseBlocks, token);
                }
            }
Beispiel #2
0
        public object Invoke(TemplateScopeContext scope, params object[] @params)
        {
            var args = new Dictionary <string, object>();

            for (var i = 0; i < Params.Length; i++)
            {
                if (@params.Length < i)
                {
                    break;
                }

                var param = Params[i];
                args[param.Name] = @params[i];
            }

            var exprScope = scope.ScopeWithParams(args);
            var ret       = Body.Evaluate(exprScope);

            return(ret);
        }