| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import {
- assign,
- forEach
- } from 'min-dash';
- import {
- getResizedSourceAnchor,
- getResizedTargetAnchor
- } from './helper/AnchorsHelper';
- /**
- * A handler that implements reversible resizing of shapes.
- *
- * @param {Modeling} modeling
- */
- export default function ResizeShapeHandler(modeling) {
- this._modeling = modeling;
- }
- ResizeShapeHandler.$inject = [ 'modeling' ];
- /**
- * {
- * shape: {....}
- * newBounds: {
- * width: 20,
- * height: 40,
- * x: 5,
- * y: 10
- * }
- *
- * }
- */
- ResizeShapeHandler.prototype.execute = function(context) {
- var shape = context.shape,
- newBounds = context.newBounds,
- minBounds = context.minBounds;
- if (newBounds.x === undefined || newBounds.y === undefined ||
- newBounds.width === undefined || newBounds.height === undefined) {
- throw new Error('newBounds must have {x, y, width, height} properties');
- }
- if (minBounds && (newBounds.width < minBounds.width
- || newBounds.height < minBounds.height)) {
- throw new Error('width and height cannot be less than minimum height and width');
- } else if (!minBounds
- && newBounds.width < 10 || newBounds.height < 10) {
- throw new Error('width and height cannot be less than 10px');
- }
- // save old bbox in context
- context.oldBounds = {
- width: shape.width,
- height: shape.height,
- x: shape.x,
- y: shape.y
- };
- // update shape
- assign(shape, {
- width: newBounds.width,
- height: newBounds.height,
- x: newBounds.x,
- y: newBounds.y
- });
- return shape;
- };
- ResizeShapeHandler.prototype.postExecute = function(context) {
- var modeling = this._modeling;
- var shape = context.shape,
- oldBounds = context.oldBounds,
- hints = context.hints || {};
- if (hints.layout === false) {
- return;
- }
- forEach(shape.incoming, function(c) {
- modeling.layoutConnection(c, {
- connectionEnd: getResizedTargetAnchor(c, shape, oldBounds)
- });
- });
- forEach(shape.outgoing, function(c) {
- modeling.layoutConnection(c, {
- connectionStart: getResizedSourceAnchor(c, shape, oldBounds)
- });
- });
- };
- ResizeShapeHandler.prototype.revert = function(context) {
- var shape = context.shape,
- oldBounds = context.oldBounds;
- // restore previous bbox
- assign(shape, {
- width: oldBounds.width,
- height: oldBounds.height,
- x: oldBounds.x,
- y: oldBounds.y
- });
- return shape;
- };
|