#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,
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
};

View File

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

View File

@@ -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();

View File

@@ -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<dynamic>();
State = new StateDictionary();
}
public IList<dynamic> Editors { get; set; }
public StateDictionary State { get; set; }
public EditorResult Add(dynamic editor) {
((IList)Editors).Add(editor);

View File

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

View File

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

View File

@@ -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<CommonElementSettings>();
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) {

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="Helpers\DictionaryExtensions.cs" />
<Compile Include="Helpers\EditorResultExtensions.cs" />
<Compile Include="Helpers\PrefixHelper.cs" />
<Compile Include="Providers\BlueprintElementHarvester.cs" />
<Compile Include="Services\CurrentControllerAccessor.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;
namespace Orchard.Layouts.ViewModels {
public class ElementWrapperPartViewModel {
public IList<string> Tabs { get; set; }
public EditorResult ElementEditorResult { get; set; }
public dynamic ElementEditor { get; set; }
public IList<dynamic> ElementEditors { get; set; }
public string ElementTypeName { get; set; }
public LocalizedString ElementDisplayText { get; set; }
}

View File

@@ -1,2 +1,14 @@
@model Orchard.Layouts.ViewModels.ElementWrapperPartViewModel
@Display(Model.ElementEditor)
@using Orchard.Layouts.Models
@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");
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)

View File

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