BpmnDiOrdering.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { getDi } from '../../util/ModelUtil';
  2. import {
  3. filter,
  4. forEach,
  5. map
  6. } from 'min-dash';
  7. import { selfAndAllChildren } from 'diagram-js/lib/util/Elements';
  8. /**
  9. * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus
  10. * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas
  11. */
  12. var HIGH_PRIORITY = 2000;
  13. /**
  14. * @param {EventBus} eventBus
  15. * @param {Canvas} canvas
  16. */
  17. export default function BpmnDiOrdering(eventBus, canvas) {
  18. eventBus.on('saveXML.start', HIGH_PRIORITY, orderDi);
  19. function orderDi() {
  20. var rootElements = canvas.getRootElements();
  21. forEach(rootElements, function(root) {
  22. var rootDi = getDi(root),
  23. elements,
  24. diElements;
  25. elements = selfAndAllChildren([ root ], false);
  26. // only bpmndi:Shape and bpmndi:Edge can be direct children of bpmndi:Plane
  27. elements = filter(elements, function(element) {
  28. return element !== root && !element.labelTarget;
  29. });
  30. diElements = map(elements, getDi);
  31. rootDi.set('planeElement', diElements);
  32. });
  33. }
  34. }
  35. BpmnDiOrdering.$inject = [ 'eventBus', 'canvas' ];