bpmn-js 0.13.1 → 0.14.1

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.
Files changed (65) hide show
  1. package/.travis.yml +1 -1
  2. package/.wiredeps +5 -5
  3. package/lib/Modeler.js +52 -9
  4. package/lib/Viewer.js +205 -105
  5. package/lib/draw/BpmnRenderer.js +4 -0
  6. package/lib/features/context-pad/ContextPadProvider.js +21 -15
  7. package/lib/features/label-editing/LabelEditingProvider.js +21 -6
  8. package/lib/features/label-editing/LabelUtil.js +6 -6
  9. package/lib/features/label-editing/cmd/UpdateLabelHandler.js +19 -17
  10. package/lib/features/modeling/BpmnUpdater.js +12 -4
  11. package/lib/features/modeling/ElementFactory.js +25 -11
  12. package/lib/features/modeling/{BpmnLabelSupport.js → behavior/LabelBehavior.js} +14 -4
  13. package/lib/features/modeling/behavior/ModelingFeedback.js +3 -3
  14. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +4 -4
  15. package/lib/features/modeling/behavior/index.js +2 -0
  16. package/lib/features/modeling/cmd/SplitLaneHandler.js +6 -4
  17. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +6 -0
  18. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +6 -0
  19. package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +6 -4
  20. package/lib/features/modeling/index.js +1 -2
  21. package/lib/features/ordering/BpmnOrderingProvider.js +7 -4
  22. package/lib/features/ordering/index.js +3 -0
  23. package/lib/features/palette/PaletteProvider.js +13 -9
  24. package/lib/features/palette/index.js +2 -1
  25. package/lib/features/popup-menu/ReplaceMenuProvider.js +22 -10
  26. package/lib/features/popup-menu/index.js +4 -0
  27. package/lib/features/replace/BpmnReplace.js +17 -1
  28. package/lib/features/replace/ReplaceOptions.js +22 -0
  29. package/lib/features/replace/index.js +0 -1
  30. package/lib/features/rules/BpmnRules.js +14 -0
  31. package/lib/features/snapping/BpmnSnapping.js +2 -2
  32. package/lib/import/BpmnImporter.js +30 -18
  33. package/lib/import/BpmnTreeWalker.js +42 -15
  34. package/lib/import/Importer.js +19 -7
  35. package/lib/import/index.js +3 -0
  36. package/package.json +8 -7
  37. package/test/fixtures/bpmn/extension/custom-override.bpmn +54 -0
  38. package/test/fixtures/bpmn/extension/custom.bpmn +54 -0
  39. package/test/fixtures/bpmn/features/modeling/update-label.bpmn +24 -0
  40. package/test/fixtures/json/model/custom-override.json +39 -0
  41. package/test/fixtures/json/model/custom.json +39 -0
  42. package/test/helper/index.js +6 -1
  43. package/test/integration/ReimportSpec.js +89 -0
  44. package/test/spec/ModelerSpec.js +155 -9
  45. package/test/spec/ViewerSpec.js +328 -43
  46. package/test/spec/features/context-pad/ContextPadProviderSpec.js +5 -5
  47. package/test/spec/features/label-editing/LabelEditingProviderSpec.js +201 -128
  48. package/test/spec/features/modeling/AppendShapeSpec.js +0 -43
  49. package/test/spec/features/modeling/UpdateLabelSpec.js +129 -0
  50. package/test/spec/features/modeling/append/TextAnnotationSpec.js +13 -0
  51. package/test/spec/features/modeling/behavior/LabelBehaviorSpec.js +144 -0
  52. package/test/spec/features/modeling/layout/LayoutAssociationSpec.js +3 -3
  53. package/test/spec/features/ordering/BpmnOrderingProviderSpec.js +41 -2
  54. package/test/spec/features/ordering/ordering-subprocesses.bpmn +14 -2
  55. package/test/spec/features/popup-menu/ReplaceMenuProviderSpec.js +0 -4
  56. package/test/spec/features/replace/BpmnReplace.collaboration.bpmn +70 -0
  57. package/test/spec/features/replace/BpmnReplaceSpec.js +37 -0
  58. package/test/spec/features/rules/BpmnRules.collaboration.bpmn +6 -1
  59. package/test/spec/features/rules/BpmnRulesSpec.js +32 -0
  60. package/test/spec/features/snapping/BpmnSnappingSpec.js +16 -6
  61. package/test/spec/i18n/custom-translate/custom-translate.js +15 -0
  62. package/test/spec/i18n/custom-translate/index.js +3 -0
  63. package/test/spec/i18n/translateSpec.js +53 -0
  64. package/test/spec/import/ImporterSpec.js +3 -3
  65. package/test/spec/features/modeling/BpmnLabelSupportSpec.js +0 -37
@@ -15,12 +15,19 @@ var BpmnTreeWalker = require('./BpmnTreeWalker');
15
15
  function importBpmnDiagram(diagram, definitions, done) {
16
16
 
17
17
  var importer = diagram.get('bpmnImporter'),
18
- eventBus = diagram.get('eventBus');
18
+ eventBus = diagram.get('eventBus'),
19
+ translate = diagram.get('translate');
19
20
 
20
21
  var error,
21
22
  warnings = [];
22
23
 
23
- function parse(definitions) {
24
+ /**
25
+ * Walk the diagram semantically, importing (=drawing)
26
+ * all elements you encounter.
27
+ *
28
+ * @param {ModdleElement} definitions
29
+ */
30
+ function render(definitions) {
24
31
 
25
32
  var visitor = {
26
33
 
@@ -37,21 +44,26 @@ function importBpmnDiagram(diagram, definitions, done) {
37
44
  }
38
45
  };
39
46
 
40
- var walker = new BpmnTreeWalker(visitor);
47
+ var walker = new BpmnTreeWalker(visitor, translate);
41
48
 
42
- // import
49
+ // traverse BPMN 2.0 document model,
50
+ // starting at definitions
43
51
  walker.handleDefinitions(definitions);
44
52
  }
45
53
 
46
- eventBus.fire('import.start', { definitions: definitions });
54
+ eventBus.fire('import.render.start', { definitions: definitions });
47
55
 
48
56
  try {
49
- parse(definitions);
57
+ render(definitions);
50
58
  } catch (e) {
51
59
  error = e;
52
60
  }
53
61
 
54
- eventBus.fire(error ? 'import.error' : 'import.success', { error: error, warnings: warnings });
62
+ eventBus.fire('import.render.complete', {
63
+ error: error,
64
+ warnings: warnings
65
+ });
66
+
55
67
  done(error, warnings);
56
68
  }
57
69
 
@@ -1,3 +1,6 @@
1
1
  module.exports = {
2
+ __depends__: [
3
+ require('diagram-js/lib/i18n/translate')
4
+ ],
2
5
  bpmnImporter: [ 'type', require('./BpmnImporter') ]
3
6
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpmn-js",
3
- "version": "0.13.1",
3
+ "version": "0.14.1",
4
4
  "description": "A bpmn 2.0 toolkit and web modeler",
5
5
  "scripts": {
6
6
  "test": "grunt test"
@@ -35,6 +35,7 @@
35
35
  "bundle-collapser": "^1.1.1",
36
36
  "chai": "~2.2.0",
37
37
  "grunt": "^0.4.4",
38
+ "grunt-cli": "^0.1.13",
38
39
  "grunt-contrib-copy": "^0.7.0",
39
40
  "grunt-contrib-jshint": "^0.7.2",
40
41
  "grunt-karma": "^0.12.0",
@@ -46,8 +47,8 @@
46
47
  "karma-chrome-launcher": "^0.2.2",
47
48
  "karma-firefox-launcher": "^0.1.3",
48
49
  "karma-ie-launcher": "^0.2.0",
49
- "karma-phantomjs-launcher": "^0.2.0",
50
50
  "karma-mocha": "~0.1.0",
51
+ "karma-phantomjs-launcher": "^0.2.0",
51
52
  "karma-safari-launcher": "^0.1.1",
52
53
  "karma-sinon-chai": "~0.3.0",
53
54
  "load-grunt-tasks": "^0.3.0",
@@ -63,11 +64,11 @@
63
64
  "watchify": "^3.7.0"
64
65
  },
65
66
  "dependencies": {
66
- "bpmn-moddle": "^0.10.4",
67
- "diagram-js": "^0.13.1",
68
- "diagram-js-direct-editing": "^0.13.0",
69
- "didi": "^0.0.4",
70
- "ids": "^0.1.1",
67
+ "bpmn-moddle": "^0.11.0",
68
+ "diagram-js": "^0.14.0",
69
+ "diagram-js-direct-editing": "^0.14.0",
70
+ "diagram-js-origin": "^0.13.0",
71
+ "ids": "^0.2.0",
71
72
  "inherits": "^2.0.1",
72
73
  "lodash": "^3.0.1",
73
74
  "min-dom": "^0.2.0",
@@ -0,0 +1,54 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://activiti.org/bpmn" xmlns:custom="http://customdescriptor.com/bpmn2" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd" id="_FVEpwO_VEeOtYvXzz5ksgw" exporter="camunda modeler" exporterVersion="2.5.0" targetNamespace="http://activiti.org/bpmn">
3
+ <bpmn2:process id="testProcess" isExecutable="true">
4
+ <bpmn2:startEvent id="StartEvent_1">
5
+ <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
6
+ </bpmn2:startEvent>
7
+ <bpmn2:sendTask id="send" name="send">
8
+ <bpmn2:extensionElements>
9
+ <camunda:inputOutput>
10
+ <camunda:inputParameter name="var1">
11
+ <camunda:map>
12
+ <camunda:entry key="a">
13
+ <camunda:list>
14
+ <camunda:value>stringInListNestedInMap</camunda:value>
15
+ <camunda:value>${ 'b' }</camunda:value>
16
+ </camunda:list>
17
+ </camunda:entry>
18
+ </camunda:map>
19
+ </camunda:inputParameter>
20
+ <camunda:inputParameter name="var2">stringConstantValue</camunda:inputParameter>
21
+ </camunda:inputOutput>
22
+ <custom:CustomSendElementOverride name="custom" value="1" />
23
+ </bpmn2:extensionElements>
24
+ <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
25
+ <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
26
+ </bpmn2:sendTask>
27
+ <bpmn2:sequenceFlow id="SequenceFlow_1" name="" sourceRef="StartEvent_1" targetRef="send"/>
28
+ <bpmn2:endEvent id="EndEvent_1">
29
+ <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
30
+ </bpmn2:endEvent>
31
+ <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="send" targetRef="EndEvent_1"/>
32
+ </bpmn2:process>
33
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
34
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="testProcess">
35
+ <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
36
+ <dc:Bounds height="36.0" width="36.0" x="128.0" y="178.0"/>
37
+ </bpmndi:BPMNShape>
38
+ <bpmndi:BPMNShape id="_BPMNShape_UserTask_2" bpmnElement="send">
39
+ <dc:Bounds height="80.0" width="100.0" x="214.0" y="156.0"/>
40
+ </bpmndi:BPMNShape>
41
+ <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="_BPMNShape_StartEvent_2" targetElement="_BPMNShape_UserTask_2">
42
+ <di:waypoint xsi:type="dc:Point" x="164.0" y="196.0"/>
43
+ <di:waypoint xsi:type="dc:Point" x="214.0" y="196.0"/>
44
+ </bpmndi:BPMNEdge>
45
+ <bpmndi:BPMNShape id="_BPMNShape_EndEvent_2" bpmnElement="EndEvent_1">
46
+ <dc:Bounds height="36.0" width="36.0" x="364.0" y="178.0"/>
47
+ </bpmndi:BPMNShape>
48
+ <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_UserTask_2" targetElement="_BPMNShape_EndEvent_2">
49
+ <di:waypoint xsi:type="dc:Point" x="314.0" y="196.0"/>
50
+ <di:waypoint xsi:type="dc:Point" x="364.0" y="196.0"/>
51
+ </bpmndi:BPMNEdge>
52
+ </bpmndi:BPMNPlane>
53
+ </bpmndi:BPMNDiagram>
54
+ </bpmn2:definitions>
@@ -0,0 +1,54 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://activiti.org/bpmn" xmlns:custom="http://customdescriptor.com/bpmn2" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd" id="_FVEpwO_VEeOtYvXzz5ksgw" exporter="camunda modeler" exporterVersion="2.5.0" targetNamespace="http://activiti.org/bpmn">
3
+ <bpmn2:process id="testProcess" isExecutable="true">
4
+ <bpmn2:startEvent id="StartEvent_1">
5
+ <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
6
+ </bpmn2:startEvent>
7
+ <bpmn2:sendTask id="send" name="send">
8
+ <bpmn2:extensionElements>
9
+ <camunda:inputOutput>
10
+ <camunda:inputParameter name="var1">
11
+ <camunda:map>
12
+ <camunda:entry key="a">
13
+ <camunda:list>
14
+ <camunda:value>stringInListNestedInMap</camunda:value>
15
+ <camunda:value>${ 'b' }</camunda:value>
16
+ </camunda:list>
17
+ </camunda:entry>
18
+ </camunda:map>
19
+ </camunda:inputParameter>
20
+ <camunda:inputParameter name="var2">stringConstantValue</camunda:inputParameter>
21
+ </camunda:inputOutput>
22
+ <custom:customSendElement name="custom" value="1" />
23
+ </bpmn2:extensionElements>
24
+ <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
25
+ <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
26
+ </bpmn2:sendTask>
27
+ <bpmn2:sequenceFlow id="SequenceFlow_1" name="" sourceRef="StartEvent_1" targetRef="send"/>
28
+ <bpmn2:endEvent id="EndEvent_1">
29
+ <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
30
+ </bpmn2:endEvent>
31
+ <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="send" targetRef="EndEvent_1"/>
32
+ </bpmn2:process>
33
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
34
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="testProcess">
35
+ <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
36
+ <dc:Bounds height="36.0" width="36.0" x="128.0" y="178.0"/>
37
+ </bpmndi:BPMNShape>
38
+ <bpmndi:BPMNShape id="_BPMNShape_UserTask_2" bpmnElement="send">
39
+ <dc:Bounds height="80.0" width="100.0" x="214.0" y="156.0"/>
40
+ </bpmndi:BPMNShape>
41
+ <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="_BPMNShape_StartEvent_2" targetElement="_BPMNShape_UserTask_2">
42
+ <di:waypoint xsi:type="dc:Point" x="164.0" y="196.0"/>
43
+ <di:waypoint xsi:type="dc:Point" x="214.0" y="196.0"/>
44
+ </bpmndi:BPMNEdge>
45
+ <bpmndi:BPMNShape id="_BPMNShape_EndEvent_2" bpmnElement="EndEvent_1">
46
+ <dc:Bounds height="36.0" width="36.0" x="364.0" y="178.0"/>
47
+ </bpmndi:BPMNShape>
48
+ <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_UserTask_2" targetElement="_BPMNShape_EndEvent_2">
49
+ <di:waypoint xsi:type="dc:Point" x="314.0" y="196.0"/>
50
+ <di:waypoint xsi:type="dc:Point" x="364.0" y="196.0"/>
51
+ </bpmndi:BPMNEdge>
52
+ </bpmndi:BPMNPlane>
53
+ </bpmndi:BPMNDiagram>
54
+ </bpmn2:definitions>
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn">
3
+ <bpmn:process id="Process_1" isExecutable="false">
4
+ <bpmn:startEvent id="StartEvent_1" name="Foo" />
5
+ <bpmn:startEvent id="StartEvent_2" />
6
+ <bpmn:task id="Task_1" />
7
+ </bpmn:process>
8
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
9
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
10
+ <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
11
+ <dc:Bounds x="173" y="102" width="36" height="36" />
12
+ </bpmndi:BPMNShape>
13
+ <bpmndi:BPMNShape id="StartEvent_1peicoz_di" bpmnElement="StartEvent_2">
14
+ <dc:Bounds x="255" y="102" width="36" height="36" />
15
+ <bpmndi:BPMNLabel>
16
+ <dc:Bounds x="228" y="138" width="90" height="20" />
17
+ </bpmndi:BPMNLabel>
18
+ </bpmndi:BPMNShape>
19
+ <bpmndi:BPMNShape id="Task_16agoun_di" bpmnElement="Task_1">
20
+ <dc:Bounds x="339" y="80" width="100" height="80" />
21
+ </bpmndi:BPMNShape>
22
+ </bpmndi:BPMNPlane>
23
+ </bpmndi:BPMNDiagram>
24
+ </bpmn:definitions>
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "Custom descriptor Override",
3
+ "uri": "http://customdescriptor.com/bpmn2",
4
+ "prefix": "custom",
5
+ "xml": {
6
+ "tagAlias": "lowerCase"
7
+ },
8
+ "associations": [],
9
+ "types": [
10
+ {
11
+ "name": "CustomSendElementOverride",
12
+ "superClass": [
13
+ "Element"
14
+ ],
15
+ "properties": [
16
+ {
17
+ "name": "name",
18
+ "isAttr": true,
19
+ "type": "String"
20
+ },
21
+ {
22
+ "name": "value",
23
+ "isAttr": true,
24
+ "type": "String"
25
+ }
26
+ ]
27
+ },
28
+ {
29
+ "name": "ServiceTaskGroupOverride",
30
+ "extends": [
31
+ "bpmn:ServiceTask",
32
+ "bpmn:BusinessRuleTask",
33
+ "bpmn:SendTask",
34
+ "bpmn:MessageEventDefinition"
35
+ ]
36
+ }
37
+ ],
38
+ "emumerations": [ ]
39
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "Custom descriptor",
3
+ "uri": "http://customdescriptor.com/bpmn2",
4
+ "prefix": "custom",
5
+ "xml": {
6
+ "tagAlias": "lowerCase"
7
+ },
8
+ "associations": [],
9
+ "types": [
10
+ {
11
+ "name": "CustomSendElement",
12
+ "superClass": [
13
+ "Element"
14
+ ],
15
+ "properties": [
16
+ {
17
+ "name": "name",
18
+ "isAttr": true,
19
+ "type": "String"
20
+ },
21
+ {
22
+ "name": "value",
23
+ "isAttr": true,
24
+ "type": "String"
25
+ }
26
+ ]
27
+ },
28
+ {
29
+ "name": "ServiceTaskGroup",
30
+ "extends": [
31
+ "bpmn:ServiceTask",
32
+ "bpmn:BusinessRuleTask",
33
+ "bpmn:SendTask",
34
+ "bpmn:MessageEventDefinition"
35
+ ]
36
+ }
37
+ ],
38
+ "emumerations": [ ]
39
+ }
@@ -76,7 +76,12 @@ function bootstrapBpmnJS(BpmnJS, diagram, options, locals) {
76
76
  _locals = _locals();
77
77
  }
78
78
 
79
- _options = merge({ container: testContainer }, OPTIONS, _options);
79
+ _options = merge({
80
+ container: testContainer,
81
+ canvas: {
82
+ deferUpdate: false
83
+ }
84
+ }, OPTIONS, _options);
80
85
 
81
86
  if (_locals) {
82
87
  var mockModule = {};
@@ -0,0 +1,89 @@
1
+ 'use strict';
2
+
3
+ var Modeler = require('../../lib/Modeler');
4
+
5
+ var TestContainer = require('mocha-test-container-support');
6
+
7
+ function delay(fn) {
8
+ setTimeout(fn, 10);
9
+ }
10
+
11
+
12
+ describe.skip('scenario - successive reopening', function() {
13
+
14
+ var container;
15
+
16
+ beforeEach(function() {
17
+ container = TestContainer.get(this);
18
+ });
19
+
20
+
21
+ var boundaryXML = require('../fixtures/bpmn/boundary-events.bpmn'),
22
+ containersXML = require('../fixtures/bpmn/containers.bpmn'),
23
+ flowMarkersXML = require('../fixtures/bpmn/flow-markers.bpmn'),
24
+ simpleXML = require('../fixtures/bpmn/simple.bpmn');
25
+
26
+ var allDiagrams = [
27
+ boundaryXML,
28
+ containersXML,
29
+ flowMarkersXML,
30
+ simpleXML
31
+ ];
32
+
33
+ it('should import 100 diagrams', function(done) {
34
+
35
+ // this test needs time
36
+ this.timeout(30000);
37
+
38
+ var count = 0;
39
+
40
+ // given
41
+ var modeler = new Modeler({ container: container });
42
+
43
+ modeler.on('import.done', function(event) {
44
+
45
+ console.log('imported #' + count);
46
+
47
+ if (event.error) {
48
+ console.error('ERROR', event.error);
49
+ }
50
+
51
+ if (event.warnings && event.warnings.length) {
52
+ console.warn('WARNINGS', event.warnings );
53
+ }
54
+ });
55
+
56
+ function finish(err) {
57
+ modeler.destroy();
58
+
59
+ done(err);
60
+ }
61
+
62
+ function importNext() {
63
+
64
+ if (count === 100) {
65
+ return finish();
66
+ }
67
+
68
+ var i = count % allDiagrams.length;
69
+
70
+ var xml = allDiagrams[i];
71
+
72
+ // when
73
+ modeler.importXML(xml, function(err) {
74
+
75
+ count++;
76
+
77
+ if (err) {
78
+ return finish(err);
79
+ }
80
+
81
+ delay(importNext);
82
+ });
83
+ }
84
+
85
+ // when
86
+ importNext();
87
+ });
88
+
89
+ });
@@ -107,17 +107,45 @@ describe('Modeler', function() {
107
107
  });
108
108
 
109
109
 
110
+ describe('translate support', function() {
111
+
112
+ var xml = require('../fixtures/bpmn/simple.bpmn');
113
+
114
+ it('should allow translation of multi-lingual strings', function(done) {
115
+
116
+ createModeler(xml, function(err, warnings, modeler) {
117
+
118
+ // given
119
+ var translate = modeler.get('translate');
120
+
121
+ // assume
122
+ expect(translate).to.exist;
123
+
124
+ // when
125
+ var interpolatedString = translate('HELLO {you}!', { you: 'WALT' });
126
+
127
+ // then
128
+ expect(interpolatedString).to.eql('HELLO WALT!');
129
+
130
+ done(err);
131
+ });
132
+
133
+ });
134
+
135
+ });
136
+
137
+
110
138
  describe('overlay support', function() {
111
139
 
112
140
  it('should allow to add overlays', function(done) {
113
141
 
114
142
  var xml = require('../fixtures/bpmn/simple.bpmn');
115
143
 
116
- createModeler(xml, function(err, warnings, viewer) {
144
+ createModeler(xml, function(err, warnings, modeler) {
117
145
 
118
146
  // given
119
- var overlays = viewer.get('overlays'),
120
- elementRegistry = viewer.get('elementRegistry');
147
+ var overlays = modeler.get('overlays'),
148
+ elementRegistry = modeler.get('elementRegistry');
121
149
 
122
150
  // assume
123
151
  expect(overlays).to.exist;
@@ -162,13 +190,13 @@ describe('Modeler', function() {
162
190
 
163
191
  var xml = require('../fixtures/bpmn/simple.bpmn');
164
192
 
165
- createModeler(xml, function(err, warnings, viewer) {
193
+ createModeler(xml, function(err, warnings, modeler) {
166
194
 
167
195
  // given
168
- var bendpointMove = viewer.get('bendpointMove'),
169
- dragging = viewer.get('dragging'),
170
- elementRegistry = viewer.get('elementRegistry'),
171
- canvas = viewer.get('canvas');
196
+ var bendpointMove = modeler.get('bendpointMove'),
197
+ dragging = modeler.get('dragging'),
198
+ elementRegistry = modeler.get('elementRegistry'),
199
+ canvas = modeler.get('canvas');
172
200
 
173
201
  // assume
174
202
  expect(bendpointMove).to.exist;
@@ -216,6 +244,81 @@ describe('Modeler', function() {
216
244
  });
217
245
 
218
246
 
247
+ describe('ids', function() {
248
+
249
+ it('should provide ids with moddle', function() {
250
+
251
+ // given
252
+ var modeler = new Modeler({ container: container });
253
+
254
+ // when
255
+ var moddle = modeler.get('moddle');
256
+
257
+ // then
258
+ expect(moddle.ids).to.exist;
259
+ });
260
+
261
+
262
+ it('should populate ids on import', function(done) {
263
+
264
+ // given
265
+ var xml = require('../fixtures/bpmn/simple.bpmn');
266
+
267
+ var modeler = new Modeler({ container: container });
268
+
269
+ var moddle = modeler.get('moddle');
270
+ var elementRegistry = modeler.get('elementRegistry');
271
+
272
+ // when
273
+ modeler.importXML(xml, function(err) {
274
+
275
+ var subProcess = elementRegistry.get('SubProcess_1').businessObject;
276
+ var bpmnEdge = elementRegistry.get('SequenceFlow_3').businessObject.di;
277
+
278
+ // then
279
+ expect(moddle.ids.assigned('SubProcess_1')).to.eql(subProcess);
280
+ expect(moddle.ids.assigned('BPMNEdge_SequenceFlow_3')).to.eql(bpmnEdge);
281
+
282
+ done();
283
+ });
284
+
285
+ });
286
+
287
+
288
+ it('should clear ids before re-import', function(done) {
289
+
290
+ // given
291
+ var someXML = require('../fixtures/bpmn/simple.bpmn'),
292
+ otherXML = require('../fixtures/bpmn/basic.bpmn');
293
+
294
+ var modeler = new Modeler({ container: container });
295
+
296
+ var moddle = modeler.get('moddle');
297
+ var elementRegistry = modeler.get('elementRegistry');
298
+
299
+ // when
300
+ modeler.importXML(someXML, function() {
301
+
302
+ modeler.importXML(otherXML, function() {
303
+
304
+ var task = elementRegistry.get('Task_1').businessObject;
305
+
306
+ // then
307
+ // not in other.bpmn
308
+ expect(moddle.ids.assigned('SubProcess_1')).to.be.false;
309
+
310
+ // in other.bpmn
311
+ expect(moddle.ids.assigned('Task_1')).to.eql(task);
312
+
313
+ done();
314
+ });
315
+ });
316
+
317
+ });
318
+
319
+ });
320
+
321
+
219
322
  it('should handle errors', function(done) {
220
323
 
221
324
  var xml = 'invalid stuff';
@@ -239,7 +342,7 @@ describe('Modeler', function() {
239
342
 
240
343
  describe('dependency injection', function() {
241
344
 
242
- it('should be available via di as <bpmnjs>', function(done) {
345
+ it('should provide self as <bpmnjs>', function(done) {
243
346
 
244
347
  var xml = require('../fixtures/bpmn/simple.bpmn');
245
348
 
@@ -251,6 +354,49 @@ describe('Modeler', function() {
251
354
  });
252
355
  });
253
356
 
357
+
358
+ it('should allow Diagram#get before import', function() {
359
+
360
+ // when
361
+ var modeler = new Modeler({ container: container });
362
+
363
+ // then
364
+ var eventBus = modeler.get('eventBus');
365
+
366
+ expect(eventBus).to.exist;
367
+ });
368
+
369
+
370
+ it('should keep references to services across re-import', function(done) {
371
+
372
+ // given
373
+ var someXML = require('../fixtures/bpmn/simple.bpmn'),
374
+ otherXML = require('../fixtures/bpmn/basic.bpmn');
375
+
376
+ var modeler = new Modeler({ container: container });
377
+
378
+ var eventBus = modeler.get('eventBus'),
379
+ canvas = modeler.get('canvas');
380
+
381
+ // when
382
+ modeler.importXML(someXML, function() {
383
+
384
+ // then
385
+ expect(modeler.get('canvas')).to.equal(canvas);
386
+ expect(modeler.get('eventBus')).to.equal(eventBus);
387
+
388
+ modeler.importXML(otherXML, function() {
389
+
390
+ // then
391
+ expect(modeler.get('canvas')).to.equal(canvas);
392
+ expect(modeler.get('eventBus')).to.equal(eventBus);
393
+
394
+ done();
395
+ });
396
+ });
397
+
398
+ });
399
+
254
400
  });
255
401
 
256
402
  });