bpmn-js 18.6.1 → 18.6.2

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 (340) hide show
  1. package/LICENSE +23 -23
  2. package/README.md +95 -95
  3. package/dist/assets/bpmn-js.css +145 -145
  4. package/dist/bpmn-modeler.development.js +38928 -38906
  5. package/dist/bpmn-modeler.production.min.js +2 -2
  6. package/dist/bpmn-navigated-viewer.development.js +21211 -21189
  7. package/dist/bpmn-navigated-viewer.production.min.js +2 -2
  8. package/dist/bpmn-viewer.development.js +21152 -21130
  9. package/dist/bpmn-viewer.production.min.js +2 -2
  10. package/lib/BaseModeler.d.ts +15 -15
  11. package/lib/BaseModeler.js +79 -79
  12. package/lib/BaseViewer.d.ts +352 -352
  13. package/lib/BaseViewer.js +858 -858
  14. package/lib/Modeler.d.ts +86 -86
  15. package/lib/Modeler.js +206 -206
  16. package/lib/NavigatedViewer.d.ts +11 -11
  17. package/lib/NavigatedViewer.js +37 -37
  18. package/lib/Viewer.d.ts +47 -47
  19. package/lib/Viewer.js +76 -76
  20. package/lib/core/index.d.ts +10 -10
  21. package/lib/core/index.js +8 -8
  22. package/lib/draw/BpmnRenderUtil.d.ts +123 -123
  23. package/lib/draw/BpmnRenderUtil.js +256 -256
  24. package/lib/draw/BpmnRenderer.d.ts +116 -116
  25. package/lib/draw/BpmnRenderer.js +2412 -2390
  26. package/lib/draw/PathMap.d.ts +330 -330
  27. package/lib/draw/PathMap.js +478 -478
  28. package/lib/draw/TextRenderer.d.ts +74 -74
  29. package/lib/draw/TextRenderer.js +136 -136
  30. package/lib/draw/index.d.ts +10 -10
  31. package/lib/draw/index.js +11 -11
  32. package/lib/features/align-elements/AlignElementsContextPadProvider.d.ts +32 -32
  33. package/lib/features/align-elements/AlignElementsContextPadProvider.js +105 -105
  34. package/lib/features/align-elements/AlignElementsIcons.d.ts +10 -10
  35. package/lib/features/align-elements/AlignElementsIcons.js +43 -43
  36. package/lib/features/align-elements/AlignElementsMenuProvider.d.ts +32 -32
  37. package/lib/features/align-elements/AlignElementsMenuProvider.js +100 -100
  38. package/lib/features/align-elements/BpmnAlignElements.d.ts +9 -9
  39. package/lib/features/align-elements/BpmnAlignElements.js +45 -45
  40. package/lib/features/align-elements/index.d.ts +17 -17
  41. package/lib/features/align-elements/index.js +23 -23
  42. package/lib/features/append-preview/AppendPreview.d.ts +36 -36
  43. package/lib/features/append-preview/AppendPreview.js +108 -108
  44. package/lib/features/append-preview/index.d.ts +18 -18
  45. package/lib/features/append-preview/index.js +15 -15
  46. package/lib/features/auto-place/BpmnAutoPlace.d.ts +15 -15
  47. package/lib/features/auto-place/BpmnAutoPlace.js +22 -22
  48. package/lib/features/auto-place/BpmnAutoPlaceUtil.d.ts +52 -52
  49. package/lib/features/auto-place/BpmnAutoPlaceUtil.js +226 -226
  50. package/lib/features/auto-place/index.d.ts +10 -10
  51. package/lib/features/auto-place/index.js +8 -8
  52. package/lib/features/auto-resize/BpmnAutoResize.d.ts +25 -25
  53. package/lib/features/auto-resize/BpmnAutoResize.js +45 -45
  54. package/lib/features/auto-resize/BpmnAutoResizeProvider.d.ts +26 -26
  55. package/lib/features/auto-resize/BpmnAutoResizeProvider.js +69 -69
  56. package/lib/features/auto-resize/index.d.ts +8 -8
  57. package/lib/features/auto-resize/index.js +12 -12
  58. package/lib/features/context-pad/ContextPadProvider.d.ts +62 -62
  59. package/lib/features/context-pad/ContextPadProvider.js +592 -592
  60. package/lib/features/context-pad/index.d.ts +7 -7
  61. package/lib/features/context-pad/index.js +22 -22
  62. package/lib/features/copy-paste/BpmnCopyPaste.d.ts +17 -17
  63. package/lib/features/copy-paste/BpmnCopyPaste.js +192 -192
  64. package/lib/features/copy-paste/ModdleCopy.d.ts +45 -45
  65. package/lib/features/copy-paste/ModdleCopy.js +286 -286
  66. package/lib/features/copy-paste/index.d.ts +11 -11
  67. package/lib/features/copy-paste/index.js +13 -13
  68. package/lib/features/di-ordering/BpmnDiOrdering.d.ts +11 -11
  69. package/lib/features/di-ordering/BpmnDiOrdering.js +48 -48
  70. package/lib/features/di-ordering/index.d.ts +6 -6
  71. package/lib/features/di-ordering/index.js +7 -7
  72. package/lib/features/distribute-elements/BpmnDistributeElements.d.ts +10 -10
  73. package/lib/features/distribute-elements/BpmnDistributeElements.js +60 -60
  74. package/lib/features/distribute-elements/DistributeElementsIcons.d.ts +5 -5
  75. package/lib/features/distribute-elements/DistributeElementsIcons.js +18 -18
  76. package/lib/features/distribute-elements/DistributeElementsMenuProvider.d.ts +32 -32
  77. package/lib/features/distribute-elements/DistributeElementsMenuProvider.js +92 -92
  78. package/lib/features/distribute-elements/index.d.ts +13 -13
  79. package/lib/features/distribute-elements/index.js +19 -19
  80. package/lib/features/drilldown/DrilldownBreadcrumbs.d.ts +19 -19
  81. package/lib/features/drilldown/DrilldownBreadcrumbs.js +138 -138
  82. package/lib/features/drilldown/DrilldownCentering.d.ts +17 -17
  83. package/lib/features/drilldown/DrilldownCentering.js +122 -122
  84. package/lib/features/drilldown/DrilldownOverlayBehavior.d.ts +20 -20
  85. package/lib/features/drilldown/DrilldownOverlayBehavior.js +218 -218
  86. package/lib/features/drilldown/SubprocessCompatibility.d.ts +21 -21
  87. package/lib/features/drilldown/SubprocessCompatibility.js +266 -266
  88. package/lib/features/drilldown/index.d.ts +19 -19
  89. package/lib/features/drilldown/index.js +16 -16
  90. package/lib/features/editor-actions/BpmnEditorActions.d.ts +13 -13
  91. package/lib/features/editor-actions/BpmnEditorActions.js +187 -187
  92. package/lib/features/editor-actions/index.d.ts +8 -8
  93. package/lib/features/editor-actions/index.js +10 -10
  94. package/lib/features/grid-snapping/BpmnGridSnapping.d.ts +9 -9
  95. package/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.d.ts +14 -14
  96. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.d.ts +27 -27
  97. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js +155 -155
  98. package/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.d.ts +13 -13
  99. package/lib/features/grid-snapping/behavior/index.d.ts +10 -10
  100. package/lib/features/grid-snapping/index.d.ts +13 -13
  101. package/lib/features/interaction-events/BpmnInteractionEvents.d.ts +18 -18
  102. package/lib/features/interaction-events/BpmnInteractionEvents.js +146 -146
  103. package/lib/features/interaction-events/index.d.ts +6 -6
  104. package/lib/features/interaction-events/index.js +5 -5
  105. package/lib/features/keyboard/BpmnKeyboardBindings.d.ts +15 -15
  106. package/lib/features/keyboard/BpmnKeyboardBindings.js +179 -179
  107. package/lib/features/keyboard/index.d.ts +10 -10
  108. package/lib/features/keyboard/index.js +11 -11
  109. package/lib/features/label-editing/LabelEditingPreview.d.ts +13 -13
  110. package/lib/features/label-editing/LabelEditingPreview.js +145 -145
  111. package/lib/features/label-editing/LabelEditingProvider.d.ts +62 -62
  112. package/lib/features/label-editing/LabelEditingProvider.js +519 -519
  113. package/lib/features/label-editing/LabelUtil.d.ts +1 -1
  114. package/lib/features/label-editing/LabelUtil.js +4 -4
  115. package/lib/features/label-editing/cmd/UpdateLabelHandler.d.ts +22 -22
  116. package/lib/features/label-editing/cmd/UpdateLabelHandler.js +149 -149
  117. package/lib/features/label-editing/index.d.ts +9 -9
  118. package/lib/features/label-editing/index.js +21 -21
  119. package/lib/features/modeling/BpmnFactory.d.ts +73 -73
  120. package/lib/features/modeling/BpmnFactory.js +180 -180
  121. package/lib/features/modeling/BpmnLayouter.d.ts +30 -30
  122. package/lib/features/modeling/BpmnLayouter.js +488 -488
  123. package/lib/features/modeling/BpmnUpdater.d.ts +90 -90
  124. package/lib/features/modeling/BpmnUpdater.js +818 -818
  125. package/lib/features/modeling/ElementFactory.d.ts +117 -117
  126. package/lib/features/modeling/ElementFactory.js +412 -412
  127. package/lib/features/modeling/ElementFactory.test.ts +132 -132
  128. package/lib/features/modeling/Modeling.d.ts +150 -150
  129. package/lib/features/modeling/Modeling.js +309 -309
  130. package/lib/features/modeling/Modeling.test.ts +147 -147
  131. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.d.ts +19 -19
  132. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js +288 -288
  133. package/lib/features/modeling/behavior/AppendBehavior.d.ts +6 -6
  134. package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
  135. package/lib/features/modeling/behavior/AssociationBehavior.d.ts +11 -11
  136. package/lib/features/modeling/behavior/AttachEventBehavior.d.ts +15 -15
  137. package/lib/features/modeling/behavior/AttachEventBehavior.js +106 -106
  138. package/lib/features/modeling/behavior/BoundaryEventBehavior.d.ts +15 -15
  139. package/lib/features/modeling/behavior/BoundaryEventBehavior.js +74 -74
  140. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.d.ts +17 -17
  141. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js +222 -222
  142. package/lib/features/modeling/behavior/CreateBehavior.d.ts +9 -9
  143. package/lib/features/modeling/behavior/CreateBehavior.js +33 -33
  144. package/lib/features/modeling/behavior/CreateDataObjectBehavior.d.ts +15 -15
  145. package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +43 -43
  146. package/lib/features/modeling/behavior/CreateParticipantBehavior.d.ts +19 -19
  147. package/lib/features/modeling/behavior/CreateParticipantBehavior.js +237 -237
  148. package/lib/features/modeling/behavior/DataInputAssociationBehavior.d.ts +21 -21
  149. package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +162 -162
  150. package/lib/features/modeling/behavior/DataStoreBehavior.d.ts +19 -19
  151. package/lib/features/modeling/behavior/DeleteLaneBehavior.d.ts +15 -15
  152. package/lib/features/modeling/behavior/DeleteLaneBehavior.js +162 -162
  153. package/lib/features/modeling/behavior/DetachEventBehavior.d.ts +15 -15
  154. package/lib/features/modeling/behavior/DetachEventBehavior.js +101 -101
  155. package/lib/features/modeling/behavior/DropOnFlowBehavior.d.ts +13 -13
  156. package/lib/features/modeling/behavior/DropOnFlowBehavior.js +221 -221
  157. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.d.ts +11 -11
  158. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.js +110 -110
  159. package/lib/features/modeling/behavior/FixHoverBehavior.d.ts +17 -17
  160. package/lib/features/modeling/behavior/GroupBehavior.d.ts +26 -26
  161. package/lib/features/modeling/behavior/ImportDockingFix.d.ts +13 -13
  162. package/lib/features/modeling/behavior/ImportDockingFix.js +83 -83
  163. package/lib/features/modeling/behavior/IsHorizontalFix.d.ts +10 -10
  164. package/lib/features/modeling/behavior/IsHorizontalFix.js +54 -54
  165. package/lib/features/modeling/behavior/LabelBehavior.d.ts +56 -56
  166. package/lib/features/modeling/behavior/LabelBehavior.js +364 -364
  167. package/lib/features/modeling/behavior/LayoutConnectionBehavior.d.ts +16 -16
  168. package/lib/features/modeling/behavior/LayoutConnectionBehavior.js +121 -121
  169. package/lib/features/modeling/behavior/MessageFlowBehavior.d.ts +15 -15
  170. package/lib/features/modeling/behavior/NonInterruptingBehavior.d.ts +4 -4
  171. package/lib/features/modeling/behavior/NonInterruptingBehavior.js +41 -41
  172. package/lib/features/modeling/behavior/RemoveElementBehavior.d.ts +13 -13
  173. package/lib/features/modeling/behavior/RemoveElementBehavior.js +91 -91
  174. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.d.ts +16 -16
  175. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js +41 -41
  176. package/lib/features/modeling/behavior/RemoveParticipantBehavior.d.ts +15 -15
  177. package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +59 -59
  178. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.d.ts +15 -15
  179. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +194 -194
  180. package/lib/features/modeling/behavior/ReplaceElementBehaviour.d.ts +23 -23
  181. package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +144 -144
  182. package/lib/features/modeling/behavior/ResizeBehavior.d.ts +64 -64
  183. package/lib/features/modeling/behavior/ResizeBehavior.js +265 -265
  184. package/lib/features/modeling/behavior/ResizeLaneBehavior.d.ts +16 -16
  185. package/lib/features/modeling/behavior/ResizeLaneBehavior.js +70 -70
  186. package/lib/features/modeling/behavior/RootElementReferenceBehavior.d.ts +25 -25
  187. package/lib/features/modeling/behavior/SetCompensationActivityAfterPasteBehavior.d.ts +16 -16
  188. package/lib/features/modeling/behavior/SetCompensationActivityAfterPasteBehavior.js +66 -66
  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 +56 -56
  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 +85 -85
  208. package/lib/features/modeling/behavior/index.js +131 -131
  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 +187 -187
  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 +39 -39
  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 +23 -23
  248. package/lib/features/modeling/util/ModelingUtil.js +88 -88
  249. package/lib/features/modeling-feedback/ModelingFeedback.d.ts +13 -13
  250. package/lib/features/modeling-feedback/ModelingFeedback.js +51 -51
  251. package/lib/features/modeling-feedback/index.d.ts +9 -9
  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 +39 -39
  258. package/lib/features/outline/OutlineProvider.js +189 -189
  259. package/lib/features/outline/OutlineUtil.d.ts +23 -23
  260. package/lib/features/outline/OutlineUtil.js +35 -35
  261. package/lib/features/outline/index.d.ts +10 -10
  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 +22 -22
  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 +656 -656
  269. package/lib/features/popup-menu/index.d.ts +13 -13
  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 +45 -45
  276. package/lib/features/replace/BpmnReplace.js +391 -391
  277. package/lib/features/replace/ReplaceOptions.d.ts +85 -85
  278. package/lib/features/replace/ReplaceOptions.js +1198 -1198
  279. package/lib/features/replace/index.d.ts +16 -16
  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 +9 -9
  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 +9 -9
  288. package/lib/features/rules/index.js +11 -11
  289. package/lib/features/search/BpmnSearchProvider.d.ts +34 -34
  290. package/lib/features/search/BpmnSearchProvider.js +91 -91
  291. package/lib/features/search/index.d.ts +11 -11
  292. package/lib/features/search/index.js +14 -14
  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 +13 -13
  298. package/lib/features/snapping/index.js +12 -12
  299. package/lib/features/space-tool/BpmnSpaceTool.d.ts +24 -24
  300. package/lib/features/space-tool/BpmnSpaceTool.js +96 -96
  301. package/lib/features/space-tool/index.d.ts +9 -9
  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 +452 -452
  307. package/lib/import/Importer.d.ts +25 -25
  308. package/lib/import/Importer.js +222 -222
  309. package/lib/import/Util.d.ts +1 -1
  310. package/lib/import/Util.js +6 -6
  311. package/lib/import/index.d.ts +8 -8
  312. package/lib/import/index.js +9 -9
  313. package/lib/index.d.ts +1 -1
  314. package/lib/index.js +2 -2
  315. package/lib/model/Types.d.ts +25 -25
  316. package/lib/model/Types.ts +40 -40
  317. package/lib/util/CompatibilityUtil.d.ts +8 -8
  318. package/lib/util/CompatibilityUtil.js +29 -29
  319. package/lib/util/DiUtil.d.ts +60 -60
  320. package/lib/util/DiUtil.js +122 -122
  321. package/lib/util/DrilldownUtil.d.ts +39 -39
  322. package/lib/util/DrilldownUtil.js +69 -69
  323. package/lib/util/LabelUtil.d.ts +83 -83
  324. package/lib/util/LabelUtil.js +266 -266
  325. package/lib/util/ModelUtil.d.ts +40 -40
  326. package/lib/util/ModelUtil.js +58 -58
  327. package/lib/util/PoweredByUtil.d.ts +8 -8
  328. package/lib/util/PoweredByUtil.js +99 -99
  329. package/lib/util/Types.js +4 -4
  330. package/lib/util/Types.ts +3 -3
  331. package/package.json +2 -2
  332. package/test/helper/TranslationCollector.js +15 -15
  333. package/test/helper/index.js +313 -313
  334. package/test/matchers/BoundsMatchers.js +252 -252
  335. package/test/matchers/ConnectionMatchers.js +165 -165
  336. package/test/matchers/JSONMatcher.js +19 -19
  337. package/test/util/KeyEvents.js +22 -22
  338. package/test/util/MockEvents.js +61 -61
  339. package/test/util/custom-rules/CustomRules.js +16 -16
  340. package/test/util/custom-rules/index.js +6 -6
package/lib/BaseViewer.js CHANGED
@@ -1,858 +1,858 @@
1
- /**
2
- * The code in the <project-logo></project-logo> area
3
- * must not be changed.
4
- *
5
- * @see http://bpmn.io/license for more information.
6
- */
7
- import {
8
- assign,
9
- find,
10
- isNumber,
11
- omit
12
- } from 'min-dash';
13
-
14
- import {
15
- domify,
16
- assignStyle,
17
- query as domQuery,
18
- remove as domRemove
19
- } from 'min-dom';
20
-
21
- import {
22
- innerSVG
23
- } from 'tiny-svg';
24
-
25
- import Diagram from 'diagram-js';
26
- import BpmnModdle from 'bpmn-moddle';
27
-
28
- import inherits from 'inherits-browser';
29
-
30
- import {
31
- importBpmnDiagram
32
- } from './import/Importer';
33
-
34
- /**
35
- * @template T
36
- *
37
- * @typedef { import('diagram-js/lib/core/EventBus').default<T> } EventBus
38
- */
39
-
40
- /**
41
- * @template T
42
- *
43
- * @typedef {import('diagram-js/lib/core/EventBus').EventBusEventCallback<T>} EventBusEventCallback
44
- */
45
-
46
- /**
47
- * @typedef {import('didi').ModuleDeclaration} ModuleDeclaration
48
- *
49
- * @typedef {import('./model/Types').Moddle} Moddle
50
- * @typedef {import('./model/Types').ModdleElement} ModdleElement
51
- * @typedef {import('./model/Types').ModdleExtension} ModdleExtension
52
- *
53
- * @typedef { {
54
- * width?: number|string;
55
- * height?: number|string;
56
- * position?: string;
57
- * container?: string|HTMLElement;
58
- * moddleExtensions?: ModdleExtensions;
59
- * additionalModules?: ModuleDeclaration[];
60
- * } & Record<string, any> } BaseViewerOptions
61
- *
62
- * @typedef {Record<string, ModdleElement>} ModdleElementsById
63
- *
64
- * @typedef { {
65
- * [key: string]: ModdleExtension;
66
- * } } ModdleExtensions
67
- *
68
- * @typedef { {
69
- * warnings: string[];
70
- * } } ImportXMLResult
71
- *
72
- * @typedef {ImportXMLResult & Error} ImportXMLError
73
- *
74
- * @typedef {ImportXMLResult} ImportDefinitionsResult
75
- *
76
- * @typedef {ImportXMLError} ImportDefinitionsError
77
- *
78
- * @typedef {ImportXMLResult} OpenResult
79
- *
80
- * @typedef {ImportXMLError} OpenError
81
- *
82
- * @typedef { {
83
- * format?: boolean;
84
- * preamble?: boolean;
85
- * } } SaveXMLOptions
86
- *
87
- * @typedef { {
88
- * xml?: string;
89
- * error?: Error;
90
- * } } SaveXMLResult
91
- *
92
- * @typedef { {
93
- * svg: string;
94
- * } } SaveSVGResult
95
- *
96
- * @typedef { {
97
- * xml: string;
98
- * } } ImportParseStartEvent
99
- *
100
- * @typedef { {
101
- * error?: ImportXMLError;
102
- * definitions?: ModdleElement;
103
- * elementsById?: ModdleElementsById;
104
- * references?: ModdleElement[];
105
- * warnings: string[];
106
- * } } ImportParseCompleteEvent
107
- *
108
- * @typedef { {
109
- * error?: ImportXMLError;
110
- * warnings: string[];
111
- * } } ImportDoneEvent
112
- *
113
- * @typedef { {
114
- * definitions: ModdleElement;
115
- * } } SaveXMLStartEvent
116
- *
117
- * @typedef {SaveXMLResult} SaveXMLDoneEvent
118
- *
119
- * @typedef { {
120
- * error?: Error;
121
- * svg: string;
122
- * } } SaveSVGDoneEvent
123
- */
124
-
125
- /**
126
- * @template Type
127
- *
128
- * @typedef { Type extends { eventBus: EventBus<infer X> } ? X : never } EventMap
129
- */
130
-
131
- /**
132
- * A base viewer for BPMN 2.0 diagrams.
133
- *
134
- * Have a look at {@link bpmn-js/lib/Viewer}, {@link bpmn-js/lib/NavigatedViewer} or {@link bpmn-js/lib/Modeler} for
135
- * bundles that include actual features.
136
- *
137
- * @template [ServiceMap=null]
138
- *
139
- * @extends Diagram<ServiceMap>
140
- *
141
- * @param {BaseViewerOptions} [options] The options to configure the viewer.
142
- */
143
- export default function BaseViewer(options) {
144
-
145
- /**
146
- * @type {BaseViewerOptions}
147
- */
148
- options = assign({}, DEFAULT_OPTIONS, options);
149
-
150
- /**
151
- * @type {Moddle}
152
- */
153
- this._moddle = this._createModdle(options);
154
-
155
- /**
156
- * @type {HTMLElement}
157
- */
158
- this._container = this._createContainer(options);
159
-
160
- this._init(this._container, this._moddle, options);
161
-
162
- /* <project-logo> */
163
-
164
- addProjectLogo(this._container);
165
-
166
- /* </project-logo> */
167
- }
168
-
169
- inherits(BaseViewer, Diagram);
170
-
171
- /**
172
- * Parse and render a BPMN 2.0 diagram.
173
- *
174
- * Once finished the viewer reports back the result to the
175
- * provided callback function with (err, warnings).
176
- *
177
- * ## Life-Cycle Events
178
- *
179
- * During import the viewer will fire life-cycle events:
180
- *
181
- * * import.parse.start (about to read model from XML)
182
- * * import.parse.complete (model read; may have worked or not)
183
- * * import.render.start (graphical import start)
184
- * * import.render.complete (graphical import finished)
185
- * * import.done (everything done)
186
- *
187
- * You can use these events to hook into the life-cycle.
188
- *
189
- * @throws {ImportXMLError} An error thrown during the import of the XML.
190
- *
191
- * @fires BaseViewer#ImportParseStartEvent
192
- * @fires BaseViewer#ImportParseCompleteEvent
193
- * @fires Importer#ImportRenderStartEvent
194
- * @fires Importer#ImportRenderCompleteEvent
195
- * @fires BaseViewer#ImportDoneEvent
196
- *
197
- * @param {string} xml The BPMN 2.0 XML to be imported.
198
- * @param {ModdleElement|string} [bpmnDiagram] The optional diagram or Id of the BPMN diagram to open.
199
- *
200
- * @return {Promise<ImportXMLResult>} A promise resolving with warnings that were produced during the import.
201
- */
202
- BaseViewer.prototype.importXML = async function importXML(xml, bpmnDiagram) {
203
-
204
- const self = this;
205
-
206
- function ParseCompleteEvent(data) {
207
- return self.get('eventBus').createEvent(data);
208
- }
209
-
210
- let aggregatedWarnings = [];
211
- try {
212
-
213
- // hook in pre-parse listeners +
214
- // allow xml manipulation
215
-
216
- /**
217
- * A `import.parse.start` event.
218
- *
219
- * @event BaseViewer#ImportParseStartEvent
220
- * @type {ImportParseStartEvent}
221
- */
222
- xml = this._emit('import.parse.start', { xml: xml }) || xml;
223
-
224
- let parseResult;
225
- try {
226
- parseResult = await this._moddle.fromXML(xml, 'bpmn:Definitions');
227
- } catch (error) {
228
- this._emit('import.parse.complete', {
229
- error
230
- });
231
-
232
- throw error;
233
- }
234
-
235
- let definitions = parseResult.rootElement;
236
- const references = parseResult.references;
237
- const parseWarnings = parseResult.warnings;
238
- const elementsById = parseResult.elementsById;
239
-
240
- aggregatedWarnings = aggregatedWarnings.concat(parseWarnings);
241
-
242
- // hook in post parse listeners +
243
- // allow definitions manipulation
244
-
245
- /**
246
- * A `import.parse.complete` event.
247
- *
248
- * @event BaseViewer#ImportParseCompleteEvent
249
- * @type {ImportParseCompleteEvent}
250
- */
251
- definitions = this._emit('import.parse.complete', ParseCompleteEvent({
252
- error: null,
253
- definitions: definitions,
254
- elementsById: elementsById,
255
- references: references,
256
- warnings: aggregatedWarnings
257
- })) || definitions;
258
-
259
- const importResult = await this.importDefinitions(definitions, bpmnDiagram);
260
-
261
- aggregatedWarnings = aggregatedWarnings.concat(importResult.warnings);
262
-
263
- /**
264
- * A `import.parse.complete` event.
265
- *
266
- * @event BaseViewer#ImportDoneEvent
267
- * @type {ImportDoneEvent}
268
- */
269
- this._emit('import.done', { error: null, warnings: aggregatedWarnings });
270
-
271
- return { warnings: aggregatedWarnings };
272
- } catch (err) {
273
- let error = err;
274
- aggregatedWarnings = aggregatedWarnings.concat(error.warnings || []);
275
- addWarningsToError(error, aggregatedWarnings);
276
-
277
- error = checkValidationError(error);
278
-
279
- this._emit('import.done', { error, warnings: error.warnings });
280
-
281
- throw error;
282
- }
283
- };
284
-
285
-
286
- /**
287
- * Import parsed definitions and render a BPMN 2.0 diagram.
288
- *
289
- * Once finished the viewer reports back the result to the
290
- * provided callback function with (err, warnings).
291
- *
292
- * ## Life-Cycle Events
293
- *
294
- * During import the viewer will fire life-cycle events:
295
- *
296
- * * import.render.start (graphical import start)
297
- * * import.render.complete (graphical import finished)
298
- *
299
- * You can use these events to hook into the life-cycle.
300
- *
301
- * @throws {ImportDefinitionsError} An error thrown during the import of the definitions.
302
- *
303
- * @param {ModdleElement} definitions The definitions.
304
- * @param {ModdleElement|string} [bpmnDiagram] The optional diagram or ID of the BPMN diagram to open.
305
- *
306
- * @return {Promise<ImportDefinitionsResult>} A promise resolving with warnings that were produced during the import.
307
- */
308
- BaseViewer.prototype.importDefinitions = async function importDefinitions(definitions, bpmnDiagram) {
309
- this._setDefinitions(definitions);
310
- const result = await this.open(bpmnDiagram);
311
-
312
- return { warnings: result.warnings };
313
- };
314
-
315
-
316
- /**
317
- * Open diagram of previously imported XML.
318
- *
319
- * Once finished the viewer reports back the result to the
320
- * provided callback function with (err, warnings).
321
- *
322
- * ## Life-Cycle Events
323
- *
324
- * During switch the viewer will fire life-cycle events:
325
- *
326
- * * import.render.start (graphical import start)
327
- * * import.render.complete (graphical import finished)
328
- *
329
- * You can use these events to hook into the life-cycle.
330
- *
331
- * @throws {OpenError} An error thrown during opening.
332
- *
333
- * @param {ModdleElement|string} bpmnDiagramOrId The diagram or Id of the BPMN diagram to open.
334
- *
335
- * @return {Promise<OpenResult>} A promise resolving with warnings that were produced during opening.
336
- */
337
- BaseViewer.prototype.open = async function open(bpmnDiagramOrId) {
338
-
339
- const definitions = this._definitions;
340
- let bpmnDiagram = bpmnDiagramOrId;
341
-
342
- if (!definitions) {
343
- const error = new Error('no XML imported');
344
- addWarningsToError(error, []);
345
-
346
- throw error;
347
- }
348
-
349
- if (typeof bpmnDiagramOrId === 'string') {
350
- bpmnDiagram = findBPMNDiagram(definitions, bpmnDiagramOrId);
351
-
352
- if (!bpmnDiagram) {
353
- const error = new Error('BPMNDiagram <' + bpmnDiagramOrId + '> not found');
354
- addWarningsToError(error, []);
355
-
356
- throw error;
357
- }
358
- }
359
-
360
- // clear existing rendered diagram
361
- // catch synchronous exceptions during #clear()
362
- try {
363
- this.clear();
364
- } catch (error) {
365
- addWarningsToError(error, []);
366
-
367
- throw error;
368
- }
369
-
370
- // perform graphical import
371
- const { warnings } = await importBpmnDiagram(this, definitions, bpmnDiagram);
372
-
373
- return { warnings };
374
- };
375
-
376
- /**
377
- * Export the currently displayed BPMN 2.0 diagram as
378
- * a BPMN 2.0 XML document.
379
- *
380
- * ## Life-Cycle Events
381
- *
382
- * During XML saving the viewer will fire life-cycle events:
383
- *
384
- * * saveXML.start (before serialization)
385
- * * saveXML.serialized (after xml generation)
386
- * * saveXML.done (everything done)
387
- *
388
- * You can use these events to hook into the life-cycle.
389
- *
390
- * @throws {Error} An error thrown during export.
391
- *
392
- * @fires BaseViewer#SaveXMLStart
393
- * @fires BaseViewer#SaveXMLDone
394
- *
395
- * @param {SaveXMLOptions} [options] The options.
396
- *
397
- * @return {Promise<SaveXMLResult>} A promise resolving with the XML.
398
- */
399
- BaseViewer.prototype.saveXML = async function saveXML(options) {
400
-
401
- options = options || {};
402
-
403
- let definitions = this._definitions,
404
- error, xml;
405
-
406
- try {
407
- if (!definitions) {
408
- throw new Error('no definitions loaded');
409
- }
410
-
411
- // allow to fiddle around with definitions
412
-
413
- /**
414
- * A `saveXML.start` event.
415
- *
416
- * @event BaseViewer#SaveXMLStartEvent
417
- * @type {SaveXMLStartEvent}
418
- */
419
- definitions = this._emit('saveXML.start', {
420
- definitions
421
- }) || definitions;
422
-
423
- const result = await this._moddle.toXML(definitions, options);
424
- xml = result.xml;
425
-
426
- xml = this._emit('saveXML.serialized', {
427
- xml
428
- }) || xml;
429
- } catch (err) {
430
- error = err;
431
- }
432
-
433
- const result = error ? { error } : { xml };
434
-
435
- /**
436
- * A `saveXML.done` event.
437
- *
438
- * @event BaseViewer#SaveXMLDoneEvent
439
- * @type {SaveXMLDoneEvent}
440
- */
441
- this._emit('saveXML.done', result);
442
-
443
- if (error) {
444
- throw error;
445
- }
446
-
447
- return result;
448
- };
449
-
450
-
451
- /**
452
- * Export the currently displayed BPMN 2.0 diagram as
453
- * an SVG image.
454
- *
455
- * ## Life-Cycle Events
456
- *
457
- * During SVG saving the viewer will fire life-cycle events:
458
- *
459
- * * saveSVG.start (before serialization)
460
- * * saveSVG.done (everything done)
461
- *
462
- * You can use these events to hook into the life-cycle.
463
- *
464
- * @throws {Error} An error thrown during export.
465
- *
466
- * @fires BaseViewer#SaveSVGDone
467
- *
468
- * @return {Promise<SaveSVGResult>} A promise resolving with the SVG.
469
- */
470
- BaseViewer.prototype.saveSVG = async function saveSVG() {
471
- this._emit('saveSVG.start');
472
-
473
- let svg, err;
474
-
475
- try {
476
- const canvas = this.get('canvas');
477
-
478
- const contentNode = canvas.getActiveLayer(),
479
- defsNode = domQuery(':scope > defs', canvas._svg);
480
-
481
- const contents = innerSVG(contentNode),
482
- defs = defsNode ? '<defs>' + innerSVG(defsNode) + '</defs>' : '';
483
-
484
- const bbox = contentNode.getBBox();
485
-
486
- svg =
487
- '<?xml version="1.0" encoding="utf-8"?>\n' +
488
- '<!-- created with bpmn-js / http://bpmn.io -->\n' +
489
- '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n' +
490
- '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ' +
491
- 'width="' + bbox.width + '" height="' + bbox.height + '" ' +
492
- 'viewBox="' + bbox.x + ' ' + bbox.y + ' ' + bbox.width + ' ' + bbox.height + '" version="1.1">' +
493
- defs + contents +
494
- '</svg>';
495
- } catch (e) {
496
- err = e;
497
- }
498
-
499
- /**
500
- * A `saveSVG.done` event.
501
- *
502
- * @event BaseViewer#SaveSVGDoneEvent
503
- * @type {SaveSVGDoneEvent}
504
- */
505
- this._emit('saveSVG.done', {
506
- error: err,
507
- svg: svg
508
- });
509
-
510
- if (err) {
511
- throw err;
512
- }
513
-
514
- return { svg };
515
- };
516
-
517
- BaseViewer.prototype._setDefinitions = function(definitions) {
518
- this._definitions = definitions;
519
- };
520
-
521
- /**
522
- * Return modules to instantiate with.
523
- *
524
- * @return {ModuleDeclaration[]} The modules.
525
- */
526
- BaseViewer.prototype.getModules = function() {
527
- return this._modules;
528
- };
529
-
530
- /**
531
- * Remove all drawn elements from the viewer.
532
- *
533
- * After calling this method the viewer can still be reused for opening another
534
- * diagram.
535
- */
536
- BaseViewer.prototype.clear = function() {
537
- if (!this.getDefinitions()) {
538
-
539
- // no diagram to clear
540
- return;
541
- }
542
-
543
- // remove drawn elements
544
- Diagram.prototype.clear.call(this);
545
- };
546
-
547
- /**
548
- * Destroy the viewer instance and remove all its remainders from the document
549
- * tree.
550
- */
551
- BaseViewer.prototype.destroy = function() {
552
-
553
- // diagram destroy
554
- Diagram.prototype.destroy.call(this);
555
-
556
- // dom detach
557
- domRemove(this._container);
558
- };
559
-
560
- /**
561
- * @overlord
562
- *
563
- * Register an event listener for events with the given name.
564
- *
565
- * The callback will be invoked with `event, ...additionalArguments`
566
- * that have been passed to {@link EventBus#fire}.
567
- *
568
- * Returning false from a listener will prevent the events default action
569
- * (if any is specified). To stop an event from being processed further in
570
- * other listeners execute {@link Event#stopPropagation}.
571
- *
572
- * Returning anything but `undefined` from a listener will stop the listener propagation.
573
- *
574
- * @template T
575
- *
576
- * @param {string|string[]} events The event(s) to listen to.
577
- * @param {number} [priority] The priority with which to listen.
578
- * @param {EventBusEventCallback<T>} callback The callback.
579
- * @param {any} [that] Value of `this` the callback will be called with.
580
- */
581
- /**
582
- * Register an event listener for events with the given name.
583
- *
584
- * The callback will be invoked with `event, ...additionalArguments`
585
- * that have been passed to {@link EventBus#fire}.
586
- *
587
- * Returning false from a listener will prevent the events default action
588
- * (if any is specified). To stop an event from being processed further in
589
- * other listeners execute {@link Event#stopPropagation}.
590
- *
591
- * Returning anything but `undefined` from a listener will stop the listener propagation.
592
- *
593
- * @template {keyof EventMap<ServiceMap>} EventName
594
- *
595
- * @param {EventName} events to subscribe to
596
- * @param {number} [priority=1000] listen priority
597
- * @param {EventBusEventCallback<(EventMap<ServiceMap>)[EventName]>} callback
598
- * @param {any} [that] callback context
599
- */
600
- BaseViewer.prototype.on = function(events, priority, callback, that) {
601
- return this.get('eventBus').on(events, priority, callback, that);
602
- };
603
-
604
- /**
605
- * Remove an event listener.
606
- *
607
- * @param {string|string[]} events The event(s).
608
- * @param {Function} [callback] The callback.
609
- */
610
- BaseViewer.prototype.off = function(events, callback) {
611
- this.get('eventBus').off(events, callback);
612
- };
613
-
614
- /**
615
- * Attach the viewer to an HTML element.
616
- *
617
- * @param {HTMLElement} parentNode The parent node to attach to.
618
- */
619
- BaseViewer.prototype.attachTo = function(parentNode) {
620
-
621
- if (!parentNode) {
622
- throw new Error('parentNode required');
623
- }
624
-
625
- // ensure we detach from the
626
- // previous, old parent
627
- this.detach();
628
-
629
- // unwrap jQuery if provided
630
- if (parentNode.get && parentNode.constructor.prototype.jquery) {
631
- parentNode = parentNode.get(0);
632
- }
633
-
634
- if (typeof parentNode === 'string') {
635
- parentNode = domQuery(parentNode);
636
- }
637
-
638
- parentNode.appendChild(this._container);
639
-
640
- this._emit('attach', {});
641
-
642
- this.get('canvas').resized();
643
- };
644
-
645
- /**
646
- * Get the definitions model element.
647
- *
648
- * @return {ModdleElement} The definitions model element.
649
- */
650
- BaseViewer.prototype.getDefinitions = function() {
651
- return this._definitions;
652
- };
653
-
654
- /**
655
- * Detach the viewer.
656
- *
657
- * @fires BaseViewer#DetachEvent
658
- */
659
- BaseViewer.prototype.detach = function() {
660
-
661
- const container = this._container,
662
- parentNode = container.parentNode;
663
-
664
- if (!parentNode) {
665
- return;
666
- }
667
-
668
- /**
669
- * A `detach` event.
670
- *
671
- * @event BaseViewer#DetachEvent
672
- * @type {Object}
673
- */
674
- this._emit('detach', {});
675
-
676
- parentNode.removeChild(container);
677
- };
678
-
679
- BaseViewer.prototype._init = function(container, moddle, options) {
680
-
681
- const baseModules = options.modules || this.getModules(options),
682
- additionalModules = options.additionalModules || [],
683
- staticModules = [
684
- {
685
- bpmnjs: [ 'value', this ],
686
- moddle: [ 'value', moddle ]
687
- }
688
- ];
689
-
690
- const diagramModules = [].concat(staticModules, baseModules, additionalModules);
691
-
692
- const diagramOptions = assign(omit(options, [ 'additionalModules' ]), {
693
- canvas: assign({}, options.canvas, { container: container }),
694
- modules: diagramModules
695
- });
696
-
697
- // invoke diagram constructor
698
- Diagram.call(this, diagramOptions);
699
-
700
- if (options && options.container) {
701
- this.attachTo(options.container);
702
- }
703
- };
704
-
705
- /**
706
- * Emit an event on the underlying {@link EventBus}
707
- *
708
- * @param {string} type
709
- * @param {Object} event
710
- *
711
- * @return {Object} The return value after calling all event listeners.
712
- */
713
- BaseViewer.prototype._emit = function(type, event) {
714
- return this.get('eventBus').fire(type, event);
715
- };
716
-
717
- /**
718
- * @param {BaseViewerOptions} options
719
- *
720
- * @return {HTMLElement}
721
- */
722
- BaseViewer.prototype._createContainer = function(options) {
723
-
724
- const container = domify('<div class="bjs-container"></div>');
725
-
726
- assignStyle(container, {
727
- width: ensureUnit(options.width),
728
- height: ensureUnit(options.height),
729
- position: options.position
730
- });
731
-
732
- return container;
733
- };
734
-
735
- /**
736
- * @param {BaseViewerOptions} options
737
- *
738
- * @return {Moddle}
739
- */
740
- BaseViewer.prototype._createModdle = function(options) {
741
- const moddleOptions = assign({}, this._moddleExtensions, options.moddleExtensions);
742
-
743
- return new BpmnModdle(moddleOptions);
744
- };
745
-
746
- BaseViewer.prototype._modules = [];
747
-
748
- // helpers ///////////////
749
-
750
- function addWarningsToError(err, warningsAry) {
751
- err.warnings = warningsAry;
752
- return err;
753
- }
754
-
755
- function checkValidationError(err) {
756
-
757
- // check if we can help the user by indicating wrong BPMN 2.0 xml
758
- // (in case he or the exporting tool did not get that right)
759
-
760
- const pattern = /unparsable content <([^>]+)> detected([\s\S]*)$/;
761
- const match = pattern.exec(err.message);
762
-
763
- if (match) {
764
- err.message =
765
- 'unparsable content <' + match[1] + '> detected; ' +
766
- 'this may indicate an invalid BPMN 2.0 diagram file' + match[2];
767
- }
768
-
769
- return err;
770
- }
771
-
772
- const DEFAULT_OPTIONS = {
773
- width: '100%',
774
- height: '100%',
775
- position: 'relative'
776
- };
777
-
778
-
779
- /**
780
- * Ensure the passed argument is a proper unit (defaulting to px)
781
- */
782
- function ensureUnit(val) {
783
- return val + (isNumber(val) ? 'px' : '');
784
- }
785
-
786
-
787
- /**
788
- * Find BPMNDiagram in definitions by ID
789
- *
790
- * @param {ModdleElement<Definitions>} definitions
791
- * @param {string} diagramId
792
- *
793
- * @return {ModdleElement<BPMNDiagram>|null}
794
- */
795
- function findBPMNDiagram(definitions, diagramId) {
796
- if (!diagramId) {
797
- return null;
798
- }
799
-
800
- return find(definitions.diagrams, function(element) {
801
- return element.id === diagramId;
802
- }) || null;
803
- }
804
-
805
-
806
- /* <project-logo> */
807
-
808
- import {
809
- open as openPoweredBy,
810
- BPMNIO_IMG,
811
- LOGO_STYLES,
812
- LINK_STYLES
813
- } from './util/PoweredByUtil';
814
-
815
- import {
816
- event as domEvent
817
- } from 'min-dom';
818
-
819
- /**
820
- * Adds the project logo to the diagram container as
821
- * required by the bpmn.io license.
822
- *
823
- * @see http://bpmn.io/license
824
- *
825
- * @param {Element} container
826
- */
827
- function addProjectLogo(container) {
828
- const img = BPMNIO_IMG;
829
-
830
- const linkMarkup =
831
- '<a href="http://bpmn.io" ' +
832
- 'target="_blank" ' +
833
- 'class="bjs-powered-by" ' +
834
- 'title="Powered by bpmn.io" ' +
835
- '>' +
836
- img +
837
- '</a>';
838
-
839
- const linkElement = domify(linkMarkup);
840
-
841
- assignStyle(domQuery('svg', linkElement), LOGO_STYLES);
842
- assignStyle(linkElement, LINK_STYLES, {
843
- position: 'absolute',
844
- bottom: '15px',
845
- right: '15px',
846
- zIndex: '100'
847
- });
848
-
849
- container.appendChild(linkElement);
850
-
851
- domEvent.bind(linkElement, 'click', function(event) {
852
- openPoweredBy();
853
-
854
- event.preventDefault();
855
- });
856
- }
857
-
858
- /* </project-logo> */
1
+ /**
2
+ * The code in the <project-logo></project-logo> area
3
+ * must not be changed.
4
+ *
5
+ * @see http://bpmn.io/license for more information.
6
+ */
7
+ import {
8
+ assign,
9
+ find,
10
+ isNumber,
11
+ omit
12
+ } from 'min-dash';
13
+
14
+ import {
15
+ domify,
16
+ assignStyle,
17
+ query as domQuery,
18
+ remove as domRemove
19
+ } from 'min-dom';
20
+
21
+ import {
22
+ innerSVG
23
+ } from 'tiny-svg';
24
+
25
+ import Diagram from 'diagram-js';
26
+ import BpmnModdle from 'bpmn-moddle';
27
+
28
+ import inherits from 'inherits-browser';
29
+
30
+ import {
31
+ importBpmnDiagram
32
+ } from './import/Importer';
33
+
34
+ /**
35
+ * @template T
36
+ *
37
+ * @typedef { import('diagram-js/lib/core/EventBus').default<T> } EventBus
38
+ */
39
+
40
+ /**
41
+ * @template T
42
+ *
43
+ * @typedef {import('diagram-js/lib/core/EventBus').EventBusEventCallback<T>} EventBusEventCallback
44
+ */
45
+
46
+ /**
47
+ * @typedef {import('didi').ModuleDeclaration} ModuleDeclaration
48
+ *
49
+ * @typedef {import('./model/Types').Moddle} Moddle
50
+ * @typedef {import('./model/Types').ModdleElement} ModdleElement
51
+ * @typedef {import('./model/Types').ModdleExtension} ModdleExtension
52
+ *
53
+ * @typedef { {
54
+ * width?: number|string;
55
+ * height?: number|string;
56
+ * position?: string;
57
+ * container?: string|HTMLElement;
58
+ * moddleExtensions?: ModdleExtensions;
59
+ * additionalModules?: ModuleDeclaration[];
60
+ * } & Record<string, any> } BaseViewerOptions
61
+ *
62
+ * @typedef {Record<string, ModdleElement>} ModdleElementsById
63
+ *
64
+ * @typedef { {
65
+ * [key: string]: ModdleExtension;
66
+ * } } ModdleExtensions
67
+ *
68
+ * @typedef { {
69
+ * warnings: string[];
70
+ * } } ImportXMLResult
71
+ *
72
+ * @typedef {ImportXMLResult & Error} ImportXMLError
73
+ *
74
+ * @typedef {ImportXMLResult} ImportDefinitionsResult
75
+ *
76
+ * @typedef {ImportXMLError} ImportDefinitionsError
77
+ *
78
+ * @typedef {ImportXMLResult} OpenResult
79
+ *
80
+ * @typedef {ImportXMLError} OpenError
81
+ *
82
+ * @typedef { {
83
+ * format?: boolean;
84
+ * preamble?: boolean;
85
+ * } } SaveXMLOptions
86
+ *
87
+ * @typedef { {
88
+ * xml?: string;
89
+ * error?: Error;
90
+ * } } SaveXMLResult
91
+ *
92
+ * @typedef { {
93
+ * svg: string;
94
+ * } } SaveSVGResult
95
+ *
96
+ * @typedef { {
97
+ * xml: string;
98
+ * } } ImportParseStartEvent
99
+ *
100
+ * @typedef { {
101
+ * error?: ImportXMLError;
102
+ * definitions?: ModdleElement;
103
+ * elementsById?: ModdleElementsById;
104
+ * references?: ModdleElement[];
105
+ * warnings: string[];
106
+ * } } ImportParseCompleteEvent
107
+ *
108
+ * @typedef { {
109
+ * error?: ImportXMLError;
110
+ * warnings: string[];
111
+ * } } ImportDoneEvent
112
+ *
113
+ * @typedef { {
114
+ * definitions: ModdleElement;
115
+ * } } SaveXMLStartEvent
116
+ *
117
+ * @typedef {SaveXMLResult} SaveXMLDoneEvent
118
+ *
119
+ * @typedef { {
120
+ * error?: Error;
121
+ * svg: string;
122
+ * } } SaveSVGDoneEvent
123
+ */
124
+
125
+ /**
126
+ * @template Type
127
+ *
128
+ * @typedef { Type extends { eventBus: EventBus<infer X> } ? X : never } EventMap
129
+ */
130
+
131
+ /**
132
+ * A base viewer for BPMN 2.0 diagrams.
133
+ *
134
+ * Have a look at {@link bpmn-js/lib/Viewer}, {@link bpmn-js/lib/NavigatedViewer} or {@link bpmn-js/lib/Modeler} for
135
+ * bundles that include actual features.
136
+ *
137
+ * @template [ServiceMap=null]
138
+ *
139
+ * @extends Diagram<ServiceMap>
140
+ *
141
+ * @param {BaseViewerOptions} [options] The options to configure the viewer.
142
+ */
143
+ export default function BaseViewer(options) {
144
+
145
+ /**
146
+ * @type {BaseViewerOptions}
147
+ */
148
+ options = assign({}, DEFAULT_OPTIONS, options);
149
+
150
+ /**
151
+ * @type {Moddle}
152
+ */
153
+ this._moddle = this._createModdle(options);
154
+
155
+ /**
156
+ * @type {HTMLElement}
157
+ */
158
+ this._container = this._createContainer(options);
159
+
160
+ this._init(this._container, this._moddle, options);
161
+
162
+ /* <project-logo> */
163
+
164
+ addProjectLogo(this._container);
165
+
166
+ /* </project-logo> */
167
+ }
168
+
169
+ inherits(BaseViewer, Diagram);
170
+
171
+ /**
172
+ * Parse and render a BPMN 2.0 diagram.
173
+ *
174
+ * Once finished the viewer reports back the result to the
175
+ * provided callback function with (err, warnings).
176
+ *
177
+ * ## Life-Cycle Events
178
+ *
179
+ * During import the viewer will fire life-cycle events:
180
+ *
181
+ * * import.parse.start (about to read model from XML)
182
+ * * import.parse.complete (model read; may have worked or not)
183
+ * * import.render.start (graphical import start)
184
+ * * import.render.complete (graphical import finished)
185
+ * * import.done (everything done)
186
+ *
187
+ * You can use these events to hook into the life-cycle.
188
+ *
189
+ * @throws {ImportXMLError} An error thrown during the import of the XML.
190
+ *
191
+ * @fires BaseViewer#ImportParseStartEvent
192
+ * @fires BaseViewer#ImportParseCompleteEvent
193
+ * @fires Importer#ImportRenderStartEvent
194
+ * @fires Importer#ImportRenderCompleteEvent
195
+ * @fires BaseViewer#ImportDoneEvent
196
+ *
197
+ * @param {string} xml The BPMN 2.0 XML to be imported.
198
+ * @param {ModdleElement|string} [bpmnDiagram] The optional diagram or Id of the BPMN diagram to open.
199
+ *
200
+ * @return {Promise<ImportXMLResult>} A promise resolving with warnings that were produced during the import.
201
+ */
202
+ BaseViewer.prototype.importXML = async function importXML(xml, bpmnDiagram) {
203
+
204
+ const self = this;
205
+
206
+ function ParseCompleteEvent(data) {
207
+ return self.get('eventBus').createEvent(data);
208
+ }
209
+
210
+ let aggregatedWarnings = [];
211
+ try {
212
+
213
+ // hook in pre-parse listeners +
214
+ // allow xml manipulation
215
+
216
+ /**
217
+ * A `import.parse.start` event.
218
+ *
219
+ * @event BaseViewer#ImportParseStartEvent
220
+ * @type {ImportParseStartEvent}
221
+ */
222
+ xml = this._emit('import.parse.start', { xml: xml }) || xml;
223
+
224
+ let parseResult;
225
+ try {
226
+ parseResult = await this._moddle.fromXML(xml, 'bpmn:Definitions');
227
+ } catch (error) {
228
+ this._emit('import.parse.complete', {
229
+ error
230
+ });
231
+
232
+ throw error;
233
+ }
234
+
235
+ let definitions = parseResult.rootElement;
236
+ const references = parseResult.references;
237
+ const parseWarnings = parseResult.warnings;
238
+ const elementsById = parseResult.elementsById;
239
+
240
+ aggregatedWarnings = aggregatedWarnings.concat(parseWarnings);
241
+
242
+ // hook in post parse listeners +
243
+ // allow definitions manipulation
244
+
245
+ /**
246
+ * A `import.parse.complete` event.
247
+ *
248
+ * @event BaseViewer#ImportParseCompleteEvent
249
+ * @type {ImportParseCompleteEvent}
250
+ */
251
+ definitions = this._emit('import.parse.complete', ParseCompleteEvent({
252
+ error: null,
253
+ definitions: definitions,
254
+ elementsById: elementsById,
255
+ references: references,
256
+ warnings: aggregatedWarnings
257
+ })) || definitions;
258
+
259
+ const importResult = await this.importDefinitions(definitions, bpmnDiagram);
260
+
261
+ aggregatedWarnings = aggregatedWarnings.concat(importResult.warnings);
262
+
263
+ /**
264
+ * A `import.parse.complete` event.
265
+ *
266
+ * @event BaseViewer#ImportDoneEvent
267
+ * @type {ImportDoneEvent}
268
+ */
269
+ this._emit('import.done', { error: null, warnings: aggregatedWarnings });
270
+
271
+ return { warnings: aggregatedWarnings };
272
+ } catch (err) {
273
+ let error = err;
274
+ aggregatedWarnings = aggregatedWarnings.concat(error.warnings || []);
275
+ addWarningsToError(error, aggregatedWarnings);
276
+
277
+ error = checkValidationError(error);
278
+
279
+ this._emit('import.done', { error, warnings: error.warnings });
280
+
281
+ throw error;
282
+ }
283
+ };
284
+
285
+
286
+ /**
287
+ * Import parsed definitions and render a BPMN 2.0 diagram.
288
+ *
289
+ * Once finished the viewer reports back the result to the
290
+ * provided callback function with (err, warnings).
291
+ *
292
+ * ## Life-Cycle Events
293
+ *
294
+ * During import the viewer will fire life-cycle events:
295
+ *
296
+ * * import.render.start (graphical import start)
297
+ * * import.render.complete (graphical import finished)
298
+ *
299
+ * You can use these events to hook into the life-cycle.
300
+ *
301
+ * @throws {ImportDefinitionsError} An error thrown during the import of the definitions.
302
+ *
303
+ * @param {ModdleElement} definitions The definitions.
304
+ * @param {ModdleElement|string} [bpmnDiagram] The optional diagram or ID of the BPMN diagram to open.
305
+ *
306
+ * @return {Promise<ImportDefinitionsResult>} A promise resolving with warnings that were produced during the import.
307
+ */
308
+ BaseViewer.prototype.importDefinitions = async function importDefinitions(definitions, bpmnDiagram) {
309
+ this._setDefinitions(definitions);
310
+ const result = await this.open(bpmnDiagram);
311
+
312
+ return { warnings: result.warnings };
313
+ };
314
+
315
+
316
+ /**
317
+ * Open diagram of previously imported XML.
318
+ *
319
+ * Once finished the viewer reports back the result to the
320
+ * provided callback function with (err, warnings).
321
+ *
322
+ * ## Life-Cycle Events
323
+ *
324
+ * During switch the viewer will fire life-cycle events:
325
+ *
326
+ * * import.render.start (graphical import start)
327
+ * * import.render.complete (graphical import finished)
328
+ *
329
+ * You can use these events to hook into the life-cycle.
330
+ *
331
+ * @throws {OpenError} An error thrown during opening.
332
+ *
333
+ * @param {ModdleElement|string} bpmnDiagramOrId The diagram or Id of the BPMN diagram to open.
334
+ *
335
+ * @return {Promise<OpenResult>} A promise resolving with warnings that were produced during opening.
336
+ */
337
+ BaseViewer.prototype.open = async function open(bpmnDiagramOrId) {
338
+
339
+ const definitions = this._definitions;
340
+ let bpmnDiagram = bpmnDiagramOrId;
341
+
342
+ if (!definitions) {
343
+ const error = new Error('no XML imported');
344
+ addWarningsToError(error, []);
345
+
346
+ throw error;
347
+ }
348
+
349
+ if (typeof bpmnDiagramOrId === 'string') {
350
+ bpmnDiagram = findBPMNDiagram(definitions, bpmnDiagramOrId);
351
+
352
+ if (!bpmnDiagram) {
353
+ const error = new Error('BPMNDiagram <' + bpmnDiagramOrId + '> not found');
354
+ addWarningsToError(error, []);
355
+
356
+ throw error;
357
+ }
358
+ }
359
+
360
+ // clear existing rendered diagram
361
+ // catch synchronous exceptions during #clear()
362
+ try {
363
+ this.clear();
364
+ } catch (error) {
365
+ addWarningsToError(error, []);
366
+
367
+ throw error;
368
+ }
369
+
370
+ // perform graphical import
371
+ const { warnings } = await importBpmnDiagram(this, definitions, bpmnDiagram);
372
+
373
+ return { warnings };
374
+ };
375
+
376
+ /**
377
+ * Export the currently displayed BPMN 2.0 diagram as
378
+ * a BPMN 2.0 XML document.
379
+ *
380
+ * ## Life-Cycle Events
381
+ *
382
+ * During XML saving the viewer will fire life-cycle events:
383
+ *
384
+ * * saveXML.start (before serialization)
385
+ * * saveXML.serialized (after xml generation)
386
+ * * saveXML.done (everything done)
387
+ *
388
+ * You can use these events to hook into the life-cycle.
389
+ *
390
+ * @throws {Error} An error thrown during export.
391
+ *
392
+ * @fires BaseViewer#SaveXMLStart
393
+ * @fires BaseViewer#SaveXMLDone
394
+ *
395
+ * @param {SaveXMLOptions} [options] The options.
396
+ *
397
+ * @return {Promise<SaveXMLResult>} A promise resolving with the XML.
398
+ */
399
+ BaseViewer.prototype.saveXML = async function saveXML(options) {
400
+
401
+ options = options || {};
402
+
403
+ let definitions = this._definitions,
404
+ error, xml;
405
+
406
+ try {
407
+ if (!definitions) {
408
+ throw new Error('no definitions loaded');
409
+ }
410
+
411
+ // allow to fiddle around with definitions
412
+
413
+ /**
414
+ * A `saveXML.start` event.
415
+ *
416
+ * @event BaseViewer#SaveXMLStartEvent
417
+ * @type {SaveXMLStartEvent}
418
+ */
419
+ definitions = this._emit('saveXML.start', {
420
+ definitions
421
+ }) || definitions;
422
+
423
+ const result = await this._moddle.toXML(definitions, options);
424
+ xml = result.xml;
425
+
426
+ xml = this._emit('saveXML.serialized', {
427
+ xml
428
+ }) || xml;
429
+ } catch (err) {
430
+ error = err;
431
+ }
432
+
433
+ const result = error ? { error } : { xml };
434
+
435
+ /**
436
+ * A `saveXML.done` event.
437
+ *
438
+ * @event BaseViewer#SaveXMLDoneEvent
439
+ * @type {SaveXMLDoneEvent}
440
+ */
441
+ this._emit('saveXML.done', result);
442
+
443
+ if (error) {
444
+ throw error;
445
+ }
446
+
447
+ return result;
448
+ };
449
+
450
+
451
+ /**
452
+ * Export the currently displayed BPMN 2.0 diagram as
453
+ * an SVG image.
454
+ *
455
+ * ## Life-Cycle Events
456
+ *
457
+ * During SVG saving the viewer will fire life-cycle events:
458
+ *
459
+ * * saveSVG.start (before serialization)
460
+ * * saveSVG.done (everything done)
461
+ *
462
+ * You can use these events to hook into the life-cycle.
463
+ *
464
+ * @throws {Error} An error thrown during export.
465
+ *
466
+ * @fires BaseViewer#SaveSVGDone
467
+ *
468
+ * @return {Promise<SaveSVGResult>} A promise resolving with the SVG.
469
+ */
470
+ BaseViewer.prototype.saveSVG = async function saveSVG() {
471
+ this._emit('saveSVG.start');
472
+
473
+ let svg, err;
474
+
475
+ try {
476
+ const canvas = this.get('canvas');
477
+
478
+ const contentNode = canvas.getActiveLayer(),
479
+ defsNode = domQuery(':scope > defs', canvas._svg);
480
+
481
+ const contents = innerSVG(contentNode),
482
+ defs = defsNode ? '<defs>' + innerSVG(defsNode) + '</defs>' : '';
483
+
484
+ const bbox = contentNode.getBBox();
485
+
486
+ svg =
487
+ '<?xml version="1.0" encoding="utf-8"?>\n' +
488
+ '<!-- created with bpmn-js / http://bpmn.io -->\n' +
489
+ '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n' +
490
+ '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ' +
491
+ 'width="' + bbox.width + '" height="' + bbox.height + '" ' +
492
+ 'viewBox="' + bbox.x + ' ' + bbox.y + ' ' + bbox.width + ' ' + bbox.height + '" version="1.1">' +
493
+ defs + contents +
494
+ '</svg>';
495
+ } catch (e) {
496
+ err = e;
497
+ }
498
+
499
+ /**
500
+ * A `saveSVG.done` event.
501
+ *
502
+ * @event BaseViewer#SaveSVGDoneEvent
503
+ * @type {SaveSVGDoneEvent}
504
+ */
505
+ this._emit('saveSVG.done', {
506
+ error: err,
507
+ svg: svg
508
+ });
509
+
510
+ if (err) {
511
+ throw err;
512
+ }
513
+
514
+ return { svg };
515
+ };
516
+
517
+ BaseViewer.prototype._setDefinitions = function(definitions) {
518
+ this._definitions = definitions;
519
+ };
520
+
521
+ /**
522
+ * Return modules to instantiate with.
523
+ *
524
+ * @return {ModuleDeclaration[]} The modules.
525
+ */
526
+ BaseViewer.prototype.getModules = function() {
527
+ return this._modules;
528
+ };
529
+
530
+ /**
531
+ * Remove all drawn elements from the viewer.
532
+ *
533
+ * After calling this method the viewer can still be reused for opening another
534
+ * diagram.
535
+ */
536
+ BaseViewer.prototype.clear = function() {
537
+ if (!this.getDefinitions()) {
538
+
539
+ // no diagram to clear
540
+ return;
541
+ }
542
+
543
+ // remove drawn elements
544
+ Diagram.prototype.clear.call(this);
545
+ };
546
+
547
+ /**
548
+ * Destroy the viewer instance and remove all its remainders from the document
549
+ * tree.
550
+ */
551
+ BaseViewer.prototype.destroy = function() {
552
+
553
+ // diagram destroy
554
+ Diagram.prototype.destroy.call(this);
555
+
556
+ // dom detach
557
+ domRemove(this._container);
558
+ };
559
+
560
+ /**
561
+ * @overlord
562
+ *
563
+ * Register an event listener for events with the given name.
564
+ *
565
+ * The callback will be invoked with `event, ...additionalArguments`
566
+ * that have been passed to {@link EventBus#fire}.
567
+ *
568
+ * Returning false from a listener will prevent the events default action
569
+ * (if any is specified). To stop an event from being processed further in
570
+ * other listeners execute {@link Event#stopPropagation}.
571
+ *
572
+ * Returning anything but `undefined` from a listener will stop the listener propagation.
573
+ *
574
+ * @template T
575
+ *
576
+ * @param {string|string[]} events The event(s) to listen to.
577
+ * @param {number} [priority] The priority with which to listen.
578
+ * @param {EventBusEventCallback<T>} callback The callback.
579
+ * @param {any} [that] Value of `this` the callback will be called with.
580
+ */
581
+ /**
582
+ * Register an event listener for events with the given name.
583
+ *
584
+ * The callback will be invoked with `event, ...additionalArguments`
585
+ * that have been passed to {@link EventBus#fire}.
586
+ *
587
+ * Returning false from a listener will prevent the events default action
588
+ * (if any is specified). To stop an event from being processed further in
589
+ * other listeners execute {@link Event#stopPropagation}.
590
+ *
591
+ * Returning anything but `undefined` from a listener will stop the listener propagation.
592
+ *
593
+ * @template {keyof EventMap<ServiceMap>} EventName
594
+ *
595
+ * @param {EventName} events to subscribe to
596
+ * @param {number} [priority=1000] listen priority
597
+ * @param {EventBusEventCallback<(EventMap<ServiceMap>)[EventName]>} callback
598
+ * @param {any} [that] callback context
599
+ */
600
+ BaseViewer.prototype.on = function(events, priority, callback, that) {
601
+ return this.get('eventBus').on(events, priority, callback, that);
602
+ };
603
+
604
+ /**
605
+ * Remove an event listener.
606
+ *
607
+ * @param {string|string[]} events The event(s).
608
+ * @param {Function} [callback] The callback.
609
+ */
610
+ BaseViewer.prototype.off = function(events, callback) {
611
+ this.get('eventBus').off(events, callback);
612
+ };
613
+
614
+ /**
615
+ * Attach the viewer to an HTML element.
616
+ *
617
+ * @param {HTMLElement} parentNode The parent node to attach to.
618
+ */
619
+ BaseViewer.prototype.attachTo = function(parentNode) {
620
+
621
+ if (!parentNode) {
622
+ throw new Error('parentNode required');
623
+ }
624
+
625
+ // ensure we detach from the
626
+ // previous, old parent
627
+ this.detach();
628
+
629
+ // unwrap jQuery if provided
630
+ if (parentNode.get && parentNode.constructor.prototype.jquery) {
631
+ parentNode = parentNode.get(0);
632
+ }
633
+
634
+ if (typeof parentNode === 'string') {
635
+ parentNode = domQuery(parentNode);
636
+ }
637
+
638
+ parentNode.appendChild(this._container);
639
+
640
+ this._emit('attach', {});
641
+
642
+ this.get('canvas').resized();
643
+ };
644
+
645
+ /**
646
+ * Get the definitions model element.
647
+ *
648
+ * @return {ModdleElement} The definitions model element.
649
+ */
650
+ BaseViewer.prototype.getDefinitions = function() {
651
+ return this._definitions;
652
+ };
653
+
654
+ /**
655
+ * Detach the viewer.
656
+ *
657
+ * @fires BaseViewer#DetachEvent
658
+ */
659
+ BaseViewer.prototype.detach = function() {
660
+
661
+ const container = this._container,
662
+ parentNode = container.parentNode;
663
+
664
+ if (!parentNode) {
665
+ return;
666
+ }
667
+
668
+ /**
669
+ * A `detach` event.
670
+ *
671
+ * @event BaseViewer#DetachEvent
672
+ * @type {Object}
673
+ */
674
+ this._emit('detach', {});
675
+
676
+ parentNode.removeChild(container);
677
+ };
678
+
679
+ BaseViewer.prototype._init = function(container, moddle, options) {
680
+
681
+ const baseModules = options.modules || this.getModules(options),
682
+ additionalModules = options.additionalModules || [],
683
+ staticModules = [
684
+ {
685
+ bpmnjs: [ 'value', this ],
686
+ moddle: [ 'value', moddle ]
687
+ }
688
+ ];
689
+
690
+ const diagramModules = [].concat(staticModules, baseModules, additionalModules);
691
+
692
+ const diagramOptions = assign(omit(options, [ 'additionalModules' ]), {
693
+ canvas: assign({}, options.canvas, { container: container }),
694
+ modules: diagramModules
695
+ });
696
+
697
+ // invoke diagram constructor
698
+ Diagram.call(this, diagramOptions);
699
+
700
+ if (options && options.container) {
701
+ this.attachTo(options.container);
702
+ }
703
+ };
704
+
705
+ /**
706
+ * Emit an event on the underlying {@link EventBus}
707
+ *
708
+ * @param {string} type
709
+ * @param {Object} event
710
+ *
711
+ * @return {Object} The return value after calling all event listeners.
712
+ */
713
+ BaseViewer.prototype._emit = function(type, event) {
714
+ return this.get('eventBus').fire(type, event);
715
+ };
716
+
717
+ /**
718
+ * @param {BaseViewerOptions} options
719
+ *
720
+ * @return {HTMLElement}
721
+ */
722
+ BaseViewer.prototype._createContainer = function(options) {
723
+
724
+ const container = domify('<div class="bjs-container"></div>');
725
+
726
+ assignStyle(container, {
727
+ width: ensureUnit(options.width),
728
+ height: ensureUnit(options.height),
729
+ position: options.position
730
+ });
731
+
732
+ return container;
733
+ };
734
+
735
+ /**
736
+ * @param {BaseViewerOptions} options
737
+ *
738
+ * @return {Moddle}
739
+ */
740
+ BaseViewer.prototype._createModdle = function(options) {
741
+ const moddleOptions = assign({}, this._moddleExtensions, options.moddleExtensions);
742
+
743
+ return new BpmnModdle(moddleOptions);
744
+ };
745
+
746
+ BaseViewer.prototype._modules = [];
747
+
748
+ // helpers ///////////////
749
+
750
+ function addWarningsToError(err, warningsAry) {
751
+ err.warnings = warningsAry;
752
+ return err;
753
+ }
754
+
755
+ function checkValidationError(err) {
756
+
757
+ // check if we can help the user by indicating wrong BPMN 2.0 xml
758
+ // (in case he or the exporting tool did not get that right)
759
+
760
+ const pattern = /unparsable content <([^>]+)> detected([\s\S]*)$/;
761
+ const match = pattern.exec(err.message);
762
+
763
+ if (match) {
764
+ err.message =
765
+ 'unparsable content <' + match[1] + '> detected; ' +
766
+ 'this may indicate an invalid BPMN 2.0 diagram file' + match[2];
767
+ }
768
+
769
+ return err;
770
+ }
771
+
772
+ const DEFAULT_OPTIONS = {
773
+ width: '100%',
774
+ height: '100%',
775
+ position: 'relative'
776
+ };
777
+
778
+
779
+ /**
780
+ * Ensure the passed argument is a proper unit (defaulting to px)
781
+ */
782
+ function ensureUnit(val) {
783
+ return val + (isNumber(val) ? 'px' : '');
784
+ }
785
+
786
+
787
+ /**
788
+ * Find BPMNDiagram in definitions by ID
789
+ *
790
+ * @param {ModdleElement<Definitions>} definitions
791
+ * @param {string} diagramId
792
+ *
793
+ * @return {ModdleElement<BPMNDiagram>|null}
794
+ */
795
+ function findBPMNDiagram(definitions, diagramId) {
796
+ if (!diagramId) {
797
+ return null;
798
+ }
799
+
800
+ return find(definitions.diagrams, function(element) {
801
+ return element.id === diagramId;
802
+ }) || null;
803
+ }
804
+
805
+
806
+ /* <project-logo> */
807
+
808
+ import {
809
+ open as openPoweredBy,
810
+ BPMNIO_IMG,
811
+ LOGO_STYLES,
812
+ LINK_STYLES
813
+ } from './util/PoweredByUtil';
814
+
815
+ import {
816
+ event as domEvent
817
+ } from 'min-dom';
818
+
819
+ /**
820
+ * Adds the project logo to the diagram container as
821
+ * required by the bpmn.io license.
822
+ *
823
+ * @see http://bpmn.io/license
824
+ *
825
+ * @param {Element} container
826
+ */
827
+ function addProjectLogo(container) {
828
+ const img = BPMNIO_IMG;
829
+
830
+ const linkMarkup =
831
+ '<a href="http://bpmn.io" ' +
832
+ 'target="_blank" ' +
833
+ 'class="bjs-powered-by" ' +
834
+ 'title="Powered by bpmn.io" ' +
835
+ '>' +
836
+ img +
837
+ '</a>';
838
+
839
+ const linkElement = domify(linkMarkup);
840
+
841
+ assignStyle(domQuery('svg', linkElement), LOGO_STYLES);
842
+ assignStyle(linkElement, LINK_STYLES, {
843
+ position: 'absolute',
844
+ bottom: '15px',
845
+ right: '15px',
846
+ zIndex: '100'
847
+ });
848
+
849
+ container.appendChild(linkElement);
850
+
851
+ domEvent.bind(linkElement, 'click', function(event) {
852
+ openPoweredBy();
853
+
854
+ event.preventDefault();
855
+ });
856
+ }
857
+
858
+ /* </project-logo> */