123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';
- import inherits from 'inherits';
- import cssEscape from 'css.escape';
- import {
- assign,
- forEach
- } from 'min-dash';
- import {
- query as domQuery
- } from 'min-dom';
- import {
- attr as svgAttr
- } from 'tiny-svg';
- var LOW_PRIORITY = 250;
- export default function BpmnReplacePreview(
- eventBus, elementRegistry, elementFactory,
- canvas, previewSupport) {
- CommandInterceptor.call(this, eventBus);
- /**
- * Replace the visuals of all elements in the context which can be replaced
- *
- * @param {Object} context
- */
- function replaceVisual(context) {
- var replacements = context.canExecute.replacements;
- forEach(replacements, function(replacement) {
- var id = replacement.oldElementId;
- var newElement = {
- type: replacement.newElementType
- };
- // if the visual of the element is already replaced
- if (context.visualReplacements[id]) {
- return;
- }
- var element = elementRegistry.get(id);
- assign(newElement, { x: element.x, y: element.y });
- // create a temporary shape
- var tempShape = elementFactory.createShape(newElement);
- canvas.addShape(tempShape, element.parent);
- // select the original SVG element related to the element and hide it
- var gfx = domQuery('[data-element-id="' + cssEscape(element.id) + '"]', context.dragGroup);
- if (gfx) {
- svgAttr(gfx, { display: 'none' });
- }
- // clone the gfx of the temporary shape and add it to the drag group
- var dragger = previewSupport.addDragger(tempShape, context.dragGroup);
- context.visualReplacements[id] = dragger;
- canvas.removeShape(tempShape);
- });
- }
- /**
- * Restore the original visuals of the previously replaced elements
- *
- * @param {Object} context
- */
- function restoreVisual(context) {
- var visualReplacements = context.visualReplacements;
- forEach(visualReplacements, function(dragger, id) {
- var originalGfx = domQuery('[data-element-id="' + cssEscape(id) + '"]', context.dragGroup);
- if (originalGfx) {
- svgAttr(originalGfx, { display: 'inline' });
- }
- dragger.remove();
- if (visualReplacements[id]) {
- delete visualReplacements[id];
- }
- });
- }
- eventBus.on('shape.move.move', LOW_PRIORITY, function(event) {
- var context = event.context,
- canExecute = context.canExecute;
- if (!context.visualReplacements) {
- context.visualReplacements = {};
- }
- if (canExecute && canExecute.replacements) {
- replaceVisual(context);
- } else {
- restoreVisual(context);
- }
- });
- }
- BpmnReplacePreview.$inject = [
- 'eventBus',
- 'elementRegistry',
- 'elementFactory',
- 'canvas',
- 'previewSupport'
- ];
- inherits(BpmnReplacePreview, CommandInterceptor);
|