CreatePreview.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import {
  2. translate
  3. } from '../../util/SvgTransformUtil';
  4. import { getVisual } from '../../util/GraphicsUtil';
  5. import {
  6. append as svgAppend,
  7. attr as svgAttr,
  8. create as svgCreate,
  9. remove as svgRemove
  10. } from 'tiny-svg';
  11. var LOW_PRIORITY = 750;
  12. export default function CreatePreview(
  13. canvas,
  14. eventBus,
  15. graphicsFactory,
  16. previewSupport,
  17. styles
  18. ) {
  19. function createDragGroup(elements) {
  20. var dragGroup = svgCreate('g');
  21. svgAttr(dragGroup, styles.cls('djs-drag-group', [ 'no-events' ]));
  22. var childrenGfx = svgCreate('g');
  23. elements.forEach(function(element) {
  24. // create graphics
  25. var gfx;
  26. if (element.hidden) {
  27. return;
  28. }
  29. if (element.waypoints) {
  30. gfx = graphicsFactory._createContainer('connection', childrenGfx);
  31. graphicsFactory.drawConnection(getVisual(gfx), element);
  32. } else {
  33. gfx = graphicsFactory._createContainer('shape', childrenGfx);
  34. graphicsFactory.drawShape(getVisual(gfx), element);
  35. translate(gfx, element.x, element.y);
  36. }
  37. // add preview
  38. previewSupport.addDragger(element, dragGroup, gfx);
  39. });
  40. return dragGroup;
  41. }
  42. eventBus.on('create.move', LOW_PRIORITY, function(event) {
  43. var hover = event.hover,
  44. context = event.context,
  45. elements = context.elements,
  46. dragGroup = context.dragGroup;
  47. // lazily create previews
  48. if (!dragGroup) {
  49. dragGroup = context.dragGroup = createDragGroup(elements);
  50. }
  51. var activeLayer;
  52. if (hover) {
  53. if (!dragGroup.parentNode) {
  54. activeLayer = canvas.getActiveLayer();
  55. svgAppend(activeLayer, dragGroup);
  56. }
  57. translate(dragGroup, event.x, event.y);
  58. } else {
  59. svgRemove(dragGroup);
  60. }
  61. });
  62. eventBus.on('create.cleanup', function(event) {
  63. var context = event.context,
  64. dragGroup = context.dragGroup;
  65. if (dragGroup) {
  66. svgRemove(dragGroup);
  67. }
  68. });
  69. }
  70. CreatePreview.$inject = [
  71. 'canvas',
  72. 'eventBus',
  73. 'graphicsFactory',
  74. 'previewSupport',
  75. 'styles'
  76. ];