bpmn-js 11.5.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bpmn-modeler.development.js +5337 -5375
- package/dist/bpmn-modeler.production.min.js +17 -18
- package/dist/bpmn-navigated-viewer.development.js +838 -599
- package/dist/bpmn-navigated-viewer.production.min.js +3 -5
- package/dist/bpmn-viewer.development.js +808 -593
- package/dist/bpmn-viewer.production.min.js +4 -6
- package/lib/BaseModeler.d.ts +5 -0
- package/lib/BaseModeler.js +16 -18
- package/lib/BaseViewer.d.ts +366 -0
- package/lib/BaseViewer.js +147 -109
- package/lib/Modeler.d.ts +15 -0
- package/lib/Modeler.js +6 -27
- package/lib/NavigatedViewer.d.ts +3 -0
- package/lib/NavigatedViewer.js +5 -2
- package/lib/Viewer.d.ts +3 -0
- package/lib/Viewer.js +2 -8
- package/lib/features/align-elements/dist/align-bottom-tool.svg +1 -0
- package/lib/features/align-elements/dist/align-horizontal-center-tool.svg +1 -0
- package/lib/features/align-elements/dist/align-left-tool.svg +1 -0
- package/lib/features/align-elements/dist/align-right-tool.svg +1 -0
- package/lib/features/align-elements/dist/align-tool.svg +1 -0
- package/lib/features/align-elements/dist/align-top-tool.svg +1 -0
- package/lib/features/align-elements/dist/align-vertical-center-tool.svg +1 -0
- package/lib/features/palette/dist/create.svg +1 -0
- package/lib/features/replace/BpmnReplace.js +3 -12
- package/package.json +13 -10
- package/lib/features/create-append-anything/AppendContextPadProvider.js +0 -77
- package/lib/features/create-append-anything/AppendMenuProvider.js +0 -187
- package/lib/features/create-append-anything/AppendRules.js +0 -83
- package/lib/features/create-append-anything/CreateAppendEditorActions.js +0 -58
- package/lib/features/create-append-anything/CreateAppendKeyboardBindings.js +0 -90
- package/lib/features/create-append-anything/CreateMenuProvider.js +0 -114
- package/lib/features/create-append-anything/CreatePaletteProvider.js +0 -72
- package/lib/features/create-append-anything/index.js +0 -37
- package/lib/features/create-append-anything/util/OptionsUtil.js +0 -617
- package/lib/icons/Icons.js +0 -11
- package/lib/icons/resources/append.svg +0 -3
- package/lib/icons/resources/create.svg +0 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bpmn-js",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "12.0.0",
|
|
4
4
|
"description": "A bpmn 2.0 toolkit and web modeler",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"files": [
|
|
@@ -9,10 +9,11 @@
|
|
|
9
9
|
"test/util",
|
|
10
10
|
"test/helper",
|
|
11
11
|
"test/matchers",
|
|
12
|
-
"!.eslintrc"
|
|
12
|
+
"!.eslintrc",
|
|
13
|
+
"!lib/**/*.spec.ts"
|
|
13
14
|
],
|
|
14
15
|
"scripts": {
|
|
15
|
-
"all": "run-s lint test distro test:distro",
|
|
16
|
+
"all": "run-s lint test test:types distro test:distro",
|
|
16
17
|
"lint": "eslint .",
|
|
17
18
|
"format": "run-s format:markdown 'lint -- --fix'",
|
|
18
19
|
"format:markdown": "remark . -qo",
|
|
@@ -24,6 +25,7 @@
|
|
|
24
25
|
"distro": "node tasks/build-distro.js",
|
|
25
26
|
"collect-translations": "cross-env COLLECT_TRANSLATIONS=1 npm test",
|
|
26
27
|
"test:distro": "node tasks/test-distro.js",
|
|
28
|
+
"test:types": "tsc",
|
|
27
29
|
"postversion": "run-s distro test:distro",
|
|
28
30
|
"prepare": "run-s distro"
|
|
29
31
|
},
|
|
@@ -56,11 +58,11 @@
|
|
|
56
58
|
],
|
|
57
59
|
"devDependencies": {
|
|
58
60
|
"@babel/core": "^7.20.2",
|
|
59
|
-
"@rollup/plugin-commonjs": "^
|
|
60
|
-
"@rollup/plugin-json": "^
|
|
61
|
+
"@rollup/plugin-commonjs": "^24.0.1",
|
|
62
|
+
"@rollup/plugin-json": "^6.0.0",
|
|
61
63
|
"@rollup/plugin-node-resolve": "^15.0.1",
|
|
62
|
-
"@rollup/plugin-replace": "^5.0.
|
|
63
|
-
"@rollup/plugin-terser": "^0.
|
|
64
|
+
"@rollup/plugin-replace": "^5.0.2",
|
|
65
|
+
"@rollup/plugin-terser": "^0.4.0",
|
|
64
66
|
"babel-loader": "^9.1.0",
|
|
65
67
|
"babel-plugin-istanbul": "^6.1.1",
|
|
66
68
|
"bpmn-font": "^0.12.0",
|
|
@@ -92,15 +94,16 @@
|
|
|
92
94
|
"puppeteer": "^19.4.1",
|
|
93
95
|
"remark-cli": "^11.0.0",
|
|
94
96
|
"remark-preset-bpmn-io": "^0.2.1",
|
|
95
|
-
"rollup": "^
|
|
96
|
-
"rollup-plugin-license": "^
|
|
97
|
+
"rollup": "^3.19.1",
|
|
98
|
+
"rollup-plugin-license": "^3.0.0",
|
|
97
99
|
"sinon": "^15.0.0",
|
|
98
100
|
"sinon-chai": "^3.7.0",
|
|
101
|
+
"typescript": "^5.0.0",
|
|
99
102
|
"webpack": "^5.74.0"
|
|
100
103
|
},
|
|
101
104
|
"dependencies": {
|
|
102
105
|
"bpmn-moddle": "^8.0.0",
|
|
103
|
-
"diagram-js": "^11.
|
|
106
|
+
"diagram-js": "^11.12.0",
|
|
104
107
|
"diagram-js-direct-editing": "^2.0.0",
|
|
105
108
|
"ids": "^1.0.0",
|
|
106
109
|
"inherits-browser": "^0.1.0",
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
assign
|
|
3
|
-
} from 'min-dash';
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
appendIcon
|
|
7
|
-
} from '../../icons/Icons';
|
|
8
|
-
|
|
9
|
-
var LOW_PRIORITY = 900;
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* A provider for align elements context pad button
|
|
13
|
-
*/
|
|
14
|
-
export default function AppendContextPadProvider(contextPad, popupMenu, translate, canvas) {
|
|
15
|
-
contextPad.registerProvider(LOW_PRIORITY, this);
|
|
16
|
-
|
|
17
|
-
this._contextPad = contextPad;
|
|
18
|
-
this._popupMenu = popupMenu;
|
|
19
|
-
this._translate = translate;
|
|
20
|
-
this._canvas = canvas;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
AppendContextPadProvider.$inject = [
|
|
24
|
-
'contextPad',
|
|
25
|
-
'popupMenu',
|
|
26
|
-
'translate',
|
|
27
|
-
'canvas'
|
|
28
|
-
];
|
|
29
|
-
|
|
30
|
-
AppendContextPadProvider.prototype.getContextPadEntries = function(element) {
|
|
31
|
-
const popupMenu = this._popupMenu;
|
|
32
|
-
const translate = this._translate;
|
|
33
|
-
const getAppendMenuPosition = this._getAppendMenuPosition.bind(this);
|
|
34
|
-
|
|
35
|
-
if (!popupMenu.isEmpty(element, 'bpmn-append')) {
|
|
36
|
-
|
|
37
|
-
// append menu entry
|
|
38
|
-
return {
|
|
39
|
-
'append': {
|
|
40
|
-
group: 'model',
|
|
41
|
-
imageUrl: appendIcon,
|
|
42
|
-
title: translate('Append element'),
|
|
43
|
-
action: {
|
|
44
|
-
click: function(event, element) {
|
|
45
|
-
|
|
46
|
-
var position = assign(getAppendMenuPosition(element), {
|
|
47
|
-
cursor: { x: event.x, y: event.y }
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
popupMenu.open(element, 'bpmn-append', position, {
|
|
51
|
-
title: translate('Append element'),
|
|
52
|
-
width: 300,
|
|
53
|
-
search: true
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
AppendContextPadProvider.prototype._getAppendMenuPosition = function(element) {
|
|
63
|
-
const contextPad = this._contextPad;
|
|
64
|
-
|
|
65
|
-
const X_OFFSET = 5;
|
|
66
|
-
|
|
67
|
-
const pad = contextPad.getPad(element).html;
|
|
68
|
-
|
|
69
|
-
const padRect = pad.getBoundingClientRect();
|
|
70
|
-
|
|
71
|
-
const pos = {
|
|
72
|
-
x: padRect.right + X_OFFSET,
|
|
73
|
-
y: padRect.top
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
return pos;
|
|
77
|
-
};
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import { isUndefined } from 'min-dash';
|
|
2
|
-
import { CREATE_OPTIONS } from './util/OptionsUtil';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* This module is an append menu provider for the popup menu.
|
|
6
|
-
*/
|
|
7
|
-
export default function AppendMenuProvider(
|
|
8
|
-
elementFactory,
|
|
9
|
-
popupMenu,
|
|
10
|
-
create,
|
|
11
|
-
autoPlace,
|
|
12
|
-
rules,
|
|
13
|
-
mouse,
|
|
14
|
-
translate
|
|
15
|
-
) {
|
|
16
|
-
this._elementFactory = elementFactory;
|
|
17
|
-
this._popupMenu = popupMenu;
|
|
18
|
-
this._create = create;
|
|
19
|
-
this._autoPlace = autoPlace;
|
|
20
|
-
this._rules = rules;
|
|
21
|
-
this._create = create;
|
|
22
|
-
this._mouse = mouse;
|
|
23
|
-
this._translate = translate;
|
|
24
|
-
|
|
25
|
-
this.register();
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
AppendMenuProvider.$inject = [
|
|
29
|
-
'elementFactory',
|
|
30
|
-
'popupMenu',
|
|
31
|
-
'create',
|
|
32
|
-
'autoPlace',
|
|
33
|
-
'rules',
|
|
34
|
-
'mouse',
|
|
35
|
-
'translate'
|
|
36
|
-
];
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Register append menu provider in the popup menu
|
|
40
|
-
*/
|
|
41
|
-
AppendMenuProvider.prototype.register = function() {
|
|
42
|
-
this._popupMenu.registerProvider('bpmn-append', this);
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Get all entries from createOptions for the given element.
|
|
47
|
-
*
|
|
48
|
-
* @param {djs.model.Base} element
|
|
49
|
-
*
|
|
50
|
-
* @return {Array<Object>} a list of menu entry items
|
|
51
|
-
*/
|
|
52
|
-
AppendMenuProvider.prototype.getPopupMenuEntries = function(element) {
|
|
53
|
-
const rules = this._rules;
|
|
54
|
-
const translate = this._translate;
|
|
55
|
-
|
|
56
|
-
const entries = {};
|
|
57
|
-
|
|
58
|
-
if (!rules.allowed('shape.append', { element: element })) {
|
|
59
|
-
return [];
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// filter out elements with no incoming connections
|
|
63
|
-
const appendOptions = this._filterEntries(CREATE_OPTIONS);
|
|
64
|
-
|
|
65
|
-
// map options to menu entries
|
|
66
|
-
appendOptions.forEach(option => {
|
|
67
|
-
const {
|
|
68
|
-
actionName,
|
|
69
|
-
className,
|
|
70
|
-
label,
|
|
71
|
-
target,
|
|
72
|
-
description,
|
|
73
|
-
group,
|
|
74
|
-
search,
|
|
75
|
-
rank
|
|
76
|
-
} = option;
|
|
77
|
-
|
|
78
|
-
entries[`append-${actionName}`] = {
|
|
79
|
-
label: label && translate(label),
|
|
80
|
-
className,
|
|
81
|
-
description,
|
|
82
|
-
group: group && {
|
|
83
|
-
...group,
|
|
84
|
-
name: translate(group.name)
|
|
85
|
-
},
|
|
86
|
-
search,
|
|
87
|
-
rank,
|
|
88
|
-
action: this._createEntryAction(element, target)
|
|
89
|
-
};
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
return entries;
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Filter out entries from the options.
|
|
97
|
-
*
|
|
98
|
-
* @param {Array<Object>} entries
|
|
99
|
-
*
|
|
100
|
-
* @return {Array<Object>} filtered entries
|
|
101
|
-
*/
|
|
102
|
-
AppendMenuProvider.prototype._filterEntries = function(entries) {
|
|
103
|
-
return entries.filter(option => {
|
|
104
|
-
|
|
105
|
-
const target = option.target;
|
|
106
|
-
const {
|
|
107
|
-
type,
|
|
108
|
-
eventDefinitionType
|
|
109
|
-
} = target;
|
|
110
|
-
|
|
111
|
-
if ([
|
|
112
|
-
'bpmn:StartEvent',
|
|
113
|
-
'bpmn:Participant'
|
|
114
|
-
].includes(type)) {
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
if (type === 'bpmn:BoundaryEvent' && isUndefined(eventDefinitionType)) {
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return true;
|
|
123
|
-
});
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Create an action for a given target.
|
|
128
|
-
*
|
|
129
|
-
* @param {djs.model.Base} element
|
|
130
|
-
* @param {Object} target
|
|
131
|
-
*
|
|
132
|
-
* @return {Object}
|
|
133
|
-
*/
|
|
134
|
-
AppendMenuProvider.prototype._createEntryAction = function(element, target) {
|
|
135
|
-
const elementFactory = this._elementFactory;
|
|
136
|
-
const autoPlace = this._autoPlace;
|
|
137
|
-
const create = this._create;
|
|
138
|
-
const mouse = this._mouse;
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const autoPlaceElement = () => {
|
|
142
|
-
const newElement = elementFactory.create('shape', target);
|
|
143
|
-
autoPlace.append(element, newElement);
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
const manualPlaceElement = (event) => {
|
|
147
|
-
const newElement = elementFactory.create('shape', target);
|
|
148
|
-
|
|
149
|
-
if (event instanceof KeyboardEvent) {
|
|
150
|
-
event = mouse.getLastMoveEvent();
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return create.start(event, newElement, {
|
|
154
|
-
source: element
|
|
155
|
-
});
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
return {
|
|
159
|
-
click: this._canAutoPlaceElement(target) ? autoPlaceElement : manualPlaceElement,
|
|
160
|
-
dragstart: manualPlaceElement
|
|
161
|
-
};
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Check if the element should be auto placed.
|
|
166
|
-
*
|
|
167
|
-
* @param {Object} target
|
|
168
|
-
*
|
|
169
|
-
* @return {Boolean}
|
|
170
|
-
*/
|
|
171
|
-
AppendMenuProvider.prototype._canAutoPlaceElement = (target) => {
|
|
172
|
-
const { type } = target;
|
|
173
|
-
|
|
174
|
-
if (type === 'bpmn:BoundaryEvent') {
|
|
175
|
-
return false;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
if (type === 'bpmn:SubProcess' && target.triggeredByEvent) {
|
|
179
|
-
return false;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
if (type === 'bpmn:IntermediateCatchEvent' && target.eventDefinitionType === 'bpmn:LinkEventDefinition') {
|
|
183
|
-
return false;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return true;
|
|
187
|
-
};
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
find,
|
|
3
|
-
} from 'min-dash';
|
|
4
|
-
|
|
5
|
-
import inherits from 'inherits-browser';
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
is,
|
|
9
|
-
isAny,
|
|
10
|
-
getBusinessObject
|
|
11
|
-
} from '../../util/ModelUtil';
|
|
12
|
-
|
|
13
|
-
import {
|
|
14
|
-
isLabel
|
|
15
|
-
} from '../../util/LabelUtil';
|
|
16
|
-
|
|
17
|
-
import RuleProvider from 'diagram-js/lib/features/rules/RuleProvider';
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Append anything modeling rules
|
|
22
|
-
*/
|
|
23
|
-
export default function AppendRules(eventBus) {
|
|
24
|
-
RuleProvider.call(this, eventBus);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
inherits(AppendRules, RuleProvider);
|
|
28
|
-
|
|
29
|
-
AppendRules.$inject = [
|
|
30
|
-
'eventBus'
|
|
31
|
-
];
|
|
32
|
-
|
|
33
|
-
AppendRules.prototype.init = function() {
|
|
34
|
-
this.addRule('shape.append', function(context) {
|
|
35
|
-
|
|
36
|
-
var source = context.element;
|
|
37
|
-
|
|
38
|
-
const businessObject = getBusinessObject(source);
|
|
39
|
-
|
|
40
|
-
if (isLabel(source)) {
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (isAny(source, [
|
|
45
|
-
'bpmn:EndEvent',
|
|
46
|
-
'bpmn:Group',
|
|
47
|
-
'bpmn:TextAnnotation',
|
|
48
|
-
'bpmn:Lane',
|
|
49
|
-
'bpmn:Participant',
|
|
50
|
-
'bpmn:DataStoreReference',
|
|
51
|
-
'bpmn:DataObjectReference'
|
|
52
|
-
])) {
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (isConnection(source)) {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (is(source, 'bpmn:IntermediateThrowEvent') && hasEventDefinition(source, 'bpmn:LinkEventDefinition')) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (is(source, 'bpmn:SubProcess') && businessObject.triggeredByEvent) {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
// helpers //////////////
|
|
73
|
-
function hasEventDefinition(element, eventDefinition) {
|
|
74
|
-
var bo = getBusinessObject(element);
|
|
75
|
-
|
|
76
|
-
return !!find(bo.eventDefinitions || [], function(definition) {
|
|
77
|
-
return is(definition, eventDefinition);
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function isConnection(element) {
|
|
82
|
-
return element.waypoints;
|
|
83
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { assign } from 'min-dash';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Registers and executes BPMN specific editor actions.
|
|
5
|
-
*
|
|
6
|
-
* @param {Injector} injector
|
|
7
|
-
*/
|
|
8
|
-
export default function CreateAppendEditorActions(injector) {
|
|
9
|
-
this._injector = injector;
|
|
10
|
-
|
|
11
|
-
this.registerActions();
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
CreateAppendEditorActions.$inject = [
|
|
15
|
-
'injector'
|
|
16
|
-
];
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Register actions.
|
|
20
|
-
*
|
|
21
|
-
* @param {Injector} injector
|
|
22
|
-
*/
|
|
23
|
-
CreateAppendEditorActions.prototype.registerActions = function() {
|
|
24
|
-
var editorActions = this._injector.get('editorActions', false);
|
|
25
|
-
var selection = this._injector.get('selection', false);
|
|
26
|
-
var contextPad = this._injector.get('contextPad', false);
|
|
27
|
-
var palette = this._injector.get('palette', false);
|
|
28
|
-
var popupMenu = this._injector.get('popupMenu', false);
|
|
29
|
-
|
|
30
|
-
const actions = {};
|
|
31
|
-
|
|
32
|
-
// append
|
|
33
|
-
if (selection && contextPad && palette && popupMenu && palette) {
|
|
34
|
-
assign(actions, {
|
|
35
|
-
'appendElement': function(event) {
|
|
36
|
-
const selected = selection && selection.get();
|
|
37
|
-
|
|
38
|
-
if (selected.length == 1 && !popupMenu.isEmpty(selected[0], 'bpmn-append')) {
|
|
39
|
-
contextPad.triggerEntry('append', 'click', event);
|
|
40
|
-
} else {
|
|
41
|
-
palette.triggerEntry('create', 'click', event);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// create
|
|
48
|
-
if (palette) {
|
|
49
|
-
assign(actions, {
|
|
50
|
-
'createElement': function(event) {
|
|
51
|
-
palette.triggerEntry('create', 'click', event);
|
|
52
|
-
} }
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
editorActions && editorActions.register(actions);
|
|
57
|
-
|
|
58
|
-
};
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import inherits from 'inherits-browser';
|
|
2
|
-
|
|
3
|
-
import KeyboardBindings from 'diagram-js/lib/features/keyboard/KeyboardBindings';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* BPMN 2.0 specific keyboard bindings.
|
|
8
|
-
*
|
|
9
|
-
* @param {Injector} injector
|
|
10
|
-
*/
|
|
11
|
-
export default function CreateAppendKeyboardBindings(injector) {
|
|
12
|
-
|
|
13
|
-
this._injector = injector;
|
|
14
|
-
this._keyboard = this._injector.get('keyboard', false);
|
|
15
|
-
this._editorActions = this._injector.get('editorActions', false);
|
|
16
|
-
|
|
17
|
-
if (this._keyboard) {
|
|
18
|
-
this._injector.invoke(KeyboardBindings, this);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
inherits(CreateAppendKeyboardBindings, KeyboardBindings);
|
|
23
|
-
|
|
24
|
-
CreateAppendKeyboardBindings.$inject = [
|
|
25
|
-
'injector'
|
|
26
|
-
];
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Register available keyboard bindings.
|
|
31
|
-
*
|
|
32
|
-
* @param {Keyboard} keyboard
|
|
33
|
-
* @param {EditorActions} editorActions
|
|
34
|
-
*/
|
|
35
|
-
CreateAppendKeyboardBindings.prototype.registerBindings = function() {
|
|
36
|
-
|
|
37
|
-
var keyboard = this._keyboard;
|
|
38
|
-
var editorActions = this._editorActions;
|
|
39
|
-
|
|
40
|
-
// inherit default bindings
|
|
41
|
-
KeyboardBindings.prototype.registerBindings.call(this, keyboard, editorActions);
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Add keyboard binding if respective editor action
|
|
45
|
-
* is registered.
|
|
46
|
-
*
|
|
47
|
-
* @param {string} action name
|
|
48
|
-
* @param {Function} fn that implements the key binding
|
|
49
|
-
*/
|
|
50
|
-
function addListener(action, fn) {
|
|
51
|
-
|
|
52
|
-
if (editorActions && editorActions.isRegistered(action)) {
|
|
53
|
-
keyboard && keyboard.addListener(fn);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// activate append/create element
|
|
58
|
-
// A
|
|
59
|
-
addListener('appendElement', function(context) {
|
|
60
|
-
|
|
61
|
-
var event = context.keyEvent;
|
|
62
|
-
|
|
63
|
-
if (keyboard && keyboard.hasModifier(event)) {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (keyboard && keyboard.isKey([ 'a', 'A' ], event)) {
|
|
68
|
-
|
|
69
|
-
editorActions && editorActions.trigger('appendElement', event);
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
// N
|
|
75
|
-
addListener('createElement', function(context) {
|
|
76
|
-
|
|
77
|
-
var event = context.keyEvent;
|
|
78
|
-
|
|
79
|
-
if (keyboard && keyboard.hasModifier(event)) {
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (keyboard && keyboard.isKey([ 'n', 'N' ], event)) {
|
|
84
|
-
editorActions && editorActions.trigger('createElement', event);
|
|
85
|
-
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
};
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { CREATE_OPTIONS } from './util/OptionsUtil';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* This module is a create menu provider for the popup menu.
|
|
5
|
-
*/
|
|
6
|
-
export default function CreateMenuProvider(
|
|
7
|
-
elementFactory, popupMenu, create,
|
|
8
|
-
autoPlace, mouse, translate
|
|
9
|
-
) {
|
|
10
|
-
this._elementFactory = elementFactory;
|
|
11
|
-
this._popupMenu = popupMenu;
|
|
12
|
-
this._create = create;
|
|
13
|
-
this._autoPlace = autoPlace;
|
|
14
|
-
this._mouse = mouse;
|
|
15
|
-
this._translate = translate;
|
|
16
|
-
|
|
17
|
-
this.register();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
CreateMenuProvider.$inject = [
|
|
21
|
-
'elementFactory',
|
|
22
|
-
'popupMenu',
|
|
23
|
-
'create',
|
|
24
|
-
'autoPlace',
|
|
25
|
-
'mouse',
|
|
26
|
-
'translate'
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Register create menu provider in the popup menu
|
|
31
|
-
*/
|
|
32
|
-
CreateMenuProvider.prototype.register = function() {
|
|
33
|
-
this._popupMenu.registerProvider('bpmn-create', this);
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Get all entries
|
|
38
|
-
*
|
|
39
|
-
* @param {djs.model.Base} element
|
|
40
|
-
*
|
|
41
|
-
* @return {Array<Object>} a list of menu entry items
|
|
42
|
-
*/
|
|
43
|
-
CreateMenuProvider.prototype.getPopupMenuEntries = function() {
|
|
44
|
-
|
|
45
|
-
const entries = {};
|
|
46
|
-
|
|
47
|
-
// map options to menu entries
|
|
48
|
-
CREATE_OPTIONS.forEach(option => {
|
|
49
|
-
const {
|
|
50
|
-
actionName,
|
|
51
|
-
className,
|
|
52
|
-
label,
|
|
53
|
-
target,
|
|
54
|
-
description,
|
|
55
|
-
group,
|
|
56
|
-
search,
|
|
57
|
-
rank
|
|
58
|
-
} = option;
|
|
59
|
-
|
|
60
|
-
const targetAction = this._createEntryAction(target);
|
|
61
|
-
|
|
62
|
-
entries[`create-${actionName}`] = {
|
|
63
|
-
label: label && this._translate(label),
|
|
64
|
-
className,
|
|
65
|
-
description,
|
|
66
|
-
group: group && {
|
|
67
|
-
...group,
|
|
68
|
-
name: this._translate(group.name)
|
|
69
|
-
},
|
|
70
|
-
search,
|
|
71
|
-
rank,
|
|
72
|
-
action: {
|
|
73
|
-
click: targetAction,
|
|
74
|
-
dragstart: targetAction
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
return entries;
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Create an action for a given target
|
|
84
|
-
*
|
|
85
|
-
* @param {Object} target
|
|
86
|
-
* @returns {Object}
|
|
87
|
-
*/
|
|
88
|
-
CreateMenuProvider.prototype._createEntryAction = function(target) {
|
|
89
|
-
|
|
90
|
-
const create = this._create;
|
|
91
|
-
const mouse = this._mouse;
|
|
92
|
-
const popupMenu = this._popupMenu;
|
|
93
|
-
const elementFactory = this._elementFactory;
|
|
94
|
-
|
|
95
|
-
let newElement;
|
|
96
|
-
|
|
97
|
-
return (event) => {
|
|
98
|
-
popupMenu.close();
|
|
99
|
-
|
|
100
|
-
// create the new element
|
|
101
|
-
if (target.type === 'bpmn:Participant') {
|
|
102
|
-
newElement = elementFactory.createParticipantShape(target);
|
|
103
|
-
} else {
|
|
104
|
-
newElement = elementFactory.create('shape', target);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// use last mouse event if triggered via keyboard
|
|
108
|
-
if (event instanceof KeyboardEvent) {
|
|
109
|
-
event = mouse.getLastMoveEvent();
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return create.start(event, newElement);
|
|
113
|
-
};
|
|
114
|
-
};
|