bpmn-js 18.2.0 → 18.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +23 -23
- package/README.md +95 -95
- package/dist/assets/bpmn-js.css +145 -145
- package/dist/bpmn-modeler.development.js +38704 -38477
- package/dist/bpmn-modeler.production.min.js +11 -11
- package/dist/bpmn-navigated-viewer.development.js +21139 -21139
- package/dist/bpmn-navigated-viewer.production.min.js +1 -1
- package/dist/bpmn-viewer.development.js +21080 -21080
- package/dist/bpmn-viewer.production.min.js +1 -1
- package/lib/BaseModeler.d.ts +15 -15
- package/lib/BaseModeler.js +79 -79
- package/lib/BaseViewer.d.ts +352 -352
- package/lib/BaseViewer.js +858 -858
- package/lib/Modeler.d.ts +86 -86
- package/lib/Modeler.js +206 -206
- package/lib/NavigatedViewer.d.ts +11 -11
- package/lib/NavigatedViewer.js +37 -37
- package/lib/Viewer.d.ts +47 -47
- package/lib/Viewer.js +76 -76
- package/lib/core/index.d.ts +10 -10
- package/lib/core/index.js +8 -8
- package/lib/draw/BpmnRenderUtil.d.ts +123 -123
- package/lib/draw/BpmnRenderUtil.js +256 -256
- package/lib/draw/BpmnRenderer.d.ts +116 -116
- package/lib/draw/BpmnRenderer.js +2339 -2339
- package/lib/draw/PathMap.d.ts +330 -330
- package/lib/draw/PathMap.js +478 -478
- package/lib/draw/TextRenderer.d.ts +74 -74
- package/lib/draw/TextRenderer.js +136 -136
- package/lib/draw/index.d.ts +10 -10
- package/lib/draw/index.js +11 -11
- package/lib/features/align-elements/AlignElementsContextPadProvider.d.ts +32 -32
- package/lib/features/align-elements/AlignElementsContextPadProvider.js +105 -105
- package/lib/features/align-elements/AlignElementsIcons.d.ts +10 -10
- package/lib/features/align-elements/AlignElementsIcons.js +43 -43
- package/lib/features/align-elements/AlignElementsMenuProvider.d.ts +32 -32
- package/lib/features/align-elements/AlignElementsMenuProvider.js +100 -100
- package/lib/features/align-elements/BpmnAlignElements.d.ts +9 -9
- package/lib/features/align-elements/BpmnAlignElements.js +45 -45
- package/lib/features/align-elements/index.d.ts +11 -11
- package/lib/features/align-elements/index.js +23 -23
- package/lib/features/append-preview/AppendPreview.d.ts +36 -36
- package/lib/features/append-preview/AppendPreview.js +108 -108
- package/lib/features/append-preview/index.d.ts +16 -16
- package/lib/features/append-preview/index.js +15 -15
- package/lib/features/auto-place/BpmnAutoPlace.d.ts +15 -15
- package/lib/features/auto-place/BpmnAutoPlace.js +22 -22
- package/lib/features/auto-place/BpmnAutoPlaceUtil.d.ts +52 -52
- package/lib/features/auto-place/BpmnAutoPlaceUtil.js +226 -226
- package/lib/features/auto-place/index.d.ts +7 -7
- package/lib/features/auto-place/index.js +8 -8
- package/lib/features/auto-resize/BpmnAutoResize.d.ts +25 -25
- package/lib/features/auto-resize/BpmnAutoResize.js +45 -45
- package/lib/features/auto-resize/BpmnAutoResizeProvider.d.ts +26 -26
- package/lib/features/auto-resize/BpmnAutoResizeProvider.js +69 -69
- package/lib/features/auto-resize/index.d.ts +8 -8
- package/lib/features/auto-resize/index.js +12 -12
- package/lib/features/context-pad/ContextPadProvider.d.ts +62 -62
- package/lib/features/context-pad/ContextPadProvider.js +582 -582
- package/lib/features/context-pad/index.d.ts +7 -7
- package/lib/features/context-pad/index.js +22 -22
- package/lib/features/copy-paste/BpmnCopyPaste.d.ts +17 -17
- package/lib/features/copy-paste/BpmnCopyPaste.js +192 -192
- package/lib/features/copy-paste/ModdleCopy.d.ts +45 -45
- package/lib/features/copy-paste/index.d.ts +9 -9
- package/lib/features/copy-paste/index.js +13 -13
- package/lib/features/di-ordering/BpmnDiOrdering.d.ts +11 -11
- package/lib/features/di-ordering/BpmnDiOrdering.js +48 -48
- package/lib/features/di-ordering/index.d.ts +6 -6
- package/lib/features/di-ordering/index.js +7 -7
- package/lib/features/distribute-elements/BpmnDistributeElements.d.ts +10 -10
- package/lib/features/distribute-elements/BpmnDistributeElements.js +60 -60
- package/lib/features/distribute-elements/DistributeElementsIcons.d.ts +5 -5
- package/lib/features/distribute-elements/DistributeElementsIcons.js +18 -18
- package/lib/features/distribute-elements/DistributeElementsMenuProvider.d.ts +32 -32
- package/lib/features/distribute-elements/DistributeElementsMenuProvider.js +92 -92
- package/lib/features/distribute-elements/index.d.ts +9 -9
- package/lib/features/distribute-elements/index.js +19 -19
- package/lib/features/drilldown/DrilldownBreadcrumbs.d.ts +19 -19
- package/lib/features/drilldown/DrilldownBreadcrumbs.js +138 -138
- package/lib/features/drilldown/DrilldownCentering.d.ts +17 -17
- package/lib/features/drilldown/DrilldownCentering.js +122 -122
- package/lib/features/drilldown/DrilldownOverlayBehavior.d.ts +20 -20
- package/lib/features/drilldown/DrilldownOverlayBehavior.js +218 -218
- package/lib/features/drilldown/SubprocessCompatibility.d.ts +21 -21
- package/lib/features/drilldown/SubprocessCompatibility.js +266 -266
- package/lib/features/drilldown/index.d.ts +13 -13
- package/lib/features/drilldown/index.js +16 -16
- package/lib/features/editor-actions/BpmnEditorActions.d.ts +13 -13
- package/lib/features/editor-actions/BpmnEditorActions.js +187 -187
- package/lib/features/editor-actions/index.d.ts +6 -6
- package/lib/features/editor-actions/index.js +10 -10
- package/lib/features/grid-snapping/BpmnGridSnapping.d.ts +9 -9
- package/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.d.ts +14 -14
- package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.d.ts +27 -27
- package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js +155 -155
- package/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.d.ts +13 -13
- package/lib/features/grid-snapping/behavior/index.d.ts +10 -10
- package/lib/features/grid-snapping/index.d.ts +11 -11
- package/lib/features/interaction-events/BpmnInteractionEvents.d.ts +18 -18
- package/lib/features/interaction-events/BpmnInteractionEvents.js +146 -146
- package/lib/features/interaction-events/index.d.ts +6 -6
- package/lib/features/interaction-events/index.js +5 -5
- package/lib/features/keyboard/BpmnKeyboardBindings.d.ts +15 -15
- package/lib/features/keyboard/BpmnKeyboardBindings.js +179 -179
- package/lib/features/keyboard/index.d.ts +7 -7
- package/lib/features/keyboard/index.js +11 -11
- package/lib/features/label-editing/LabelEditingPreview.d.ts +13 -13
- package/lib/features/label-editing/LabelEditingPreview.js +145 -145
- package/lib/features/label-editing/LabelEditingProvider.d.ts +62 -62
- package/lib/features/label-editing/LabelEditingProvider.js +519 -519
- package/lib/features/label-editing/LabelUtil.d.ts +1 -1
- package/lib/features/label-editing/LabelUtil.js +4 -4
- package/lib/features/label-editing/cmd/UpdateLabelHandler.d.ts +22 -22
- package/lib/features/label-editing/cmd/UpdateLabelHandler.js +149 -149
- package/lib/features/label-editing/index.d.ts +9 -9
- package/lib/features/label-editing/index.js +21 -21
- package/lib/features/modeling/BpmnFactory.d.ts +73 -73
- package/lib/features/modeling/BpmnFactory.js +180 -180
- package/lib/features/modeling/BpmnLayouter.d.ts +30 -30
- package/lib/features/modeling/BpmnLayouter.js +488 -488
- package/lib/features/modeling/BpmnUpdater.d.ts +90 -90
- package/lib/features/modeling/BpmnUpdater.js +818 -818
- package/lib/features/modeling/ElementFactory.d.ts +117 -117
- package/lib/features/modeling/ElementFactory.js +412 -412
- package/lib/features/modeling/ElementFactory.test.ts +132 -132
- package/lib/features/modeling/Modeling.d.ts +150 -150
- package/lib/features/modeling/Modeling.js +309 -309
- package/lib/features/modeling/Modeling.test.ts +147 -147
- package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.d.ts +19 -19
- package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js +288 -288
- package/lib/features/modeling/behavior/AppendBehavior.d.ts +6 -6
- package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
- package/lib/features/modeling/behavior/AssociationBehavior.d.ts +11 -11
- package/lib/features/modeling/behavior/AttachEventBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/AttachEventBehavior.js +106 -106
- package/lib/features/modeling/behavior/BoundaryEventBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/BoundaryEventBehavior.js +74 -74
- package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.d.ts +17 -17
- package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js +222 -222
- package/lib/features/modeling/behavior/CreateBehavior.d.ts +9 -9
- package/lib/features/modeling/behavior/CreateBehavior.js +33 -33
- package/lib/features/modeling/behavior/CreateDataObjectBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +43 -43
- package/lib/features/modeling/behavior/CreateParticipantBehavior.d.ts +19 -19
- package/lib/features/modeling/behavior/CreateParticipantBehavior.js +237 -237
- package/lib/features/modeling/behavior/DataInputAssociationBehavior.d.ts +21 -21
- package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +162 -162
- package/lib/features/modeling/behavior/DataStoreBehavior.d.ts +19 -19
- package/lib/features/modeling/behavior/DeleteLaneBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/DeleteLaneBehavior.js +162 -162
- package/lib/features/modeling/behavior/DetachEventBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/DetachEventBehavior.js +101 -101
- package/lib/features/modeling/behavior/DropOnFlowBehavior.d.ts +13 -13
- package/lib/features/modeling/behavior/DropOnFlowBehavior.js +221 -221
- package/lib/features/modeling/behavior/EventBasedGatewayBehavior.d.ts +11 -11
- package/lib/features/modeling/behavior/EventBasedGatewayBehavior.js +110 -110
- package/lib/features/modeling/behavior/FixHoverBehavior.d.ts +17 -17
- package/lib/features/modeling/behavior/GroupBehavior.d.ts +26 -26
- package/lib/features/modeling/behavior/ImportDockingFix.d.ts +13 -13
- package/lib/features/modeling/behavior/ImportDockingFix.js +83 -83
- package/lib/features/modeling/behavior/IsHorizontalFix.d.ts +10 -10
- package/lib/features/modeling/behavior/IsHorizontalFix.js +54 -54
- package/lib/features/modeling/behavior/LabelBehavior.d.ts +56 -56
- package/lib/features/modeling/behavior/LabelBehavior.js +364 -364
- package/lib/features/modeling/behavior/LayoutConnectionBehavior.d.ts +16 -16
- package/lib/features/modeling/behavior/LayoutConnectionBehavior.js +121 -121
- package/lib/features/modeling/behavior/MessageFlowBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/NonInterruptingBehavior.d.ts +4 -4
- package/lib/features/modeling/behavior/NonInterruptingBehavior.js +41 -41
- package/lib/features/modeling/behavior/RemoveElementBehavior.d.ts +13 -13
- package/lib/features/modeling/behavior/RemoveElementBehavior.js +91 -91
- package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.d.ts +16 -16
- package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js +41 -41
- package/lib/features/modeling/behavior/RemoveParticipantBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +59 -59
- package/lib/features/modeling/behavior/ReplaceConnectionBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +194 -194
- package/lib/features/modeling/behavior/ReplaceElementBehaviour.d.ts +23 -23
- package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +144 -144
- package/lib/features/modeling/behavior/ResizeBehavior.d.ts +64 -64
- package/lib/features/modeling/behavior/ResizeBehavior.js +265 -265
- package/lib/features/modeling/behavior/ResizeLaneBehavior.d.ts +16 -16
- package/lib/features/modeling/behavior/ResizeLaneBehavior.js +70 -70
- package/lib/features/modeling/behavior/RootElementReferenceBehavior.d.ts +25 -25
- package/lib/features/modeling/behavior/SetCompensationActivityAfterPasteBehavior.d.ts +16 -16
- package/lib/features/modeling/behavior/SetCompensationActivityAfterPasteBehavior.js +66 -66
- package/lib/features/modeling/behavior/SpaceToolBehavior.d.ts +10 -10
- package/lib/features/modeling/behavior/SpaceToolBehavior.js +207 -207
- package/lib/features/modeling/behavior/SubProcessPlaneBehavior.d.ts +28 -28
- package/lib/features/modeling/behavior/SubProcessPlaneBehavior.js +588 -588
- package/lib/features/modeling/behavior/SubProcessStartEventBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/SubProcessStartEventBehavior.js +55 -55
- package/lib/features/modeling/behavior/TextAnnotationBehavior.d.ts +6 -6
- package/lib/features/modeling/behavior/TextAnnotationBehavior.js +42 -42
- package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.d.ts +14 -14
- package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js +87 -87
- package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.d.ts +13 -13
- package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js +156 -156
- package/lib/features/modeling/behavior/UnclaimIdBehavior.d.ts +19 -19
- package/lib/features/modeling/behavior/UnclaimIdBehavior.js +64 -64
- package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.d.ts +16 -16
- package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js +59 -59
- package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +157 -157
- package/lib/features/modeling/behavior/index.d.ts +2 -2
- package/lib/features/modeling/behavior/index.js +131 -131
- package/lib/features/modeling/behavior/util/CategoryUtil.d.ts +49 -49
- package/lib/features/modeling/behavior/util/CategoryUtil.js +86 -86
- package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.d.ts +19 -19
- package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js +22 -22
- package/lib/features/modeling/behavior/util/GeometricUtil.d.ts +1 -1
- package/lib/features/modeling/behavior/util/LabelLayoutUtil.d.ts +32 -32
- package/lib/features/modeling/behavior/util/LabelLayoutUtil.js +41 -41
- package/lib/features/modeling/behavior/util/LayoutUtil.d.ts +48 -48
- package/lib/features/modeling/behavior/util/LayoutUtil.js +259 -259
- package/lib/features/modeling/behavior/util/LineAttachmentUtil.d.ts +37 -37
- package/lib/features/modeling/behavior/util/LineAttachmentUtil.js +241 -241
- package/lib/features/modeling/behavior/util/LineIntersect.d.ts +13 -13
- package/lib/features/modeling/behavior/util/LineIntersect.js +39 -39
- package/lib/features/modeling/behavior/util/NonInterruptingUtil.d.ts +3 -3
- package/lib/features/modeling/behavior/util/NonInterruptingUtil.js +32 -32
- package/lib/features/modeling/behavior/util/ResizeUtil.d.ts +1 -1
- package/lib/features/modeling/cmd/AddLaneHandler.d.ts +22 -22
- package/lib/features/modeling/cmd/AddLaneHandler.js +187 -187
- package/lib/features/modeling/cmd/IdClaimHandler.d.ts +22 -22
- package/lib/features/modeling/cmd/IdClaimHandler.js +51 -51
- package/lib/features/modeling/cmd/ResizeLaneHandler.d.ts +39 -39
- package/lib/features/modeling/cmd/ResizeLaneHandler.js +146 -146
- package/lib/features/modeling/cmd/SetColorHandler.d.ts +18 -18
- package/lib/features/modeling/cmd/SplitLaneHandler.d.ts +20 -20
- package/lib/features/modeling/cmd/SplitLaneHandler.js +99 -99
- package/lib/features/modeling/cmd/UpdateCanvasRootHandler.d.ts +20 -20
- package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +99 -99
- package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.d.ts +21 -21
- package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +218 -218
- package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.d.ts +20 -20
- package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js +107 -107
- package/lib/features/modeling/cmd/UpdatePropertiesHandler.d.ts +58 -58
- package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +260 -260
- package/lib/features/modeling/cmd/UpdateSemanticParentHandler.d.ts +18 -18
- package/lib/features/modeling/index.d.ts +27 -27
- package/lib/features/modeling/index.js +45 -45
- package/lib/features/modeling/util/LaneUtil.d.ts +46 -46
- package/lib/features/modeling/util/LaneUtil.js +188 -188
- package/lib/features/modeling/util/ModelingUtil.d.ts +23 -23
- package/lib/features/modeling/util/ModelingUtil.js +88 -88
- package/lib/features/modeling-feedback/ModelingFeedback.d.ts +13 -13
- package/lib/features/modeling-feedback/ModelingFeedback.js +46 -46
- package/lib/features/modeling-feedback/index.d.ts +7 -7
- package/lib/features/modeling-feedback/index.js +12 -12
- package/lib/features/ordering/BpmnOrderingProvider.d.ts +19 -19
- package/lib/features/ordering/BpmnOrderingProvider.js +191 -191
- package/lib/features/ordering/index.d.ts +6 -6
- package/lib/features/ordering/index.js +5 -5
- package/lib/features/outline/OutlineProvider.d.ts +39 -39
- package/lib/features/outline/OutlineProvider.js +189 -189
- package/lib/features/outline/OutlineUtil.d.ts +23 -23
- package/lib/features/outline/OutlineUtil.js +35 -35
- package/lib/features/outline/index.d.ts +7 -7
- package/lib/features/outline/index.js +10 -10
- package/lib/features/palette/PaletteProvider.d.ts +34 -34
- package/lib/features/palette/PaletteProvider.js +214 -214
- package/lib/features/palette/index.d.ts +9 -9
- package/lib/features/palette/index.js +23 -23
- package/lib/features/popup-menu/ReplaceMenuProvider.d.ts +52 -52
- package/lib/features/popup-menu/ReplaceMenuProvider.js +656 -629
- package/lib/features/popup-menu/index.d.ts +11 -11
- package/lib/features/popup-menu/index.js +16 -16
- package/lib/features/popup-menu/util/Icons.d.ts +5 -5
- package/lib/features/popup-menu/util/Icons.js +14 -14
- package/lib/features/popup-menu/util/TypeUtil.d.ts +14 -14
- package/lib/features/popup-menu/util/TypeUtil.js +52 -52
- package/lib/features/replace/BpmnReplace.d.ts +45 -45
- package/lib/features/replace/BpmnReplace.js +391 -391
- package/lib/features/replace/ReplaceOptions.d.ts +85 -79
- package/lib/features/replace/ReplaceOptions.js +1198 -998
- package/lib/features/replace/index.d.ts +9 -9
- package/lib/features/replace/index.js +14 -14
- package/lib/features/replace-preview/BpmnReplacePreview.d.ts +17 -17
- package/lib/features/replace-preview/BpmnReplacePreview.js +139 -139
- package/lib/features/replace-preview/index.d.ts +7 -7
- package/lib/features/replace-preview/index.js +11 -11
- package/lib/features/rules/BpmnRules.d.ts +181 -181
- package/lib/features/rules/BpmnRules.js +1191 -1191
- package/lib/features/rules/index.d.ts +7 -7
- package/lib/features/rules/index.js +11 -11
- package/lib/features/search/BpmnSearchProvider.d.ts +34 -34
- package/lib/features/search/BpmnSearchProvider.js +91 -91
- package/lib/features/search/index.d.ts +7 -7
- package/lib/features/search/index.js +14 -14
- package/lib/features/snapping/BpmnConnectSnapping.d.ts +17 -17
- package/lib/features/snapping/BpmnCreateMoveSnapping.d.ts +41 -41
- package/lib/features/snapping/BpmnCreateMoveSnapping.js +289 -289
- package/lib/features/snapping/BpmnSnappingUtil.d.ts +11 -11
- package/lib/features/snapping/index.d.ts +9 -9
- package/lib/features/snapping/index.js +12 -12
- package/lib/features/space-tool/BpmnSpaceTool.d.ts +21 -21
- package/lib/features/space-tool/BpmnSpaceTool.js +69 -69
- package/lib/features/space-tool/index.d.ts +6 -6
- package/lib/features/space-tool/index.js +7 -7
- package/lib/import/BpmnImporter.d.ts +51 -51
- package/lib/import/BpmnImporter.js +363 -363
- package/lib/import/BpmnTreeWalker.d.ts +20 -20
- package/lib/import/BpmnTreeWalker.js +453 -453
- package/lib/import/Importer.d.ts +25 -25
- package/lib/import/Importer.js +222 -222
- package/lib/import/Util.d.ts +1 -1
- package/lib/import/Util.js +6 -6
- package/lib/import/index.d.ts +6 -6
- package/lib/import/index.js +9 -9
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/model/Types.d.ts +25 -25
- package/lib/model/Types.ts +40 -40
- package/lib/util/CompatibilityUtil.d.ts +8 -8
- package/lib/util/CompatibilityUtil.js +29 -29
- package/lib/util/DiUtil.d.ts +60 -60
- package/lib/util/DiUtil.js +122 -122
- package/lib/util/DrilldownUtil.d.ts +39 -39
- package/lib/util/DrilldownUtil.js +69 -69
- package/lib/util/LabelUtil.d.ts +83 -83
- package/lib/util/LabelUtil.js +266 -266
- package/lib/util/ModelUtil.d.ts +40 -40
- package/lib/util/ModelUtil.js +58 -58
- package/lib/util/PoweredByUtil.d.ts +8 -8
- package/lib/util/PoweredByUtil.js +99 -99
- package/lib/util/Types.js +4 -4
- package/lib/util/Types.ts +3 -3
- package/package.json +131 -131
- package/test/helper/TranslationCollector.js +15 -15
- package/test/helper/index.js +313 -313
- package/test/matchers/BoundsMatchers.js +252 -252
- package/test/matchers/ConnectionMatchers.js +165 -165
- package/test/matchers/JSONMatcher.js +19 -19
- package/test/util/KeyEvents.js +22 -22
- package/test/util/MockEvents.js +61 -61
- package/test/util/custom-rules/CustomRules.js +16 -16
- package/test/util/custom-rules/index.js +6 -6
|
@@ -1,488 +1,488 @@
|
|
|
1
|
-
import inherits from 'inherits-browser';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
assign
|
|
5
|
-
} from 'min-dash';
|
|
6
|
-
|
|
7
|
-
import BaseLayouter from 'diagram-js/lib/layout/BaseLayouter';
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
repairConnection,
|
|
11
|
-
withoutRedundantPoints
|
|
12
|
-
} from 'diagram-js/lib/layout/ManhattanLayout';
|
|
13
|
-
|
|
14
|
-
import {
|
|
15
|
-
getMid,
|
|
16
|
-
getOrientation
|
|
17
|
-
} from 'diagram-js/lib/layout/LayoutUtil';
|
|
18
|
-
|
|
19
|
-
import {
|
|
20
|
-
isExpanded
|
|
21
|
-
} from '../../util/DiUtil';
|
|
22
|
-
|
|
23
|
-
import { is } from '../../util/ModelUtil';
|
|
24
|
-
|
|
25
|
-
import { isDirectionHorizontal } from './util/ModelingUtil';
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry
|
|
29
|
-
*
|
|
30
|
-
* @typedef {import('diagram-js/lib/util/Types').Point} Point
|
|
31
|
-
*
|
|
32
|
-
* @typedef {import('../../model/Types').Connection} Connection
|
|
33
|
-
* @typedef {import('../../model/Types').Element} Element
|
|
34
|
-
*
|
|
35
|
-
* @typedef {import('diagram-js/lib/layout/BaseLayouter').LayoutConnectionHints} LayoutConnectionHints
|
|
36
|
-
*
|
|
37
|
-
* @typedef { {
|
|
38
|
-
* source?: Element;
|
|
39
|
-
* target?: Element;
|
|
40
|
-
* waypoints?: Point[];
|
|
41
|
-
* connectionStart?: Point;
|
|
42
|
-
* connectionEnd?: Point;
|
|
43
|
-
* } & LayoutConnectionHints } BpmnLayoutConnectionHints
|
|
44
|
-
*/
|
|
45
|
-
|
|
46
|
-
var ATTACH_ORIENTATION_PADDING = -10,
|
|
47
|
-
BOUNDARY_TO_HOST_THRESHOLD = 40;
|
|
48
|
-
|
|
49
|
-
// layout all connection between flow elements h:h, except for
|
|
50
|
-
// (1) outgoing of boundary events -> layout based on attach orientation and target orientation
|
|
51
|
-
// (2) incoming/outgoing of gateways -> v:h for outgoing, h:v for incoming
|
|
52
|
-
// (3) loops connect sides clockwise
|
|
53
|
-
var PREFERRED_LAYOUTS_HORIZONTAL = {
|
|
54
|
-
default: [ 'h:h' ],
|
|
55
|
-
fromGateway: [ 'v:h' ],
|
|
56
|
-
toGateway: [ 'h:v' ],
|
|
57
|
-
loop: {
|
|
58
|
-
fromTop: [ 't:r' ],
|
|
59
|
-
fromRight: [ 'r:b' ],
|
|
60
|
-
fromLeft: [ 'l:t' ],
|
|
61
|
-
fromBottom: [ 'b:l' ]
|
|
62
|
-
},
|
|
63
|
-
boundaryLoop: {
|
|
64
|
-
alternateHorizontalSide: 'b',
|
|
65
|
-
alternateVerticalSide: 'l',
|
|
66
|
-
default: 'v'
|
|
67
|
-
},
|
|
68
|
-
messageFlow: [ 'straight', 'v:v' ],
|
|
69
|
-
subProcess: [ 'straight', 'h:h' ],
|
|
70
|
-
isHorizontal: true
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
// for vertical layouts, switch h and v and loop counter-clockwise
|
|
74
|
-
var PREFERRED_LAYOUTS_VERTICAL = {
|
|
75
|
-
default: [ 'v:v' ],
|
|
76
|
-
fromGateway: [ 'h:v' ],
|
|
77
|
-
toGateway: [ 'v:h' ],
|
|
78
|
-
loop: {
|
|
79
|
-
fromTop: [ 't:l' ],
|
|
80
|
-
fromRight: [ 'r:t' ],
|
|
81
|
-
fromLeft: [ 'l:b' ],
|
|
82
|
-
fromBottom: [ 'b:r' ]
|
|
83
|
-
},
|
|
84
|
-
boundaryLoop: {
|
|
85
|
-
alternateHorizontalSide: 't',
|
|
86
|
-
alternateVerticalSide: 'r',
|
|
87
|
-
default: 'h'
|
|
88
|
-
},
|
|
89
|
-
messageFlow: [ 'straight', 'h:h' ],
|
|
90
|
-
subProcess: [ 'straight', 'v:v' ],
|
|
91
|
-
isHorizontal: false
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
var oppositeOrientationMapping = {
|
|
95
|
-
'top': 'bottom',
|
|
96
|
-
'top-right': 'bottom-left',
|
|
97
|
-
'top-left': 'bottom-right',
|
|
98
|
-
'right': 'left',
|
|
99
|
-
'bottom': 'top',
|
|
100
|
-
'bottom-right': 'top-left',
|
|
101
|
-
'bottom-left': 'top-right',
|
|
102
|
-
'left': 'right'
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
var orientationDirectionMapping = {
|
|
106
|
-
top: 't',
|
|
107
|
-
right: 'r',
|
|
108
|
-
bottom: 'b',
|
|
109
|
-
left: 'l'
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
export default function BpmnLayouter(elementRegistry) {
|
|
113
|
-
this._elementRegistry = elementRegistry;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
inherits(BpmnLayouter, BaseLayouter);
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Returns waypoints of laid out connection.
|
|
120
|
-
*
|
|
121
|
-
* @param {Connection} connection
|
|
122
|
-
* @param {BpmnLayoutConnectionHints} [hints]
|
|
123
|
-
*
|
|
124
|
-
* @return {Point[]}
|
|
125
|
-
*/
|
|
126
|
-
BpmnLayouter.prototype.layoutConnection = function(connection, hints) {
|
|
127
|
-
if (!hints) {
|
|
128
|
-
hints = {};
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
var source = hints.source || connection.source,
|
|
132
|
-
target = hints.target || connection.target,
|
|
133
|
-
waypoints = hints.waypoints || connection.waypoints,
|
|
134
|
-
connectionStart = hints.connectionStart,
|
|
135
|
-
connectionEnd = hints.connectionEnd,
|
|
136
|
-
elementRegistry = this._elementRegistry;
|
|
137
|
-
|
|
138
|
-
var manhattanOptions,
|
|
139
|
-
updatedWaypoints;
|
|
140
|
-
|
|
141
|
-
if (!connectionStart) {
|
|
142
|
-
connectionStart = getConnectionDocking(waypoints && waypoints[ 0 ], source);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
if (!connectionEnd) {
|
|
146
|
-
connectionEnd = getConnectionDocking(waypoints && waypoints[ waypoints.length - 1 ], target);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
if (is(connection, 'bpmn:Association') ||
|
|
150
|
-
is(connection, 'bpmn:DataAssociation')) {
|
|
151
|
-
|
|
152
|
-
if (waypoints && !isCompensationAssociation(source, target)) {
|
|
153
|
-
return [].concat([ connectionStart ], waypoints.slice(1, -1), [ connectionEnd ]);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
var layout = isDirectionHorizontal(source, elementRegistry) ? PREFERRED_LAYOUTS_HORIZONTAL : PREFERRED_LAYOUTS_VERTICAL;
|
|
158
|
-
|
|
159
|
-
if (is(connection, 'bpmn:MessageFlow')) {
|
|
160
|
-
manhattanOptions = getMessageFlowManhattanOptions(source, target, layout);
|
|
161
|
-
} else if (is(connection, 'bpmn:SequenceFlow') || isCompensationAssociation(source, target)) {
|
|
162
|
-
|
|
163
|
-
if (source === target) {
|
|
164
|
-
manhattanOptions = {
|
|
165
|
-
preferredLayouts: getLoopPreferredLayout(source, connection, layout)
|
|
166
|
-
};
|
|
167
|
-
} else if (is(source, 'bpmn:BoundaryEvent')) {
|
|
168
|
-
manhattanOptions = {
|
|
169
|
-
preferredLayouts: getBoundaryEventPreferredLayouts(source, target, connectionEnd, layout)
|
|
170
|
-
};
|
|
171
|
-
} else if (isExpandedSubProcess(source) || isExpandedSubProcess(target)) {
|
|
172
|
-
manhattanOptions = {
|
|
173
|
-
preferredLayouts: layout.subProcess,
|
|
174
|
-
preserveDocking: getSubProcessPreserveDocking(source)
|
|
175
|
-
};
|
|
176
|
-
} else if (is(source, 'bpmn:Gateway')) {
|
|
177
|
-
manhattanOptions = {
|
|
178
|
-
preferredLayouts: layout.fromGateway
|
|
179
|
-
};
|
|
180
|
-
} else if (is(target, 'bpmn:Gateway')) {
|
|
181
|
-
manhattanOptions = {
|
|
182
|
-
preferredLayouts: layout.toGateway
|
|
183
|
-
};
|
|
184
|
-
} else {
|
|
185
|
-
manhattanOptions = {
|
|
186
|
-
preferredLayouts: layout.default
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
if (manhattanOptions) {
|
|
192
|
-
manhattanOptions = assign(manhattanOptions, hints);
|
|
193
|
-
|
|
194
|
-
updatedWaypoints = withoutRedundantPoints(repairConnection(
|
|
195
|
-
source,
|
|
196
|
-
target,
|
|
197
|
-
connectionStart,
|
|
198
|
-
connectionEnd,
|
|
199
|
-
waypoints,
|
|
200
|
-
manhattanOptions
|
|
201
|
-
));
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return updatedWaypoints || [ connectionStart, connectionEnd ];
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
// helpers //////////
|
|
209
|
-
|
|
210
|
-
function getAttachOrientation(attachedElement) {
|
|
211
|
-
var hostElement = attachedElement.host;
|
|
212
|
-
|
|
213
|
-
return getOrientation(getMid(attachedElement), hostElement, ATTACH_ORIENTATION_PADDING);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
function getMessageFlowManhattanOptions(source, target, layout) {
|
|
217
|
-
return {
|
|
218
|
-
preferredLayouts: layout.messageFlow,
|
|
219
|
-
preserveDocking: getMessageFlowPreserveDocking(source, target)
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
function getMessageFlowPreserveDocking(source, target) {
|
|
224
|
-
|
|
225
|
-
// (1) docking element connected to participant has precedence
|
|
226
|
-
if (is(target, 'bpmn:Participant')) {
|
|
227
|
-
return 'source';
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
if (is(source, 'bpmn:Participant')) {
|
|
231
|
-
return 'target';
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// (2) docking element connected to expanded sub-process has precedence
|
|
235
|
-
if (isExpandedSubProcess(target)) {
|
|
236
|
-
return 'source';
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
if (isExpandedSubProcess(source)) {
|
|
240
|
-
return 'target';
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
// (3) docking event has precedence
|
|
244
|
-
if (is(target, 'bpmn:Event')) {
|
|
245
|
-
return 'target';
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
if (is(source, 'bpmn:Event')) {
|
|
249
|
-
return 'source';
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
return null;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
function getSubProcessPreserveDocking(source) {
|
|
256
|
-
return isExpandedSubProcess(source) ? 'target' : 'source';
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
function getConnectionDocking(point, shape) {
|
|
260
|
-
return point ? (point.original || point) : getMid(shape);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
function isCompensationAssociation(source, target) {
|
|
264
|
-
return is(target, 'bpmn:Activity') &&
|
|
265
|
-
is(source, 'bpmn:BoundaryEvent') &&
|
|
266
|
-
target.businessObject.isForCompensation;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
function isExpandedSubProcess(element) {
|
|
270
|
-
return is(element, 'bpmn:SubProcess') && isExpanded(element);
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
function isSame(a, b) {
|
|
274
|
-
return a === b;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
function isAnyOrientation(orientation, orientations) {
|
|
278
|
-
return orientations.indexOf(orientation) !== -1;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
function getHorizontalOrientation(orientation) {
|
|
282
|
-
var matches = /right|left/.exec(orientation);
|
|
283
|
-
|
|
284
|
-
return matches && matches[0];
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
function getVerticalOrientation(orientation) {
|
|
288
|
-
var matches = /top|bottom/.exec(orientation);
|
|
289
|
-
|
|
290
|
-
return matches && matches[0];
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
function isOppositeOrientation(a, b) {
|
|
294
|
-
return oppositeOrientationMapping[a] === b;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
function isOppositeHorizontalOrientation(a, b) {
|
|
298
|
-
var horizontalOrientation = getHorizontalOrientation(a);
|
|
299
|
-
|
|
300
|
-
var oppositeHorizontalOrientation = oppositeOrientationMapping[horizontalOrientation];
|
|
301
|
-
|
|
302
|
-
return b.indexOf(oppositeHorizontalOrientation) !== -1;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
function isOppositeVerticalOrientation(a, b) {
|
|
306
|
-
var verticalOrientation = getVerticalOrientation(a);
|
|
307
|
-
|
|
308
|
-
var oppositeVerticalOrientation = oppositeOrientationMapping[verticalOrientation];
|
|
309
|
-
|
|
310
|
-
return b.indexOf(oppositeVerticalOrientation) !== -1;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
function isHorizontalOrientation(orientation) {
|
|
314
|
-
return orientation === 'right' || orientation === 'left';
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
function getLoopPreferredLayout(source, connection, layout) {
|
|
318
|
-
var waypoints = connection.waypoints;
|
|
319
|
-
|
|
320
|
-
var orientation = waypoints && waypoints.length && getOrientation(waypoints[0], source);
|
|
321
|
-
|
|
322
|
-
if (orientation === 'top') {
|
|
323
|
-
return layout.loop.fromTop;
|
|
324
|
-
} else if (orientation === 'right') {
|
|
325
|
-
return layout.loop.fromRight;
|
|
326
|
-
} else if (orientation === 'left') {
|
|
327
|
-
return layout.loop.fromLeft;
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
return layout.loop.fromBottom;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
function getBoundaryEventPreferredLayouts(source, target, end, layout) {
|
|
334
|
-
var sourceMid = getMid(source),
|
|
335
|
-
targetMid = getMid(target),
|
|
336
|
-
attachOrientation = getAttachOrientation(source),
|
|
337
|
-
sourceLayout,
|
|
338
|
-
targetLayout;
|
|
339
|
-
|
|
340
|
-
var isLoop = isSame(source.host, target);
|
|
341
|
-
|
|
342
|
-
var attachedToSide = isAnyOrientation(attachOrientation, [ 'top', 'right', 'bottom', 'left' ]);
|
|
343
|
-
|
|
344
|
-
var targetOrientation = getOrientation(targetMid, sourceMid, {
|
|
345
|
-
x: source.width / 2 + target.width / 2,
|
|
346
|
-
y: source.height / 2 + target.height / 2
|
|
347
|
-
});
|
|
348
|
-
|
|
349
|
-
if (isLoop) {
|
|
350
|
-
return getBoundaryEventLoopLayout(attachOrientation, attachedToSide, source, target, end, layout);
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
// source layout
|
|
354
|
-
sourceLayout = getBoundaryEventSourceLayout(attachOrientation, targetOrientation, attachedToSide, layout.isHorizontal);
|
|
355
|
-
|
|
356
|
-
// target layout
|
|
357
|
-
targetLayout = getBoundaryEventTargetLayout(attachOrientation, targetOrientation, attachedToSide, layout.isHorizontal);
|
|
358
|
-
|
|
359
|
-
return [ sourceLayout + ':' + targetLayout ];
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
function getBoundaryEventLoopLayout(attachOrientation, attachedToSide, source, target, end, layout) {
|
|
363
|
-
var orientation = attachedToSide ? attachOrientation : layout.isHorizontal ? getVerticalOrientation(attachOrientation) : getHorizontalOrientation(attachOrientation),
|
|
364
|
-
sourceLayout = orientationDirectionMapping[ orientation ],
|
|
365
|
-
targetLayout;
|
|
366
|
-
|
|
367
|
-
if (attachedToSide) {
|
|
368
|
-
if (isHorizontalOrientation(attachOrientation)) {
|
|
369
|
-
targetLayout = shouldConnectToSameSide('y', source, target, end) ? 'h' : layout.boundaryLoop.alternateHorizontalSide;
|
|
370
|
-
} else {
|
|
371
|
-
targetLayout = shouldConnectToSameSide('x', source, target, end) ? 'v' : layout.boundaryLoop.alternateVerticalSide;
|
|
372
|
-
}
|
|
373
|
-
} else {
|
|
374
|
-
targetLayout = layout.boundaryLoop.default;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
return [ sourceLayout + ':' + targetLayout ];
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
function shouldConnectToSameSide(axis, source, target, end) {
|
|
381
|
-
var threshold = BOUNDARY_TO_HOST_THRESHOLD;
|
|
382
|
-
|
|
383
|
-
return !(
|
|
384
|
-
areCloseOnAxis(axis, end, target, threshold) ||
|
|
385
|
-
areCloseOnAxis(axis, end, {
|
|
386
|
-
x: target.x + target.width,
|
|
387
|
-
y: target.y + target.height
|
|
388
|
-
}, threshold) ||
|
|
389
|
-
areCloseOnAxis(axis, end, getMid(source), threshold)
|
|
390
|
-
);
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
function areCloseOnAxis(axis, a, b, threshold) {
|
|
394
|
-
return Math.abs(a[ axis ] - b[ axis ]) < threshold;
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
function getBoundaryEventSourceLayout(attachOrientation, targetOrientation, attachedToSide, isHorizontal) {
|
|
398
|
-
|
|
399
|
-
// attached to either top, right, bottom or left side
|
|
400
|
-
if (attachedToSide) {
|
|
401
|
-
return orientationDirectionMapping[ attachOrientation ];
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
// attached to either top-right, top-left, bottom-right or bottom-left corner
|
|
405
|
-
|
|
406
|
-
var verticalAttachOrientation = getVerticalOrientation(attachOrientation),
|
|
407
|
-
horizontalAttachOrientation = getHorizontalOrientation(attachOrientation),
|
|
408
|
-
verticalTargetOrientation = getVerticalOrientation(targetOrientation),
|
|
409
|
-
horizontalTargetOrientation = getHorizontalOrientation(targetOrientation);
|
|
410
|
-
|
|
411
|
-
if (isHorizontal) {
|
|
412
|
-
|
|
413
|
-
// same vertical or opposite horizontal orientation
|
|
414
|
-
if (
|
|
415
|
-
isSame(verticalAttachOrientation, verticalTargetOrientation) ||
|
|
416
|
-
isOppositeOrientation(horizontalAttachOrientation, horizontalTargetOrientation)
|
|
417
|
-
) {
|
|
418
|
-
return orientationDirectionMapping[ verticalAttachOrientation ];
|
|
419
|
-
}
|
|
420
|
-
} else {
|
|
421
|
-
|
|
422
|
-
// same horizontal or opposite vertical orientation
|
|
423
|
-
if (
|
|
424
|
-
isSame(horizontalAttachOrientation, horizontalTargetOrientation) ||
|
|
425
|
-
isOppositeOrientation(verticalAttachOrientation, verticalTargetOrientation)
|
|
426
|
-
) {
|
|
427
|
-
return orientationDirectionMapping[ horizontalAttachOrientation ];
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
// fallback
|
|
432
|
-
return orientationDirectionMapping[ isHorizontal ? horizontalAttachOrientation : verticalAttachOrientation ];
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
function getBoundaryEventTargetLayout(attachOrientation, targetOrientation, attachedToSide, isHorizontal) {
|
|
436
|
-
|
|
437
|
-
// attached to either top, right, bottom or left side
|
|
438
|
-
if (attachedToSide) {
|
|
439
|
-
if (isHorizontalOrientation(attachOrientation)) {
|
|
440
|
-
|
|
441
|
-
// orientation is right or left
|
|
442
|
-
|
|
443
|
-
// opposite horizontal orientation or same orientation
|
|
444
|
-
if (
|
|
445
|
-
isOppositeHorizontalOrientation(attachOrientation, targetOrientation) ||
|
|
446
|
-
isSame(attachOrientation, targetOrientation)
|
|
447
|
-
) {
|
|
448
|
-
return 'h';
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
// fallback
|
|
452
|
-
return 'v';
|
|
453
|
-
} else {
|
|
454
|
-
|
|
455
|
-
// orientation is top or bottom
|
|
456
|
-
|
|
457
|
-
// opposite vertical orientation or same orientation
|
|
458
|
-
if (
|
|
459
|
-
isOppositeVerticalOrientation(attachOrientation, targetOrientation) ||
|
|
460
|
-
isSame(attachOrientation, targetOrientation)
|
|
461
|
-
) {
|
|
462
|
-
return 'v';
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
// fallback
|
|
466
|
-
return 'h';
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
// attached to either top-right, top-left, bottom-right or bottom-left corner
|
|
471
|
-
// and orientation is same on the counter-axis
|
|
472
|
-
|
|
473
|
-
if (isHorizontal) {
|
|
474
|
-
if (isSame(getVerticalOrientation(attachOrientation), getVerticalOrientation(targetOrientation))) {
|
|
475
|
-
return 'h';
|
|
476
|
-
} else {
|
|
477
|
-
return 'v';
|
|
478
|
-
}
|
|
479
|
-
} else {
|
|
480
|
-
if (isSame(getHorizontalOrientation(attachOrientation), getHorizontalOrientation(targetOrientation))) {
|
|
481
|
-
return 'v';
|
|
482
|
-
} else {
|
|
483
|
-
return 'h';
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
BpmnLayouter.$inject = [ 'elementRegistry' ];
|
|
1
|
+
import inherits from 'inherits-browser';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
assign
|
|
5
|
+
} from 'min-dash';
|
|
6
|
+
|
|
7
|
+
import BaseLayouter from 'diagram-js/lib/layout/BaseLayouter';
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
repairConnection,
|
|
11
|
+
withoutRedundantPoints
|
|
12
|
+
} from 'diagram-js/lib/layout/ManhattanLayout';
|
|
13
|
+
|
|
14
|
+
import {
|
|
15
|
+
getMid,
|
|
16
|
+
getOrientation
|
|
17
|
+
} from 'diagram-js/lib/layout/LayoutUtil';
|
|
18
|
+
|
|
19
|
+
import {
|
|
20
|
+
isExpanded
|
|
21
|
+
} from '../../util/DiUtil';
|
|
22
|
+
|
|
23
|
+
import { is } from '../../util/ModelUtil';
|
|
24
|
+
|
|
25
|
+
import { isDirectionHorizontal } from './util/ModelingUtil';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry
|
|
29
|
+
*
|
|
30
|
+
* @typedef {import('diagram-js/lib/util/Types').Point} Point
|
|
31
|
+
*
|
|
32
|
+
* @typedef {import('../../model/Types').Connection} Connection
|
|
33
|
+
* @typedef {import('../../model/Types').Element} Element
|
|
34
|
+
*
|
|
35
|
+
* @typedef {import('diagram-js/lib/layout/BaseLayouter').LayoutConnectionHints} LayoutConnectionHints
|
|
36
|
+
*
|
|
37
|
+
* @typedef { {
|
|
38
|
+
* source?: Element;
|
|
39
|
+
* target?: Element;
|
|
40
|
+
* waypoints?: Point[];
|
|
41
|
+
* connectionStart?: Point;
|
|
42
|
+
* connectionEnd?: Point;
|
|
43
|
+
* } & LayoutConnectionHints } BpmnLayoutConnectionHints
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
var ATTACH_ORIENTATION_PADDING = -10,
|
|
47
|
+
BOUNDARY_TO_HOST_THRESHOLD = 40;
|
|
48
|
+
|
|
49
|
+
// layout all connection between flow elements h:h, except for
|
|
50
|
+
// (1) outgoing of boundary events -> layout based on attach orientation and target orientation
|
|
51
|
+
// (2) incoming/outgoing of gateways -> v:h for outgoing, h:v for incoming
|
|
52
|
+
// (3) loops connect sides clockwise
|
|
53
|
+
var PREFERRED_LAYOUTS_HORIZONTAL = {
|
|
54
|
+
default: [ 'h:h' ],
|
|
55
|
+
fromGateway: [ 'v:h' ],
|
|
56
|
+
toGateway: [ 'h:v' ],
|
|
57
|
+
loop: {
|
|
58
|
+
fromTop: [ 't:r' ],
|
|
59
|
+
fromRight: [ 'r:b' ],
|
|
60
|
+
fromLeft: [ 'l:t' ],
|
|
61
|
+
fromBottom: [ 'b:l' ]
|
|
62
|
+
},
|
|
63
|
+
boundaryLoop: {
|
|
64
|
+
alternateHorizontalSide: 'b',
|
|
65
|
+
alternateVerticalSide: 'l',
|
|
66
|
+
default: 'v'
|
|
67
|
+
},
|
|
68
|
+
messageFlow: [ 'straight', 'v:v' ],
|
|
69
|
+
subProcess: [ 'straight', 'h:h' ],
|
|
70
|
+
isHorizontal: true
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
// for vertical layouts, switch h and v and loop counter-clockwise
|
|
74
|
+
var PREFERRED_LAYOUTS_VERTICAL = {
|
|
75
|
+
default: [ 'v:v' ],
|
|
76
|
+
fromGateway: [ 'h:v' ],
|
|
77
|
+
toGateway: [ 'v:h' ],
|
|
78
|
+
loop: {
|
|
79
|
+
fromTop: [ 't:l' ],
|
|
80
|
+
fromRight: [ 'r:t' ],
|
|
81
|
+
fromLeft: [ 'l:b' ],
|
|
82
|
+
fromBottom: [ 'b:r' ]
|
|
83
|
+
},
|
|
84
|
+
boundaryLoop: {
|
|
85
|
+
alternateHorizontalSide: 't',
|
|
86
|
+
alternateVerticalSide: 'r',
|
|
87
|
+
default: 'h'
|
|
88
|
+
},
|
|
89
|
+
messageFlow: [ 'straight', 'h:h' ],
|
|
90
|
+
subProcess: [ 'straight', 'v:v' ],
|
|
91
|
+
isHorizontal: false
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
var oppositeOrientationMapping = {
|
|
95
|
+
'top': 'bottom',
|
|
96
|
+
'top-right': 'bottom-left',
|
|
97
|
+
'top-left': 'bottom-right',
|
|
98
|
+
'right': 'left',
|
|
99
|
+
'bottom': 'top',
|
|
100
|
+
'bottom-right': 'top-left',
|
|
101
|
+
'bottom-left': 'top-right',
|
|
102
|
+
'left': 'right'
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
var orientationDirectionMapping = {
|
|
106
|
+
top: 't',
|
|
107
|
+
right: 'r',
|
|
108
|
+
bottom: 'b',
|
|
109
|
+
left: 'l'
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export default function BpmnLayouter(elementRegistry) {
|
|
113
|
+
this._elementRegistry = elementRegistry;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
inherits(BpmnLayouter, BaseLayouter);
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Returns waypoints of laid out connection.
|
|
120
|
+
*
|
|
121
|
+
* @param {Connection} connection
|
|
122
|
+
* @param {BpmnLayoutConnectionHints} [hints]
|
|
123
|
+
*
|
|
124
|
+
* @return {Point[]}
|
|
125
|
+
*/
|
|
126
|
+
BpmnLayouter.prototype.layoutConnection = function(connection, hints) {
|
|
127
|
+
if (!hints) {
|
|
128
|
+
hints = {};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
var source = hints.source || connection.source,
|
|
132
|
+
target = hints.target || connection.target,
|
|
133
|
+
waypoints = hints.waypoints || connection.waypoints,
|
|
134
|
+
connectionStart = hints.connectionStart,
|
|
135
|
+
connectionEnd = hints.connectionEnd,
|
|
136
|
+
elementRegistry = this._elementRegistry;
|
|
137
|
+
|
|
138
|
+
var manhattanOptions,
|
|
139
|
+
updatedWaypoints;
|
|
140
|
+
|
|
141
|
+
if (!connectionStart) {
|
|
142
|
+
connectionStart = getConnectionDocking(waypoints && waypoints[ 0 ], source);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (!connectionEnd) {
|
|
146
|
+
connectionEnd = getConnectionDocking(waypoints && waypoints[ waypoints.length - 1 ], target);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (is(connection, 'bpmn:Association') ||
|
|
150
|
+
is(connection, 'bpmn:DataAssociation')) {
|
|
151
|
+
|
|
152
|
+
if (waypoints && !isCompensationAssociation(source, target)) {
|
|
153
|
+
return [].concat([ connectionStart ], waypoints.slice(1, -1), [ connectionEnd ]);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
var layout = isDirectionHorizontal(source, elementRegistry) ? PREFERRED_LAYOUTS_HORIZONTAL : PREFERRED_LAYOUTS_VERTICAL;
|
|
158
|
+
|
|
159
|
+
if (is(connection, 'bpmn:MessageFlow')) {
|
|
160
|
+
manhattanOptions = getMessageFlowManhattanOptions(source, target, layout);
|
|
161
|
+
} else if (is(connection, 'bpmn:SequenceFlow') || isCompensationAssociation(source, target)) {
|
|
162
|
+
|
|
163
|
+
if (source === target) {
|
|
164
|
+
manhattanOptions = {
|
|
165
|
+
preferredLayouts: getLoopPreferredLayout(source, connection, layout)
|
|
166
|
+
};
|
|
167
|
+
} else if (is(source, 'bpmn:BoundaryEvent')) {
|
|
168
|
+
manhattanOptions = {
|
|
169
|
+
preferredLayouts: getBoundaryEventPreferredLayouts(source, target, connectionEnd, layout)
|
|
170
|
+
};
|
|
171
|
+
} else if (isExpandedSubProcess(source) || isExpandedSubProcess(target)) {
|
|
172
|
+
manhattanOptions = {
|
|
173
|
+
preferredLayouts: layout.subProcess,
|
|
174
|
+
preserveDocking: getSubProcessPreserveDocking(source)
|
|
175
|
+
};
|
|
176
|
+
} else if (is(source, 'bpmn:Gateway')) {
|
|
177
|
+
manhattanOptions = {
|
|
178
|
+
preferredLayouts: layout.fromGateway
|
|
179
|
+
};
|
|
180
|
+
} else if (is(target, 'bpmn:Gateway')) {
|
|
181
|
+
manhattanOptions = {
|
|
182
|
+
preferredLayouts: layout.toGateway
|
|
183
|
+
};
|
|
184
|
+
} else {
|
|
185
|
+
manhattanOptions = {
|
|
186
|
+
preferredLayouts: layout.default
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (manhattanOptions) {
|
|
192
|
+
manhattanOptions = assign(manhattanOptions, hints);
|
|
193
|
+
|
|
194
|
+
updatedWaypoints = withoutRedundantPoints(repairConnection(
|
|
195
|
+
source,
|
|
196
|
+
target,
|
|
197
|
+
connectionStart,
|
|
198
|
+
connectionEnd,
|
|
199
|
+
waypoints,
|
|
200
|
+
manhattanOptions
|
|
201
|
+
));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return updatedWaypoints || [ connectionStart, connectionEnd ];
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
// helpers //////////
|
|
209
|
+
|
|
210
|
+
function getAttachOrientation(attachedElement) {
|
|
211
|
+
var hostElement = attachedElement.host;
|
|
212
|
+
|
|
213
|
+
return getOrientation(getMid(attachedElement), hostElement, ATTACH_ORIENTATION_PADDING);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function getMessageFlowManhattanOptions(source, target, layout) {
|
|
217
|
+
return {
|
|
218
|
+
preferredLayouts: layout.messageFlow,
|
|
219
|
+
preserveDocking: getMessageFlowPreserveDocking(source, target)
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function getMessageFlowPreserveDocking(source, target) {
|
|
224
|
+
|
|
225
|
+
// (1) docking element connected to participant has precedence
|
|
226
|
+
if (is(target, 'bpmn:Participant')) {
|
|
227
|
+
return 'source';
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if (is(source, 'bpmn:Participant')) {
|
|
231
|
+
return 'target';
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// (2) docking element connected to expanded sub-process has precedence
|
|
235
|
+
if (isExpandedSubProcess(target)) {
|
|
236
|
+
return 'source';
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (isExpandedSubProcess(source)) {
|
|
240
|
+
return 'target';
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// (3) docking event has precedence
|
|
244
|
+
if (is(target, 'bpmn:Event')) {
|
|
245
|
+
return 'target';
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (is(source, 'bpmn:Event')) {
|
|
249
|
+
return 'source';
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
function getSubProcessPreserveDocking(source) {
|
|
256
|
+
return isExpandedSubProcess(source) ? 'target' : 'source';
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
function getConnectionDocking(point, shape) {
|
|
260
|
+
return point ? (point.original || point) : getMid(shape);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
function isCompensationAssociation(source, target) {
|
|
264
|
+
return is(target, 'bpmn:Activity') &&
|
|
265
|
+
is(source, 'bpmn:BoundaryEvent') &&
|
|
266
|
+
target.businessObject.isForCompensation;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function isExpandedSubProcess(element) {
|
|
270
|
+
return is(element, 'bpmn:SubProcess') && isExpanded(element);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
function isSame(a, b) {
|
|
274
|
+
return a === b;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function isAnyOrientation(orientation, orientations) {
|
|
278
|
+
return orientations.indexOf(orientation) !== -1;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
function getHorizontalOrientation(orientation) {
|
|
282
|
+
var matches = /right|left/.exec(orientation);
|
|
283
|
+
|
|
284
|
+
return matches && matches[0];
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
function getVerticalOrientation(orientation) {
|
|
288
|
+
var matches = /top|bottom/.exec(orientation);
|
|
289
|
+
|
|
290
|
+
return matches && matches[0];
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
function isOppositeOrientation(a, b) {
|
|
294
|
+
return oppositeOrientationMapping[a] === b;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function isOppositeHorizontalOrientation(a, b) {
|
|
298
|
+
var horizontalOrientation = getHorizontalOrientation(a);
|
|
299
|
+
|
|
300
|
+
var oppositeHorizontalOrientation = oppositeOrientationMapping[horizontalOrientation];
|
|
301
|
+
|
|
302
|
+
return b.indexOf(oppositeHorizontalOrientation) !== -1;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
function isOppositeVerticalOrientation(a, b) {
|
|
306
|
+
var verticalOrientation = getVerticalOrientation(a);
|
|
307
|
+
|
|
308
|
+
var oppositeVerticalOrientation = oppositeOrientationMapping[verticalOrientation];
|
|
309
|
+
|
|
310
|
+
return b.indexOf(oppositeVerticalOrientation) !== -1;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
function isHorizontalOrientation(orientation) {
|
|
314
|
+
return orientation === 'right' || orientation === 'left';
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
function getLoopPreferredLayout(source, connection, layout) {
|
|
318
|
+
var waypoints = connection.waypoints;
|
|
319
|
+
|
|
320
|
+
var orientation = waypoints && waypoints.length && getOrientation(waypoints[0], source);
|
|
321
|
+
|
|
322
|
+
if (orientation === 'top') {
|
|
323
|
+
return layout.loop.fromTop;
|
|
324
|
+
} else if (orientation === 'right') {
|
|
325
|
+
return layout.loop.fromRight;
|
|
326
|
+
} else if (orientation === 'left') {
|
|
327
|
+
return layout.loop.fromLeft;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
return layout.loop.fromBottom;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
function getBoundaryEventPreferredLayouts(source, target, end, layout) {
|
|
334
|
+
var sourceMid = getMid(source),
|
|
335
|
+
targetMid = getMid(target),
|
|
336
|
+
attachOrientation = getAttachOrientation(source),
|
|
337
|
+
sourceLayout,
|
|
338
|
+
targetLayout;
|
|
339
|
+
|
|
340
|
+
var isLoop = isSame(source.host, target);
|
|
341
|
+
|
|
342
|
+
var attachedToSide = isAnyOrientation(attachOrientation, [ 'top', 'right', 'bottom', 'left' ]);
|
|
343
|
+
|
|
344
|
+
var targetOrientation = getOrientation(targetMid, sourceMid, {
|
|
345
|
+
x: source.width / 2 + target.width / 2,
|
|
346
|
+
y: source.height / 2 + target.height / 2
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
if (isLoop) {
|
|
350
|
+
return getBoundaryEventLoopLayout(attachOrientation, attachedToSide, source, target, end, layout);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// source layout
|
|
354
|
+
sourceLayout = getBoundaryEventSourceLayout(attachOrientation, targetOrientation, attachedToSide, layout.isHorizontal);
|
|
355
|
+
|
|
356
|
+
// target layout
|
|
357
|
+
targetLayout = getBoundaryEventTargetLayout(attachOrientation, targetOrientation, attachedToSide, layout.isHorizontal);
|
|
358
|
+
|
|
359
|
+
return [ sourceLayout + ':' + targetLayout ];
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
function getBoundaryEventLoopLayout(attachOrientation, attachedToSide, source, target, end, layout) {
|
|
363
|
+
var orientation = attachedToSide ? attachOrientation : layout.isHorizontal ? getVerticalOrientation(attachOrientation) : getHorizontalOrientation(attachOrientation),
|
|
364
|
+
sourceLayout = orientationDirectionMapping[ orientation ],
|
|
365
|
+
targetLayout;
|
|
366
|
+
|
|
367
|
+
if (attachedToSide) {
|
|
368
|
+
if (isHorizontalOrientation(attachOrientation)) {
|
|
369
|
+
targetLayout = shouldConnectToSameSide('y', source, target, end) ? 'h' : layout.boundaryLoop.alternateHorizontalSide;
|
|
370
|
+
} else {
|
|
371
|
+
targetLayout = shouldConnectToSameSide('x', source, target, end) ? 'v' : layout.boundaryLoop.alternateVerticalSide;
|
|
372
|
+
}
|
|
373
|
+
} else {
|
|
374
|
+
targetLayout = layout.boundaryLoop.default;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
return [ sourceLayout + ':' + targetLayout ];
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
function shouldConnectToSameSide(axis, source, target, end) {
|
|
381
|
+
var threshold = BOUNDARY_TO_HOST_THRESHOLD;
|
|
382
|
+
|
|
383
|
+
return !(
|
|
384
|
+
areCloseOnAxis(axis, end, target, threshold) ||
|
|
385
|
+
areCloseOnAxis(axis, end, {
|
|
386
|
+
x: target.x + target.width,
|
|
387
|
+
y: target.y + target.height
|
|
388
|
+
}, threshold) ||
|
|
389
|
+
areCloseOnAxis(axis, end, getMid(source), threshold)
|
|
390
|
+
);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
function areCloseOnAxis(axis, a, b, threshold) {
|
|
394
|
+
return Math.abs(a[ axis ] - b[ axis ]) < threshold;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
function getBoundaryEventSourceLayout(attachOrientation, targetOrientation, attachedToSide, isHorizontal) {
|
|
398
|
+
|
|
399
|
+
// attached to either top, right, bottom or left side
|
|
400
|
+
if (attachedToSide) {
|
|
401
|
+
return orientationDirectionMapping[ attachOrientation ];
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// attached to either top-right, top-left, bottom-right or bottom-left corner
|
|
405
|
+
|
|
406
|
+
var verticalAttachOrientation = getVerticalOrientation(attachOrientation),
|
|
407
|
+
horizontalAttachOrientation = getHorizontalOrientation(attachOrientation),
|
|
408
|
+
verticalTargetOrientation = getVerticalOrientation(targetOrientation),
|
|
409
|
+
horizontalTargetOrientation = getHorizontalOrientation(targetOrientation);
|
|
410
|
+
|
|
411
|
+
if (isHorizontal) {
|
|
412
|
+
|
|
413
|
+
// same vertical or opposite horizontal orientation
|
|
414
|
+
if (
|
|
415
|
+
isSame(verticalAttachOrientation, verticalTargetOrientation) ||
|
|
416
|
+
isOppositeOrientation(horizontalAttachOrientation, horizontalTargetOrientation)
|
|
417
|
+
) {
|
|
418
|
+
return orientationDirectionMapping[ verticalAttachOrientation ];
|
|
419
|
+
}
|
|
420
|
+
} else {
|
|
421
|
+
|
|
422
|
+
// same horizontal or opposite vertical orientation
|
|
423
|
+
if (
|
|
424
|
+
isSame(horizontalAttachOrientation, horizontalTargetOrientation) ||
|
|
425
|
+
isOppositeOrientation(verticalAttachOrientation, verticalTargetOrientation)
|
|
426
|
+
) {
|
|
427
|
+
return orientationDirectionMapping[ horizontalAttachOrientation ];
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// fallback
|
|
432
|
+
return orientationDirectionMapping[ isHorizontal ? horizontalAttachOrientation : verticalAttachOrientation ];
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
function getBoundaryEventTargetLayout(attachOrientation, targetOrientation, attachedToSide, isHorizontal) {
|
|
436
|
+
|
|
437
|
+
// attached to either top, right, bottom or left side
|
|
438
|
+
if (attachedToSide) {
|
|
439
|
+
if (isHorizontalOrientation(attachOrientation)) {
|
|
440
|
+
|
|
441
|
+
// orientation is right or left
|
|
442
|
+
|
|
443
|
+
// opposite horizontal orientation or same orientation
|
|
444
|
+
if (
|
|
445
|
+
isOppositeHorizontalOrientation(attachOrientation, targetOrientation) ||
|
|
446
|
+
isSame(attachOrientation, targetOrientation)
|
|
447
|
+
) {
|
|
448
|
+
return 'h';
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
// fallback
|
|
452
|
+
return 'v';
|
|
453
|
+
} else {
|
|
454
|
+
|
|
455
|
+
// orientation is top or bottom
|
|
456
|
+
|
|
457
|
+
// opposite vertical orientation or same orientation
|
|
458
|
+
if (
|
|
459
|
+
isOppositeVerticalOrientation(attachOrientation, targetOrientation) ||
|
|
460
|
+
isSame(attachOrientation, targetOrientation)
|
|
461
|
+
) {
|
|
462
|
+
return 'v';
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
// fallback
|
|
466
|
+
return 'h';
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// attached to either top-right, top-left, bottom-right or bottom-left corner
|
|
471
|
+
// and orientation is same on the counter-axis
|
|
472
|
+
|
|
473
|
+
if (isHorizontal) {
|
|
474
|
+
if (isSame(getVerticalOrientation(attachOrientation), getVerticalOrientation(targetOrientation))) {
|
|
475
|
+
return 'h';
|
|
476
|
+
} else {
|
|
477
|
+
return 'v';
|
|
478
|
+
}
|
|
479
|
+
} else {
|
|
480
|
+
if (isSame(getHorizontalOrientation(attachOrientation), getHorizontalOrientation(targetOrientation))) {
|
|
481
|
+
return 'v';
|
|
482
|
+
} else {
|
|
483
|
+
return 'h';
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
BpmnLayouter.$inject = [ 'elementRegistry' ];
|