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'),
any = require('lodash/collection/any'),
filter = require('lodash/collection/filter'),
forEach = require('lodash/collection/forEach'),
inherits = require('inherits');
@ -91,6 +92,13 @@ BpmnRules.prototype.init = function() {
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;

View File

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