fix(draw): add plus sign (+) to call activities

Closes #403
This commit is contained in:
hoferch 2015-12-23 12:59:14 +01:00 committed by Nico Rehwaldt
parent a046b14d6f
commit 35564d1bea
3 changed files with 87 additions and 17 deletions

View File

@ -212,6 +212,10 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
return p.path(d).attr(attrs); return p.path(d).attr(attrs);
} }
function drawMarker(type, p, path, attrs) {
return drawPath(p, path, assign({ 'data-marker': type }, attrs));
}
function as(type) { function as(type) {
return function(p, element) { return function(p, element) {
return handlers[type](p, element); return handlers[type](p, element);
@ -854,7 +858,7 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
return outer; return outer;
}, },
'bpmn:CallActivity': function(p, element) { 'bpmn:CallActivity': function(p, element) {
return renderer('bpmn:Task')(p, element, { return renderer('bpmn:SubProcess')(p, element, {
strokeWidth: 5 strokeWidth: 5
}); });
}, },
@ -881,7 +885,7 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
var participantMultiplicity = !!(getSemantic(element).participantMultiplicity); var participantMultiplicity = !!(getSemantic(element).participantMultiplicity);
if(participantMultiplicity) { if (participantMultiplicity) {
renderer('ParticipantMultiplicityMarker')(p, element); renderer('ParticipantMultiplicityMarker')(p, element);
} }
@ -1256,7 +1260,7 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
return textElement; return textElement;
}, },
'ParticipantMultiplicityMarker': function(p, element) { 'ParticipantMultiplicityMarker': function(p, element) {
var subProcessPath = pathMap.getScaledPath('MARKER_PARALLEL', { var markerPath = pathMap.getScaledPath('MARKER_PARALLEL', {
xScaleFactor: 1, xScaleFactor: 1,
yScaleFactor: 1, yScaleFactor: 1,
containerWidth: element.width, containerWidth: element.width,
@ -1267,7 +1271,7 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
} }
}); });
drawPath(p, subProcessPath); drawMarker('participant-multiplicity', p, markerPath);
}, },
'SubProcessMarker': function(p, element) { 'SubProcessMarker': function(p, element) {
var markerRect = drawRect(p, 14, 14, 0, { var markerRect = drawRect(p, 14, 14, 0, {
@ -1278,7 +1282,7 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
// therefore fixed values can be used here // therefore fixed values can be used here
markerRect.transform('translate(' + (element.width / 2 - 7.5) + ',' + (element.height - 20) + ')'); markerRect.transform('translate(' + (element.width / 2 - 7.5) + ',' + (element.height - 20) + ')');
var subProcessPath = pathMap.getScaledPath('MARKER_SUB_PROCESS', { var markerPath = pathMap.getScaledPath('MARKER_SUB_PROCESS', {
xScaleFactor: 1.5, xScaleFactor: 1.5,
yScaleFactor: 1.5, yScaleFactor: 1.5,
containerWidth: element.width, containerWidth: element.width,
@ -1289,10 +1293,10 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
} }
}); });
drawPath(p, subProcessPath); drawMarker('sub-process', p, markerPath);
}, },
'ParallelMarker': function(p, element, position) { 'ParallelMarker': function(p, element, position) {
var subProcessPath = pathMap.getScaledPath('MARKER_PARALLEL', { var markerPath = pathMap.getScaledPath('MARKER_PARALLEL', {
xScaleFactor: 1, xScaleFactor: 1,
yScaleFactor: 1, yScaleFactor: 1,
containerWidth: element.width, containerWidth: element.width,
@ -1302,10 +1306,11 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
my: (element.height - 20) / element.height my: (element.height - 20) / element.height
} }
}); });
drawPath(p, subProcessPath);
drawMarker('parallel', p, markerPath);
}, },
'SequentialMarker': function(p, element, position) { 'SequentialMarker': function(p, element, position) {
var sequentialPath = pathMap.getScaledPath('MARKER_SEQUENTIAL', { var markerPath = pathMap.getScaledPath('MARKER_SEQUENTIAL', {
xScaleFactor: 1, xScaleFactor: 1,
yScaleFactor: 1, yScaleFactor: 1,
containerWidth: element.width, containerWidth: element.width,
@ -1315,10 +1320,11 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
my: (element.height - 19) / element.height my: (element.height - 19) / element.height
} }
}); });
drawPath(p, sequentialPath);
drawMarker('sequential', p, markerPath);
}, },
'CompensationMarker': function(p, element, position) { 'CompensationMarker': function(p, element, position) {
var compensationPath = pathMap.getScaledPath('MARKER_COMPENSATION', { var markerMath = pathMap.getScaledPath('MARKER_COMPENSATION', {
xScaleFactor: 1, xScaleFactor: 1,
yScaleFactor: 1, yScaleFactor: 1,
containerWidth: element.width, containerWidth: element.width,
@ -1328,10 +1334,11 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
my: (element.height - 13) / element.height my: (element.height - 13) / element.height
} }
}); });
drawPath(p, compensationPath, { strokeWidth: 1 });
drawMarker('compensation', p, markerMath, { strokeWidth: 1 });
}, },
'LoopMarker': function(p, element, position) { 'LoopMarker': function(p, element, position) {
var loopPath = pathMap.getScaledPath('MARKER_LOOP', { var markerPath = pathMap.getScaledPath('MARKER_LOOP', {
xScaleFactor: 1, xScaleFactor: 1,
yScaleFactor: 1, yScaleFactor: 1,
containerWidth: element.width, containerWidth: element.width,
@ -1342,7 +1349,7 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
} }
}); });
drawPath(p, loopPath, { drawMarker('loop', p, markerPath, {
strokeWidth: 1, strokeWidth: 1,
fill: 'none', fill: 'none',
strokeLinecap: 'round', strokeLinecap: 'round',
@ -1350,7 +1357,7 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
}); });
}, },
'AdhocMarker': function(p, element, position) { 'AdhocMarker': function(p, element, position) {
var loopPath = pathMap.getScaledPath('MARKER_ADHOC', { var markerPath = pathMap.getScaledPath('MARKER_ADHOC', {
xScaleFactor: 1, xScaleFactor: 1,
yScaleFactor: 1, yScaleFactor: 1,
containerWidth: element.width, containerWidth: element.width,
@ -1361,7 +1368,7 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
} }
}); });
drawPath(p, loopPath, { drawMarker('adhoc', p, markerPath, {
strokeWidth: 1, strokeWidth: 1,
fill: 'black' fill: 'black'
}); });

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn">
<bpmn:process id="Process_1" isExecutable="false">
<bpmn:callActivity id="CallActivity" name="A" />
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
<bpmndi:BPMNShape id="CallActivity_di" bpmnElement="CallActivity">
<dc:Bounds x="399" y="130" width="100" height="80" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -123,32 +123,83 @@ describe('draw - bpmn renderer', function() {
bootstrapViewer(xml)(done); bootstrapViewer(xml)(done);
}); });
it('should render xor gateways blank and with X', function(done) { it('should render xor gateways blank and with X', function(done) {
var xml = require('../../fixtures/bpmn/draw/xor.bpmn'); var xml = require('../../fixtures/bpmn/draw/xor.bpmn');
bootstrapViewer(xml)(done); bootstrapViewer(xml)(done);
}); });
it('should render boundary events with correct z-index', function(done) { it('should render boundary events with correct z-index', function(done) {
var xml = require('../../fixtures/bpmn/draw/boundary-event-z-index.bpmn'); var xml = require('../../fixtures/bpmn/draw/boundary-event-z-index.bpmn');
bootstrapViewer(xml)(done); bootstrapViewer(xml)(done);
}); });
it('should render boundary events without flowNodeRef', function(done) { it('should render boundary events without flowNodeRef', function(done) {
var xml = require('../../fixtures/bpmn/draw/boundary-event-without-refnode.bpmn'); var xml = require('../../fixtures/bpmn/draw/boundary-event-without-refnode.bpmn');
bootstrapViewer(xml)(done); bootstrapViewer(xml)(done);
}); });
it('should render boundary event only once if referenced incorrectly via flowNodeRef (robustness)', function(done) { it('should render boundary event only once if referenced incorrectly via flowNodeRef (robustness)', function(done) {
var xml = require('../../fixtures/bpmn/draw/boundary-event-with-refnode.bpmn'); var xml = require('../../fixtures/bpmn/draw/boundary-event-with-refnode.bpmn');
bootstrapViewer(xml)(done); bootstrapViewer(xml)(done);
}); });
it('should render gateway event if attribute is missing in XML', function(done) { it('should render gateway event if attribute is missing in XML', function(done) {
var xml = require('../../fixtures/bpmn/draw/gateway-type-default.bpmn'); var xml = require('../../fixtures/bpmn/draw/gateway-type-default.bpmn');
bootstrapViewer(xml)(done); bootstrapViewer(xml)(done);
}); });
it('should render call activity', function(done) {
var xml = require('../../fixtures/bpmn/draw/call-activity.bpmn');
bootstrapViewer(xml)(function(err) {
if (err) {
return done(err);
}
inject(function(elementRegistry) {
var callActivityGfx = elementRegistry.getGraphics('CallActivity');
// make sure the + marker is shown
expect(callActivityGfx.select('[data-marker=sub-process]')).to.exist;
done();
})();
});
});
it('should render adhoc sub process', function(done) {
var xml = require('../../fixtures/bpmn/draw/activity-markers-simple.bpmn');
bootstrapViewer(xml)(function(err) {
if (err) {
return done(err);
}
inject(function(elementRegistry) {
var callActivityGfx = elementRegistry.getGraphics('AdHocSubProcess');
// make sure the + marker is shown
expect(callActivityGfx.select('[data-marker=adhoc]')).to.exist;
done();
})();
});
});
describe('path', function () { describe('path', function () {
var diagramXML = require('../../fixtures/bpmn/simple-cropping.bpmn'); var diagramXML = require('../../fixtures/bpmn/simple-cropping.bpmn');
@ -159,7 +210,6 @@ describe('draw - bpmn renderer', function() {
describe('circle', function () { describe('circle', function () {
it('should return a circle path', inject(function(canvas, elementRegistry, graphicsFactory) { it('should return a circle path', inject(function(canvas, elementRegistry, graphicsFactory) {
// given // given