private async Task <string> RenderBlocksToHtml( PageRegionRenderDetails pageRegion, Dictionary <string, string> regionAttributes, VisualEditorState visualEditorState ) { // No _permittedBlocks means any is allowed. var blocksToRender = pageRegion .Blocks .Where(m => _permittedBlocks.Count == 0 || _permittedBlocks.Contains(m.BlockType.FileName)); var blockHtmlParts = new List <string>(); foreach (var block in blocksToRender) { var renderedBlock = await _blockRenderer.RenderBlockAsync(_viewContext, _pageViewModel, block); blockHtmlParts.Add(renderedBlock); } string blocksHtml = string.Empty; if (blockHtmlParts.Any()) { if (!_allowMultipleBlocks) { // If for some reason another block has been added in error, make sure we only display one. blocksHtml = blockHtmlParts.Last(); } else { blocksHtml = string.Join(string.Empty, blockHtmlParts); } } else { regionAttributes.Add("data-cms-page-region-empty", string.Empty); if (!_allowMultipleBlocks && visualEditorState.VisualEditorMode == VisualEditorMode.Edit) { // If there are no blocks and this is a single block region // add a placeholder element so we always have a menu blocksHtml = _blockRenderer.RenderPlaceholderBlock(_emptyContentMinHeight); } } return(blocksHtml); }
private async Task <string> RenderRegion(PageRegionRenderDetails pageRegion) { string blocksHtml = string.Empty; // No _permittedBlocks means any is allowed. var renderingTasks = pageRegion .Blocks .Where(m => _permittedBlocks.Count == 0 || _permittedBlocks.ContainsKey(m.BlockType.FileName)) .Select(m => _blockRenderer.RenderBlockAsync(_viewContext, _pageViewModel, m)); var blockHtmlParts = await Task.WhenAll(renderingTasks); if (blockHtmlParts.Any()) { if (!_allowMultipleBlocks) { // If for some reason another block has been added in error, make sure we only display one. blocksHtml = blockHtmlParts.Last(); } else { blocksHtml = string.Join(string.Empty, blockHtmlParts); } } else if (!_allowMultipleBlocks && _pageViewModel.IsPageEditMode) { // If there are no blocks and this is a single block region // add a placeholder element so we always have a menu blocksHtml = _blockRenderer.RenderPlaceholderBlock(_emptyContentMinHeight); } // If we're not in edit mode just return the blocks. if (!_pageViewModel.IsPageEditMode) { if (_wrappingTagName != null) { return(TemplateRegionTagBuilderHelper.WrapInTag( blocksHtml, _wrappingTagName, _allowMultipleBlocks, _additonalHtmlAttributes )); } return(blocksHtml); } var attrs = new Dictionary <string, string>(); attrs.Add("data-cms-page-template-region-id", pageRegion.PageTemplateRegionId.ToString()); attrs.Add("data-cms-page-region-name", pageRegion.Name); attrs.Add("data-cms-page-region", string.Empty); attrs.Add("class", "cofoundry__sv-region"); if (_permittedBlocks.Any()) { var permittedBlockTypes = _permittedBlocks.Select(m => m.Key); attrs.Add("data-cms-page-region-permitted-block-types", string.Join(",", permittedBlockTypes)); } if (_allowMultipleBlocks) { attrs.Add("data-cms-multi-block", "true"); if (_emptyContentMinHeight.HasValue) { attrs.Add("style", "min-height:" + _emptyContentMinHeight + "px"); } } return(TemplateRegionTagBuilderHelper.WrapInTag( blocksHtml, _wrappingTagName, _allowMultipleBlocks, _additonalHtmlAttributes, attrs )); }