diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/BlueprintAdminController.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/BlueprintAdminController.cs index fbfbae0ec..08103b3af 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/BlueprintAdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/BlueprintAdminController.cs @@ -112,7 +112,7 @@ namespace Orchard.Layouts.Controllers { EditorResult = editorResult, TypeName = blueprint.BaseElementTypeName, DisplayText = descriptor.DisplayText, - ElementState = editorResult.State.Serialize(), + ElementState = element.State.Serialize(), Tabs = editorResult.CollectTabs().ToArray(), BaseElement = element }; @@ -134,7 +134,7 @@ namespace Orchard.Layouts.Controllers { EditorResult = editorResult, TypeName = model.TypeName, DisplayText = descriptor.DisplayText, - ElementState = editorResult.State.Serialize(), + ElementState = element.State.Serialize(), Tabs = editorResult.CollectTabs().ToArray(), BaseElement = element }; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs index a3290960e..d53088fad 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs @@ -81,7 +81,7 @@ namespace Orchard.Layouts.Controllers { EditorResult = editorResult, TypeName = id, DisplayText = descriptor.DisplayText, - ElementState = editorResult.State.Serialize(), + ElementState = element.State.Serialize(), Submitted = !descriptor.EnableEditorDialog, Tabs = editorResult.CollectTabs().ToArray() }; @@ -104,7 +104,7 @@ namespace Orchard.Layouts.Controllers { EditorResult = editorResult, TypeName = model.TypeName, DisplayText = descriptor.DisplayText, - ElementState = editorResult.State.Serialize(), + ElementState = element.State.Serialize(), Tabs = editorResult.CollectTabs().ToArray() }; @@ -133,7 +133,7 @@ namespace Orchard.Layouts.Controllers { EditorResult = editorResult, TypeName = typeName, DisplayText = descriptor.DisplayText, - ElementState = editorResult.State.Serialize(), + ElementState = element.State.Serialize(), Tabs = editorResult.CollectTabs().ToArray() }; @@ -155,7 +155,7 @@ namespace Orchard.Layouts.Controllers { EditorResult = editorResult, TypeName = model.TypeName, DisplayText = descriptor.DisplayText, - ElementState = editorResult.State.Serialize(), + ElementState = element.State.Serialize(), Tabs = editorResult.CollectTabs().ToArray() }; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ElementWrapperPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ElementWrapperPartDriver.cs index b28330864..66b267898 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ElementWrapperPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/ElementWrapperPartDriver.cs @@ -1,4 +1,5 @@ -using System.Web.Mvc; +using System.Linq; +using System.Web.Mvc; using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.Layouts.Framework.Display; @@ -41,16 +42,17 @@ namespace Orchard.Layouts.Drivers { var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, part.ElementTypeName); var state = ElementStateHelper.Deserialize(part.ElementState); var element = _elementManager.ActivateElement(descriptor, new ActivateElementArgs { ElementState = state }); - var context = CreateEditorContext(describeContext.Content, element, updater, shapeHelper); + var context = (ElementEditorContext)CreateEditorContext(describeContext.Content, element, updater, shapeHelper); var editorResult = updater != null ? _elementManager.UpdateEditor(context) : _elementManager.BuildEditor(context); var viewModel = new ElementWrapperPartViewModel { + Tabs = editorResult.CollectTabs().ToArray(), ElementTypeName = part.ElementTypeName, ElementDisplayText = element.DisplayText, ElementEditorResult = editorResult, - ElementEditor = editorResult.EditorShape, + ElementEditors = editorResult.Editors, }; - state = (StateDictionary)editorResult.State; + state = element.State; if (updater != null) { part.ElementState = state.Serialize(); diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/EditorResult.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/EditorResult.cs index 7cf440414..f8a96db7b 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/EditorResult.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/EditorResult.cs @@ -1,16 +1,13 @@ using System.Collections; using System.Collections.Generic; -using Orchard.Layouts.Framework.Elements; namespace Orchard.Layouts.Framework.Drivers { public class EditorResult { public EditorResult() { Editors = new List(); - State = new StateDictionary(); } public IList Editors { get; set; } - public StateDictionary State { get; set; } public EditorResult Add(dynamic editor) { ((IList)Editors).Add(editor); 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 e71b7b189..f8537c450 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/ElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Framework/Drivers/ElementDriver.cs @@ -54,7 +54,6 @@ namespace Orchard.Layouts.Framework.Drivers { } var result = new EditorResult { - State = context.Element.State, Editors = editorShapes.ToList() }; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Handlers/ElementDriversCoordinator.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Handlers/ElementDriversCoordinator.cs index 8f66d3e4f..a2f89011f 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Handlers/ElementDriversCoordinator.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Handlers/ElementDriversCoordinator.cs @@ -1,6 +1,5 @@ using System; using Orchard.Layouts.Framework.Drivers; -using Orchard.Layouts.Helpers; using Orchard.Layouts.Services; namespace Orchard.Layouts.Handlers { @@ -35,8 +34,6 @@ namespace Orchard.Layouts.Handlers { context.EditorResult.Add(editor); } - - context.EditorResult.State = context.EditorResult.State.Combine(editorResult.State, true); } } } diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Handlers/ElementSettingsHandler.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Handlers/ElementSettingsHandler.cs index b39ff1c6d..6a54edcbd 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Handlers/ElementSettingsHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Handlers/ElementSettingsHandler.cs @@ -1,4 +1,6 @@ using Orchard.Layouts.Framework.Drivers; +using Orchard.Layouts.Framework.Elements; +using Orchard.Layouts.Helpers; using Orchard.Layouts.Services; using Orchard.Layouts.Settings; @@ -7,12 +9,21 @@ namespace Orchard.Layouts.Handlers { public override void BuildEditor(ElementEditorContext context) { var viewModel = context.Element.State.GetModel(); var commonSettingsEditor = context.ShapeFactory.EditorTemplate( - TemplateName: "ElementSettings.Common", - Model: viewModel, + TemplateName: "ElementSettings.Common", + Model: viewModel, Prefix: "CommonElementSettings"); commonSettingsEditor.Metadata.Position = "Settings:5"; context.EditorResult.Add(commonSettingsEditor); + + if (context.Updater != null) { + context.Updater.TryUpdateModel(viewModel, context.Prefix.AppendPrefix("CommonElementSettings"), null, null); + context.Element.State = context.Element.State.Combine(new StateDictionary { + {"CommonElementSettings.Id", viewModel.Id}, + {"CommonElementSettings.CssClass", viewModel.CssClass}, + {"CommonElementSettings.InlineStyle", viewModel.InlineStyle} + }); + } } public override void UpdateEditor(ElementEditorContext context) { diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Helpers/PrefixHelper.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Helpers/PrefixHelper.cs new file mode 100644 index 000000000..1a88e8678 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Helpers/PrefixHelper.cs @@ -0,0 +1,9 @@ +using System; + +namespace Orchard.Layouts.Helpers { + public static class PrefixHelper { + public static string AppendPrefix(this string currentPrefix, string additionalPrefix) { + return String.IsNullOrWhiteSpace(currentPrefix) ? additionalPrefix : currentPrefix + "." + additionalPrefix; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj b/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj index c8d2cc90e..8d596eaef 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj @@ -227,6 +227,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/ViewModels/ElementWrapperPartViewModel.cs b/src/Orchard.Web/Modules/Orchard.Layouts/ViewModels/ElementWrapperPartViewModel.cs index 16ea3b84b..05c739c70 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/ViewModels/ElementWrapperPartViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/ViewModels/ElementWrapperPartViewModel.cs @@ -1,10 +1,12 @@ -using Orchard.Layouts.Framework.Drivers; +using System.Collections.Generic; +using Orchard.Layouts.Framework.Drivers; using Orchard.Localization; namespace Orchard.Layouts.ViewModels { public class ElementWrapperPartViewModel { + public IList Tabs { get; set; } public EditorResult ElementEditorResult { get; set; } - public dynamic ElementEditor { get; set; } + public IList ElementEditors { get; set; } public string ElementTypeName { get; set; } public LocalizedString ElementDisplayText { get; set; } } diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Views/EditorTemplates/Parts.ElementWrapper.cshtml b/src/Orchard.Web/Modules/Orchard.Layouts/Views/EditorTemplates/Parts.ElementWrapper.cshtml index 7b4ffc37a..1a38d4810 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Views/EditorTemplates/Parts.ElementWrapper.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Views/EditorTemplates/Parts.ElementWrapper.cshtml @@ -1,2 +1,14 @@ -@model Orchard.Layouts.ViewModels.ElementWrapperPartViewModel -@Display(Model.ElementEditor) \ No newline at end of file +@using Orchard.Layouts.Models +@model Orchard.Layouts.ViewModels.ElementWrapperPartViewModel + +@foreach (var tab in Model.Tabs) { +

@T("Element {0}", tab)

+
+ @foreach (var editor in Model.ElementEditorResult.Editors) { + var position = ShapePosition.Parse((String)editor.Metadata.Position); + if (position.Name == tab) { + @Display(editor) + } + } +
+} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Views/ElementBlueprintEditor.cshtml b/src/Orchard.Web/Modules/Orchard.Layouts/Views/ElementBlueprintEditor.cshtml index 53860c430..0783354c5 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Views/ElementBlueprintEditor.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Views/ElementBlueprintEditor.cshtml @@ -4,7 +4,7 @@ Style.Include("element-editor.css"); Script.Require("jQuery"); Script.Include("element-editor.js"); - Layout.LocalNavigation.Add(New.ElementEditor_LocalNav(Tabs: Model.Tabs)); + Layout.LocalNavigation.Add(New.ElementEditor_LocalNav(Tabs: Model.Tabs)); } @Html.ValidationSummary() @Html.HiddenFor(m => m.TypeName) diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Views/ElementEditor.cshtml b/src/Orchard.Web/Modules/Orchard.Layouts/Views/ElementEditor.cshtml index 09f18fe2b..fe87f2225 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Views/ElementEditor.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Views/ElementEditor.cshtml @@ -1,5 +1,4 @@ -@using Orchard.Layouts.Helpers -@using Orchard.Layouts.Models +@using Orchard.Layouts.Models @model Orchard.Layouts.ViewModels.EditElementViewModel @{ Style.Include("element-editor.css"); @@ -37,7 +36,7 @@ command: "@command", element: { typeName: "@Model.TypeName", - state: "@Url.Encode(Model.EditorResult.State.Serialize())" + state: "@Url.Encode(Model.ElementState)" } }); }, 50);