parent
c4ceac39ae
commit
0381811d03
|
@ -6,7 +6,7 @@ We love you to contribute to this project by filing bugs, helping others on the
|
||||||
## Creating issues
|
## Creating issues
|
||||||
|
|
||||||
We use our [issue tracker](https://github.com/bpmn-io/bpmn-js/issues) for project communication.
|
We use our [issue tracker](https://github.com/bpmn-io/bpmn-js/issues) for project communication.
|
||||||
When using the issue tracker,
|
When using the issue tracker:
|
||||||
|
|
||||||
* Be descriptive when creating an issue (what, where, when and how does a problem pop up)?
|
* Be descriptive when creating an issue (what, where, when and how does a problem pop up)?
|
||||||
* Attach steps to reproduce (if applicable)
|
* Attach steps to reproduce (if applicable)
|
||||||
|
|
|
@ -68,6 +68,7 @@ Modeler.prototype._modelingModules = [
|
||||||
require('diagram-js/lib/features/move'),
|
require('diagram-js/lib/features/move'),
|
||||||
require('diagram-js/lib/features/bendpoints'),
|
require('diagram-js/lib/features/bendpoints'),
|
||||||
require('diagram-js/lib/features/resize'),
|
require('diagram-js/lib/features/resize'),
|
||||||
|
require('diagram-js/lib/features/space-tool'),
|
||||||
require('diagram-js/lib/features/lasso-tool'),
|
require('diagram-js/lib/features/lasso-tool'),
|
||||||
require('./features/modeling'),
|
require('./features/modeling'),
|
||||||
require('./features/context-pad'),
|
require('./features/context-pad'),
|
||||||
|
|
|
@ -5,24 +5,26 @@ var assign = require('lodash/object/assign');
|
||||||
/**
|
/**
|
||||||
* A palette provider for BPMN 2.0 elements.
|
* A palette provider for BPMN 2.0 elements.
|
||||||
*/
|
*/
|
||||||
function PaletteProvider(palette, create, elementFactory) {
|
function PaletteProvider(palette, create, elementFactory, spaceTool) {
|
||||||
|
|
||||||
this._create = create;
|
this._create = create;
|
||||||
this._elementFactory = elementFactory;
|
this._elementFactory = elementFactory;
|
||||||
|
this._spaceTool = spaceTool;
|
||||||
|
|
||||||
palette.registerProvider(this);
|
palette.registerProvider(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = PaletteProvider;
|
module.exports = PaletteProvider;
|
||||||
|
|
||||||
PaletteProvider.$inject = [ 'palette', 'create', 'elementFactory' ];
|
PaletteProvider.$inject = [ 'palette', 'create', 'elementFactory', 'spaceTool' ];
|
||||||
|
|
||||||
|
|
||||||
PaletteProvider.prototype.getPaletteEntries = function(element) {
|
PaletteProvider.prototype.getPaletteEntries = function(element) {
|
||||||
|
|
||||||
var actions = {},
|
var actions = {},
|
||||||
create = this._create,
|
create = this._create,
|
||||||
elementFactory = this._elementFactory;
|
elementFactory = this._elementFactory,
|
||||||
|
spaceTool = this._spaceTool;
|
||||||
|
|
||||||
|
|
||||||
function createAction(type, group, className, title, options) {
|
function createAction(type, group, className, title, options) {
|
||||||
|
@ -52,8 +54,17 @@ PaletteProvider.prototype.getPaletteEntries = function(element) {
|
||||||
create.start(event, elementFactory.createParticipantShape(collapsed));
|
create.start(event, elementFactory.createParticipantShape(collapsed));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
assign(actions, {
|
assign(actions, {
|
||||||
|
'space-tool': {
|
||||||
|
group: 'tool',
|
||||||
|
className: 'icon-edit-space-tool',
|
||||||
|
title: 'Create/remove space on the diagram',
|
||||||
|
action: {
|
||||||
|
click: function(event) {
|
||||||
|
spaceTool.activateSelection(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
'create.start-event': createAction(
|
'create.start-event': createAction(
|
||||||
'bpmn:StartEvent', 'event', 'icon-start-event-none'
|
'bpmn:StartEvent', 'event', 'icon-start-event-none'
|
||||||
),
|
),
|
||||||
|
|
|
@ -0,0 +1,225 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var Matchers = require('../../../Matchers'),
|
||||||
|
TestHelper = require('../../../TestHelper');
|
||||||
|
|
||||||
|
/* global bootstrapModeler, inject */
|
||||||
|
|
||||||
|
|
||||||
|
var modelingModule = require('../../../../lib/features/modeling'),
|
||||||
|
coreModule = require('../../../../lib/core');
|
||||||
|
|
||||||
|
|
||||||
|
describe('features/modeling - create/remove space', function() {
|
||||||
|
|
||||||
|
beforeEach(Matchers.addDeepEquals);
|
||||||
|
|
||||||
|
|
||||||
|
var diagramXML = require('../../../fixtures/bpmn/simple.bpmn');
|
||||||
|
|
||||||
|
var testModules = [ coreModule, modelingModule ];
|
||||||
|
|
||||||
|
beforeEach(bootstrapModeler(diagramXML, { modules: testModules }));
|
||||||
|
|
||||||
|
|
||||||
|
describe('create space', function() {
|
||||||
|
|
||||||
|
|
||||||
|
it('should create space to the right', inject(function(elementRegistry, modeling) {
|
||||||
|
|
||||||
|
// given
|
||||||
|
var sequenceFlowElement = elementRegistry.get('SequenceFlow_3'),
|
||||||
|
sequenceFlow = sequenceFlowElement.businessObject;
|
||||||
|
|
||||||
|
var subProcessElement = elementRegistry.get('SubProcess_1'),
|
||||||
|
subProcess = subProcessElement.businessObject;
|
||||||
|
|
||||||
|
var endEventElement = elementRegistry.get('EndEvent_1'),
|
||||||
|
endEvent = endEventElement.businessObject;
|
||||||
|
|
||||||
|
|
||||||
|
var subProcOldPos = {
|
||||||
|
x: subProcessElement.x,
|
||||||
|
y: subProcessElement.y
|
||||||
|
};
|
||||||
|
|
||||||
|
var endEventOldPos = {
|
||||||
|
x: endEventElement.x,
|
||||||
|
y: endEventElement.y
|
||||||
|
};
|
||||||
|
|
||||||
|
var delta = { x: 50, y: 0 },
|
||||||
|
direction = 'e';
|
||||||
|
|
||||||
|
// when
|
||||||
|
modeling.createSpace([subProcessElement, endEventElement], [], delta, direction);
|
||||||
|
|
||||||
|
// then
|
||||||
|
expect(subProcess.di.bounds.x).toBe(subProcOldPos.x + 50);
|
||||||
|
expect(subProcess.di.bounds.y).toBe(subProcOldPos.y);
|
||||||
|
|
||||||
|
expect(endEvent.di.bounds.x).toBe(endEventOldPos.x + 50);
|
||||||
|
expect(endEvent.di.bounds.y).toBe(endEventOldPos.y);
|
||||||
|
|
||||||
|
expect(sequenceFlow.di.waypoint).toDeepEqual([
|
||||||
|
{ $type: 'dc:Point', x: 144, y: 230 },
|
||||||
|
{ $type: 'dc:Point', x: 350, y: 230 },
|
||||||
|
]);
|
||||||
|
}));
|
||||||
|
|
||||||
|
|
||||||
|
it('should create space downwards', inject(function(elementRegistry, modeling) {
|
||||||
|
|
||||||
|
// given
|
||||||
|
var startEventElement = elementRegistry.get('StartEvent_2'),
|
||||||
|
startEvent = startEventElement.businessObject;
|
||||||
|
|
||||||
|
var sequenceFlowElement = elementRegistry.get('SequenceFlow_3'),
|
||||||
|
sequenceFlow = sequenceFlowElement.businessObject;
|
||||||
|
|
||||||
|
var subProcessElement = elementRegistry.get('SubProcess_1'),
|
||||||
|
subProcess = subProcessElement.businessObject;
|
||||||
|
|
||||||
|
var endEventElement = elementRegistry.get('EndEvent_1'),
|
||||||
|
endEvent = endEventElement.businessObject;
|
||||||
|
|
||||||
|
var startEventOldPos = {
|
||||||
|
x: startEventElement.x,
|
||||||
|
y: startEventElement.y
|
||||||
|
};
|
||||||
|
|
||||||
|
var subProcOldPos = {
|
||||||
|
x: subProcessElement.x,
|
||||||
|
y: subProcessElement.y
|
||||||
|
};
|
||||||
|
|
||||||
|
var endEventOldPos = {
|
||||||
|
x: endEventElement.x,
|
||||||
|
y: endEventElement.y
|
||||||
|
};
|
||||||
|
|
||||||
|
var delta = { x: 0, y: 50 },
|
||||||
|
direction = 's';
|
||||||
|
|
||||||
|
// when
|
||||||
|
modeling.createSpace([startEventElement ,subProcessElement, endEventElement], [], delta, direction);
|
||||||
|
|
||||||
|
// then
|
||||||
|
expect(startEvent.di.bounds.x).toBe(startEventOldPos.x);
|
||||||
|
expect(startEvent.di.bounds.y).toBe(startEventOldPos.y + 50);
|
||||||
|
|
||||||
|
expect(subProcess.di.bounds.x).toBe(subProcOldPos.x);
|
||||||
|
expect(subProcess.di.bounds.y).toBe(subProcOldPos.y + 50);
|
||||||
|
|
||||||
|
expect(endEvent.di.bounds.x).toBe(endEventOldPos.x);
|
||||||
|
expect(endEvent.di.bounds.y).toBe(endEventOldPos.y + 50);
|
||||||
|
|
||||||
|
expect(sequenceFlow.di.waypoint).toDeepEqual([
|
||||||
|
{ $type: 'dc:Point', x: 144, y: 280 },
|
||||||
|
{ $type: 'dc:Point', x: 300, y: 280 },
|
||||||
|
]);
|
||||||
|
}));
|
||||||
|
|
||||||
|
|
||||||
|
it('should remove space to the left', inject(function(elementRegistry, modeling) {
|
||||||
|
|
||||||
|
// given
|
||||||
|
var sequenceFlowElement = elementRegistry.get('SequenceFlow_3'),
|
||||||
|
sequenceFlow = sequenceFlowElement.businessObject;
|
||||||
|
|
||||||
|
var subProcessElement = elementRegistry.get('SubProcess_1'),
|
||||||
|
subProcess = subProcessElement.businessObject;
|
||||||
|
|
||||||
|
var endEventElement = elementRegistry.get('EndEvent_1'),
|
||||||
|
endEvent = endEventElement.businessObject;
|
||||||
|
|
||||||
|
var subProcOldPos = {
|
||||||
|
x: subProcessElement.x,
|
||||||
|
y: subProcessElement.y
|
||||||
|
};
|
||||||
|
|
||||||
|
var endEventOldPos = {
|
||||||
|
x: endEventElement.x,
|
||||||
|
y: endEventElement.y
|
||||||
|
};
|
||||||
|
|
||||||
|
var delta = { x: -50, y: 0 },
|
||||||
|
direction = 'w';
|
||||||
|
|
||||||
|
// when
|
||||||
|
modeling.createSpace([subProcessElement, endEventElement], [], delta, direction);
|
||||||
|
|
||||||
|
// then
|
||||||
|
expect(subProcess.di.bounds.x).toBe(subProcOldPos.x - 50);
|
||||||
|
expect(subProcess.di.bounds.y).toBe(subProcOldPos.y);
|
||||||
|
|
||||||
|
expect(endEvent.di.bounds.x).toBe(endEventOldPos.x - 50);
|
||||||
|
expect(endEvent.di.bounds.y).toBe(endEventOldPos.y);
|
||||||
|
|
||||||
|
expect(sequenceFlow.di.waypoint).toDeepEqual([
|
||||||
|
{ $type: 'dc:Point', x: 144, y: 230 },
|
||||||
|
{ $type: 'dc:Point', x: 250, y: 230 },
|
||||||
|
]);
|
||||||
|
}));
|
||||||
|
|
||||||
|
|
||||||
|
it('should resize to the right', inject(function(elementRegistry, modeling) {
|
||||||
|
|
||||||
|
// given
|
||||||
|
var taskElement = elementRegistry.get('Task_1'),
|
||||||
|
task = taskElement.businessObject;
|
||||||
|
|
||||||
|
var subProcessElement = elementRegistry.get('SubProcess_1'),
|
||||||
|
subProcess = subProcessElement.businessObject;
|
||||||
|
|
||||||
|
var startEventElement = elementRegistry.get('StartEvent_1'),
|
||||||
|
startEvent = startEventElement.businessObject;
|
||||||
|
|
||||||
|
var startEventElement2 = elementRegistry.get('StartEvent_2'),
|
||||||
|
startEvent2 = startEventElement2.businessObject;
|
||||||
|
|
||||||
|
var subProcOldPos = {
|
||||||
|
x: subProcessElement.x,
|
||||||
|
y: subProcessElement.y,
|
||||||
|
width: subProcessElement.width,
|
||||||
|
height: subProcessElement.height
|
||||||
|
};
|
||||||
|
|
||||||
|
var startEventOldPos2 = {
|
||||||
|
x: startEventElement2.x,
|
||||||
|
y: startEventElement2.y
|
||||||
|
};
|
||||||
|
|
||||||
|
var startEventOldPos = {
|
||||||
|
x: startEventElement.x,
|
||||||
|
y: startEventElement.y
|
||||||
|
};
|
||||||
|
|
||||||
|
var taskOldPos = {
|
||||||
|
x: taskElement.x,
|
||||||
|
y: taskElement.y
|
||||||
|
};
|
||||||
|
|
||||||
|
var delta = { x: 50, y: 0 },
|
||||||
|
direction = 'w';
|
||||||
|
|
||||||
|
// when
|
||||||
|
modeling.createSpace([startEventElement, startEventElement2, taskElement], [subProcessElement], delta, direction);
|
||||||
|
|
||||||
|
// then
|
||||||
|
expect(subProcess.di.bounds.x).toBe(subProcOldPos.x + 50);
|
||||||
|
expect(subProcess.di.bounds.y).toBe(subProcOldPos.y);
|
||||||
|
expect(subProcess.di.bounds.width).toBe(subProcOldPos.width - 50);
|
||||||
|
expect(subProcess.di.bounds.height).toBe(subProcOldPos.height);
|
||||||
|
|
||||||
|
expect(startEvent.di.bounds.x).toBe(startEventOldPos.x + 50);
|
||||||
|
expect(startEvent.di.bounds.y).toBe(startEventOldPos.y);
|
||||||
|
|
||||||
|
expect(startEvent2.di.bounds.x).toBe(startEventOldPos2.x + 50);
|
||||||
|
expect(startEvent2.di.bounds.y).toBe(startEventOldPos2.y);
|
||||||
|
|
||||||
|
expect(task.di.bounds.x).toBe(taskOldPos.x + 50);
|
||||||
|
expect(task.di.bounds.y).toBe(taskOldPos.y);
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
});
|
|
@ -32,7 +32,7 @@ describe('palette', function() {
|
||||||
var paletteElement = domQuery('.djs-palette', container);
|
var paletteElement = domQuery('.djs-palette', container);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
expect(domQuery.all('.entry', paletteElement).length).toBe(8);
|
expect(domQuery.all('.entry', paletteElement).length).toBe(9);
|
||||||
|
|
||||||
done(err);
|
done(err);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue