ChangeSupport.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import {
  2. getType as getElementType
  3. } from '../../util/Elements';
  4. /**
  5. * Adds change support to the diagram, including
  6. *
  7. * <ul>
  8. * <li>redrawing shapes and connections on change</li>
  9. * </ul>
  10. *
  11. * @param {EventBus} eventBus
  12. * @param {Canvas} canvas
  13. * @param {ElementRegistry} elementRegistry
  14. * @param {GraphicsFactory} graphicsFactory
  15. */
  16. export default function ChangeSupport(
  17. eventBus, canvas, elementRegistry,
  18. graphicsFactory) {
  19. // redraw shapes / connections on change
  20. eventBus.on('element.changed', function(event) {
  21. var element = event.element;
  22. // element might have been deleted and replaced by new element with same ID
  23. // thus check for parent of element except for root element
  24. if (element.parent || element === canvas.getRootElement()) {
  25. event.gfx = elementRegistry.getGraphics(element);
  26. }
  27. // shape + gfx may have been deleted
  28. if (!event.gfx) {
  29. return;
  30. }
  31. eventBus.fire(getElementType(element) + '.changed', event);
  32. });
  33. eventBus.on('elements.changed', function(event) {
  34. var elements = event.elements;
  35. elements.forEach(function(e) {
  36. eventBus.fire('element.changed', { element: e });
  37. });
  38. graphicsFactory.updateContainments(elements);
  39. });
  40. eventBus.on('shape.changed', function(event) {
  41. graphicsFactory.update('shape', event.element, event.gfx);
  42. });
  43. eventBus.on('connection.changed', function(event) {
  44. graphicsFactory.update('connection', event.element, event.gfx);
  45. });
  46. }
  47. ChangeSupport.$inject = [
  48. 'eventBus',
  49. 'canvas',
  50. 'elementRegistry',
  51. 'graphicsFactory'
  52. ];