From 2f6cfaf99cc2e433e38f9615e3c6598550ab018f Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 7 Jan 2016 09:49:13 +0100 Subject: [PATCH] prevent save when an overlay is open --- .../views/documenttypes/edit.controller.js | 118 +++++++++--------- .../src/views/mediatypes/edit.controller.js | 69 +++++----- .../src/views/membertypes/edit.controller.js | 65 +++++----- 3 files changed, 133 insertions(+), 119 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js index 0700e08c2e..641ac1c954 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js @@ -8,8 +8,8 @@ */ (function () { "use strict"; - - function DocumentTypesEditController($scope, $routeParams, modelsResource, contentTypeResource, dataTypeResource, editorState, contentEditingHelper, formHelper, navigationService, iconHelper, contentTypeHelper, notificationsService, $filter, $q, localizationService) { + + function DocumentTypesEditController($scope, $routeParams, modelsResource, contentTypeResource, dataTypeResource, editorState, contentEditingHelper, formHelper, navigationService, iconHelper, contentTypeHelper, notificationsService, $filter, $q, localizationService, overlayHelper) { var vm = this; @@ -139,75 +139,81 @@ /* ---------- SAVE ---------- */ function save() { - var deferred = $q.defer(); - vm.page.saveButtonState = "busy"; + // only save if there is no overlays open + if(overlayHelper.getNumberOfOverlays() === 0) { - // reformat allowed content types to array if id's - vm.contentType.allowedContentTypes = contentTypeHelper.createIdArray(vm.contentType.allowedContentTypes); + var deferred = $q.defer(); - contentEditingHelper.contentEditorPerformSave({ - statusMessage: "Saving...", - saveMethod: contentTypeResource.save, - scope: $scope, - content: vm.contentType, - // we need to rebind... the IDs that have been created! - rebindCallback: function (origContentType, savedContentType) { - vm.contentType.id = savedContentType.id; - vm.contentType.groups.forEach(function(group) { - if (!group.name) return; + vm.page.saveButtonState = "busy"; - var k = 0; - while (k < savedContentType.groups.length && savedContentType.groups[k].name != group.name) - k++; - if (k == savedContentType.groups.length) { - group.id = 0; - return; - } + // reformat allowed content types to array if id's + vm.contentType.allowedContentTypes = contentTypeHelper.createIdArray(vm.contentType.allowedContentTypes); - var savedGroup = savedContentType.groups[k]; - if (!group.id) group.id = savedGroup.id; + contentEditingHelper.contentEditorPerformSave({ + statusMessage: "Saving...", + saveMethod: contentTypeResource.save, + scope: $scope, + content: vm.contentType, + // we need to rebind... the IDs that have been created! + rebindCallback: function (origContentType, savedContentType) { + vm.contentType.id = savedContentType.id; + vm.contentType.groups.forEach(function(group) { + if (!group.name) return; - group.properties.forEach(function (property) { - if (property.id || !property.alias) return; - - k = 0; - while (k < savedGroup.properties.length && savedGroup.properties[k].alias != property.alias) + var k = 0; + while (k < savedContentType.groups.length && savedContentType.groups[k].name != group.name) k++; - if (k == savedGroup.properties.length) { - property.id = 0; + if (k == savedContentType.groups.length) { + group.id = 0; return; } - var savedProperty = savedGroup.properties[k]; - property.id = savedProperty.id; + var savedGroup = savedContentType.groups[k]; + if (!group.id) group.id = savedGroup.id; + + group.properties.forEach(function (property) { + if (property.id || !property.alias) return; + + k = 0; + while (k < savedGroup.properties.length && savedGroup.properties[k].alias != property.alias) + k++; + if (k == savedGroup.properties.length) { + property.id = 0; + return; + } + + var savedProperty = savedGroup.properties[k]; + property.id = savedProperty.id; + }); }); - }); - } - }).then(function (data) { - //success - syncTreeNode(vm.contentType, data.path); + } + }).then(function (data) { + //success + syncTreeNode(vm.contentType, data.path); - vm.page.saveButtonState = "success"; + vm.page.saveButtonState = "success"; - deferred.resolve(data); - }, function (err) { - //error - if (err) { - editorState.set($scope.content); - } - else { - localizationService.localize("speechBubbles_validationFailedHeader").then(function (headerValue) { - localizationService.localize("speechBubbles_validationFailedMessage").then(function(msgValue) { - notificationsService.error(headerValue, msgValue); + deferred.resolve(data); + }, function (err) { + //error + if (err) { + editorState.set($scope.content); + } + else { + localizationService.localize("speechBubbles_validationFailedHeader").then(function (headerValue) { + localizationService.localize("speechBubbles_validationFailedMessage").then(function(msgValue) { + notificationsService.error(headerValue, msgValue); + }); }); - }); - } - vm.page.saveButtonState = "error"; + } + vm.page.saveButtonState = "error"; - deferred.reject(err); - }); - return deferred.promise; + deferred.reject(err); + }); + return deferred.promise; + + } } diff --git a/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.controller.js index 9bffc10fcb..bcfb826811 100644 --- a/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.controller.js @@ -9,7 +9,7 @@ (function () { "use strict"; - function MediaTypesEditController($scope, $routeParams, mediaTypeResource, dataTypeResource, editorState, contentEditingHelper, formHelper, navigationService, iconHelper, contentTypeHelper, notificationsService, $filter, $q, localizationService) { + function MediaTypesEditController($scope, $routeParams, mediaTypeResource, dataTypeResource, editorState, contentEditingHelper, formHelper, navigationService, iconHelper, contentTypeHelper, notificationsService, $filter, $q, localizationService, overlayHelper) { var vm = this; vm.save = save; @@ -120,46 +120,51 @@ /* ---------- SAVE ---------- */ function save() { - var deferred = $q.defer(); - vm.page.saveButtonState = "busy"; + // only save if there is no overlays open + if(overlayHelper.getNumberOfOverlays() === 0) { - // reformat allowed content types to array if id's - vm.contentType.allowedContentTypes = contentTypeHelper.createIdArray(vm.contentType.allowedContentTypes); + var deferred = $q.defer(); - contentEditingHelper.contentEditorPerformSave({ - statusMessage: "Saving...", - saveMethod: mediaTypeResource.save, - scope: $scope, - content: vm.contentType, - //no-op for rebind callback... we don't really need to rebind for content types - rebindCallback: angular.noop - }).then(function (data) { - //success - syncTreeNode(vm.contentType, data.path); + vm.page.saveButtonState = "busy"; - vm.page.saveButtonState = "success"; + // reformat allowed content types to array if id's + vm.contentType.allowedContentTypes = contentTypeHelper.createIdArray(vm.contentType.allowedContentTypes); - deferred.resolve(data); - }, function (err) { - //error - if (err) { - editorState.set($scope.content); - } - else { - localizationService.localize("speechBubbles_validationFailedHeader").then(function (headerValue) { - localizationService.localize("speechBubbles_validationFailedMessage").then(function (msgValue) { - notificationsService.error(headerValue, msgValue); + contentEditingHelper.contentEditorPerformSave({ + statusMessage: "Saving...", + saveMethod: mediaTypeResource.save, + scope: $scope, + content: vm.contentType, + //no-op for rebind callback... we don't really need to rebind for content types + rebindCallback: angular.noop + }).then(function (data) { + //success + syncTreeNode(vm.contentType, data.path); + + vm.page.saveButtonState = "success"; + + deferred.resolve(data); + }, function (err) { + //error + if (err) { + editorState.set($scope.content); + } + else { + localizationService.localize("speechBubbles_validationFailedHeader").then(function (headerValue) { + localizationService.localize("speechBubbles_validationFailedMessage").then(function (msgValue) { + notificationsService.error(headerValue, msgValue); + }); }); - }); - } + } - vm.page.saveButtonState = "error"; + vm.page.saveButtonState = "error"; - deferred.reject(err); - }); + deferred.reject(err); + }); - return deferred.promise; + return deferred.promise; + } } function init(contentType) { diff --git a/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js index 728c311e11..2999eb6919 100644 --- a/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js @@ -9,7 +9,7 @@ (function () { "use strict"; - function MemberTypesEditController($scope, $rootScope, $routeParams, $log, $filter, memberTypeResource, dataTypeResource, editorState, iconHelper, formHelper, navigationService, contentEditingHelper, notificationsService, $q, localizationService) { + function MemberTypesEditController($scope, $rootScope, $routeParams, $log, $filter, memberTypeResource, dataTypeResource, editorState, iconHelper, formHelper, navigationService, contentEditingHelper, notificationsService, $q, localizationService, overlayHelper) { var vm = this; @@ -78,44 +78,47 @@ } function save() { + // only save if there is no overlays open + if(overlayHelper.getNumberOfOverlays() === 0) { - var deferred = $q.defer(); + var deferred = $q.defer(); - vm.page.saveButtonState = "busy"; - - contentEditingHelper.contentEditorPerformSave({ - statusMessage: "Saving...", - saveMethod: memberTypeResource.save, - scope: $scope, - content: vm.contentType, - //no-op for rebind callback... we don't really need to rebind for content types - rebindCallback: angular.noop - }).then(function (data) { - //success - syncTreeNode(vm.contentType, data.path); + vm.page.saveButtonState = "busy"; - vm.page.saveButtonState = "success"; + contentEditingHelper.contentEditorPerformSave({ + statusMessage: "Saving...", + saveMethod: memberTypeResource.save, + scope: $scope, + content: vm.contentType, + //no-op for rebind callback... we don't really need to rebind for content types + rebindCallback: angular.noop + }).then(function (data) { + //success + syncTreeNode(vm.contentType, data.path); - deferred.resolve(data); - }, function (err) { - //error - if (err) { - editorState.set($scope.content); - } - else { - localizationService.localize("speechBubbles_validationFailedHeader").then(function (headerValue) { - localizationService.localize("speechBubbles_validationFailedMessage").then(function (msgValue) { - notificationsService.error(headerValue, msgValue); + vm.page.saveButtonState = "success"; + + deferred.resolve(data); + }, function (err) { + //error + if (err) { + editorState.set($scope.content); + } + else { + localizationService.localize("speechBubbles_validationFailedHeader").then(function (headerValue) { + localizationService.localize("speechBubbles_validationFailedMessage").then(function (msgValue) { + notificationsService.error(headerValue, msgValue); + }); }); - }); - } + } - vm.page.saveButtonState = "error"; + vm.page.saveButtonState = "error"; - deferred.reject(err); - }); + deferred.reject(err); + }); - return deferred.promise; + return deferred.promise; + } }