UNPKG

6.38 kBJavaScriptView Raw
1import inherits from 'inherits-browser';
2
3import BaseModeler from './BaseModeler';
4
5import Viewer from './Viewer';
6import NavigatedViewer from './NavigatedViewer';
7
8import KeyboardMoveModule from 'diagram-js/lib/navigation/keyboard-move';
9import MoveCanvasModule from 'diagram-js/lib/navigation/movecanvas';
10import ZoomScrollModule from 'diagram-js/lib/navigation/zoomscroll';
11
12import AlignElementsModule from './features/align-elements';
13import AutoPlaceModule from './features/auto-place';
14import AutoResizeModule from './features/auto-resize';
15import AutoScrollModule from 'diagram-js/lib/features/auto-scroll';
16import BendpointsModule from 'diagram-js/lib/features/bendpoints';
17import ConnectModule from 'diagram-js/lib/features/connect';
18import ConnectionPreviewModule from 'diagram-js/lib/features/connection-preview';
19import ContextPadModule from './features/context-pad';
20import CopyPasteModule from './features/copy-paste';
21import CreateModule from 'diagram-js/lib/features/create';
22import DistributeElementsModule from './features/distribute-elements';
23import EditorActionsModule from './features/editor-actions';
24import GridSnappingModule from './features/grid-snapping';
25import InteractionEventsModule from './features/interaction-events';
26import KeyboardModule from './features/keyboard';
27import KeyboardMoveSelectionModule from 'diagram-js/lib/features/keyboard-move-selection';
28import LabelEditingModule from './features/label-editing';
29import ModelingModule from './features/modeling';
30import ModelingFeedbackModule from './features/modeling-feedback';
31import MoveModule from 'diagram-js/lib/features/move';
32import PaletteModule from './features/palette';
33import ReplacePreviewModule from './features/replace-preview';
34import ResizeModule from 'diagram-js/lib/features/resize';
35import SnappingModule from './features/snapping';
36import SearchModule from './features/search';
37
38var initialDiagram =
39 '<?xml version="1.0" encoding="UTF-8"?>' +
40 '<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
41 'xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" ' +
42 'xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" ' +
43 'xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" ' +
44 'targetNamespace="http://bpmn.io/schema/bpmn" ' +
45 'id="Definitions_1">' +
46 '<bpmn:process id="Process_1" isExecutable="false">' +
47 '<bpmn:startEvent id="StartEvent_1"/>' +
48 '</bpmn:process>' +
49 '<bpmndi:BPMNDiagram id="BPMNDiagram_1">' +
50 '<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">' +
51 '<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">' +
52 '<dc:Bounds height="36.0" width="36.0" x="173.0" y="102.0"/>' +
53 '</bpmndi:BPMNShape>' +
54 '</bpmndi:BPMNPlane>' +
55 '</bpmndi:BPMNDiagram>' +
56 '</bpmn:definitions>';
57
58
59/**
60 * @typedef {import('./BaseViewer').BaseViewerOptions} BaseViewerOptions
61 * @typedef {import('./BaseViewer').ImportXMLResult} ImportXMLResult
62 */
63
64/**
65 * A modeler for BPMN 2.0 diagrams.
66 *
67 *
68 * ## Extending the Modeler
69 *
70 * In order to extend the viewer pass extension modules to bootstrap via the
71 * `additionalModules` option. An extension module is an object that exposes
72 * named services.
73 *
74 * The following example depicts the integration of a simple
75 * logging component that integrates with interaction events:
76 *
77 *
78 * ```javascript
79 *
80 * // logging component
81 * function InteractionLogger(eventBus) {
82 * eventBus.on('element.hover', function(event) {
83 * console.log()
84 * })
85 * }
86 *
87 * InteractionLogger.$inject = [ 'eventBus' ]; // minification save
88 *
89 * // extension module
90 * var extensionModule = {
91 * __init__: [ 'interactionLogger' ],
92 * interactionLogger: [ 'type', InteractionLogger ]
93 * };
94 *
95 * // extend the viewer
96 * var bpmnModeler = new Modeler({ additionalModules: [ extensionModule ] });
97 * bpmnModeler.importXML(...);
98 * ```
99 *
100 *
101 * ## Customizing / Replacing Components
102 *
103 * You can replace individual diagram components by redefining them in override modules.
104 * This works for all components, including those defined in the core.
105 *
106 * Pass in override modules via the `options.additionalModules` flag like this:
107 *
108 * ```javascript
109 * function CustomContextPadProvider(contextPad) {
110 *
111 * contextPad.registerProvider(this);
112 *
113 * this.getContextPadEntries = function(element) {
114 * // no entries, effectively disable the context pad
115 * return {};
116 * };
117 * }
118 *
119 * CustomContextPadProvider.$inject = [ 'contextPad' ];
120 *
121 * var overrideModule = {
122 * contextPadProvider: [ 'type', CustomContextPadProvider ]
123 * };
124 *
125 * var bpmnModeler = new Modeler({ additionalModules: [ overrideModule ]});
126 * ```
127 *
128 * @param {BaseViewerOptions} [options] The options to configure the modeler.
129 */
130export default function Modeler(options) {
131 BaseModeler.call(this, options);
132}
133
134inherits(Modeler, BaseModeler);
135
136
137Modeler.Viewer = Viewer;
138Modeler.NavigatedViewer = NavigatedViewer;
139
140/**
141 * Create a new diagram to start modeling.
142 *
143 * @throws {ImportXMLError} An error thrown during the import of the XML.
144 *
145 * @return {Promise<ImportXMLResult>} A promise resolving with warnings that were produced during the import.
146 */
147Modeler.prototype.createDiagram = function createDiagram() {
148 return this.importXML(initialDiagram);
149};
150
151
152Modeler.prototype._interactionModules = [
153
154 // non-modeling components
155 KeyboardMoveModule,
156 MoveCanvasModule,
157 ZoomScrollModule
158];
159
160Modeler.prototype._modelingModules = [
161
162 // modeling components
163 AlignElementsModule,
164 AutoPlaceModule,
165 AutoScrollModule,
166 AutoResizeModule,
167 BendpointsModule,
168 ConnectModule,
169 ConnectionPreviewModule,
170 ContextPadModule,
171 CopyPasteModule,
172 CreateModule,
173 DistributeElementsModule,
174 EditorActionsModule,
175 GridSnappingModule,
176 InteractionEventsModule,
177 KeyboardModule,
178 KeyboardMoveSelectionModule,
179 LabelEditingModule,
180 ModelingModule,
181 ModelingFeedbackModule,
182 MoveModule,
183 PaletteModule,
184 ReplacePreviewModule,
185 ResizeModule,
186 SnappingModule,
187 SearchModule
188];
189
190
191// modules the modeler is composed of
192//
193// - viewer modules
194// - interaction modules
195// - modeling modules
196
197Modeler.prototype._modules = [].concat(
198 Viewer.prototype._modules,
199 Modeler.prototype._interactionModules,
200 Modeler.prototype._modelingModules
201);