12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import inherits from 'inherits';
- import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';
- import {
- getBusinessObject,
- is
- } from '../../../util/ModelUtil';
- import { isLabel } from '../../../util/LabelUtil';
- var LOW_PRIORITY = 500;
- /**
- * Replace boundary event with intermediate event when creating or moving results in detached event.
- */
- export default function DetachEventBehavior(bpmnReplace, injector) {
- injector.invoke(CommandInterceptor, this);
- this._bpmnReplace = bpmnReplace;
- var self = this;
- this.postExecuted('elements.create', LOW_PRIORITY, function(context) {
- var elements = context.elements;
- elements.filter(function(shape) {
- var host = shape.host;
- return shouldReplace(shape, host);
- }).map(function(shape) {
- return elements.indexOf(shape);
- }).forEach(function(index) {
- context.elements[ index ] = self.replaceShape(elements[ index ]);
- });
- }, true);
- this.preExecute('elements.move', LOW_PRIORITY, function(context) {
- var shapes = context.shapes,
- newHost = context.newHost;
- shapes.forEach(function(shape, index) {
- var host = shape.host;
- if (shouldReplace(shape, includes(shapes, host) ? host : newHost)) {
- shapes[ index ] = self.replaceShape(shape);
- }
- });
- }, true);
- }
- DetachEventBehavior.$inject = [
- 'bpmnReplace',
- 'injector'
- ];
- inherits(DetachEventBehavior, CommandInterceptor);
- DetachEventBehavior.prototype.replaceShape = function(shape) {
- var eventDefinition = getEventDefinition(shape),
- intermediateEvent;
- if (eventDefinition) {
- intermediateEvent = {
- type: 'bpmn:IntermediateCatchEvent',
- eventDefinitionType: eventDefinition.$type
- };
- } else {
- intermediateEvent = {
- type: 'bpmn:IntermediateThrowEvent'
- };
- }
- return this._bpmnReplace.replaceElement(shape, intermediateEvent, { layoutConnection: false });
- };
- // helpers //////////
- function getEventDefinition(element) {
- var businessObject = getBusinessObject(element),
- eventDefinitions = businessObject.eventDefinitions;
- return eventDefinitions && eventDefinitions[0];
- }
- function shouldReplace(shape, host) {
- return !isLabel(shape) && is(shape, 'bpmn:BoundaryEvent') && !host;
- }
- function includes(array, item) {
- return array.indexOf(item) !== -1;
- }
|