impr(bpmnrenderer): add task type symbols

close #45
This commit is contained in:
jdotzki 2014-05-12 11:48:24 +02:00
parent 048ce1e9cc
commit 10c1dbcf95
4 changed files with 413 additions and 23 deletions

View File

@ -599,13 +599,223 @@ function BpmnRenderer(events, styles, bpmnRegistry, pathMap) {
attachTaskMarkers(p, data); attachTaskMarkers(p, data);
return rect; return rect;
}, },
'bpmn:ServiceTask': as('bpmn:Task'), 'bpmn:ServiceTask': function(p, data) {
'bpmn:UserTask': as('bpmn:Task'), var task = renderer('bpmn:Task')(p, data);
'bpmn:ManualTask': as('bpmn:Task'),
'bpmn:SendTask': as('bpmn:Task'), var pathDataBG = pathMap.getScaledPath('TASK_TYPE_SERVICE', {
'bpmn:ReceiveTask': as('bpmn:Task'), abspos: {
'bpmn:ScriptTask': as('bpmn:Task'), x: 12,
'bpmn:BusinessRuleTask': as('bpmn:Task'), y: 18
}
});
var servicePathBG = drawPath(p, pathDataBG);
servicePathBG.attr({
'stroke-width': 1,
'fill': 'None'
});
var fillPathData = pathMap.getScaledPath('TASK_TYPE_SERVICE_FILL', {
abspos: {
x: 17.2,
y: 18
}
});
var serviceFillPath = drawPath(p, fillPathData);
serviceFillPath.attr({
'stroke-width': 0,
'stroke': 'none',
'fill': 'White'
});
var pathData = pathMap.getScaledPath('TASK_TYPE_SERVICE', {
abspos: {
x: 17,
y: 22
}
});
var servicePath = drawPath(p, pathData);
servicePath.attr({
'stroke-width': 1,
'fill': 'White'
});
return task;
},
'bpmn:UserTask': function(p, data) {
var task = renderer('bpmn:Task')(p, data);
var x = 15;
var y = 12;
var pathData = pathMap.getScaledPath('TASK_TYPE_USER_1', {
abspos: {
x: x,
y: y
}
});
var userPath = drawPath(p, pathData);
userPath.attr({
'stroke-width': 0.5,
'fill': 'None'
});
var pathData2 = pathMap.getScaledPath('TASK_TYPE_USER_2', {
abspos: {
x: x,
y: y
}
});
var userPath2 = drawPath(p, pathData2);
userPath2.attr({
'stroke-width': 0.5,
'fill': 'None'
});
var pathData3 = pathMap.getScaledPath('TASK_TYPE_USER_3', {
abspos: {
x: x,
y: y
}
});
var userPath3 = drawPath(p, pathData3);
userPath3.attr({
'stroke-width': 0.5,
'fill': 'Black'
});
return task;
},
'bpmn:ManualTask': function(p, data) {
var task = renderer('bpmn:Task')(p, data);
var pathData = pathMap.getScaledPath('TASK_TYPE_MANUAL', {
abspos: {
x: 17,
y: 15
}
});
var userPath = drawPath(p, pathData);
userPath.attr({
'stroke-width': 0.25,
'fill': 'None',
'stroke': 'Black'
});
return task;
},
'bpmn:SendTask': function(p, data) {
var task = renderer('bpmn:Task')(p, data);
var pathData = pathMap.getScaledPath('TASK_TYPE_SEND', {
xScaleFactor: 1,
yScaleFactor: 1,
containerWidth: 21,
containerHeight: 14,
position: {
mx: 0.285,
my: 0.357
}
});
var sendPath = drawPath(p, pathData);
sendPath.attr({
'stroke-width': 1,
'fill': 'Black',
'stroke': 'White'
});
return task;
},
'bpmn:ReceiveTask' : function(p, data) {
var task = renderer('bpmn:Task')(p, data);
var pathData;
if(!!bpmnRegistry.getSemantic(data.id).instantiate) {
drawCircle(p, 28, 28, 20 * 0.22);
pathData = pathMap.getScaledPath('TASK_TYPE_INSTANTIATING_SEND', {
abspos: {
x: 7.77,
y: 9.52
}
});
} else {
pathData = pathMap.getScaledPath('TASK_TYPE_SEND', {
xScaleFactor: 0.9,
yScaleFactor: 0.9,
containerWidth: 21,
containerHeight: 14,
position: {
mx: 0.3,
my: 0.4
}
});
}
var sendPath = drawPath(p, pathData);
sendPath.attr({
'stroke-width': 1
});
return task;
},
'bpmn:ScriptTask': function(p, data) {
var task = renderer('bpmn:Task')(p, data);
var pathData = pathMap.getScaledPath('TASK_TYPE_SCRIPT', {
abspos: {
x: 15,
y: 20
}
});
var scriptPath = drawPath(p, pathData);
scriptPath.attr({
'stroke-width': 1
});
return task;
},
'bpmn:BusinessRuleTask': function(p, data) {
var task = renderer('bpmn:Task')(p, data);
var headerPathData = pathMap.getScaledPath('TASK_TYPE_BUSINESS_RULE_HEADER', {
abspos: {
x: 8,
y: 8
}
});
var businessHeaderPath = drawPath(p, headerPathData);
businessHeaderPath.attr({
'stroke-width': 1,
'fill': 'AAA'
});
var headerData = pathMap.getScaledPath('TASK_TYPE_BUSINESS_RULE_MAIN', {
abspos: {
x: 8,
y: 8
}
});
var businessPath = drawPath(p, headerData);
businessPath.attr({
'stroke-width': 1
});
return task;
},
'bpmn:SubProcess': function(p, data) { 'bpmn:SubProcess': function(p, data) {
var rect = renderer('bpmn:Activity')(p, data); var rect = renderer('bpmn:Activity')(p, data);

View File

@ -253,6 +253,88 @@ function PathMap(Snap) {
width: 15, width: 15,
heightElements: [], heightElements: [],
widthElements: [] widthElements: []
},
'TASK_TYPE_SEND': {
d: 'm {mx},{my} l 0,{e.y1} l {e.x1},0 l 0,-{e.y1} z l {e.x0},{e.y0} l {e.x0},-{e.y0}',
height: 14,
width: 21,
heightElements: [6, 14],
widthElements: [10.5, 21]
},
'TASK_TYPE_SCRIPT': {
d: 'm {mx},{my} c 9.966553,-6.27276 -8.000926,-7.91932 2.968968,-14.938 l -8.802728,0 ' +
'c -10.969894,7.01868 6.997585,8.66524 -2.968967,14.938 z ' +
'm -7,-12 l 5,0 ' +
'm -4.5,3 l 4.5,0 ' +
'm -3,3 l 5,0' +
'm -4,3 l 5,0',
height: 15,
width: 12.6,
heightElements: [6, 14],
widthElements: [10.5, 21]
},
'TASK_TYPE_USER_1': {
d: 'm {mx},{my} c 0.909,-0.845 1.594,-2.049 1.594,-3.385 0,-2.554 -1.805,-4.62199999 ' +
'-4.357,-4.62199999 -2.55199998,0 -4.28799998,2.06799999 -4.28799998,4.62199999 0,1.348 ' +
'0.974,2.562 1.89599998,3.405 -0.52899998,0.187 -5.669,2.097 -5.794,4.7560005 v 6.718 ' +
'h 17 v -6.718 c 0,-2.2980005 -5.5279996,-4.5950005 -6.0509996,-4.7760005 z' +
'm -8,6 l 0,5.5 m 11,0 l 0,-5'
},
'TASK_TYPE_USER_2': {
d: 'm {mx},{my} m 2.162,1.009 c 0,2.4470005 -2.158,4.4310005 -4.821,4.4310005 ' +
'-2.66499998,0 -4.822,-1.981 -4.822,-4.4310005 '
},
'TASK_TYPE_USER_3': {
d: 'm {mx},{my} m -6.9,-3.80 c 0,0 2.25099998,-2.358 4.27399998,-1.177 2.024,1.181 4.221,1.537 ' +
'4.124,0.965 -0.098,-0.57 -0.117,-3.79099999 -4.191,-4.13599999 -3.57499998,0.001 ' +
'-4.20799998,3.36699999 -4.20699998,4.34799999 z'
},
'TASK_TYPE_MANUAL': {
d: 'm {mx},{my} c 0.234,-0.01 5.604,0.008 8.029,0.004 0.808,0 1.271,-0.172 1.417,-0.752 0.227,-0.898 ' +
'-0.334,-1.314 -1.338,-1.316 -2.467,-0.01 -7.886,-0.004 -8.108,-0.004 -0.014,-0.079 0.016,-0.533 0,-0.61 ' +
'0.195,-0.042 8.507,0.006 9.616,0.002 0.877,-0.007 1.35,-0.438 1.353,-1.208 0.003,-0.768 -0.479,-1.09 ' +
'-1.35,-1.091 -2.968,-0.002 -9.619,-0.013 -9.619,-0.013 v -0.591 c 0,0 5.052,-0.016 7.225,-0.016 ' +
'0.888,-0.002 1.354,-0.416 1.351,-1.193 -0.006,-0.761 -0.492,-1.196 -1.361,-1.196 -3.473,-0.005 ' +
'-10.86,-0.003 -11.0829995,-0.003 -0.022,-0.047 -0.045,-0.094 -0.069,-0.139 0.3939995,-0.319 ' +
'2.0409995,-1.626 2.4149995,-2.017 0.469,-0.4870005 0.519,-1.1650005 0.162,-1.6040005 -0.414,-0.511 ' +
'-0.973,-0.5 -1.48,-0.236 -1.4609995,0.764 -6.5999995,3.6430005 -7.7329995,4.2710005 -0.9,0.499 ' +
'-1.516,1.253 -1.882,2.19 -0.37000002,0.95 -0.17,2.01 -0.166,2.979 0.004,0.718 -0.27300002,1.345 ' +
'-0.055,2.063 0.629,2.087 2.425,3.312 4.859,3.318 4.6179995,0.014 9.2379995,-0.139 13.8569995,-0.158 ' +
'0.755,-0.004 1.171,-0.301 1.182,-1.033 0.012,-0.754 -0.423,-0.969 -1.183,-0.973 -1.778,-0.01 ' +
'-5.824,-0.004 -6.04,-0.004 10e-4,-0.084 0.003,-0.586 10e-4,-0.67 z',
},
'TASK_TYPE_INSTANTIATING_SEND': {
d: 'm {mx},{my} l 0,8.4 l 12.6,0 l 0,-8.4 z l 6.3,3.6 l 6.3,-3.6'
},
'TASK_TYPE_SERVICE': {
d: 'm {mx},{my} v -1.71335 c 0.352326,-0.0705 0.703932,-0.17838 1.047628,-0.32133 ' +
'0.344416,-0.14465 0.665822,-0.32133 0.966377,-0.52145 l 1.19431,1.18005 1.567487,-1.57688 ' +
'-1.195028,-1.18014 c 0.403376,-0.61394 0.683079,-1.29908 0.825447,-2.01824 l 1.622133,-0.01 ' +
'v -2.2196 l -1.636514,0.01 c -0.07333,-0.35153 -0.178319,-0.70024 -0.323564,-1.04372 ' +
'-0.145244,-0.34406 -0.321407,-0.6644 -0.522735,-0.96217 l 1.131035,-1.13631 -1.583305,-1.56293 ' +
'-1.129598,1.13589 c -0.614052,-0.40108 -1.302883,-0.68093 -2.022633,-0.82247 l 0.0093,-1.61852 ' +
'h -2.241173 l 0.0042,1.63124 c -0.353763,0.0736 -0.705369,0.17977 -1.049785,0.32371 -0.344415,0.14437 ' +
'-0.665102,0.32092 -0.9635006,0.52046 l -1.1698628,-1.15823 -1.5667691,1.5792 1.1684265,1.15669 ' +
'c -0.4026573,0.61283 -0.68308,1.29797 -0.8247287,2.01713 l -1.6588041,0.003 v 2.22174 ' +
'l 1.6724648,-0.006 c 0.073327,0.35077 0.1797598,0.70243 0.3242851,1.04472 0.1452428,0.34448 ' +
'0.3214064,0.6644 0.5227339,0.96066 l -1.1993431,1.19723 1.5840256,1.56011 1.1964668,-1.19348 ' +
'c 0.6140517,0.40346 1.3028827,0.68232 2.0233517,0.82331 l 7.19e-4,1.69892 h 2.226848 z ' +
'm 0.221462,-3.9957 c -1.788948,0.7502 -3.8576,-0.0928 -4.6097055,-1.87438 -0.7521065,-1.78321 ' +
'0.090598,-3.84627 1.8802645,-4.59604 1.78823,-0.74936 3.856881,0.0929 4.608987,1.87437 ' +
'0.752106,1.78165 -0.0906,3.84612 -1.879546,4.59605 z'
},
'TASK_TYPE_SERVICE_FILL': {
d: 'm {mx},{my} c -1.788948,0.7502 -3.8576,-0.0928 -4.6097055,-1.87438 -0.7521065,-1.78321 ' +
'0.090598,-3.84627 1.8802645,-4.59604 1.78823,-0.74936 3.856881,0.0929 4.608987,1.87437 ' +
'0.752106,1.78165 -0.0906,3.84612 -1.879546,4.59605 z'
},
'TASK_TYPE_BUSINESS_RULE_HEADER': {
d: 'm {mx},{my} 0,4 20,0 0,-4 z'
},
'TASK_TYPE_BUSINESS_RULE_MAIN': {
d: 'm {mx},{my} 0,12 20,0 0,-12 z' +
'm 0,8 l 20,0 ' +
'm -13,-4 l 0,8'
} }
}; };
@ -314,25 +396,35 @@ function PathMap(Snap) {
// positioning // positioning
// compute the start point of the path // compute the start point of the path
var mx = param.containerWidth * param.position.mx; var mx, my;
var my = param.containerHeight * param.position.my;
if(!!param.abspos) {
mx = param.abspos.x;
my = param.abspos.y;
} else {
mx = param.containerWidth * param.position.mx;
my = param.containerHeight * param.position.my;
}
// path
var heightRatio = (param.containerHeight / rawPath.height) * param.yScaleFactor;
var widthRatio = (param.containerWidth / rawPath.width) * param.xScaleFactor;
var coordinates = {}; //map for the scaled coordinates var coordinates = {}; //map for the scaled coordinates
if(param.position) {
//Apply height ratio // path
for(var heightIndex = 0; heightIndex < rawPath.heightElements.length; heightIndex++) { var heightRatio = (param.containerHeight / rawPath.height) * param.yScaleFactor;
coordinates['y' + heightIndex] = rawPath.heightElements[heightIndex] * heightRatio; var widthRatio = (param.containerWidth / rawPath.width) * param.xScaleFactor;
//Apply height ratio
for (var heightIndex = 0; heightIndex < rawPath.heightElements.length; heightIndex++) {
coordinates['y' + heightIndex] = rawPath.heightElements[heightIndex] * heightRatio;
}
//Apply width ratio
for (var widthIndex = 0; widthIndex < rawPath.widthElements.length; widthIndex++) {
coordinates['x' + widthIndex] = rawPath.widthElements[widthIndex] * widthRatio;
}
} }
//Apply width ratio
for(var widthIndex = 0; widthIndex < rawPath.widthElements.length; widthIndex++) {
coordinates['x' + widthIndex] = rawPath.widthElements[widthIndex] * widthRatio;
}
//Apply value to raw path //Apply value to raw path
var path = Snap.format( var path = Snap.format(
rawPath.d, { rawPath.d, {

View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
expressionLanguage="http://www.w3.org/1999/XPath"
id="task-types"
typeLanguage="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
<process id="task-types" isClosed="false" isExecutable="false" processType="None">
<sendTask completionQuantity="1" id="sid-DC73E8B3-54C4-44E3-A172-E10E072A37CF" implementation="webService" isForCompensation="false" name="Send Task" startQuantity="1" />
<receiveTask completionQuantity="1" id="sid-18A8B7B4-13B7-4F5E-8D27-FC63B5F6FC32" implementation="webService" instantiate="false" isForCompensation="false" name="Receive Task" startQuantity="1" />
<userTask completionQuantity="1" id="sid-DD2A4023-C8B5-4C7A-87A6-F9BE5F8E6E4A" implementation="webService" isForCompensation="false" name="User Task" startQuantity="1" />
<manualTask completionQuantity="1" id="sid-6D88755E-A486-41A5-99DE-355AB75503A0" isForCompensation="false" name="Manual Task" startQuantity="1" />
<serviceTask completionQuantity="1" id="sid-2283F70F-1590-4D2A-A79D-0788721A3BD3" implementation="webService" isForCompensation="false" name="Service Task" startQuantity="1" />
<businessRuleTask completionQuantity="1" id="sid-05937FE7-AACD-4DC5-9607-9C0AD6EA9655" implementation="webService" isForCompensation="false" name="Business Rule Task&#10;" startQuantity="1" />
<scriptTask completionQuantity="1" id="sid-0C42A159-4787-4799-A340-A55F7FA6CBDA" isForCompensation="false" name="Script Task" scriptFormat="" startQuantity="1">
<script/>
</scriptTask>
<receiveTask completionQuantity="1" id="sid-D049CA0A-81EE-481B-B9E4-5A1577B3D729" implementation="webService" instantiate="true" isForCompensation="false" name="Receive Task&#10;(Instantiating)&#10;" startQuantity="1" />
</process>
<bpmndi:BPMNDiagram id="sid-565cb505-781d-4873-8263-dc70591a87a9">
<bpmndi:BPMNPlane bpmnElement="task-types" id="sid-7ebdcce4-7617-4e73-a47c-5facab598852">
<bpmndi:BPMNShape bpmnElement="sid-DC73E8B3-54C4-44E3-A172-E10E072A37CF" id="sid-DC73E8B3-54C4-44E3-A172-E10E072A37CF_gui">
<omgdc:Bounds height="80.0" width="100.0" x="45.0" y="75.0"/>
<bpmndi:BPMNLabel labelStyle="sid-e0061864-4ad9-48c3-ae14-465c7a037c45">
<omgdc:Bounds height="12.0" width="63.42857360839844" x="63.28571319580078" y="107.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-18A8B7B4-13B7-4F5E-8D27-FC63B5F6FC32" id="sid-18A8B7B4-13B7-4F5E-8D27-FC63B5F6FC32_gui">
<omgdc:Bounds height="80.0" width="100.0" x="190.0" y="75.0"/>
<bpmndi:BPMNLabel labelStyle="sid-e0061864-4ad9-48c3-ae14-465c7a037c45">
<omgdc:Bounds height="12.0" width="77.14286041259766" x="201.42856979370117" y="107.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-DD2A4023-C8B5-4C7A-87A6-F9BE5F8E6E4A" id="sid-DD2A4023-C8B5-4C7A-87A6-F9BE5F8E6E4A_gui">
<omgdc:Bounds height="80.0" width="100.0" x="45.0" y="200.0"/>
<bpmndi:BPMNLabel labelStyle="sid-e0061864-4ad9-48c3-ae14-465c7a037c45">
<omgdc:Bounds height="12.0" width="60.0" x="65.0" y="232.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-6D88755E-A486-41A5-99DE-355AB75503A0" id="sid-6D88755E-A486-41A5-99DE-355AB75503A0_gui">
<omgdc:Bounds height="80.0" width="100.0" x="190.0" y="200.0"/>
<bpmndi:BPMNLabel labelStyle="sid-e0061864-4ad9-48c3-ae14-465c7a037c45">
<omgdc:Bounds height="12.0" width="73.71428680419922" x="203.1428565979004" y="232.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-2283F70F-1590-4D2A-A79D-0788721A3BD3" id="sid-2283F70F-1590-4D2A-A79D-0788721A3BD3_gui">
<omgdc:Bounds height="80.0" width="100.0" x="45.0" y="325.0"/>
<bpmndi:BPMNLabel labelStyle="sid-e0061864-4ad9-48c3-ae14-465c7a037c45">
<omgdc:Bounds height="12.0" width="75.42857360839844" x="57.28571319580078" y="357.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-05937FE7-AACD-4DC5-9607-9C0AD6EA9655" id="sid-05937FE7-AACD-4DC5-9607-9C0AD6EA9655_gui">
<omgdc:Bounds height="80.0" width="100.0" x="190.0" y="325.0"/>
<bpmndi:BPMNLabel labelStyle="sid-e0061864-4ad9-48c3-ae14-465c7a037c45">
<omgdc:Bounds height="24.0" width="84.0" x="198.0" y="351.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-0C42A159-4787-4799-A340-A55F7FA6CBDA" id="sid-0C42A159-4787-4799-A340-A55F7FA6CBDA_gui">
<omgdc:Bounds height="80.0" width="100.0" x="45.0" y="450.0"/>
<bpmndi:BPMNLabel labelStyle="sid-e0061864-4ad9-48c3-ae14-465c7a037c45">
<omgdc:Bounds height="12.0" width="67.71428680419922" x="61.14285659790039" y="482.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-D049CA0A-81EE-481B-B9E4-5A1577B3D729" id="sid-D049CA0A-81EE-481B-B9E4-5A1577B3D729_gui">
<omgdc:Bounds height="80.0" width="100.0" x="190.0" y="450.0"/>
<bpmndi:BPMNLabel labelStyle="sid-f50f8ab6-960d-41a1-81ea-6ab94239978f">
<omgdc:Bounds height="24.0" width="86.57142639160156" x="196.71428680419922" y="476.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="sid-e0061864-4ad9-48c3-ae14-465c7a037c45">
<omgdc:Font isBold="false" isItalic="false" isStrikeThrough="false" isUnderline="false" name="Arial" size="12.0"/>
</bpmndi:BPMNLabelStyle>
</bpmndi:BPMNDiagram>
</definitions>

View File

@ -28,7 +28,18 @@ describe('draw/BpmnRenderer', function() {
}); });
}); });
it('should render activity-marker', function(done) { it('should render task types', function(done) {
var xml = fs.readFileSync(__dirname + '/../../../fixtures/bpmn/render/task-types.bpmn', 'utf8');
var renderer = new Viewer(container);
renderer.importXML(xml, function(err) {
done(err);
});
});
it('should render activity marker', function(done) {
var xml = fs.readFileSync(__dirname + '/../../../fixtures/bpmn/render/activity-marker-combination.bpmn', 'utf8'); var xml = fs.readFileSync(__dirname + '/../../../fixtures/bpmn/render/activity-marker-combination.bpmn', 'utf8');
@ -39,7 +50,7 @@ describe('draw/BpmnRenderer', function() {
}); });
}); });
it('should render activity-marker', function(done) { it('should render activity marker', function(done) {
var xml = fs.readFileSync(__dirname + '/../../../fixtures/bpmn/render/activity-marker.bpmn', 'utf8'); var xml = fs.readFileSync(__dirname + '/../../../fixtures/bpmn/render/activity-marker.bpmn', 'utf8');