bpmn-js 17.6.1 → 17.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 (338) hide show
  1. package/LICENSE +23 -23
  2. package/README.md +93 -93
  3. package/dist/assets/bpmn-js.css +145 -145
  4. package/dist/bpmn-modeler.development.js +25393 -25381
  5. package/dist/bpmn-modeler.production.min.js +2 -2
  6. package/dist/bpmn-navigated-viewer.development.js +21134 -21134
  7. package/dist/bpmn-navigated-viewer.production.min.js +1 -1
  8. package/dist/bpmn-viewer.development.js +21059 -21059
  9. package/dist/bpmn-viewer.production.min.js +1 -1
  10. package/index.js +2 -2
  11. package/lib/BaseModeler.d.ts +15 -15
  12. package/lib/BaseModeler.js +79 -79
  13. package/lib/BaseViewer.d.ts +352 -352
  14. package/lib/BaseViewer.js +858 -858
  15. package/lib/Modeler.d.ts +86 -86
  16. package/lib/Modeler.js +204 -204
  17. package/lib/NavigatedViewer.d.ts +11 -11
  18. package/lib/NavigatedViewer.js +37 -37
  19. package/lib/Viewer.d.ts +47 -47
  20. package/lib/Viewer.js +78 -78
  21. package/lib/core/index.d.ts +10 -10
  22. package/lib/core/index.js +8 -8
  23. package/lib/draw/BpmnRenderUtil.d.ts +123 -123
  24. package/lib/draw/BpmnRenderUtil.js +256 -256
  25. package/lib/draw/BpmnRenderer.d.ts +114 -114
  26. package/lib/draw/BpmnRenderer.js +2340 -2340
  27. package/lib/draw/PathMap.d.ts +330 -330
  28. package/lib/draw/PathMap.js +478 -478
  29. package/lib/draw/TextRenderer.d.ts +74 -74
  30. package/lib/draw/TextRenderer.js +136 -136
  31. package/lib/draw/index.d.ts +10 -10
  32. package/lib/draw/index.js +11 -11
  33. package/lib/features/align-elements/AlignElementsContextPadProvider.d.ts +32 -32
  34. package/lib/features/align-elements/AlignElementsContextPadProvider.js +105 -105
  35. package/lib/features/align-elements/AlignElementsIcons.d.ts +10 -10
  36. package/lib/features/align-elements/AlignElementsIcons.js +43 -43
  37. package/lib/features/align-elements/AlignElementsMenuProvider.d.ts +32 -32
  38. package/lib/features/align-elements/AlignElementsMenuProvider.js +100 -100
  39. package/lib/features/align-elements/BpmnAlignElements.d.ts +9 -9
  40. package/lib/features/align-elements/BpmnAlignElements.js +45 -45
  41. package/lib/features/align-elements/index.d.ts +11 -11
  42. package/lib/features/align-elements/index.js +23 -23
  43. package/lib/features/append-preview/AppendPreview.d.ts +36 -36
  44. package/lib/features/append-preview/AppendPreview.js +108 -108
  45. package/lib/features/append-preview/index.d.ts +16 -16
  46. package/lib/features/append-preview/index.js +15 -15
  47. package/lib/features/auto-place/BpmnAutoPlace.d.ts +13 -13
  48. package/lib/features/auto-place/BpmnAutoPlace.js +20 -20
  49. package/lib/features/auto-place/BpmnAutoPlaceUtil.d.ts +47 -47
  50. package/lib/features/auto-place/BpmnAutoPlaceUtil.js +225 -225
  51. package/lib/features/auto-place/index.d.ts +7 -7
  52. package/lib/features/auto-place/index.js +8 -8
  53. package/lib/features/auto-resize/BpmnAutoResize.d.ts +25 -25
  54. package/lib/features/auto-resize/BpmnAutoResize.js +45 -45
  55. package/lib/features/auto-resize/BpmnAutoResizeProvider.d.ts +26 -26
  56. package/lib/features/auto-resize/BpmnAutoResizeProvider.js +69 -69
  57. package/lib/features/auto-resize/index.d.ts +8 -8
  58. package/lib/features/auto-resize/index.js +12 -12
  59. package/lib/features/context-pad/ContextPadProvider.d.ts +73 -73
  60. package/lib/features/context-pad/ContextPadProvider.js +591 -591
  61. package/lib/features/context-pad/index.d.ts +7 -7
  62. package/lib/features/context-pad/index.js +22 -22
  63. package/lib/features/copy-paste/BpmnCopyPaste.d.ts +17 -17
  64. package/lib/features/copy-paste/BpmnCopyPaste.js +192 -192
  65. package/lib/features/copy-paste/ModdleCopy.d.ts +45 -45
  66. package/lib/features/copy-paste/ModdleCopy.js +275 -275
  67. package/lib/features/copy-paste/index.d.ts +9 -9
  68. package/lib/features/copy-paste/index.js +13 -13
  69. package/lib/features/di-ordering/BpmnDiOrdering.d.ts +11 -11
  70. package/lib/features/di-ordering/BpmnDiOrdering.js +48 -48
  71. package/lib/features/di-ordering/index.d.ts +6 -6
  72. package/lib/features/di-ordering/index.js +7 -7
  73. package/lib/features/distribute-elements/BpmnDistributeElements.d.ts +10 -10
  74. package/lib/features/distribute-elements/BpmnDistributeElements.js +60 -60
  75. package/lib/features/distribute-elements/DistributeElementsIcons.d.ts +5 -5
  76. package/lib/features/distribute-elements/DistributeElementsIcons.js +18 -18
  77. package/lib/features/distribute-elements/DistributeElementsMenuProvider.d.ts +32 -32
  78. package/lib/features/distribute-elements/DistributeElementsMenuProvider.js +92 -92
  79. package/lib/features/distribute-elements/index.d.ts +9 -9
  80. package/lib/features/distribute-elements/index.js +19 -19
  81. package/lib/features/drilldown/DrilldownBreadcrumbs.d.ts +19 -19
  82. package/lib/features/drilldown/DrilldownBreadcrumbs.js +131 -131
  83. package/lib/features/drilldown/DrilldownCentering.d.ts +17 -17
  84. package/lib/features/drilldown/DrilldownCentering.js +122 -122
  85. package/lib/features/drilldown/DrilldownOverlayBehavior.d.ts +18 -18
  86. package/lib/features/drilldown/DrilldownOverlayBehavior.js +210 -210
  87. package/lib/features/drilldown/SubprocessCompatibility.d.ts +21 -21
  88. package/lib/features/drilldown/SubprocessCompatibility.js +268 -268
  89. package/lib/features/drilldown/index.d.ts +13 -13
  90. package/lib/features/drilldown/index.js +16 -16
  91. package/lib/features/editor-actions/BpmnEditorActions.d.ts +13 -13
  92. package/lib/features/editor-actions/BpmnEditorActions.js +187 -187
  93. package/lib/features/editor-actions/index.d.ts +6 -6
  94. package/lib/features/editor-actions/index.js +10 -10
  95. package/lib/features/grid-snapping/BpmnGridSnapping.d.ts +9 -9
  96. package/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.d.ts +12 -12
  97. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.d.ts +27 -27
  98. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js +155 -155
  99. package/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.d.ts +13 -13
  100. package/lib/features/grid-snapping/behavior/index.d.ts +10 -10
  101. package/lib/features/grid-snapping/index.d.ts +11 -11
  102. package/lib/features/interaction-events/BpmnInteractionEvents.d.ts +18 -18
  103. package/lib/features/interaction-events/BpmnInteractionEvents.js +150 -150
  104. package/lib/features/interaction-events/index.d.ts +6 -6
  105. package/lib/features/interaction-events/index.js +5 -5
  106. package/lib/features/keyboard/BpmnKeyboardBindings.d.ts +15 -15
  107. package/lib/features/keyboard/BpmnKeyboardBindings.js +179 -179
  108. package/lib/features/keyboard/index.d.ts +7 -7
  109. package/lib/features/keyboard/index.js +11 -11
  110. package/lib/features/label-editing/LabelEditingPreview.d.ts +13 -13
  111. package/lib/features/label-editing/LabelEditingPreview.js +144 -144
  112. package/lib/features/label-editing/LabelEditingProvider.d.ts +62 -62
  113. package/lib/features/label-editing/LabelEditingProvider.js +519 -519
  114. package/lib/features/label-editing/LabelUtil.d.ts +1 -1
  115. package/lib/features/label-editing/LabelUtil.js +4 -4
  116. package/lib/features/label-editing/cmd/UpdateLabelHandler.d.ts +22 -22
  117. package/lib/features/label-editing/cmd/UpdateLabelHandler.js +149 -149
  118. package/lib/features/label-editing/index.d.ts +9 -9
  119. package/lib/features/label-editing/index.js +21 -21
  120. package/lib/features/modeling/BpmnFactory.d.ts +73 -73
  121. package/lib/features/modeling/BpmnFactory.js +180 -180
  122. package/lib/features/modeling/BpmnLayouter.d.ts +26 -26
  123. package/lib/features/modeling/BpmnLayouter.js +481 -481
  124. package/lib/features/modeling/BpmnUpdater.d.ts +90 -90
  125. package/lib/features/modeling/BpmnUpdater.js +837 -837
  126. package/lib/features/modeling/ElementFactory.d.ts +117 -117
  127. package/lib/features/modeling/ElementFactory.js +406 -406
  128. package/lib/features/modeling/ElementFactory.test.ts +132 -132
  129. package/lib/features/modeling/Modeling.d.ts +150 -150
  130. package/lib/features/modeling/Modeling.js +307 -307
  131. package/lib/features/modeling/Modeling.test.ts +147 -147
  132. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.d.ts +20 -20
  133. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js +284 -284
  134. package/lib/features/modeling/behavior/AppendBehavior.d.ts +6 -6
  135. package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
  136. package/lib/features/modeling/behavior/AssociationBehavior.d.ts +11 -11
  137. package/lib/features/modeling/behavior/AttachEventBehavior.d.ts +15 -15
  138. package/lib/features/modeling/behavior/AttachEventBehavior.js +106 -106
  139. package/lib/features/modeling/behavior/BoundaryEventBehavior.d.ts +15 -15
  140. package/lib/features/modeling/behavior/BoundaryEventBehavior.js +74 -74
  141. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.d.ts +17 -17
  142. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js +222 -222
  143. package/lib/features/modeling/behavior/CreateBehavior.d.ts +9 -9
  144. package/lib/features/modeling/behavior/CreateBehavior.js +33 -33
  145. package/lib/features/modeling/behavior/CreateDataObjectBehavior.d.ts +15 -15
  146. package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +43 -43
  147. package/lib/features/modeling/behavior/CreateParticipantBehavior.d.ts +19 -19
  148. package/lib/features/modeling/behavior/CreateParticipantBehavior.js +237 -237
  149. package/lib/features/modeling/behavior/DataInputAssociationBehavior.d.ts +21 -21
  150. package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +162 -162
  151. package/lib/features/modeling/behavior/DataStoreBehavior.d.ts +19 -19
  152. package/lib/features/modeling/behavior/DeleteLaneBehavior.d.ts +15 -15
  153. package/lib/features/modeling/behavior/DeleteLaneBehavior.js +162 -162
  154. package/lib/features/modeling/behavior/DetachEventBehavior.d.ts +15 -15
  155. package/lib/features/modeling/behavior/DetachEventBehavior.js +101 -101
  156. package/lib/features/modeling/behavior/DropOnFlowBehavior.d.ts +13 -13
  157. package/lib/features/modeling/behavior/DropOnFlowBehavior.js +221 -221
  158. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.d.ts +11 -11
  159. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.js +110 -110
  160. package/lib/features/modeling/behavior/FixHoverBehavior.d.ts +17 -17
  161. package/lib/features/modeling/behavior/GroupBehavior.d.ts +26 -26
  162. package/lib/features/modeling/behavior/GroupBehavior.js +332 -332
  163. package/lib/features/modeling/behavior/ImportDockingFix.d.ts +13 -13
  164. package/lib/features/modeling/behavior/ImportDockingFix.js +83 -83
  165. package/lib/features/modeling/behavior/IsHorizontalFix.d.ts +10 -10
  166. package/lib/features/modeling/behavior/IsHorizontalFix.js +54 -54
  167. package/lib/features/modeling/behavior/LabelBehavior.d.ts +56 -56
  168. package/lib/features/modeling/behavior/LabelBehavior.js +364 -364
  169. package/lib/features/modeling/behavior/LayoutConnectionBehavior.d.ts +16 -16
  170. package/lib/features/modeling/behavior/LayoutConnectionBehavior.js +121 -121
  171. package/lib/features/modeling/behavior/MessageFlowBehavior.d.ts +15 -15
  172. package/lib/features/modeling/behavior/NonInterruptingBehavior.d.ts +4 -4
  173. package/lib/features/modeling/behavior/NonInterruptingBehavior.js +41 -41
  174. package/lib/features/modeling/behavior/RemoveElementBehavior.d.ts +13 -13
  175. package/lib/features/modeling/behavior/RemoveElementBehavior.js +91 -91
  176. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.d.ts +16 -16
  177. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js +41 -41
  178. package/lib/features/modeling/behavior/RemoveParticipantBehavior.d.ts +15 -15
  179. package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +54 -54
  180. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.d.ts +15 -15
  181. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +194 -194
  182. package/lib/features/modeling/behavior/ReplaceElementBehaviour.d.ts +23 -23
  183. package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +144 -144
  184. package/lib/features/modeling/behavior/ResizeBehavior.d.ts +67 -67
  185. package/lib/features/modeling/behavior/ResizeBehavior.js +262 -262
  186. package/lib/features/modeling/behavior/ResizeLaneBehavior.d.ts +16 -16
  187. package/lib/features/modeling/behavior/ResizeLaneBehavior.js +70 -70
  188. package/lib/features/modeling/behavior/RootElementReferenceBehavior.d.ts +25 -25
  189. package/lib/features/modeling/behavior/SpaceToolBehavior.d.ts +10 -10
  190. package/lib/features/modeling/behavior/SpaceToolBehavior.js +207 -207
  191. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.d.ts +28 -28
  192. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.js +588 -588
  193. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.d.ts +15 -15
  194. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.js +55 -55
  195. package/lib/features/modeling/behavior/TextAnnotationBehavior.d.ts +6 -6
  196. package/lib/features/modeling/behavior/TextAnnotationBehavior.js +42 -42
  197. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.d.ts +14 -14
  198. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js +87 -87
  199. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.d.ts +13 -13
  200. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js +156 -156
  201. package/lib/features/modeling/behavior/UnclaimIdBehavior.d.ts +19 -19
  202. package/lib/features/modeling/behavior/UnclaimIdBehavior.js +64 -64
  203. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.d.ts +16 -16
  204. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js +59 -59
  205. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.d.ts +15 -15
  206. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +157 -157
  207. package/lib/features/modeling/behavior/index.d.ts +2 -2
  208. package/lib/features/modeling/behavior/index.js +128 -128
  209. package/lib/features/modeling/behavior/util/CategoryUtil.d.ts +49 -49
  210. package/lib/features/modeling/behavior/util/CategoryUtil.js +86 -86
  211. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.d.ts +19 -19
  212. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js +22 -22
  213. package/lib/features/modeling/behavior/util/GeometricUtil.d.ts +1 -1
  214. package/lib/features/modeling/behavior/util/LabelLayoutUtil.d.ts +32 -32
  215. package/lib/features/modeling/behavior/util/LabelLayoutUtil.js +41 -41
  216. package/lib/features/modeling/behavior/util/LayoutUtil.d.ts +48 -48
  217. package/lib/features/modeling/behavior/util/LayoutUtil.js +259 -259
  218. package/lib/features/modeling/behavior/util/LineAttachmentUtil.d.ts +37 -37
  219. package/lib/features/modeling/behavior/util/LineAttachmentUtil.js +241 -241
  220. package/lib/features/modeling/behavior/util/LineIntersect.d.ts +13 -13
  221. package/lib/features/modeling/behavior/util/LineIntersect.js +39 -39
  222. package/lib/features/modeling/behavior/util/NonInterruptingUtil.d.ts +3 -3
  223. package/lib/features/modeling/behavior/util/NonInterruptingUtil.js +32 -32
  224. package/lib/features/modeling/behavior/util/ResizeUtil.d.ts +1 -1
  225. package/lib/features/modeling/cmd/AddLaneHandler.d.ts +22 -22
  226. package/lib/features/modeling/cmd/AddLaneHandler.js +192 -192
  227. package/lib/features/modeling/cmd/IdClaimHandler.d.ts +22 -22
  228. package/lib/features/modeling/cmd/IdClaimHandler.js +51 -51
  229. package/lib/features/modeling/cmd/ResizeLaneHandler.d.ts +39 -39
  230. package/lib/features/modeling/cmd/ResizeLaneHandler.js +146 -146
  231. package/lib/features/modeling/cmd/SetColorHandler.d.ts +18 -18
  232. package/lib/features/modeling/cmd/SplitLaneHandler.d.ts +20 -20
  233. package/lib/features/modeling/cmd/SplitLaneHandler.js +99 -99
  234. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.d.ts +20 -20
  235. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +99 -99
  236. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.d.ts +21 -21
  237. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +218 -218
  238. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.d.ts +20 -20
  239. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js +107 -107
  240. package/lib/features/modeling/cmd/UpdatePropertiesHandler.d.ts +58 -58
  241. package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +260 -260
  242. package/lib/features/modeling/cmd/UpdateSemanticParentHandler.d.ts +18 -18
  243. package/lib/features/modeling/index.d.ts +27 -27
  244. package/lib/features/modeling/index.js +45 -45
  245. package/lib/features/modeling/util/LaneUtil.d.ts +46 -46
  246. package/lib/features/modeling/util/LaneUtil.js +188 -188
  247. package/lib/features/modeling/util/ModelingUtil.d.ts +21 -21
  248. package/lib/features/modeling/util/ModelingUtil.js +54 -54
  249. package/lib/features/modeling-feedback/ModelingFeedback.d.ts +13 -13
  250. package/lib/features/modeling-feedback/ModelingFeedback.js +46 -46
  251. package/lib/features/modeling-feedback/index.d.ts +7 -7
  252. package/lib/features/modeling-feedback/index.js +12 -12
  253. package/lib/features/ordering/BpmnOrderingProvider.d.ts +19 -19
  254. package/lib/features/ordering/BpmnOrderingProvider.js +191 -191
  255. package/lib/features/ordering/index.d.ts +6 -6
  256. package/lib/features/ordering/index.js +5 -5
  257. package/lib/features/outline/OutlineProvider.d.ts +34 -34
  258. package/lib/features/outline/OutlineProvider.js +179 -179
  259. package/lib/features/outline/OutlineUtil.d.ts +18 -18
  260. package/lib/features/outline/OutlineUtil.js +31 -31
  261. package/lib/features/outline/index.d.ts +7 -7
  262. package/lib/features/outline/index.js +10 -10
  263. package/lib/features/palette/PaletteProvider.d.ts +34 -34
  264. package/lib/features/palette/PaletteProvider.js +214 -214
  265. package/lib/features/palette/index.d.ts +9 -9
  266. package/lib/features/palette/index.js +23 -23
  267. package/lib/features/popup-menu/ReplaceMenuProvider.d.ts +52 -52
  268. package/lib/features/popup-menu/ReplaceMenuProvider.js +679 -679
  269. package/lib/features/popup-menu/index.d.ts +11 -11
  270. package/lib/features/popup-menu/index.js +16 -16
  271. package/lib/features/popup-menu/util/Icons.d.ts +5 -5
  272. package/lib/features/popup-menu/util/Icons.js +14 -14
  273. package/lib/features/popup-menu/util/TypeUtil.d.ts +14 -14
  274. package/lib/features/popup-menu/util/TypeUtil.js +52 -52
  275. package/lib/features/replace/BpmnReplace.d.ts +47 -47
  276. package/lib/features/replace/BpmnReplace.js +382 -382
  277. package/lib/features/replace/ReplaceOptions.d.ts +75 -75
  278. package/lib/features/replace/ReplaceOptions.js +919 -919
  279. package/lib/features/replace/index.d.ts +9 -9
  280. package/lib/features/replace/index.js +14 -14
  281. package/lib/features/replace-preview/BpmnReplacePreview.d.ts +17 -17
  282. package/lib/features/replace-preview/BpmnReplacePreview.js +139 -139
  283. package/lib/features/replace-preview/index.d.ts +7 -7
  284. package/lib/features/replace-preview/index.js +11 -11
  285. package/lib/features/rules/BpmnRules.d.ts +181 -181
  286. package/lib/features/rules/BpmnRules.js +1191 -1191
  287. package/lib/features/rules/index.d.ts +7 -7
  288. package/lib/features/rules/index.js +11 -11
  289. package/lib/features/search/BpmnSearchProvider.d.ts +29 -29
  290. package/lib/features/search/BpmnSearchProvider.js +136 -136
  291. package/lib/features/search/index.d.ts +7 -7
  292. package/lib/features/search/index.js +12 -12
  293. package/lib/features/snapping/BpmnConnectSnapping.d.ts +17 -17
  294. package/lib/features/snapping/BpmnCreateMoveSnapping.d.ts +41 -41
  295. package/lib/features/snapping/BpmnCreateMoveSnapping.js +289 -289
  296. package/lib/features/snapping/BpmnSnappingUtil.d.ts +11 -11
  297. package/lib/features/snapping/index.d.ts +9 -9
  298. package/lib/features/snapping/index.js +12 -12
  299. package/lib/features/space-tool/BpmnSpaceTool.d.ts +21 -21
  300. package/lib/features/space-tool/BpmnSpaceTool.js +69 -69
  301. package/lib/features/space-tool/index.d.ts +6 -6
  302. package/lib/features/space-tool/index.js +7 -7
  303. package/lib/import/BpmnImporter.d.ts +51 -51
  304. package/lib/import/BpmnImporter.js +363 -363
  305. package/lib/import/BpmnTreeWalker.d.ts +20 -20
  306. package/lib/import/BpmnTreeWalker.js +453 -453
  307. package/lib/import/Importer.d.ts +25 -25
  308. package/lib/import/Importer.js +217 -217
  309. package/lib/import/Util.d.ts +1 -1
  310. package/lib/import/Util.js +6 -6
  311. package/lib/import/index.d.ts +6 -6
  312. package/lib/import/index.js +9 -9
  313. package/lib/model/Types.d.ts +25 -25
  314. package/lib/model/Types.ts +40 -40
  315. package/lib/util/CompatibilityUtil.d.ts +8 -8
  316. package/lib/util/CompatibilityUtil.js +29 -29
  317. package/lib/util/DiUtil.d.ts +60 -60
  318. package/lib/util/DiUtil.js +122 -122
  319. package/lib/util/DrilldownUtil.d.ts +39 -39
  320. package/lib/util/DrilldownUtil.js +69 -69
  321. package/lib/util/LabelUtil.d.ts +83 -83
  322. package/lib/util/LabelUtil.js +262 -262
  323. package/lib/util/ModelUtil.d.ts +40 -40
  324. package/lib/util/ModelUtil.js +58 -58
  325. package/lib/util/PoweredByUtil.d.ts +8 -8
  326. package/lib/util/PoweredByUtil.js +99 -99
  327. package/lib/util/Types.js +4 -4
  328. package/lib/util/Types.ts +3 -3
  329. package/package.json +132 -132
  330. package/test/helper/TranslationCollector.js +15 -15
  331. package/test/helper/index.js +313 -313
  332. package/test/matchers/BoundsMatchers.js +252 -252
  333. package/test/matchers/ConnectionMatchers.js +165 -165
  334. package/test/matchers/JSONMatcher.js +19 -19
  335. package/test/util/KeyEvents.js +22 -22
  336. package/test/util/MockEvents.js +61 -61
  337. package/test/util/custom-rules/CustomRules.js +16 -16
  338. package/test/util/custom-rules/index.js +6 -6
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
- /* <project-logo> */
161
-
162
- addProjectLogo(this._container);
163
-
164
- /* </project-logo> */
165
-
166
- this._init(this._container, this._moddle, options);
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('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
+ /* <project-logo> */
161
+
162
+ addProjectLogo(this._container);
163
+
164
+ /* </project-logo> */
165
+
166
+ this._init(this._container, this._moddle, options);
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('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> */