108 lines
2.3 KiB
JavaScript
108 lines
2.3 KiB
JavaScript
'use strict';
|
|
|
|
var inherits = require('inherits');
|
|
|
|
var CommandInterceptor = require('diagram-js/lib/command/CommandInterceptor');
|
|
|
|
var is = require('../../../util/ModelUtil').is;
|
|
|
|
var getChildLanes = require('../util/LaneUtil').getChildLanes;
|
|
|
|
var eachElement = require('diagram-js/lib/util/Elements').eachElement;
|
|
|
|
|
|
var LOW_PRIORITY = 500;
|
|
|
|
|
|
/**
|
|
* BPMN specific delete lane behavior
|
|
*/
|
|
function DeleteLaneBehavior(eventBus, modeling, spaceTool) {
|
|
|
|
CommandInterceptor.call(this, eventBus);
|
|
|
|
|
|
function compensateLaneDelete(shape, oldParent) {
|
|
|
|
var siblings = getChildLanes(oldParent);
|
|
|
|
var topAffected = [];
|
|
var bottomAffected = [];
|
|
|
|
eachElement(siblings, function(element) {
|
|
|
|
if (element.y > shape.y) {
|
|
bottomAffected.push(element);
|
|
} else {
|
|
topAffected.push(element);
|
|
}
|
|
|
|
return element.children;
|
|
});
|
|
|
|
if (!siblings.length) {
|
|
return;
|
|
}
|
|
|
|
var offset;
|
|
|
|
if (bottomAffected.length && topAffected.length) {
|
|
offset = shape.height / 2;
|
|
} else {
|
|
offset = shape.height;
|
|
}
|
|
|
|
var topAdjustments,
|
|
bottomAdjustments;
|
|
|
|
if (topAffected.length) {
|
|
topAdjustments = spaceTool.calculateAdjustments(
|
|
topAffected, 'y', offset, shape.y - 10);
|
|
|
|
spaceTool.makeSpace(
|
|
topAdjustments.movingShapes,
|
|
topAdjustments.resizingShapes,
|
|
{ x: 0, y: offset }, 's');
|
|
}
|
|
|
|
if (bottomAffected.length) {
|
|
bottomAdjustments = spaceTool.calculateAdjustments(
|
|
bottomAffected, 'y', -offset, shape.y + shape.height + 10);
|
|
|
|
spaceTool.makeSpace(
|
|
bottomAdjustments.movingShapes,
|
|
bottomAdjustments.resizingShapes,
|
|
{ x: 0, y: -offset }, 'n');
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Adjust sizes of other lanes after lane deletion
|
|
*/
|
|
this.postExecuted('shape.delete', LOW_PRIORITY, function(event) {
|
|
|
|
var context = event.context,
|
|
hints = context.hints,
|
|
shape = context.shape,
|
|
oldParent = context.oldParent;
|
|
|
|
// only compensate lane deletes
|
|
if (!is(shape, 'bpmn:Lane')) {
|
|
return;
|
|
}
|
|
|
|
// compensate root deletes only
|
|
if (hints && hints.nested) {
|
|
return;
|
|
}
|
|
|
|
compensateLaneDelete(shape, oldParent);
|
|
});
|
|
}
|
|
|
|
DeleteLaneBehavior.$inject = [ 'eventBus', 'modeling', 'spaceTool' ];
|
|
|
|
inherits(DeleteLaneBehavior, CommandInterceptor);
|
|
|
|
module.exports = DeleteLaneBehavior; |