Пример #1
0
        public void Validate(Container container)
        {
            var extensionBlocks = ContainerBlock.GetRecursivelyOfType <IExtensionBlock>();
            var context         = new ValidationContext(_renderSettings, Pipeline);

            foreach (var extensionBlock in extensionBlocks)
            {
                if (_blockErrors.ContainsKey(extensionBlock))
                {
                    // don't check for model errors if parsing didn't succeed
                    continue;
                }
                var extensionType = _extensionByBlockType[extensionBlock.GetType()];
                var extension     = (IExtension)container.GetInstance(extensionType);
                var validator     = extension.Validator;
                if (validator == null)
                {
                    continue;
                }
                var     model            = _modelByBlock[extensionBlock];
                IErrors validationResult = validator.Validate(model, context);
                if (validationResult.Errors.Any())
                {
                    _blockErrors.Add(extensionBlock, validationResult);
                }
            }
            var extensionInlines = ContainerBlock.GetInlinesRecursively();

            foreach (var extensionInline in extensionInlines)
            {
                if (_inlineErrors.ContainsKey(extensionInline))
                {
                    // don't check for model errors if parsing didn't succeed
                    continue;
                }
                var extensionType = _extensionByInlineType[extensionInline.GetType()];
                var extension     = (IExtension)container.GetInstance(extensionType);
                var validator     = extension.Validator;
                if (validator == null)
                {
                    continue;
                }
                var model            = _modelByInline[extensionInline];
                var validationResult = validator.Validate(model, context);
                if (validationResult.Errors.Any())
                {
                    _inlineErrors.Add(extensionInline, validationResult);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Walks through all the Block extensions and parses the internal syntax of that block
        /// </summary>
        /// <param name="container"></param>
        public void Parse(Container container)
        {
            var extensionBlocks = ContainerBlock.GetRecursivelyOfType <IExtensionBlock>();

            foreach (var extensionBlock in extensionBlocks)
            {
                if (!_extensionByBlockType.ContainsKey(extensionBlock.GetType()))
                {
                    // TODO: show error?
                    continue;
                }
                var extensionType = _extensionByBlockType[extensionBlock.GetType()];
                var extension     = (IExtension)container.GetInstance(extensionType);
                _extensionByBlock[extensionBlock] = extension;
                IParseResult parseResult = extension.Parser.Parse(extensionBlock.GetContent());
                if (parseResult.Errors != null && parseResult.Errors.Errors.Any())
                {
                    _blockErrors.Add(extensionBlock, parseResult.Errors);
                }
                else
                {
                    _modelByBlock[extensionBlock] = parseResult.SyntaxTree;
                }
                if (extension.Transformer != null)
                {
                    _transformerByBlock[extensionBlock] = extension.Transformer;
                }
                var csss = extension?.Renderer?.Css;
                if (csss != null)
                {
                    foreach (var css in csss)
                    {
                        _csss.Add(css);
                    }
                }
                var javascripts = extension?.Renderer?.Javascript;
                if (javascripts != null)
                {
                    foreach (var javascript in javascripts)
                    {
                        _javascripts.Add(javascript);
                    }
                }
            }
            var extensionInlines = ContainerBlock.GetInlinesRecursively();

            foreach (var extensionInline in extensionInlines)
            {
                var extensionType = _extensionByInlineType[extensionInline.GetType()];
                var extension     = (IExtension)container.GetInstance(extensionType);
                _extensionByInline[extensionInline] = extension;
                var          content     = extensionInline.Content;
                IParseResult parseResult = extension.Parser.Parse(content);
                if (parseResult.Errors != null && parseResult.Errors.Errors.Any())
                {
                    _inlineErrors.Add(extensionInline, parseResult.Errors);
                }
                else
                {
                    _modelByInline[extensionInline] = parseResult.SyntaxTree;
                }
                if (extension.Transformer != null)
                {
                    _transformerByInline[extensionInline] = extension.Transformer;
                }
                var csss = extension?.Renderer?.Css;
                if (csss != null)
                {
                    foreach (var css in csss)
                    {
                        _csss.Add(css);
                    }
                }
                var javascripts = extension?.Renderer?.Javascript;
                if (javascripts != null)
                {
                    foreach (var javascript in javascripts)
                    {
                        _javascripts.Add(javascript);
                    }
                }
            }
        }