fix(rules): do not allow deletion of labels

Closes #499
This commit is contained in:
Nico Rehwaldt 2016-03-23 15:32:10 +01:00
parent a41f5d034e
commit 9bcdd3b958
3 changed files with 38 additions and 5 deletions

View File

@ -2,6 +2,7 @@
var find = require('lodash/collection/find'), var find = require('lodash/collection/find'),
any = require('lodash/collection/any'), any = require('lodash/collection/any'),
filter = require('lodash/collection/filter'),
forEach = require('lodash/collection/forEach'), forEach = require('lodash/collection/forEach'),
inherits = require('inherits'); inherits = require('inherits');
@ -91,6 +92,13 @@ BpmnRules.prototype.init = function() {
return canAttach([ shape ], target, source, position) || canCreate(shape, target, source, position); return canAttach([ shape ], target, source, position) || canCreate(shape, target, source, position);
}); });
this.addRule([ 'elements.delete' ], function(context) {
// do not allow deletion of labels
return filter(context.elements, function(e) {
return !isLabel(e);
});
});
}; };
BpmnRules.prototype.canConnectMessageFlow = canConnectMessageFlow; BpmnRules.prototype.canConnectMessageFlow = canConnectMessageFlow;

View File

@ -64,7 +64,7 @@ describe('features - context-pad', function() {
inject(function (elementRegistry, contextPad, customRules) { inject(function (elementRegistry, contextPad, customRules) {
// given // given
customRules.addRule('elements.delete', function() { customRules.addRule('elements.delete', 1500, function() {
return true; return true;
}); });
@ -82,7 +82,7 @@ describe('features - context-pad', function() {
inject(function(elementRegistry, contextPad, customRules) { inject(function(elementRegistry, contextPad, customRules) {
// given // given
customRules.addRule('elements.delete', function() { customRules.addRule('elements.delete', 1500, function() {
return false; return false;
}); });
@ -101,7 +101,7 @@ describe('features - context-pad', function() {
// given // given
var element = elementRegistry.get('StartEvent_1'); var element = elementRegistry.get('StartEvent_1');
customRules.addRule('elements.delete', function(context) { customRules.addRule('elements.delete', 1500, function(context) {
// element array is actually passed // element array is actually passed
expect(context.elements).to.eql([ element ]); expect(context.elements).to.eql([ element ]);
@ -120,7 +120,7 @@ describe('features - context-pad', function() {
inject(function(elementRegistry, contextPad, customRules) { inject(function(elementRegistry, contextPad, customRules) {
// given // given
customRules.addRule('elements.delete', function(context) { customRules.addRule('elements.delete', 1500, function(context) {
return context.elements; return context.elements;
}); });
@ -138,7 +138,7 @@ describe('features - context-pad', function() {
inject(function(elementRegistry, contextPad, customRules) { inject(function(elementRegistry, contextPad, customRules) {
// given // given
customRules.addRule('elements.delete', function() { customRules.addRule('elements.delete', 1500, function() {
return []; return [];
}); });

View File

@ -1317,4 +1317,29 @@ describe('features/modeling/rules - BpmnRules', function() {
}); });
describe('labels', function() {
var testXML = require('./BpmnRules.process.bpmn');
beforeEach(bootstrapModeler(testXML, { modules: testModules }));
it('should filter labels', inject(function(elementRegistry, rules) {
// given
var startEventShape = elementRegistry.get('StartEvent_None'),
startEventLabel = startEventShape.label;
// when
var allowed = rules.allowed('elements.delete', {
elements: [ startEventShape, startEventLabel ]
});
// then
expect(allowed).to.eql([ startEventShape ]);
}));
});
}); });