protected override void OnDisplaying(ContentPart element, ElementDisplayingContext context)
        {
            // Content is optional context, so if it's null, we can't render the part element.
            // This typically only happens when the layout editor is used outside the context of
            // a content item and still renders the various content part elements as part of the toolbox.
            if (context.Content == null)
            {
                return;
            }

            var contentItem     = context.Content.ContentItem;
            var contentPartName = (string)element.Descriptor.StateBag["ElementTypeName"];
            var contentPart     = contentItem.Parts.FirstOrDefault(x => x.PartDefinition.Name == contentPartName);

            if ((contentItem.Id == 0 || context.DisplayType == "Design") && context.Updater != null)
            {
                // The content item hasn't been stored yet, so bind form values with the content part to represent actual state.
                var controller       = (Controller)context.Updater;
                var oldValueProvider = controller.ValueProvider;

                controller.ValueProvider = context.Element.Data.ToValueProvider(_cultureAccessor.CurrentCulture);
                _contentPartDisplay.UpdateEditor(contentPart, context.Updater);
                _transactionManager.Cancel();
                controller.ValueProvider = oldValueProvider;
            }

            var contentPartShape = _contentPartDisplay.BuildDisplay(contentPart, displayType: "Layout");

            context.ElementShape.ContentPart = contentPart;
            context.ElementShape.Content     = contentPartShape;
        }
        private void IndexLayout(IndexContentContext context, LayoutPart part)
        {
            var layoutShape = _contentPartDisplay.BuildDisplay(part);
            var layoutHtml  = _shapeDisplay.Display(layoutShape);

            context.DocumentIndex
            .Add("body", layoutHtml).RemoveTags().Analyze()
            .Add("format", "html").Store();
        }