bpmn-js 17.7.0 → 17.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/LICENSE +23 -23
  2. package/README.md +93 -93
  3. package/dist/assets/bpmn-js.css +145 -145
  4. package/dist/assets/diagram-js.css +990 -990
  5. package/dist/bpmn-modeler.development.js +57222 -57224
  6. package/dist/bpmn-modeler.production.min.js +9 -9
  7. package/dist/bpmn-navigated-viewer.development.js +17487 -17487
  8. package/dist/bpmn-navigated-viewer.production.min.js +4 -4
  9. package/dist/bpmn-viewer.development.js +21751 -21751
  10. package/dist/bpmn-viewer.production.min.js +4 -4
  11. package/index.js +2 -2
  12. package/lib/BaseModeler.d.ts +15 -15
  13. package/lib/BaseModeler.js +79 -79
  14. package/lib/BaseViewer.d.ts +352 -352
  15. package/lib/BaseViewer.js +858 -858
  16. package/lib/Modeler.d.ts +86 -86
  17. package/lib/Modeler.js +204 -204
  18. package/lib/NavigatedViewer.d.ts +11 -11
  19. package/lib/NavigatedViewer.js +37 -37
  20. package/lib/Viewer.d.ts +47 -47
  21. package/lib/Viewer.js +78 -78
  22. package/lib/core/index.d.ts +10 -10
  23. package/lib/core/index.js +8 -8
  24. package/lib/draw/BpmnRenderUtil.d.ts +123 -123
  25. package/lib/draw/BpmnRenderUtil.js +256 -256
  26. package/lib/draw/BpmnRenderer.d.ts +114 -114
  27. package/lib/draw/BpmnRenderer.js +2337 -2340
  28. package/lib/draw/PathMap.d.ts +330 -330
  29. package/lib/draw/PathMap.js +478 -478
  30. package/lib/draw/TextRenderer.d.ts +74 -74
  31. package/lib/draw/TextRenderer.js +136 -136
  32. package/lib/draw/index.d.ts +10 -10
  33. package/lib/draw/index.js +11 -11
  34. package/lib/features/align-elements/AlignElementsContextPadProvider.d.ts +32 -32
  35. package/lib/features/align-elements/AlignElementsContextPadProvider.js +105 -105
  36. package/lib/features/align-elements/AlignElementsIcons.d.ts +10 -10
  37. package/lib/features/align-elements/AlignElementsIcons.js +43 -43
  38. package/lib/features/align-elements/AlignElementsMenuProvider.d.ts +32 -32
  39. package/lib/features/align-elements/AlignElementsMenuProvider.js +100 -100
  40. package/lib/features/align-elements/BpmnAlignElements.d.ts +9 -9
  41. package/lib/features/align-elements/BpmnAlignElements.js +45 -45
  42. package/lib/features/align-elements/index.d.ts +11 -11
  43. package/lib/features/align-elements/index.js +23 -23
  44. package/lib/features/append-preview/AppendPreview.d.ts +36 -36
  45. package/lib/features/append-preview/AppendPreview.js +108 -108
  46. package/lib/features/append-preview/index.d.ts +16 -16
  47. package/lib/features/append-preview/index.js +15 -15
  48. package/lib/features/auto-place/BpmnAutoPlace.d.ts +13 -13
  49. package/lib/features/auto-place/BpmnAutoPlace.js +20 -20
  50. package/lib/features/auto-place/BpmnAutoPlaceUtil.d.ts +47 -47
  51. package/lib/features/auto-place/BpmnAutoPlaceUtil.js +225 -225
  52. package/lib/features/auto-place/index.d.ts +7 -7
  53. package/lib/features/auto-place/index.js +8 -8
  54. package/lib/features/auto-resize/BpmnAutoResize.d.ts +25 -25
  55. package/lib/features/auto-resize/BpmnAutoResize.js +45 -45
  56. package/lib/features/auto-resize/BpmnAutoResizeProvider.d.ts +26 -26
  57. package/lib/features/auto-resize/BpmnAutoResizeProvider.js +69 -69
  58. package/lib/features/auto-resize/index.d.ts +8 -8
  59. package/lib/features/auto-resize/index.js +12 -12
  60. package/lib/features/context-pad/ContextPadProvider.d.ts +73 -73
  61. package/lib/features/context-pad/index.d.ts +7 -7
  62. package/lib/features/context-pad/index.js +22 -22
  63. package/lib/features/copy-paste/BpmnCopyPaste.d.ts +17 -17
  64. package/lib/features/copy-paste/BpmnCopyPaste.js +192 -192
  65. package/lib/features/copy-paste/ModdleCopy.d.ts +45 -45
  66. package/lib/features/copy-paste/ModdleCopy.js +275 -275
  67. package/lib/features/copy-paste/index.d.ts +9 -9
  68. package/lib/features/copy-paste/index.js +13 -13
  69. package/lib/features/di-ordering/BpmnDiOrdering.d.ts +11 -11
  70. package/lib/features/di-ordering/BpmnDiOrdering.js +48 -48
  71. package/lib/features/di-ordering/index.d.ts +6 -6
  72. package/lib/features/di-ordering/index.js +7 -7
  73. package/lib/features/distribute-elements/BpmnDistributeElements.d.ts +10 -10
  74. package/lib/features/distribute-elements/BpmnDistributeElements.js +60 -60
  75. package/lib/features/distribute-elements/DistributeElementsIcons.d.ts +5 -5
  76. package/lib/features/distribute-elements/DistributeElementsIcons.js +18 -18
  77. package/lib/features/distribute-elements/DistributeElementsMenuProvider.d.ts +32 -32
  78. package/lib/features/distribute-elements/DistributeElementsMenuProvider.js +92 -92
  79. package/lib/features/distribute-elements/index.d.ts +9 -9
  80. package/lib/features/distribute-elements/index.js +19 -19
  81. package/lib/features/drilldown/DrilldownBreadcrumbs.d.ts +19 -19
  82. package/lib/features/drilldown/DrilldownBreadcrumbs.js +131 -131
  83. package/lib/features/drilldown/DrilldownCentering.d.ts +17 -17
  84. package/lib/features/drilldown/DrilldownCentering.js +122 -122
  85. package/lib/features/drilldown/DrilldownOverlayBehavior.d.ts +18 -18
  86. package/lib/features/drilldown/DrilldownOverlayBehavior.js +210 -210
  87. package/lib/features/drilldown/SubprocessCompatibility.d.ts +21 -21
  88. package/lib/features/drilldown/SubprocessCompatibility.js +266 -268
  89. package/lib/features/drilldown/index.d.ts +13 -13
  90. package/lib/features/drilldown/index.js +16 -16
  91. package/lib/features/editor-actions/BpmnEditorActions.d.ts +13 -13
  92. package/lib/features/editor-actions/BpmnEditorActions.js +187 -187
  93. package/lib/features/editor-actions/index.d.ts +6 -6
  94. package/lib/features/editor-actions/index.js +10 -10
  95. package/lib/features/grid-snapping/BpmnGridSnapping.d.ts +9 -9
  96. package/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.d.ts +12 -12
  97. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.d.ts +27 -27
  98. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js +155 -155
  99. package/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.d.ts +13 -13
  100. package/lib/features/grid-snapping/behavior/index.d.ts +10 -10
  101. package/lib/features/grid-snapping/index.d.ts +11 -11
  102. package/lib/features/interaction-events/BpmnInteractionEvents.d.ts +18 -18
  103. package/lib/features/interaction-events/BpmnInteractionEvents.js +150 -150
  104. package/lib/features/interaction-events/index.d.ts +6 -6
  105. package/lib/features/interaction-events/index.js +5 -5
  106. package/lib/features/keyboard/BpmnKeyboardBindings.d.ts +15 -15
  107. package/lib/features/keyboard/BpmnKeyboardBindings.js +179 -179
  108. package/lib/features/keyboard/index.d.ts +7 -7
  109. package/lib/features/keyboard/index.js +11 -11
  110. package/lib/features/label-editing/LabelEditingPreview.d.ts +13 -13
  111. package/lib/features/label-editing/LabelEditingPreview.js +144 -144
  112. package/lib/features/label-editing/LabelEditingProvider.d.ts +62 -62
  113. package/lib/features/label-editing/LabelEditingProvider.js +519 -519
  114. package/lib/features/label-editing/LabelUtil.d.ts +1 -1
  115. package/lib/features/label-editing/LabelUtil.js +4 -4
  116. package/lib/features/label-editing/cmd/UpdateLabelHandler.d.ts +22 -22
  117. package/lib/features/label-editing/cmd/UpdateLabelHandler.js +149 -149
  118. package/lib/features/label-editing/index.d.ts +9 -9
  119. package/lib/features/label-editing/index.js +21 -21
  120. package/lib/features/modeling/BpmnFactory.d.ts +73 -73
  121. package/lib/features/modeling/BpmnFactory.js +180 -180
  122. package/lib/features/modeling/BpmnLayouter.d.ts +26 -26
  123. package/lib/features/modeling/BpmnLayouter.js +481 -481
  124. package/lib/features/modeling/BpmnUpdater.d.ts +90 -90
  125. package/lib/features/modeling/BpmnUpdater.js +837 -837
  126. package/lib/features/modeling/ElementFactory.d.ts +117 -117
  127. package/lib/features/modeling/ElementFactory.js +406 -406
  128. package/lib/features/modeling/ElementFactory.test.ts +132 -132
  129. package/lib/features/modeling/Modeling.d.ts +150 -150
  130. package/lib/features/modeling/Modeling.js +309 -307
  131. package/lib/features/modeling/Modeling.test.ts +147 -147
  132. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.d.ts +20 -20
  133. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js +284 -284
  134. package/lib/features/modeling/behavior/AppendBehavior.d.ts +6 -6
  135. package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
  136. package/lib/features/modeling/behavior/AssociationBehavior.d.ts +11 -11
  137. package/lib/features/modeling/behavior/AttachEventBehavior.d.ts +15 -15
  138. package/lib/features/modeling/behavior/AttachEventBehavior.js +106 -106
  139. package/lib/features/modeling/behavior/BoundaryEventBehavior.d.ts +15 -15
  140. package/lib/features/modeling/behavior/BoundaryEventBehavior.js +74 -74
  141. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.d.ts +17 -17
  142. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js +222 -222
  143. package/lib/features/modeling/behavior/CreateBehavior.d.ts +9 -9
  144. package/lib/features/modeling/behavior/CreateBehavior.js +33 -33
  145. package/lib/features/modeling/behavior/CreateDataObjectBehavior.d.ts +15 -15
  146. package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +43 -43
  147. package/lib/features/modeling/behavior/CreateParticipantBehavior.d.ts +19 -19
  148. package/lib/features/modeling/behavior/CreateParticipantBehavior.js +237 -237
  149. package/lib/features/modeling/behavior/DataInputAssociationBehavior.d.ts +21 -21
  150. package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +162 -162
  151. package/lib/features/modeling/behavior/DataStoreBehavior.d.ts +19 -19
  152. package/lib/features/modeling/behavior/DeleteLaneBehavior.d.ts +15 -15
  153. package/lib/features/modeling/behavior/DeleteLaneBehavior.js +162 -162
  154. package/lib/features/modeling/behavior/DetachEventBehavior.d.ts +15 -15
  155. package/lib/features/modeling/behavior/DetachEventBehavior.js +101 -101
  156. package/lib/features/modeling/behavior/DropOnFlowBehavior.d.ts +13 -13
  157. package/lib/features/modeling/behavior/DropOnFlowBehavior.js +221 -221
  158. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.d.ts +11 -11
  159. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.js +110 -110
  160. package/lib/features/modeling/behavior/FixHoverBehavior.d.ts +17 -17
  161. package/lib/features/modeling/behavior/GroupBehavior.d.ts +26 -26
  162. package/lib/features/modeling/behavior/GroupBehavior.js +332 -332
  163. package/lib/features/modeling/behavior/ImportDockingFix.d.ts +13 -13
  164. package/lib/features/modeling/behavior/ImportDockingFix.js +83 -83
  165. package/lib/features/modeling/behavior/IsHorizontalFix.d.ts +10 -10
  166. package/lib/features/modeling/behavior/IsHorizontalFix.js +54 -54
  167. package/lib/features/modeling/behavior/LabelBehavior.d.ts +56 -56
  168. package/lib/features/modeling/behavior/LabelBehavior.js +364 -364
  169. package/lib/features/modeling/behavior/LayoutConnectionBehavior.d.ts +16 -16
  170. package/lib/features/modeling/behavior/LayoutConnectionBehavior.js +121 -121
  171. package/lib/features/modeling/behavior/MessageFlowBehavior.d.ts +15 -15
  172. package/lib/features/modeling/behavior/NonInterruptingBehavior.d.ts +4 -4
  173. package/lib/features/modeling/behavior/NonInterruptingBehavior.js +41 -41
  174. package/lib/features/modeling/behavior/RemoveElementBehavior.d.ts +13 -13
  175. package/lib/features/modeling/behavior/RemoveElementBehavior.js +91 -91
  176. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.d.ts +16 -16
  177. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js +41 -41
  178. package/lib/features/modeling/behavior/RemoveParticipantBehavior.d.ts +15 -15
  179. package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +59 -54
  180. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.d.ts +15 -15
  181. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +194 -194
  182. package/lib/features/modeling/behavior/ReplaceElementBehaviour.d.ts +23 -23
  183. package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +144 -144
  184. package/lib/features/modeling/behavior/ResizeBehavior.d.ts +67 -67
  185. package/lib/features/modeling/behavior/ResizeBehavior.js +262 -262
  186. package/lib/features/modeling/behavior/ResizeLaneBehavior.d.ts +16 -16
  187. package/lib/features/modeling/behavior/ResizeLaneBehavior.js +70 -70
  188. package/lib/features/modeling/behavior/RootElementReferenceBehavior.d.ts +25 -25
  189. package/lib/features/modeling/behavior/SpaceToolBehavior.d.ts +10 -10
  190. package/lib/features/modeling/behavior/SpaceToolBehavior.js +207 -207
  191. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.d.ts +28 -28
  192. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.js +588 -588
  193. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.d.ts +15 -15
  194. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.js +55 -55
  195. package/lib/features/modeling/behavior/TextAnnotationBehavior.d.ts +6 -6
  196. package/lib/features/modeling/behavior/TextAnnotationBehavior.js +42 -42
  197. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.d.ts +14 -14
  198. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js +87 -87
  199. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.d.ts +13 -13
  200. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js +156 -156
  201. package/lib/features/modeling/behavior/UnclaimIdBehavior.d.ts +19 -19
  202. package/lib/features/modeling/behavior/UnclaimIdBehavior.js +64 -64
  203. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.d.ts +16 -16
  204. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js +59 -59
  205. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.d.ts +15 -15
  206. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +157 -157
  207. package/lib/features/modeling/behavior/index.d.ts +2 -2
  208. package/lib/features/modeling/behavior/index.js +128 -128
  209. package/lib/features/modeling/behavior/util/CategoryUtil.d.ts +49 -49
  210. package/lib/features/modeling/behavior/util/CategoryUtil.js +86 -86
  211. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.d.ts +19 -19
  212. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js +22 -22
  213. package/lib/features/modeling/behavior/util/GeometricUtil.d.ts +1 -1
  214. package/lib/features/modeling/behavior/util/LabelLayoutUtil.d.ts +32 -32
  215. package/lib/features/modeling/behavior/util/LabelLayoutUtil.js +41 -41
  216. package/lib/features/modeling/behavior/util/LayoutUtil.d.ts +48 -48
  217. package/lib/features/modeling/behavior/util/LayoutUtil.js +259 -259
  218. package/lib/features/modeling/behavior/util/LineAttachmentUtil.d.ts +37 -37
  219. package/lib/features/modeling/behavior/util/LineAttachmentUtil.js +241 -241
  220. package/lib/features/modeling/behavior/util/LineIntersect.d.ts +13 -13
  221. package/lib/features/modeling/behavior/util/LineIntersect.js +39 -39
  222. package/lib/features/modeling/behavior/util/NonInterruptingUtil.d.ts +3 -3
  223. package/lib/features/modeling/behavior/util/NonInterruptingUtil.js +32 -32
  224. package/lib/features/modeling/behavior/util/ResizeUtil.d.ts +1 -1
  225. package/lib/features/modeling/cmd/AddLaneHandler.d.ts +22 -22
  226. package/lib/features/modeling/cmd/AddLaneHandler.js +192 -192
  227. package/lib/features/modeling/cmd/IdClaimHandler.d.ts +22 -22
  228. package/lib/features/modeling/cmd/IdClaimHandler.js +51 -51
  229. package/lib/features/modeling/cmd/ResizeLaneHandler.d.ts +39 -39
  230. package/lib/features/modeling/cmd/ResizeLaneHandler.js +146 -146
  231. package/lib/features/modeling/cmd/SetColorHandler.d.ts +18 -18
  232. package/lib/features/modeling/cmd/SplitLaneHandler.d.ts +20 -20
  233. package/lib/features/modeling/cmd/SplitLaneHandler.js +99 -99
  234. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.d.ts +20 -20
  235. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +99 -99
  236. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.d.ts +21 -21
  237. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +218 -218
  238. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.d.ts +20 -20
  239. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js +107 -107
  240. package/lib/features/modeling/cmd/UpdatePropertiesHandler.d.ts +58 -58
  241. package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +260 -260
  242. package/lib/features/modeling/cmd/UpdateSemanticParentHandler.d.ts +18 -18
  243. package/lib/features/modeling/index.d.ts +27 -27
  244. package/lib/features/modeling/index.js +45 -45
  245. package/lib/features/modeling/util/LaneUtil.d.ts +46 -46
  246. package/lib/features/modeling/util/LaneUtil.js +188 -188
  247. package/lib/features/modeling/util/ModelingUtil.d.ts +21 -21
  248. package/lib/features/modeling/util/ModelingUtil.js +54 -54
  249. package/lib/features/modeling-feedback/ModelingFeedback.d.ts +13 -13
  250. package/lib/features/modeling-feedback/ModelingFeedback.js +46 -46
  251. package/lib/features/modeling-feedback/index.d.ts +7 -7
  252. package/lib/features/modeling-feedback/index.js +12 -12
  253. package/lib/features/ordering/BpmnOrderingProvider.d.ts +19 -19
  254. package/lib/features/ordering/BpmnOrderingProvider.js +191 -191
  255. package/lib/features/ordering/index.d.ts +6 -6
  256. package/lib/features/ordering/index.js +5 -5
  257. package/lib/features/outline/OutlineProvider.d.ts +34 -34
  258. package/lib/features/outline/OutlineProvider.js +179 -179
  259. package/lib/features/outline/OutlineUtil.d.ts +18 -18
  260. package/lib/features/outline/OutlineUtil.js +31 -31
  261. package/lib/features/outline/index.d.ts +7 -7
  262. package/lib/features/outline/index.js +10 -10
  263. package/lib/features/palette/PaletteProvider.d.ts +34 -34
  264. package/lib/features/palette/PaletteProvider.js +214 -214
  265. package/lib/features/palette/index.d.ts +9 -9
  266. package/lib/features/palette/index.js +23 -23
  267. package/lib/features/popup-menu/ReplaceMenuProvider.d.ts +52 -52
  268. package/lib/features/popup-menu/ReplaceMenuProvider.js +679 -679
  269. package/lib/features/popup-menu/index.d.ts +11 -11
  270. package/lib/features/popup-menu/index.js +16 -16
  271. package/lib/features/popup-menu/util/Icons.d.ts +5 -5
  272. package/lib/features/popup-menu/util/Icons.js +14 -14
  273. package/lib/features/popup-menu/util/TypeUtil.d.ts +14 -14
  274. package/lib/features/popup-menu/util/TypeUtil.js +52 -52
  275. package/lib/features/replace/BpmnReplace.d.ts +47 -47
  276. package/lib/features/replace/BpmnReplace.js +382 -382
  277. package/lib/features/replace/ReplaceOptions.d.ts +75 -75
  278. package/lib/features/replace/ReplaceOptions.js +919 -919
  279. package/lib/features/replace/index.d.ts +9 -9
  280. package/lib/features/replace/index.js +14 -14
  281. package/lib/features/replace-preview/BpmnReplacePreview.d.ts +17 -17
  282. package/lib/features/replace-preview/BpmnReplacePreview.js +139 -139
  283. package/lib/features/replace-preview/index.d.ts +7 -7
  284. package/lib/features/replace-preview/index.js +11 -11
  285. package/lib/features/rules/BpmnRules.d.ts +181 -181
  286. package/lib/features/rules/BpmnRules.js +1191 -1191
  287. package/lib/features/rules/index.d.ts +7 -7
  288. package/lib/features/rules/index.js +11 -11
  289. package/lib/features/search/BpmnSearchProvider.d.ts +29 -29
  290. package/lib/features/search/BpmnSearchProvider.js +136 -136
  291. package/lib/features/search/index.d.ts +7 -7
  292. package/lib/features/search/index.js +12 -12
  293. package/lib/features/snapping/BpmnConnectSnapping.d.ts +17 -17
  294. package/lib/features/snapping/BpmnCreateMoveSnapping.d.ts +41 -41
  295. package/lib/features/snapping/BpmnCreateMoveSnapping.js +289 -289
  296. package/lib/features/snapping/BpmnSnappingUtil.d.ts +11 -11
  297. package/lib/features/snapping/index.d.ts +9 -9
  298. package/lib/features/snapping/index.js +12 -12
  299. package/lib/features/space-tool/BpmnSpaceTool.d.ts +21 -21
  300. package/lib/features/space-tool/BpmnSpaceTool.js +69 -69
  301. package/lib/features/space-tool/index.d.ts +6 -6
  302. package/lib/features/space-tool/index.js +7 -7
  303. package/lib/import/BpmnImporter.d.ts +51 -51
  304. package/lib/import/BpmnImporter.js +363 -363
  305. package/lib/import/BpmnTreeWalker.d.ts +20 -20
  306. package/lib/import/BpmnTreeWalker.js +453 -453
  307. package/lib/import/Importer.d.ts +25 -25
  308. package/lib/import/Importer.js +222 -217
  309. package/lib/import/Util.d.ts +1 -1
  310. package/lib/import/Util.js +6 -6
  311. package/lib/import/index.d.ts +6 -6
  312. package/lib/import/index.js +9 -9
  313. package/lib/model/Types.d.ts +25 -25
  314. package/lib/model/Types.ts +40 -40
  315. package/lib/util/CompatibilityUtil.d.ts +8 -8
  316. package/lib/util/CompatibilityUtil.js +29 -29
  317. package/lib/util/DiUtil.d.ts +60 -60
  318. package/lib/util/DiUtil.js +122 -122
  319. package/lib/util/DrilldownUtil.d.ts +39 -39
  320. package/lib/util/DrilldownUtil.js +69 -69
  321. package/lib/util/LabelUtil.d.ts +83 -83
  322. package/lib/util/LabelUtil.js +262 -262
  323. package/lib/util/ModelUtil.d.ts +40 -40
  324. package/lib/util/ModelUtil.js +58 -58
  325. package/lib/util/PoweredByUtil.d.ts +8 -8
  326. package/lib/util/PoweredByUtil.js +99 -99
  327. package/lib/util/Types.js +4 -4
  328. package/lib/util/Types.ts +3 -3
  329. package/package.json +132 -132
  330. package/test/helper/TranslationCollector.js +15 -15
  331. package/test/helper/index.js +313 -313
  332. package/test/matchers/BoundsMatchers.js +252 -252
  333. package/test/matchers/ConnectionMatchers.js +165 -165
  334. package/test/matchers/JSONMatcher.js +19 -19
  335. package/test/util/KeyEvents.js +22 -22
  336. package/test/util/MockEvents.js +61 -61
  337. package/test/util/custom-rules/CustomRules.js +16 -16
  338. package/test/util/custom-rules/index.js +6 -6
@@ -1,2341 +1,2338 @@
1
- import inherits from 'inherits-browser';
2
-
3
- import {
4
- assign,
5
- forEach,
6
- isObject
7
- } from 'min-dash';
8
-
9
- import BaseRenderer from 'diagram-js/lib/draw/BaseRenderer';
10
-
11
- import {
12
- isExpanded,
13
- isHorizontal,
14
- isEventSubProcess
15
- } from '../util/DiUtil';
16
-
17
- import {
18
- getLabel
19
- } from '../util/LabelUtil';
20
-
21
- import {
22
- is
23
- } from '../util/ModelUtil';
24
-
25
- import {
26
- createLine
27
- } from 'diagram-js/lib/util/RenderUtil';
28
-
29
- import {
30
- isTypedEvent,
31
- isThrowEvent,
32
- isCollection,
33
- getBounds,
34
- getDi,
35
- getSemantic,
36
- getCirclePath,
37
- getRoundRectPath,
38
- getDiamondPath,
39
- getRectPath,
40
- getFillColor,
41
- getStrokeColor,
42
- getLabelColor,
43
- getHeight,
44
- getWidth
45
- } from './BpmnRenderUtil';
46
-
47
- import {
48
- query as domQuery
49
- } from 'min-dom';
50
-
51
- import {
52
- append as svgAppend,
53
- attr as svgAttr,
54
- create as svgCreate,
55
- classes as svgClasses
56
- } from 'tiny-svg';
57
-
58
- import {
59
- rotate,
60
- transform,
61
- translate
62
- } from 'diagram-js/lib/util/SvgTransformUtil';
63
-
64
- import Ids from 'ids';
65
-
66
- import { black } from './BpmnRenderUtil';
67
-
68
- var rendererIds = new Ids();
69
-
70
- var ELEMENT_LABEL_DISTANCE = 10,
71
- INNER_OUTER_DIST = 3,
72
- PARTICIPANT_STROKE_WIDTH = 1.5,
73
- TASK_BORDER_RADIUS = 10;
74
-
75
- var DEFAULT_OPACITY = 0.95,
76
- FULL_OPACITY = 1,
77
- LOW_OPACITY = 0.25;
78
-
79
- /**
80
- * @typedef { Partial<{
81
- * defaultFillColor: string,
82
- * defaultStrokeColor: string,
83
- * defaultLabelColor: string
84
- * }> } BpmnRendererConfig
85
- *
86
- * @typedef { Partial<{
87
- * fill: string,
88
- * stroke: string,
89
- * width: string,
90
- * height: string
91
- * }> } Attrs
92
- */
93
-
94
- /**
95
- * @typedef { import('../model/Types').Element } Element
96
- */
97
-
98
- /**
99
- * A renderer for BPMN elements
100
- *
101
- * @param {BpmnRendererConfig} config
102
- * @param {import('diagram-js/lib/core/EventBus').default} eventBus
103
- * @param {import('diagram-js/lib/draw/Styles').default} styles
104
- * @param {import('./PathMap').default} pathMap
105
- * @param {import('diagram-js/lib/core/Canvas').default} canvas
106
- * @param {import('./TextRenderer').default} textRenderer
107
- * @param {number} [priority]
108
- */
109
- export default function BpmnRenderer(
110
- config, eventBus, styles, pathMap,
111
- canvas, textRenderer, priority) {
112
-
113
- BaseRenderer.call(this, eventBus, priority);
114
-
115
- var defaultFillColor = config && config.defaultFillColor,
116
- defaultStrokeColor = config && config.defaultStrokeColor,
117
- defaultLabelColor = config && config.defaultLabelColor;
118
-
119
- var rendererId = rendererIds.next();
120
-
121
- var markers = {};
122
-
123
- function shapeStyle(attrs) {
124
- return styles.computeStyle(attrs, {
125
- strokeLinecap: 'round',
126
- strokeLinejoin: 'round',
127
- stroke: black,
128
- strokeWidth: 2,
129
- fill: 'white'
130
- });
131
- }
132
-
133
- function lineStyle(attrs) {
134
- return styles.computeStyle(attrs, [ 'no-fill' ], {
135
- strokeLinecap: 'round',
136
- strokeLinejoin: 'round',
137
- stroke: black,
138
- strokeWidth: 2
139
- });
140
- }
141
-
142
- function addMarker(id, options) {
143
- var {
144
- ref = { x: 0, y: 0 },
145
- scale = 1,
146
- element
147
- } = options;
148
-
149
- var marker = svgCreate('marker', {
150
- id: id,
151
- viewBox: '0 0 20 20',
152
- refX: ref.x,
153
- refY: ref.y,
154
- markerWidth: 20 * scale,
155
- markerHeight: 20 * scale,
156
- orient: 'auto'
157
- });
158
-
159
- svgAppend(marker, element);
160
-
161
- var defs = domQuery('defs', canvas._svg);
162
-
163
- if (!defs) {
164
- defs = svgCreate('defs');
165
-
166
- svgAppend(canvas._svg, defs);
167
- }
168
-
169
- svgAppend(defs, marker);
170
-
171
- markers[id] = marker;
172
- }
173
-
174
- function colorEscape(str) {
175
-
176
- // only allow characters and numbers
177
- return str.replace(/[^0-9a-zA-Z]+/g, '_');
178
- }
179
-
180
- function marker(type, fill, stroke) {
181
- var id = type + '-' + colorEscape(fill) + '-' + colorEscape(stroke) + '-' + rendererId;
182
-
183
- if (!markers[id]) {
184
- createMarker(id, type, fill, stroke);
185
- }
186
-
187
- return 'url(#' + id + ')';
188
- }
189
-
190
- function createMarker(id, type, fill, stroke) {
191
-
192
- if (type === 'sequenceflow-end') {
193
- var sequenceflowEnd = svgCreate('path', {
194
- d: 'M 1 5 L 11 10 L 1 15 Z',
195
- ...shapeStyle({
196
- fill: stroke,
197
- stroke: stroke,
198
- strokeWidth: 1
199
- })
200
- });
201
-
202
- addMarker(id, {
203
- element: sequenceflowEnd,
204
- ref: { x: 11, y: 10 },
205
- scale: 0.5
206
- });
207
- }
208
-
209
- if (type === 'messageflow-start') {
210
- var messageflowStart = svgCreate('circle', {
211
- cx: 6,
212
- cy: 6,
213
- r: 3.5,
214
- ...shapeStyle({
215
- fill,
216
- stroke: stroke,
217
- strokeWidth: 1,
218
-
219
- // fix for safari / chrome / firefox bug not correctly
220
- // resetting stroke dash array
221
- strokeDasharray: [ 10000, 1 ]
222
- })
223
- });
224
-
225
- addMarker(id, {
226
- element: messageflowStart,
227
- ref: { x: 6, y: 6 }
228
- });
229
- }
230
-
231
- if (type === 'messageflow-end') {
232
- var messageflowEnd = svgCreate('path', {
233
- d: 'm 1 5 l 0 -3 l 7 3 l -7 3 z',
234
- ...shapeStyle({
235
- fill,
236
- stroke: stroke,
237
- strokeWidth: 1,
238
-
239
- // fix for safari / chrome / firefox bug not correctly
240
- // resetting stroke dash array
241
- strokeDasharray: [ 10000, 1 ]
242
- })
243
- });
244
-
245
- addMarker(id, {
246
- element: messageflowEnd,
247
- ref: { x: 8.5, y: 5 }
248
- });
249
- }
250
-
251
- if (type === 'association-start') {
252
- var associationStart = svgCreate('path', {
253
- d: 'M 11 5 L 1 10 L 11 15',
254
- ...lineStyle({
255
- fill: 'none',
256
- stroke,
257
- strokeWidth: 1.5,
258
-
259
- // fix for safari / chrome / firefox bug not correctly
260
- // resetting stroke dash array
261
- strokeDasharray: [ 10000, 1 ]
262
- })
263
- });
264
-
265
- addMarker(id, {
266
- element: associationStart,
267
- ref: { x: 1, y: 10 },
268
- scale: 0.5
269
- });
270
- }
271
-
272
- if (type === 'association-end') {
273
- var associationEnd = svgCreate('path', {
274
- d: 'M 1 5 L 11 10 L 1 15',
275
- ...lineStyle({
276
- fill: 'none',
277
- stroke,
278
- strokeWidth: 1.5,
279
-
280
- // fix for safari / chrome / firefox bug not correctly
281
- // resetting stroke dash array
282
- strokeDasharray: [ 10000, 1 ]
283
- })
284
- });
285
-
286
- addMarker(id, {
287
- element: associationEnd,
288
- ref: { x: 11, y: 10 },
289
- scale: 0.5
290
- });
291
- }
292
-
293
- if (type === 'conditional-flow-marker') {
294
- var conditionalFlowMarker = svgCreate('path', {
295
- d: 'M 0 10 L 8 6 L 16 10 L 8 14 Z',
296
- ...shapeStyle({
297
- fill,
298
- stroke: stroke
299
- })
300
- });
301
-
302
- addMarker(id, {
303
- element: conditionalFlowMarker,
304
- ref: { x: -1, y: 10 },
305
- scale: 0.5
306
- });
307
- }
308
-
309
- if (type === 'conditional-default-flow-marker') {
310
- var defaultFlowMarker = svgCreate('path', {
311
- d: 'M 6 4 L 10 16',
312
- ...shapeStyle({
313
- stroke: stroke
314
- })
315
- });
316
-
317
- addMarker(id, {
318
- element: defaultFlowMarker,
319
- ref: { x: 0, y: 10 },
320
- scale: 0.5
321
- });
322
- }
323
- }
324
-
325
- function drawCircle(parentGfx, width, height, offset, attrs = {}) {
326
-
327
- if (isObject(offset)) {
328
- attrs = offset;
329
- offset = 0;
330
- }
331
-
332
- offset = offset || 0;
333
-
334
- attrs = shapeStyle(attrs);
335
-
336
- var cx = width / 2,
337
- cy = height / 2;
338
-
339
- var circle = svgCreate('circle', {
340
- cx: cx,
341
- cy: cy,
342
- r: Math.round((width + height) / 4 - offset),
343
- ...attrs
344
- });
345
-
346
- svgAppend(parentGfx, circle);
347
-
348
- return circle;
349
- }
350
-
351
- function drawRect(parentGfx, width, height, r, offset, attrs) {
352
-
353
- if (isObject(offset)) {
354
- attrs = offset;
355
- offset = 0;
356
- }
357
-
358
- offset = offset || 0;
359
-
360
- attrs = shapeStyle(attrs);
361
-
362
- var rect = svgCreate('rect', {
363
- x: offset,
364
- y: offset,
365
- width: width - offset * 2,
366
- height: height - offset * 2,
367
- rx: r,
368
- ry: r,
369
- ...attrs
370
- });
371
-
372
- svgAppend(parentGfx, rect);
373
-
374
- return rect;
375
- }
376
-
377
- function drawDiamond(parentGfx, width, height, attrs) {
378
-
379
- var x_2 = width / 2;
380
- var y_2 = height / 2;
381
-
382
- var points = [
383
- { x: x_2, y: 0 },
384
- { x: width, y: y_2 },
385
- { x: x_2, y: height },
386
- { x: 0, y: y_2 }
387
- ];
388
-
389
- var pointsString = points.map(function(point) {
390
- return point.x + ',' + point.y;
391
- }).join(' ');
392
-
393
- attrs = shapeStyle(attrs);
394
-
395
- var polygon = svgCreate('polygon', {
396
- ...attrs,
397
- points: pointsString
398
- });
399
-
400
- svgAppend(parentGfx, polygon);
401
-
402
- return polygon;
403
- }
404
-
405
- /**
406
- * @param {SVGElement} parentGfx
407
- * @param {Point[]} waypoints
408
- * @param {any} attrs
409
- * @param {number} [radius]
410
- *
411
- * @return {SVGElement}
412
- */
413
- function drawLine(parentGfx, waypoints, attrs, radius) {
414
- attrs = lineStyle(attrs);
415
-
416
- var line = createLine(waypoints, attrs, radius);
417
-
418
- svgAppend(parentGfx, line);
419
-
420
- return line;
421
- }
422
-
423
- /**
424
- * @param {SVGElement} parentGfx
425
- * @param {Point[]} waypoints
426
- * @param {any} attrs
427
- *
428
- * @return {SVGElement}
429
- */
430
- function drawConnectionSegments(parentGfx, waypoints, attrs) {
431
- return drawLine(parentGfx, waypoints, attrs, 5);
432
- }
433
-
434
- function drawPath(parentGfx, d, attrs) {
435
- attrs = lineStyle(attrs);
436
-
437
- var path = svgCreate('path', {
438
- ...attrs,
439
- d
440
- });
441
-
442
- svgAppend(parentGfx, path);
443
-
444
- return path;
445
- }
446
-
447
- function drawMarker(type, parentGfx, path, attrs) {
448
- return drawPath(parentGfx, path, assign({ 'data-marker': type }, attrs));
449
- }
450
-
451
- function renderer(type) {
452
- return handlers[type];
453
- }
454
-
455
- function as(type) {
456
- return function(parentGfx, element, attrs) {
457
- return renderer(type)(parentGfx, element, attrs);
458
- };
459
- }
460
-
461
- var eventIconRenderers = {
462
- 'bpmn:MessageEventDefinition': function(parentGfx, element, attrs = {}, isThrowing) {
463
- var pathData = pathMap.getScaledPath('EVENT_MESSAGE', {
464
- xScaleFactor: 0.9,
465
- yScaleFactor: 0.9,
466
- containerWidth: element.width,
467
- containerHeight: element.height,
468
- position: {
469
- mx: 0.235,
470
- my: 0.315
471
- }
472
- });
473
-
474
- var fill = isThrowing
475
- ? getStrokeColor(element, defaultStrokeColor, attrs.stroke)
476
- : getFillColor(element, defaultFillColor, attrs.fill);
477
-
478
- var stroke = isThrowing
479
- ? getFillColor(element, defaultFillColor, attrs.fill)
480
- : getStrokeColor(element, defaultStrokeColor, attrs.stroke);
481
-
482
- var messagePath = drawPath(parentGfx, pathData, {
483
- fill,
484
- stroke,
485
- strokeWidth: 1
486
- });
487
-
488
- return messagePath;
489
- },
490
- 'bpmn:TimerEventDefinition': function(parentGfx, element, attrs = {}) {
491
- var circle = drawCircle(parentGfx, element.width, element.height, 0.2 * element.height, {
492
- fill: getFillColor(element, defaultFillColor, attrs.fill),
493
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
494
- strokeWidth: 2
495
- });
496
-
497
- var pathData = pathMap.getScaledPath('EVENT_TIMER_WH', {
498
- xScaleFactor: 0.75,
499
- yScaleFactor: 0.75,
500
- containerWidth: element.width,
501
- containerHeight: element.height,
502
- position: {
503
- mx: 0.5,
504
- my: 0.5
505
- }
506
- });
507
-
508
- drawPath(parentGfx, pathData, {
509
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
510
- strokeWidth: 2
511
- });
512
-
513
- for (var i = 0; i < 12; i++) {
514
- var linePathData = pathMap.getScaledPath('EVENT_TIMER_LINE', {
515
- xScaleFactor: 0.75,
516
- yScaleFactor: 0.75,
517
- containerWidth: element.width,
518
- containerHeight: element.height,
519
- position: {
520
- mx: 0.5,
521
- my: 0.5
522
- }
523
- });
524
-
525
- var width = element.width / 2,
526
- height = element.height / 2;
527
-
528
- drawPath(parentGfx, linePathData, {
529
- strokeWidth: 1,
530
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
531
- transform: 'rotate(' + (i * 30) + ',' + height + ',' + width + ')'
532
- });
533
- }
534
-
535
- return circle;
536
- },
537
- 'bpmn:EscalationEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
538
- var pathData = pathMap.getScaledPath('EVENT_ESCALATION', {
539
- xScaleFactor: 1,
540
- yScaleFactor: 1,
541
- containerWidth: event.width,
542
- containerHeight: event.height,
543
- position: {
544
- mx: 0.5,
545
- my: 0.2
546
- }
547
- });
548
-
549
- var fill = isThrowing
550
- ? getStrokeColor(event, defaultStrokeColor, attrs.stroke)
551
- : getFillColor(event, defaultFillColor, attrs.fill);
552
-
553
- return drawPath(parentGfx, pathData, {
554
- fill,
555
- stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
556
- strokeWidth: 1
557
- });
558
- },
559
- 'bpmn:ConditionalEventDefinition': function(parentGfx, event, attrs = {}) {
560
- var pathData = pathMap.getScaledPath('EVENT_CONDITIONAL', {
561
- xScaleFactor: 1,
562
- yScaleFactor: 1,
563
- containerWidth: event.width,
564
- containerHeight: event.height,
565
- position: {
566
- mx: 0.5,
567
- my: 0.222
568
- }
569
- });
570
-
571
- return drawPath(parentGfx, pathData, {
572
- fill: getFillColor(event, defaultFillColor, attrs.fill),
573
- stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
574
- strokeWidth: 1
575
- });
576
- },
577
- 'bpmn:LinkEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
578
- var pathData = pathMap.getScaledPath('EVENT_LINK', {
579
- xScaleFactor: 1,
580
- yScaleFactor: 1,
581
- containerWidth: event.width,
582
- containerHeight: event.height,
583
- position: {
584
- mx: 0.57,
585
- my: 0.263
586
- }
587
- });
588
-
589
- var fill = isThrowing
590
- ? getStrokeColor(event, defaultStrokeColor, attrs.stroke)
591
- : getFillColor(event, defaultFillColor, attrs.fill);
592
-
593
- return drawPath(parentGfx, pathData, {
594
- fill,
595
- stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
596
- strokeWidth: 1
597
- });
598
- },
599
- 'bpmn:ErrorEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
600
- var pathData = pathMap.getScaledPath('EVENT_ERROR', {
601
- xScaleFactor: 1.1,
602
- yScaleFactor: 1.1,
603
- containerWidth: event.width,
604
- containerHeight: event.height,
605
- position: {
606
- mx: 0.2,
607
- my: 0.722
608
- }
609
- });
610
-
611
- var fill = isThrowing
612
- ? getStrokeColor(event, defaultStrokeColor, attrs.stroke)
613
- : getFillColor(event, defaultFillColor, attrs.fill);
614
-
615
- return drawPath(parentGfx, pathData, {
616
- fill,
617
- stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
618
- strokeWidth: 1
619
- });
620
- },
621
- 'bpmn:CancelEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
622
- var pathData = pathMap.getScaledPath('EVENT_CANCEL_45', {
623
- xScaleFactor: 1.0,
624
- yScaleFactor: 1.0,
625
- containerWidth: event.width,
626
- containerHeight: event.height,
627
- position: {
628
- mx: 0.638,
629
- my: -0.055
630
- }
631
- });
632
-
633
- var fill = isThrowing ? getStrokeColor(event, defaultStrokeColor, attrs.stroke) : 'none';
634
-
635
- var path = drawPath(parentGfx, pathData, {
636
- fill,
637
- stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
638
- strokeWidth: 1
639
- });
640
-
641
- rotate(path, 45);
642
-
643
- return path;
644
- },
645
- 'bpmn:CompensateEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
646
- var pathData = pathMap.getScaledPath('EVENT_COMPENSATION', {
647
- xScaleFactor: 1,
648
- yScaleFactor: 1,
649
- containerWidth: event.width,
650
- containerHeight: event.height,
651
- position: {
652
- mx: 0.22,
653
- my: 0.5
654
- }
655
- });
656
-
657
- var fill = isThrowing
658
- ? getStrokeColor(event, defaultStrokeColor, attrs.stroke)
659
- : getFillColor(event, defaultFillColor, attrs.fill);
660
-
661
- return drawPath(parentGfx, pathData, {
662
- fill,
663
- stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
664
- strokeWidth: 1
665
- });
666
- },
667
- 'bpmn:SignalEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
668
- var pathData = pathMap.getScaledPath('EVENT_SIGNAL', {
669
- xScaleFactor: 0.9,
670
- yScaleFactor: 0.9,
671
- containerWidth: event.width,
672
- containerHeight: event.height,
673
- position: {
674
- mx: 0.5,
675
- my: 0.2
676
- }
677
- });
678
-
679
- var fill = isThrowing
680
- ? getStrokeColor(event, defaultStrokeColor, attrs.stroke)
681
- : getFillColor(event, defaultFillColor, attrs.fill);
682
-
683
- return drawPath(parentGfx, pathData, {
684
- strokeWidth: 1,
685
- fill,
686
- stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke)
687
- });
688
- },
689
- 'bpmn:MultipleEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
690
- var pathData = pathMap.getScaledPath('EVENT_MULTIPLE', {
691
- xScaleFactor: 1.1,
692
- yScaleFactor: 1.1,
693
- containerWidth: event.width,
694
- containerHeight: event.height,
695
- position: {
696
- mx: 0.222,
697
- my: 0.36
698
- }
699
- });
700
-
701
- var fill = isThrowing
702
- ? getStrokeColor(event, defaultStrokeColor, attrs.stroke)
703
- : getFillColor(event, defaultFillColor, attrs.fill);
704
-
705
- return drawPath(parentGfx, pathData, {
706
- fill,
707
- strokeWidth: 1
708
- });
709
- },
710
- 'bpmn:ParallelMultipleEventDefinition': function(parentGfx, event, attrs = {}) {
711
- var pathData = pathMap.getScaledPath('EVENT_PARALLEL_MULTIPLE', {
712
- xScaleFactor: 1.2,
713
- yScaleFactor: 1.2,
714
- containerWidth: event.width,
715
- containerHeight: event.height,
716
- position: {
717
- mx: 0.458,
718
- my: 0.194
719
- }
720
- });
721
-
722
- return drawPath(parentGfx, pathData, {
723
- fill: getFillColor(event, defaultFillColor, attrs.fill),
724
- stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
725
- strokeWidth: 1
726
- });
727
- },
728
- 'bpmn:TerminateEventDefinition': function(parentGfx, element, attrs = {}) {
729
- var circle = drawCircle(parentGfx, element.width, element.height, 8, {
730
- fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
731
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
732
- strokeWidth: 4
733
- });
734
-
735
- return circle;
736
- }
737
- };
738
-
739
- function renderEventIcon(element, parentGfx, attrs = {}) {
740
- var semantic = getSemantic(element),
741
- isThrowing = isThrowEvent(semantic);
742
-
743
- if (semantic.get('eventDefinitions') && semantic.get('eventDefinitions').length > 1) {
744
- if (semantic.get('parallelMultiple')) {
745
- return eventIconRenderers[ 'bpmn:ParallelMultipleEventDefinition' ](parentGfx, element, attrs, isThrowing);
746
- }
747
- else {
748
- return eventIconRenderers[ 'bpmn:MultipleEventDefinition' ](parentGfx, element, attrs, isThrowing);
749
- }
750
- }
751
-
752
- if (isTypedEvent(semantic, 'bpmn:MessageEventDefinition')) {
753
- return eventIconRenderers[ 'bpmn:MessageEventDefinition' ](parentGfx, element, attrs, isThrowing);
754
- }
755
-
756
- if (isTypedEvent(semantic, 'bpmn:TimerEventDefinition')) {
757
- return eventIconRenderers[ 'bpmn:TimerEventDefinition' ](parentGfx, element, attrs, isThrowing);
758
- }
759
-
760
- if (isTypedEvent(semantic, 'bpmn:ConditionalEventDefinition')) {
761
- return eventIconRenderers[ 'bpmn:ConditionalEventDefinition' ](parentGfx, element, attrs, isThrowing);
762
- }
763
-
764
- if (isTypedEvent(semantic, 'bpmn:SignalEventDefinition')) {
765
- return eventIconRenderers[ 'bpmn:SignalEventDefinition' ](parentGfx, element, attrs, isThrowing);
766
- }
767
-
768
- if (isTypedEvent(semantic, 'bpmn:EscalationEventDefinition')) {
769
- return eventIconRenderers[ 'bpmn:EscalationEventDefinition' ](parentGfx, element, attrs, isThrowing);
770
- }
771
-
772
- if (isTypedEvent(semantic, 'bpmn:LinkEventDefinition')) {
773
- return eventIconRenderers[ 'bpmn:LinkEventDefinition' ](parentGfx, element, attrs, isThrowing);
774
- }
775
-
776
- if (isTypedEvent(semantic, 'bpmn:ErrorEventDefinition')) {
777
- return eventIconRenderers[ 'bpmn:ErrorEventDefinition' ](parentGfx, element, attrs, isThrowing);
778
- }
779
-
780
- if (isTypedEvent(semantic, 'bpmn:CancelEventDefinition')) {
781
- return eventIconRenderers[ 'bpmn:CancelEventDefinition' ](parentGfx, element, attrs, isThrowing);
782
- }
783
-
784
- if (isTypedEvent(semantic, 'bpmn:CompensateEventDefinition')) {
785
- return eventIconRenderers[ 'bpmn:CompensateEventDefinition' ](parentGfx, element, attrs, isThrowing);
786
- }
787
-
788
- if (isTypedEvent(semantic, 'bpmn:TerminateEventDefinition')) {
789
- return eventIconRenderers[ 'bpmn:TerminateEventDefinition' ](parentGfx, element, attrs, isThrowing);
790
- }
791
-
792
- return null;
793
- }
794
-
795
- var taskMarkerRenderers = {
796
- 'ParticipantMultiplicityMarker': function(parentGfx, element, attrs = {}) {
797
- var width = getWidth(element, attrs),
798
- height = getHeight(element, attrs);
799
-
800
- var markerPath = pathMap.getScaledPath('MARKER_PARALLEL', {
801
- xScaleFactor: 1,
802
- yScaleFactor: 1,
803
- containerWidth: width,
804
- containerHeight: height,
805
- position: {
806
- mx: ((width / 2 - 6) / width),
807
- my: (height - 15) / height
808
- }
809
- });
810
-
811
- drawMarker('participant-multiplicity', parentGfx, markerPath, {
812
- strokeWidth: 2,
813
- fill: getFillColor(element, defaultFillColor, attrs.fill),
814
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
815
- });
816
- },
817
- 'SubProcessMarker': function(parentGfx, element, attrs = {}) {
818
- var markerRect = drawRect(parentGfx, 14, 14, 0, {
819
- strokeWidth: 1,
820
- fill: getFillColor(element, defaultFillColor, attrs.fill),
821
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
822
- });
823
-
824
- translate(markerRect, element.width / 2 - 7.5, element.height - 20);
825
-
826
- var markerPath = pathMap.getScaledPath('MARKER_SUB_PROCESS', {
827
- xScaleFactor: 1.5,
828
- yScaleFactor: 1.5,
829
- containerWidth: element.width,
830
- containerHeight: element.height,
831
- position: {
832
- mx: (element.width / 2 - 7.5) / element.width,
833
- my: (element.height - 20) / element.height
834
- }
835
- });
836
-
837
- drawMarker('sub-process', parentGfx, markerPath, {
838
- fill: getFillColor(element, defaultFillColor, attrs.fill),
839
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
840
- });
841
- },
842
- 'ParallelMarker': function(parentGfx, element, attrs) {
843
- var width = getWidth(element, attrs),
844
- height = getHeight(element, attrs);
845
-
846
- var markerPath = pathMap.getScaledPath('MARKER_PARALLEL', {
847
- xScaleFactor: 1,
848
- yScaleFactor: 1,
849
- containerWidth: width,
850
- containerHeight: height,
851
- position: {
852
- mx: ((width / 2 + attrs.parallel) / width),
853
- my: (height - 20) / height
854
- }
855
- });
856
-
857
- drawMarker('parallel', parentGfx, markerPath, {
858
- fill: getFillColor(element, defaultFillColor, attrs.fill),
859
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
860
- });
861
- },
862
- 'SequentialMarker': function(parentGfx, element, attrs) {
863
- var markerPath = pathMap.getScaledPath('MARKER_SEQUENTIAL', {
864
- xScaleFactor: 1,
865
- yScaleFactor: 1,
866
- containerWidth: element.width,
867
- containerHeight: element.height,
868
- position: {
869
- mx: ((element.width / 2 + attrs.seq) / element.width),
870
- my: (element.height - 19) / element.height
871
- }
872
- });
873
-
874
- drawMarker('sequential', parentGfx, markerPath, {
875
- fill: getFillColor(element, defaultFillColor, attrs.fill),
876
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
877
- });
878
- },
879
- 'CompensationMarker': function(parentGfx, element, attrs) {
880
- var markerMath = pathMap.getScaledPath('MARKER_COMPENSATION', {
881
- xScaleFactor: 1,
882
- yScaleFactor: 1,
883
- containerWidth: element.width,
884
- containerHeight: element.height,
885
- position: {
886
- mx: ((element.width / 2 + attrs.compensation) / element.width),
887
- my: (element.height - 13) / element.height
888
- }
889
- });
890
-
891
- drawMarker('compensation', parentGfx, markerMath, {
892
- strokeWidth: 1,
893
- fill: getFillColor(element, defaultFillColor, attrs.fill),
894
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
895
- });
896
- },
897
- 'LoopMarker': function(parentGfx, element, attrs) {
898
- var width = getWidth(element, attrs),
899
- height = getHeight(element, attrs);
900
-
901
- var markerPath = pathMap.getScaledPath('MARKER_LOOP', {
902
- xScaleFactor: 1,
903
- yScaleFactor: 1,
904
- containerWidth: width,
905
- containerHeight: height,
906
- position: {
907
- mx: ((width / 2 + attrs.loop) / width),
908
- my: (height - 7) / height
909
- }
910
- });
911
-
912
- drawMarker('loop', parentGfx, markerPath, {
913
- strokeWidth: 1.5,
914
- fill: 'none',
915
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
916
- strokeMiterlimit: 0.5
917
- });
918
- },
919
- 'AdhocMarker': function(parentGfx, element, attrs) {
920
- var width = getWidth(element, attrs),
921
- height = getHeight(element, attrs);
922
-
923
- var markerPath = pathMap.getScaledPath('MARKER_ADHOC', {
924
- xScaleFactor: 1,
925
- yScaleFactor: 1,
926
- containerWidth: width,
927
- containerHeight: height,
928
- position: {
929
- mx: ((width / 2 + attrs.adhoc) / width),
930
- my: (height - 15) / height
931
- }
932
- });
933
-
934
- drawMarker('adhoc', parentGfx, markerPath, {
935
- strokeWidth: 1,
936
- fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
937
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
938
- });
939
- }
940
- };
941
-
942
- function renderTaskMarker(type, parentGfx, element, attrs) {
943
- taskMarkerRenderers[ type ](parentGfx, element, attrs);
944
- }
945
-
946
- function renderTaskMarkers(parentGfx, element, taskMarkers, attrs = {}) {
947
- attrs = {
948
- fill: attrs.fill,
949
- stroke: attrs.stroke,
950
- width: getWidth(element, attrs),
951
- height: getHeight(element, attrs)
952
- };
953
-
954
- var semantic = getSemantic(element);
955
-
956
- var subprocess = taskMarkers && taskMarkers.includes('SubProcessMarker');
957
-
958
- if (subprocess) {
959
- attrs = {
960
- ...attrs,
961
- seq: -21,
962
- parallel: -22,
963
- compensation: -42,
964
- loop: -18,
965
- adhoc: 10
966
- };
967
- } else {
968
- attrs = {
969
- ...attrs,
970
- seq: -5,
971
- parallel: -6,
972
- compensation: -27,
973
- loop: 0,
974
- adhoc: 10
975
- };
976
- }
977
-
978
- forEach(taskMarkers, function(marker) {
979
- renderTaskMarker(marker, parentGfx, element, attrs);
980
- });
981
-
982
- if (semantic.get('isForCompensation')) {
983
- renderTaskMarker('CompensationMarker', parentGfx, element, attrs);
984
- }
985
-
986
- if (is(semantic, 'bpmn:AdHocSubProcess')) {
987
- renderTaskMarker('AdhocMarker', parentGfx, element, attrs);
988
- }
989
-
990
- var loopCharacteristics = semantic.get('loopCharacteristics'),
991
- isSequential = loopCharacteristics && loopCharacteristics.get('isSequential');
992
-
993
- if (loopCharacteristics) {
994
-
995
- if (isSequential === undefined) {
996
- renderTaskMarker('LoopMarker', parentGfx, element, attrs);
997
- }
998
-
999
- if (isSequential === false) {
1000
- renderTaskMarker('ParallelMarker', parentGfx, element, attrs);
1001
- }
1002
-
1003
- if (isSequential === true) {
1004
- renderTaskMarker('SequentialMarker', parentGfx, element, attrs);
1005
- }
1006
- }
1007
- }
1008
-
1009
- function renderLabel(parentGfx, label, attrs = {}) {
1010
- attrs = assign({
1011
- size: {
1012
- width: 100
1013
- }
1014
- }, attrs);
1015
-
1016
- var text = textRenderer.createText(label || '', attrs);
1017
-
1018
- svgClasses(text).add('djs-label');
1019
-
1020
- svgAppend(parentGfx, text);
1021
-
1022
- return text;
1023
- }
1024
-
1025
- function renderEmbeddedLabel(parentGfx, element, align, attrs = {}) {
1026
- var semantic = getSemantic(element);
1027
-
1028
- var box = getBounds({
1029
- x: element.x,
1030
- y: element.y,
1031
- width: element.width,
1032
- height: element.height
1033
- }, attrs);
1034
-
1035
- return renderLabel(parentGfx, semantic.name, {
1036
- align,
1037
- box,
1038
- padding: 7,
1039
- style: {
1040
- fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)
1041
- }
1042
- });
1043
- }
1044
-
1045
- function renderExternalLabel(parentGfx, element, attrs = {}) {
1046
- var box = {
1047
- width: 90,
1048
- height: 30,
1049
- x: element.width / 2 + element.x,
1050
- y: element.height / 2 + element.y
1051
- };
1052
-
1053
- return renderLabel(parentGfx, getLabel(element), {
1054
- box: box,
1055
- fitBox: true,
1056
- style: assign(
1057
- {},
1058
- textRenderer.getExternalStyle(),
1059
- {
1060
- fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)
1061
- }
1062
- )
1063
- });
1064
- }
1065
-
1066
- function renderLaneLabel(parentGfx, text, element, attrs = {}) {
1067
- var isHorizontalLane = isHorizontal(element);
1068
-
1069
- var textBox = renderLabel(parentGfx, text, {
1070
- box: {
1071
- height: 30,
1072
- width: isHorizontalLane ? getHeight(element, attrs) : getWidth(element, attrs),
1073
- },
1074
- align: 'center-middle',
1075
- style: {
1076
- fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)
1077
- }
1078
- });
1079
-
1080
- if (isHorizontalLane) {
1081
- var top = -1 * getHeight(element, attrs);
1082
- transform(textBox, 0, -top, 270);
1083
- }
1084
- }
1085
-
1086
- function renderActivity(parentGfx, element, attrs = {}) {
1087
- var {
1088
- width,
1089
- height
1090
- } = getBounds(element, attrs);
1091
-
1092
- return drawRect(parentGfx, width, height, TASK_BORDER_RADIUS, {
1093
- ...attrs,
1094
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1095
- fillOpacity: DEFAULT_OPACITY,
1096
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
1097
- });
1098
- }
1099
-
1100
- function renderAssociation(parentGfx, element, attrs = {}) {
1101
- var semantic = getSemantic(element);
1102
-
1103
- var fill = getFillColor(element, defaultFillColor, attrs.fill),
1104
- stroke = getStrokeColor(element, defaultStrokeColor, attrs.stroke);
1105
-
1106
- if (semantic.get('associationDirection') === 'One' ||
1107
- semantic.get('associationDirection') === 'Both') {
1108
- attrs.markerEnd = marker('association-end', fill, stroke);
1109
- }
1110
-
1111
- if (semantic.get('associationDirection') === 'Both') {
1112
- attrs.markerStart = marker('association-start', fill, stroke);
1113
- }
1114
-
1115
- attrs = pickAttrs(attrs, [
1116
- 'markerStart',
1117
- 'markerEnd'
1118
- ]);
1119
-
1120
- return drawConnectionSegments(parentGfx, element.waypoints, {
1121
- ...attrs,
1122
- stroke,
1123
- strokeDasharray: '0, 5'
1124
- });
1125
- }
1126
-
1127
- function renderDataObject(parentGfx, element, attrs = {}) {
1128
- var fill = getFillColor(element, defaultFillColor, attrs.fill),
1129
- stroke = getStrokeColor(element, defaultStrokeColor, attrs.stroke);
1130
-
1131
- var pathData = pathMap.getScaledPath('DATA_OBJECT_PATH', {
1132
- xScaleFactor: 1,
1133
- yScaleFactor: 1,
1134
- containerWidth: element.width,
1135
- containerHeight: element.height,
1136
- position: {
1137
- mx: 0.474,
1138
- my: 0.296
1139
- }
1140
- });
1141
-
1142
- var dataObject = drawPath(parentGfx, pathData, {
1143
- fill,
1144
- fillOpacity: DEFAULT_OPACITY,
1145
- stroke
1146
- });
1147
-
1148
- var semantic = getSemantic(element);
1149
-
1150
- if (isCollection(semantic)) {
1151
- var collectionPathData = pathMap.getScaledPath('DATA_OBJECT_COLLECTION_PATH', {
1152
- xScaleFactor: 1,
1153
- yScaleFactor: 1,
1154
- containerWidth: element.width,
1155
- containerHeight: element.height,
1156
- position: {
1157
- mx: 0.33,
1158
- my: (element.height - 18) / element.height
1159
- }
1160
- });
1161
-
1162
- drawPath(parentGfx, collectionPathData, {
1163
- strokeWidth: 2,
1164
- fill,
1165
- stroke
1166
- });
1167
- }
1168
-
1169
- return dataObject;
1170
- }
1171
-
1172
- function renderEvent(parentGfx, element, attrs = {}) {
1173
- return drawCircle(parentGfx, element.width, element.height, {
1174
- fillOpacity: DEFAULT_OPACITY,
1175
- ...attrs,
1176
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1177
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
1178
- });
1179
- }
1180
-
1181
- function renderGateway(parentGfx, element, attrs = {}) {
1182
- return drawDiamond(parentGfx, element.width, element.height, {
1183
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1184
- fillOpacity: DEFAULT_OPACITY,
1185
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
1186
- });
1187
- }
1188
-
1189
- function renderLane(parentGfx, element, attrs = {}) {
1190
- var lane = drawRect(parentGfx, getWidth(element, attrs), getHeight(element, attrs), 0, {
1191
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1192
- fillOpacity: attrs.fillOpacity || DEFAULT_OPACITY,
1193
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1194
- strokeWidth: 1.5
1195
- });
1196
-
1197
- var semantic = getSemantic(element);
1198
-
1199
- if (is(semantic, 'bpmn:Lane')) {
1200
- var text = semantic.get('name');
1201
-
1202
- renderLaneLabel(parentGfx, text, element, attrs);
1203
- }
1204
-
1205
- return lane;
1206
- }
1207
-
1208
- function renderSubProcess(parentGfx, element, attrs = {}) {
1209
- var activity = renderActivity(parentGfx, element, attrs);
1210
-
1211
- if (isEventSubProcess(element)) {
1212
- svgAttr(activity, {
1213
- strokeDasharray: '0, 5.5',
1214
- strokeWidth: 2.5
1215
- });
1216
- }
1217
-
1218
- var expanded = isExpanded(element);
1219
-
1220
- renderEmbeddedLabel(parentGfx, element, expanded ? 'center-top' : 'center-middle', attrs);
1221
-
1222
- if (expanded) {
1223
- renderTaskMarkers(parentGfx, element, undefined, attrs);
1224
- } else {
1225
- renderTaskMarkers(parentGfx, element, [ 'SubProcessMarker' ], attrs);
1226
- }
1227
-
1228
- return activity;
1229
- }
1230
-
1231
- function renderTask(parentGfx, element, attrs = {}) {
1232
- var activity = renderActivity(parentGfx, element, attrs);
1233
-
1234
- renderEmbeddedLabel(parentGfx, element, 'center-middle', attrs);
1235
-
1236
- renderTaskMarkers(parentGfx, element, undefined, attrs);
1237
-
1238
- return activity;
1239
- }
1240
-
1241
- var handlers = this.handlers = {
1242
- 'bpmn:AdHocSubProcess': function(parentGfx, element, attrs = {}) {
1243
- if (isExpanded(element)) {
1244
- attrs = pickAttrs(attrs, [
1245
- 'fill',
1246
- 'stroke',
1247
- 'width',
1248
- 'height'
1249
- ]);
1250
- } else {
1251
- attrs = pickAttrs(attrs, [
1252
- 'fill',
1253
- 'stroke'
1254
- ]);
1255
- }
1256
-
1257
- return renderSubProcess(parentGfx, element, attrs);
1258
- },
1259
- 'bpmn:Association': function(parentGfx, element, attrs = {}) {
1260
- attrs = pickAttrs(attrs, [
1261
- 'fill',
1262
- 'stroke'
1263
- ]);
1264
-
1265
- return renderAssociation(parentGfx, element, attrs);
1266
- },
1267
- 'bpmn:BoundaryEvent': function(parentGfx, element, attrs = {}) {
1268
- var { renderIcon = true } = attrs;
1269
-
1270
- attrs = pickAttrs(attrs, [
1271
- 'fill',
1272
- 'stroke'
1273
- ]);
1274
-
1275
- var semantic = getSemantic(element),
1276
- cancelActivity = semantic.get('cancelActivity');
1277
-
1278
- attrs = {
1279
- strokeWidth: 1.5,
1280
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1281
- fillOpacity: FULL_OPACITY,
1282
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
1283
- };
1284
-
1285
- if (!cancelActivity) {
1286
- attrs.strokeDasharray = '6';
1287
- }
1288
-
1289
- var event = renderEvent(parentGfx, element, attrs);
1290
-
1291
- drawCircle(parentGfx, element.width, element.height, INNER_OUTER_DIST, {
1292
- ...attrs,
1293
- fill: 'none'
1294
- });
1295
-
1296
- if (renderIcon) {
1297
- renderEventIcon(element, parentGfx, attrs);
1298
- }
1299
-
1300
- return event;
1301
- },
1302
- 'bpmn:BusinessRuleTask': function(parentGfx, element, attrs = {}) {
1303
- attrs = pickAttrs(attrs, [
1304
- 'fill',
1305
- 'stroke'
1306
- ]);
1307
-
1308
- var task = renderTask(parentGfx, element, attrs);
1309
-
1310
- var headerData = pathMap.getScaledPath('TASK_TYPE_BUSINESS_RULE_MAIN', {
1311
- abspos: {
1312
- x: 8,
1313
- y: 8
1314
- }
1315
- });
1316
-
1317
- var businessPath = drawPath(parentGfx, headerData);
1318
-
1319
- svgAttr(businessPath, {
1320
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1321
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1322
- strokeWidth: 1
1323
- });
1324
-
1325
- var headerPathData = pathMap.getScaledPath('TASK_TYPE_BUSINESS_RULE_HEADER', {
1326
- abspos: {
1327
- x: 8,
1328
- y: 8
1329
- }
1330
- });
1331
-
1332
- var businessHeaderPath = drawPath(parentGfx, headerPathData);
1333
-
1334
- svgAttr(businessHeaderPath, {
1335
- fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1336
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1337
- strokeWidth: 1
1338
- });
1339
-
1340
- return task;
1341
- },
1342
- 'bpmn:CallActivity': function(parentGfx, element, attrs = {}) {
1343
- attrs = pickAttrs(attrs, [
1344
- 'fill',
1345
- 'stroke'
1346
- ]);
1347
-
1348
- return renderSubProcess(parentGfx, element, {
1349
- strokeWidth: 5,
1350
- ...attrs
1351
- });
1352
- },
1353
- 'bpmn:ComplexGateway': function(parentGfx, element, attrs = {}) {
1354
- attrs = pickAttrs(attrs, [
1355
- 'fill',
1356
- 'stroke'
1357
- ]);
1358
-
1359
- var gateway = renderGateway(parentGfx, element, attrs);
1360
-
1361
- var pathData = pathMap.getScaledPath('GATEWAY_COMPLEX', {
1362
- xScaleFactor: 0.5,
1363
- yScaleFactor:0.5,
1364
- containerWidth: element.width,
1365
- containerHeight: element.height,
1366
- position: {
1367
- mx: 0.46,
1368
- my: 0.26
1369
- }
1370
- });
1371
-
1372
- drawPath(parentGfx, pathData, {
1373
- fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1374
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1375
- strokeWidth: 1
1376
- });
1377
-
1378
- return gateway;
1379
- },
1380
- 'bpmn:DataInput': function(parentGfx, element, attrs = {}) {
1381
- attrs = pickAttrs(attrs, [
1382
- 'fill',
1383
- 'stroke'
1384
- ]);
1385
-
1386
- var arrowPathData = pathMap.getRawPath('DATA_ARROW');
1387
-
1388
- var dataObject = renderDataObject(parentGfx, element, attrs);
1389
-
1390
- drawPath(parentGfx, arrowPathData, {
1391
- fill: 'none',
1392
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1393
- strokeWidth: 1
1394
- });
1395
-
1396
- return dataObject;
1397
- },
1398
- 'bpmn:DataInputAssociation': function(parentGfx, element, attrs = {}) {
1399
- attrs = pickAttrs(attrs, [
1400
- 'fill',
1401
- 'stroke'
1402
- ]);
1403
-
1404
- return renderAssociation(parentGfx, element, {
1405
- ...attrs,
1406
- markerEnd: marker('association-end', getFillColor(element, defaultFillColor, attrs.fill), getStrokeColor(element, defaultStrokeColor, attrs.stroke))
1407
- });
1408
- },
1409
- 'bpmn:DataObject': function(parentGfx, element, attrs = {}) {
1410
- attrs = pickAttrs(attrs, [
1411
- 'fill',
1412
- 'stroke'
1413
- ]);
1414
-
1415
- return renderDataObject(parentGfx, element, attrs);
1416
- },
1417
- 'bpmn:DataObjectReference': as('bpmn:DataObject'),
1418
- 'bpmn:DataOutput': function(parentGfx, element, attrs = {}) {
1419
- attrs = pickAttrs(attrs, [
1420
- 'fill',
1421
- 'stroke'
1422
- ]);
1423
-
1424
- var arrowPathData = pathMap.getRawPath('DATA_ARROW');
1425
-
1426
- var dataObject = renderDataObject(parentGfx, element, attrs);
1427
-
1428
- drawPath(parentGfx, arrowPathData, {
1429
- strokeWidth: 1,
1430
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1431
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
1432
- });
1433
-
1434
- return dataObject;
1435
- },
1436
- 'bpmn:DataOutputAssociation': function(parentGfx, element, attrs = {}) {
1437
- attrs = pickAttrs(attrs, [
1438
- 'fill',
1439
- 'stroke'
1440
- ]);
1441
-
1442
- return renderAssociation(parentGfx, element, {
1443
- ...attrs,
1444
- markerEnd: marker('association-end', getFillColor(element, defaultFillColor, attrs.fill), getStrokeColor(element, defaultStrokeColor, attrs.stroke))
1445
- });
1446
- },
1447
- 'bpmn:DataStoreReference': function(parentGfx, element, attrs = {}) {
1448
- attrs = pickAttrs(attrs, [
1449
- 'fill',
1450
- 'stroke'
1451
- ]);
1452
-
1453
- var dataStorePath = pathMap.getScaledPath('DATA_STORE', {
1454
- xScaleFactor: 1,
1455
- yScaleFactor: 1,
1456
- containerWidth: element.width,
1457
- containerHeight: element.height,
1458
- position: {
1459
- mx: 0,
1460
- my: 0.133
1461
- }
1462
- });
1463
-
1464
- return drawPath(parentGfx, dataStorePath, {
1465
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1466
- fillOpacity: DEFAULT_OPACITY,
1467
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1468
- strokeWidth: 2
1469
- });
1470
- },
1471
- 'bpmn:EndEvent': function(parentGfx, element, attrs = {}) {
1472
- var { renderIcon = true } = attrs;
1473
-
1474
- attrs = pickAttrs(attrs, [
1475
- 'fill',
1476
- 'stroke'
1477
- ]);
1478
-
1479
- var event = renderEvent(parentGfx, element, {
1480
- ...attrs,
1481
- strokeWidth: 4
1482
- });
1483
-
1484
- if (renderIcon) {
1485
- renderEventIcon(element, parentGfx, attrs);
1486
- }
1487
-
1488
- return event;
1489
- },
1490
- 'bpmn:EventBasedGateway': function(parentGfx, element, attrs = {}) {
1491
- attrs = pickAttrs(attrs, [
1492
- 'fill',
1493
- 'stroke'
1494
- ]);
1495
-
1496
- var semantic = getSemantic(element);
1497
-
1498
- var diamond = renderGateway(parentGfx, element, attrs);
1499
-
1500
- drawCircle(parentGfx, element.width, element.height, element.height * 0.20, {
1501
- fill: getFillColor(element, 'none', attrs.fill),
1502
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1503
- strokeWidth: 1
1504
- });
1505
-
1506
- var type = semantic.get('eventGatewayType'),
1507
- instantiate = !!semantic.get('instantiate');
1508
-
1509
- function drawEvent() {
1510
-
1511
- var pathData = pathMap.getScaledPath('GATEWAY_EVENT_BASED', {
1512
- xScaleFactor: 0.18,
1513
- yScaleFactor: 0.18,
1514
- containerWidth: element.width,
1515
- containerHeight: element.height,
1516
- position: {
1517
- mx: 0.36,
1518
- my: 0.44
1519
- }
1520
- });
1521
-
1522
- drawPath(parentGfx, pathData, {
1523
- fill: 'none',
1524
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1525
- strokeWidth: 2
1526
- });
1527
- }
1528
-
1529
- if (type === 'Parallel') {
1530
- var pathData = pathMap.getScaledPath('GATEWAY_PARALLEL', {
1531
- xScaleFactor: 0.4,
1532
- yScaleFactor: 0.4,
1533
- containerWidth: element.width,
1534
- containerHeight: element.height,
1535
- position: {
1536
- mx: 0.474,
1537
- my: 0.296
1538
- }
1539
- });
1540
-
1541
- drawPath(parentGfx, pathData, {
1542
- fill: 'none',
1543
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1544
- strokeWidth: 1
1545
- });
1546
- } else if (type === 'Exclusive') {
1547
- if (!instantiate) {
1548
- drawCircle(parentGfx, element.width, element.height, element.height * 0.26, {
1549
- fill: 'none',
1550
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1551
- strokeWidth: 1
1552
- });
1553
- }
1554
-
1555
- drawEvent();
1556
- }
1557
-
1558
-
1559
- return diamond;
1560
- },
1561
- 'bpmn:ExclusiveGateway': function(parentGfx, element, attrs = {}) {
1562
- attrs = pickAttrs(attrs, [
1563
- 'fill',
1564
- 'stroke'
1565
- ]);
1566
-
1567
- var gateway = renderGateway(parentGfx, element, attrs);
1568
-
1569
- var pathData = pathMap.getScaledPath('GATEWAY_EXCLUSIVE', {
1570
- xScaleFactor: 0.4,
1571
- yScaleFactor: 0.4,
1572
- containerWidth: element.width,
1573
- containerHeight: element.height,
1574
- position: {
1575
- mx: 0.32,
1576
- my: 0.3
1577
- }
1578
- });
1579
-
1580
- var di = getDi(element);
1581
-
1582
- if (di.get('isMarkerVisible')) {
1583
- drawPath(parentGfx, pathData, {
1584
- fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1585
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1586
- strokeWidth: 1
1587
- });
1588
- }
1589
-
1590
- return gateway;
1591
- },
1592
- 'bpmn:Gateway': function(parentGfx, element, attrs = {}) {
1593
- attrs = pickAttrs(attrs, [
1594
- 'fill',
1595
- 'stroke'
1596
- ]);
1597
-
1598
- return renderGateway(parentGfx, element, attrs);
1599
- },
1600
- 'bpmn:Group': function(parentGfx, element, attrs = {}) {
1601
- attrs = pickAttrs(attrs, [
1602
- 'fill',
1603
- 'stroke',
1604
- 'width',
1605
- 'height'
1606
- ]);
1607
-
1608
- return drawRect(parentGfx, element.width, element.height, TASK_BORDER_RADIUS, {
1609
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1610
- strokeWidth: 1.5,
1611
- strokeDasharray: '10, 6, 0, 6',
1612
- fill: 'none',
1613
- pointerEvents: 'none',
1614
- width: getWidth(element, attrs),
1615
- height: getHeight(element, attrs)
1616
- });
1617
- },
1618
- 'bpmn:InclusiveGateway': function(parentGfx, element, attrs = {}) {
1619
- attrs = pickAttrs(attrs, [
1620
- 'fill',
1621
- 'stroke'
1622
- ]);
1623
-
1624
- var gateway = renderGateway(parentGfx, element, attrs);
1625
-
1626
- drawCircle(parentGfx, element.width, element.height, element.height * 0.24, {
1627
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1628
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1629
- strokeWidth: 2.5
1630
- });
1631
-
1632
- return gateway;
1633
- },
1634
- 'bpmn:IntermediateEvent': function(parentGfx, element, attrs = {}) {
1635
- var { renderIcon = true } = attrs;
1636
-
1637
- attrs = pickAttrs(attrs, [
1638
- 'fill',
1639
- 'stroke'
1640
- ]);
1641
-
1642
- var outer = renderEvent(parentGfx, element, {
1643
- ...attrs,
1644
- strokeWidth: 1.5
1645
- });
1646
-
1647
- drawCircle(parentGfx, element.width, element.height, INNER_OUTER_DIST, {
1648
- fill: 'none',
1649
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1650
- strokeWidth: 1.5
1651
- });
1652
-
1653
- if (renderIcon) {
1654
- renderEventIcon(element, parentGfx, attrs);
1655
- }
1656
-
1657
- return outer;
1658
- },
1659
- 'bpmn:IntermediateCatchEvent': as('bpmn:IntermediateEvent'),
1660
- 'bpmn:IntermediateThrowEvent': as('bpmn:IntermediateEvent'),
1661
- 'bpmn:Lane': function(parentGfx, element, attrs = {}) {
1662
- attrs = pickAttrs(attrs, [
1663
- 'fill',
1664
- 'stroke',
1665
- 'width',
1666
- 'height'
1667
- ]);
1668
-
1669
- return renderLane(parentGfx, element, {
1670
- ...attrs,
1671
- fillOpacity: LOW_OPACITY
1672
- });
1673
- },
1674
- 'bpmn:ManualTask': function(parentGfx, element, attrs = {}) {
1675
- attrs = pickAttrs(attrs, [
1676
- 'fill',
1677
- 'stroke'
1678
- ]);
1679
-
1680
- var task = renderTask(parentGfx, element, attrs);
1681
-
1682
- var pathData = pathMap.getScaledPath('TASK_TYPE_MANUAL', {
1683
- abspos: {
1684
- x: 17,
1685
- y: 15
1686
- }
1687
- });
1688
-
1689
- drawPath(parentGfx, pathData, {
1690
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1691
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1692
- strokeWidth: 0.5
1693
- });
1694
-
1695
- return task;
1696
- },
1697
- 'bpmn:MessageFlow': function(parentGfx, element, attrs = {}) {
1698
- attrs = pickAttrs(attrs, [
1699
- 'fill',
1700
- 'stroke'
1701
- ]);
1702
-
1703
- var semantic = getSemantic(element),
1704
- di = getDi(element);
1705
-
1706
- var fill = getFillColor(element, defaultFillColor, attrs.fill),
1707
- stroke = getStrokeColor(element, defaultStrokeColor, attrs.stroke);
1708
-
1709
- var path = drawConnectionSegments(parentGfx, element.waypoints, {
1710
- markerEnd: marker('messageflow-end', fill, stroke),
1711
- markerStart: marker('messageflow-start', fill, stroke),
1712
- stroke,
1713
- strokeDasharray: '10, 11',
1714
- strokeWidth: 1.5
1715
- });
1716
-
1717
- if (semantic.get('messageRef')) {
1718
- var midPoint = path.getPointAtLength(path.getTotalLength() / 2);
1719
-
1720
- var markerPathData = pathMap.getScaledPath('MESSAGE_FLOW_MARKER', {
1721
- abspos: {
1722
- x: midPoint.x,
1723
- y: midPoint.y
1724
- }
1725
- });
1726
-
1727
- var messageAttrs = {
1728
- strokeWidth: 1
1729
- };
1730
-
1731
- if (di.get('messageVisibleKind') === 'initiating') {
1732
- messageAttrs.fill = fill;
1733
- messageAttrs.stroke = stroke;
1734
- } else {
1735
- messageAttrs.fill = stroke;
1736
- messageAttrs.stroke = fill;
1737
- }
1738
-
1739
- var message = drawPath(parentGfx, markerPathData, messageAttrs);
1740
-
1741
- var messageRef = semantic.get('messageRef'),
1742
- name = messageRef.get('name');
1743
-
1744
- var label = renderLabel(parentGfx, name, {
1745
- align: 'center-top',
1746
- fitBox: true,
1747
- style: {
1748
- fill: stroke
1749
- }
1750
- });
1751
-
1752
- var messageBounds = message.getBBox(),
1753
- labelBounds = label.getBBox();
1754
-
1755
- var translateX = midPoint.x - labelBounds.width / 2,
1756
- translateY = midPoint.y + messageBounds.height / 2 + ELEMENT_LABEL_DISTANCE;
1757
-
1758
- transform(label, translateX, translateY, 0);
1759
- }
1760
-
1761
- return path;
1762
- },
1763
- 'bpmn:ParallelGateway': function(parentGfx, element, attrs = {}) {
1764
- attrs = pickAttrs(attrs, [
1765
- 'fill',
1766
- 'stroke'
1767
- ]);
1768
-
1769
- var diamond = renderGateway(parentGfx, element, attrs);
1770
-
1771
- var pathData = pathMap.getScaledPath('GATEWAY_PARALLEL', {
1772
- xScaleFactor: 0.6,
1773
- yScaleFactor: 0.6,
1774
- containerWidth: element.width,
1775
- containerHeight: element.height,
1776
- position: {
1777
- mx: 0.46,
1778
- my: 0.2
1779
- }
1780
- });
1781
-
1782
- drawPath(parentGfx, pathData, {
1783
- fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1784
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1785
- strokeWidth: 1
1786
- });
1787
-
1788
- return diamond;
1789
- },
1790
- 'bpmn:Participant': function(parentGfx, element, attrs = {}) {
1791
- attrs = pickAttrs(attrs, [
1792
- 'fill',
1793
- 'stroke',
1794
- 'width',
1795
- 'height'
1796
- ]);
1797
-
1798
- var participant = renderLane(parentGfx, element, attrs);
1799
-
1800
- var expandedParticipant = isExpanded(element);
1801
- var horizontalParticipant = isHorizontal(element);
1802
-
1803
- var semantic = getSemantic(element),
1804
- name = semantic.get('name');
1805
-
1806
- if (expandedParticipant) {
1807
- var waypoints = horizontalParticipant ? [
1808
- {
1809
- x: 30,
1810
- y: 0
1811
- },
1812
- {
1813
- x: 30,
1814
- y: getHeight(element, attrs)
1815
- }
1816
- ] : [
1817
- {
1818
- x: 0,
1819
- y: 30
1820
- },
1821
- {
1822
- x: getWidth(element, attrs),
1823
- y: 30
1824
- }
1825
- ];
1826
-
1827
- drawLine(parentGfx, waypoints, {
1828
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1829
- strokeWidth: PARTICIPANT_STROKE_WIDTH
1830
- });
1831
-
1832
- renderLaneLabel(parentGfx, name, element, attrs);
1833
- } else {
1834
- var bounds = getBounds(element, attrs);
1835
-
1836
- if (!horizontalParticipant) {
1837
- bounds.height = getWidth(element, attrs);
1838
- bounds.width = getHeight(element, attrs);
1839
- }
1840
-
1841
- var textBox = renderLabel(parentGfx, name, {
1842
- box: bounds,
1843
- align: 'center-middle',
1844
- style: {
1845
- fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)
1846
- }
1847
- });
1848
-
1849
- if (!horizontalParticipant) {
1850
- var top = -1 * getHeight(element, attrs);
1851
- transform(textBox, 0, -top, 270);
1852
- }
1853
- }
1854
-
1855
- if (semantic.get('participantMultiplicity')) {
1856
- renderTaskMarker('ParticipantMultiplicityMarker', parentGfx, element, attrs);
1857
- }
1858
-
1859
- return participant;
1860
- },
1861
- 'bpmn:ReceiveTask' : function(parentGfx, element, attrs = {}) {
1862
- attrs = pickAttrs(attrs, [
1863
- 'fill',
1864
- 'stroke'
1865
- ]);
1866
-
1867
- var semantic = getSemantic(element);
1868
-
1869
- var task = renderTask(parentGfx, element, attrs);
1870
-
1871
- var pathData;
1872
-
1873
- if (semantic.get('instantiate')) {
1874
- drawCircle(parentGfx, 28, 28, 20 * 0.22, {
1875
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1876
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1877
- strokeWidth: 1
1878
- });
1879
-
1880
- pathData = pathMap.getScaledPath('TASK_TYPE_INSTANTIATING_SEND', {
1881
- abspos: {
1882
- x: 7.77,
1883
- y: 9.52
1884
- }
1885
- });
1886
- } else {
1887
- pathData = pathMap.getScaledPath('TASK_TYPE_SEND', {
1888
- xScaleFactor: 0.9,
1889
- yScaleFactor: 0.9,
1890
- containerWidth: 21,
1891
- containerHeight: 14,
1892
- position: {
1893
- mx: 0.3,
1894
- my: 0.4
1895
- }
1896
- });
1897
- }
1898
-
1899
- drawPath(parentGfx, pathData, {
1900
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1901
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1902
- strokeWidth: 1
1903
- });
1904
-
1905
- return task;
1906
- },
1907
- 'bpmn:ScriptTask': function(parentGfx, element, attrs = {}) {
1908
- attrs = pickAttrs(attrs, [
1909
- 'fill',
1910
- 'stroke'
1911
- ]);
1912
-
1913
- var task = renderTask(parentGfx, element, attrs);
1914
-
1915
- var pathData = pathMap.getScaledPath('TASK_TYPE_SCRIPT', {
1916
- abspos: {
1917
- x: 15,
1918
- y: 20
1919
- }
1920
- });
1921
-
1922
- drawPath(parentGfx, pathData, {
1923
- fill: getFillColor(element, defaultFillColor, attrs.fill),
1924
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1925
- strokeWidth: 1
1926
- });
1927
-
1928
- return task;
1929
- },
1930
- 'bpmn:SendTask': function(parentGfx, element, attrs = {}) {
1931
- attrs = pickAttrs(attrs, [
1932
- 'fill',
1933
- 'stroke'
1934
- ]);
1935
-
1936
- var task = renderTask(parentGfx, element, attrs);
1937
-
1938
- var pathData = pathMap.getScaledPath('TASK_TYPE_SEND', {
1939
- xScaleFactor: 1,
1940
- yScaleFactor: 1,
1941
- containerWidth: 21,
1942
- containerHeight: 14,
1943
- position: {
1944
- mx: 0.285,
1945
- my: 0.357
1946
- }
1947
- });
1948
-
1949
- drawPath(parentGfx, pathData, {
1950
- fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1951
- stroke: getFillColor(element, defaultFillColor, attrs.fill),
1952
- strokeWidth: 1
1953
- });
1954
-
1955
- return task;
1956
- },
1957
- 'bpmn:SequenceFlow': function(parentGfx, element, attrs = {}) {
1958
- attrs = pickAttrs(attrs, [
1959
- 'fill',
1960
- 'stroke'
1961
- ]);
1962
-
1963
- var fill = getFillColor(element, defaultFillColor, attrs.fill),
1964
- stroke = getStrokeColor(element, defaultStrokeColor, attrs.stroke);
1965
-
1966
- var connection = drawConnectionSegments(parentGfx, element.waypoints, {
1967
- markerEnd: marker('sequenceflow-end', fill, stroke),
1968
- stroke
1969
- });
1970
-
1971
- var semantic = getSemantic(element);
1972
-
1973
- var { source } = element;
1974
-
1975
- if (source) {
1976
- var sourceSemantic = getSemantic(source);
1977
-
1978
- // conditional flow marker
1979
- if (semantic.get('conditionExpression') && is(sourceSemantic, 'bpmn:Activity')) {
1980
- svgAttr(connection, {
1981
- markerStart: marker('conditional-flow-marker', fill, stroke)
1982
- });
1983
- }
1984
-
1985
- // default marker
1986
- if (sourceSemantic.get('default') && (is(sourceSemantic, 'bpmn:Gateway') || is(sourceSemantic, 'bpmn:Activity')) &&
1987
- sourceSemantic.get('default') === semantic) {
1988
- svgAttr(connection, {
1989
- markerStart: marker('conditional-default-flow-marker', fill, stroke)
1990
- });
1991
- }
1992
- }
1993
-
1994
- return connection;
1995
- },
1996
- 'bpmn:ServiceTask': function(parentGfx, element, attrs = {}) {
1997
- attrs = pickAttrs(attrs, [
1998
- 'fill',
1999
- 'stroke'
2000
- ]);
2001
-
2002
- var task = renderTask(parentGfx, element, attrs);
2003
-
2004
- drawCircle(parentGfx, 10, 10, {
2005
- fill: getFillColor(element, defaultFillColor, attrs.fill),
2006
- stroke: 'none',
2007
- transform: 'translate(6, 6)'
2008
- });
2009
-
2010
- var pathDataService1 = pathMap.getScaledPath('TASK_TYPE_SERVICE', {
2011
- abspos: {
2012
- x: 12,
2013
- y: 18
2014
- }
2015
- });
2016
-
2017
- drawPath(parentGfx, pathDataService1, {
2018
- fill: getFillColor(element, defaultFillColor, attrs.fill),
2019
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2020
- strokeWidth: 1
2021
- });
2022
-
2023
- drawCircle(parentGfx, 10, 10, {
2024
- fill: getFillColor(element, defaultFillColor, attrs.fill),
2025
- stroke: 'none',
2026
- transform: 'translate(11, 10)'
2027
- });
2028
-
2029
- var pathDataService2 = pathMap.getScaledPath('TASK_TYPE_SERVICE', {
2030
- abspos: {
2031
- x: 17,
2032
- y: 22
2033
- }
2034
- });
2035
-
2036
- drawPath(parentGfx, pathDataService2, {
2037
- fill: getFillColor(element, defaultFillColor, attrs.fill),
2038
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2039
- strokeWidth: 1
2040
- });
2041
-
2042
- return task;
2043
- },
2044
- 'bpmn:StartEvent': function(parentGfx, element, attrs = {}) {
2045
- var { renderIcon = true } = attrs;
2046
-
2047
- attrs = pickAttrs(attrs, [
2048
- 'fill',
2049
- 'stroke'
2050
- ]);
2051
-
2052
- var semantic = getSemantic(element);
2053
-
2054
- if (!semantic.get('isInterrupting')) {
2055
- attrs = {
2056
- ...attrs,
2057
- strokeDasharray: '6'
2058
- };
2059
- }
2060
-
2061
- var event = renderEvent(parentGfx, element, attrs);
2062
-
2063
- if (renderIcon) {
2064
- renderEventIcon(element, parentGfx, attrs);
2065
- }
2066
-
2067
- return event;
2068
- },
2069
- 'bpmn:SubProcess': function(parentGfx, element, attrs = {}) {
2070
- if (isExpanded(element)) {
2071
- attrs = pickAttrs(attrs, [
2072
- 'fill',
2073
- 'stroke',
2074
- 'width',
2075
- 'height'
2076
- ]);
2077
- } else {
2078
- attrs = pickAttrs(attrs, [
2079
- 'fill',
2080
- 'stroke'
2081
- ]);
2082
- }
2083
-
2084
- return renderSubProcess(parentGfx, element, attrs);
2085
- },
2086
- 'bpmn:Task': function(parentGfx, element, attrs = {}) {
2087
- attrs = pickAttrs(attrs, [
2088
- 'fill',
2089
- 'stroke'
2090
- ]);
2091
-
2092
- return renderTask(parentGfx, element, attrs);
2093
- },
2094
- 'bpmn:TextAnnotation': function(parentGfx, element, attrs = {}) {
2095
- attrs = pickAttrs(attrs, [
2096
- 'fill',
2097
- 'stroke',
2098
- 'width',
2099
- 'height'
2100
- ]);
2101
-
2102
- var {
2103
- width,
2104
- height
2105
- } = getBounds(element, attrs);
2106
-
2107
- var textElement = drawRect(parentGfx, width, height, 0, 0, {
2108
- fill: 'none',
2109
- stroke: 'none'
2110
- });
2111
-
2112
- var textPathData = pathMap.getScaledPath('TEXT_ANNOTATION', {
2113
- xScaleFactor: 1,
2114
- yScaleFactor: 1,
2115
- containerWidth: width,
2116
- containerHeight: height,
2117
- position: {
2118
- mx: 0.0,
2119
- my: 0.0
2120
- }
2121
- });
2122
-
2123
- drawPath(parentGfx, textPathData, {
2124
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
2125
- });
2126
-
2127
- var semantic = getSemantic(element),
2128
- text = semantic.get('text') || '';
2129
-
2130
- renderLabel(parentGfx, text, {
2131
- align: 'left-top',
2132
- box: getBounds(element, attrs),
2133
- padding: 7,
2134
- style: {
2135
- fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)
2136
- }
2137
- });
2138
-
2139
- return textElement;
2140
- },
2141
- 'bpmn:Transaction': function(parentGfx, element, attrs = {}) {
2142
- if (isExpanded(element)) {
2143
- attrs = pickAttrs(attrs, [
2144
- 'fill',
2145
- 'stroke',
2146
- 'width',
2147
- 'height'
2148
- ]);
2149
- } else {
2150
- attrs = pickAttrs(attrs, [
2151
- 'fill',
2152
- 'stroke'
2153
- ]);
2154
- }
2155
-
2156
- var outer = renderSubProcess(parentGfx, element, {
2157
- strokeWidth: 1.5,
2158
- ...attrs
2159
- });
2160
-
2161
- var innerAttrs = styles.style([ 'no-fill', 'no-events' ], {
2162
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2163
- strokeWidth: 1.5
2164
- });
2165
-
2166
- var expanded = isExpanded(element);
2167
-
2168
- if (!expanded) {
2169
- attrs = {};
2170
- }
2171
-
2172
- drawRect(
2173
- parentGfx,
2174
- getWidth(element, attrs),
2175
- getHeight(element, attrs),
2176
- TASK_BORDER_RADIUS - INNER_OUTER_DIST,
2177
- INNER_OUTER_DIST,
2178
- innerAttrs
2179
- );
2180
-
2181
- return outer;
2182
- },
2183
- 'bpmn:UserTask': function(parentGfx, element, attrs = {}) {
2184
- attrs = pickAttrs(attrs, [
2185
- 'fill',
2186
- 'stroke'
2187
- ]);
2188
-
2189
- var task = renderTask(parentGfx, element, attrs);
2190
-
2191
- var x = 15;
2192
- var y = 12;
2193
-
2194
- var pathDataUser1 = pathMap.getScaledPath('TASK_TYPE_USER_1', {
2195
- abspos: {
2196
- x: x,
2197
- y: y
2198
- }
2199
- });
2200
-
2201
- drawPath(parentGfx, pathDataUser1, {
2202
- fill: getFillColor(element, defaultFillColor, attrs.fill),
2203
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2204
- strokeWidth: 0.5
2205
- });
2206
-
2207
- var pathDataUser2 = pathMap.getScaledPath('TASK_TYPE_USER_2', {
2208
- abspos: {
2209
- x: x,
2210
- y: y
2211
- }
2212
- });
2213
-
2214
- drawPath(parentGfx, pathDataUser2, {
2215
- fill: getFillColor(element, defaultFillColor, attrs.fill),
2216
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2217
- strokeWidth: 0.5
2218
- });
2219
-
2220
- var pathDataUser3 = pathMap.getScaledPath('TASK_TYPE_USER_3', {
2221
- abspos: {
2222
- x: x,
2223
- y: y
2224
- }
2225
- });
2226
-
2227
- drawPath(parentGfx, pathDataUser3, {
2228
- fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2229
- stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2230
- strokeWidth: 0.5
2231
- });
2232
-
2233
- return task;
2234
- },
2235
- 'label': function(parentGfx, element, attrs = {}) {
2236
- return renderExternalLabel(parentGfx, element, attrs);
2237
- }
2238
- };
2239
-
2240
- // extension API, use at your own risk
2241
- this._drawPath = drawPath;
2242
-
2243
- this._renderer = renderer;
2244
- }
2245
-
2246
-
2247
- inherits(BpmnRenderer, BaseRenderer);
2248
-
2249
- BpmnRenderer.$inject = [
2250
- 'config.bpmnRenderer',
2251
- 'eventBus',
2252
- 'styles',
2253
- 'pathMap',
2254
- 'canvas',
2255
- 'textRenderer'
2256
- ];
2257
-
2258
-
2259
- /**
2260
- * @param {Element} element
2261
- *
2262
- * @return {boolean}
2263
- */
2264
- BpmnRenderer.prototype.canRender = function(element) {
2265
- return is(element, 'bpmn:BaseElement');
2266
- };
2267
-
2268
- /**
2269
- * Draw shape into parentGfx.
2270
- *
2271
- * @param {SVGElement} parentGfx
2272
- * @param {Element} element
2273
- * @param {Attrs} [attrs]
2274
- *
2275
- * @return {SVGElement} mainGfx
2276
- */
2277
- BpmnRenderer.prototype.drawShape = function(parentGfx, element, attrs = {}) {
2278
- var { type } = element;
2279
-
2280
- var handler = this._renderer(type);
2281
-
2282
- return handler(parentGfx, element, attrs);
2283
- };
2284
-
2285
- /**
2286
- * Draw connection into parentGfx.
2287
- *
2288
- * @param {SVGElement} parentGfx
2289
- * @param {Element} element
2290
- * @param {Attrs} [attrs]
2291
- *
2292
- * @return {SVGElement} mainGfx
2293
- */
2294
- BpmnRenderer.prototype.drawConnection = function(parentGfx, element, attrs = {}) {
2295
- var { type } = element;
2296
-
2297
- var handler = this._renderer(type);
2298
-
2299
- return handler(parentGfx, element, attrs);
2300
- };
2301
-
2302
- /**
2303
- * Get shape path.
2304
- *
2305
- * @param {Element} element
2306
- *
2307
- * @return {string} path
2308
- */
2309
- BpmnRenderer.prototype.getShapePath = function(element) {
2310
- if (is(element, 'bpmn:Event')) {
2311
- return getCirclePath(element);
2312
- }
2313
-
2314
- if (is(element, 'bpmn:Activity')) {
2315
- return getRoundRectPath(element, TASK_BORDER_RADIUS);
2316
- }
2317
-
2318
- if (is(element, 'bpmn:Gateway')) {
2319
- return getDiamondPath(element);
2320
- }
2321
-
2322
- return getRectPath(element);
2323
- };
2324
-
2325
- /**
2326
- * Pick attributes if they exist.
2327
- *
2328
- * @param {Object} attrs
2329
- * @param {string[]} keys
2330
- *
2331
- * @returns {Object}
2332
- */
2333
- function pickAttrs(attrs, keys = []) {
2334
- return keys.reduce((pickedAttrs, key) => {
2335
- if (attrs[ key ]) {
2336
- pickedAttrs[ key ] = attrs[ key ];
2337
- }
2338
-
2339
- return pickedAttrs;
2340
- }, {});
1
+ import inherits from 'inherits-browser';
2
+
3
+ import {
4
+ assign,
5
+ forEach,
6
+ isObject
7
+ } from 'min-dash';
8
+
9
+ import BaseRenderer from 'diagram-js/lib/draw/BaseRenderer';
10
+
11
+ import {
12
+ isExpanded,
13
+ isHorizontal,
14
+ isEventSubProcess
15
+ } from '../util/DiUtil';
16
+
17
+ import {
18
+ getLabel
19
+ } from '../util/LabelUtil';
20
+
21
+ import {
22
+ is
23
+ } from '../util/ModelUtil';
24
+
25
+ import {
26
+ createLine
27
+ } from 'diagram-js/lib/util/RenderUtil';
28
+
29
+ import {
30
+ isTypedEvent,
31
+ isThrowEvent,
32
+ isCollection,
33
+ getBounds,
34
+ getDi,
35
+ getSemantic,
36
+ getCirclePath,
37
+ getRoundRectPath,
38
+ getDiamondPath,
39
+ getRectPath,
40
+ getFillColor,
41
+ getStrokeColor,
42
+ getLabelColor,
43
+ getHeight,
44
+ getWidth
45
+ } from './BpmnRenderUtil';
46
+
47
+ import {
48
+ query as domQuery
49
+ } from 'min-dom';
50
+
51
+ import {
52
+ append as svgAppend,
53
+ attr as svgAttr,
54
+ create as svgCreate,
55
+ classes as svgClasses
56
+ } from 'tiny-svg';
57
+
58
+ import {
59
+ rotate,
60
+ transform,
61
+ translate
62
+ } from 'diagram-js/lib/util/SvgTransformUtil';
63
+
64
+ import Ids from 'ids';
65
+
66
+ import { black } from './BpmnRenderUtil';
67
+
68
+ var markerIds = new Ids();
69
+
70
+ var ELEMENT_LABEL_DISTANCE = 10,
71
+ INNER_OUTER_DIST = 3,
72
+ PARTICIPANT_STROKE_WIDTH = 1.5,
73
+ TASK_BORDER_RADIUS = 10;
74
+
75
+ var DEFAULT_OPACITY = 0.95,
76
+ FULL_OPACITY = 1,
77
+ LOW_OPACITY = 0.25;
78
+
79
+ /**
80
+ * @typedef { Partial<{
81
+ * defaultFillColor: string,
82
+ * defaultStrokeColor: string,
83
+ * defaultLabelColor: string
84
+ * }> } BpmnRendererConfig
85
+ *
86
+ * @typedef { Partial<{
87
+ * fill: string,
88
+ * stroke: string,
89
+ * width: string,
90
+ * height: string
91
+ * }> } Attrs
92
+ */
93
+
94
+ /**
95
+ * @typedef { import('../model/Types').Element } Element
96
+ */
97
+
98
+ /**
99
+ * A renderer for BPMN elements
100
+ *
101
+ * @param {BpmnRendererConfig} config
102
+ * @param {import('diagram-js/lib/core/EventBus').default} eventBus
103
+ * @param {import('diagram-js/lib/draw/Styles').default} styles
104
+ * @param {import('./PathMap').default} pathMap
105
+ * @param {import('diagram-js/lib/core/Canvas').default} canvas
106
+ * @param {import('./TextRenderer').default} textRenderer
107
+ * @param {number} [priority]
108
+ */
109
+ export default function BpmnRenderer(
110
+ config, eventBus, styles, pathMap,
111
+ canvas, textRenderer, priority) {
112
+
113
+ BaseRenderer.call(this, eventBus, priority);
114
+
115
+ var defaultFillColor = config && config.defaultFillColor,
116
+ defaultStrokeColor = config && config.defaultStrokeColor,
117
+ defaultLabelColor = config && config.defaultLabelColor;
118
+
119
+ function shapeStyle(attrs) {
120
+ return styles.computeStyle(attrs, {
121
+ strokeLinecap: 'round',
122
+ strokeLinejoin: 'round',
123
+ stroke: black,
124
+ strokeWidth: 2,
125
+ fill: 'white'
126
+ });
127
+ }
128
+
129
+ function lineStyle(attrs) {
130
+ return styles.computeStyle(attrs, [ 'no-fill' ], {
131
+ strokeLinecap: 'round',
132
+ strokeLinejoin: 'round',
133
+ stroke: black,
134
+ strokeWidth: 2
135
+ });
136
+ }
137
+
138
+ function addMarker(id, options) {
139
+ var {
140
+ ref = { x: 0, y: 0 },
141
+ scale = 1,
142
+ element,
143
+ parentGfx = canvas._svg
144
+ } = options;
145
+
146
+ var marker = svgCreate('marker', {
147
+ id: id,
148
+ viewBox: '0 0 20 20',
149
+ refX: ref.x,
150
+ refY: ref.y,
151
+ markerWidth: 20 * scale,
152
+ markerHeight: 20 * scale,
153
+ orient: 'auto'
154
+ });
155
+
156
+ svgAppend(marker, element);
157
+
158
+ var defs = domQuery(':scope > defs', parentGfx);
159
+
160
+ if (!defs) {
161
+ defs = svgCreate('defs');
162
+
163
+ svgAppend(parentGfx, defs);
164
+ }
165
+
166
+ svgAppend(defs, marker);
167
+ }
168
+
169
+ function marker(parentGfx, type, fill, stroke) {
170
+
171
+
172
+ var id = markerIds.nextPrefixed('marker-');
173
+
174
+ createMarker(parentGfx, id, type, fill, stroke);
175
+
176
+ return 'url(#' + id + ')';
177
+ }
178
+
179
+ function createMarker(parentGfx, id, type, fill, stroke) {
180
+
181
+ if (type === 'sequenceflow-end') {
182
+ var sequenceflowEnd = svgCreate('path', {
183
+ d: 'M 1 5 L 11 10 L 1 15 Z',
184
+ ...shapeStyle({
185
+ fill: stroke,
186
+ stroke: stroke,
187
+ strokeWidth: 1
188
+ })
189
+ });
190
+
191
+ addMarker(id, {
192
+ element: sequenceflowEnd,
193
+ ref: { x: 11, y: 10 },
194
+ scale: 0.5,
195
+ parentGfx
196
+ });
197
+ }
198
+
199
+ if (type === 'messageflow-start') {
200
+ var messageflowStart = svgCreate('circle', {
201
+ cx: 6,
202
+ cy: 6,
203
+ r: 3.5,
204
+ ...shapeStyle({
205
+ fill,
206
+ stroke: stroke,
207
+ strokeWidth: 1,
208
+
209
+ // fix for safari / chrome / firefox bug not correctly
210
+ // resetting stroke dash array
211
+ strokeDasharray: [ 10000, 1 ]
212
+ })
213
+ });
214
+
215
+ addMarker(id, {
216
+ element: messageflowStart,
217
+ ref: { x: 6, y: 6 },
218
+ parentGfx
219
+ });
220
+ }
221
+
222
+ if (type === 'messageflow-end') {
223
+ var messageflowEnd = svgCreate('path', {
224
+ d: 'm 1 5 l 0 -3 l 7 3 l -7 3 z',
225
+ ...shapeStyle({
226
+ fill,
227
+ stroke: stroke,
228
+ strokeWidth: 1,
229
+
230
+ // fix for safari / chrome / firefox bug not correctly
231
+ // resetting stroke dash array
232
+ strokeDasharray: [ 10000, 1 ]
233
+ })
234
+ });
235
+
236
+ addMarker(id, {
237
+ element: messageflowEnd,
238
+ ref: { x: 8.5, y: 5 },
239
+ parentGfx
240
+ });
241
+ }
242
+
243
+ if (type === 'association-start') {
244
+ var associationStart = svgCreate('path', {
245
+ d: 'M 11 5 L 1 10 L 11 15',
246
+ ...lineStyle({
247
+ fill: 'none',
248
+ stroke,
249
+ strokeWidth: 1.5,
250
+
251
+ // fix for safari / chrome / firefox bug not correctly
252
+ // resetting stroke dash array
253
+ strokeDasharray: [ 10000, 1 ]
254
+ })
255
+ });
256
+
257
+ addMarker(id, {
258
+ element: associationStart,
259
+ ref: { x: 1, y: 10 },
260
+ scale: 0.5,
261
+ parentGfx
262
+ });
263
+ }
264
+
265
+ if (type === 'association-end') {
266
+ var associationEnd = svgCreate('path', {
267
+ d: 'M 1 5 L 11 10 L 1 15',
268
+ ...lineStyle({
269
+ fill: 'none',
270
+ stroke,
271
+ strokeWidth: 1.5,
272
+
273
+ // fix for safari / chrome / firefox bug not correctly
274
+ // resetting stroke dash array
275
+ strokeDasharray: [ 10000, 1 ]
276
+ })
277
+ });
278
+
279
+ addMarker(id, {
280
+ element: associationEnd,
281
+ ref: { x: 11, y: 10 },
282
+ scale: 0.5,
283
+ parentGfx
284
+ });
285
+ }
286
+
287
+ if (type === 'conditional-flow-marker') {
288
+ var conditionalFlowMarker = svgCreate('path', {
289
+ d: 'M 0 10 L 8 6 L 16 10 L 8 14 Z',
290
+ ...shapeStyle({
291
+ fill,
292
+ stroke: stroke
293
+ })
294
+ });
295
+
296
+ addMarker(id, {
297
+ element: conditionalFlowMarker,
298
+ ref: { x: -1, y: 10 },
299
+ scale: 0.5,
300
+ parentGfx
301
+ });
302
+ }
303
+
304
+ if (type === 'conditional-default-flow-marker') {
305
+ var defaultFlowMarker = svgCreate('path', {
306
+ d: 'M 6 4 L 10 16',
307
+ ...shapeStyle({
308
+ stroke: stroke,
309
+ fill: 'none'
310
+ })
311
+ });
312
+
313
+ addMarker(id, {
314
+ element: defaultFlowMarker,
315
+ ref: { x: 0, y: 10 },
316
+ scale: 0.5,
317
+ parentGfx
318
+ });
319
+ }
320
+ }
321
+
322
+ function drawCircle(parentGfx, width, height, offset, attrs = {}) {
323
+
324
+ if (isObject(offset)) {
325
+ attrs = offset;
326
+ offset = 0;
327
+ }
328
+
329
+ offset = offset || 0;
330
+
331
+ attrs = shapeStyle(attrs);
332
+
333
+ var cx = width / 2,
334
+ cy = height / 2;
335
+
336
+ var circle = svgCreate('circle', {
337
+ cx: cx,
338
+ cy: cy,
339
+ r: Math.round((width + height) / 4 - offset),
340
+ ...attrs
341
+ });
342
+
343
+ svgAppend(parentGfx, circle);
344
+
345
+ return circle;
346
+ }
347
+
348
+ function drawRect(parentGfx, width, height, r, offset, attrs) {
349
+
350
+ if (isObject(offset)) {
351
+ attrs = offset;
352
+ offset = 0;
353
+ }
354
+
355
+ offset = offset || 0;
356
+
357
+ attrs = shapeStyle(attrs);
358
+
359
+ var rect = svgCreate('rect', {
360
+ x: offset,
361
+ y: offset,
362
+ width: width - offset * 2,
363
+ height: height - offset * 2,
364
+ rx: r,
365
+ ry: r,
366
+ ...attrs
367
+ });
368
+
369
+ svgAppend(parentGfx, rect);
370
+
371
+ return rect;
372
+ }
373
+
374
+ function drawDiamond(parentGfx, width, height, attrs) {
375
+
376
+ var x_2 = width / 2;
377
+ var y_2 = height / 2;
378
+
379
+ var points = [
380
+ { x: x_2, y: 0 },
381
+ { x: width, y: y_2 },
382
+ { x: x_2, y: height },
383
+ { x: 0, y: y_2 }
384
+ ];
385
+
386
+ var pointsString = points.map(function(point) {
387
+ return point.x + ',' + point.y;
388
+ }).join(' ');
389
+
390
+ attrs = shapeStyle(attrs);
391
+
392
+ var polygon = svgCreate('polygon', {
393
+ ...attrs,
394
+ points: pointsString
395
+ });
396
+
397
+ svgAppend(parentGfx, polygon);
398
+
399
+ return polygon;
400
+ }
401
+
402
+ /**
403
+ * @param {SVGElement} parentGfx
404
+ * @param {Point[]} waypoints
405
+ * @param {any} attrs
406
+ * @param {number} [radius]
407
+ *
408
+ * @return {SVGElement}
409
+ */
410
+ function drawLine(parentGfx, waypoints, attrs, radius) {
411
+ attrs = lineStyle(attrs);
412
+
413
+ var line = createLine(waypoints, attrs, radius);
414
+
415
+ svgAppend(parentGfx, line);
416
+
417
+ return line;
418
+ }
419
+
420
+ /**
421
+ * @param {SVGElement} parentGfx
422
+ * @param {Point[]} waypoints
423
+ * @param {any} attrs
424
+ *
425
+ * @return {SVGElement}
426
+ */
427
+ function drawConnectionSegments(parentGfx, waypoints, attrs) {
428
+ return drawLine(parentGfx, waypoints, attrs, 5);
429
+ }
430
+
431
+ function drawPath(parentGfx, d, attrs) {
432
+ attrs = lineStyle(attrs);
433
+
434
+ var path = svgCreate('path', {
435
+ ...attrs,
436
+ d
437
+ });
438
+
439
+ svgAppend(parentGfx, path);
440
+
441
+ return path;
442
+ }
443
+
444
+ function drawMarker(type, parentGfx, path, attrs) {
445
+ return drawPath(parentGfx, path, assign({ 'data-marker': type }, attrs));
446
+ }
447
+
448
+ function renderer(type) {
449
+ return handlers[type];
450
+ }
451
+
452
+ function as(type) {
453
+ return function(parentGfx, element, attrs) {
454
+ return renderer(type)(parentGfx, element, attrs);
455
+ };
456
+ }
457
+
458
+ var eventIconRenderers = {
459
+ 'bpmn:MessageEventDefinition': function(parentGfx, element, attrs = {}, isThrowing) {
460
+ var pathData = pathMap.getScaledPath('EVENT_MESSAGE', {
461
+ xScaleFactor: 0.9,
462
+ yScaleFactor: 0.9,
463
+ containerWidth: element.width,
464
+ containerHeight: element.height,
465
+ position: {
466
+ mx: 0.235,
467
+ my: 0.315
468
+ }
469
+ });
470
+
471
+ var fill = isThrowing
472
+ ? getStrokeColor(element, defaultStrokeColor, attrs.stroke)
473
+ : getFillColor(element, defaultFillColor, attrs.fill);
474
+
475
+ var stroke = isThrowing
476
+ ? getFillColor(element, defaultFillColor, attrs.fill)
477
+ : getStrokeColor(element, defaultStrokeColor, attrs.stroke);
478
+
479
+ var messagePath = drawPath(parentGfx, pathData, {
480
+ fill,
481
+ stroke,
482
+ strokeWidth: 1
483
+ });
484
+
485
+ return messagePath;
486
+ },
487
+ 'bpmn:TimerEventDefinition': function(parentGfx, element, attrs = {}) {
488
+ var circle = drawCircle(parentGfx, element.width, element.height, 0.2 * element.height, {
489
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
490
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
491
+ strokeWidth: 2
492
+ });
493
+
494
+ var pathData = pathMap.getScaledPath('EVENT_TIMER_WH', {
495
+ xScaleFactor: 0.75,
496
+ yScaleFactor: 0.75,
497
+ containerWidth: element.width,
498
+ containerHeight: element.height,
499
+ position: {
500
+ mx: 0.5,
501
+ my: 0.5
502
+ }
503
+ });
504
+
505
+ drawPath(parentGfx, pathData, {
506
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
507
+ strokeWidth: 2
508
+ });
509
+
510
+ for (var i = 0; i < 12; i++) {
511
+ var linePathData = pathMap.getScaledPath('EVENT_TIMER_LINE', {
512
+ xScaleFactor: 0.75,
513
+ yScaleFactor: 0.75,
514
+ containerWidth: element.width,
515
+ containerHeight: element.height,
516
+ position: {
517
+ mx: 0.5,
518
+ my: 0.5
519
+ }
520
+ });
521
+
522
+ var width = element.width / 2,
523
+ height = element.height / 2;
524
+
525
+ drawPath(parentGfx, linePathData, {
526
+ strokeWidth: 1,
527
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
528
+ transform: 'rotate(' + (i * 30) + ',' + height + ',' + width + ')'
529
+ });
530
+ }
531
+
532
+ return circle;
533
+ },
534
+ 'bpmn:EscalationEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
535
+ var pathData = pathMap.getScaledPath('EVENT_ESCALATION', {
536
+ xScaleFactor: 1,
537
+ yScaleFactor: 1,
538
+ containerWidth: event.width,
539
+ containerHeight: event.height,
540
+ position: {
541
+ mx: 0.5,
542
+ my: 0.2
543
+ }
544
+ });
545
+
546
+ var fill = isThrowing
547
+ ? getStrokeColor(event, defaultStrokeColor, attrs.stroke)
548
+ : getFillColor(event, defaultFillColor, attrs.fill);
549
+
550
+ return drawPath(parentGfx, pathData, {
551
+ fill,
552
+ stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
553
+ strokeWidth: 1
554
+ });
555
+ },
556
+ 'bpmn:ConditionalEventDefinition': function(parentGfx, event, attrs = {}) {
557
+ var pathData = pathMap.getScaledPath('EVENT_CONDITIONAL', {
558
+ xScaleFactor: 1,
559
+ yScaleFactor: 1,
560
+ containerWidth: event.width,
561
+ containerHeight: event.height,
562
+ position: {
563
+ mx: 0.5,
564
+ my: 0.222
565
+ }
566
+ });
567
+
568
+ return drawPath(parentGfx, pathData, {
569
+ fill: getFillColor(event, defaultFillColor, attrs.fill),
570
+ stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
571
+ strokeWidth: 1
572
+ });
573
+ },
574
+ 'bpmn:LinkEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
575
+ var pathData = pathMap.getScaledPath('EVENT_LINK', {
576
+ xScaleFactor: 1,
577
+ yScaleFactor: 1,
578
+ containerWidth: event.width,
579
+ containerHeight: event.height,
580
+ position: {
581
+ mx: 0.57,
582
+ my: 0.263
583
+ }
584
+ });
585
+
586
+ var fill = isThrowing
587
+ ? getStrokeColor(event, defaultStrokeColor, attrs.stroke)
588
+ : getFillColor(event, defaultFillColor, attrs.fill);
589
+
590
+ return drawPath(parentGfx, pathData, {
591
+ fill,
592
+ stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
593
+ strokeWidth: 1
594
+ });
595
+ },
596
+ 'bpmn:ErrorEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
597
+ var pathData = pathMap.getScaledPath('EVENT_ERROR', {
598
+ xScaleFactor: 1.1,
599
+ yScaleFactor: 1.1,
600
+ containerWidth: event.width,
601
+ containerHeight: event.height,
602
+ position: {
603
+ mx: 0.2,
604
+ my: 0.722
605
+ }
606
+ });
607
+
608
+ var fill = isThrowing
609
+ ? getStrokeColor(event, defaultStrokeColor, attrs.stroke)
610
+ : getFillColor(event, defaultFillColor, attrs.fill);
611
+
612
+ return drawPath(parentGfx, pathData, {
613
+ fill,
614
+ stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
615
+ strokeWidth: 1
616
+ });
617
+ },
618
+ 'bpmn:CancelEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
619
+ var pathData = pathMap.getScaledPath('EVENT_CANCEL_45', {
620
+ xScaleFactor: 1.0,
621
+ yScaleFactor: 1.0,
622
+ containerWidth: event.width,
623
+ containerHeight: event.height,
624
+ position: {
625
+ mx: 0.638,
626
+ my: -0.055
627
+ }
628
+ });
629
+
630
+ var fill = isThrowing ? getStrokeColor(event, defaultStrokeColor, attrs.stroke) : 'none';
631
+
632
+ var path = drawPath(parentGfx, pathData, {
633
+ fill,
634
+ stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
635
+ strokeWidth: 1
636
+ });
637
+
638
+ rotate(path, 45);
639
+
640
+ return path;
641
+ },
642
+ 'bpmn:CompensateEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
643
+ var pathData = pathMap.getScaledPath('EVENT_COMPENSATION', {
644
+ xScaleFactor: 1,
645
+ yScaleFactor: 1,
646
+ containerWidth: event.width,
647
+ containerHeight: event.height,
648
+ position: {
649
+ mx: 0.22,
650
+ my: 0.5
651
+ }
652
+ });
653
+
654
+ var fill = isThrowing
655
+ ? getStrokeColor(event, defaultStrokeColor, attrs.stroke)
656
+ : getFillColor(event, defaultFillColor, attrs.fill);
657
+
658
+ return drawPath(parentGfx, pathData, {
659
+ fill,
660
+ stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
661
+ strokeWidth: 1
662
+ });
663
+ },
664
+ 'bpmn:SignalEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
665
+ var pathData = pathMap.getScaledPath('EVENT_SIGNAL', {
666
+ xScaleFactor: 0.9,
667
+ yScaleFactor: 0.9,
668
+ containerWidth: event.width,
669
+ containerHeight: event.height,
670
+ position: {
671
+ mx: 0.5,
672
+ my: 0.2
673
+ }
674
+ });
675
+
676
+ var fill = isThrowing
677
+ ? getStrokeColor(event, defaultStrokeColor, attrs.stroke)
678
+ : getFillColor(event, defaultFillColor, attrs.fill);
679
+
680
+ return drawPath(parentGfx, pathData, {
681
+ strokeWidth: 1,
682
+ fill,
683
+ stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke)
684
+ });
685
+ },
686
+ 'bpmn:MultipleEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {
687
+ var pathData = pathMap.getScaledPath('EVENT_MULTIPLE', {
688
+ xScaleFactor: 1.1,
689
+ yScaleFactor: 1.1,
690
+ containerWidth: event.width,
691
+ containerHeight: event.height,
692
+ position: {
693
+ mx: 0.222,
694
+ my: 0.36
695
+ }
696
+ });
697
+
698
+ var fill = isThrowing
699
+ ? getStrokeColor(event, defaultStrokeColor, attrs.stroke)
700
+ : getFillColor(event, defaultFillColor, attrs.fill);
701
+
702
+ return drawPath(parentGfx, pathData, {
703
+ fill,
704
+ strokeWidth: 1
705
+ });
706
+ },
707
+ 'bpmn:ParallelMultipleEventDefinition': function(parentGfx, event, attrs = {}) {
708
+ var pathData = pathMap.getScaledPath('EVENT_PARALLEL_MULTIPLE', {
709
+ xScaleFactor: 1.2,
710
+ yScaleFactor: 1.2,
711
+ containerWidth: event.width,
712
+ containerHeight: event.height,
713
+ position: {
714
+ mx: 0.458,
715
+ my: 0.194
716
+ }
717
+ });
718
+
719
+ return drawPath(parentGfx, pathData, {
720
+ fill: getFillColor(event, defaultFillColor, attrs.fill),
721
+ stroke: getStrokeColor(event, defaultStrokeColor, attrs.stroke),
722
+ strokeWidth: 1
723
+ });
724
+ },
725
+ 'bpmn:TerminateEventDefinition': function(parentGfx, element, attrs = {}) {
726
+ var circle = drawCircle(parentGfx, element.width, element.height, 8, {
727
+ fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
728
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
729
+ strokeWidth: 4
730
+ });
731
+
732
+ return circle;
733
+ }
734
+ };
735
+
736
+ function renderEventIcon(element, parentGfx, attrs = {}) {
737
+ var semantic = getSemantic(element),
738
+ isThrowing = isThrowEvent(semantic);
739
+
740
+ if (semantic.get('eventDefinitions') && semantic.get('eventDefinitions').length > 1) {
741
+ if (semantic.get('parallelMultiple')) {
742
+ return eventIconRenderers[ 'bpmn:ParallelMultipleEventDefinition' ](parentGfx, element, attrs, isThrowing);
743
+ }
744
+ else {
745
+ return eventIconRenderers[ 'bpmn:MultipleEventDefinition' ](parentGfx, element, attrs, isThrowing);
746
+ }
747
+ }
748
+
749
+ if (isTypedEvent(semantic, 'bpmn:MessageEventDefinition')) {
750
+ return eventIconRenderers[ 'bpmn:MessageEventDefinition' ](parentGfx, element, attrs, isThrowing);
751
+ }
752
+
753
+ if (isTypedEvent(semantic, 'bpmn:TimerEventDefinition')) {
754
+ return eventIconRenderers[ 'bpmn:TimerEventDefinition' ](parentGfx, element, attrs, isThrowing);
755
+ }
756
+
757
+ if (isTypedEvent(semantic, 'bpmn:ConditionalEventDefinition')) {
758
+ return eventIconRenderers[ 'bpmn:ConditionalEventDefinition' ](parentGfx, element, attrs, isThrowing);
759
+ }
760
+
761
+ if (isTypedEvent(semantic, 'bpmn:SignalEventDefinition')) {
762
+ return eventIconRenderers[ 'bpmn:SignalEventDefinition' ](parentGfx, element, attrs, isThrowing);
763
+ }
764
+
765
+ if (isTypedEvent(semantic, 'bpmn:EscalationEventDefinition')) {
766
+ return eventIconRenderers[ 'bpmn:EscalationEventDefinition' ](parentGfx, element, attrs, isThrowing);
767
+ }
768
+
769
+ if (isTypedEvent(semantic, 'bpmn:LinkEventDefinition')) {
770
+ return eventIconRenderers[ 'bpmn:LinkEventDefinition' ](parentGfx, element, attrs, isThrowing);
771
+ }
772
+
773
+ if (isTypedEvent(semantic, 'bpmn:ErrorEventDefinition')) {
774
+ return eventIconRenderers[ 'bpmn:ErrorEventDefinition' ](parentGfx, element, attrs, isThrowing);
775
+ }
776
+
777
+ if (isTypedEvent(semantic, 'bpmn:CancelEventDefinition')) {
778
+ return eventIconRenderers[ 'bpmn:CancelEventDefinition' ](parentGfx, element, attrs, isThrowing);
779
+ }
780
+
781
+ if (isTypedEvent(semantic, 'bpmn:CompensateEventDefinition')) {
782
+ return eventIconRenderers[ 'bpmn:CompensateEventDefinition' ](parentGfx, element, attrs, isThrowing);
783
+ }
784
+
785
+ if (isTypedEvent(semantic, 'bpmn:TerminateEventDefinition')) {
786
+ return eventIconRenderers[ 'bpmn:TerminateEventDefinition' ](parentGfx, element, attrs, isThrowing);
787
+ }
788
+
789
+ return null;
790
+ }
791
+
792
+ var taskMarkerRenderers = {
793
+ 'ParticipantMultiplicityMarker': function(parentGfx, element, attrs = {}) {
794
+ var width = getWidth(element, attrs),
795
+ height = getHeight(element, attrs);
796
+
797
+ var markerPath = pathMap.getScaledPath('MARKER_PARALLEL', {
798
+ xScaleFactor: 1,
799
+ yScaleFactor: 1,
800
+ containerWidth: width,
801
+ containerHeight: height,
802
+ position: {
803
+ mx: ((width / 2 - 6) / width),
804
+ my: (height - 15) / height
805
+ }
806
+ });
807
+
808
+ drawMarker('participant-multiplicity', parentGfx, markerPath, {
809
+ strokeWidth: 2,
810
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
811
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
812
+ });
813
+ },
814
+ 'SubProcessMarker': function(parentGfx, element, attrs = {}) {
815
+ var markerRect = drawRect(parentGfx, 14, 14, 0, {
816
+ strokeWidth: 1,
817
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
818
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
819
+ });
820
+
821
+ translate(markerRect, element.width / 2 - 7.5, element.height - 20);
822
+
823
+ var markerPath = pathMap.getScaledPath('MARKER_SUB_PROCESS', {
824
+ xScaleFactor: 1.5,
825
+ yScaleFactor: 1.5,
826
+ containerWidth: element.width,
827
+ containerHeight: element.height,
828
+ position: {
829
+ mx: (element.width / 2 - 7.5) / element.width,
830
+ my: (element.height - 20) / element.height
831
+ }
832
+ });
833
+
834
+ drawMarker('sub-process', parentGfx, markerPath, {
835
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
836
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
837
+ });
838
+ },
839
+ 'ParallelMarker': function(parentGfx, element, attrs) {
840
+ var width = getWidth(element, attrs),
841
+ height = getHeight(element, attrs);
842
+
843
+ var markerPath = pathMap.getScaledPath('MARKER_PARALLEL', {
844
+ xScaleFactor: 1,
845
+ yScaleFactor: 1,
846
+ containerWidth: width,
847
+ containerHeight: height,
848
+ position: {
849
+ mx: ((width / 2 + attrs.parallel) / width),
850
+ my: (height - 20) / height
851
+ }
852
+ });
853
+
854
+ drawMarker('parallel', parentGfx, markerPath, {
855
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
856
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
857
+ });
858
+ },
859
+ 'SequentialMarker': function(parentGfx, element, attrs) {
860
+ var markerPath = pathMap.getScaledPath('MARKER_SEQUENTIAL', {
861
+ xScaleFactor: 1,
862
+ yScaleFactor: 1,
863
+ containerWidth: element.width,
864
+ containerHeight: element.height,
865
+ position: {
866
+ mx: ((element.width / 2 + attrs.seq) / element.width),
867
+ my: (element.height - 19) / element.height
868
+ }
869
+ });
870
+
871
+ drawMarker('sequential', parentGfx, markerPath, {
872
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
873
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
874
+ });
875
+ },
876
+ 'CompensationMarker': function(parentGfx, element, attrs) {
877
+ var markerMath = pathMap.getScaledPath('MARKER_COMPENSATION', {
878
+ xScaleFactor: 1,
879
+ yScaleFactor: 1,
880
+ containerWidth: element.width,
881
+ containerHeight: element.height,
882
+ position: {
883
+ mx: ((element.width / 2 + attrs.compensation) / element.width),
884
+ my: (element.height - 13) / element.height
885
+ }
886
+ });
887
+
888
+ drawMarker('compensation', parentGfx, markerMath, {
889
+ strokeWidth: 1,
890
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
891
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
892
+ });
893
+ },
894
+ 'LoopMarker': function(parentGfx, element, attrs) {
895
+ var width = getWidth(element, attrs),
896
+ height = getHeight(element, attrs);
897
+
898
+ var markerPath = pathMap.getScaledPath('MARKER_LOOP', {
899
+ xScaleFactor: 1,
900
+ yScaleFactor: 1,
901
+ containerWidth: width,
902
+ containerHeight: height,
903
+ position: {
904
+ mx: ((width / 2 + attrs.loop) / width),
905
+ my: (height - 7) / height
906
+ }
907
+ });
908
+
909
+ drawMarker('loop', parentGfx, markerPath, {
910
+ strokeWidth: 1.5,
911
+ fill: 'none',
912
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
913
+ strokeMiterlimit: 0.5
914
+ });
915
+ },
916
+ 'AdhocMarker': function(parentGfx, element, attrs) {
917
+ var width = getWidth(element, attrs),
918
+ height = getHeight(element, attrs);
919
+
920
+ var markerPath = pathMap.getScaledPath('MARKER_ADHOC', {
921
+ xScaleFactor: 1,
922
+ yScaleFactor: 1,
923
+ containerWidth: width,
924
+ containerHeight: height,
925
+ position: {
926
+ mx: ((width / 2 + attrs.adhoc) / width),
927
+ my: (height - 15) / height
928
+ }
929
+ });
930
+
931
+ drawMarker('adhoc', parentGfx, markerPath, {
932
+ strokeWidth: 1,
933
+ fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
934
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
935
+ });
936
+ }
937
+ };
938
+
939
+ function renderTaskMarker(type, parentGfx, element, attrs) {
940
+ taskMarkerRenderers[ type ](parentGfx, element, attrs);
941
+ }
942
+
943
+ function renderTaskMarkers(parentGfx, element, taskMarkers, attrs = {}) {
944
+ attrs = {
945
+ fill: attrs.fill,
946
+ stroke: attrs.stroke,
947
+ width: getWidth(element, attrs),
948
+ height: getHeight(element, attrs)
949
+ };
950
+
951
+ var semantic = getSemantic(element);
952
+
953
+ var subprocess = taskMarkers && taskMarkers.includes('SubProcessMarker');
954
+
955
+ if (subprocess) {
956
+ attrs = {
957
+ ...attrs,
958
+ seq: -21,
959
+ parallel: -22,
960
+ compensation: -42,
961
+ loop: -18,
962
+ adhoc: 10
963
+ };
964
+ } else {
965
+ attrs = {
966
+ ...attrs,
967
+ seq: -5,
968
+ parallel: -6,
969
+ compensation: -27,
970
+ loop: 0,
971
+ adhoc: 10
972
+ };
973
+ }
974
+
975
+ forEach(taskMarkers, function(marker) {
976
+ renderTaskMarker(marker, parentGfx, element, attrs);
977
+ });
978
+
979
+ if (semantic.get('isForCompensation')) {
980
+ renderTaskMarker('CompensationMarker', parentGfx, element, attrs);
981
+ }
982
+
983
+ if (is(semantic, 'bpmn:AdHocSubProcess')) {
984
+ renderTaskMarker('AdhocMarker', parentGfx, element, attrs);
985
+ }
986
+
987
+ var loopCharacteristics = semantic.get('loopCharacteristics'),
988
+ isSequential = loopCharacteristics && loopCharacteristics.get('isSequential');
989
+
990
+ if (loopCharacteristics) {
991
+
992
+ if (isSequential === undefined) {
993
+ renderTaskMarker('LoopMarker', parentGfx, element, attrs);
994
+ }
995
+
996
+ if (isSequential === false) {
997
+ renderTaskMarker('ParallelMarker', parentGfx, element, attrs);
998
+ }
999
+
1000
+ if (isSequential === true) {
1001
+ renderTaskMarker('SequentialMarker', parentGfx, element, attrs);
1002
+ }
1003
+ }
1004
+ }
1005
+
1006
+ function renderLabel(parentGfx, label, attrs = {}) {
1007
+ attrs = assign({
1008
+ size: {
1009
+ width: 100
1010
+ }
1011
+ }, attrs);
1012
+
1013
+ var text = textRenderer.createText(label || '', attrs);
1014
+
1015
+ svgClasses(text).add('djs-label');
1016
+
1017
+ svgAppend(parentGfx, text);
1018
+
1019
+ return text;
1020
+ }
1021
+
1022
+ function renderEmbeddedLabel(parentGfx, element, align, attrs = {}) {
1023
+ var semantic = getSemantic(element);
1024
+
1025
+ var box = getBounds({
1026
+ x: element.x,
1027
+ y: element.y,
1028
+ width: element.width,
1029
+ height: element.height
1030
+ }, attrs);
1031
+
1032
+ return renderLabel(parentGfx, semantic.name, {
1033
+ align,
1034
+ box,
1035
+ padding: 7,
1036
+ style: {
1037
+ fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)
1038
+ }
1039
+ });
1040
+ }
1041
+
1042
+ function renderExternalLabel(parentGfx, element, attrs = {}) {
1043
+ var box = {
1044
+ width: 90,
1045
+ height: 30,
1046
+ x: element.width / 2 + element.x,
1047
+ y: element.height / 2 + element.y
1048
+ };
1049
+
1050
+ return renderLabel(parentGfx, getLabel(element), {
1051
+ box: box,
1052
+ fitBox: true,
1053
+ style: assign(
1054
+ {},
1055
+ textRenderer.getExternalStyle(),
1056
+ {
1057
+ fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)
1058
+ }
1059
+ )
1060
+ });
1061
+ }
1062
+
1063
+ function renderLaneLabel(parentGfx, text, element, attrs = {}) {
1064
+ var isHorizontalLane = isHorizontal(element);
1065
+
1066
+ var textBox = renderLabel(parentGfx, text, {
1067
+ box: {
1068
+ height: 30,
1069
+ width: isHorizontalLane ? getHeight(element, attrs) : getWidth(element, attrs),
1070
+ },
1071
+ align: 'center-middle',
1072
+ style: {
1073
+ fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)
1074
+ }
1075
+ });
1076
+
1077
+ if (isHorizontalLane) {
1078
+ var top = -1 * getHeight(element, attrs);
1079
+ transform(textBox, 0, -top, 270);
1080
+ }
1081
+ }
1082
+
1083
+ function renderActivity(parentGfx, element, attrs = {}) {
1084
+ var {
1085
+ width,
1086
+ height
1087
+ } = getBounds(element, attrs);
1088
+
1089
+ return drawRect(parentGfx, width, height, TASK_BORDER_RADIUS, {
1090
+ ...attrs,
1091
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1092
+ fillOpacity: DEFAULT_OPACITY,
1093
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
1094
+ });
1095
+ }
1096
+
1097
+ function renderAssociation(parentGfx, element, attrs = {}) {
1098
+ var semantic = getSemantic(element);
1099
+
1100
+ var fill = getFillColor(element, defaultFillColor, attrs.fill),
1101
+ stroke = getStrokeColor(element, defaultStrokeColor, attrs.stroke);
1102
+
1103
+ if (semantic.get('associationDirection') === 'One' ||
1104
+ semantic.get('associationDirection') === 'Both') {
1105
+ attrs.markerEnd = marker(parentGfx, 'association-end', fill, stroke);
1106
+ }
1107
+
1108
+ if (semantic.get('associationDirection') === 'Both') {
1109
+ attrs.markerStart = marker(parentGfx, 'association-start', fill, stroke);
1110
+ }
1111
+
1112
+ attrs = pickAttrs(attrs, [
1113
+ 'markerStart',
1114
+ 'markerEnd'
1115
+ ]);
1116
+
1117
+ return drawConnectionSegments(parentGfx, element.waypoints, {
1118
+ ...attrs,
1119
+ stroke,
1120
+ strokeDasharray: '0, 5'
1121
+ });
1122
+ }
1123
+
1124
+ function renderDataObject(parentGfx, element, attrs = {}) {
1125
+ var fill = getFillColor(element, defaultFillColor, attrs.fill),
1126
+ stroke = getStrokeColor(element, defaultStrokeColor, attrs.stroke);
1127
+
1128
+ var pathData = pathMap.getScaledPath('DATA_OBJECT_PATH', {
1129
+ xScaleFactor: 1,
1130
+ yScaleFactor: 1,
1131
+ containerWidth: element.width,
1132
+ containerHeight: element.height,
1133
+ position: {
1134
+ mx: 0.474,
1135
+ my: 0.296
1136
+ }
1137
+ });
1138
+
1139
+ var dataObject = drawPath(parentGfx, pathData, {
1140
+ fill,
1141
+ fillOpacity: DEFAULT_OPACITY,
1142
+ stroke
1143
+ });
1144
+
1145
+ var semantic = getSemantic(element);
1146
+
1147
+ if (isCollection(semantic)) {
1148
+ var collectionPathData = pathMap.getScaledPath('DATA_OBJECT_COLLECTION_PATH', {
1149
+ xScaleFactor: 1,
1150
+ yScaleFactor: 1,
1151
+ containerWidth: element.width,
1152
+ containerHeight: element.height,
1153
+ position: {
1154
+ mx: 0.33,
1155
+ my: (element.height - 18) / element.height
1156
+ }
1157
+ });
1158
+
1159
+ drawPath(parentGfx, collectionPathData, {
1160
+ strokeWidth: 2,
1161
+ fill,
1162
+ stroke
1163
+ });
1164
+ }
1165
+
1166
+ return dataObject;
1167
+ }
1168
+
1169
+ function renderEvent(parentGfx, element, attrs = {}) {
1170
+ return drawCircle(parentGfx, element.width, element.height, {
1171
+ fillOpacity: DEFAULT_OPACITY,
1172
+ ...attrs,
1173
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1174
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
1175
+ });
1176
+ }
1177
+
1178
+ function renderGateway(parentGfx, element, attrs = {}) {
1179
+ return drawDiamond(parentGfx, element.width, element.height, {
1180
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1181
+ fillOpacity: DEFAULT_OPACITY,
1182
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
1183
+ });
1184
+ }
1185
+
1186
+ function renderLane(parentGfx, element, attrs = {}) {
1187
+ var lane = drawRect(parentGfx, getWidth(element, attrs), getHeight(element, attrs), 0, {
1188
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1189
+ fillOpacity: attrs.fillOpacity || DEFAULT_OPACITY,
1190
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1191
+ strokeWidth: 1.5
1192
+ });
1193
+
1194
+ var semantic = getSemantic(element);
1195
+
1196
+ if (is(semantic, 'bpmn:Lane')) {
1197
+ var text = semantic.get('name');
1198
+
1199
+ renderLaneLabel(parentGfx, text, element, attrs);
1200
+ }
1201
+
1202
+ return lane;
1203
+ }
1204
+
1205
+ function renderSubProcess(parentGfx, element, attrs = {}) {
1206
+ var activity = renderActivity(parentGfx, element, attrs);
1207
+
1208
+ if (isEventSubProcess(element)) {
1209
+ svgAttr(activity, {
1210
+ strokeDasharray: '0, 5.5',
1211
+ strokeWidth: 2.5
1212
+ });
1213
+ }
1214
+
1215
+ var expanded = isExpanded(element);
1216
+
1217
+ renderEmbeddedLabel(parentGfx, element, expanded ? 'center-top' : 'center-middle', attrs);
1218
+
1219
+ if (expanded) {
1220
+ renderTaskMarkers(parentGfx, element, undefined, attrs);
1221
+ } else {
1222
+ renderTaskMarkers(parentGfx, element, [ 'SubProcessMarker' ], attrs);
1223
+ }
1224
+
1225
+ return activity;
1226
+ }
1227
+
1228
+ function renderTask(parentGfx, element, attrs = {}) {
1229
+ var activity = renderActivity(parentGfx, element, attrs);
1230
+
1231
+ renderEmbeddedLabel(parentGfx, element, 'center-middle', attrs);
1232
+
1233
+ renderTaskMarkers(parentGfx, element, undefined, attrs);
1234
+
1235
+ return activity;
1236
+ }
1237
+
1238
+ var handlers = this.handlers = {
1239
+ 'bpmn:AdHocSubProcess': function(parentGfx, element, attrs = {}) {
1240
+ if (isExpanded(element)) {
1241
+ attrs = pickAttrs(attrs, [
1242
+ 'fill',
1243
+ 'stroke',
1244
+ 'width',
1245
+ 'height'
1246
+ ]);
1247
+ } else {
1248
+ attrs = pickAttrs(attrs, [
1249
+ 'fill',
1250
+ 'stroke'
1251
+ ]);
1252
+ }
1253
+
1254
+ return renderSubProcess(parentGfx, element, attrs);
1255
+ },
1256
+ 'bpmn:Association': function(parentGfx, element, attrs = {}) {
1257
+ attrs = pickAttrs(attrs, [
1258
+ 'fill',
1259
+ 'stroke'
1260
+ ]);
1261
+
1262
+ return renderAssociation(parentGfx, element, attrs);
1263
+ },
1264
+ 'bpmn:BoundaryEvent': function(parentGfx, element, attrs = {}) {
1265
+ var { renderIcon = true } = attrs;
1266
+
1267
+ attrs = pickAttrs(attrs, [
1268
+ 'fill',
1269
+ 'stroke'
1270
+ ]);
1271
+
1272
+ var semantic = getSemantic(element),
1273
+ cancelActivity = semantic.get('cancelActivity');
1274
+
1275
+ attrs = {
1276
+ strokeWidth: 1.5,
1277
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1278
+ fillOpacity: FULL_OPACITY,
1279
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
1280
+ };
1281
+
1282
+ if (!cancelActivity) {
1283
+ attrs.strokeDasharray = '6';
1284
+ }
1285
+
1286
+ var event = renderEvent(parentGfx, element, attrs);
1287
+
1288
+ drawCircle(parentGfx, element.width, element.height, INNER_OUTER_DIST, {
1289
+ ...attrs,
1290
+ fill: 'none'
1291
+ });
1292
+
1293
+ if (renderIcon) {
1294
+ renderEventIcon(element, parentGfx, attrs);
1295
+ }
1296
+
1297
+ return event;
1298
+ },
1299
+ 'bpmn:BusinessRuleTask': function(parentGfx, element, attrs = {}) {
1300
+ attrs = pickAttrs(attrs, [
1301
+ 'fill',
1302
+ 'stroke'
1303
+ ]);
1304
+
1305
+ var task = renderTask(parentGfx, element, attrs);
1306
+
1307
+ var headerData = pathMap.getScaledPath('TASK_TYPE_BUSINESS_RULE_MAIN', {
1308
+ abspos: {
1309
+ x: 8,
1310
+ y: 8
1311
+ }
1312
+ });
1313
+
1314
+ var businessPath = drawPath(parentGfx, headerData);
1315
+
1316
+ svgAttr(businessPath, {
1317
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1318
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1319
+ strokeWidth: 1
1320
+ });
1321
+
1322
+ var headerPathData = pathMap.getScaledPath('TASK_TYPE_BUSINESS_RULE_HEADER', {
1323
+ abspos: {
1324
+ x: 8,
1325
+ y: 8
1326
+ }
1327
+ });
1328
+
1329
+ var businessHeaderPath = drawPath(parentGfx, headerPathData);
1330
+
1331
+ svgAttr(businessHeaderPath, {
1332
+ fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1333
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1334
+ strokeWidth: 1
1335
+ });
1336
+
1337
+ return task;
1338
+ },
1339
+ 'bpmn:CallActivity': function(parentGfx, element, attrs = {}) {
1340
+ attrs = pickAttrs(attrs, [
1341
+ 'fill',
1342
+ 'stroke'
1343
+ ]);
1344
+
1345
+ return renderSubProcess(parentGfx, element, {
1346
+ strokeWidth: 5,
1347
+ ...attrs
1348
+ });
1349
+ },
1350
+ 'bpmn:ComplexGateway': function(parentGfx, element, attrs = {}) {
1351
+ attrs = pickAttrs(attrs, [
1352
+ 'fill',
1353
+ 'stroke'
1354
+ ]);
1355
+
1356
+ var gateway = renderGateway(parentGfx, element, attrs);
1357
+
1358
+ var pathData = pathMap.getScaledPath('GATEWAY_COMPLEX', {
1359
+ xScaleFactor: 0.5,
1360
+ yScaleFactor:0.5,
1361
+ containerWidth: element.width,
1362
+ containerHeight: element.height,
1363
+ position: {
1364
+ mx: 0.46,
1365
+ my: 0.26
1366
+ }
1367
+ });
1368
+
1369
+ drawPath(parentGfx, pathData, {
1370
+ fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1371
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1372
+ strokeWidth: 1
1373
+ });
1374
+
1375
+ return gateway;
1376
+ },
1377
+ 'bpmn:DataInput': function(parentGfx, element, attrs = {}) {
1378
+ attrs = pickAttrs(attrs, [
1379
+ 'fill',
1380
+ 'stroke'
1381
+ ]);
1382
+
1383
+ var arrowPathData = pathMap.getRawPath('DATA_ARROW');
1384
+
1385
+ var dataObject = renderDataObject(parentGfx, element, attrs);
1386
+
1387
+ drawPath(parentGfx, arrowPathData, {
1388
+ fill: 'none',
1389
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1390
+ strokeWidth: 1
1391
+ });
1392
+
1393
+ return dataObject;
1394
+ },
1395
+ 'bpmn:DataInputAssociation': function(parentGfx, element, attrs = {}) {
1396
+ attrs = pickAttrs(attrs, [
1397
+ 'fill',
1398
+ 'stroke'
1399
+ ]);
1400
+
1401
+ return renderAssociation(parentGfx, element, {
1402
+ ...attrs,
1403
+ markerEnd: marker(parentGfx, 'association-end', getFillColor(element, defaultFillColor, attrs.fill), getStrokeColor(element, defaultStrokeColor, attrs.stroke))
1404
+ });
1405
+ },
1406
+ 'bpmn:DataObject': function(parentGfx, element, attrs = {}) {
1407
+ attrs = pickAttrs(attrs, [
1408
+ 'fill',
1409
+ 'stroke'
1410
+ ]);
1411
+
1412
+ return renderDataObject(parentGfx, element, attrs);
1413
+ },
1414
+ 'bpmn:DataObjectReference': as('bpmn:DataObject'),
1415
+ 'bpmn:DataOutput': function(parentGfx, element, attrs = {}) {
1416
+ attrs = pickAttrs(attrs, [
1417
+ 'fill',
1418
+ 'stroke'
1419
+ ]);
1420
+
1421
+ var arrowPathData = pathMap.getRawPath('DATA_ARROW');
1422
+
1423
+ var dataObject = renderDataObject(parentGfx, element, attrs);
1424
+
1425
+ drawPath(parentGfx, arrowPathData, {
1426
+ strokeWidth: 1,
1427
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1428
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
1429
+ });
1430
+
1431
+ return dataObject;
1432
+ },
1433
+ 'bpmn:DataOutputAssociation': function(parentGfx, element, attrs = {}) {
1434
+ attrs = pickAttrs(attrs, [
1435
+ 'fill',
1436
+ 'stroke'
1437
+ ]);
1438
+
1439
+ return renderAssociation(parentGfx, element, {
1440
+ ...attrs,
1441
+ markerEnd: marker(parentGfx, 'association-end', getFillColor(element, defaultFillColor, attrs.fill), getStrokeColor(element, defaultStrokeColor, attrs.stroke))
1442
+ });
1443
+ },
1444
+ 'bpmn:DataStoreReference': function(parentGfx, element, attrs = {}) {
1445
+ attrs = pickAttrs(attrs, [
1446
+ 'fill',
1447
+ 'stroke'
1448
+ ]);
1449
+
1450
+ var dataStorePath = pathMap.getScaledPath('DATA_STORE', {
1451
+ xScaleFactor: 1,
1452
+ yScaleFactor: 1,
1453
+ containerWidth: element.width,
1454
+ containerHeight: element.height,
1455
+ position: {
1456
+ mx: 0,
1457
+ my: 0.133
1458
+ }
1459
+ });
1460
+
1461
+ return drawPath(parentGfx, dataStorePath, {
1462
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1463
+ fillOpacity: DEFAULT_OPACITY,
1464
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1465
+ strokeWidth: 2
1466
+ });
1467
+ },
1468
+ 'bpmn:EndEvent': function(parentGfx, element, attrs = {}) {
1469
+ var { renderIcon = true } = attrs;
1470
+
1471
+ attrs = pickAttrs(attrs, [
1472
+ 'fill',
1473
+ 'stroke'
1474
+ ]);
1475
+
1476
+ var event = renderEvent(parentGfx, element, {
1477
+ ...attrs,
1478
+ strokeWidth: 4
1479
+ });
1480
+
1481
+ if (renderIcon) {
1482
+ renderEventIcon(element, parentGfx, attrs);
1483
+ }
1484
+
1485
+ return event;
1486
+ },
1487
+ 'bpmn:EventBasedGateway': function(parentGfx, element, attrs = {}) {
1488
+ attrs = pickAttrs(attrs, [
1489
+ 'fill',
1490
+ 'stroke'
1491
+ ]);
1492
+
1493
+ var semantic = getSemantic(element);
1494
+
1495
+ var diamond = renderGateway(parentGfx, element, attrs);
1496
+
1497
+ drawCircle(parentGfx, element.width, element.height, element.height * 0.20, {
1498
+ fill: getFillColor(element, 'none', attrs.fill),
1499
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1500
+ strokeWidth: 1
1501
+ });
1502
+
1503
+ var type = semantic.get('eventGatewayType'),
1504
+ instantiate = !!semantic.get('instantiate');
1505
+
1506
+ function drawEvent() {
1507
+
1508
+ var pathData = pathMap.getScaledPath('GATEWAY_EVENT_BASED', {
1509
+ xScaleFactor: 0.18,
1510
+ yScaleFactor: 0.18,
1511
+ containerWidth: element.width,
1512
+ containerHeight: element.height,
1513
+ position: {
1514
+ mx: 0.36,
1515
+ my: 0.44
1516
+ }
1517
+ });
1518
+
1519
+ drawPath(parentGfx, pathData, {
1520
+ fill: 'none',
1521
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1522
+ strokeWidth: 2
1523
+ });
1524
+ }
1525
+
1526
+ if (type === 'Parallel') {
1527
+ var pathData = pathMap.getScaledPath('GATEWAY_PARALLEL', {
1528
+ xScaleFactor: 0.4,
1529
+ yScaleFactor: 0.4,
1530
+ containerWidth: element.width,
1531
+ containerHeight: element.height,
1532
+ position: {
1533
+ mx: 0.474,
1534
+ my: 0.296
1535
+ }
1536
+ });
1537
+
1538
+ drawPath(parentGfx, pathData, {
1539
+ fill: 'none',
1540
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1541
+ strokeWidth: 1
1542
+ });
1543
+ } else if (type === 'Exclusive') {
1544
+ if (!instantiate) {
1545
+ drawCircle(parentGfx, element.width, element.height, element.height * 0.26, {
1546
+ fill: 'none',
1547
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1548
+ strokeWidth: 1
1549
+ });
1550
+ }
1551
+
1552
+ drawEvent();
1553
+ }
1554
+
1555
+
1556
+ return diamond;
1557
+ },
1558
+ 'bpmn:ExclusiveGateway': function(parentGfx, element, attrs = {}) {
1559
+ attrs = pickAttrs(attrs, [
1560
+ 'fill',
1561
+ 'stroke'
1562
+ ]);
1563
+
1564
+ var gateway = renderGateway(parentGfx, element, attrs);
1565
+
1566
+ var pathData = pathMap.getScaledPath('GATEWAY_EXCLUSIVE', {
1567
+ xScaleFactor: 0.4,
1568
+ yScaleFactor: 0.4,
1569
+ containerWidth: element.width,
1570
+ containerHeight: element.height,
1571
+ position: {
1572
+ mx: 0.32,
1573
+ my: 0.3
1574
+ }
1575
+ });
1576
+
1577
+ var di = getDi(element);
1578
+
1579
+ if (di.get('isMarkerVisible')) {
1580
+ drawPath(parentGfx, pathData, {
1581
+ fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1582
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1583
+ strokeWidth: 1
1584
+ });
1585
+ }
1586
+
1587
+ return gateway;
1588
+ },
1589
+ 'bpmn:Gateway': function(parentGfx, element, attrs = {}) {
1590
+ attrs = pickAttrs(attrs, [
1591
+ 'fill',
1592
+ 'stroke'
1593
+ ]);
1594
+
1595
+ return renderGateway(parentGfx, element, attrs);
1596
+ },
1597
+ 'bpmn:Group': function(parentGfx, element, attrs = {}) {
1598
+ attrs = pickAttrs(attrs, [
1599
+ 'fill',
1600
+ 'stroke',
1601
+ 'width',
1602
+ 'height'
1603
+ ]);
1604
+
1605
+ return drawRect(parentGfx, element.width, element.height, TASK_BORDER_RADIUS, {
1606
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1607
+ strokeWidth: 1.5,
1608
+ strokeDasharray: '10, 6, 0, 6',
1609
+ fill: 'none',
1610
+ pointerEvents: 'none',
1611
+ width: getWidth(element, attrs),
1612
+ height: getHeight(element, attrs)
1613
+ });
1614
+ },
1615
+ 'bpmn:InclusiveGateway': function(parentGfx, element, attrs = {}) {
1616
+ attrs = pickAttrs(attrs, [
1617
+ 'fill',
1618
+ 'stroke'
1619
+ ]);
1620
+
1621
+ var gateway = renderGateway(parentGfx, element, attrs);
1622
+
1623
+ drawCircle(parentGfx, element.width, element.height, element.height * 0.24, {
1624
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1625
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1626
+ strokeWidth: 2.5
1627
+ });
1628
+
1629
+ return gateway;
1630
+ },
1631
+ 'bpmn:IntermediateEvent': function(parentGfx, element, attrs = {}) {
1632
+ var { renderIcon = true } = attrs;
1633
+
1634
+ attrs = pickAttrs(attrs, [
1635
+ 'fill',
1636
+ 'stroke'
1637
+ ]);
1638
+
1639
+ var outer = renderEvent(parentGfx, element, {
1640
+ ...attrs,
1641
+ strokeWidth: 1.5
1642
+ });
1643
+
1644
+ drawCircle(parentGfx, element.width, element.height, INNER_OUTER_DIST, {
1645
+ fill: 'none',
1646
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1647
+ strokeWidth: 1.5
1648
+ });
1649
+
1650
+ if (renderIcon) {
1651
+ renderEventIcon(element, parentGfx, attrs);
1652
+ }
1653
+
1654
+ return outer;
1655
+ },
1656
+ 'bpmn:IntermediateCatchEvent': as('bpmn:IntermediateEvent'),
1657
+ 'bpmn:IntermediateThrowEvent': as('bpmn:IntermediateEvent'),
1658
+ 'bpmn:Lane': function(parentGfx, element, attrs = {}) {
1659
+ attrs = pickAttrs(attrs, [
1660
+ 'fill',
1661
+ 'stroke',
1662
+ 'width',
1663
+ 'height'
1664
+ ]);
1665
+
1666
+ return renderLane(parentGfx, element, {
1667
+ ...attrs,
1668
+ fillOpacity: LOW_OPACITY
1669
+ });
1670
+ },
1671
+ 'bpmn:ManualTask': function(parentGfx, element, attrs = {}) {
1672
+ attrs = pickAttrs(attrs, [
1673
+ 'fill',
1674
+ 'stroke'
1675
+ ]);
1676
+
1677
+ var task = renderTask(parentGfx, element, attrs);
1678
+
1679
+ var pathData = pathMap.getScaledPath('TASK_TYPE_MANUAL', {
1680
+ abspos: {
1681
+ x: 17,
1682
+ y: 15
1683
+ }
1684
+ });
1685
+
1686
+ drawPath(parentGfx, pathData, {
1687
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1688
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1689
+ strokeWidth: 0.5
1690
+ });
1691
+
1692
+ return task;
1693
+ },
1694
+ 'bpmn:MessageFlow': function(parentGfx, element, attrs = {}) {
1695
+ attrs = pickAttrs(attrs, [
1696
+ 'fill',
1697
+ 'stroke'
1698
+ ]);
1699
+
1700
+ var semantic = getSemantic(element),
1701
+ di = getDi(element);
1702
+
1703
+ var fill = getFillColor(element, defaultFillColor, attrs.fill),
1704
+ stroke = getStrokeColor(element, defaultStrokeColor, attrs.stroke);
1705
+
1706
+ var path = drawConnectionSegments(parentGfx, element.waypoints, {
1707
+ markerEnd: marker(parentGfx, 'messageflow-end', fill, stroke),
1708
+ markerStart: marker(parentGfx, 'messageflow-start', fill, stroke),
1709
+ stroke,
1710
+ strokeDasharray: '10, 11',
1711
+ strokeWidth: 1.5
1712
+ });
1713
+
1714
+ if (semantic.get('messageRef')) {
1715
+ var midPoint = path.getPointAtLength(path.getTotalLength() / 2);
1716
+
1717
+ var markerPathData = pathMap.getScaledPath('MESSAGE_FLOW_MARKER', {
1718
+ abspos: {
1719
+ x: midPoint.x,
1720
+ y: midPoint.y
1721
+ }
1722
+ });
1723
+
1724
+ var messageAttrs = {
1725
+ strokeWidth: 1
1726
+ };
1727
+
1728
+ if (di.get('messageVisibleKind') === 'initiating') {
1729
+ messageAttrs.fill = fill;
1730
+ messageAttrs.stroke = stroke;
1731
+ } else {
1732
+ messageAttrs.fill = stroke;
1733
+ messageAttrs.stroke = fill;
1734
+ }
1735
+
1736
+ var message = drawPath(parentGfx, markerPathData, messageAttrs);
1737
+
1738
+ var messageRef = semantic.get('messageRef'),
1739
+ name = messageRef.get('name');
1740
+
1741
+ var label = renderLabel(parentGfx, name, {
1742
+ align: 'center-top',
1743
+ fitBox: true,
1744
+ style: {
1745
+ fill: stroke
1746
+ }
1747
+ });
1748
+
1749
+ var messageBounds = message.getBBox(),
1750
+ labelBounds = label.getBBox();
1751
+
1752
+ var translateX = midPoint.x - labelBounds.width / 2,
1753
+ translateY = midPoint.y + messageBounds.height / 2 + ELEMENT_LABEL_DISTANCE;
1754
+
1755
+ transform(label, translateX, translateY, 0);
1756
+ }
1757
+
1758
+ return path;
1759
+ },
1760
+ 'bpmn:ParallelGateway': function(parentGfx, element, attrs = {}) {
1761
+ attrs = pickAttrs(attrs, [
1762
+ 'fill',
1763
+ 'stroke'
1764
+ ]);
1765
+
1766
+ var diamond = renderGateway(parentGfx, element, attrs);
1767
+
1768
+ var pathData = pathMap.getScaledPath('GATEWAY_PARALLEL', {
1769
+ xScaleFactor: 0.6,
1770
+ yScaleFactor: 0.6,
1771
+ containerWidth: element.width,
1772
+ containerHeight: element.height,
1773
+ position: {
1774
+ mx: 0.46,
1775
+ my: 0.2
1776
+ }
1777
+ });
1778
+
1779
+ drawPath(parentGfx, pathData, {
1780
+ fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1781
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1782
+ strokeWidth: 1
1783
+ });
1784
+
1785
+ return diamond;
1786
+ },
1787
+ 'bpmn:Participant': function(parentGfx, element, attrs = {}) {
1788
+ attrs = pickAttrs(attrs, [
1789
+ 'fill',
1790
+ 'stroke',
1791
+ 'width',
1792
+ 'height'
1793
+ ]);
1794
+
1795
+ var participant = renderLane(parentGfx, element, attrs);
1796
+
1797
+ var expandedParticipant = isExpanded(element);
1798
+ var horizontalParticipant = isHorizontal(element);
1799
+
1800
+ var semantic = getSemantic(element),
1801
+ name = semantic.get('name');
1802
+
1803
+ if (expandedParticipant) {
1804
+ var waypoints = horizontalParticipant ? [
1805
+ {
1806
+ x: 30,
1807
+ y: 0
1808
+ },
1809
+ {
1810
+ x: 30,
1811
+ y: getHeight(element, attrs)
1812
+ }
1813
+ ] : [
1814
+ {
1815
+ x: 0,
1816
+ y: 30
1817
+ },
1818
+ {
1819
+ x: getWidth(element, attrs),
1820
+ y: 30
1821
+ }
1822
+ ];
1823
+
1824
+ drawLine(parentGfx, waypoints, {
1825
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1826
+ strokeWidth: PARTICIPANT_STROKE_WIDTH
1827
+ });
1828
+
1829
+ renderLaneLabel(parentGfx, name, element, attrs);
1830
+ } else {
1831
+ var bounds = getBounds(element, attrs);
1832
+
1833
+ if (!horizontalParticipant) {
1834
+ bounds.height = getWidth(element, attrs);
1835
+ bounds.width = getHeight(element, attrs);
1836
+ }
1837
+
1838
+ var textBox = renderLabel(parentGfx, name, {
1839
+ box: bounds,
1840
+ align: 'center-middle',
1841
+ style: {
1842
+ fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)
1843
+ }
1844
+ });
1845
+
1846
+ if (!horizontalParticipant) {
1847
+ var top = -1 * getHeight(element, attrs);
1848
+ transform(textBox, 0, -top, 270);
1849
+ }
1850
+ }
1851
+
1852
+ if (semantic.get('participantMultiplicity')) {
1853
+ renderTaskMarker('ParticipantMultiplicityMarker', parentGfx, element, attrs);
1854
+ }
1855
+
1856
+ return participant;
1857
+ },
1858
+ 'bpmn:ReceiveTask' : function(parentGfx, element, attrs = {}) {
1859
+ attrs = pickAttrs(attrs, [
1860
+ 'fill',
1861
+ 'stroke'
1862
+ ]);
1863
+
1864
+ var semantic = getSemantic(element);
1865
+
1866
+ var task = renderTask(parentGfx, element, attrs);
1867
+
1868
+ var pathData;
1869
+
1870
+ if (semantic.get('instantiate')) {
1871
+ drawCircle(parentGfx, 28, 28, 20 * 0.22, {
1872
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1873
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1874
+ strokeWidth: 1
1875
+ });
1876
+
1877
+ pathData = pathMap.getScaledPath('TASK_TYPE_INSTANTIATING_SEND', {
1878
+ abspos: {
1879
+ x: 7.77,
1880
+ y: 9.52
1881
+ }
1882
+ });
1883
+ } else {
1884
+ pathData = pathMap.getScaledPath('TASK_TYPE_SEND', {
1885
+ xScaleFactor: 0.9,
1886
+ yScaleFactor: 0.9,
1887
+ containerWidth: 21,
1888
+ containerHeight: 14,
1889
+ position: {
1890
+ mx: 0.3,
1891
+ my: 0.4
1892
+ }
1893
+ });
1894
+ }
1895
+
1896
+ drawPath(parentGfx, pathData, {
1897
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1898
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1899
+ strokeWidth: 1
1900
+ });
1901
+
1902
+ return task;
1903
+ },
1904
+ 'bpmn:ScriptTask': function(parentGfx, element, attrs = {}) {
1905
+ attrs = pickAttrs(attrs, [
1906
+ 'fill',
1907
+ 'stroke'
1908
+ ]);
1909
+
1910
+ var task = renderTask(parentGfx, element, attrs);
1911
+
1912
+ var pathData = pathMap.getScaledPath('TASK_TYPE_SCRIPT', {
1913
+ abspos: {
1914
+ x: 15,
1915
+ y: 20
1916
+ }
1917
+ });
1918
+
1919
+ drawPath(parentGfx, pathData, {
1920
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
1921
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1922
+ strokeWidth: 1
1923
+ });
1924
+
1925
+ return task;
1926
+ },
1927
+ 'bpmn:SendTask': function(parentGfx, element, attrs = {}) {
1928
+ attrs = pickAttrs(attrs, [
1929
+ 'fill',
1930
+ 'stroke'
1931
+ ]);
1932
+
1933
+ var task = renderTask(parentGfx, element, attrs);
1934
+
1935
+ var pathData = pathMap.getScaledPath('TASK_TYPE_SEND', {
1936
+ xScaleFactor: 1,
1937
+ yScaleFactor: 1,
1938
+ containerWidth: 21,
1939
+ containerHeight: 14,
1940
+ position: {
1941
+ mx: 0.285,
1942
+ my: 0.357
1943
+ }
1944
+ });
1945
+
1946
+ drawPath(parentGfx, pathData, {
1947
+ fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
1948
+ stroke: getFillColor(element, defaultFillColor, attrs.fill),
1949
+ strokeWidth: 1
1950
+ });
1951
+
1952
+ return task;
1953
+ },
1954
+ 'bpmn:SequenceFlow': function(parentGfx, element, attrs = {}) {
1955
+ attrs = pickAttrs(attrs, [
1956
+ 'fill',
1957
+ 'stroke'
1958
+ ]);
1959
+
1960
+ var fill = getFillColor(element, defaultFillColor, attrs.fill),
1961
+ stroke = getStrokeColor(element, defaultStrokeColor, attrs.stroke);
1962
+
1963
+ var connection = drawConnectionSegments(parentGfx, element.waypoints, {
1964
+ markerEnd: marker(parentGfx, 'sequenceflow-end', fill, stroke),
1965
+ stroke
1966
+ });
1967
+
1968
+ var semantic = getSemantic(element);
1969
+
1970
+ var { source } = element;
1971
+
1972
+ if (source) {
1973
+ var sourceSemantic = getSemantic(source);
1974
+
1975
+ // conditional flow marker
1976
+ if (semantic.get('conditionExpression') && is(sourceSemantic, 'bpmn:Activity')) {
1977
+ svgAttr(connection, {
1978
+ markerStart: marker(parentGfx, 'conditional-flow-marker', fill, stroke)
1979
+ });
1980
+ }
1981
+
1982
+ // default marker
1983
+ if (sourceSemantic.get('default') && (is(sourceSemantic, 'bpmn:Gateway') || is(sourceSemantic, 'bpmn:Activity')) &&
1984
+ sourceSemantic.get('default') === semantic) {
1985
+ svgAttr(connection, {
1986
+ markerStart: marker(parentGfx, 'conditional-default-flow-marker', fill, stroke)
1987
+ });
1988
+ }
1989
+ }
1990
+
1991
+ return connection;
1992
+ },
1993
+ 'bpmn:ServiceTask': function(parentGfx, element, attrs = {}) {
1994
+ attrs = pickAttrs(attrs, [
1995
+ 'fill',
1996
+ 'stroke'
1997
+ ]);
1998
+
1999
+ var task = renderTask(parentGfx, element, attrs);
2000
+
2001
+ drawCircle(parentGfx, 10, 10, {
2002
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
2003
+ stroke: 'none',
2004
+ transform: 'translate(6, 6)'
2005
+ });
2006
+
2007
+ var pathDataService1 = pathMap.getScaledPath('TASK_TYPE_SERVICE', {
2008
+ abspos: {
2009
+ x: 12,
2010
+ y: 18
2011
+ }
2012
+ });
2013
+
2014
+ drawPath(parentGfx, pathDataService1, {
2015
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
2016
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2017
+ strokeWidth: 1
2018
+ });
2019
+
2020
+ drawCircle(parentGfx, 10, 10, {
2021
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
2022
+ stroke: 'none',
2023
+ transform: 'translate(11, 10)'
2024
+ });
2025
+
2026
+ var pathDataService2 = pathMap.getScaledPath('TASK_TYPE_SERVICE', {
2027
+ abspos: {
2028
+ x: 17,
2029
+ y: 22
2030
+ }
2031
+ });
2032
+
2033
+ drawPath(parentGfx, pathDataService2, {
2034
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
2035
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2036
+ strokeWidth: 1
2037
+ });
2038
+
2039
+ return task;
2040
+ },
2041
+ 'bpmn:StartEvent': function(parentGfx, element, attrs = {}) {
2042
+ var { renderIcon = true } = attrs;
2043
+
2044
+ attrs = pickAttrs(attrs, [
2045
+ 'fill',
2046
+ 'stroke'
2047
+ ]);
2048
+
2049
+ var semantic = getSemantic(element);
2050
+
2051
+ if (!semantic.get('isInterrupting')) {
2052
+ attrs = {
2053
+ ...attrs,
2054
+ strokeDasharray: '6'
2055
+ };
2056
+ }
2057
+
2058
+ var event = renderEvent(parentGfx, element, attrs);
2059
+
2060
+ if (renderIcon) {
2061
+ renderEventIcon(element, parentGfx, attrs);
2062
+ }
2063
+
2064
+ return event;
2065
+ },
2066
+ 'bpmn:SubProcess': function(parentGfx, element, attrs = {}) {
2067
+ if (isExpanded(element)) {
2068
+ attrs = pickAttrs(attrs, [
2069
+ 'fill',
2070
+ 'stroke',
2071
+ 'width',
2072
+ 'height'
2073
+ ]);
2074
+ } else {
2075
+ attrs = pickAttrs(attrs, [
2076
+ 'fill',
2077
+ 'stroke'
2078
+ ]);
2079
+ }
2080
+
2081
+ return renderSubProcess(parentGfx, element, attrs);
2082
+ },
2083
+ 'bpmn:Task': function(parentGfx, element, attrs = {}) {
2084
+ attrs = pickAttrs(attrs, [
2085
+ 'fill',
2086
+ 'stroke'
2087
+ ]);
2088
+
2089
+ return renderTask(parentGfx, element, attrs);
2090
+ },
2091
+ 'bpmn:TextAnnotation': function(parentGfx, element, attrs = {}) {
2092
+ attrs = pickAttrs(attrs, [
2093
+ 'fill',
2094
+ 'stroke',
2095
+ 'width',
2096
+ 'height'
2097
+ ]);
2098
+
2099
+ var {
2100
+ width,
2101
+ height
2102
+ } = getBounds(element, attrs);
2103
+
2104
+ var textElement = drawRect(parentGfx, width, height, 0, 0, {
2105
+ fill: 'none',
2106
+ stroke: 'none'
2107
+ });
2108
+
2109
+ var textPathData = pathMap.getScaledPath('TEXT_ANNOTATION', {
2110
+ xScaleFactor: 1,
2111
+ yScaleFactor: 1,
2112
+ containerWidth: width,
2113
+ containerHeight: height,
2114
+ position: {
2115
+ mx: 0.0,
2116
+ my: 0.0
2117
+ }
2118
+ });
2119
+
2120
+ drawPath(parentGfx, textPathData, {
2121
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke)
2122
+ });
2123
+
2124
+ var semantic = getSemantic(element),
2125
+ text = semantic.get('text') || '';
2126
+
2127
+ renderLabel(parentGfx, text, {
2128
+ align: 'left-top',
2129
+ box: getBounds(element, attrs),
2130
+ padding: 7,
2131
+ style: {
2132
+ fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)
2133
+ }
2134
+ });
2135
+
2136
+ return textElement;
2137
+ },
2138
+ 'bpmn:Transaction': function(parentGfx, element, attrs = {}) {
2139
+ if (isExpanded(element)) {
2140
+ attrs = pickAttrs(attrs, [
2141
+ 'fill',
2142
+ 'stroke',
2143
+ 'width',
2144
+ 'height'
2145
+ ]);
2146
+ } else {
2147
+ attrs = pickAttrs(attrs, [
2148
+ 'fill',
2149
+ 'stroke'
2150
+ ]);
2151
+ }
2152
+
2153
+ var outer = renderSubProcess(parentGfx, element, {
2154
+ strokeWidth: 1.5,
2155
+ ...attrs
2156
+ });
2157
+
2158
+ var innerAttrs = styles.style([ 'no-fill', 'no-events' ], {
2159
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2160
+ strokeWidth: 1.5
2161
+ });
2162
+
2163
+ var expanded = isExpanded(element);
2164
+
2165
+ if (!expanded) {
2166
+ attrs = {};
2167
+ }
2168
+
2169
+ drawRect(
2170
+ parentGfx,
2171
+ getWidth(element, attrs),
2172
+ getHeight(element, attrs),
2173
+ TASK_BORDER_RADIUS - INNER_OUTER_DIST,
2174
+ INNER_OUTER_DIST,
2175
+ innerAttrs
2176
+ );
2177
+
2178
+ return outer;
2179
+ },
2180
+ 'bpmn:UserTask': function(parentGfx, element, attrs = {}) {
2181
+ attrs = pickAttrs(attrs, [
2182
+ 'fill',
2183
+ 'stroke'
2184
+ ]);
2185
+
2186
+ var task = renderTask(parentGfx, element, attrs);
2187
+
2188
+ var x = 15;
2189
+ var y = 12;
2190
+
2191
+ var pathDataUser1 = pathMap.getScaledPath('TASK_TYPE_USER_1', {
2192
+ abspos: {
2193
+ x: x,
2194
+ y: y
2195
+ }
2196
+ });
2197
+
2198
+ drawPath(parentGfx, pathDataUser1, {
2199
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
2200
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2201
+ strokeWidth: 0.5
2202
+ });
2203
+
2204
+ var pathDataUser2 = pathMap.getScaledPath('TASK_TYPE_USER_2', {
2205
+ abspos: {
2206
+ x: x,
2207
+ y: y
2208
+ }
2209
+ });
2210
+
2211
+ drawPath(parentGfx, pathDataUser2, {
2212
+ fill: getFillColor(element, defaultFillColor, attrs.fill),
2213
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2214
+ strokeWidth: 0.5
2215
+ });
2216
+
2217
+ var pathDataUser3 = pathMap.getScaledPath('TASK_TYPE_USER_3', {
2218
+ abspos: {
2219
+ x: x,
2220
+ y: y
2221
+ }
2222
+ });
2223
+
2224
+ drawPath(parentGfx, pathDataUser3, {
2225
+ fill: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2226
+ stroke: getStrokeColor(element, defaultStrokeColor, attrs.stroke),
2227
+ strokeWidth: 0.5
2228
+ });
2229
+
2230
+ return task;
2231
+ },
2232
+ 'label': function(parentGfx, element, attrs = {}) {
2233
+ return renderExternalLabel(parentGfx, element, attrs);
2234
+ }
2235
+ };
2236
+
2237
+ // extension API, use at your own risk
2238
+ this._drawPath = drawPath;
2239
+
2240
+ this._renderer = renderer;
2241
+ }
2242
+
2243
+
2244
+ inherits(BpmnRenderer, BaseRenderer);
2245
+
2246
+ BpmnRenderer.$inject = [
2247
+ 'config.bpmnRenderer',
2248
+ 'eventBus',
2249
+ 'styles',
2250
+ 'pathMap',
2251
+ 'canvas',
2252
+ 'textRenderer'
2253
+ ];
2254
+
2255
+
2256
+ /**
2257
+ * @param {Element} element
2258
+ *
2259
+ * @return {boolean}
2260
+ */
2261
+ BpmnRenderer.prototype.canRender = function(element) {
2262
+ return is(element, 'bpmn:BaseElement');
2263
+ };
2264
+
2265
+ /**
2266
+ * Draw shape into parentGfx.
2267
+ *
2268
+ * @param {SVGElement} parentGfx
2269
+ * @param {Element} element
2270
+ * @param {Attrs} [attrs]
2271
+ *
2272
+ * @return {SVGElement} mainGfx
2273
+ */
2274
+ BpmnRenderer.prototype.drawShape = function(parentGfx, element, attrs = {}) {
2275
+ var { type } = element;
2276
+
2277
+ var handler = this._renderer(type);
2278
+
2279
+ return handler(parentGfx, element, attrs);
2280
+ };
2281
+
2282
+ /**
2283
+ * Draw connection into parentGfx.
2284
+ *
2285
+ * @param {SVGElement} parentGfx
2286
+ * @param {Element} element
2287
+ * @param {Attrs} [attrs]
2288
+ *
2289
+ * @return {SVGElement} mainGfx
2290
+ */
2291
+ BpmnRenderer.prototype.drawConnection = function(parentGfx, element, attrs = {}) {
2292
+ var { type } = element;
2293
+
2294
+ var handler = this._renderer(type);
2295
+
2296
+ return handler(parentGfx, element, attrs);
2297
+ };
2298
+
2299
+ /**
2300
+ * Get shape path.
2301
+ *
2302
+ * @param {Element} element
2303
+ *
2304
+ * @return {string} path
2305
+ */
2306
+ BpmnRenderer.prototype.getShapePath = function(element) {
2307
+ if (is(element, 'bpmn:Event')) {
2308
+ return getCirclePath(element);
2309
+ }
2310
+
2311
+ if (is(element, 'bpmn:Activity')) {
2312
+ return getRoundRectPath(element, TASK_BORDER_RADIUS);
2313
+ }
2314
+
2315
+ if (is(element, 'bpmn:Gateway')) {
2316
+ return getDiamondPath(element);
2317
+ }
2318
+
2319
+ return getRectPath(element);
2320
+ };
2321
+
2322
+ /**
2323
+ * Pick attributes if they exist.
2324
+ *
2325
+ * @param {Object} attrs
2326
+ * @param {string[]} keys
2327
+ *
2328
+ * @returns {Object}
2329
+ */
2330
+ function pickAttrs(attrs, keys = []) {
2331
+ return keys.reduce((pickedAttrs, key) => {
2332
+ if (attrs[ key ]) {
2333
+ pickedAttrs[ key ] = attrs[ key ];
2334
+ }
2335
+
2336
+ return pickedAttrs;
2337
+ }, {});
2341
2338
  }