You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.1 KiB
117 lines
3.1 KiB
import { |
|
assign |
|
} from 'min-dash'; |
|
|
|
import inherits from 'inherits-browser'; |
|
|
|
import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor'; |
|
|
|
import { getConnectionAdjustment as getConnectionAnchorPoint } from './util/ConnectionLayoutUtil'; |
|
|
|
/** |
|
* A component that makes sure that Associations connected to Connections |
|
* are updated together with the Connection. |
|
* |
|
* @param {EventBus} eventBus |
|
* @param {Modeling} modeling |
|
*/ |
|
export default function LayoutConnectionBehavior( |
|
eventBus, modeling) { |
|
|
|
CommandInterceptor.call(this, eventBus); |
|
|
|
function getnewAnchorPoint(event, point) { |
|
|
|
var context = event.context, |
|
connection = context.connection, |
|
hints = assign({}, context.hints), |
|
newWaypoints = context.newWaypoints || connection.waypoints, |
|
oldWaypoints = context.oldWaypoints; |
|
|
|
|
|
if (typeof hints.startChanged === 'undefined') { |
|
hints.startChanged = !!hints.connectionStart; |
|
} |
|
|
|
if (typeof hints.endChanged === 'undefined') { |
|
hints.endChanged = !!hints.connectionEnd; |
|
} |
|
|
|
return getConnectionAnchorPoint(point, newWaypoints, oldWaypoints, hints); |
|
} |
|
|
|
this.postExecute([ |
|
'connection.layout', |
|
'connection.updateWaypoints' |
|
], function(event) { |
|
var context = event.context; |
|
|
|
var connection = context.connection, |
|
outgoing = connection.outgoing, |
|
incoming = connection.incoming; |
|
|
|
incoming.forEach(function(connection) { |
|
var endPoint = connection.waypoints[connection.waypoints.length - 1]; |
|
var newEndpoint = getnewAnchorPoint(event, endPoint); |
|
|
|
var newWaypoints = [].concat(connection.waypoints.slice(0, -1), [ newEndpoint ]); |
|
|
|
modeling.updateWaypoints(connection, newWaypoints); |
|
}); |
|
|
|
outgoing.forEach(function(connection) { |
|
var startpoint = connection.waypoints[0]; |
|
var newStartpoint = getnewAnchorPoint(event, startpoint); |
|
|
|
var newWaypoints = [].concat([ newStartpoint ], connection.waypoints.slice(1)); |
|
|
|
modeling.updateWaypoints(connection, newWaypoints); |
|
}); |
|
|
|
}); |
|
|
|
|
|
this.postExecute([ |
|
'connection.move' |
|
], function(event) { |
|
var context = event.context; |
|
|
|
var connection = context.connection, |
|
outgoing = connection.outgoing, |
|
incoming = connection.incoming, |
|
delta = context.delta; |
|
|
|
incoming.forEach(function(connection) { |
|
var endPoint = connection.waypoints[connection.waypoints.length - 1]; |
|
var newEndpoint = { |
|
x: endPoint.x + delta.x, |
|
y: endPoint.y + delta.y |
|
}; |
|
|
|
var newWaypoints = [].concat(connection.waypoints.slice(0, -1), [ newEndpoint ]); |
|
|
|
modeling.updateWaypoints(connection, newWaypoints); |
|
}); |
|
|
|
outgoing.forEach(function(connection) { |
|
var startpoint = connection.waypoints[0]; |
|
var newStartpoint = { |
|
x: startpoint.x + delta.x, |
|
y: startpoint.y + delta.y |
|
}; |
|
|
|
var newWaypoints = [].concat([ newStartpoint ], connection.waypoints.slice(1)); |
|
|
|
modeling.updateWaypoints(connection, newWaypoints); |
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
inherits(LayoutConnectionBehavior, CommandInterceptor); |
|
|
|
LayoutConnectionBehavior.$inject = [ |
|
'eventBus', |
|
'modeling' |
|
];
|
|
|