diagram-js
Version:
A toolbox for displaying and modifying diagrams on the web
81 lines (59 loc) • 1.93 kB
JavaScript
import { forEach } from 'min-dash';
import {
add as collectionAdd,
remove as collectionRemove
} from '../../../util/Collections';
/**
* A handler that implements reversible moving of connections.
*
* The handler differs from the layout connection handler in a sense
* that it preserves the connection layout.
*/
export default function MoveConnectionHandler() { }
MoveConnectionHandler.prototype.execute = function(context) {
var connection = context.connection,
delta = context.delta;
var newParent = context.newParent || connection.parent,
newParentIndex = context.newParentIndex,
oldParent = connection.parent;
// save old parent in context
context.oldParent = oldParent;
context.oldParentIndex = collectionRemove(oldParent.children, connection);
// add to new parent at position
collectionAdd(newParent.children, connection, newParentIndex);
// update parent
connection.parent = newParent;
// update waypoint positions
forEach(connection.waypoints, function(p) {
p.x += delta.x;
p.y += delta.y;
if (p.original) {
p.original.x += delta.x;
p.original.y += delta.y;
}
});
return connection;
};
MoveConnectionHandler.prototype.revert = function(context) {
var connection = context.connection,
newParent = connection.parent,
oldParent = context.oldParent,
oldParentIndex = context.oldParentIndex,
delta = context.delta;
// remove from newParent
collectionRemove(newParent.children, connection);
// restore previous location in old parent
collectionAdd(oldParent.children, connection, oldParentIndex);
// restore parent
connection.parent = oldParent;
// revert to old waypoint positions
forEach(connection.waypoints, function(p) {
p.x -= delta.x;
p.y -= delta.y;
if (p.original) {
p.original.x -= delta.x;
p.original.y -= delta.y;
}
});
return connection;
};