123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import { getLanesRoot } from '../util/LaneUtil';
- import { is } from '../../../util/ModelUtil';
- import { isAny } from '../util/ModelingUtil';
- var HIGH_PRIORITY = 1500;
- var HIGHEST_PRIORITY = 2000;
- /**
- * Correct hover targets in certain situations to improve diagram interaction.
- *
- * @param {ElementRegistry} elementRegistry
- * @param {EventBus} eventBus
- * @param {Canvas} canvas
- */
- export default function FixHoverBehavior(elementRegistry, eventBus, canvas) {
- eventBus.on([
- 'create.hover',
- 'create.move',
- 'create.end',
- 'shape.move.hover',
- 'shape.move.move',
- 'shape.move.end'
- ], HIGH_PRIORITY, function(event) {
- var context = event.context,
- shape = context.shape || event.shape,
- hover = event.hover;
- // ensure elements are not dropped onto a bpmn:Lane but onto
- // the underlying bpmn:Participant
- if (is(hover, 'bpmn:Lane') && !isAny(shape, [ 'bpmn:Lane', 'bpmn:Participant' ])) {
- event.hover = getLanesRoot(hover);
- event.hoverGfx = elementRegistry.getGraphics(event.hover);
- }
- var rootElement = canvas.getRootElement();
- // ensure bpmn:Group and label elements are dropped
- // always onto the root
- if (hover !== rootElement && (shape.labelTarget || is(shape, 'bpmn:Group'))) {
- event.hover = rootElement;
- event.hoverGfx = elementRegistry.getGraphics(event.hover);
- }
- });
- eventBus.on([
- 'connect.hover',
- 'connect.out',
- 'connect.end',
- 'connect.cleanup',
- 'global-connect.hover',
- 'global-connect.out',
- 'global-connect.end',
- 'global-connect.cleanup'
- ], HIGH_PRIORITY, function(event) {
- var hover = event.hover;
- // ensure connections start/end on bpmn:Participant,
- // not the underlying bpmn:Lane
- if (is(hover, 'bpmn:Lane')) {
- event.hover = getLanesRoot(hover) || hover;
- event.hoverGfx = elementRegistry.getGraphics(event.hover);
- }
- });
- eventBus.on([
- 'bendpoint.move.hover'
- ], HIGH_PRIORITY, function(event) {
- var context = event.context,
- hover = event.hover,
- type = context.type;
- // ensure reconnect start/end on bpmn:Participant,
- // not the underlying bpmn:Lane
- if (is(hover, 'bpmn:Lane') && /reconnect/.test(type)) {
- event.hover = getLanesRoot(hover) || hover;
- event.hoverGfx = elementRegistry.getGraphics(event.hover);
- }
- });
- eventBus.on([
- 'connect.start'
- ], HIGH_PRIORITY, function(event) {
- var context = event.context,
- start = context.start;
- // ensure connect start on bpmn:Participant,
- // not the underlying bpmn:Lane
- if (is(start, 'bpmn:Lane')) {
- context.start = getLanesRoot(start) || start;
- }
- });
- // allow movement of participants from lanes
- eventBus.on('shape.move.start', HIGHEST_PRIORITY, function(event) {
- var shape = event.shape;
- if (is(shape, 'bpmn:Lane')) {
- event.shape = getLanesRoot(shape) || shape;
- }
- });
- }
- FixHoverBehavior.$inject = [
- 'elementRegistry',
- 'eventBus',
- 'canvas'
- ];
|