#21005: Fixing ElementWrapperPart and persistence of common element settings.

Work Item: 21005
This commit is contained in:
Sipke Schoorstra
2014-10-15 18:41:16 -07:00
parent 73ce635d26
commit 6fb594eae5
13 changed files with 56 additions and 27 deletions

View File

@@ -112,7 +112,7 @@ namespace Orchard.Layouts.Controllers {
EditorResult = editorResult, EditorResult = editorResult,
TypeName = blueprint.BaseElementTypeName, TypeName = blueprint.BaseElementTypeName,
DisplayText = descriptor.DisplayText, DisplayText = descriptor.DisplayText,
ElementState = editorResult.State.Serialize(), ElementState = element.State.Serialize(),
Tabs = editorResult.CollectTabs().ToArray(), Tabs = editorResult.CollectTabs().ToArray(),
BaseElement = element BaseElement = element
}; };
@@ -134,7 +134,7 @@ namespace Orchard.Layouts.Controllers {
EditorResult = editorResult, EditorResult = editorResult,
TypeName = model.TypeName, TypeName = model.TypeName,
DisplayText = descriptor.DisplayText, DisplayText = descriptor.DisplayText,
ElementState = editorResult.State.Serialize(), ElementState = element.State.Serialize(),
Tabs = editorResult.CollectTabs().ToArray(), Tabs = editorResult.CollectTabs().ToArray(),
BaseElement = element BaseElement = element
}; };

View File

@@ -81,7 +81,7 @@ namespace Orchard.Layouts.Controllers {
EditorResult = editorResult, EditorResult = editorResult,
TypeName = id, TypeName = id,
DisplayText = descriptor.DisplayText, DisplayText = descriptor.DisplayText,
ElementState = editorResult.State.Serialize(), ElementState = element.State.Serialize(),
Submitted = !descriptor.EnableEditorDialog, Submitted = !descriptor.EnableEditorDialog,
Tabs = editorResult.CollectTabs().ToArray() Tabs = editorResult.CollectTabs().ToArray()
}; };
@@ -104,7 +104,7 @@ namespace Orchard.Layouts.Controllers {
EditorResult = editorResult, EditorResult = editorResult,
TypeName = model.TypeName, TypeName = model.TypeName,
DisplayText = descriptor.DisplayText, DisplayText = descriptor.DisplayText,
ElementState = editorResult.State.Serialize(), ElementState = element.State.Serialize(),
Tabs = editorResult.CollectTabs().ToArray() Tabs = editorResult.CollectTabs().ToArray()
}; };
@@ -133,7 +133,7 @@ namespace Orchard.Layouts.Controllers {
EditorResult = editorResult, EditorResult = editorResult,
TypeName = typeName, TypeName = typeName,
DisplayText = descriptor.DisplayText, DisplayText = descriptor.DisplayText,
ElementState = editorResult.State.Serialize(), ElementState = element.State.Serialize(),
Tabs = editorResult.CollectTabs().ToArray() Tabs = editorResult.CollectTabs().ToArray()
}; };
@@ -155,7 +155,7 @@ namespace Orchard.Layouts.Controllers {
EditorResult = editorResult, EditorResult = editorResult,
TypeName = model.TypeName, TypeName = model.TypeName,
DisplayText = descriptor.DisplayText, DisplayText = descriptor.DisplayText,
ElementState = editorResult.State.Serialize(), ElementState = element.State.Serialize(),
Tabs = editorResult.CollectTabs().ToArray() Tabs = editorResult.CollectTabs().ToArray()
}; };

View File

@@ -1,4 +1,5 @@
using System.Web.Mvc; using System.Linq;
using System.Web.Mvc;
using Orchard.ContentManagement; using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Drivers;
using Orchard.Layouts.Framework.Display; using Orchard.Layouts.Framework.Display;
@@ -41,16 +42,17 @@ namespace Orchard.Layouts.Drivers {
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, part.ElementTypeName); var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, part.ElementTypeName);
var state = ElementStateHelper.Deserialize(part.ElementState); var state = ElementStateHelper.Deserialize(part.ElementState);
var element = _elementManager.ActivateElement(descriptor, new ActivateElementArgs { ElementState = state }); 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 editorResult = updater != null ? _elementManager.UpdateEditor(context) : _elementManager.BuildEditor(context);
var viewModel = new ElementWrapperPartViewModel { var viewModel = new ElementWrapperPartViewModel {
Tabs = editorResult.CollectTabs().ToArray(),
ElementTypeName = part.ElementTypeName, ElementTypeName = part.ElementTypeName,
ElementDisplayText = element.DisplayText, ElementDisplayText = element.DisplayText,
ElementEditorResult = editorResult, ElementEditorResult = editorResult,
ElementEditor = editorResult.EditorShape, ElementEditors = editorResult.Editors,
}; };
state = (StateDictionary)editorResult.State; state = element.State;
if (updater != null) { if (updater != null) {
part.ElementState = state.Serialize(); part.ElementState = state.Serialize();

View File

@@ -1,16 +1,13 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using Orchard.Layouts.Framework.Elements;
namespace Orchard.Layouts.Framework.Drivers { namespace Orchard.Layouts.Framework.Drivers {
public class EditorResult { public class EditorResult {
public EditorResult() { public EditorResult() {
Editors = new List<dynamic>(); Editors = new List<dynamic>();
State = new StateDictionary();
} }
public IList<dynamic> Editors { get; set; } public IList<dynamic> Editors { get; set; }
public StateDictionary State { get; set; }
public EditorResult Add(dynamic editor) { public EditorResult Add(dynamic editor) {
((IList)Editors).Add(editor); ((IList)Editors).Add(editor);

View File

@@ -54,7 +54,6 @@ namespace Orchard.Layouts.Framework.Drivers {
} }
var result = new EditorResult { var result = new EditorResult {
State = context.Element.State,
Editors = editorShapes.ToList() Editors = editorShapes.ToList()
}; };

View File

@@ -1,6 +1,5 @@
using System; using System;
using Orchard.Layouts.Framework.Drivers; using Orchard.Layouts.Framework.Drivers;
using Orchard.Layouts.Helpers;
using Orchard.Layouts.Services; using Orchard.Layouts.Services;
namespace Orchard.Layouts.Handlers { namespace Orchard.Layouts.Handlers {
@@ -35,8 +34,6 @@ namespace Orchard.Layouts.Handlers {
context.EditorResult.Add(editor); context.EditorResult.Add(editor);
} }
context.EditorResult.State = context.EditorResult.State.Combine(editorResult.State, true);
} }
} }
} }

View File

@@ -1,4 +1,6 @@
using Orchard.Layouts.Framework.Drivers; using Orchard.Layouts.Framework.Drivers;
using Orchard.Layouts.Framework.Elements;
using Orchard.Layouts.Helpers;
using Orchard.Layouts.Services; using Orchard.Layouts.Services;
using Orchard.Layouts.Settings; using Orchard.Layouts.Settings;
@@ -7,12 +9,21 @@ namespace Orchard.Layouts.Handlers {
public override void BuildEditor(ElementEditorContext context) { public override void BuildEditor(ElementEditorContext context) {
var viewModel = context.Element.State.GetModel<CommonElementSettings>(); var viewModel = context.Element.State.GetModel<CommonElementSettings>();
var commonSettingsEditor = context.ShapeFactory.EditorTemplate( var commonSettingsEditor = context.ShapeFactory.EditorTemplate(
TemplateName: "ElementSettings.Common", TemplateName: "ElementSettings.Common",
Model: viewModel, Model: viewModel,
Prefix: "CommonElementSettings"); Prefix: "CommonElementSettings");
commonSettingsEditor.Metadata.Position = "Settings:5"; commonSettingsEditor.Metadata.Position = "Settings:5";
context.EditorResult.Add(commonSettingsEditor); 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) { public override void UpdateEditor(ElementEditorContext context) {

View File

@@ -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;
}
}
}

View File

@@ -227,6 +227,7 @@
<Compile Include="Handlers\ElementDriversCoordinator.cs" /> <Compile Include="Handlers\ElementDriversCoordinator.cs" />
<Compile Include="Helpers\DictionaryExtensions.cs" /> <Compile Include="Helpers\DictionaryExtensions.cs" />
<Compile Include="Helpers\EditorResultExtensions.cs" /> <Compile Include="Helpers\EditorResultExtensions.cs" />
<Compile Include="Helpers\PrefixHelper.cs" />
<Compile Include="Providers\BlueprintElementHarvester.cs" /> <Compile Include="Providers\BlueprintElementHarvester.cs" />
<Compile Include="Services\CurrentControllerAccessor.cs" /> <Compile Include="Services\CurrentControllerAccessor.cs" />
<Compile Include="Services\ElementCreatedContext.cs" /> <Compile Include="Services\ElementCreatedContext.cs" />

View File

@@ -1,10 +1,12 @@
using Orchard.Layouts.Framework.Drivers; using System.Collections.Generic;
using Orchard.Layouts.Framework.Drivers;
using Orchard.Localization; using Orchard.Localization;
namespace Orchard.Layouts.ViewModels { namespace Orchard.Layouts.ViewModels {
public class ElementWrapperPartViewModel { public class ElementWrapperPartViewModel {
public IList<string> Tabs { get; set; }
public EditorResult ElementEditorResult { get; set; } public EditorResult ElementEditorResult { get; set; }
public dynamic ElementEditor { get; set; } public IList<dynamic> ElementEditors { get; set; }
public string ElementTypeName { get; set; } public string ElementTypeName { get; set; }
public LocalizedString ElementDisplayText { get; set; } public LocalizedString ElementDisplayText { get; set; }
} }

View File

@@ -1,2 +1,14 @@
@model Orchard.Layouts.ViewModels.ElementWrapperPartViewModel @using Orchard.Layouts.Models
@Display(Model.ElementEditor) @model Orchard.Layouts.ViewModels.ElementWrapperPartViewModel
@foreach (var tab in Model.Tabs) {
<h2>@T("Element {0}", tab)</h2>
<section>
@foreach (var editor in Model.ElementEditorResult.Editors) {
var position = ShapePosition.Parse((String)editor.Metadata.Position);
if (position.Name == tab) {
@Display(editor)
}
}
</section>
}

View File

@@ -4,7 +4,7 @@
Style.Include("element-editor.css"); Style.Include("element-editor.css");
Script.Require("jQuery"); Script.Require("jQuery");
Script.Include("element-editor.js"); 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.ValidationSummary()
@Html.HiddenFor(m => m.TypeName) @Html.HiddenFor(m => m.TypeName)

View File

@@ -1,5 +1,4 @@
@using Orchard.Layouts.Helpers @using Orchard.Layouts.Models
@using Orchard.Layouts.Models
@model Orchard.Layouts.ViewModels.EditElementViewModel @model Orchard.Layouts.ViewModels.EditElementViewModel
@{ @{
Style.Include("element-editor.css"); Style.Include("element-editor.css");
@@ -37,7 +36,7 @@
command: "@command", command: "@command",
element: { element: {
typeName: "@Model.TypeName", typeName: "@Model.TypeName",
state: "@Url.Encode(Model.EditorResult.State.Serialize())" state: "@Url.Encode(Model.ElementState)"
} }
}); });
}, 50); }, 50);