AlignElementsHandler.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { forEach, isDefined } from 'min-dash';
  2. /**
  3. * A handler that align elements in a certain way.
  4. *
  5. */
  6. export default function AlignElements(modeling, canvas) {
  7. this._modeling = modeling;
  8. this._canvas = canvas;
  9. }
  10. AlignElements.$inject = [ 'modeling', 'canvas' ];
  11. AlignElements.prototype.preExecute = function(context) {
  12. var modeling = this._modeling;
  13. var elements = context.elements,
  14. alignment = context.alignment;
  15. forEach(elements, function(element) {
  16. var delta = {
  17. x: 0,
  18. y: 0
  19. };
  20. if (isDefined(alignment.left)) {
  21. delta.x = alignment.left - element.x;
  22. } else if (isDefined(alignment.right)) {
  23. delta.x = (alignment.right - element.width) - element.x;
  24. } else if (isDefined(alignment.center)) {
  25. delta.x = (alignment.center - Math.round(element.width / 2)) - element.x;
  26. } else if (isDefined(alignment.top)) {
  27. delta.y = alignment.top - element.y;
  28. } else if (isDefined(alignment.bottom)) {
  29. delta.y = (alignment.bottom - element.height) - element.y;
  30. } else if (isDefined(alignment.middle)) {
  31. delta.y = (alignment.middle - Math.round(element.height / 2)) - element.y;
  32. }
  33. modeling.moveElements([ element ], delta, element.parent);
  34. });
  35. };
  36. AlignElements.prototype.postExecute = function(context) {
  37. };