mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-21 19:34:40 +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,
|
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
|
||||||
};
|
};
|
||||||
|
@@ -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()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
|
@@ -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);
|
||||||
|
@@ -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()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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="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" />
|
||||||
|
@@ -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; }
|
||||||
}
|
}
|
||||||
|
@@ -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>
|
||||||
|
}
|
@@ -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)
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user