prevent save when an overlay is open

This commit is contained in:
Mads Rasmussen
2016-01-07 09:49:13 +01:00
parent 7b33f85a5d
commit 2f6cfaf99c
3 changed files with 133 additions and 119 deletions

View File

@@ -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;
}
}

View File

@@ -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) {

View File

@@ -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;
}
}