BpmnAlignElements.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import inherits from 'inherits-browser';
  2. import RuleProvider from 'diagram-js/lib/features/rules/RuleProvider';
  3. import { getParents } from 'diagram-js/lib/util/Elements';
  4. import {
  5. filter
  6. } from 'min-dash';
  7. /**
  8. * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus
  9. */
  10. /**
  11. * Rule provider for aligning BPMN elements.
  12. *
  13. * @param {EventBus} eventBus
  14. */
  15. export default function BpmnAlignElements(eventBus) {
  16. RuleProvider.call(this, eventBus);
  17. }
  18. BpmnAlignElements.$inject = [ 'eventBus' ];
  19. inherits(BpmnAlignElements, RuleProvider);
  20. BpmnAlignElements.prototype.init = function() {
  21. this.addRule('elements.align', function(context) {
  22. var elements = context.elements;
  23. // filter out elements which cannot be aligned
  24. var filteredElements = filter(elements, function(element) {
  25. return !(element.waypoints || element.host || element.labelTarget);
  26. });
  27. // filter out elements which are children of any of the selected elements
  28. filteredElements = getParents(filteredElements);
  29. if (filteredElements.length < 2) {
  30. return false;
  31. }
  32. return filteredElements;
  33. });
  34. };