UNPKG

diagram-js

Version:

A toolbox for displaying and modifying diagrams on the web

81 lines (59 loc) 1.93 kB
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; };