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); } } }
/// <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); } } } }