diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs index 38dffa4ce..edacf6f91 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs @@ -12,7 +12,6 @@ using Orchard.Layouts.Services; using Orchard.Layouts.ViewModels; using Orchard.Localization; using Orchard.UI.Admin; -using Orchard.Utility.Extensions; namespace Orchard.Layouts.Controllers { [Admin] @@ -21,7 +20,6 @@ namespace Orchard.Layouts.Controllers { private readonly IElementManager _elementManager; private readonly IShapeFactory _shapeFactory; private readonly ITransactionManager _transactionManager; - private readonly ICultureAccessor _cultureAccessor; private readonly IContentManager _contentManager; private readonly IObjectStore _objectStore; private readonly IShapeDisplay _shapeDisplay; @@ -32,7 +30,6 @@ namespace Orchard.Layouts.Controllers { IElementManager elementManager, IShapeFactory shapeFactory, ITransactionManager transactionManager, - ICultureAccessor cultureAccessor, IContentManager contentManager, IObjectStore objectStore, IShapeDisplay shapeDisplay, @@ -42,92 +39,12 @@ namespace Orchard.Layouts.Controllers { _elementManager = elementManager; _shapeFactory = shapeFactory; _transactionManager = transactionManager; - _cultureAccessor = cultureAccessor; _contentManager = contentManager; _objectStore = objectStore; _shapeDisplay = shapeDisplay; _mapper = mapper; } - [HttpPost] - public JsonResult CreateDirect(string typeName, int? contentId = null, string contentType = null) { - var describeContext = CreateDescribeContext(contentId, contentType); - var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, typeName); - var element = _elementManager.ActivateElement(descriptor); - - var dto = new { - typeName = typeName, - typeLabel = descriptor.DisplayText.Text, - typeClass = descriptor.DisplayText.Text.HtmlClassify(), - data = element.Data.Serialize(), - html = RenderElement(element, describeContext) - }; - - return Json(dto); - } - - public ViewResult Create(string id, string session, int? contentId = null, string contentType = null) { - var sessionState = new ElementSessionState { - TypeName = id, - ElementData = null, - ContentId = contentId, - ContentType = contentType - }; - - _objectStore.Set(session, sessionState); - - var describeContext = CreateDescribeContext(contentId, contentType); - var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, id); - var element = _elementManager.ActivateElement(descriptor); - var context = CreateEditorContext(session, describeContext.Content, element); - var editorResult = _elementManager.BuildEditor(context); - var viewModel = new EditElementViewModel { - SessionKey = session, - Layout = describeContext.Content.As(), - EditorResult = editorResult, - TypeName = id, - DisplayText = descriptor.DisplayText, - ElementData = element.Data.Serialize(), - Submitted = !descriptor.EnableEditorDialog, - ElementHtml = RenderElement(element, describeContext), - Tabs = editorResult.CollectTabs().ToArray() - }; - - return View(viewModel); - } - - [HttpPost] - [ValidateInput(false)] - public ViewResult Create(ElementDataViewModel model, string session) { - var sessionState = _objectStore.Get(session); - var contentId = sessionState.ContentId; - var contentType = sessionState.ContentType; - var describeContext = CreateDescribeContext(contentId, contentType); - var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, model.TypeName); - var data = Request.Form.ToDictionary(); - var element = _elementManager.ActivateElement(descriptor, e => e.Data = data); - var context = CreateEditorContext(session, describeContext.Content, element, postedElementData: data, updater: this); - var editorResult = _elementManager.UpdateEditor(context); - var viewModel = new EditElementViewModel { - SessionKey = session, - Layout = describeContext.Content.As(), - EditorResult = editorResult, - TypeName = model.TypeName, - DisplayText = descriptor.DisplayText, - ElementData = element.Data.Serialize(), - Tabs = editorResult.CollectTabs().ToArray(), - }; - - if (!ModelState.IsValid) { - _transactionManager.Cancel(); - } - else { - viewModel.Submitted = true; - viewModel.ElementEditorModel = _mapper.ToEditorModel(element, describeContext); - } - return View(viewModel); - } - [HttpPost] [ValidateInput(false)] public RedirectToRouteResult Edit(string session, string typeName, string elementData, string elementEditorData, int? contentId = null, string contentType = null) { @@ -140,7 +57,7 @@ namespace Orchard.Layouts.Controllers { }; _objectStore.Set(session, state); - return RedirectToAction("Edit", new {session = session}); + return RedirectToAction("Edit", new {session}); } public ViewResult Edit(string session) { @@ -153,7 +70,7 @@ namespace Orchard.Layouts.Controllers { var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, typeName); var data = elementData.Combine(ElementDataHelper.Deserialize(sessionState.ElementEditorData)); var element = _elementManager.ActivateElement(descriptor, e => e.Data = data); - var context = CreateEditorContext(session, describeContext.Content, element, postedElementData: data, elementData: elementData); + var context = CreateEditorContext(session, describeContext.Content, element, elementData); var editorResult = _elementManager.BuildEditor(context); var viewModel = new EditElementViewModel { @@ -172,21 +89,23 @@ namespace Orchard.Layouts.Controllers { [HttpPost] [ValidateInput(false)] - public ViewResult Update(ElementDataViewModel model, string session) { + public ViewResult Update(string session) { var sessionState = _objectStore.Get(session); var contentId = sessionState.ContentId; var contentType = sessionState.ContentType; - var describeContext = CreateDescribeContext(contentId, contentType); - var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, model.TypeName); + var typeName = sessionState.TypeName; var elementData = ElementDataHelper.Deserialize(sessionState.ElementData); - var data = Request.Form.ToDictionary(); + var describeContext = CreateDescribeContext(contentId, contentType); + var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, typeName); + var data = elementData.Combine(ElementDataHelper.Deserialize(sessionState.ElementEditorData)); var element = _elementManager.ActivateElement(descriptor, e => e.Data = data); - var context = CreateEditorContext(session, describeContext.Content, element, postedElementData: data, elementData: elementData, updater: this); + var context = CreateEditorContext(session, describeContext.Content, element, elementData, this); var editorResult = _elementManager.UpdateEditor(context); + var viewModel = new EditElementViewModel { Layout = describeContext.Content.As(), EditorResult = editorResult, - TypeName = model.TypeName, + TypeName = typeName, DisplayText = descriptor.DisplayText, ElementData = element.Data.Serialize(), Tabs = editorResult.CollectTabs().ToArray(), @@ -214,20 +133,17 @@ namespace Orchard.Layouts.Controllers { IContent content, Element element, ElementDataDictionary elementData = null, - ElementDataDictionary postedElementData = null, IUpdateModel updater = null) { - postedElementData = postedElementData ?? new ElementDataDictionary(); var context = new ElementEditorContext { Session = session, Content = content, Element = element, Updater = updater, ElementData = elementData ?? new ElementDataDictionary(), - ValueProvider = postedElementData.ToValueProvider(_cultureAccessor.CurrentCulture), + ValueProvider = ValueProvider, ShapeFactory = _shapeFactory }; - ValueProvider = context.ValueProvider; return context; } diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj b/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj index c25bf3fb8..8771e0175 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj @@ -133,7 +133,6 @@ - diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutDesignerHost.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutDesignerHost.js index 59d865c63..2ac119d0a 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutDesignerHost.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutDesignerHost.js @@ -12,12 +12,7 @@ confirmDeletePrompt: self.element.data("confirm-delete-prompt"), displayType: self.element.data("display-type"), endpoints: { - render: self.element.data("render-url"), edit: self.element.data("edit-url"), - add: self.element.data("add-url"), - addDirect: self.element.data("add-direct-url"), - settings: self.element.data("settings-url"), - browse: self.element.data("element-browser-url"), applyTemplate: self.element.data("apply-template-url") }, domOperations: { diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/designer.canvas.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/designer.canvas.js deleted file mode 100644 index d97fa982f..000000000 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/designer.canvas.js +++ /dev/null @@ -1,162 +0,0 @@ -(function ($) { - var LayoutDesigner = function (element) { - var self = this; - this.element = element; - this.canvas = element.find(".canvas"); - this.toolbar = new window.Orchard.Layouts.CanvasToolbar(element.find(".canvas-toolbar")); - this.element.data("layout-designer", this); - this.settings = { - antiForgeryToken: self.element.data("anti-forgery-token"), - editorDialogTitleFormat: self.element.data("editor-dialog-title-format"), - editorDialogName: self.element.data("editor-dialog-name"), - confirmDeletePrompt: self.element.data("confirm-delete-prompt"), - displayType: self.element.data("display-type"), - endpoints: { - render: self.element.data("render-url"), - edit: self.element.data("edit-url"), - settings: self.element.data("settings-url"), - browse: self.element.data("element-browser-url"), - applyTemplate: self.element.data("apply-template-url") - }, - domOperations: { - append: function (container, element) { container.append(element); }, - replace: function (currentElement, newElement) { currentElement.replaceWith(newElement); } - } - }; - - this.browse = function (targetContainer) { - var href = self.settings.endpoints.browse; - var w = window.parent || window; - var dialog = new w.Orchard.Layouts.Dialog(".dialog-template." + self.settings.editorDialogName); - - dialog.show(); - dialog.load(href); - - dialog.element.on("command", function (e, data) { - if (data.command == "add" || data.command == "save") { - var graph = { - elements: [ - { - typeName: data.element.typeName, - data: data.element.data - } - ] - } - self.renderGraph(targetContainer, graph, self.settings.domOperations.append); - self.element.find("a.add.start").removeClass("start").hide(); - - dialog.close(); - } - }); - }; - - this.refreshElement = function (elementUI, elementData) { - // Serialize the element UI into an object graph. - var graph = {}; - var data = elementData; - var stateFormValues = data ? $.deserialize(data) : null; - var formData = $.extend({}, stateFormValues); - window.Orchard.Layouts.Serializer.serialize(graph, elementUI); - - if (data) { - // Update the element with the new Data. - graph.elements[0].state = data; - } - - // Special case for columns - we need to refresh the row, as changes to the column will have an effect to its silbings. - if (elementUI.is(".x-column")) { - // Serialize the parent UI into an object graph. - var containerUI = elementUI.parents(".x-container:first"); - var containerGraph = {}; - window.Orchard.Layouts.Serializer.serialize(containerGraph, containerUI); - containerGraph.elements[0].elements.splice(graph.elements[0].index, 1, graph.elements[0]); - - // Render the graph. - this.renderGraph(containerUI, containerGraph, self.settings.domOperations.replace, formData); - } else { - // Render the graph. - this.renderGraph(elementUI, graph, self.settings.domOperations.replace, formData); - } - }; - - this.serialize = window.Orchard.Layouts.Serializer.serialize; - - this.applyTemplate = function (templateId) { - var graph = this.serialize({}, this.canvas); - - $.ajax({ - url: self.settings.endpoints.applyTemplate, - data: { - templateId: templateId, - layoutstate: JSON.stringify(graph), - __RequestVerificationToken: self.settings.antiForgeryToken - }, - dataType: "html", - type: "post" - }).then(function (html) { - self.canvas.find(".x-root > .x-holder").html(html); - - // Trigger event. - self.element.trigger("elementupdated", { elementUI: self.canvas }); - }); - }; - - this.toolbar.element.on("templateselected", function (e, data) { - var templateId = data.templateId; - self.applyTemplate(templateId); - }); - - var onEditElement = function (e) { - var sender = $(e.sender); - var elementUI = sender.closest(".x-element"); - var elementData = elementUI.data("element"); - var data = elementData.data; - var dialog = new window.Orchard.Layouts.Dialog(".dialog-template"); - - dialog.show(); - dialog.load(self.settings.endpoints.edit, { - typeName: elementData.typeName, - elementData: data, - __RequestVerificationToken: self.settings.antiForgeryToken - }, "post"); - - dialog.element.on("command", function (e, args) { - if (args.command == "save") { - self.refreshElement(elementUI, args.element.data); - dialog.close(); - } - }); - }; - - - var onRemoveElement = function (e) { - var sender = $(e.sender); - var elementUI = sender.closest(".x-element"); - - if (confirm(self.settings.confirmDeletePrompt)) { - removeElement(elementUI); - } - }; - - var initElementActions = function () { - self.canvas.on("click", "a.edit", function (e) { - e.preventDefault(); - onEditElement({ sender: this }); - }); - self.canvas.on("click", "a.remove", function (e) { - e.preventDefault(); - onRemoveElement({ sender: this }); - }); - }; - - var init = function () { - initElementActions(); - }; - - init(); - }; - - $(function () { - //window.layoutDesigner = new LayoutDesigner($(".layout-designer"));; - }); -})(jQuery); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Views/EditorTemplates/LayoutEditor.cshtml b/src/Orchard.Web/Modules/Orchard.Layouts/Views/EditorTemplates/LayoutEditor.cshtml index 816ebed41..77da2ebe4 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Views/EditorTemplates/LayoutEditor.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Views/EditorTemplates/LayoutEditor.cshtml @@ -56,10 +56,8 @@
m.TypeName) - @Html.HiddenFor(m => m.ElementData) foreach (var tab in Model.Tabs) { var id = String.Format("element-{0}", tab.ToLowerInvariant());