chore(modeling/BpmnLayouter): refactor boundary event layout
This commit is contained in:
parent
0f7b8f483c
commit
5438f1a0c2
|
@ -271,82 +271,85 @@ function getBoundaryEventPreferredLayouts(source, target) {
|
||||||
targetMid = getMid(target),
|
targetMid = getMid(target),
|
||||||
attachOrientation = getAttachOrientation(source),
|
attachOrientation = getAttachOrientation(source),
|
||||||
sourceLayout,
|
sourceLayout,
|
||||||
targetlayout;
|
targetLayout;
|
||||||
|
|
||||||
var isLoop = isSame(source.host, target);
|
var isLoop = isSame(source.host, target);
|
||||||
|
|
||||||
var attachedToSide = isAnyOrientation(attachOrientation, [ 'top', 'right', 'bottom', 'left' ]);
|
var attachedToSide = isAnyOrientation(attachOrientation, [ 'top', 'right', 'bottom', 'left' ]);
|
||||||
|
|
||||||
var isHorizontalAttachOrientation = isHorizontalOrientation(attachOrientation);
|
|
||||||
|
|
||||||
var targetOrientation = getOrientation(targetMid, sourceMid, {
|
var targetOrientation = getOrientation(targetMid, sourceMid, {
|
||||||
x: source.width / 2 + target.width / 2,
|
x: source.width / 2 + target.width / 2,
|
||||||
y: source.height / 2 + target.height / 2
|
y: source.height / 2 + target.height / 2
|
||||||
});
|
});
|
||||||
|
|
||||||
// source layout
|
// source layout
|
||||||
|
sourceLayout = getBoundaryEventSourceLayout(attachOrientation, targetOrientation, attachedToSide, isLoop);
|
||||||
// attached to either top, right, bottom or left side
|
|
||||||
if (attachedToSide) {
|
|
||||||
|
|
||||||
sourceLayout = orientationDirectionMapping[
|
|
||||||
isHorizontalAttachOrientation ?
|
|
||||||
getHorizontalOrientation(attachOrientation) :
|
|
||||||
getVerticalOrientation(attachOrientation)
|
|
||||||
];
|
|
||||||
|
|
||||||
} else
|
|
||||||
|
|
||||||
// attached to either top-right, top-left, bottom-right or bottom-left corner
|
|
||||||
{
|
|
||||||
|
|
||||||
// loop, same vertical or opposite horizontal orientation
|
|
||||||
if (isLoop ||
|
|
||||||
isSame(getVerticalOrientation(attachOrientation), getVerticalOrientation(targetOrientation)) ||
|
|
||||||
isOppositeOrientation(getHorizontalOrientation(attachOrientation), getHorizontalOrientation(targetOrientation))
|
|
||||||
) {
|
|
||||||
sourceLayout = orientationDirectionMapping[getVerticalOrientation(attachOrientation)];
|
|
||||||
} else {
|
|
||||||
sourceLayout = orientationDirectionMapping[getHorizontalOrientation(attachOrientation)];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// target layout
|
// target layout
|
||||||
|
targetLayout = getBoundaryEventTargetLayout(attachOrientation, targetOrientation, attachedToSide, isLoop);
|
||||||
|
|
||||||
|
return [ sourceLayout + ':' + targetLayout ];
|
||||||
|
}
|
||||||
|
|
||||||
|
function getBoundaryEventSourceLayout(attachOrientation, targetOrientation, attachedToSide, isLoop) {
|
||||||
|
|
||||||
// attached to either top, right, bottom or left side
|
// attached to either top, right, bottom or left side
|
||||||
if (attachedToSide) {
|
if (attachedToSide) {
|
||||||
|
return orientationDirectionMapping[attachOrientation];
|
||||||
// loop or opposite horizontal/vertical orientation
|
|
||||||
if (
|
|
||||||
isLoop ||
|
|
||||||
(isHorizontalAttachOrientation ?
|
|
||||||
isOppositeHorizontalOrientation(attachOrientation, targetOrientation) :
|
|
||||||
isOppositeVerticalOrientation(attachOrientation, targetOrientation))
|
|
||||||
) {
|
|
||||||
targetlayout = isHorizontalAttachOrientation ? 'h' : 'v';
|
|
||||||
} else {
|
|
||||||
targetlayout = isHorizontalAttachOrientation ? 'v' : 'h';
|
|
||||||
}
|
|
||||||
|
|
||||||
} else
|
|
||||||
|
|
||||||
// attached to either top-right, top-left, bottom-right or bottom-left corner
|
|
||||||
{
|
|
||||||
|
|
||||||
// orientation is 'right', 'left'
|
|
||||||
// or same vertical orientation but also 'right' or 'left'
|
|
||||||
if (
|
|
||||||
isHorizontalOrientation(targetOrientation) ||
|
|
||||||
(isSame(getVerticalOrientation(attachOrientation), getVerticalOrientation(targetOrientation)) &&
|
|
||||||
getHorizontalOrientation(targetOrientation))
|
|
||||||
) {
|
|
||||||
targetlayout = 'h';
|
|
||||||
} else {
|
|
||||||
targetlayout = 'v';
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return [ sourceLayout + ':' + targetlayout ];
|
// attached to either top-right, top-left, bottom-right or bottom-left corner
|
||||||
}
|
|
||||||
|
// loop, same vertical or opposite horizontal orientation
|
||||||
|
if (isLoop ||
|
||||||
|
isSame(
|
||||||
|
getVerticalOrientation(attachOrientation), getVerticalOrientation(targetOrientation)
|
||||||
|
) ||
|
||||||
|
isOppositeOrientation(
|
||||||
|
getHorizontalOrientation(attachOrientation), getHorizontalOrientation(targetOrientation)
|
||||||
|
)) {
|
||||||
|
return orientationDirectionMapping[getVerticalOrientation(attachOrientation)];
|
||||||
|
}
|
||||||
|
|
||||||
|
// fallback
|
||||||
|
return orientationDirectionMapping[getHorizontalOrientation(attachOrientation)];
|
||||||
|
}
|
||||||
|
|
||||||
|
function getBoundaryEventTargetLayout(attachOrientation, targetOrientation, attachedToSide, isLoop) {
|
||||||
|
|
||||||
|
// attached to either top, right, bottom or left side
|
||||||
|
if (attachedToSide) {
|
||||||
|
if (isHorizontalOrientation(attachOrientation)) {
|
||||||
|
// orientation is 'right' or 'left'
|
||||||
|
|
||||||
|
// loop or opposite horizontal orientation
|
||||||
|
if (isLoop || isOppositeHorizontalOrientation(attachOrientation, targetOrientation)) {
|
||||||
|
return 'h';
|
||||||
|
}
|
||||||
|
|
||||||
|
// fallback
|
||||||
|
return 'v';
|
||||||
|
} else {
|
||||||
|
// orientation is 'top' or 'bottom'
|
||||||
|
|
||||||
|
// loop or opposite vertical orientation
|
||||||
|
if (isLoop || isOppositeVerticalOrientation(attachOrientation, targetOrientation)) {
|
||||||
|
return 'v';
|
||||||
|
}
|
||||||
|
|
||||||
|
// fallback
|
||||||
|
return 'h';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// attached to either top-right, top-left, bottom-right or bottom-left corner
|
||||||
|
|
||||||
|
// orientation is 'right', 'left'
|
||||||
|
// or same vertical orientation but also 'right' or 'left'
|
||||||
|
if (isHorizontalOrientation(targetOrientation) ||
|
||||||
|
(isSame(getVerticalOrientation(attachOrientation), getVerticalOrientation(targetOrientation)) &&
|
||||||
|
getHorizontalOrientation(targetOrientation))) {
|
||||||
|
return 'h';
|
||||||
|
} else {
|
||||||
|
return 'v';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue