BpmnAutoResizeProvider.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { is } from '../../util/ModelUtil';
  2. import { isLabel } from '../../util/LabelUtil';
  3. import inherits from 'inherits-browser';
  4. import { forEach } from 'min-dash';
  5. import AutoResizeProvider from 'diagram-js/lib/features/auto-resize/AutoResizeProvider';
  6. /**
  7. * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus
  8. * @typedef {import('../modeling/Modeling').default} Modeling
  9. *
  10. * @typedef {import('../../model/Types').Shape} Shape
  11. */
  12. /**
  13. * BPMN-specific provider for automatic resizung.
  14. *
  15. * @param {EventBus} eventBus
  16. * @param {Modeling} modeling
  17. */
  18. export default function BpmnAutoResizeProvider(eventBus, modeling) {
  19. AutoResizeProvider.call(this, eventBus);
  20. this._modeling = modeling;
  21. }
  22. inherits(BpmnAutoResizeProvider, AutoResizeProvider);
  23. BpmnAutoResizeProvider.$inject = [
  24. 'eventBus',
  25. 'modeling'
  26. ];
  27. /**
  28. * BPMN-specific check whether given elements can be resized.
  29. *
  30. * @param {Shape[]} elements
  31. * @param {Shape} target
  32. *
  33. * @return {boolean}
  34. */
  35. BpmnAutoResizeProvider.prototype.canResize = function(elements, target) {
  36. // do not resize plane elements:
  37. // root elements, collapsed sub-processes
  38. if (is(target.di, 'bpmndi:BPMNPlane')) {
  39. return false;
  40. }
  41. if (!is(target, 'bpmn:Participant') && !is(target, 'bpmn:Lane') && !(is(target, 'bpmn:SubProcess'))) {
  42. return false;
  43. }
  44. var canResize = true;
  45. forEach(elements, function(element) {
  46. if (is(element, 'bpmn:Lane') || isLabel(element)) {
  47. canResize = false;
  48. return;
  49. }
  50. });
  51. return canResize;
  52. };