示例#1
0
        public async ValueTask <string> EvaluateAsync(string identifier, Arguments arguments, string content, Context context)
        {
            _shortcodeTemplatesDocument ??= await _shortcodeTemplatesManager.GetShortcodeTemplatesDocumentAsync();

            if (!_shortcodeTemplatesDocument.ShortcodeTemplates.TryGetValue(identifier, out var template))
            {
                return(null);
            }

            // Check if a shortcode template is recursively called.
            if (_identifiers.Contains(identifier))
            {
                return(null);
            }
            else
            {
                _identifiers.Add(identifier);
            }

            var model = new ShortcodeViewModel
            {
                Args    = arguments,
                Content = content,
                Context = context
            };

            var parameters = new Dictionary <string, FluidValue>
            {
                [identifier] = new StringValue(""),
                ["Args"]     = new ObjectValue(model.Args),
                ["Content"]  = new ObjectValue(new Content(model.Content)),
                ["Context"]  = new ObjectValue(model.Context)
            };

            var result = await _liquidTemplateManager.RenderStringAsync(template.Content, _htmlEncoder, model, parameters);

            // Allow multiple serial calls of this shortcode template.
            _identifiers.Remove(identifier);

            return(result);
        }
示例#2
0
        public async ValueTask <string> EvaluateAsync(string identifier, Arguments arguments, string content, Context context)
        {
            _shortcodeTemplatesDocument ??= await _shortcodeTemplatesManager.GetShortcodeTemplatesDocumentAsync();

            if (!_shortcodeTemplatesDocument.ShortcodeTemplates.TryGetValue(identifier, out var template))
            {
                return(null);
            }

            var model = new ShortcodeViewModel
            {
                Args    = arguments,
                Content = content,
                Context = context
            };

            return(await _liquidTemplateManager.RenderAsync(template.Content, _htmlEncoder, model,
                                                            scope =>
            {
                scope.SetValue("Content", model.Content);
                scope.SetValue("Args", model.Args);
                scope.SetValue("Context", model.Context);
            }));
        }