private async Task <string> RenderRegion(CustomEntityPageRegionRenderDetails pageRegion)
        {
            var regionAttributes  = new Dictionary <string, string>();
            var visualEditorState = await _visualEditorStateService.GetCurrentAsync();

            var blocksHtml = await RenderBlocksToHtml(pageRegion, regionAttributes, visualEditorState);

            // If we're not in edit mode just return the blocks.
            if (visualEditorState.VisualEditorMode != VisualEditorMode.Edit)
            {
                if (_wrappingTagName != null)
                {
                    return(TemplateRegionTagBuilderHelper.WrapInTag(
                               blocksHtml,
                               _wrappingTagName,
                               _allowMultipleBlocks,
                               _additonalHtmlAttributes
                               ));
                }

                return(blocksHtml);
            }

            regionAttributes.Add("data-cms-page-template-region-id", pageRegion.PageTemplateRegionId.ToString());
            regionAttributes.Add("data-cms-page-region-name", pageRegion.Name);
            regionAttributes.Add("data-cms-custom-entity-region", string.Empty);
            regionAttributes.Add("class", "cofoundry__sv-region");

            if (_permittedBlocks.Any())
            {
                regionAttributes.Add("data-cms-page-region-permitted-block-types", string.Join(",", _permittedBlocks));
            }

            if (_allowMultipleBlocks)
            {
                regionAttributes.Add("data-cms-multi-block", "true");

                if (_emptyContentMinHeight.HasValue)
                {
                    regionAttributes.Add("style", "min-height:" + _emptyContentMinHeight + "px");
                }
            }

            return(TemplateRegionTagBuilderHelper.WrapInTag(
                       blocksHtml,
                       _wrappingTagName,
                       _allowMultipleBlocks,
                       _additonalHtmlAttributes,
                       regionAttributes
                       ));
        }
        private async Task <string> RenderBlocksToHtml(
            CustomEntityPageRegionRenderDetails 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, _customEntityViewModel, 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);
        }
Пример #3
0
        private async Task<string> RenderRegion(CustomEntityPageRegionRenderDetails pageRegion)
        {
            string blocksHtml = string.Empty;

            if (pageRegion.Blocks.Any())
            {
                var renderingTasks = pageRegion
                        .Blocks
                        .Select(m => _blockRenderer.RenderBlockAsync(_viewContext, _customEntityViewModel, m));

                var blockHtmlParts = await Task.WhenAll(renderingTasks);

                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)
            {
                // 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 (!_customEntityViewModel.IsPageEditMode) // TODO: IsCustom entity mode
            {
                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-custom-entity-region", string.Empty);

            attrs.Add("class", "cofoundry__sv-region");

            if (_permittedBlockTypes.Any())
            {
                var permittedBlockTypes = _permittedBlockTypes.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
                );
        }