bpmn-js 0.20.6 → 0.22.1

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 (410) hide show
  1. package/.eslintrc +33 -33
  2. package/.npmignore +8 -8
  3. package/.travis.yml +19 -17
  4. package/.wiredeps +88 -88
  5. package/CONTRIBUTING.md +55 -55
  6. package/Gruntfile.js +129 -129
  7. package/LICENSE +22 -22
  8. package/README.md +113 -113
  9. package/assets/bpmn-font/css/bpmn-embedded.css +159 -159
  10. package/assets/bpmn-font/css/bpmn.css +161 -161
  11. package/assets/bpmn-font/font/bpmn.svg +116 -116
  12. package/docs/architecture/overview.svg +48 -48
  13. package/docs/project/COMMIT_MESSAGES.md +82 -82
  14. package/docs/project/SETUP.md +66 -66
  15. package/docs/project/setup-alternative.sh +41 -41
  16. package/docs/project/setup.bat +45 -45
  17. package/docs/project/setup.sh +40 -40
  18. package/docs/translations.json +97 -97
  19. package/lib/Modeler.js +208 -208
  20. package/lib/NavigatedViewer.js +27 -27
  21. package/lib/Viewer.js +503 -503
  22. package/lib/core/index.js +5 -5
  23. package/lib/draw/BpmnRenderer.js +1934 -1934
  24. package/lib/draw/PathMap.js +478 -478
  25. package/lib/draw/index.js +5 -5
  26. package/lib/features/auto-resize/BpmnAutoResize.js +34 -34
  27. package/lib/features/auto-resize/BpmnAutoResizeProvider.js +51 -51
  28. package/lib/features/auto-resize/index.js +5 -5
  29. package/lib/features/context-pad/ContextPadProvider.js +374 -374
  30. package/lib/features/context-pad/index.js +11 -11
  31. package/lib/features/copy-paste/BpmnCopyPaste.js +157 -154
  32. package/lib/features/copy-paste/index.js +7 -7
  33. package/lib/features/distribute-elements/BpmnDistributeElements.js +34 -34
  34. package/lib/features/distribute-elements/index.js +7 -7
  35. package/lib/features/editor-actions/BpmnEditorActions.js +130 -130
  36. package/lib/features/editor-actions/index.js +15 -15
  37. package/lib/features/global-connect/BpmnGlobalConnect.js +49 -49
  38. package/lib/features/global-connect/index.js +7 -7
  39. package/lib/features/keyboard/BpmnKeyBindings.js +72 -72
  40. package/lib/features/keyboard/index.js +7 -7
  41. package/lib/features/label-editing/LabelEditingPreview.js +122 -0
  42. package/lib/features/label-editing/LabelEditingProvider.js +292 -193
  43. package/lib/features/label-editing/LabelUtil.js +43 -43
  44. package/lib/features/label-editing/cmd/UpdateLabelHandler.js +116 -112
  45. package/lib/features/label-editing/index.js +14 -9
  46. package/lib/features/modeling/BpmnFactory.js +97 -97
  47. package/lib/features/modeling/BpmnLayouter.js +191 -191
  48. package/lib/features/modeling/BpmnUpdater.js +692 -688
  49. package/lib/features/modeling/ElementFactory.js +218 -218
  50. package/lib/features/modeling/Modeling.js +183 -183
  51. package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
  52. package/lib/features/modeling/behavior/CopyPasteBehavior.js +69 -69
  53. package/lib/features/modeling/behavior/CreateBoundaryEventBehavior.js +51 -51
  54. package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +37 -37
  55. package/lib/features/modeling/behavior/CreateParticipantBehavior.js +91 -91
  56. package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +151 -151
  57. package/lib/features/modeling/behavior/DeleteLaneBehavior.js +107 -107
  58. package/lib/features/modeling/behavior/DropOnFlowBehavior.js +165 -131
  59. package/lib/features/modeling/behavior/ImportDockingFix.js +80 -80
  60. package/lib/features/modeling/behavior/LabelBehavior.js +222 -222
  61. package/lib/features/modeling/behavior/ModelingFeedback.js +50 -50
  62. package/lib/features/modeling/behavior/RemoveElementBehavior.js +73 -73
  63. package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +50 -50
  64. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +128 -128
  65. package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +118 -116
  66. package/lib/features/modeling/behavior/ResizeLaneBehavior.js +59 -59
  67. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js +138 -138
  68. package/lib/features/modeling/behavior/UnclaimIdBehavior.js +27 -27
  69. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js +54 -54
  70. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +156 -156
  71. package/lib/features/modeling/behavior/index.js +44 -44
  72. package/lib/features/modeling/behavior/util/GeometricUtil.js +129 -129
  73. package/lib/features/modeling/behavior/util/LabelLayoutUtil.js +218 -218
  74. package/lib/features/modeling/behavior/util/LineAttachmentUtil.js +233 -233
  75. package/lib/features/modeling/behavior/util/LineIntersect.js +36 -36
  76. package/lib/features/modeling/cmd/AddLaneHandler.js +83 -83
  77. package/lib/features/modeling/cmd/IdClaimHandler.js +41 -41
  78. package/lib/features/modeling/cmd/ResizeLaneHandler.js +125 -125
  79. package/lib/features/modeling/cmd/SplitLaneHandler.js +82 -82
  80. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +78 -78
  81. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +185 -185
  82. package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +264 -264
  83. package/lib/features/modeling/index.js +23 -23
  84. package/lib/features/modeling/util/LaneUtil.js +157 -157
  85. package/lib/features/modeling/util/ModelingUtil.js +48 -48
  86. package/lib/features/ordering/BpmnOrderingProvider.js +147 -147
  87. package/lib/features/ordering/index.js +6 -6
  88. package/lib/features/palette/PaletteProvider.js +158 -158
  89. package/lib/features/palette/index.js +13 -13
  90. package/lib/features/popup-menu/ReplaceMenuProvider.js +479 -479
  91. package/lib/features/popup-menu/index.js +7 -7
  92. package/lib/features/popup-menu/util/TypeUtil.js +41 -41
  93. package/lib/features/replace/BpmnReplace.js +197 -197
  94. package/lib/features/replace/ReplaceOptions.js +787 -787
  95. package/lib/features/replace/index.js +7 -7
  96. package/lib/features/replace-preview/BpmnReplacePreview.js +113 -113
  97. package/lib/features/replace-preview/index.js +5 -5
  98. package/lib/features/rules/BpmnRules.js +807 -806
  99. package/lib/features/rules/index.js +7 -7
  100. package/lib/features/search/BpmnSearchProvider.js +128 -128
  101. package/lib/features/search/index.js +7 -7
  102. package/lib/features/snapping/BpmnSnapping.js +511 -495
  103. package/lib/features/snapping/BpmnSnappingUtil.js +159 -159
  104. package/lib/features/snapping/index.js +3 -3
  105. package/lib/import/BpmnImporter.js +302 -302
  106. package/lib/import/BpmnTreeWalker.js +445 -445
  107. package/lib/import/Importer.js +69 -69
  108. package/lib/import/Util.js +8 -8
  109. package/lib/import/index.js +5 -5
  110. package/lib/util/DiUtil.js +60 -60
  111. package/lib/util/LabelUtil.js +139 -139
  112. package/lib/util/ModelUtil.js +31 -31
  113. package/lib/util/PoweredByUtil.js +82 -82
  114. package/lib/util/model/ModelCloneHelper.js +201 -201
  115. package/lib/util/model/ModelCloneUtils.js +35 -35
  116. package/package.json +22 -22
  117. package/resources/initial.bpmn +12 -12
  118. package/resources/screencast.gif +0 -0
  119. package/tasks/banner.txt +11 -11
  120. package/tasks/bundle.js +162 -162
  121. package/test/TestHelper.js +17 -17
  122. package/test/config/karma.unit.js +46 -46
  123. package/test/config/translation-reporter.js +48 -48
  124. package/test/fixtures/bpmn/align-elements.bpmn +136 -136
  125. package/test/fixtures/bpmn/basic.bpmn +17 -17
  126. package/test/fixtures/bpmn/boundary-events.bpmn +59 -59
  127. package/test/fixtures/bpmn/collaboration/collaboration-empty-participant.bpmn +13 -13
  128. package/test/fixtures/bpmn/collaboration/collaboration-message-flows.bpmn +89 -89
  129. package/test/fixtures/bpmn/collaboration/collaboration-participant.bpmn +59 -59
  130. package/test/fixtures/bpmn/collaboration/process-empty.bpmn +6 -6
  131. package/test/fixtures/bpmn/collaboration/process.bpmn +47 -47
  132. package/test/fixtures/bpmn/collaboration-data-items.bpmn +81 -81
  133. package/test/fixtures/bpmn/collaboration-message-flows.bpmn +82 -82
  134. package/test/fixtures/bpmn/collaboration-sequence-flows.bpmn +83 -83
  135. package/test/fixtures/bpmn/collaboration.bpmn +50 -50
  136. package/test/fixtures/bpmn/complex.bpmn +2151 -2151
  137. package/test/fixtures/bpmn/conditions.bpmn +82 -82
  138. package/test/fixtures/bpmn/containers.bpmn +128 -128
  139. package/test/fixtures/bpmn/distribute-elements-filtering.bpmn +58 -58
  140. package/test/fixtures/bpmn/distribute-elements.bpmn +232 -232
  141. package/test/fixtures/bpmn/draw/activity-markers-combination.bpmn +141 -141
  142. package/test/fixtures/bpmn/draw/activity-markers-simple.bpmn +47 -47
  143. package/test/fixtures/bpmn/draw/activity-markers.bpmn +212 -212
  144. package/test/fixtures/bpmn/draw/associations.bpmn +55 -55
  145. package/test/fixtures/bpmn/draw/boundary-event-with-refnode.bpmn +81 -81
  146. package/test/fixtures/bpmn/draw/boundary-event-without-refnode.bpmn +81 -81
  147. package/test/fixtures/bpmn/draw/boundary-event-z-index.bpmn +82 -82
  148. package/test/fixtures/bpmn/draw/call-activity.bpmn +12 -12
  149. package/test/fixtures/bpmn/draw/colors.bpmn +411 -411
  150. package/test/fixtures/bpmn/draw/conditional-flow-default.bpmn +100 -100
  151. package/test/fixtures/bpmn/draw/conditional-flow-gateways.bpmn +72 -72
  152. package/test/fixtures/bpmn/draw/conditional-flow-typed-task.bpmn +33 -33
  153. package/test/fixtures/bpmn/draw/conditional-flow.bpmn +248 -248
  154. package/test/fixtures/bpmn/draw/data-objects.bpmn +265 -265
  155. package/test/fixtures/bpmn/draw/event-subprocesses-collapsed.bpmn +200 -200
  156. package/test/fixtures/bpmn/draw/event-subprocesses-expanded.bpmn +274 -274
  157. package/test/fixtures/bpmn/draw/events-interrupting.bpmn +370 -370
  158. package/test/fixtures/bpmn/draw/events.bpmn +374 -374
  159. package/test/fixtures/bpmn/draw/gateway-type-default.bpmn +45 -45
  160. package/test/fixtures/bpmn/draw/gateways.bpmn +61 -61
  161. package/test/fixtures/bpmn/draw/group.bpmn +24 -24
  162. package/test/fixtures/bpmn/draw/message-marker.bpmn +112 -112
  163. package/test/fixtures/bpmn/draw/pools-with-collection-marker.bpmn +104 -104
  164. package/test/fixtures/bpmn/draw/pools.bpmn +82 -82
  165. package/test/fixtures/bpmn/draw/task-types.bpmn +77 -77
  166. package/test/fixtures/bpmn/draw/text-annotation.bpmn +71 -71
  167. package/test/fixtures/bpmn/draw/xor.bpmn +45 -45
  168. package/test/fixtures/bpmn/empty-definitions.bpmn +4 -4
  169. package/test/fixtures/bpmn/error/categoryValue.bpmn +26 -26
  170. package/test/fixtures/bpmn/error/di-plane-no-bpmn-element.bpmn +9 -9
  171. package/test/fixtures/bpmn/error/duplicate-ids.bpmn +14 -14
  172. package/test/fixtures/bpmn/error/invalid-child.bpmn +6 -6
  173. package/test/fixtures/bpmn/error/missing-namespace.bpmn +12 -12
  174. package/test/fixtures/bpmn/event-sub-processes.bpmn +47 -47
  175. package/test/fixtures/bpmn/extension/camunda.bpmn +52 -52
  176. package/test/fixtures/bpmn/extension/custom-override.bpmn +53 -53
  177. package/test/fixtures/bpmn/extension/custom.bpmn +53 -53
  178. package/test/fixtures/bpmn/features/copy-paste/basic.bpmn +111 -111
  179. package/test/fixtures/bpmn/features/copy-paste/collaboration-multiple.bpmn +102 -102
  180. package/test/fixtures/bpmn/features/copy-paste/collaboration.bpmn +74 -74
  181. package/test/fixtures/bpmn/features/copy-paste/data-associations.bpmn +61 -61
  182. package/test/fixtures/bpmn/features/copy-paste/properties.bpmn +43 -43
  183. package/test/fixtures/bpmn/features/drop/drop.bpmn +41 -41
  184. package/test/fixtures/bpmn/features/drop/recursive-task.bpmn +37 -37
  185. package/test/fixtures/bpmn/features/label-editing/labels.bpmn +178 -248
  186. package/test/fixtures/bpmn/features/modeling/update-label.bpmn +24 -24
  187. package/test/fixtures/bpmn/features/replace/01_replace.bpmn +193 -193
  188. package/test/fixtures/bpmn/features/replace/association-gateways.bpmn +173 -173
  189. package/test/fixtures/bpmn/features/replace/cancel-events.bpmn +49 -49
  190. package/test/fixtures/bpmn/features/replace/clone-properties.bpmn +141 -141
  191. package/test/fixtures/bpmn/features/replace/connection.bpmn +42 -42
  192. package/test/fixtures/bpmn/features/rules/event-based-gateway-outgoing-edge.bpmn +72 -72
  193. package/test/fixtures/bpmn/features/rules/link-event.bpmn +35 -35
  194. package/test/fixtures/bpmn/features/rules/text-annotation-association.bpmn +30 -30
  195. package/test/fixtures/bpmn/flow-markers.bpmn +212 -212
  196. package/test/fixtures/bpmn/import/boundaryEvent.bpmn +33 -33
  197. package/test/fixtures/bpmn/import/collaboration.bpmn +50 -50
  198. package/test/fixtures/bpmn/import/collapsed/collaboration.bpmn +76 -76
  199. package/test/fixtures/bpmn/import/collapsed/process.bpmn +84 -84
  200. package/test/fixtures/bpmn/import/collapsed/processWithChildren.bpmn +273 -273
  201. package/test/fixtures/bpmn/import/default-attrs.bpmn +24 -24
  202. package/test/fixtures/bpmn/import/error/boundaryEvent-invalidAttachToRef.bpmn +30 -30
  203. package/test/fixtures/bpmn/import/error/boundaryEvent-missingAttachToRef.bpmn +33 -33
  204. package/test/fixtures/bpmn/import/error/dangling-process-message-flow.bpmn +81 -81
  205. package/test/fixtures/bpmn/import/error/invalid-flow-element.bpmn +35 -35
  206. package/test/fixtures/bpmn/import/error/multiple-dis.bpmn +23 -23
  207. package/test/fixtures/bpmn/import/labels/collaboration-message-flows.bpmn +41 -41
  208. package/test/fixtures/bpmn/import/labels/collaboration.bpmn +72 -72
  209. package/test/fixtures/bpmn/import/labels/embedded.bpmn +39 -39
  210. package/test/fixtures/bpmn/import/labels/external-no-di.bpmn +42 -42
  211. package/test/fixtures/bpmn/import/labels/external.bpmn +69 -69
  212. package/test/fixtures/bpmn/import/position/position-testcase.bpmn +57 -57
  213. package/test/fixtures/bpmn/import/process.bpmn +60 -60
  214. package/test/fixtures/bpmn/nested-subprocesses.bpmn +118 -118
  215. package/test/fixtures/bpmn/sequence-flows.bpmn +60 -60
  216. package/test/fixtures/bpmn/simple-cropping.bpmn +84 -84
  217. package/test/fixtures/bpmn/simple-resizable.bpmn +50 -50
  218. package/test/fixtures/bpmn/simple.bpmn +60 -60
  219. package/test/fixtures/json/model/camunda.json +1042 -1042
  220. package/test/fixtures/json/model/custom-override.json +39 -39
  221. package/test/fixtures/json/model/custom.json +39 -39
  222. package/test/helper/TranslationCollector.js +17 -17
  223. package/test/helper/index.js +249 -249
  224. package/test/integration/CustomElementsSpec.js +223 -223
  225. package/test/integration/ReimportSpec.js +89 -89
  226. package/test/integration/SimpleModelingSpec.js +29 -29
  227. package/test/integration/custom-elements/CustomElementFactory.js +77 -77
  228. package/test/integration/custom-elements/CustomRenderer.js +151 -151
  229. package/test/integration/custom-elements/CustomRules.js +148 -148
  230. package/test/integration/custom-elements/CustomUpdater.js +115 -115
  231. package/test/integration/custom-elements/index.js +7 -7
  232. package/test/integration/model/BpmnModdleSpec.js +65 -65
  233. package/test/matchers/JSONMatcher.js +19 -19
  234. package/test/spec/ModelerSpec.js +401 -401
  235. package/test/spec/NavigatedViewerSpec.js +58 -58
  236. package/test/spec/ViewerSpec.js +977 -977
  237. package/test/spec/draw/BpmnRendererSpec.js +311 -311
  238. package/test/spec/environment/MockingSpec.js +53 -53
  239. package/test/spec/features/align-elements/BpmnAlignElementsSpec.js +137 -137
  240. package/test/spec/features/auto-resize/AutoResize.lanes.bpmn +54 -54
  241. package/test/spec/features/auto-resize/AutoResize.multi-selection.bpmn +22 -22
  242. package/test/spec/features/auto-resize/AutoResize.nested-sub-processes.bpmn +47 -47
  243. package/test/spec/features/auto-resize/AutoResize.participant.bpmn +38 -38
  244. package/test/spec/features/auto-resize/AutoResize.space-tool.bpmn +38 -38
  245. package/test/spec/features/auto-resize/AutoResize.sub-processes.bpmn +37 -37
  246. package/test/spec/features/auto-resize/AutoResizeSpec.js +607 -607
  247. package/test/spec/features/context-pad/ContextPad.activation.bpmn +51 -51
  248. package/test/spec/features/context-pad/ContextPadProviderSpec.js +440 -440
  249. package/test/spec/features/copy-paste/BpmnCopyPasteSpec.js +763 -725
  250. package/test/spec/features/copy-paste/DescriptorTree.js +58 -58
  251. package/test/spec/features/distribute-elements/BpmnDistributeElementsSpec.js +113 -113
  252. package/test/spec/features/editor-actions/BpmnEditorActionsSpec.js +72 -72
  253. package/test/spec/features/global-connect/BpmnGlobalConnectSpec.js +61 -61
  254. package/test/spec/features/keyboard/BpmnKeyBindingsSpec.js +142 -142
  255. package/test/spec/features/label-editing/LabelEditingPreviewSpec.js +133 -0
  256. package/test/spec/features/label-editing/LabelEditingProviderSpec.js +636 -601
  257. package/test/spec/features/label-editing/TouchIntegrationSpec.js +40 -40
  258. package/test/spec/features/modeling/AppendShapeSpec.js +332 -332
  259. package/test/spec/features/modeling/BendpointsSpec.js +25 -25
  260. package/test/spec/features/modeling/BpmnFactorySpec.js +73 -73
  261. package/test/spec/features/modeling/BpmnUpdater.bpmn +99 -99
  262. package/test/spec/features/modeling/BpmnUpdaterSpec.js +79 -79
  263. package/test/spec/features/modeling/CreateConnectionSpec.js +171 -171
  264. package/test/spec/features/modeling/DeleteConnectionSpec.js +75 -75
  265. package/test/spec/features/modeling/DeleteParticipantSpec.js +97 -97
  266. package/test/spec/features/modeling/DeleteShapeSpec.js +75 -75
  267. package/test/spec/features/modeling/DropSpec.js +123 -123
  268. package/test/spec/features/modeling/IdClaim.bpmn +13 -13
  269. package/test/spec/features/modeling/IdClaimSpec.js +50 -50
  270. package/test/spec/features/modeling/LabelBoundsSpec.js +342 -340
  271. package/test/spec/features/modeling/LabelBoundsSpec.simple.bpmn +27 -27
  272. package/test/spec/features/modeling/LabelLayouting.initial.bpmn +37 -37
  273. package/test/spec/features/modeling/LabelLayouting.move.bpmn +99 -99
  274. package/test/spec/features/modeling/LabelLayouting.special.bpmn +76 -76
  275. package/test/spec/features/modeling/LabelLayoutingSpec.js +603 -603
  276. package/test/spec/features/modeling/MoveConnectionSpec.js +101 -101
  277. package/test/spec/features/modeling/MoveElements.flow-collaboration.bpmn +45 -45
  278. package/test/spec/features/modeling/MoveElementsSpec.js +70 -70
  279. package/test/spec/features/modeling/MoveRulesSpec.js +151 -151
  280. package/test/spec/features/modeling/MoveShapeSpec.js +353 -353
  281. package/test/spec/features/modeling/ResizeShapeSpec.js +73 -73
  282. package/test/spec/features/modeling/SpaceToolSpec.js +251 -251
  283. package/test/spec/features/modeling/UpdateAttachmentSpec.js +96 -96
  284. package/test/spec/features/modeling/UpdateLabelSpec.js +130 -130
  285. package/test/spec/features/modeling/UpdatePropertiesSpec.js +503 -503
  286. package/test/spec/features/modeling/append/TextAnnotationSpec.js +136 -136
  287. package/test/spec/features/modeling/behavior/CompensationAssociationBehavior.bpmn +26 -26
  288. package/test/spec/features/modeling/behavior/CompensationAssociationBehaviorSpec.js +43 -43
  289. package/test/spec/features/modeling/behavior/CreateBoundaryEventBehaviorSpec.js +58 -58
  290. package/test/spec/features/modeling/behavior/CreateParticipantBehaviorSpec.js +224 -224
  291. package/test/spec/features/modeling/behavior/DataInputAssociationBehavior.bpmn +33 -33
  292. package/test/spec/features/modeling/behavior/DataInputAssociationBehaviorSpec.js +146 -146
  293. package/test/spec/features/modeling/behavior/DataObjectBehavior.create-data-association.bpmn +21 -21
  294. package/test/spec/features/modeling/behavior/DataObjectBehavior.data-object-reference.bpmn +13 -13
  295. package/test/spec/features/modeling/behavior/DataObjectBehavior.remove-data-association.bpmn +41 -41
  296. package/test/spec/features/modeling/behavior/DataObjectBehaviorSpec.js +297 -297
  297. package/test/spec/features/modeling/behavior/DataStoreBehavior.bpmn +26 -26
  298. package/test/spec/features/modeling/behavior/DataStoreBehavior.connect.bpmn +57 -57
  299. package/test/spec/features/modeling/behavior/DataStoreBehaviorSpec.js +228 -228
  300. package/test/spec/features/modeling/behavior/DropOnFlowBehavior.bpmn +71 -67
  301. package/test/spec/features/modeling/behavior/DropOnFlowBehaviorSpec.js +591 -418
  302. package/test/spec/features/modeling/behavior/ImportDockingFix.bpmn +61 -61
  303. package/test/spec/features/modeling/behavior/ImportDockingFixSpec.js +37 -37
  304. package/test/spec/features/modeling/behavior/LabelBehaviorSpec.js +277 -277
  305. package/test/spec/features/modeling/behavior/ReconnectConnection.data-association.bpmn +41 -41
  306. package/test/spec/features/modeling/behavior/ReconnectConnectionSpec.js +120 -120
  307. package/test/spec/features/modeling/behavior/RemoveElementBehavior.bpmn +181 -181
  308. package/test/spec/features/modeling/behavior/RemoveElementBehavior.perpendicular.bpmn +159 -159
  309. package/test/spec/features/modeling/behavior/RemoveElementBehaviorSpec.js +251 -251
  310. package/test/spec/features/modeling/behavior/RemoveParticipantBehaviorSpec.js +125 -125
  311. package/test/spec/features/modeling/behavior/ReplaceConnectionBehavior.association.bpmn +26 -26
  312. package/test/spec/features/modeling/behavior/ReplaceConnectionBehavior.boundary-events.bpmn +40 -40
  313. package/test/spec/features/modeling/behavior/ReplaceConnectionBehavior.message-sequence-flow.bpmn +121 -121
  314. package/test/spec/features/modeling/behavior/ReplaceConnectionBehaviorSpec.js +439 -439
  315. package/test/spec/features/modeling/behavior/ReplaceElementBehaviourSpec.js +450 -450
  316. package/test/spec/features/modeling/behavior/ToggleElementCollapseBehaviourSpec.js +653 -653
  317. package/test/spec/features/modeling/behavior/UnsetDefaultFlowBehaviorSpec.bpmn +48 -48
  318. package/test/spec/features/modeling/behavior/UnsetDefaultFlowBehaviorSpec.js +77 -77
  319. package/test/spec/features/modeling/behavior/util/GeometricUtilSpec.js +127 -127
  320. package/test/spec/features/modeling/behavior/util/LabelLayoutUtilSpec.js +75 -75
  321. package/test/spec/features/modeling/behavior/util/LineAttachmentUtilSpec.js +294 -294
  322. package/test/spec/features/modeling/behavior/util/LineIntersectSpec.js +32 -32
  323. package/test/spec/features/modeling/lanes/AddLaneSpec.js +263 -263
  324. package/test/spec/features/modeling/lanes/DeleteLaneSpec.js +126 -126
  325. package/test/spec/features/modeling/lanes/ResizeLaneSpec.js +366 -366
  326. package/test/spec/features/modeling/lanes/SplitLaneSpec.js +216 -216
  327. package/test/spec/features/modeling/lanes/UpdateFlowNodeRefsSpec.js +271 -271
  328. package/test/spec/features/modeling/lanes/flowNodeRefs.bpmn +56 -56
  329. package/test/spec/features/modeling/lanes/lanes.bpmn +83 -83
  330. package/test/spec/features/modeling/lanes/participant-lane.bpmn +27 -27
  331. package/test/spec/features/modeling/lanes/participant-no-lane.bpmn +22 -22
  332. package/test/spec/features/modeling/layout/Helper.js +64 -64
  333. package/test/spec/features/modeling/layout/LayoutAssociationSpec.js +101 -101
  334. package/test/spec/features/modeling/layout/LayoutConnectionSpec.js +98 -98
  335. package/test/spec/features/modeling/layout/LayoutDataAssociationSpec.js +98 -98
  336. package/test/spec/features/modeling/layout/LayoutMessageFlowSpec.bpmn +119 -119
  337. package/test/spec/features/modeling/layout/LayoutMessageFlowSpec.js +313 -313
  338. package/test/spec/features/modeling/layout/LayoutSequenceFlowSpec.boundaryEvents.bpmn +65 -65
  339. package/test/spec/features/modeling/layout/LayoutSequenceFlowSpec.flowElements.bpmn +70 -70
  340. package/test/spec/features/modeling/layout/LayoutSequenceFlowSpec.js +323 -323
  341. package/test/spec/features/ordering/BpmnOrderingProviderSpec.js +231 -231
  342. package/test/spec/features/ordering/Helper.js +185 -185
  343. package/test/spec/features/ordering/ordering-start-event.bpmn +17 -17
  344. package/test/spec/features/ordering/ordering-subprocesses.bpmn +41 -41
  345. package/test/spec/features/ordering/ordering.bpmn +105 -105
  346. package/test/spec/features/palette/PaletteProviderSpec.js +33 -33
  347. package/test/spec/features/popup-menu/ReplaceMenuProvider.collapsedSubProcess.bpmn +13 -13
  348. package/test/spec/features/popup-menu/ReplaceMenuProvider.compensation-activity.bpmn +12 -12
  349. package/test/spec/features/popup-menu/ReplaceMenuProvider.conditionalFlows.bpmn +66 -66
  350. package/test/spec/features/popup-menu/ReplaceMenuProvider.defaultFlows.bpmn +126 -126
  351. package/test/spec/features/popup-menu/ReplaceMenuProvider.defaultFlowsFromComplexGateways.bpmn +48 -48
  352. package/test/spec/features/popup-menu/ReplaceMenuProvider.defaultFlowsFromInclusiveGateways.bpmn +48 -48
  353. package/test/spec/features/popup-menu/ReplaceMenuProviderSpec.js +1957 -1957
  354. package/test/spec/features/replace/BpmnReplace.collaboration.bpmn +70 -70
  355. package/test/spec/features/replace/BpmnReplace.compensation.bpmn +12 -12
  356. package/test/spec/features/replace/BpmnReplace.eventSubProcesses.bpmn +126 -126
  357. package/test/spec/features/replace/BpmnReplaceSpec.js +1302 -1302
  358. package/test/spec/features/replace/ReplaceRulesSpec.js +78 -78
  359. package/test/spec/features/replace/SubProcess-collapsed.bpmn +36 -36
  360. package/test/spec/features/replace-preview/BpmnReplacePreviewSpec.js +304 -304
  361. package/test/spec/features/rules/BpmnRules.boundaryEvent.bpmn +93 -93
  362. package/test/spec/features/rules/BpmnRules.collaboration-dataAssociation.bpmn +35 -35
  363. package/test/spec/features/rules/BpmnRules.collaboration-lanes.bpmn +79 -79
  364. package/test/spec/features/rules/BpmnRules.collaboration.bpmn +138 -138
  365. package/test/spec/features/rules/BpmnRules.compensation.bpmn +65 -65
  366. package/test/spec/features/rules/BpmnRules.dataAssociation.bpmn +33 -33
  367. package/test/spec/features/rules/BpmnRules.eventBasedGateway.bpmn +82 -82
  368. package/test/spec/features/rules/BpmnRules.messageFlow.bpmn +27 -27
  369. package/test/spec/features/rules/BpmnRules.multiSelectionPools.bpmn +37 -37
  370. package/test/spec/features/rules/BpmnRules.process.bpmn +91 -91
  371. package/test/spec/features/rules/BpmnRules.subProcess-dataAssociation.bpmn +44 -44
  372. package/test/spec/features/rules/BpmnRulesSpec.js +1468 -1424
  373. package/test/spec/features/rules/Helper.js +82 -82
  374. package/test/spec/features/search/BpmnSearchProviderSpec.js +158 -158
  375. package/test/spec/features/search/bpmn-search-collaboration.bpmn +106 -106
  376. package/test/spec/features/search/bpmn-search.bpmn +100 -100
  377. package/test/spec/features/snapping/BpmnSnapping.connect.bpmn +36 -36
  378. package/test/spec/features/snapping/BpmnSnapping.labels.bpmn +27 -27
  379. package/test/spec/features/snapping/BpmnSnapping.lanes-resize.bpmn +43 -43
  380. package/test/spec/features/snapping/BpmnSnapping.participant-resize.bpmn +50 -50
  381. package/test/spec/features/snapping/BpmnSnapping.sequenceFlow.bpmn +41 -0
  382. package/test/spec/features/snapping/BpmnSnapping.subProcess-resize.bpmn +21 -21
  383. package/test/spec/features/snapping/BpmnSnapping.textAnnotation-resize.bpmn +22 -22
  384. package/test/spec/features/snapping/BpmnSnappingSpec.js +824 -758
  385. package/test/spec/features/snapping/BpmnSnappingUtil.lanes-flowNodes.bpmn +82 -82
  386. package/test/spec/features/snapping/BpmnSnappingUtil.lanes.bpmn +35 -35
  387. package/test/spec/features/snapping/BpmnSnappingUtilSpec.js +285 -285
  388. package/test/spec/i18n/custom-translate/custom-translate.js +14 -14
  389. package/test/spec/i18n/custom-translate/index.js +2 -2
  390. package/test/spec/i18n/translateSpec.js +56 -56
  391. package/test/spec/import/ImporterSpec.js +428 -428
  392. package/test/spec/import/ModelWiringSpec.js +194 -194
  393. package/test/spec/import/elements/AssociationSpec.collaboration.bpmn +51 -51
  394. package/test/spec/import/elements/AssociationSpec.compensation.bpmn +28 -28
  395. package/test/spec/import/elements/AssociationSpec.data-association.bpmn +39 -39
  396. package/test/spec/import/elements/AssociationSpec.data-input-output.bpmn +40 -40
  397. package/test/spec/import/elements/AssociationSpec.events.bpmn +51 -51
  398. package/test/spec/import/elements/AssociationSpec.js +175 -175
  399. package/test/spec/import/elements/AssociationSpec.text-annotation.bpmn +37 -37
  400. package/test/spec/import/elements/CollapsedSpec.js +118 -118
  401. package/test/spec/import/elements/LabelSpec.js +85 -85
  402. package/test/spec/import/lane-flowNodes.bpmn +44 -44
  403. package/test/spec/import/lane-missing-flowNodeRef.bpmn +24 -24
  404. package/test/spec/util/ModelCloneHelperSpec.js +381 -381
  405. package/test/spec/util/ModelUtilSpec.js +65 -65
  406. package/test/spec/util/camunda-moddle.js +70 -70
  407. package/test/util/MockEvents.js +62 -62
  408. package/test/util/ModelingUtil.js +117 -117
  409. package/test/util/custom-rules/CustomRules.js +18 -18
  410. package/test/util/custom-rules/index.js +4 -4
@@ -1,374 +1,374 @@
1
- 'use strict';
2
-
3
-
4
- var assign = require('lodash/object/assign'),
5
- forEach = require('lodash/collection/forEach'),
6
- isArray = require('lodash/lang/isArray'),
7
- is = require('../../util/ModelUtil').is,
8
- isExpanded = require('../../util/DiUtil').isExpanded,
9
- isAny = require('../modeling/util/ModelingUtil').isAny,
10
- getChildLanes = require('../modeling/util/LaneUtil').getChildLanes,
11
- isEventSubProcess = require('../../util/DiUtil').isEventSubProcess,
12
- hasPrimaryModifier = require('diagram-js/lib/util/Mouse').hasPrimaryModifier;
13
-
14
- /**
15
- * A provider for BPMN 2.0 elements context pad
16
- */
17
- function ContextPadProvider(eventBus, contextPad, modeling, elementFactory,
18
- connect, create, popupMenu,
19
- canvas, rules, translate) {
20
-
21
- contextPad.registerProvider(this);
22
-
23
- this._contextPad = contextPad;
24
-
25
- this._modeling = modeling;
26
-
27
- this._elementFactory = elementFactory;
28
- this._connect = connect;
29
- this._create = create;
30
- this._popupMenu = popupMenu;
31
- this._canvas = canvas;
32
- this._rules = rules;
33
- this._translate = translate;
34
-
35
-
36
- eventBus.on('create.end', 250, function(event) {
37
- var shape = event.context.shape;
38
-
39
- if (!hasPrimaryModifier(event)) {
40
- return;
41
- }
42
-
43
- var entries = contextPad.getEntries(shape);
44
-
45
- if (entries.replace) {
46
- entries.replace.action.click(event, shape);
47
- }
48
- });
49
- }
50
-
51
- ContextPadProvider.$inject = [
52
- 'eventBus',
53
- 'contextPad',
54
- 'modeling',
55
- 'elementFactory',
56
- 'connect',
57
- 'create',
58
- 'popupMenu',
59
- 'canvas',
60
- 'rules',
61
- 'translate'
62
- ];
63
-
64
- module.exports = ContextPadProvider;
65
-
66
-
67
- ContextPadProvider.prototype.getContextPadEntries = function(element) {
68
-
69
- var contextPad = this._contextPad,
70
- modeling = this._modeling,
71
-
72
- elementFactory = this._elementFactory,
73
- connect = this._connect,
74
- create = this._create,
75
- popupMenu = this._popupMenu,
76
- canvas = this._canvas,
77
- rules = this._rules,
78
-
79
- translate = this._translate;
80
-
81
- var actions = {};
82
-
83
- if (element.type === 'label') {
84
- return actions;
85
- }
86
-
87
- var businessObject = element.businessObject;
88
-
89
- function startConnect(event, element, autoActivate) {
90
- connect.start(event, element, autoActivate);
91
- }
92
-
93
- function removeElement(e) {
94
- modeling.removeElements([ element ]);
95
- }
96
-
97
- function getReplaceMenuPosition(element) {
98
-
99
- var Y_OFFSET = 5;
100
-
101
- var diagramContainer = canvas.getContainer(),
102
- pad = contextPad.getPad(element).html;
103
-
104
- var diagramRect = diagramContainer.getBoundingClientRect(),
105
- padRect = pad.getBoundingClientRect();
106
-
107
- var top = padRect.top - diagramRect.top;
108
- var left = padRect.left - diagramRect.left;
109
-
110
- var pos = {
111
- x: left,
112
- y: top + padRect.height + Y_OFFSET
113
- };
114
-
115
- return pos;
116
- }
117
-
118
-
119
- /**
120
- * Create an append action
121
- *
122
- * @param {String} type
123
- * @param {String} className
124
- * @param {String} [title]
125
- * @param {Object} [options]
126
- *
127
- * @return {Object} descriptor
128
- */
129
- function appendAction(type, className, title, options) {
130
-
131
- if (typeof title !== 'string') {
132
- options = title;
133
- title = translate('Append {type}', { type: type.replace(/^bpmn\:/, '') });
134
- }
135
-
136
- function appendListener(event, element) {
137
-
138
- var shape = elementFactory.createShape(assign({ type: type }, options));
139
- create.start(event, shape, element);
140
- }
141
-
142
- return {
143
- group: 'model',
144
- className: className,
145
- title: title,
146
- action: {
147
- dragstart: appendListener,
148
- click: appendListener
149
- }
150
- };
151
- }
152
-
153
- function splitLaneHandler(count) {
154
-
155
- return function(event, element) {
156
- // actual split
157
- modeling.splitLane(element, count);
158
-
159
- // refresh context pad after split to
160
- // get rid of split icons
161
- contextPad.open(element, true);
162
- };
163
- }
164
-
165
-
166
- if (isAny(businessObject, [ 'bpmn:Lane', 'bpmn:Participant' ]) && isExpanded(businessObject)) {
167
-
168
- var childLanes = getChildLanes(element);
169
-
170
- assign(actions, {
171
- 'lane-insert-above': {
172
- group: 'lane-insert-above',
173
- className: 'bpmn-icon-lane-insert-above',
174
- title: translate('Add Lane above'),
175
- action: {
176
- click: function(event, element) {
177
- modeling.addLane(element, 'top');
178
- }
179
- }
180
- }
181
- });
182
-
183
- if (childLanes.length < 2) {
184
-
185
- if (element.height >= 120) {
186
- assign(actions, {
187
- 'lane-divide-two': {
188
- group: 'lane-divide',
189
- className: 'bpmn-icon-lane-divide-two',
190
- title: translate('Divide into two Lanes'),
191
- action: {
192
- click: splitLaneHandler(2)
193
- }
194
- }
195
- });
196
- }
197
-
198
- if (element.height >= 180) {
199
- assign(actions, {
200
- 'lane-divide-three': {
201
- group: 'lane-divide',
202
- className: 'bpmn-icon-lane-divide-three',
203
- title: translate('Divide into three Lanes'),
204
- action: {
205
- click: splitLaneHandler(3)
206
- }
207
- }
208
- });
209
- }
210
- }
211
-
212
- assign(actions, {
213
- 'lane-insert-below': {
214
- group: 'lane-insert-below',
215
- className: 'bpmn-icon-lane-insert-below',
216
- title: translate('Add Lane below'),
217
- action: {
218
- click: function(event, element) {
219
- modeling.addLane(element, 'bottom');
220
- }
221
- }
222
- }
223
- });
224
-
225
- }
226
-
227
- if (is(businessObject, 'bpmn:FlowNode')) {
228
-
229
- if (is(businessObject, 'bpmn:EventBasedGateway')) {
230
-
231
- assign(actions, {
232
- 'append.receive-task': appendAction('bpmn:ReceiveTask', 'bpmn-icon-receive-task'),
233
- 'append.message-intermediate-event': appendAction('bpmn:IntermediateCatchEvent',
234
- 'bpmn-icon-intermediate-event-catch-message',
235
- { eventDefinitionType: 'bpmn:MessageEventDefinition' }),
236
- 'append.timer-intermediate-event': appendAction('bpmn:IntermediateCatchEvent',
237
- 'bpmn-icon-intermediate-event-catch-timer',
238
- { eventDefinitionType: 'bpmn:TimerEventDefinition' }),
239
- 'append.condtion-intermediate-event': appendAction('bpmn:IntermediateCatchEvent',
240
- 'bpmn-icon-intermediate-event-catch-condition',
241
- { eventDefinitionType: 'bpmn:ConditionalEventDefinition' }),
242
- 'append.signal-intermediate-event': appendAction('bpmn:IntermediateCatchEvent',
243
- 'bpmn-icon-intermediate-event-catch-signal',
244
- { eventDefinitionType: 'bpmn:SignalEventDefinition' })
245
- });
246
- } else
247
-
248
- if (isEventType(businessObject, 'bpmn:BoundaryEvent', 'bpmn:CompensateEventDefinition')) {
249
-
250
- assign(actions, {
251
- 'append.compensation-activity':
252
- appendAction('bpmn:Task', 'bpmn-icon-task', translate('Append compensation activity'), {
253
- isForCompensation: true
254
- })
255
- });
256
- } else
257
-
258
- if (!is(businessObject, 'bpmn:EndEvent') &&
259
- !businessObject.isForCompensation &&
260
- !isEventType(businessObject, 'bpmn:IntermediateThrowEvent', 'bpmn:LinkEventDefinition') &&
261
- !isEventSubProcess(businessObject)) {
262
-
263
- assign(actions, {
264
- 'append.end-event': appendAction('bpmn:EndEvent', 'bpmn-icon-end-event-none'),
265
- 'append.gateway': appendAction('bpmn:ExclusiveGateway', 'bpmn-icon-gateway-xor'),
266
- 'append.append-task': appendAction('bpmn:Task', 'bpmn-icon-task'),
267
- 'append.intermediate-event': appendAction('bpmn:IntermediateThrowEvent',
268
- 'bpmn-icon-intermediate-event-none')
269
- });
270
- }
271
- }
272
-
273
- var replaceMenu;
274
-
275
- if (popupMenu._providers['bpmn-replace']) {
276
- replaceMenu = popupMenu.create('bpmn-replace', element);
277
- }
278
-
279
- if (replaceMenu && !replaceMenu.isEmpty()) {
280
-
281
- // Replace menu entry
282
- assign(actions, {
283
- 'replace': {
284
- group: 'edit',
285
- className: 'bpmn-icon-screw-wrench',
286
- title: translate('Change type'),
287
- action: {
288
- click: function(event, element) {
289
- replaceMenu.open(assign(getReplaceMenuPosition(element), {
290
- cursor: { x: event.x, y: event.y }
291
- }), element);
292
- }
293
- }
294
- }
295
- });
296
- }
297
-
298
- if (isAny(businessObject, [
299
- 'bpmn:FlowNode',
300
- 'bpmn:InteractionNode',
301
- 'bpmn:DataObjectReference',
302
- 'bpmn:DataStoreReference'
303
- ]) ) {
304
-
305
- assign(actions, {
306
- 'append.text-annotation': appendAction('bpmn:TextAnnotation', 'bpmn-icon-text-annotation'),
307
-
308
- 'connect': {
309
- group: 'connect',
310
- className: 'bpmn-icon-connection-multi',
311
- title: translate('Connect using ' +
312
- (businessObject.isForCompensation ? '' : 'Sequence/MessageFlow or ') +
313
- 'Association'),
314
- action: {
315
- click: startConnect,
316
- dragstart: startConnect
317
- }
318
- }
319
- });
320
- }
321
-
322
- if (isAny(businessObject, [ 'bpmn:DataObjectReference', 'bpmn:DataStoreReference' ])) {
323
- assign(actions, {
324
- 'connect': {
325
- group: 'connect',
326
- className: 'bpmn-icon-connection-multi',
327
- title: translate('Connect using DataInputAssociation'),
328
- action: {
329
- click: startConnect,
330
- dragstart: startConnect
331
- }
332
- }
333
- });
334
- }
335
-
336
- // delete element entry, only show if allowed by rules
337
- var deleteAllowed = rules.allowed('elements.delete', { elements: [ element ] });
338
-
339
- if (isArray(deleteAllowed)) {
340
- // was the element returned as a deletion candidate?
341
- deleteAllowed = deleteAllowed[0] === element;
342
- }
343
-
344
- if (deleteAllowed) {
345
- assign(actions, {
346
- 'delete': {
347
- group: 'edit',
348
- className: 'bpmn-icon-trash',
349
- title: translate('Remove'),
350
- action: {
351
- click: removeElement,
352
- dragstart: removeElement
353
- }
354
- }
355
- });
356
- }
357
-
358
- return actions;
359
- };
360
-
361
- function isEventType(eventBo, type, definition) {
362
-
363
- var isType = eventBo.$instanceOf(type);
364
- var isDefinition = false;
365
-
366
- var definitions = eventBo.eventDefinitions || [];
367
- forEach(definitions, function(def) {
368
- if (def.$type === definition) {
369
- isDefinition = true;
370
- }
371
- });
372
-
373
- return isType && isDefinition;
374
- }
1
+ 'use strict';
2
+
3
+
4
+ var assign = require('lodash/object/assign'),
5
+ forEach = require('lodash/collection/forEach'),
6
+ isArray = require('lodash/lang/isArray'),
7
+ is = require('../../util/ModelUtil').is,
8
+ isExpanded = require('../../util/DiUtil').isExpanded,
9
+ isAny = require('../modeling/util/ModelingUtil').isAny,
10
+ getChildLanes = require('../modeling/util/LaneUtil').getChildLanes,
11
+ isEventSubProcess = require('../../util/DiUtil').isEventSubProcess,
12
+ hasPrimaryModifier = require('diagram-js/lib/util/Mouse').hasPrimaryModifier;
13
+
14
+ /**
15
+ * A provider for BPMN 2.0 elements context pad
16
+ */
17
+ function ContextPadProvider(eventBus, contextPad, modeling, elementFactory,
18
+ connect, create, popupMenu,
19
+ canvas, rules, translate) {
20
+
21
+ contextPad.registerProvider(this);
22
+
23
+ this._contextPad = contextPad;
24
+
25
+ this._modeling = modeling;
26
+
27
+ this._elementFactory = elementFactory;
28
+ this._connect = connect;
29
+ this._create = create;
30
+ this._popupMenu = popupMenu;
31
+ this._canvas = canvas;
32
+ this._rules = rules;
33
+ this._translate = translate;
34
+
35
+
36
+ eventBus.on('create.end', 250, function(event) {
37
+ var shape = event.context.shape;
38
+
39
+ if (!hasPrimaryModifier(event)) {
40
+ return;
41
+ }
42
+
43
+ var entries = contextPad.getEntries(shape);
44
+
45
+ if (entries.replace) {
46
+ entries.replace.action.click(event, shape);
47
+ }
48
+ });
49
+ }
50
+
51
+ ContextPadProvider.$inject = [
52
+ 'eventBus',
53
+ 'contextPad',
54
+ 'modeling',
55
+ 'elementFactory',
56
+ 'connect',
57
+ 'create',
58
+ 'popupMenu',
59
+ 'canvas',
60
+ 'rules',
61
+ 'translate'
62
+ ];
63
+
64
+ module.exports = ContextPadProvider;
65
+
66
+
67
+ ContextPadProvider.prototype.getContextPadEntries = function(element) {
68
+
69
+ var contextPad = this._contextPad,
70
+ modeling = this._modeling,
71
+
72
+ elementFactory = this._elementFactory,
73
+ connect = this._connect,
74
+ create = this._create,
75
+ popupMenu = this._popupMenu,
76
+ canvas = this._canvas,
77
+ rules = this._rules,
78
+
79
+ translate = this._translate;
80
+
81
+ var actions = {};
82
+
83
+ if (element.type === 'label') {
84
+ return actions;
85
+ }
86
+
87
+ var businessObject = element.businessObject;
88
+
89
+ function startConnect(event, element, autoActivate) {
90
+ connect.start(event, element, autoActivate);
91
+ }
92
+
93
+ function removeElement(e) {
94
+ modeling.removeElements([ element ]);
95
+ }
96
+
97
+ function getReplaceMenuPosition(element) {
98
+
99
+ var Y_OFFSET = 5;
100
+
101
+ var diagramContainer = canvas.getContainer(),
102
+ pad = contextPad.getPad(element).html;
103
+
104
+ var diagramRect = diagramContainer.getBoundingClientRect(),
105
+ padRect = pad.getBoundingClientRect();
106
+
107
+ var top = padRect.top - diagramRect.top;
108
+ var left = padRect.left - diagramRect.left;
109
+
110
+ var pos = {
111
+ x: left,
112
+ y: top + padRect.height + Y_OFFSET
113
+ };
114
+
115
+ return pos;
116
+ }
117
+
118
+
119
+ /**
120
+ * Create an append action
121
+ *
122
+ * @param {String} type
123
+ * @param {String} className
124
+ * @param {String} [title]
125
+ * @param {Object} [options]
126
+ *
127
+ * @return {Object} descriptor
128
+ */
129
+ function appendAction(type, className, title, options) {
130
+
131
+ if (typeof title !== 'string') {
132
+ options = title;
133
+ title = translate('Append {type}', { type: type.replace(/^bpmn\:/, '') });
134
+ }
135
+
136
+ function appendListener(event, element) {
137
+
138
+ var shape = elementFactory.createShape(assign({ type: type }, options));
139
+ create.start(event, shape, element);
140
+ }
141
+
142
+ return {
143
+ group: 'model',
144
+ className: className,
145
+ title: title,
146
+ action: {
147
+ dragstart: appendListener,
148
+ click: appendListener
149
+ }
150
+ };
151
+ }
152
+
153
+ function splitLaneHandler(count) {
154
+
155
+ return function(event, element) {
156
+ // actual split
157
+ modeling.splitLane(element, count);
158
+
159
+ // refresh context pad after split to
160
+ // get rid of split icons
161
+ contextPad.open(element, true);
162
+ };
163
+ }
164
+
165
+
166
+ if (isAny(businessObject, [ 'bpmn:Lane', 'bpmn:Participant' ]) && isExpanded(businessObject)) {
167
+
168
+ var childLanes = getChildLanes(element);
169
+
170
+ assign(actions, {
171
+ 'lane-insert-above': {
172
+ group: 'lane-insert-above',
173
+ className: 'bpmn-icon-lane-insert-above',
174
+ title: translate('Add Lane above'),
175
+ action: {
176
+ click: function(event, element) {
177
+ modeling.addLane(element, 'top');
178
+ }
179
+ }
180
+ }
181
+ });
182
+
183
+ if (childLanes.length < 2) {
184
+
185
+ if (element.height >= 120) {
186
+ assign(actions, {
187
+ 'lane-divide-two': {
188
+ group: 'lane-divide',
189
+ className: 'bpmn-icon-lane-divide-two',
190
+ title: translate('Divide into two Lanes'),
191
+ action: {
192
+ click: splitLaneHandler(2)
193
+ }
194
+ }
195
+ });
196
+ }
197
+
198
+ if (element.height >= 180) {
199
+ assign(actions, {
200
+ 'lane-divide-three': {
201
+ group: 'lane-divide',
202
+ className: 'bpmn-icon-lane-divide-three',
203
+ title: translate('Divide into three Lanes'),
204
+ action: {
205
+ click: splitLaneHandler(3)
206
+ }
207
+ }
208
+ });
209
+ }
210
+ }
211
+
212
+ assign(actions, {
213
+ 'lane-insert-below': {
214
+ group: 'lane-insert-below',
215
+ className: 'bpmn-icon-lane-insert-below',
216
+ title: translate('Add Lane below'),
217
+ action: {
218
+ click: function(event, element) {
219
+ modeling.addLane(element, 'bottom');
220
+ }
221
+ }
222
+ }
223
+ });
224
+
225
+ }
226
+
227
+ if (is(businessObject, 'bpmn:FlowNode')) {
228
+
229
+ if (is(businessObject, 'bpmn:EventBasedGateway')) {
230
+
231
+ assign(actions, {
232
+ 'append.receive-task': appendAction('bpmn:ReceiveTask', 'bpmn-icon-receive-task'),
233
+ 'append.message-intermediate-event': appendAction('bpmn:IntermediateCatchEvent',
234
+ 'bpmn-icon-intermediate-event-catch-message',
235
+ { eventDefinitionType: 'bpmn:MessageEventDefinition' }),
236
+ 'append.timer-intermediate-event': appendAction('bpmn:IntermediateCatchEvent',
237
+ 'bpmn-icon-intermediate-event-catch-timer',
238
+ { eventDefinitionType: 'bpmn:TimerEventDefinition' }),
239
+ 'append.condtion-intermediate-event': appendAction('bpmn:IntermediateCatchEvent',
240
+ 'bpmn-icon-intermediate-event-catch-condition',
241
+ { eventDefinitionType: 'bpmn:ConditionalEventDefinition' }),
242
+ 'append.signal-intermediate-event': appendAction('bpmn:IntermediateCatchEvent',
243
+ 'bpmn-icon-intermediate-event-catch-signal',
244
+ { eventDefinitionType: 'bpmn:SignalEventDefinition' })
245
+ });
246
+ } else
247
+
248
+ if (isEventType(businessObject, 'bpmn:BoundaryEvent', 'bpmn:CompensateEventDefinition')) {
249
+
250
+ assign(actions, {
251
+ 'append.compensation-activity':
252
+ appendAction('bpmn:Task', 'bpmn-icon-task', translate('Append compensation activity'), {
253
+ isForCompensation: true
254
+ })
255
+ });
256
+ } else
257
+
258
+ if (!is(businessObject, 'bpmn:EndEvent') &&
259
+ !businessObject.isForCompensation &&
260
+ !isEventType(businessObject, 'bpmn:IntermediateThrowEvent', 'bpmn:LinkEventDefinition') &&
261
+ !isEventSubProcess(businessObject)) {
262
+
263
+ assign(actions, {
264
+ 'append.end-event': appendAction('bpmn:EndEvent', 'bpmn-icon-end-event-none'),
265
+ 'append.gateway': appendAction('bpmn:ExclusiveGateway', 'bpmn-icon-gateway-xor'),
266
+ 'append.append-task': appendAction('bpmn:Task', 'bpmn-icon-task'),
267
+ 'append.intermediate-event': appendAction('bpmn:IntermediateThrowEvent',
268
+ 'bpmn-icon-intermediate-event-none')
269
+ });
270
+ }
271
+ }
272
+
273
+ var replaceMenu;
274
+
275
+ if (popupMenu._providers['bpmn-replace']) {
276
+ replaceMenu = popupMenu.create('bpmn-replace', element);
277
+ }
278
+
279
+ if (replaceMenu && !replaceMenu.isEmpty()) {
280
+
281
+ // Replace menu entry
282
+ assign(actions, {
283
+ 'replace': {
284
+ group: 'edit',
285
+ className: 'bpmn-icon-screw-wrench',
286
+ title: translate('Change type'),
287
+ action: {
288
+ click: function(event, element) {
289
+ replaceMenu.open(assign(getReplaceMenuPosition(element), {
290
+ cursor: { x: event.x, y: event.y }
291
+ }), element);
292
+ }
293
+ }
294
+ }
295
+ });
296
+ }
297
+
298
+ if (isAny(businessObject, [
299
+ 'bpmn:FlowNode',
300
+ 'bpmn:InteractionNode',
301
+ 'bpmn:DataObjectReference',
302
+ 'bpmn:DataStoreReference'
303
+ ]) ) {
304
+
305
+ assign(actions, {
306
+ 'append.text-annotation': appendAction('bpmn:TextAnnotation', 'bpmn-icon-text-annotation'),
307
+
308
+ 'connect': {
309
+ group: 'connect',
310
+ className: 'bpmn-icon-connection-multi',
311
+ title: translate('Connect using ' +
312
+ (businessObject.isForCompensation ? '' : 'Sequence/MessageFlow or ') +
313
+ 'Association'),
314
+ action: {
315
+ click: startConnect,
316
+ dragstart: startConnect
317
+ }
318
+ }
319
+ });
320
+ }
321
+
322
+ if (isAny(businessObject, [ 'bpmn:DataObjectReference', 'bpmn:DataStoreReference' ])) {
323
+ assign(actions, {
324
+ 'connect': {
325
+ group: 'connect',
326
+ className: 'bpmn-icon-connection-multi',
327
+ title: translate('Connect using DataInputAssociation'),
328
+ action: {
329
+ click: startConnect,
330
+ dragstart: startConnect
331
+ }
332
+ }
333
+ });
334
+ }
335
+
336
+ // delete element entry, only show if allowed by rules
337
+ var deleteAllowed = rules.allowed('elements.delete', { elements: [ element ] });
338
+
339
+ if (isArray(deleteAllowed)) {
340
+ // was the element returned as a deletion candidate?
341
+ deleteAllowed = deleteAllowed[0] === element;
342
+ }
343
+
344
+ if (deleteAllowed) {
345
+ assign(actions, {
346
+ 'delete': {
347
+ group: 'edit',
348
+ className: 'bpmn-icon-trash',
349
+ title: translate('Remove'),
350
+ action: {
351
+ click: removeElement,
352
+ dragstart: removeElement
353
+ }
354
+ }
355
+ });
356
+ }
357
+
358
+ return actions;
359
+ };
360
+
361
+ function isEventType(eventBo, type, definition) {
362
+
363
+ var isType = eventBo.$instanceOf(type);
364
+ var isDefinition = false;
365
+
366
+ var definitions = eventBo.eventDefinitions || [];
367
+ forEach(definitions, function(def) {
368
+ if (def.$type === definition) {
369
+ isDefinition = true;
370
+ }
371
+ });
372
+
373
+ return isType && isDefinition;
374
+ }