mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-01-24 05:42:10 +08:00
#21005: Fixing ElementWrapperPart and persistence of common element settings.
Work Item: 21005
This commit is contained in:
@@ -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
|
||||
};
|
||||
|
||||
@@ -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()
|
||||
};
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -54,7 +54,6 @@ namespace Orchard.Layouts.Framework.Drivers {
|
||||
}
|
||||
|
||||
var result = new EditorResult {
|
||||
State = context.Element.State,
|
||||
Editors = editorShapes.ToList()
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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" />
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user