diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs index 38dffa4ce..23d7f939d 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs @@ -218,13 +218,15 @@ namespace Orchard.Layouts.Controllers { IUpdateModel updater = null) { postedElementData = postedElementData ?? new ElementDataDictionary(); + var valueProviderCollection = (ValueProviderCollection) ValueProvider; + valueProviderCollection.Add(postedElementData.ToValueProvider(_cultureAccessor.CurrentCulture)); var context = new ElementEditorContext { Session = session, Content = content, Element = element, Updater = updater, ElementData = elementData ?? new ElementDataDictionary(), - ValueProvider = postedElementData.ToValueProvider(_cultureAccessor.CurrentCulture), + ValueProvider = valueProviderCollection, ShapeFactory = _shapeFactory }; ValueProvider = context.ValueProvider; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/LayoutPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/LayoutPartDriver.cs index 0dc2508c7..34a7fbe87 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/LayoutPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Drivers/LayoutPartDriver.cs @@ -104,12 +104,12 @@ namespace Orchard.Layouts.Drivers { updater.TryUpdateModel(viewModel, Prefix, null, new[] { "Part", "Templates" }); var describeContext = new DescribeElementsContext { Content = part }; var elementInstances = _mapper.ToLayoutModel(viewModel.LayoutEditor.Data, describeContext).ToArray(); - var recycleBin = (RecycleBin)_mapper.ToLayoutModel(viewModel.LayoutEditor.RecycleBin, describeContext).Single(); + var recycleBin = (RecycleBin)_mapper.ToLayoutModel(viewModel.LayoutEditor.RecycleBin, describeContext).SingleOrDefault(); var context = new LayoutSavingContext { Content = part, Updater = updater, Elements = elementInstances, - RemovedElements = recycleBin.Elements + RemovedElements = recycleBin != null ? recycleBin.Elements : Enumerable.Empty() }; _elementManager.Saving(context); diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Providers/PlaceableContentElementHarvester.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Providers/PlaceableContentElementHarvester.cs index e5ead8a1c..88217bcdf 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Providers/PlaceableContentElementHarvester.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Providers/PlaceableContentElementHarvester.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using Orchard.ContentManagement; using Orchard.ContentManagement.Aspects; -using Orchard.ContentManagement.FieldStorage.InfosetStorage; using Orchard.ContentManagement.MetaData.Models; using Orchard.Core.Contents.Settings; using Orchard.Environment; @@ -135,9 +134,11 @@ namespace Orchard.Layouts.Providers { } private IEnumerable GetPlaceableContentTypeDefinitions() { + // Select all types that have either "Placeable" set ot true or the "Widget" or "Element" stereotype. var contentTypeDefinitionsQuery = from contentTypeDefinition in _contentManager.Value.GetContentTypeDefinitions() - where contentTypeDefinition.Settings.GetModel().Placeable + let stereotype = contentTypeDefinition.Settings.ContainsKey("Stereotype") ? contentTypeDefinition.Settings["Stereotype"] : default(string) + where contentTypeDefinition.Settings.GetModel().Placeable || stereotype == "Widget" || stereotype == "Element" select contentTypeDefinition; return contentTypeDefinitionsQuery.ToList(); diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutDesignerHost.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutDesignerHost.js index 5dee03ef5..2bfab9854 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutDesignerHost.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutDesignerHost.js @@ -4,7 +4,6 @@ this.element = element; this.element.data("layout-designer-host", this); this.editor = window.layoutEditor; - this.isFormSubmitting = false; this.settings = { antiForgeryToken: self.element.data("anti-forgery-token"), editorDialogTitleFormat: self.element.data("editor-dialog-title-format"), @@ -88,12 +87,11 @@ }); }; - var monitorForm = function() { - var layoutDesigner = self.element; - var form = layoutDesigner.closest("form"); - + var monitorForm = function () { + var form = $(".zone-content form:first"); + form.on("submit", function (e) { - self.isFormSubmitting = true; + form.attr("isSubmitting", true); serializeLayout(); }); }; @@ -115,7 +113,10 @@ }); $(window).on("beforeunload", function () { - if (!self.isFormSubmitting && self.editor.isDirty()) + + var form = $(".zone-content form:first"); + var isFormSubmitting = form.attr("isSubmitting"); + if (!isFormSubmitting && self.editor.isDirty()) return "You have unsaved changes."; return undefined; @@ -130,7 +131,7 @@ window.Orchard.Layouts.LayoutEditorHost = window.Orchard.Layouts.LayoutEditorHost || {}; $(function () { - var host = new LayoutDesignerHost($(".layout-designer")); + window.layoutDesignerHost = new LayoutDesignerHost($(".layout-designer")); $(".layout-designer").each(function (e) { var designer = $(this); var dialog = designer.find(".layout-editor-help-dialog"); diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/dialog.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/dialog.js index 52ebbd71a..5a2e9ebf5 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/dialog.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/dialog.js @@ -174,10 +174,11 @@ break; case "save": { var frameDoc = self.frame.getDocument(); - var form = frameDoc.find("#layout-content form:first"); - form.submit(); + var form = frameDoc.find(".zone-content form:first"); + form.attr("isSubmitting", true); + form.trigger("submit"); } - break; + break; } }); }; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/admin-dialog.css b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/admin-dialog.css index ef66b3302..fb974363f 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/admin-dialog.css +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/admin-dialog.css @@ -75,7 +75,8 @@ header, footer, aside, nav, article { display: block; } } .zone-content .edit-widget .primary .widget-props, -.zone-content .edit-widget .secondary { +.zone-content .edit-widget .secondary, +.zone-content .edit-item .edit-item-secondary { display: none; }