diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/CheckboxElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/CheckboxElementDriver.cs index c41b6799c..33fb111a0 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/CheckboxElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/CheckboxElementDriver.cs @@ -64,7 +64,7 @@ namespace Orchard.DynamicForms.Drivers { }); } - protected override void OnDisplaying(CheckBox element, ElementDisplayContext context) { + protected override void OnDisplaying(CheckBox element, ElementDisplayingContext context) { context.ElementShape.TokenizedValue = _tokenizer.Replace(element.RuntimeValue, null); } } diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/CommonFormElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/CommonFormElementDriver.cs index 61e709acb..fc9492c31 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/CommonFormElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/CommonFormElementDriver.cs @@ -41,7 +41,7 @@ namespace Orchard.DynamicForms.Drivers { }); } - protected override void OnDisplaying(FormElement element, ElementDisplayContext context) { + protected override void OnDisplaying(FormElement element, ElementDisplayingContext context) { context.ElementShape.Metadata.Wrappers.Add("FormElement_Wrapper"); context.ElementShape.Child.Add(New.PlaceChildContent(Source: context.ElementShape)); diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/EmailFieldElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/EmailFieldElementDriver.cs index 24a3f950c..08328b1e0 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/EmailFieldElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/EmailFieldElementDriver.cs @@ -75,7 +75,7 @@ namespace Orchard.DynamicForms.Drivers { }); } - protected override void OnDisplaying(EmailField element, ElementDisplayContext context) { + protected override void OnDisplaying(EmailField element, ElementDisplayingContext context) { context.ElementShape.TokenizedValue = _tokenizer.Replace(element.RuntimeValue, null); } } diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/EnumerationElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/EnumerationElementDriver.cs index 62d495918..066c34732 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/EnumerationElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/EnumerationElementDriver.cs @@ -79,7 +79,7 @@ namespace Orchard.DynamicForms.Drivers { }); } - protected override void OnDisplaying(Enumeration element, ElementDisplayContext context) { + protected override void OnDisplaying(Enumeration element, ElementDisplayingContext context) { var tokenizedOptions = _tokenizer.Replace(element.Options).ToArray(); var typeName = element.GetType().Name; var displayType = context.DisplayType; diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/FormElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/FormElementDriver.cs index dd2d5f32d..3f33d9b84 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/FormElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/FormElementDriver.cs @@ -128,7 +128,7 @@ namespace Orchard.DynamicForms.Drivers { }); } - protected override void OnDisplaying(Form element, ElementDisplayContext context) { + protected override void OnDisplaying(Form element, ElementDisplayingContext context) { var controller = _currentControllerAccessor.CurrentController; var values = controller.FetchPostedValues(element); var modelState = controller.FetchModelState(element); diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/HiddenFieldElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/HiddenFieldElementDriver.cs index 3f37fe214..6eaecae80 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/HiddenFieldElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/HiddenFieldElementDriver.cs @@ -33,7 +33,7 @@ namespace Orchard.DynamicForms.Drivers { }); } - protected override void OnDisplaying(HiddenField element, ElementDisplayContext context) { + protected override void OnDisplaying(HiddenField element, ElementDisplayingContext context) { context.ElementShape.TokenizedValue = _tokenizer.Replace(element.Value, null); } } diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/QueryElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/QueryElementDriver.cs index 65c7d3fa0..81bb85881 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/QueryElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/QueryElementDriver.cs @@ -116,7 +116,7 @@ namespace Orchard.DynamicForms.Drivers { }); } - protected override void OnDisplaying(Query element, ElementDisplayContext context) { + protected override void OnDisplaying(Query element, ElementDisplayingContext context) { var queryId = element.QueryId; var typeName = element.GetType().Name; var category = element.Category.ToSafeName(); diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/RadioButtonElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/RadioButtonElementDriver.cs index c99c2820a..b2d193bbd 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/RadioButtonElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/RadioButtonElementDriver.cs @@ -39,7 +39,7 @@ namespace Orchard.DynamicForms.Drivers { }); } - protected override void OnDisplaying(RadioButton element, ElementDisplayContext context) { + protected override void OnDisplaying(RadioButton element, ElementDisplayingContext context) { context.ElementShape.TokenizedValue = _tokenizer.Replace(element.Value, null); } } diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/ReCaptchaElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/ReCaptchaElementDriver.cs index 0e757b596..a02868073 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/ReCaptchaElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/ReCaptchaElementDriver.cs @@ -42,7 +42,7 @@ namespace Orchard.DynamicForms.Drivers { }); } - protected override void OnDisplaying(ReCaptcha element, ElementDisplayContext context) { + protected override void OnDisplaying(ReCaptcha element, ElementDisplayingContext context) { var workContext = _services.WorkContext; var currentSite = workContext.CurrentSite; var settings = currentSite.As(); diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TaxonomyElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TaxonomyElementDriver.cs index 35aae07c7..5c55a9e27 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TaxonomyElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TaxonomyElementDriver.cs @@ -120,7 +120,7 @@ namespace Orchard.DynamicForms.Drivers { }); } - protected override void OnDisplaying(Taxonomy element, ElementDisplayContext context) { + protected override void OnDisplaying(Taxonomy element, ElementDisplayingContext context) { var taxonomyId = element.TaxonomyId; var typeName = element.GetType().Name; var displayType = context.DisplayType; diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TextAreaElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TextAreaElementDriver.cs index 41f26a357..a4cfea1fc 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TextAreaElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TextAreaElementDriver.cs @@ -87,7 +87,7 @@ namespace Orchard.DynamicForms.Drivers { }); } - protected override void OnDisplaying(TextArea element, ElementDisplayContext context) { + protected override void OnDisplaying(TextArea element, ElementDisplayingContext context) { context.ElementShape.TokenizedValue = _tokenizer.Replace(element.RuntimeValue, null); } } diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TextFieldElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TextFieldElementDriver.cs index 7a4f25ed9..398cfce46 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TextFieldElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TextFieldElementDriver.cs @@ -75,7 +75,7 @@ namespace Orchard.DynamicForms.Drivers { }); } - protected override void OnDisplaying(TextField element, ElementDisplayContext context) { + protected override void OnDisplaying(TextField element, ElementDisplayingContext context) { context.ElementShape.TokenizedValue = _tokenizer.Replace(element.RuntimeValue, null); } } diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/ValidationElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/ValidationElementDriver.cs index 01e2918ea..eb203b84e 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/ValidationElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/ValidationElementDriver.cs @@ -60,7 +60,7 @@ // return Editor(context, validatorsEditor); // } -// protected override void OnDisplaying(FormElement element, ElementDisplayContext context) { +// protected override void OnDisplaying(FormElement element, ElementDisplayingContext context) { // if (context.DisplayType == "Design" || element.Form == null) // return; diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Handlers/ClientValidationRegistrationCoordinator.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Handlers/ClientValidationRegistrationCoordinator.cs index 27505658d..45c7f232a 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Handlers/ClientValidationRegistrationCoordinator.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Handlers/ClientValidationRegistrationCoordinator.cs @@ -21,7 +21,7 @@ namespace Orchard.DynamicForms.Handlers { } } - void IElementEventHandler.Displaying(ElementDisplayContext context) { + void IElementEventHandler.Displaying(ElementDisplayingContext context) { if (context.DisplayType == "Design") return; @@ -45,6 +45,7 @@ namespace Orchard.DynamicForms.Handlers { context.ElementShape.ClientValidationAttributes = registrationContext.ClientAttributes; } + void IElementEventHandler.Displayed(ElementDisplayedContext context) {} void IFormElementEventHandler.GetElementValue(FormElement element, ReadElementValuesContext context) { } void IElementEventHandler.Creating(ElementCreatingContext context) {} void IElementEventHandler.Created(ElementCreatedContext context) {} diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ColumnElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ColumnElementDriver.cs index fe18b71dd..3f0e2d89f 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ColumnElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ColumnElementDriver.cs @@ -1,6 +1,13 @@ using Orchard.Layouts.Elements; +using Orchard.Layouts.Framework.Display; using Orchard.Layouts.Framework.Drivers; namespace Orchard.Layouts.Drivers { - public class ColumnElementDriver : ElementDriver {} + public class ColumnElementDriver : ElementDriver { + protected override void OnDisplaying(Column element, ElementDisplayingContext context) { + context.ElementShape.Width = element.Width; + context.ElementShape.Offset = element.Offset; + context.ElementShape.Collapsed = false; + } + } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ContentItemElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ContentItemElementDriver.cs index c14800918..6e91a8d2d 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ContentItemElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ContentItemElementDriver.cs @@ -37,7 +37,7 @@ namespace Orchard.Layouts.Drivers { return Editor(context, editor); } - protected override void OnDisplaying(ContentItem element, ElementDisplayContext context) { + protected override void OnDisplaying(ContentItem element, ElementDisplayingContext context) { var contentItemIds = context.Content != null ? RemoveCurrentContentItemId(element.ContentItemIds, context.Content.Id) : element.ContentItemIds; var displayType = element.DisplayType; var contentItems = GetContentItems(contentItemIds).ToArray(); diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ContentPartElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ContentPartElementDriver.cs index dd8c5c6db..5d4ec214f 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ContentPartElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ContentPartElementDriver.cs @@ -19,7 +19,7 @@ namespace Orchard.Layouts.Drivers { _transactionManager = transactionManager; } - protected override void OnDisplaying(ContentPart element, ElementDisplayContext context) { + 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. diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/HtmlElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/HtmlElementDriver.cs index b4698ad9a..64807cbb1 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/HtmlElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/HtmlElementDriver.cs @@ -27,7 +27,7 @@ namespace Orchard.Layouts.Drivers { return Editor(context, editor); } - protected override void OnDisplaying(Html element, ElementDisplayContext context) { + protected override void OnDisplaying(Html element, ElementDisplayingContext context) { var text = element.Content; var flavor = "html"; var processedText = ApplyHtmlFilters(text, flavor); diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ImageElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ImageElementDriver.cs index 7fca50f13..03849aac4 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ImageElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ImageElementDriver.cs @@ -33,7 +33,7 @@ namespace Orchard.Layouts.Drivers { return Editor(context, editor); } - protected override void OnDisplaying(Image element, ElementDisplayContext context) { + protected override void OnDisplaying(Image element, ElementDisplayingContext context) { var imageId = element.MediaId; var image = imageId != null ? GetImage(imageId.Value) : default(ImagePart); context.ElementShape.ImagePart = image; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/MarkdownElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/MarkdownElementDriver.cs index 568ffe969..4997826a7 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/MarkdownElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/MarkdownElementDriver.cs @@ -22,7 +22,7 @@ namespace Orchard.Layouts.Drivers { return Editor(context, editor); } - protected override void OnDisplaying(MarkdownElement element, ElementDisplayContext context) { + protected override void OnDisplaying(MarkdownElement element, ElementDisplayingContext context) { context.ElementShape.ProcessedContent = ToHtml(element.Content); } diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/MediaItemElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/MediaItemElementDriver.cs index f1f71e0bd..5cfbe8bc6 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/MediaItemElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/MediaItemElementDriver.cs @@ -39,7 +39,7 @@ namespace Orchard.Layouts.Drivers { return Editor(context, editor); } - protected override void OnDisplaying(MediaItem element, ElementDisplayContext context) { + protected override void OnDisplaying(MediaItem element, ElementDisplayingContext context) { var contentItemIds = RemoveCurrentContentItemId(element.MediaItemIds, context.Content.Id); var displayType = context.DisplayType != "Design" ? element.DisplayType : "Thumbnail"; var contentItems = GetContentItems(contentItemIds).ToArray(); diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ParagraphElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ParagraphElementDriver.cs index 67b440537..f892486cb 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ParagraphElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ParagraphElementDriver.cs @@ -27,7 +27,7 @@ namespace Orchard.Layouts.Drivers { return Editor(context, editor); } - protected override void OnDisplaying(Paragraph element, ElementDisplayContext context) { + protected override void OnDisplaying(Paragraph element, ElementDisplayingContext context) { var text = element.Content; var flavor = "html"; var processedText = ApplyHtmlFilters(text, flavor); diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ProjectionElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ProjectionElementDriver.cs index 9d12690ef..ea0939206 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ProjectionElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ProjectionElementDriver.cs @@ -53,7 +53,7 @@ namespace Orchard.Layouts.Drivers { } } - protected override void OnDisplaying(Projection element, ElementDisplayContext context) { + protected override void OnDisplaying(Projection element, ElementDisplayingContext context) { var queryId = element.QueryId; var layoutId = element.LayoutId; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/RowElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/RowElementDriver.cs index a99ffe376..7261e75e8 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/RowElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/RowElementDriver.cs @@ -1,7 +1,52 @@ -using Orchard.Layouts.Elements; +using System.Collections.Generic; +using System.Linq; +using Orchard.Layouts.Elements; +using Orchard.Layouts.Framework.Display; using Orchard.Layouts.Framework.Drivers; namespace Orchard.Layouts.Drivers { public class RowElementDriver : ElementDriver { + protected override void OnDisplaying(Row element, ElementDisplayingContext context) { + context.ElementShape.Collapsed = false; + } + + protected override void OnDisplayed(Row element, ElementDisplayedContext context) { + var columnShapes = ((IEnumerable)context.ElementShape.Items).ToList(); + var columnIndex = 0; + + foreach (var columnShape in columnShapes) { + var column = (Column)columnShape.Element; + + if (column.Collapsible == true && IsEmpty(columnShape)) { + columnShape.Collapsed = true; + + var sibling = GetNonCollapsedSibling(columnShapes, columnIndex); + if (sibling != null) { + // Increase the width of the sibling by the width of the current column. + sibling.Width += columnShape.Width; + //sibling.Width += GetAvailableWidth(columnShapes.Skip(columnIndex)); + } + else { + // The row has only one column, which is collapsed, so we hide the row entirely. + context.ElementShape.Collapsed = true; + } + } + + ++columnIndex; + } + } + + private dynamic GetNonCollapsedSibling(IList columnShapes, int index) { + var siblings = index == 0 ? columnShapes : columnShapes.Reverse(); + return siblings.FirstOrDefault(x => x.Collapsed == false); + } + + private int GetAvailableWidth(IEnumerable columnShapes) { + return columnShapes.Where(x => IsEmpty(x)).Sum(x => (int) x.Width); + } + + private static bool IsEmpty(dynamic shape) { + return shape.Items.Count == 0; + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ShapeElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ShapeElementDriver.cs index b2cf2e10f..a3799202f 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ShapeElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ShapeElementDriver.cs @@ -19,7 +19,7 @@ namespace Orchard.Layouts.Drivers { get { yield return "ShapeElement"; } } - protected override void OnDisplaying(Shape element, ElementDisplayContext context) { + protected override void OnDisplaying(Shape element, ElementDisplayingContext context) { if (String.IsNullOrWhiteSpace(element.ShapeType)) return; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/TextElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/TextElementDriver.cs index e4d6f0500..22a6eaea9 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/TextElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/TextElementDriver.cs @@ -27,7 +27,7 @@ namespace Orchard.Layouts.Drivers { return Editor(context, editor); } - protected override void OnDisplaying(Text element, ElementDisplayContext context) { + protected override void OnDisplaying(Text element, ElementDisplayingContext context) { var text = element.Content; var flavor = "textarea"; var processedText = ApplyHtmlFilters(text, flavor); diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/VectorImageElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/VectorImageElementDriver.cs index e716a1abe..bbc50633a 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/VectorImageElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/VectorImageElementDriver.cs @@ -37,7 +37,7 @@ namespace Orchard.Layouts.Drivers { return Editor(context, editor); } - protected override void OnDisplaying(VectorImage element, ElementDisplayContext context) { + protected override void OnDisplaying(VectorImage element, ElementDisplayingContext context) { var mediaId = element.MediaId; var vectorImage = mediaId != null ? GetVectorImage(mediaId.Value) : default(VectorImagePart); context.ElementShape.VectorImagePart = vectorImage; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplay.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplay.cs index d43ad1ddb..297d710b1 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplay.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplay.cs @@ -25,9 +25,7 @@ namespace Orchard.Layouts.Framework.Display { Element element, IContent content, string displayType = null, - IUpdateModel updater = null, - string renderEventName = null, - string renderEventArgs = null) { + IUpdateModel updater = null) { var createShapeContext = new ElementCreatingDisplayShapeContext { Element = element, @@ -39,7 +37,7 @@ namespace Orchard.Layouts.Framework.Display { var typeName = element.GetType().Name; var category = element.Category.ToSafeName(); - var drivers = element.Descriptor.GetDrivers(); + var drivers = element.Descriptor.GetDrivers().ToList(); var elementShapeArguments = CreateArguments(element, content); var elementShape = (dynamic)_shapeFactory.Create("Element", elementShapeArguments, () => new ZoneHolding(() => _shapeFactory.Create("ElementZone"))); @@ -49,19 +47,19 @@ namespace Orchard.Layouts.Framework.Display { elementShape.Metadata.Alternates.Add(String.Format("Elements_{0}__{1}", typeName, category)); elementShape.Metadata.Alternates.Add(String.Format("Elements_{0}_{1}__{2}", typeName, displayType, category)); - var displayContext = new ElementDisplayContext { + var displayingContext = new ElementDisplayingContext { Element = element, ElementShape = elementShape, DisplayType = displayType, Content = content, - Updater = updater, - RenderEventName = renderEventName, - RenderEventArgs = renderEventArgs + Updater = updater }; - _elementEventHandlerHandler.Displaying(displayContext); - InvokeDrivers(drivers, driver => driver.Displaying(displayContext)); - element.Descriptor.Display(displayContext); + _elementEventHandlerHandler.Displaying(displayingContext); + InvokeDrivers(drivers, driver => driver.Displaying(displayingContext)); + + if (element.Descriptor.Displaying != null) + element.Descriptor.Displaying(displayingContext); var container = element as Container; @@ -75,14 +73,28 @@ namespace Orchard.Layouts.Framework.Display { } } + var displayedContext = new ElementDisplayedContext { + Element = element, + ElementShape = elementShape, + DisplayType = displayType, + Content = content, + Updater = updater + }; + + _elementEventHandlerHandler.Displayed(displayedContext); + InvokeDrivers(drivers, driver => driver.Displayed(displayedContext)); + + if (element.Descriptor.Displayed != null) + element.Descriptor.Displayed(displayedContext); + return elementShape; } - public dynamic DisplayElements(IEnumerable elements, IContent content, string displayType = null, IUpdateModel updater = null, string renderEventName = null, string renderEventArgs = null) { + public dynamic DisplayElements(IEnumerable elements, IContent content, string displayType = null, IUpdateModel updater = null) { var layoutRoot = (dynamic)_shapeFactory.Create("LayoutRoot"); foreach (var element in elements) { - var elementShape = DisplayElement(element, content, displayType, updater, renderEventName, renderEventArgs); + var elementShape = DisplayElement(element, content, displayType, updater); layoutRoot.Add(elementShape); } diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplayContext.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplayedContext.cs similarity index 71% rename from src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplayContext.cs rename to src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplayedContext.cs index 392ce54e1..d8b885625 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplayContext.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplayedContext.cs @@ -2,13 +2,11 @@ using Orchard.ContentManagement; using Orchard.Layouts.Framework.Elements; namespace Orchard.Layouts.Framework.Display { - public class ElementDisplayContext { + public class ElementDisplayedContext { public IContent Content { get; set; } public Element Element { get; set; } public string DisplayType { get; set; } public dynamic ElementShape { get; set; } public IUpdateModel Updater { get; set; } - public string RenderEventName { get; set; } - public string RenderEventArgs { get; set; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplayingContext.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplayingContext.cs new file mode 100644 index 000000000..2bc873803 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/ElementDisplayingContext.cs @@ -0,0 +1,12 @@ +using Orchard.ContentManagement; +using Orchard.Layouts.Framework.Elements; + +namespace Orchard.Layouts.Framework.Display { + public class ElementDisplayingContext { + public IContent Content { get; set; } + public Element Element { get; set; } + public string DisplayType { get; set; } + public dynamic ElementShape { get; set; } + public IUpdateModel Updater { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/IElementDisplay.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/IElementDisplay.cs index 9e14e0507..a06c66ea5 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/IElementDisplay.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Display/IElementDisplay.cs @@ -4,7 +4,7 @@ using Orchard.Layouts.Framework.Elements; namespace Orchard.Layouts.Framework.Display { public interface IElementDisplay : IDependency { - dynamic DisplayElement(Element element, IContent content, string displayType = null, IUpdateModel updater = null, string renderEventName = null, string renderEventArgs = null); - dynamic DisplayElements(IEnumerable elements, IContent content, string displayType = null, IUpdateModel updater = null, string renderEventName = null, string renderEventArgs = null); + dynamic DisplayElement(Element element, IContent content, string displayType = null, IUpdateModel updater = null); + dynamic DisplayElements(IEnumerable elements, IContent content, string displayType = null, IUpdateModel updater = null); } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/ElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/ElementDriver.cs index 946b21cfa..889ae6307 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/ElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/ElementDriver.cs @@ -17,10 +17,14 @@ namespace Orchard.Layouts.Framework.Drivers { return OnUpdateEditor((TElement)context.Element, context); } - public void Displaying(ElementDisplayContext context) { + public void Displaying(ElementDisplayingContext context) { OnDisplaying((TElement) context.Element, context); } + public void Displayed(ElementDisplayedContext context) { + OnDisplayed((TElement)context.Element, context); + } + public void LayoutSaving(ElementSavingContext context) { OnLayoutSaving((TElement) context.Element, context); } @@ -45,7 +49,10 @@ namespace Orchard.Layouts.Framework.Drivers { return OnBuildEditor(element, context); } - protected virtual void OnDisplaying(TElement element, ElementDisplayContext context) { + protected virtual void OnDisplaying(TElement element, ElementDisplayingContext context) { + } + + protected virtual void OnDisplayed(TElement element, ElementDisplayedContext context) { } protected virtual void OnLayoutSaving(TElement element, ElementSavingContext context) { diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/IElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/IElementDriver.cs index 910166278..2b21e99a2 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/IElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/IElementDriver.cs @@ -6,7 +6,8 @@ namespace Orchard.Layouts.Framework.Drivers { int Priority { get; } EditorResult BuildEditor(ElementEditorContext context); EditorResult UpdateEditor(ElementEditorContext context); - void Displaying(ElementDisplayContext context); + void Displaying(ElementDisplayingContext context); + void Displayed(ElementDisplayedContext context); void LayoutSaving(ElementSavingContext context); void Removing(ElementRemovingContext context); void Exporting(ExportElementContext context); diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Elements/ElementDescriptor.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Elements/ElementDescriptor.cs index bc300d1e5..4de7a1889 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Elements/ElementDescriptor.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Elements/ElementDescriptor.cs @@ -15,7 +15,7 @@ namespace Orchard.Layouts.Framework.Elements { Category = category; GetDrivers = Enumerable.Empty; CreatingDisplay = context => { }; - Display = context => {}; + Displaying = context => {}; Editor = context => { }; UpdateEditor = context => { }; StateBag = new Dictionary(); @@ -29,7 +29,8 @@ namespace Orchard.Layouts.Framework.Elements { public string TypeName { get; set; } public Func> GetDrivers { get; set; } public Action CreatingDisplay { get; set; } - public Action Display { get; set; } + public Action Displaying { get; set; } + public Action Displayed { get; set; } public Action Editor { get; set; } public Action UpdateEditor { get; set; } public bool IsSystemElement { get; set; } diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj b/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj index b428dc728..24d89c4a7 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj @@ -424,6 +424,7 @@ + @@ -560,7 +561,7 @@ - + diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Providers/BlueprintElementHarvester.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Providers/BlueprintElementHarvester.cs index 66847c018..14176a1bb 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Providers/BlueprintElementHarvester.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Providers/BlueprintElementHarvester.cs @@ -41,7 +41,7 @@ namespace Orchard.Layouts.Providers { EnableEditorDialog = false, IsSystemElement = false, CreatingDisplay = creatingDisplayContext => CreatingDisplay(creatingDisplayContext, blueprint), - Display = displayContext => Displaying(displayContext, baseElement), + Displaying = displayContext => Displaying(displayContext, baseElement), StateBag = new Dictionary { {"Blueprint", true}, {"ElementTypeName", baseElement.Descriptor.TypeName} @@ -62,7 +62,7 @@ namespace Orchard.Layouts.Providers { context.Element.Data = bluePrintState; } - private void Displaying(ElementDisplayContext context, Element element) { + private void Displaying(ElementDisplayingContext context, Element element) { var drivers = _elementManager.Value.GetDrivers(element); foreach (var driver in drivers) { diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Providers/ContentFieldElementHarvester.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Providers/ContentFieldElementHarvester.cs index 0ed555c76..322019cfb 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Providers/ContentFieldElementHarvester.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Providers/ContentFieldElementHarvester.cs @@ -45,7 +45,7 @@ namespace Orchard.Layouts.Providers { var name = String.Format("{0}.{1}", part.Name, field.Name); var displayName = field.DisplayName; yield return new ElementDescriptor(elementType, name, T(displayName), T(field.DisplayName), contentFieldElement.Category) { - Display = displayContext => Displaying(displayContext), + Displaying = displayContext => Displaying(displayContext), ToolboxIcon = "\uf1b2" }; } @@ -68,7 +68,7 @@ namespace Orchard.Layouts.Providers { return fields.Where(t => blackList.All(x => t.Item2.FieldDefinition.Name != x)); } - private void Displaying(ElementDisplayContext context) { + private void Displaying(ElementDisplayingContext context) { var contentItem = context.Content.ContentItem; var typeName = context.Element.Descriptor.TypeName; var contentField = contentItem.GetContentField(typeName); diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Providers/ContentPartElementHarvester.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Providers/ContentPartElementHarvester.cs index a643752de..281dfee9a 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Providers/ContentPartElementHarvester.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Providers/ContentPartElementHarvester.cs @@ -39,7 +39,7 @@ namespace Orchard.Layouts.Providers { var partDescription = partSettings != null ? partSettings.Description : null; var description = T(!String.IsNullOrWhiteSpace(partDescription) ? partDescription : contentPart.Name); return new ElementDescriptor(elementType, contentPart.Name, T(contentPart.Name.CamelFriendly()), description, contentPartElement.Category) { - Display = displayContext => Displaying(displayContext), + Displaying = displayContext => Displaying(displayContext), ToolboxIcon = "\uf1b2", StateBag = new Dictionary { {"ElementTypeName", contentPart.Name} @@ -60,7 +60,7 @@ namespace Orchard.Layouts.Providers { return parts.Where(p => p.Settings.GetModel().Placable); } - private void Displaying(ElementDisplayContext context) { + private void Displaying(ElementDisplayingContext context) { var drivers = _elementManager.Value.GetDrivers(context.Element); foreach (var driver in drivers) { diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Providers/SnippetElementHarvester.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Providers/SnippetElementHarvester.cs index 0b1d1f403..9a05ac1ae 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Providers/SnippetElementHarvester.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Providers/SnippetElementHarvester.cs @@ -49,13 +49,13 @@ namespace Orchard.Layouts.Providers { var elementName = GetDisplayName(shapeDescriptor.Value.BindingSource); var closureDescriptor = shapeDescriptor; yield return new ElementDescriptor(elementType, shapeType, T(elementName), T("An element that renders the {0} shape.", shapeType), snippetElement.Category) { - Display = displayContext => Displaying(displayContext, closureDescriptor.Value), + Displaying = displayContext => Displaying(displayContext, closureDescriptor.Value), ToolboxIcon = "\uf10c" }; } } - private void Displaying(ElementDisplayContext context, ShapeDescriptor shapeDescriptor) { + private void Displaying(ElementDisplayingContext context, ShapeDescriptor shapeDescriptor) { var shapeType = shapeDescriptor.ShapeType; var shape = _shapeFactory.Value.Create(shapeType); context.ElementShape.Snippet = shape; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Services/ElementEventHandlerBase.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Services/ElementEventHandlerBase.cs index b89903aa8..f0a7df52f 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Services/ElementEventHandlerBase.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Services/ElementEventHandlerBase.cs @@ -5,7 +5,8 @@ namespace Orchard.Layouts.Services { public abstract class ElementEventHandlerBase : Component, IElementEventHandler { public virtual void Creating(ElementCreatingContext context) { } public virtual void Created(ElementCreatedContext context) { } - public virtual void Displaying(ElementDisplayContext context) { } + public virtual void Displaying(ElementDisplayingContext context) { } + public virtual void Displayed(ElementDisplayedContext context) { } public virtual void BuildEditor(ElementEditorContext context) { } public virtual void UpdateEditor(ElementEditorContext context) { } } diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Services/IElementEventHandler.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Services/IElementEventHandler.cs index 5ded94442..077948241 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Services/IElementEventHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Services/IElementEventHandler.cs @@ -6,7 +6,8 @@ namespace Orchard.Layouts.Services { public interface IElementEventHandler : IEventHandler { void Creating(ElementCreatingContext context); void Created(ElementCreatedContext context); - void Displaying(ElementDisplayContext context); + void Displaying(ElementDisplayingContext context); + void Displayed(ElementDisplayedContext context); void BuildEditor(ElementEditorContext context); void UpdateEditor(ElementEditorContext context); } diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Views/Elements/Column.cshtml b/src/Orchard.Web/Modules/Orchard.Layouts/Views/Elements/Column.cshtml index 9d6c19ce7..f9b3140e2 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Views/Elements/Column.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Views/Elements/Column.cshtml @@ -1,10 +1,8 @@ @using Orchard.DisplayManagement.Shapes -@using Orchard.Layouts.Elements @using Orchard.Layouts.Helpers @{ - var element = (Column) Model.Element; - var columnSpan = element.Width; - var columnOffset = element.Offset; + var columnSpan = (int?)Model.Width; + var columnOffset = (int?)Model.Offset; var columnOffsetCss = columnOffset > 0 ? "offset-" + columnOffset : default(string); var tagBuilder = TagBuilderExtensions.AddCommonElementAttributes(new OrchardTagBuilder("div"), Model); @@ -12,6 +10,8 @@ tagBuilder.AddCssClass(String.Concat("span-", columnSpan)); tagBuilder.AddCssClass(columnOffsetCss); } -@tagBuilder.StartElement -@DisplayChildren(Model) -@tagBuilder.EndElement \ No newline at end of file +@if (!Model.Collapsed) { + @tagBuilder.StartElement + @DisplayChildren(Model) + @tagBuilder.EndElement +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Views/Elements/Row.cshtml b/src/Orchard.Web/Modules/Orchard.Layouts/Views/Elements/Row.cshtml index b8dda2fb4..b5c9d2adb 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Views/Elements/Row.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Views/Elements/Row.cshtml @@ -4,6 +4,8 @@ var tagBuilder = TagBuilderExtensions.AddCommonElementAttributes(new OrchardTagBuilder("div"), Model); tagBuilder.AddCssClass("row"); } -@tagBuilder.StartElement -@DisplayChildren(Model) -@tagBuilder.EndElement \ No newline at end of file +@if (!Model.Collapsed) { + @tagBuilder.StartElement + @DisplayChildren(Model) + @tagBuilder.EndElement +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Drivers/ColumnElementDriver.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Drivers/ColumnElementDriver.cs index d51a011fc..012673b9e 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Drivers/ColumnElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Drivers/ColumnElementDriver.cs @@ -23,7 +23,11 @@ namespace Orchard.Widgets.Drivers { _widgetsService = widgetsService; } - protected override void OnDisplaying(Column element, ElementDisplayContext context) { + protected override void OnDisplaying(Column element, ElementDisplayingContext context) { + RenderWidgets(element, context); + } + + private void RenderWidgets(Column element, ElementDisplayingContext context) { var zoneName = element.ZoneName; if (String.IsNullOrWhiteSpace(zoneName))