From e2aefda183de4f1c1256d97f7ce09f8bee5477db Mon Sep 17 00:00:00 2001
From: "Christopher Lott (cl778h)"
Date: Tue, 9 May 2017 14:24:20 -0400
Subject: [ONAP-rebase] Rebase as 1.1.0-SNAPSHOT
Consolidate into a single maven project; no more separate model and client jars.
Change-Id: Ibbba982250b74c0dfd09ee1c65c0fb6c158dd632
Signed-off-by: Christopher Lott
Signed-off-by: Christopher Lott (cl778h)
---
.../bower_components/bpmn-js/dist/bpmn-modeler.js | 43358 -------------------
1 file changed, 43358 deletions(-)
delete mode 100644 dcae_dmaapbc_webapp/src/main/webapp/app/fusion/ase/scripts/bower_components/bpmn-js/dist/bpmn-modeler.js
(limited to 'dcae_dmaapbc_webapp/src/main/webapp/app/fusion/ase/scripts/bower_components/bpmn-js/dist/bpmn-modeler.js')
diff --git a/dcae_dmaapbc_webapp/src/main/webapp/app/fusion/ase/scripts/bower_components/bpmn-js/dist/bpmn-modeler.js b/dcae_dmaapbc_webapp/src/main/webapp/app/fusion/ase/scripts/bower_components/bpmn-js/dist/bpmn-modeler.js
deleted file mode 100644
index 85e7f04..0000000
--- a/dcae_dmaapbc_webapp/src/main/webapp/app/fusion/ase/scripts/bower_components/bpmn-js/dist/bpmn-modeler.js
+++ /dev/null
@@ -1,43358 +0,0 @@
-/*!
- * bpmn-js - bpmn-modeler v0.10.3
-
- * Copyright 2014, 2015 camunda Services GmbH and other contributors
- *
- * Released under the bpmn.io license
- * http://bpmn.io/license
- *
- * Source Code: https://github.com/bpmn-io/bpmn-js
- *
- * Date: 2015-05-18
- */
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.BpmnJS=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o' +
- '' +
- '' +
- ' ' +
- ' ' +
- '' +
- '' +
- '' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ';
-
-
-/**
- * A modeler for BPMN 2.0 diagrams.
- *
- *
- * ## Extending the Modeler
- *
- * In order to extend the viewer pass extension modules to bootstrap via the
- * `additionalModules` option. An extension module is an object that exposes
- * named services.
- *
- * The following example depicts the integration of a simple
- * logging component that integrates with interaction events:
- *
- *
- * ```javascript
- *
- * // logging component
- * function InteractionLogger(eventBus) {
- * eventBus.on('element.hover', function(event) {
- * console.log()
- * })
- * }
- *
- * InteractionLogger.$inject = [ 'eventBus' ]; // minification save
- *
- * // extension module
- * var extensionModule = {
- * __init__: [ 'interactionLogger' ],
- * interactionLogger: [ 'type', InteractionLogger ]
- * };
- *
- * // extend the viewer
- * var bpmnModeler = new Modeler({ additionalModules: [ extensionModule ] });
- * bpmnModeler.importXML(...);
- * ```
- *
- *
- * ## Customizing / Replacing Components
- *
- * You can replace individual diagram components by redefining them in override modules.
- * This works for all components, including those defined in the core.
- *
- * Pass in override modules via the `options.additionalModules` flag like this:
- *
- * ```javascript
- * function CustomContextPadProvider(contextPad) {
- *
- * contextPad.registerProvider(this);
- *
- * this.getContextPadEntries = function(element) {
- * // no entries, effectively disable the context pad
- * return {};
- * };
- * }
- *
- * CustomContextPadProvider.$inject = [ 'contextPad' ];
- *
- * var overrideModule = {
- * contextPadProvider: [ 'type', CustomContextPadProvider ]
- * };
- *
- * var bpmnModeler = new Modeler({ additionalModules: [ overrideModule ]});
- * ```
- *
- * @param {Object} [options] configuration options to pass to the viewer
- * @param {DOMElement} [options.container] the container to render the viewer in, defaults to body.
- * @param {String|Number} [options.width] the width of the viewer
- * @param {String|Number} [options.height] the height of the viewer
- * @param {Object} [options.moddleExtensions] extension packages to provide
- * @param {Array} [options.modules] a list of modules to override the default modules
- * @param {Array} [options.additionalModules] a list of modules to use with the default modules
- */
-function Modeler(options) {
- Viewer.call(this, options);
-}
-
-inherits(Modeler, Viewer);
-
-Modeler.prototype.createDiagram = function(done) {
- return this.importXML(initialDiagram, done);
-};
-
-Modeler.prototype.createModdle = function() {
- var moddle = Viewer.prototype.createModdle.call(this);
-
- IdSupport.extend(moddle, new Ids([ 32, 36, 1 ]));
-
- return moddle;
-};
-
-
-Modeler.prototype._interactionModules = [
- // non-modeling components
- _dereq_(14),
- _dereq_(173),
- _dereq_(170),
- _dereq_(171)
-];
-
-Modeler.prototype._modelingModules = [
- // modeling components
- _dereq_(131),
- _dereq_(91),
- _dereq_(144),
- _dereq_(158),
- _dereq_(107),
- _dereq_(10),
- _dereq_(39),
- _dereq_(30),
- _dereq_(8),
- _dereq_(34)
-];
-
-
-// modules the modeler is composed of
-//
-// - viewer modules
-// - interaction modules
-// - modeling modules
-
-Modeler.prototype._modules = [].concat(
- Modeler.prototype._modules,
- Modeler.prototype._interactionModules,
- Modeler.prototype._modelingModules);
-
-
-module.exports = Modeler;
-
-},{"10":10,"107":107,"131":131,"14":14,"144":144,"158":158,"170":170,"171":171,"173":173,"193":193,"195":195,"2":2,"30":30,"34":34,"39":39,"50":50,"8":8,"91":91}],2:[function(_dereq_,module,exports){
-'use strict';
-
-var assign = _dereq_(325),
- omit = _dereq_(329),
- isString = _dereq_(322),
- isNumber = _dereq_(319);
-
-var domify = _dereq_(343),
- domQuery = _dereq_(346),
- domRemove = _dereq_(347);
-
-var Diagram = _dereq_(73),
- BpmnModdle = _dereq_(48);
-
-var Importer = _dereq_(42);
-
-
-function initListeners(diagram, listeners) {
- var events = diagram.get('eventBus');
-
- listeners.forEach(function(l) {
- events.on(l.event, l.handler);
- });
-}
-
-function checkValidationError(err) {
-
- // check if we can help the user by indicating wrong BPMN 2.0 xml
- // (in case he or the exporting tool did not get that right)
-
- var pattern = /unparsable content <([^>]+)> detected([\s\S]*)$/;
- var match = pattern.exec(err.message);
-
- if (match) {
- err.message =
- 'unparsable content <' + match[1] + '> detected; ' +
- 'this may indicate an invalid BPMN 2.0 diagram file' + match[2];
- }
-
- return err;
-}
-
-var DEFAULT_OPTIONS = {
- width: '100%',
- height: '100%',
- position: 'relative',
- container: 'body'
-};
-
-
-/**
- * Ensure the passed argument is a proper unit (defaulting to px)
- */
-function ensureUnit(val) {
- return val + (isNumber(val) ? 'px' : '');
-}
-
-/**
- * A viewer for BPMN 2.0 diagrams.
- *
- * Have a look at {@link NavigatedViewer} or {@link Modeler} for bundles that include
- * additional features.
- *
- *
- * ## Extending the Viewer
- *
- * In order to extend the viewer pass extension modules to bootstrap via the
- * `additionalModules` option. An extension module is an object that exposes
- * named services.
- *
- * The following example depicts the integration of a simple
- * logging component that integrates with interaction events:
- *
- *
- * ```javascript
- *
- * // logging component
- * function InteractionLogger(eventBus) {
- * eventBus.on('element.hover', function(event) {
- * console.log()
- * })
- * }
- *
- * InteractionLogger.$inject = [ 'eventBus' ]; // minification save
- *
- * // extension module
- * var extensionModule = {
- * __init__: [ 'interactionLogger' ],
- * interactionLogger: [ 'type', InteractionLogger ]
- * };
- *
- * // extend the viewer
- * var bpmnViewer = new Viewer({ additionalModules: [ extensionModule ] });
- * bpmnViewer.importXML(...);
- * ```
- *
- * @param {Object} [options] configuration options to pass to the viewer
- * @param {DOMElement} [options.container] the container to render the viewer in, defaults to body.
- * @param {String|Number} [options.width] the width of the viewer
- * @param {String|Number} [options.height] the height of the viewer
- * @param {Object} [options.moddleExtensions] extension packages to provide
- * @param {Array} [options.modules] a list of modules to override the default modules
- * @param {Array} [options.additionalModules] a list of modules to use with the default modules
- */
-function Viewer(options) {
-
- this.options = options = assign({}, DEFAULT_OPTIONS, options || {});
-
- var parent = options.container;
-
- // support jquery element
- // unwrap it if passed
- if (parent.get) {
- parent = parent.get(0);
- }
-
- // support selector
- if (isString(parent)) {
- parent = domQuery(parent);
- }
-
- var container = this.container = domify('
');
- parent.appendChild(container);
-
- assign(container.style, {
- width: ensureUnit(options.width),
- height: ensureUnit(options.height),
- position: options.position
- });
-
- /**
- * The code in the area
- * must not be changed, see http://bpmn.io/license for more information
- *
- *
- */
-
- /* jshint -W101 */
-
- // inlined ../resources/bpmnjs.png
- var logoData = 'iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAMAAADypuvZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBQTFRFiMte9PrwldFwfcZPqtqN0+zEyOe1XLgjvuKncsJAZ70y6fXh3vDT////UrQV////G2zN+AAAABB0Uk5T////////////////////AOAjXRkAAAHDSURBVHjavJZJkoUgDEBJmAX8979tM8u3E6x20VlYJfFFMoL4vBDxATxZcakIOJTWSmxvKWVIkJ8jHvlRv1F2LFrVISCZI+tCtQx+XfewgVTfyY3plPiQEAzI3zWy+kR6NBhFBYeBuscJLOUuA2WVLpCjVIaFzrNQZArxAZKUQm6gsj37L9Cb7dnIBUKxENaaMJQqMpDXvSL+ktxdGRm2IsKgJGGPg7atwUG5CcFUEuSv+CwQqizTrvDTNXdMU2bMiDWZd8d7QIySWVRsb2vBBioxOFt4OinPBapL+neAb5KL5IJ8szOza2/DYoipUCx+CjO0Bpsv0V6mktNZ+k8rlABlWG0FrOpKYVo8DT3dBeLEjUBAj7moDogVii7nSS9QzZnFcOVBp1g2PyBQ3Vr5aIapN91VJy33HTJLC1iX2FY6F8gRdaAeIEfVONgtFCzZTmoLEdOjBDfsIOA6128gw3eu1shAajdZNAORxuQDJN5A5PbEG6gNIu24QJD5iNyRMZIr6bsHbCtCU/OaOaSvgkUyDMdDa1BXGf5HJ1To+/Ym6mCKT02Y+/Sa126ZKyd3jxhzpc1r8zVL6YM1Qy/kR4ABAFJ6iQUnivhAAAAAAElFTkSuQmCC';
-
- /* jshint +W101 */
-
- var linkMarkup =
- '' +
- ' ' +
- ' ';
-
- container.appendChild(domify(linkMarkup));
-
- /* */
-}
-
-Viewer.prototype.importXML = function(xml, done) {
-
- var self = this;
-
- this.moddle = this.createModdle();
-
- this.moddle.fromXML(xml, 'bpmn:Definitions', function(err, definitions, context) {
-
- if (err) {
- err = checkValidationError(err);
- return done(err);
- }
-
- var parseWarnings = context.warnings;
-
- self.importDefinitions(definitions, function(err, importWarnings) {
- if (err) {
- return done(err);
- }
-
- done(null, parseWarnings.concat(importWarnings || []));
- });
- });
-};
-
-Viewer.prototype.saveXML = function(options, done) {
-
- if (!done) {
- done = options;
- options = {};
- }
-
- var definitions = this.definitions;
-
- if (!definitions) {
- return done(new Error('no definitions loaded'));
- }
-
- this.moddle.toXML(definitions, options, done);
-};
-
-Viewer.prototype.createModdle = function() {
- return new BpmnModdle(this.options.moddleExtensions);
-};
-
-Viewer.prototype.saveSVG = function(options, done) {
-
- if (!done) {
- done = options;
- options = {};
- }
-
- var canvas = this.get('canvas');
-
- var contentNode = canvas.getDefaultLayer(),
- defsNode = canvas._svg.select('defs');
-
- var contents = contentNode.innerSVG(),
- defs = (defsNode && defsNode.outerSVG()) || '';
-
- var bbox = contentNode.getBBox();
-
- var svg =
- '\n' +
- '\n' +
- '\n' +
- '' +
- defs + contents +
- ' ';
-
- done(null, svg);
-};
-
-Viewer.prototype.get = function(name) {
-
- if (!this.diagram) {
- throw new Error('no diagram loaded');
- }
-
- return this.diagram.get(name);
-};
-
-Viewer.prototype.invoke = function(fn) {
-
- if (!this.diagram) {
- throw new Error('no diagram loaded');
- }
-
- return this.diagram.invoke(fn);
-};
-
-Viewer.prototype.importDefinitions = function(definitions, done) {
-
- // use try/catch to not swallow synchronous exceptions
- // that may be raised during model parsing
- try {
- if (this.diagram) {
- this.clear();
- }
-
- this.definitions = definitions;
-
- var diagram = this.diagram = this._createDiagram(this.options);
-
- this._init(diagram);
-
- Importer.importBpmnDiagram(diagram, definitions, done);
- } catch (e) {
- done(e);
- }
-};
-
-Viewer.prototype._init = function(diagram) {
- initListeners(diagram, this.__listeners || []);
-};
-
-Viewer.prototype._createDiagram = function(options) {
-
- var modules = [].concat(options.modules || this.getModules(), options.additionalModules || []);
-
- // add self as an available service
- modules.unshift({
- bpmnjs: [ 'value', this ],
- moddle: [ 'value', this.moddle ]
- });
-
- options = omit(options, 'additionalModules');
-
- options = assign(options, {
- canvas: { container: this.container },
- modules: modules
- });
-
- return new Diagram(options);
-};
-
-
-Viewer.prototype.getModules = function() {
- return this._modules;
-};
-
-/**
- * Remove all drawn elements from the viewer.
- *
- * After calling this method the viewer can still
- * be reused for opening another diagram.
- */
-Viewer.prototype.clear = function() {
- var diagram = this.diagram;
-
- if (diagram) {
- diagram.destroy();
- }
-};
-
-/**
- * Destroy the viewer instance and remove all its remainders
- * from the document tree.
- */
-Viewer.prototype.destroy = function() {
- // clear underlying diagram
- this.clear();
-
- // remove container
- domRemove(this.container);
-};
-
-/**
- * Register an event listener on the viewer
- *
- * @param {String} event
- * @param {Function} handler
- */
-Viewer.prototype.on = function(event, handler) {
- var diagram = this.diagram,
- listeners = this.__listeners = this.__listeners || [];
-
- listeners.push({ event: event, handler: handler });
-
- if (diagram) {
- diagram.get('eventBus').on(event, handler);
- }
-};
-
-// modules the viewer is composed of
-Viewer.prototype._modules = [
- _dereq_(3),
- _dereq_(151),
- _dereq_(135)
-];
-
-module.exports = Viewer;
-
-},{"135":135,"151":151,"3":3,"319":319,"322":322,"325":325,"329":329,"343":343,"346":346,"347":347,"42":42,"48":48,"73":73}],3:[function(_dereq_,module,exports){
-module.exports = {
- __depends__: [
- _dereq_(6),
- _dereq_(44)
- ]
-};
-},{"44":44,"6":6}],4:[function(_dereq_,module,exports){
-'use strict';
-
-var inherits = _dereq_(195),
- isArray = _dereq_(316),
- isObject = _dereq_(320),
- assign = _dereq_(325),
- forEach = _dereq_(204),
- every = _dereq_(201),
- includes = _dereq_(206),
- some = _dereq_(210);
-
-var DefaultRenderer = _dereq_(84),
- TextUtil = _dereq_(184),
- DiUtil = _dereq_(45);
-
-var createLine = DefaultRenderer.createLine;
-
-
-function BpmnRenderer(events, styles, pathMap) {
-
- DefaultRenderer.call(this, styles);
-
- var TASK_BORDER_RADIUS = 10;
- var INNER_OUTER_DIST = 3;
-
- var LABEL_STYLE = {
- fontFamily: 'Arial, sans-serif',
- fontSize: '12px'
- };
-
- var textUtil = new TextUtil({
- style: LABEL_STYLE,
- size: { width: 100 }
- });
-
- var markers = {};
-
- function addMarker(id, element) {
- markers[id] = element;
- }
-
- function marker(id) {
- return markers[id];
- }
-
- function initMarkers(svg) {
-
- function createMarker(id, options) {
- var attrs = assign({
- fill: 'black',
- strokeWidth: 1,
- strokeLinecap: 'round',
- strokeDasharray: 'none'
- }, options.attrs);
-
- var ref = options.ref || { x: 0, y: 0 };
-
- var scale = options.scale || 1;
-
- // fix for safari / chrome / firefox bug not correctly
- // resetting stroke dash array
- if (attrs.strokeDasharray === 'none') {
- attrs.strokeDasharray = [10000, 1];
- }
-
- var marker = options.element
- .attr(attrs)
- .marker(0, 0, 20, 20, ref.x, ref.y)
- .attr({
- markerWidth: 20 * scale,
- markerHeight: 20 * scale
- });
-
- return addMarker(id, marker);
- }
-
-
- createMarker('sequenceflow-end', {
- element: svg.path('M 1 5 L 11 10 L 1 15 Z'),
- ref: { x: 11, y: 10 },
- scale: 0.5
- });
-
- createMarker('messageflow-start', {
- element: svg.circle(6, 6, 3.5),
- attrs: {
- fill: 'white',
- stroke: 'black'
- },
- ref: { x: 6, y: 6 }
- });
-
- createMarker('messageflow-end', {
- element: svg.path('m 1 5 l 0 -3 l 7 3 l -7 3 z'),
- attrs: {
- fill: 'white',
- stroke: 'black',
- strokeLinecap: 'butt'
- },
- ref: { x: 8.5, y: 5 }
- });
-
- createMarker('data-association-end', {
- element: svg.path('M 1 5 L 11 10 L 1 15'),
- attrs: {
- fill: 'white',
- stroke: 'black'
- },
- ref: { x: 11, y: 10 },
- scale: 0.5
- });
-
- createMarker('conditional-flow-marker', {
- element: svg.path('M 0 10 L 8 6 L 16 10 L 8 14 Z'),
- attrs: {
- fill: 'white',
- stroke: 'black'
- },
- ref: { x: -1, y: 10 },
- scale: 0.5
- });
-
- createMarker('conditional-default-flow-marker', {
- element: svg.path('M 1 4 L 5 16'),
- attrs: {
- stroke: 'black'
- },
- ref: { x: -5, y: 10 },
- scale: 0.5
- });
- }
-
- function computeStyle(custom, traits, defaultStyles) {
- if (!isArray(traits)) {
- defaultStyles = traits;
- traits = [];
- }
-
- return styles.style(traits || [], assign(defaultStyles, custom || {}));
- }
-
- function drawCircle(p, width, height, offset, attrs) {
-
- if (isObject(offset)) {
- attrs = offset;
- offset = 0;
- }
-
- offset = offset || 0;
-
- attrs = computeStyle(attrs, {
- stroke: 'black',
- strokeWidth: 2,
- fill: 'white'
- });
-
- var cx = width / 2,
- cy = height / 2;
-
- return p.circle(cx, cy, Math.round((width + height) / 4 - offset)).attr(attrs);
- }
-
- function drawRect(p, width, height, r, offset, attrs) {
-
- if (isObject(offset)) {
- attrs = offset;
- offset = 0;
- }
-
- offset = offset || 0;
-
- attrs = computeStyle(attrs, {
- stroke: 'black',
- strokeWidth: 2,
- fill: 'white'
- });
-
- return p.rect(offset, offset, width - offset * 2, height - offset * 2, r).attr(attrs);
- }
-
- function drawDiamond(p, width, height, attrs) {
-
- var x_2 = width / 2;
- var y_2 = height / 2;
-
- var points = [x_2, 0, width, y_2, x_2, height, 0, y_2 ];
-
- attrs = computeStyle(attrs, {
- stroke: 'black',
- strokeWidth: 2,
- fill: 'white'
- });
-
- return p.polygon(points).attr(attrs);
- }
-
- function drawLine(p, waypoints, attrs) {
- attrs = computeStyle(attrs, [ 'no-fill' ], {
- stroke: 'black',
- strokeWidth: 2,
- fill: 'none'
- });
-
- return createLine(waypoints, attrs).appendTo(p);
- }
-
- function drawPath(p, d, attrs) {
-
- attrs = computeStyle(attrs, [ 'no-fill' ], {
- strokeWidth: 2,
- stroke: 'black'
- });
-
- return p.path(d).attr(attrs);
- }
-
- function as(type) {
- return function(p, element) {
- return handlers[type](p, element);
- };
- }
-
- function renderer(type) {
- return handlers[type];
- }
-
- function renderEventContent(element, p) {
-
- var event = getSemantic(element);
- var isThrowing = isThrowEvent(event);
-
- if (isTypedEvent(event, 'bpmn:MessageEventDefinition')) {
- return renderer('bpmn:MessageEventDefinition')(p, element, isThrowing);
- }
-
- if (isTypedEvent(event, 'bpmn:TimerEventDefinition')) {
- return renderer('bpmn:TimerEventDefinition')(p, element, isThrowing);
- }
-
- if (isTypedEvent(event, 'bpmn:ConditionalEventDefinition')) {
- return renderer('bpmn:ConditionalEventDefinition')(p, element);
- }
-
- if (isTypedEvent(event, 'bpmn:SignalEventDefinition')) {
- return renderer('bpmn:SignalEventDefinition')(p, element, isThrowing);
- }
-
- if (isTypedEvent(event, 'bpmn:CancelEventDefinition') &&
- isTypedEvent(event, 'bpmn:TerminateEventDefinition', { parallelMultiple: false })) {
- return renderer('bpmn:MultipleEventDefinition')(p, element, isThrowing);
- }
-
- if (isTypedEvent(event, 'bpmn:CancelEventDefinition') &&
- isTypedEvent(event, 'bpmn:TerminateEventDefinition', { parallelMultiple: true })) {
- return renderer('bpmn:ParallelMultipleEventDefinition')(p, element, isThrowing);
- }
-
- if (isTypedEvent(event, 'bpmn:EscalationEventDefinition')) {
- return renderer('bpmn:EscalationEventDefinition')(p, element, isThrowing);
- }
-
- if (isTypedEvent(event, 'bpmn:LinkEventDefinition')) {
- return renderer('bpmn:LinkEventDefinition')(p, element, isThrowing);
- }
-
- if (isTypedEvent(event, 'bpmn:ErrorEventDefinition')) {
- return renderer('bpmn:ErrorEventDefinition')(p, element, isThrowing);
- }
-
- if (isTypedEvent(event, 'bpmn:CancelEventDefinition')) {
- return renderer('bpmn:CancelEventDefinition')(p, element, isThrowing);
- }
-
- if (isTypedEvent(event, 'bpmn:CompensateEventDefinition')) {
- return renderer('bpmn:CompensateEventDefinition')(p, element, isThrowing);
- }
-
- if (isTypedEvent(event, 'bpmn:TerminateEventDefinition')) {
- return renderer('bpmn:TerminateEventDefinition')(p, element, isThrowing);
- }
-
- return null;
- }
-
- function renderLabel(p, label, options) {
- return textUtil.createText(p, label || '', options).addClass('djs-label');
- }
-
- function renderEmbeddedLabel(p, element, align) {
- var semantic = getSemantic(element);
- return renderLabel(p, semantic.name, { box: element, align: align, padding: 5 });
- }
-
- function renderExternalLabel(p, element, align) {
- var semantic = getSemantic(element);
-
- if (!semantic.name) {
- element.hidden = true;
- }
-
- return renderLabel(p, semantic.name, { box: element, align: align, style: { fontSize: '11px' } });
- }
-
- function renderLaneLabel(p, text, element) {
- var textBox = renderLabel(p, text, {
- box: { height: 30, width: element.height },
- align: 'center-middle'
- });
-
- var top = -1 * element.height;
- textBox.transform(
- 'rotate(270) ' +
- 'translate(' + top + ',' + 0 + ')'
- );
- }
-
- function createPathFromConnection(connection) {
- var waypoints = connection.waypoints;
-
- var pathData = 'm ' + waypoints[0].x + ',' + waypoints[0].y;
- for (var i = 1; i < waypoints.length; i++) {
- pathData += 'L' + waypoints[i].x + ',' + waypoints[i].y + ' ';
- }
- return pathData;
- }
-
- var handlers = {
- 'bpmn:Event': function(p, element, attrs) {
- return drawCircle(p, element.width, element.height, attrs);
- },
- 'bpmn:StartEvent': function(p, element) {
- var attrs = {};
- var semantic = getSemantic(element);
-
- if (!semantic.isInterrupting) {
- attrs = {
- strokeDasharray: '6',
- strokeLinecap: 'round'
- };
- }
-
- var circle = renderer('bpmn:Event')(p, element, attrs);
-
- renderEventContent(element, p);
-
- return circle;
- },
- 'bpmn:MessageEventDefinition': function(p, element, isThrowing) {
- var pathData = pathMap.getScaledPath('EVENT_MESSAGE', {
- xScaleFactor: 0.9,
- yScaleFactor: 0.9,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: 0.235,
- my: 0.315
- }
- });
-
- var fill = isThrowing ? 'black' : 'white';
- var stroke = isThrowing ? 'white' : 'black';
-
- var messagePath = drawPath(p, pathData, {
- strokeWidth: 1,
- fill: fill,
- stroke: stroke
- });
-
- return messagePath;
- },
- 'bpmn:TimerEventDefinition': function(p, element) {
-
- var circle = drawCircle(p, element.width, element.height, 0.2 * element.height, {
- strokeWidth: 2
- });
-
- var pathData = pathMap.getScaledPath('EVENT_TIMER_WH', {
- xScaleFactor: 0.75,
- yScaleFactor: 0.75,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: 0.5,
- my: 0.5
- }
- });
-
- drawPath(p, pathData, {
- strokeWidth: 2,
- strokeLinecap: 'square'
- });
-
- for(var i = 0;i < 12;i++) {
-
- var linePathData = pathMap.getScaledPath('EVENT_TIMER_LINE', {
- xScaleFactor: 0.75,
- yScaleFactor: 0.75,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: 0.5,
- my: 0.5
- }
- });
-
- var width = element.width / 2;
- var height = element.height / 2;
-
- drawPath(p, linePathData, {
- strokeWidth: 1,
- strokeLinecap: 'square',
- transform: 'rotate(' + (i * 30) + ',' + height + ',' + width + ')'
- });
- }
-
- return circle;
- },
- 'bpmn:EscalationEventDefinition': function(p, event, isThrowing) {
- var pathData = pathMap.getScaledPath('EVENT_ESCALATION', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: event.width,
- containerHeight: event.height,
- position: {
- mx: 0.5,
- my: 0.555
- }
- });
-
- var fill = isThrowing ? 'black' : 'none';
-
- return drawPath(p, pathData, {
- strokeWidth: 1,
- fill: fill
- });
- },
- 'bpmn:ConditionalEventDefinition': function(p, event) {
- var pathData = pathMap.getScaledPath('EVENT_CONDITIONAL', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: event.width,
- containerHeight: event.height,
- position: {
- mx: 0.5,
- my: 0.222
- }
- });
-
- return drawPath(p, pathData, {
- strokeWidth: 1
- });
- },
- 'bpmn:LinkEventDefinition': function(p, event, isThrowing) {
- var pathData = pathMap.getScaledPath('EVENT_LINK', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: event.width,
- containerHeight: event.height,
- position: {
- mx: 0.57,
- my: 0.263
- }
- });
-
- var fill = isThrowing ? 'black' : 'none';
-
- return drawPath(p, pathData, {
- strokeWidth: 1,
- fill: fill
- });
- },
- 'bpmn:ErrorEventDefinition': function(p, event, isThrowing) {
- var pathData = pathMap.getScaledPath('EVENT_ERROR', {
- xScaleFactor: 1.1,
- yScaleFactor: 1.1,
- containerWidth: event.width,
- containerHeight: event.height,
- position: {
- mx: 0.2,
- my: 0.722
- }
- });
-
- var fill = isThrowing ? 'black' : 'none';
-
- return drawPath(p, pathData, {
- strokeWidth: 1,
- fill: fill
- });
- },
- 'bpmn:CancelEventDefinition': function(p, event, isThrowing) {
- var pathData = pathMap.getScaledPath('EVENT_CANCEL_45', {
- xScaleFactor: 1.0,
- yScaleFactor: 1.0,
- containerWidth: event.width,
- containerHeight: event.height,
- position: {
- mx: 0.638,
- my: -0.055
- }
- });
-
- var fill = isThrowing ? 'black' : 'none';
-
- return drawPath(p, pathData, {
- strokeWidth: 1,
- fill: fill
- }).transform('rotate(45)');
- },
- 'bpmn:CompensateEventDefinition': function(p, event, isThrowing) {
- var pathData = pathMap.getScaledPath('EVENT_COMPENSATION', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: event.width,
- containerHeight: event.height,
- position: {
- mx: 0.201,
- my: 0.472
- }
- });
-
- var fill = isThrowing ? 'black' : 'none';
-
- return drawPath(p, pathData, {
- strokeWidth: 1,
- fill: fill
- });
- },
- 'bpmn:SignalEventDefinition': function(p, event, isThrowing) {
- var pathData = pathMap.getScaledPath('EVENT_SIGNAL', {
- xScaleFactor: 0.9,
- yScaleFactor: 0.9,
- containerWidth: event.width,
- containerHeight: event.height,
- position: {
- mx: 0.5,
- my: 0.2
- }
- });
-
- var fill = isThrowing ? 'black' : 'none';
-
- return drawPath(p, pathData, {
- strokeWidth: 1,
- fill: fill
- });
- },
- 'bpmn:MultipleEventDefinition': function(p, event, isThrowing) {
- var pathData = pathMap.getScaledPath('EVENT_MULTIPLE', {
- xScaleFactor: 1.1,
- yScaleFactor: 1.1,
- containerWidth: event.width,
- containerHeight: event.height,
- position: {
- mx: 0.222,
- my: 0.36
- }
- });
-
- var fill = isThrowing ? 'black' : 'none';
-
- return drawPath(p, pathData, {
- strokeWidth: 1,
- fill: fill
- });
- },
- 'bpmn:ParallelMultipleEventDefinition': function(p, event) {
- var pathData = pathMap.getScaledPath('EVENT_PARALLEL_MULTIPLE', {
- xScaleFactor: 1.2,
- yScaleFactor: 1.2,
- containerWidth: event.width,
- containerHeight: event.height,
- position: {
- mx: 0.458,
- my: 0.194
- }
- });
-
- return drawPath(p, pathData, {
- strokeWidth: 1
- });
- },
- 'bpmn:EndEvent': function(p, element) {
- var circle = renderer('bpmn:Event')(p, element, {
- strokeWidth: 4
- });
-
- renderEventContent(element, p, true);
-
- return circle;
- },
- 'bpmn:TerminateEventDefinition': function(p, element) {
- var circle = drawCircle(p, element.width, element.height, 8, {
- strokeWidth: 4,
- fill: 'black'
- });
-
- return circle;
- },
- 'bpmn:IntermediateEvent': function(p, element) {
- var outer = renderer('bpmn:Event')(p, element, { strokeWidth: 1 });
- /* inner */ drawCircle(p, element.width, element.height, INNER_OUTER_DIST, { strokeWidth: 1, fill: 'none' });
-
- renderEventContent(element, p);
-
- return outer;
- },
- 'bpmn:IntermediateCatchEvent': as('bpmn:IntermediateEvent'),
- 'bpmn:IntermediateThrowEvent': as('bpmn:IntermediateEvent'),
-
- 'bpmn:Activity': function(p, element, attrs) {
- return drawRect(p, element.width, element.height, TASK_BORDER_RADIUS, attrs);
- },
-
- 'bpmn:Task': function(p, element, attrs) {
- var rect = renderer('bpmn:Activity')(p, element, attrs);
- renderEmbeddedLabel(p, element, 'center-middle');
- attachTaskMarkers(p, element);
- return rect;
- },
- 'bpmn:ServiceTask': function(p, element) {
- var task = renderer('bpmn:Task')(p, element);
-
- var pathDataBG = pathMap.getScaledPath('TASK_TYPE_SERVICE', {
- abspos: {
- x: 12,
- y: 18
- }
- });
-
- /* service bg */ drawPath(p, pathDataBG, {
- strokeWidth: 1,
- fill: 'none'
- });
-
- var fillPathData = pathMap.getScaledPath('TASK_TYPE_SERVICE_FILL', {
- abspos: {
- x: 17.2,
- y: 18
- }
- });
-
- /* service fill */ drawPath(p, fillPathData, {
- strokeWidth: 0,
- stroke: 'none',
- fill: 'white'
- });
-
- var pathData = pathMap.getScaledPath('TASK_TYPE_SERVICE', {
- abspos: {
- x: 17,
- y: 22
- }
- });
-
- /* service */ drawPath(p, pathData, {
- strokeWidth: 1,
- fill: 'white'
- });
-
- return task;
- },
- 'bpmn:UserTask': function(p, element) {
- var task = renderer('bpmn:Task')(p, element);
-
- var x = 15;
- var y = 12;
-
- var pathData = pathMap.getScaledPath('TASK_TYPE_USER_1', {
- abspos: {
- x: x,
- y: y
- }
- });
-
- /* user path */ drawPath(p, pathData, {
- strokeWidth: 0.5,
- fill: 'none'
- });
-
- var pathData2 = pathMap.getScaledPath('TASK_TYPE_USER_2', {
- abspos: {
- x: x,
- y: y
- }
- });
-
- /* user2 path */ drawPath(p, pathData2, {
- strokeWidth: 0.5,
- fill: 'none'
- });
-
- var pathData3 = pathMap.getScaledPath('TASK_TYPE_USER_3', {
- abspos: {
- x: x,
- y: y
- }
- });
-
- /* user3 path */ drawPath(p, pathData3, {
- strokeWidth: 0.5,
- fill: 'black'
- });
-
- return task;
- },
- 'bpmn:ManualTask': function(p, element) {
- var task = renderer('bpmn:Task')(p, element);
-
- var pathData = pathMap.getScaledPath('TASK_TYPE_MANUAL', {
- abspos: {
- x: 17,
- y: 15
- }
- });
-
- /* manual path */ drawPath(p, pathData, {
- strokeWidth: 0.25,
- fill: 'white',
- stroke: 'black'
- });
-
- return task;
- },
- 'bpmn:SendTask': function(p, element) {
- var task = renderer('bpmn:Task')(p, element);
-
- var pathData = pathMap.getScaledPath('TASK_TYPE_SEND', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: 21,
- containerHeight: 14,
- position: {
- mx: 0.285,
- my: 0.357
- }
- });
-
- /* send path */ drawPath(p, pathData, {
- strokeWidth: 1,
- fill: 'black',
- stroke: 'white'
- });
-
- return task;
- },
- 'bpmn:ReceiveTask' : function(p, element) {
- var semantic = getSemantic(element);
-
- var task = renderer('bpmn:Task')(p, element);
- var pathData;
-
- if (semantic.instantiate) {
- drawCircle(p, 28, 28, 20 * 0.22, { strokeWidth: 1 });
-
- pathData = pathMap.getScaledPath('TASK_TYPE_INSTANTIATING_SEND', {
- abspos: {
- x: 7.77,
- y: 9.52
- }
- });
- } else {
-
- pathData = pathMap.getScaledPath('TASK_TYPE_SEND', {
- xScaleFactor: 0.9,
- yScaleFactor: 0.9,
- containerWidth: 21,
- containerHeight: 14,
- position: {
- mx: 0.3,
- my: 0.4
- }
- });
- }
-
- /* receive path */ drawPath(p, pathData, {
- strokeWidth: 1
- });
-
- return task;
- },
- 'bpmn:ScriptTask': function(p, element) {
- var task = renderer('bpmn:Task')(p, element);
-
- var pathData = pathMap.getScaledPath('TASK_TYPE_SCRIPT', {
- abspos: {
- x: 15,
- y: 20
- }
- });
-
- /* script path */ drawPath(p, pathData, {
- strokeWidth: 1
- });
-
- return task;
- },
- 'bpmn:BusinessRuleTask': function(p, element) {
- var task = renderer('bpmn:Task')(p, element);
-
- var headerPathData = pathMap.getScaledPath('TASK_TYPE_BUSINESS_RULE_HEADER', {
- abspos: {
- x: 8,
- y: 8
- }
- });
-
- var businessHeaderPath = drawPath(p, headerPathData);
- businessHeaderPath.attr({
- strokeWidth: 1,
- fill: 'AAA'
- });
-
- var headerData = pathMap.getScaledPath('TASK_TYPE_BUSINESS_RULE_MAIN', {
- abspos: {
- x: 8,
- y: 8
- }
- });
-
- var businessPath = drawPath(p, headerData);
- businessPath.attr({
- strokeWidth: 1
- });
-
- return task;
- },
- 'bpmn:SubProcess': function(p, element, attrs) {
- var rect = renderer('bpmn:Activity')(p, element, attrs);
-
- var semantic = getSemantic(element);
-
- var expanded = DiUtil.isExpanded(semantic);
-
- var isEventSubProcess = !!semantic.triggeredByEvent;
- if (isEventSubProcess) {
- rect.attr({
- strokeDasharray: '1,2'
- });
- }
-
- renderEmbeddedLabel(p, element, expanded ? 'center-top' : 'center-middle');
-
- if (expanded) {
- attachTaskMarkers(p, element);
- } else {
- attachTaskMarkers(p, element, ['SubProcessMarker']);
- }
-
- return rect;
- },
- 'bpmn:AdHocSubProcess': function(p, element) {
- return renderer('bpmn:SubProcess')(p, element);
- },
- 'bpmn:Transaction': function(p, element) {
- var outer = renderer('bpmn:SubProcess')(p, element);
-
- var innerAttrs = styles.style([ 'no-fill', 'no-events' ]);
-
- /* inner path */ drawRect(p, element.width, element.height, TASK_BORDER_RADIUS - 2, INNER_OUTER_DIST, innerAttrs);
-
- return outer;
- },
- 'bpmn:CallActivity': function(p, element) {
- return renderer('bpmn:Task')(p, element, {
- strokeWidth: 5
- });
- },
- 'bpmn:Participant': function(p, element) {
-
- var lane = renderer('bpmn:Lane')(p, element, {
- fill: 'White'
- });
-
- var expandedPool = DiUtil.isExpanded(element);
-
- if (expandedPool) {
- drawLine(p, [
- { x: 30, y: 0 },
- { x: 30, y: element.height }
- ]);
- var text = getSemantic(element).name;
- renderLaneLabel(p, text, element);
- } else {
- // Collapsed pool draw text inline
- var text2 = getSemantic(element).name;
- renderLabel(p, text2, { box: element, align: 'center-middle' });
- }
-
- var participantMultiplicity = !!(getSemantic(element).participantMultiplicity);
-
- if(participantMultiplicity) {
- renderer('ParticipantMultiplicityMarker')(p, element);
- }
-
- return lane;
- },
- 'bpmn:Lane': function(p, element, attrs) {
- var rect = drawRect(p, element.width, element.height, 0, attrs || {
- fill: 'none'
- });
-
- var semantic = getSemantic(element);
-
- if (semantic.$type === 'bpmn:Lane') {
- var text = semantic.name;
- renderLaneLabel(p, text, element);
- }
-
- return rect;
- },
- 'bpmn:InclusiveGateway': function(p, element) {
- var diamond = drawDiamond(p, element.width, element.height);
-
- /* circle path */
- drawCircle(p, element.width, element.height, element.height * 0.24, {
- strokeWidth: 2.5,
- fill: 'none'
- });
-
- return diamond;
- },
- 'bpmn:ExclusiveGateway': function(p, element) {
- var diamond = drawDiamond(p, element.width, element.height);
-
- var pathData = pathMap.getScaledPath('GATEWAY_EXCLUSIVE', {
- xScaleFactor: 0.4,
- yScaleFactor: 0.4,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: 0.32,
- my: 0.3
- }
- });
-
- if (!!(getDi(element).isMarkerVisible)) {
- drawPath(p, pathData, {
- strokeWidth: 1,
- fill: 'black'
- });
- }
-
- return diamond;
- },
- 'bpmn:ComplexGateway': function(p, element) {
- var diamond = drawDiamond(p, element.width, element.height);
-
- var pathData = pathMap.getScaledPath('GATEWAY_COMPLEX', {
- xScaleFactor: 0.5,
- yScaleFactor:0.5,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: 0.46,
- my: 0.26
- }
- });
-
- /* complex path */ drawPath(p, pathData, {
- strokeWidth: 1,
- fill: 'black'
- });
-
- return diamond;
- },
- 'bpmn:ParallelGateway': function(p, element) {
- var diamond = drawDiamond(p, element.width, element.height);
-
- var pathData = pathMap.getScaledPath('GATEWAY_PARALLEL', {
- xScaleFactor: 0.6,
- yScaleFactor:0.6,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: 0.46,
- my: 0.2
- }
- });
-
- /* parallel path */ drawPath(p, pathData, {
- strokeWidth: 1,
- fill: 'black'
- });
-
- return diamond;
- },
- 'bpmn:EventBasedGateway': function(p, element) {
-
- var semantic = getSemantic(element);
-
- var diamond = drawDiamond(p, element.width, element.height);
-
- /* outer circle path */ drawCircle(p, element.width, element.height, element.height * 0.20, {
- strokeWidth: 1,
- fill: 'none'
- });
-
- var type = semantic.eventGatewayType;
- var instantiate = !!semantic.instantiate;
-
- function drawEvent() {
-
- var pathData = pathMap.getScaledPath('GATEWAY_EVENT_BASED', {
- xScaleFactor: 0.18,
- yScaleFactor: 0.18,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: 0.36,
- my: 0.44
- }
- });
-
- /* event path */ drawPath(p, pathData, {
- strokeWidth: 2,
- fill: 'none'
- });
- }
-
- if (type === 'Parallel') {
-
- var pathData = pathMap.getScaledPath('GATEWAY_PARALLEL', {
- xScaleFactor: 0.4,
- yScaleFactor:0.4,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: 0.474,
- my: 0.296
- }
- });
-
- var parallelPath = drawPath(p, pathData);
- parallelPath.attr({
- strokeWidth: 1,
- fill: 'none'
- });
- } else if (type === 'Exclusive') {
-
- if (!instantiate) {
- var innerCircle = drawCircle(p, element.width, element.height, element.height * 0.26);
- innerCircle.attr({
- strokeWidth: 1,
- fill: 'none'
- });
- }
-
- drawEvent();
- }
-
-
- return diamond;
- },
- 'bpmn:Gateway': function(p, element) {
- return drawDiamond(p, element.width, element.height);
- },
- 'bpmn:SequenceFlow': function(p, element) {
- var pathData = createPathFromConnection(element);
- var path = drawPath(p, pathData, {
- strokeLinejoin: 'round',
- markerEnd: marker('sequenceflow-end')
- });
-
- var sequenceFlow = getSemantic(element);
- var source = element.source.businessObject;
-
- // conditional flow marker
- if (sequenceFlow.conditionExpression && source.$instanceOf('bpmn:Task')) {
- path.attr({
- markerStart: marker('conditional-flow-marker')
- });
- }
-
- // default marker
- if (source.default && source.$instanceOf('bpmn:Gateway') && source.default === sequenceFlow) {
- path.attr({
- markerStart: marker('conditional-default-flow-marker')
- });
- }
-
- return path;
- },
- 'bpmn:Association': function(p, element, attrs) {
-
- attrs = assign({
- strokeDasharray: '1,6',
- strokeLinecap: 'round',
- strokeLinejoin: 'round'
- }, attrs || {});
-
- // TODO(nre): style according to directed state
- return drawLine(p, element.waypoints, attrs);
- },
- 'bpmn:DataInputAssociation': function(p, element) {
- return renderer('bpmn:Association')(p, element, {
- markerEnd: marker('data-association-end')
- });
- },
- 'bpmn:DataOutputAssociation': function(p, element) {
- return renderer('bpmn:Association')(p, element, {
- markerEnd: marker('data-association-end')
- });
- },
- 'bpmn:MessageFlow': function(p, element) {
-
- var semantic = getSemantic(element),
- di = getDi(element);
-
- var pathData = createPathFromConnection(element);
- var path = drawPath(p, pathData, {
- markerEnd: marker('messageflow-end'),
- markerStart: marker('messageflow-start'),
- strokeDasharray: '10, 12',
- strokeLinecap: 'round',
- strokeLinejoin: 'round',
- strokeWidth: '1.5px'
- });
-
- if (semantic.messageRef) {
- var midPoint = path.getPointAtLength(path.getTotalLength() / 2);
-
- var markerPathData = pathMap.getScaledPath('MESSAGE_FLOW_MARKER', {
- abspos: {
- x: midPoint.x,
- y: midPoint.y
- }
- });
-
- var messageAttrs = { strokeWidth: 1 };
-
- if (di.messageVisibleKind === 'initiating') {
- messageAttrs.fill = 'white';
- messageAttrs.stroke = 'black';
- } else {
- messageAttrs.fill = '#888';
- messageAttrs.stroke = 'white';
- }
-
- drawPath(p, markerPathData, messageAttrs);
- }
-
- return path;
- },
- 'bpmn:DataObject': function(p, element) {
- var pathData = pathMap.getScaledPath('DATA_OBJECT_PATH', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: 0.474,
- my: 0.296
- }
- });
-
- var elementObject = drawPath(p, pathData, { fill: 'white' });
-
- var semantic = getSemantic(element);
-
- if (isCollection(semantic)) {
- renderDataItemCollection(p, element);
- }
-
- return elementObject;
- },
- 'bpmn:DataObjectReference': as('bpmn:DataObject'),
- 'bpmn:DataInput': function(p, element) {
-
- var arrowPathData = pathMap.getRawPath('DATA_ARROW');
-
- // page
- var elementObject = renderer('bpmn:DataObject')(p, element);
-
- /* input arrow path */ drawPath(p, arrowPathData, { strokeWidth: 1 });
-
- return elementObject;
- },
- 'bpmn:DataOutput': function(p, element) {
- var arrowPathData = pathMap.getRawPath('DATA_ARROW');
-
- // page
- var elementObject = renderer('bpmn:DataObject')(p, element);
-
- /* output arrow path */ drawPath(p, arrowPathData, {
- strokeWidth: 1,
- fill: 'black'
- });
-
- return elementObject;
- },
- 'bpmn:DataStoreReference': function(p, element) {
- var DATA_STORE_PATH = pathMap.getScaledPath('DATA_STORE', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: 0,
- my: 0.133
- }
- });
-
- var elementStore = drawPath(p, DATA_STORE_PATH, {
- strokeWidth: 2,
- fill: 'white'
- });
-
- return elementStore;
- },
- 'bpmn:BoundaryEvent': function(p, element) {
-
- var semantic = getSemantic(element),
- cancel = semantic.cancelActivity;
-
- var attrs = {
- strokeLinecap: 'round',
- strokeWidth: 1
- };
-
- if (!cancel) {
- attrs.strokeDasharray = '6';
- }
-
- var outer = renderer('bpmn:Event')(p, element, attrs);
- /* inner path */ drawCircle(p, element.width, element.height, INNER_OUTER_DIST, attrs);
-
- renderEventContent(element, p);
-
- return outer;
- },
- 'bpmn:Group': function(p, element) {
- return drawRect(p, element.width, element.height, TASK_BORDER_RADIUS, {
- strokeWidth: 1,
- strokeDasharray: '8,3,1,3',
- fill: 'none',
- pointerEvents: 'none'
- });
- },
- 'label': function(p, element) {
- return renderExternalLabel(p, element, '');
- },
- 'bpmn:TextAnnotation': function(p, element) {
- var style = {
- 'fill': 'none',
- 'stroke': 'none'
- };
- var textElement = drawRect(p, element.width, element.height, 0, 0, style);
- var textPathData = pathMap.getScaledPath('TEXT_ANNOTATION', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: 0.0,
- my: 0.0
- }
- });
- drawPath(p, textPathData);
-
- var text = getSemantic(element).text || '';
- renderLabel(p, text, { box: element, align: 'left-middle', padding: 5 });
-
- return textElement;
- },
- 'ParticipantMultiplicityMarker': function(p, element) {
- var subProcessPath = pathMap.getScaledPath('MARKER_PARALLEL', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: ((element.width / 2) / element.width),
- my: (element.height - 15) / element.height
- }
- });
-
- drawPath(p, subProcessPath);
- },
- 'SubProcessMarker': function(p, element) {
- var markerRect = drawRect(p, 14, 14, 0, {
- strokeWidth: 1
- });
-
- // Process marker is placed in the middle of the box
- // therefore fixed values can be used here
- markerRect.transform('translate(' + (element.width / 2 - 7.5) + ',' + (element.height - 20) + ')');
-
- var subProcessPath = pathMap.getScaledPath('MARKER_SUB_PROCESS', {
- xScaleFactor: 1.5,
- yScaleFactor: 1.5,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: (element.width / 2 - 7.5) / element.width,
- my: (element.height - 20) / element.height
- }
- });
-
- drawPath(p, subProcessPath);
- },
- 'ParallelMarker': function(p, element, position) {
- var subProcessPath = pathMap.getScaledPath('MARKER_PARALLEL', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: ((element.width / 2 + position.parallel) / element.width),
- my: (element.height - 20) / element.height
- }
- });
- drawPath(p, subProcessPath);
- },
- 'SequentialMarker': function(p, element, position) {
- var sequentialPath = pathMap.getScaledPath('MARKER_SEQUENTIAL', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: ((element.width / 2 + position.seq) / element.width),
- my: (element.height - 19) / element.height
- }
- });
- drawPath(p, sequentialPath);
- },
- 'CompensationMarker': function(p, element, position) {
- var compensationPath = pathMap.getScaledPath('MARKER_COMPENSATION', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: ((element.width / 2 + position.compensation) / element.width),
- my: (element.height - 13) / element.height
- }
- });
- drawPath(p, compensationPath, { strokeWidth: 1 });
- },
- 'LoopMarker': function(p, element, position) {
- var loopPath = pathMap.getScaledPath('MARKER_LOOP', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: ((element.width / 2 + position.loop) / element.width),
- my: (element.height - 7) / element.height
- }
- });
-
- drawPath(p, loopPath, {
- strokeWidth: 1,
- fill: 'none',
- strokeLinecap: 'round',
- strokeMiterlimit: 0.5
- });
- },
- 'AdhocMarker': function(p, element, position) {
- var loopPath = pathMap.getScaledPath('MARKER_ADHOC', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: ((element.width / 2 + position.adhoc) / element.width),
- my: (element.height - 15) / element.height
- }
- });
-
- drawPath(p, loopPath, {
- strokeWidth: 1,
- fill: 'black'
- });
- }
- };
-
- function attachTaskMarkers(p, element, taskMarkers) {
- var obj = getSemantic(element);
-
- var subprocess = includes(taskMarkers, 'SubProcessMarker');
- var position;
-
- if (subprocess) {
- position = {
- seq: -21,
- parallel: -22,
- compensation: -42,
- loop: -18,
- adhoc: 10
- };
- } else {
- position = {
- seq: -3,
- parallel: -6,
- compensation: -27,
- loop: 0,
- adhoc: 10
- };
- }
-
- forEach(taskMarkers, function(marker) {
- renderer(marker)(p, element, position);
- });
-
- if (obj.$type === 'bpmn:AdHocSubProcess') {
- renderer('AdhocMarker')(p, element, position);
- }
- if (obj.loopCharacteristics && obj.loopCharacteristics.isSequential === undefined) {
- renderer('LoopMarker')(p, element, position);
- return;
- }
- if (obj.loopCharacteristics &&
- obj.loopCharacteristics.isSequential !== undefined &&
- !obj.loopCharacteristics.isSequential) {
- renderer('ParallelMarker')(p, element, position);
- }
- if (obj.loopCharacteristics && !!obj.loopCharacteristics.isSequential) {
- renderer('SequentialMarker')(p, element, position);
- }
- if (!!obj.isForCompensation) {
- renderer('CompensationMarker')(p, element, position);
- }
- }
-
- function drawShape(parent, element) {
- var type = element.type;
- var h = handlers[type];
-
- /* jshint -W040 */
- if (!h) {
- return DefaultRenderer.prototype.drawShape.apply(this, [ parent, element ]);
- } else {
- return h(parent, element);
- }
- }
-
- function drawConnection(parent, element) {
- var type = element.type;
- var h = handlers[type];
-
- /* jshint -W040 */
- if (!h) {
- return DefaultRenderer.prototype.drawConnection.apply(this, [ parent, element ]);
- } else {
- return h(parent, element);
- }
- }
-
- function renderDataItemCollection(p, element) {
-
- var yPosition = (element.height - 16) / element.height;
-
- var pathData = pathMap.getScaledPath('DATA_OBJECT_COLLECTION_PATH', {
- xScaleFactor: 1,
- yScaleFactor: 1,
- containerWidth: element.width,
- containerHeight: element.height,
- position: {
- mx: 0.451,
- my: yPosition
- }
- });
-
- /* collection path */ drawPath(p, pathData, {
- strokeWidth: 2
- });
- }
-
- function isCollection(element, filter) {
- return element.isCollection ||
- (element.elementObjectRef && element.elementObjectRef.isCollection);
- }
-
- function getDi(element) {
- return element.businessObject.di;
- }
-
- function getSemantic(element) {
- return element.businessObject;
- }
-
- /**
- * Checks if eventDefinition of the given element matches with semantic type.
- *
- * @return {boolean} true if element is of the given semantic type
- */
- function isTypedEvent(event, eventDefinitionType, filter) {
-
- function matches(definition, filter) {
- return every(filter, function(val, key) {
-
- // we want a == conversion here, to be able to catch
- // undefined == false and friends
- /* jshint -W116 */
- return definition[key] == val;
- });
- }
-
- return some(event.eventDefinitions, function(definition) {
- return definition.$type === eventDefinitionType && matches(event, filter);
- });
- }
-
- function isThrowEvent(event) {
- return (event.$type === 'bpmn:IntermediateThrowEvent') || (event.$type === 'bpmn:EndEvent');
- }
-
-
- /////// cropping path customizations /////////////////////////
-
- function componentsToPath(elements) {
- return elements.join(',').replace(/,?([A-z]),?/g, '$1');
- }
-
- function getCirclePath(shape) {
-
- var cx = shape.x + shape.width / 2,
- cy = shape.y + shape.height / 2,
- radius = shape.width / 2;
-
- var circlePath = [
- ['M', cx, cy],
- ['m', 0, -radius],
- ['a', radius, radius, 0, 1, 1, 0, 2 * radius],
- ['a', radius, radius, 0, 1, 1, 0, -2 * radius],
- ['z']
- ];
-
- return componentsToPath(circlePath);
- }
-
- function getRoundRectPath(shape) {
-
- var radius = TASK_BORDER_RADIUS,
- x = shape.x,
- y = shape.y,
- width = shape.width,
- height = shape.height;
-
- var roundRectPath = [
- ['M', x + radius, y],
- ['l', width - radius * 2, 0],
- ['a', radius, radius, 0, 0, 1, radius, radius],
- ['l', 0, height - radius * 2],
- ['a', radius, radius, 0, 0, 1, -radius, radius],
- ['l', radius * 2 - width, 0],
- ['a', radius, radius, 0, 0, 1, -radius, -radius],
- ['l', 0, radius * 2 - height],
- ['a', radius, radius, 0, 0, 1, radius, -radius],
- ['z']
- ];
-
- return componentsToPath(roundRectPath);
- }
-
- function getDiamondPath(shape) {
-
- var width = shape.width,
- height = shape.height,
- x = shape.x,
- y = shape.y,
- halfWidth = width / 2,
- halfHeight = height / 2;
-
- var diamondPath = [
- ['M', x + halfWidth, y],
- ['l', halfWidth, halfHeight],
- ['l', -halfWidth, halfHeight],
- ['l', -halfWidth, -halfHeight],
- ['z']
- ];
-
- return componentsToPath(diamondPath);
- }
-
- function getRectPath(shape) {
- var x = shape.x,
- y = shape.y,
- width = shape.width,
- height = shape.height;
-
- var rectPath = [
- ['M', x, y],
- ['l', width, 0],
- ['l', 0, height],
- ['l', -width, 0],
- ['z']
- ];
-
- return componentsToPath(rectPath);
- }
-
- function getShapePath(element) {
- var obj = getSemantic(element);
-
- if (obj.$instanceOf('bpmn:Event')) {
- return getCirclePath(element);
- }
-
- if (obj.$instanceOf('bpmn:Activity')) {
- return getRoundRectPath(element);
- }
-
- if (obj.$instanceOf('bpmn:Gateway')) {
- return getDiamondPath(element);
- }
-
- return getRectPath(element);
- }
-
-
- // hook onto canvas init event to initialize
- // connection start/end markers on svg
- events.on('canvas.init', function(event) {
- initMarkers(event.svg);
- });
-
- this.drawShape = drawShape;
- this.drawConnection = drawConnection;
-
- this.getShapePath = getShapePath;
-}
-
-inherits(BpmnRenderer, DefaultRenderer);
-
-
-BpmnRenderer.$inject = [ 'eventBus', 'styles', 'pathMap' ];
-
-module.exports = BpmnRenderer;
-
-},{"184":184,"195":195,"201":201,"204":204,"206":206,"210":210,"316":316,"320":320,"325":325,"45":45,"84":84}],5:[function(_dereq_,module,exports){
-'use strict';
-
-var Snap = _dereq_(188);
-
-/**
- * Map containing SVG paths needed by BpmnRenderer.
- */
-
-function PathMap() {
-
- /**
- * Contains a map of path elements
- *
- * Path definition
- * A parameterized path is defined like this:
- *
- * 'GATEWAY_PARALLEL': {
- * d: 'm {mx},{my} {e.x0},0 0,{e.x1} {e.x1},0 0,{e.y0} -{e.x1},0 0,{e.y1} ' +
- '-{e.x0},0 0,-{e.y1} -{e.x1},0 0,-{e.y0} {e.x1},0 z',
- * height: 17.5,
- * width: 17.5,
- * heightElements: [2.5, 7.5],
- * widthElements: [2.5, 7.5]
- * }
- *
- * It's important to specify a correct height and width for the path as the scaling
- * is based on the ratio between the specified height and width in this object and the
- * height and width that is set as scale target (Note x,y coordinates will be scaled with
- * individual ratios).
- * The 'heightElements ' and 'widthElements ' array must contain the values that will be scaled.
- * The scaling is based on the computed ratios.
- * Coordinates on the y axis should be in the heightElement 's array, they will be scaled using
- * the computed ratio coefficient.
- * In the parameterized path the scaled values can be accessed through the 'e' object in {} brackets.
- *
- * The values for the y axis can be accessed in the path string using {e.y0}, {e.y1}, ....
- * The values for the x axis can be accessed in the path string using {e.x0}, {e.x1}, ....
- *
- * The numbers x0, x1 respectively y0, y1, ... map to the corresponding array index.
- *
- */
- this.pathMap = {
- 'EVENT_MESSAGE': {
- d: 'm {mx},{my} l 0,{e.y1} l {e.x1},0 l 0,-{e.y1} z l {e.x0},{e.y0} l {e.x0},-{e.y0}',
- height: 36,
- width: 36,
- heightElements: [6, 14],
- widthElements: [10.5, 21]
- },
- 'EVENT_SIGNAL': {
- d: 'M {mx},{my} l {e.x0},{e.y0} l -{e.x1},0 Z',
- height: 36,
- width: 36,
- heightElements: [18],
- widthElements: [10, 20]
- },
- 'EVENT_ESCALATION': {
- d: 'm {mx},{my} c -{e.x1},{e.y0} -{e.x3},{e.y1} -{e.x5},{e.y4} {e.x1},-{e.y3} {e.x3},-{e.y5} {e.x5},-{e.y6} ' +
- '{e.x0},{e.y3} {e.x2},{e.y5} {e.x4},{e.y6} -{e.x0},-{e.y0} -{e.x2},-{e.y1} -{e.x4},-{e.y4} z',
- height: 36,
- width: 36,
- heightElements: [2.382, 4.764, 4.926, 6.589333, 7.146, 13.178667, 19.768],
- widthElements: [2.463, 2.808, 4.926, 5.616, 7.389, 8.424]
- },
- 'EVENT_CONDITIONAL': {
- d: 'M {e.x0},{e.y0} l {e.x1},0 l 0,{e.y2} l -{e.x1},0 Z ' +
- 'M {e.x2},{e.y3} l {e.x0},0 ' +
- 'M {e.x2},{e.y4} l {e.x0},0 ' +
- 'M {e.x2},{e.y5} l {e.x0},0 ' +
- 'M {e.x2},{e.y6} l {e.x0},0 ' +
- 'M {e.x2},{e.y7} l {e.x0},0 ' +
- 'M {e.x2},{e.y8} l {e.x0},0 ',
- height: 36,
- width: 36,
- heightElements: [8.5, 14.5, 18, 11.5, 14.5, 17.5, 20.5, 23.5, 26.5],
- widthElements: [10.5, 14.5, 12.5]
- },
- 'EVENT_LINK': {
- d: 'm {mx},{my} 0,{e.y0} -{e.x1},0 0,{e.y1} {e.x1},0 0,{e.y0} {e.x0},-{e.y2} -{e.x0},-{e.y2} z',
- height: 36,
- width: 36,
- heightElements: [4.4375, 6.75, 7.8125],
- widthElements: [9.84375, 13.5]
- },
- 'EVENT_ERROR': {
- d: 'm {mx},{my} {e.x0},-{e.y0} {e.x1},-{e.y1} {e.x2},{e.y2} {e.x3},-{e.y3} -{e.x4},{e.y4} -{e.x5},-{e.y5} z',
- height: 36,
- width: 36,
- heightElements: [0.023, 8.737, 8.151, 16.564, 10.591, 8.714],
- widthElements: [0.085, 6.672, 6.97, 4.273, 5.337, 6.636]
- },
- 'EVENT_CANCEL_45': {
- d: 'm {mx},{my} -{e.x1},0 0,{e.x0} {e.x1},0 0,{e.y1} {e.x0},0 ' +
- '0,-{e.y1} {e.x1},0 0,-{e.y0} -{e.x1},0 0,-{e.y1} -{e.x0},0 z',
- height: 36,
- width: 36,
- heightElements: [4.75, 8.5],
- widthElements: [4.75, 8.5]
- },
- 'EVENT_COMPENSATION': {
- d: 'm {mx},{my} {e.x0},-{e.y0} 0,{e.y1} z m {e.x0},0 {e.x0},-{e.y0} 0,{e.y1} z',
- height: 36,
- width: 36,
- heightElements: [5, 10],
- widthElements: [10]
- },
- 'EVENT_TIMER_WH': {
- d: 'M {mx},{my} l {e.x0},-{e.y0} m -{e.x0},{e.y0} l {e.x1},{e.y1} ',
- height: 36,
- width: 36,
- heightElements: [10, 2],
- widthElements: [3, 7]
- },
- 'EVENT_TIMER_LINE': {
- d: 'M {mx},{my} ' +
- 'm {e.x0},{e.y0} l -{e.x1},{e.y1} ',
- height: 36,
- width: 36,
- heightElements: [10, 3],
- widthElements: [0, 0]
- },
- 'EVENT_MULTIPLE': {
- d:'m {mx},{my} {e.x1},-{e.y0} {e.x1},{e.y0} -{e.x0},{e.y1} -{e.x2},0 z',
- height: 36,
- width: 36,
- heightElements: [6.28099, 12.56199],
- widthElements: [3.1405, 9.42149, 12.56198]
- },
- 'EVENT_PARALLEL_MULTIPLE': {
- d:'m {mx},{my} {e.x0},0 0,{e.y1} {e.x1},0 0,{e.y0} -{e.x1},0 0,{e.y1} ' +
- '-{e.x0},0 0,-{e.y1} -{e.x1},0 0,-{e.y0} {e.x1},0 z',
- height: 36,
- width: 36,
- heightElements: [2.56228, 7.68683],
- widthElements: [2.56228, 7.68683]
- },
- 'GATEWAY_EXCLUSIVE': {
- d:'m {mx},{my} {e.x0},{e.y0} {e.x1},{e.y0} {e.x2},0 {e.x4},{e.y2} ' +
- '{e.x4},{e.y1} {e.x2},0 {e.x1},{e.y3} {e.x0},{e.y3} ' +
- '{e.x3},0 {e.x5},{e.y1} {e.x5},{e.y2} {e.x3},0 z',
- height: 17.5,
- width: 17.5,
- heightElements: [8.5, 6.5312, -6.5312, -8.5],
- widthElements: [6.5, -6.5, 3, -3, 5, -5]
- },
- 'GATEWAY_PARALLEL': {
- d:'m {mx},{my} 0,{e.y1} -{e.x1},0 0,{e.y0} {e.x1},0 0,{e.y1} {e.x0},0 ' +
- '0,-{e.y1} {e.x1},0 0,-{e.y0} -{e.x1},0 0,-{e.y1} -{e.x0},0 z',
- height: 30,
- width: 30,
- heightElements: [5, 12.5],
- widthElements: [5, 12.5]
- },
- 'GATEWAY_EVENT_BASED': {
- d:'m {mx},{my} {e.x0},{e.y0} {e.x0},{e.y1} {e.x1},{e.y2} {e.x2},0 z',
- height: 11,
- width: 11,
- heightElements: [-6, 6, 12, -12],
- widthElements: [9, -3, -12]
- },
- 'GATEWAY_COMPLEX': {
- d:'m {mx},{my} 0,{e.y0} -{e.x0},-{e.y1} -{e.x1},{e.y2} {e.x0},{e.y1} -{e.x2},0 0,{e.y3} ' +
- '{e.x2},0 -{e.x0},{e.y1} l {e.x1},{e.y2} {e.x0},-{e.y1} 0,{e.y0} {e.x3},0 0,-{e.y0} {e.x0},{e.y1} ' +
- '{e.x1},-{e.y2} -{e.x0},-{e.y1} {e.x2},0 0,-{e.y3} -{e.x2},0 {e.x0},-{e.y1} -{e.x1},-{e.y2} ' +
- '-{e.x0},{e.y1} 0,-{e.y0} -{e.x3},0 z',
- height: 17.125,
- width: 17.125,
- heightElements: [4.875, 3.4375, 2.125, 3],
- widthElements: [3.4375, 2.125, 4.875, 3]
- },
- 'DATA_OBJECT_PATH': {
- d:'m 0,0 {e.x1},0 {e.x0},{e.y0} 0,{e.y1} -{e.x2},0 0,-{e.y2} {e.x1},0 0,{e.y0} {e.x0},0',
- height: 61,
- width: 51,
- heightElements: [10, 50, 60],
- widthElements: [10, 40, 50, 60]
- },
- 'DATA_OBJECT_COLLECTION_PATH': {
- d:'m {mx}, {my} ' +
- 'm 0 15 l 0 -15 ' +
- 'm 4 15 l 0 -15 ' +
- 'm 4 15 l 0 -15 ',
- height: 61,
- width: 51,
- heightElements: [12],
- widthElements: [1, 6, 12, 15]
- },
- 'DATA_ARROW': {
- d:'m 5,9 9,0 0,-3 5,5 -5,5 0,-3 -9,0 z',
- height: 61,
- width: 51,
- heightElements: [],
- widthElements: []
- },
- 'DATA_STORE': {
- d:'m {mx},{my} ' +
- 'l 0,{e.y2} ' +
- 'c {e.x0},{e.y1} {e.x1},{e.y1} {e.x2},0 ' +
- 'l 0,-{e.y2} ' +
- 'c -{e.x0},-{e.y1} -{e.x1},-{e.y1} -{e.x2},0' +
- 'c {e.x0},{e.y1} {e.x1},{e.y1} {e.x2},0 ' +
- 'm -{e.x2},{e.y0}' +
- 'c {e.x0},{e.y1} {e.x1},{e.y1} {e.x2},0' +
- 'm -{e.x2},{e.y0}' +
- 'c {e.x0},{e.y1} {e.x1},{e.y1} {e.x2},0',
- height: 61,
- width: 61,
- heightElements: [7, 10, 45],
- widthElements: [2, 58, 60]
- },
- 'TEXT_ANNOTATION': {
- d: 'm {mx}, {my} m 10,0 l -10,0 l 0,{e.y0} l 10,0',
- height: 30,
- width: 10,
- heightElements: [30],
- widthElements: [10]
- },
- 'MARKER_SUB_PROCESS': {
- d: 'm{mx},{my} m 7,2 l 0,10 m -5,-5 l 10,0',
- height: 10,
- width: 10,
- heightElements: [],
- widthElements: []
- },
- 'MARKER_PARALLEL': {
- d: 'm{mx},{my} m 3,2 l 0,10 m 3,-10 l 0,10 m 3,-10 l 0,10',
- height: 10,
- width: 10,
- heightElements: [],
- widthElements: []
- },
- 'MARKER_SEQUENTIAL': {
- d: 'm{mx},{my} m 0,3 l 10,0 m -10,3 l 10,0 m -10,3 l 10,0',
- height: 10,
- width: 10,
- heightElements: [],
- widthElements: []
- },
- 'MARKER_COMPENSATION': {
- d: 'm {mx},{my} 8,-5 0,10 z m 9,0 8,-5 0,10 z',
- height: 10,
- width: 21,
- heightElements: [],
- widthElements: []
- },
- 'MARKER_LOOP': {
- d: 'm {mx},{my} c 3.526979,0 6.386161,-2.829858 6.386161,-6.320661 0,-3.490806 -2.859182,-6.320661 ' +
- '-6.386161,-6.320661 -3.526978,0 -6.38616,2.829855 -6.38616,6.320661 0,1.745402 ' +
- '0.714797,3.325567 1.870463,4.469381 0.577834,0.571908 1.265885,1.034728 2.029916,1.35457 ' +
- 'l -0.718163,-3.909793 m 0.718163,3.909793 -3.885211,0.802902',
- height: 13.9,
- width: 13.7,
- heightElements: [],
- widthElements: []
- },
- 'MARKER_ADHOC': {
- d: 'm {mx},{my} m 0.84461,2.64411 c 1.05533,-1.23780996 2.64337,-2.07882 4.29653,-1.97997996 2.05163,0.0805 ' +
- '3.85579,1.15803 5.76082,1.79107 1.06385,0.34139996 2.24454,0.1438 3.18759,-0.43767 0.61743,-0.33642 ' +
- '1.2775,-0.64078 1.7542,-1.17511 0,0.56023 0,1.12046 0,1.6807 -0.98706,0.96237996 -2.29792,1.62393996 ' +
- '-3.6918,1.66181996 -1.24459,0.0927 -2.46671,-0.2491 -3.59505,-0.74812 -1.35789,-0.55965 ' +
- '-2.75133,-1.33436996 -4.27027,-1.18121996 -1.37741,0.14601 -2.41842,1.13685996 -3.44288,1.96782996 z',
- height: 4,
- width: 15,
- heightElements: [],
- widthElements: []
- },
- 'TASK_TYPE_SEND': {
- d: 'm {mx},{my} l 0,{e.y1} l {e.x1},0 l 0,-{e.y1} z l {e.x0},{e.y0} l {e.x0},-{e.y0}',
- height: 14,
- width: 21,
- heightElements: [6, 14],
- widthElements: [10.5, 21]
- },
- 'TASK_TYPE_SCRIPT': {
- d: 'm {mx},{my} c 9.966553,-6.27276 -8.000926,-7.91932 2.968968,-14.938 l -8.802728,0 ' +
- 'c -10.969894,7.01868 6.997585,8.66524 -2.968967,14.938 z ' +
- 'm -7,-12 l 5,0 ' +
- 'm -4.5,3 l 4.5,0 ' +
- 'm -3,3 l 5,0' +
- 'm -4,3 l 5,0',
- height: 15,
- width: 12.6,
- heightElements: [6, 14],
- widthElements: [10.5, 21]
- },
- 'TASK_TYPE_USER_1': {
- d: 'm {mx},{my} c 0.909,-0.845 1.594,-2.049 1.594,-3.385 0,-2.554 -1.805,-4.62199999 ' +
- '-4.357,-4.62199999 -2.55199998,0 -4.28799998,2.06799999 -4.28799998,4.62199999 0,1.348 ' +
- '0.974,2.562 1.89599998,3.405 -0.52899998,0.187 -5.669,2.097 -5.794,4.7560005 v 6.718 ' +
- 'h 17 v -6.718 c 0,-2.2980005 -5.5279996,-4.5950005 -6.0509996,-4.7760005 z' +
- 'm -8,6 l 0,5.5 m 11,0 l 0,-5'
- },
- 'TASK_TYPE_USER_2': {
- d: 'm {mx},{my} m 2.162,1.009 c 0,2.4470005 -2.158,4.4310005 -4.821,4.4310005 ' +
- '-2.66499998,0 -4.822,-1.981 -4.822,-4.4310005 '
- },
- 'TASK_TYPE_USER_3': {
- d: 'm {mx},{my} m -6.9,-3.80 c 0,0 2.25099998,-2.358 4.27399998,-1.177 2.024,1.181 4.221,1.537 ' +
- '4.124,0.965 -0.098,-0.57 -0.117,-3.79099999 -4.191,-4.13599999 -3.57499998,0.001 ' +
- '-4.20799998,3.36699999 -4.20699998,4.34799999 z'
- },
- 'TASK_TYPE_MANUAL': {
- d: 'm {mx},{my} c 0.234,-0.01 5.604,0.008 8.029,0.004 0.808,0 1.271,-0.172 1.417,-0.752 0.227,-0.898 ' +
- '-0.334,-1.314 -1.338,-1.316 -2.467,-0.01 -7.886,-0.004 -8.108,-0.004 -0.014,-0.079 0.016,-0.533 0,-0.61 ' +
- '0.195,-0.042 8.507,0.006 9.616,0.002 0.877,-0.007 1.35,-0.438 1.353,-1.208 0.003,-0.768 -0.479,-1.09 ' +
- '-1.35,-1.091 -2.968,-0.002 -9.619,-0.013 -9.619,-0.013 v -0.591 c 0,0 5.052,-0.016 7.225,-0.016 ' +
- '0.888,-0.002 1.354,-0.416 1.351,-1.193 -0.006,-0.761 -0.492,-1.196 -1.361,-1.196 -3.473,-0.005 ' +
- '-10.86,-0.003 -11.0829995,-0.003 -0.022,-0.047 -0.045,-0.094 -0.069,-0.139 0.3939995,-0.319 ' +
- '2.0409995,-1.626 2.4149995,-2.017 0.469,-0.4870005 0.519,-1.1650005 0.162,-1.6040005 -0.414,-0.511 ' +
- '-0.973,-0.5 -1.48,-0.236 -1.4609995,0.764 -6.5999995,3.6430005 -7.7329995,4.2710005 -0.9,0.499 ' +
- '-1.516,1.253 -1.882,2.19 -0.37000002,0.95 -0.17,2.01 -0.166,2.979 0.004,0.718 -0.27300002,1.345 ' +
- '-0.055,2.063 0.629,2.087 2.425,3.312 4.859,3.318 4.6179995,0.014 9.2379995,-0.139 13.8569995,-0.158 ' +
- '0.755,-0.004 1.171,-0.301 1.182,-1.033 0.012,-0.754 -0.423,-0.969 -1.183,-0.973 -1.778,-0.01 ' +
- '-5.824,-0.004 -6.04,-0.004 10e-4,-0.084 0.003,-0.586 10e-4,-0.67 z'
- },
- 'TASK_TYPE_INSTANTIATING_SEND': {
- d: 'm {mx},{my} l 0,8.4 l 12.6,0 l 0,-8.4 z l 6.3,3.6 l 6.3,-3.6'
- },
- 'TASK_TYPE_SERVICE': {
- d: 'm {mx},{my} v -1.71335 c 0.352326,-0.0705 0.703932,-0.17838 1.047628,-0.32133 ' +
- '0.344416,-0.14465 0.665822,-0.32133 0.966377,-0.52145 l 1.19431,1.18005 1.567487,-1.57688 ' +
- '-1.195028,-1.18014 c 0.403376,-0.61394 0.683079,-1.29908 0.825447,-2.01824 l 1.622133,-0.01 ' +
- 'v -2.2196 l -1.636514,0.01 c -0.07333,-0.35153 -0.178319,-0.70024 -0.323564,-1.04372 ' +
- '-0.145244,-0.34406 -0.321407,-0.6644 -0.522735,-0.96217 l 1.131035,-1.13631 -1.583305,-1.56293 ' +
- '-1.129598,1.13589 c -0.614052,-0.40108 -1.302883,-0.68093 -2.022633,-0.82247 l 0.0093,-1.61852 ' +
- 'h -2.241173 l 0.0042,1.63124 c -0.353763,0.0736 -0.705369,0.17977 -1.049785,0.32371 -0.344415,0.14437 ' +
- '-0.665102,0.32092 -0.9635006,0.52046 l -1.1698628,-1.15823 -1.5667691,1.5792 1.1684265,1.15669 ' +
- 'c -0.4026573,0.61283 -0.68308,1.29797 -0.8247287,2.01713 l -1.6588041,0.003 v 2.22174 ' +
- 'l 1.6724648,-0.006 c 0.073327,0.35077 0.1797598,0.70243 0.3242851,1.04472 0.1452428,0.34448 ' +
- '0.3214064,0.6644 0.5227339,0.96066 l -1.1993431,1.19723 1.5840256,1.56011 1.1964668,-1.19348 ' +
- 'c 0.6140517,0.40346 1.3028827,0.68232 2.0233517,0.82331 l 7.19e-4,1.69892 h 2.226848 z ' +
- 'm 0.221462,-3.9957 c -1.788948,0.7502 -3.8576,-0.0928 -4.6097055,-1.87438 -0.7521065,-1.78321 ' +
- '0.090598,-3.84627 1.8802645,-4.59604 1.78823,-0.74936 3.856881,0.0929 4.608987,1.87437 ' +
- '0.752106,1.78165 -0.0906,3.84612 -1.879546,4.59605 z'
- },
- 'TASK_TYPE_SERVICE_FILL': {
- d: 'm {mx},{my} c -1.788948,0.7502 -3.8576,-0.0928 -4.6097055,-1.87438 -0.7521065,-1.78321 ' +
- '0.090598,-3.84627 1.8802645,-4.59604 1.78823,-0.74936 3.856881,0.0929 4.608987,1.87437 ' +
- '0.752106,1.78165 -0.0906,3.84612 -1.879546,4.59605 z'
- },
- 'TASK_TYPE_BUSINESS_RULE_HEADER': {
- d: 'm {mx},{my} 0,4 20,0 0,-4 z'
- },
- 'TASK_TYPE_BUSINESS_RULE_MAIN': {
- d: 'm {mx},{my} 0,12 20,0 0,-12 z' +
- 'm 0,8 l 20,0 ' +
- 'm -13,-4 l 0,8'
- },
- 'MESSAGE_FLOW_MARKER': {
- d: 'm {mx},{my} m -10.5 ,-7 l 0,14 l 21,0 l 0,-14 z l 10.5,6 l 10.5,-6'
- }
- };
-
- this.getRawPath = function getRawPath(pathId) {
- return this.pathMap[pathId].d;
- };
-
- /**
- * Scales the path to the given height and width.
- * Use case
- * Use case is to scale the content of elements (event, gateways) based
- * on the element bounding box's size.
- *
- * Why not transform
- * Scaling a path with transform() will also scale the stroke and IE does not support
- * the option 'non-scaling-stroke' to prevent this.
- * Also there are use cases where only some parts of a path should be
- * scaled.
- *
- * @param {String} pathId The ID of the path.
- * @param {Object} param
- * Example param object scales the path to 60% size of the container (data.width, data.height).
- *
- * {
- * xScaleFactor: 0.6,
- * yScaleFactor:0.6,
- * containerWidth: data.width,
- * containerHeight: data.height,
- * position: {
- * mx: 0.46,
- * my: 0.2,
- * }
- * }
- *
- *
- * targetpathwidth = xScaleFactor * containerWidth
- * targetpathheight = yScaleFactor * containerHeight
- * Position is used to set the starting coordinate of the path. M is computed:
- *
- * position.x * containerWidth
- * position.y * containerHeight
- *
- * Center of the container position: {
- * mx: 0.5,
- * my: 0.5,
- * }
- * Upper left corner of the container
- * position: {
- * mx: 0.0,
- * my: 0.0,
- * }
- *
- *
- *
- *
- */
- this.getScaledPath = function getScaledPath(pathId, param) {
- var rawPath = this.pathMap[pathId];
-
- // positioning
- // compute the start point of the path
- var mx, my;
-
- if(!!param.abspos) {
- mx = param.abspos.x;
- my = param.abspos.y;
- } else {
- mx = param.containerWidth * param.position.mx;
- my = param.containerHeight * param.position.my;
- }
-
- var coordinates = {}; //map for the scaled coordinates
- if(param.position) {
-
- // path
- var heightRatio = (param.containerHeight / rawPath.height) * param.yScaleFactor;
- var widthRatio = (param.containerWidth / rawPath.width) * param.xScaleFactor;
-
-
- //Apply height ratio
- for (var heightIndex = 0; heightIndex < rawPath.heightElements.length; heightIndex++) {
- coordinates['y' + heightIndex] = rawPath.heightElements[heightIndex] * heightRatio;
- }
-
- //Apply width ratio
- for (var widthIndex = 0; widthIndex < rawPath.widthElements.length; widthIndex++) {
- coordinates['x' + widthIndex] = rawPath.widthElements[widthIndex] * widthRatio;
- }
- }
-
- //Apply value to raw path
- var path = Snap.format(
- rawPath.d, {
- mx: mx,
- my: my,
- e: coordinates
- }
- );
- return path;
- };
-}
-
-module.exports = PathMap;
-
-},{"188":188}],6:[function(_dereq_,module,exports){
-module.exports = {
- renderer: [ 'type', _dereq_(4) ],
- pathMap: [ 'type', _dereq_(5) ]
-};
-},{"4":4,"5":5}],7:[function(_dereq_,module,exports){
-'use strict';
-
-
-var assign = _dereq_(325),
- forEach = _dereq_(204);
-
-
-/**
- * A provider for BPMN 2.0 elements context pad
- */
-function ContextPadProvider(contextPad, modeling, elementFactory,
- connect, create, bpmnReplace,
- canvas) {
-
- contextPad.registerProvider(this);
-
- this._contextPad = contextPad;
-
- this._modeling = modeling;
-
- this._elementFactory = elementFactory;
- this._connect = connect;
- this._create = create;
- this._bpmnReplace = bpmnReplace;
- this._canvas = canvas;
-}
-
-ContextPadProvider.$inject = [
- 'contextPad',
- 'modeling',
- 'elementFactory',
- 'connect',
- 'create',
- 'bpmnReplace',
- 'canvas'
-];
-
-ContextPadProvider.prototype.getContextPadEntries = function(element) {
-
- var contextPad = this._contextPad,
- modeling = this._modeling,
-
- elementFactory = this._elementFactory,
- connect = this._connect,
- create = this._create,
- bpmnReplace = this._bpmnReplace,
- canvas = this._canvas;
-
- var actions = {};
-
- if (element.type === 'label') {
- return actions;
- }
-
- var bpmnElement = element.businessObject;
-
- function startConnect(event, element, autoActivate) {
- connect.start(event, element, autoActivate);
- }
-
- function removeElement(e) {
- if (element.waypoints) {
- modeling.removeConnection(element);
- } else {
- modeling.removeShape(element);
- }
- }
-
- function getReplaceMenuPosition(element) {
-
- var Y_OFFSET = 5;
-
- var diagramContainer = canvas.getContainer(),
- pad = contextPad.getPad(element).html;
-
- var diagramRect = diagramContainer.getBoundingClientRect(),
- padRect = pad.getBoundingClientRect();
-
- var top = padRect.top - diagramRect.top;
- var left = padRect.left - diagramRect.left;
-
- var pos = {
- x: left,
- y: top + padRect.height + Y_OFFSET
- };
-
- return pos;
- }
-
-
- function appendAction(type, className, options) {
-
- function appendListener(event, element) {
-
- var shape = elementFactory.createShape(assign({ type: type }, options));
- create.start(event, shape, element);
- }
-
- var shortType = type.replace(/^bpmn\:/, '');
-
- return {
- group: 'model',
- className: className,
- title: 'Append ' + shortType,
- action: {
- dragstart: appendListener,
- click: appendListener
- }
- };
- }
-
- if (bpmnElement.$instanceOf('bpmn:FlowNode')) {
-
- if (!bpmnElement.$instanceOf('bpmn:EndEvent') &&
- !bpmnElement.$instanceOf('bpmn:EventBasedGateway') &&
- !isEventType(bpmnElement, 'bpmn:IntermediateThrowEvent', 'bpmn:LinkEventDefinition')) {
-
- assign(actions, {
- 'append.end-event': appendAction('bpmn:EndEvent', 'icon-end-event-none'),
- 'append.gateway': appendAction('bpmn:ExclusiveGateway', 'icon-gateway-xor'),
- 'append.append-task': appendAction('bpmn:Task', 'icon-task'),
- 'append.intermediate-event': appendAction('bpmn:IntermediateThrowEvent',
- 'icon-intermediate-event-none')
- });
- }
-
- if (bpmnElement.$instanceOf('bpmn:EventBasedGateway')) {
-
- assign(actions, {
- 'append.receive-task': appendAction('bpmn:ReceiveTask', 'icon-receive-task'),
- 'append.message-intermediate-event': appendAction('bpmn:IntermediateCatchEvent',
- 'icon-intermediate-event-catch-message',
- { _eventDefinitionType: 'bpmn:MessageEventDefinition'}),
- 'append.timer-intermediate-event': appendAction('bpmn:IntermediateCatchEvent',
- 'icon-intermediate-event-catch-timer',
- { _eventDefinitionType: 'bpmn:TimerEventDefinition'}),
- 'append.condtion-intermediate-event': appendAction('bpmn:IntermediateCatchEvent',
- 'icon-intermediate-event-catch-condition',
- { _eventDefinitionType: 'bpmn:ConditionalEventDefinition'}),
- 'append.signal-intermediate-event': appendAction('bpmn:IntermediateCatchEvent',
- 'icon-intermediate-event-catch-signal',
- { _eventDefinitionType: 'bpmn:SignalEventDefinition'})
- });
- }
-
-
- // Replace menu entry
- if (!bpmnElement.$instanceOf('bpmn:SubProcess')) {
- assign(actions, {
- 'replace': {
- group: 'edit',
- className: 'icon-screw-wrench',
- title: 'Change type',
- action: {
- click: function(event, element) {
- bpmnReplace.openChooser(getReplaceMenuPosition(element), element);
- }
- }
- }
- });
- }
- }
-
- if (bpmnElement.$instanceOf('bpmn:FlowNode') ||
- bpmnElement.$instanceOf('bpmn:InteractionNode')) {
-
- assign(actions, {
- 'append.text-annotation': appendAction('bpmn:TextAnnotation', 'icon-text-annotation'),
-
- 'connect': {
- group: 'connect',
- className: 'icon-connection-multi',
- title: 'Connect using Sequence/MessageFlow',
- action: {
- click: startConnect,
- dragstart: startConnect
- }
- }
- });
- }
-
- // Delete Element Entry
- assign(actions, {
- 'delete': {
- group: 'edit',
- className: 'icon-trash',
- title: 'Remove',
- action: {
- click: removeElement,
- dragstart: removeElement
- }
- }
- });
-
- return actions;
-};
-
-function isEventType(eventBo, type, definition) {
-
- var isType = eventBo.$instanceOf(type);
- var isDefinition = false;
-
- var definitions = eventBo.eventDefinitions || [];
- forEach(definitions, function(def) {
- if (def.$type === definition) {
- isDefinition = true;
- }
- });
-
- return isType && isDefinition;
-}
-
-
-module.exports = ContextPadProvider;
-
-},{"204":204,"325":325}],8:[function(_dereq_,module,exports){
-module.exports = {
- __depends__: [
- _dereq_(70),
- _dereq_(97),
- _dereq_(151),
- _dereq_(95),
- _dereq_(99),
- _dereq_(37)
- ],
- __init__: [ 'contextPadProvider' ],
- contextPadProvider: [ 'type', _dereq_(7) ]
-};
-},{"151":151,"37":37,"7":7,"70":70,"95":95,"97":97,"99":99}],9:[function(_dereq_,module,exports){
-'use strict';
-
-
-function BpmnKeyBindings(keyboard, spaceTool, lassoTool, directEditing, selection) {
-
- keyboard.addListener(function(key, modifiers) {
-
- if (keyboard.hasModifier(modifiers)) {
- return;
- }
-
- // S -> activate space tool
- if (key === 83) {
- spaceTool.activateSelection();
-
- return true;
- }
-
- // L -> activate lasso tool
- if (key === 108) {
- lassoTool.activateSelection();
-
- return true;
- }
-
- var currentSelection = selection.get();
-
- // E -> activate direct editing
- if (key === 69) {
- if (currentSelection.length) {
- directEditing.activate(currentSelection[0]);
- }
-
- return true;
- }
- });
-}
-
-BpmnKeyBindings.$inject = [ 'keyboard', 'spaceTool', 'lassoTool', 'directEditing', 'selection' ];
-
-module.exports = BpmnKeyBindings;
-},{}],10:[function(_dereq_,module,exports){
-module.exports = {
- __depends__: [
- _dereq_(105)
- ],
- __init__: [ 'bpmnKeyBindings' ],
- bpmnKeyBindings: [ 'type', _dereq_(9) ]
-};
-},{"105":105,"9":9}],11:[function(_dereq_,module,exports){
-'use strict';
-
-var UpdateLabelHandler = _dereq_(13);
-
-var LabelUtil = _dereq_(12);
-
-var is = _dereq_(47).is,
- isExpanded = _dereq_(45).isExpanded;
-
-
-var MIN_BOUNDS = {
- width: 150,
- height: 50
-};
-
-
-function LabelEditingProvider(eventBus, canvas, directEditing, commandStack, injector) {
-
- directEditing.registerProvider(this);
- commandStack.registerHandler('element.updateLabel', UpdateLabelHandler);
-
- // listen to dblclick on non-root elements
- eventBus.on('element.dblclick', function(event) {
- directEditing.activate(event.element);
- });
-
- // complete on followup canvas operation
- eventBus.on([ 'element.mousedown', 'drag.activate', 'canvas.viewbox.changed' ], function(event) {
- directEditing.complete();
- });
-
- // cancel on command stack changes
- eventBus.on([ 'commandStack.changed' ], function() {
- directEditing.cancel();
- });
-
-
- // activate direct editing for activities and text annotations
-
-
- if ('ontouchstart' in document.documentElement) {
- // we deactivate automatic label editing on mobile devices
- // as it breaks the user interaction workflow
-
- // TODO(nre): we should temporarily focus the edited element here
- // and release the focused viewport after the direct edit operation is finished
- } else {
- eventBus.on('create.end', 500, function(e) {
-
- var element = e.shape,
- canExecute = e.context.canExecute;
-
- if (!canExecute) {
- return;
- }
-
- if (is(element, 'bpmn:Task') || is(element, 'bpmn:TextAnnotation') ||
- (is(element, 'bpmn:SubProcess') && !isExpanded(element))) {
-
- directEditing.activate(element);
- }
- });
- }
-
- this._canvas = canvas;
- this._commandStack = commandStack;
-}
-
-LabelEditingProvider.$inject = [ 'eventBus', 'canvas', 'directEditing', 'commandStack', 'injector' ];
-
-module.exports = LabelEditingProvider;
-
-
-LabelEditingProvider.prototype.activate = function(element) {
-
- var text = LabelUtil.getLabel(element);
-
- if (text === undefined) {
- return;
- }
-
- var bbox = this.getEditingBBox(element);
-
- // adjust for expanded pools AND lanes
- if ((is(element, 'bpmn:Participant') && isExpanded(element)) || is(element, 'bpmn:Lane')) {
-
- bbox.width = MIN_BOUNDS.width;
- bbox.height = MIN_BOUNDS.height;
-
- bbox.x = bbox.x + 10 - bbox.width / 2;
- bbox.y = bbox.mid.y - bbox.height / 2;
- }
-
- // adjust for expanded sub processes
- if (is(element, 'bpmn:SubProcess') && isExpanded(element)) {
-
- bbox.height = MIN_BOUNDS.height;
-
- bbox.x = bbox.mid.x - bbox.width / 2;
- bbox.y = bbox.y + 10 - bbox.height / 2;
- }
-
- return { bounds: bbox, text: text };
-};
-
-
-LabelEditingProvider.prototype.getEditingBBox = function(element, maxBounds) {
-
- var target = element.label || element;
-
- var bbox = this._canvas.getAbsoluteBBox(target);
-
- var mid = {
- x: bbox.x + bbox.width / 2,
- y: bbox.y + bbox.height / 2
- };
-
- // external label
- if (target.labelTarget) {
- bbox.width = Math.max(bbox.width, MIN_BOUNDS.width);
- bbox.height = Math.max(bbox.height, MIN_BOUNDS.height);
-
- bbox.x = mid.x - bbox.width / 2;
- }
-
- bbox.mid = mid;
-
- return bbox;
-};
-
-
-LabelEditingProvider.prototype.update = function(element, newLabel) {
- this._commandStack.execute('element.updateLabel', {
- element: element,
- newLabel: newLabel
- });
-};
-},{"12":12,"13":13,"45":45,"47":47}],12:[function(_dereq_,module,exports){
-'use strict';
-
-function getLabelAttr(semantic) {
- if (semantic.$instanceOf('bpmn:FlowElement') ||
- semantic.$instanceOf('bpmn:Participant') ||
- semantic.$instanceOf('bpmn:Lane') ||
- semantic.$instanceOf('bpmn:SequenceFlow') ||
- semantic.$instanceOf('bpmn:MessageFlow')) {
- return 'name';
- }
-
- if (semantic.$instanceOf('bpmn:TextAnnotation')) {
- return 'text';
- }
-}
-
-module.exports.getLabel = function(element) {
- var semantic = element.businessObject,
- attr = getLabelAttr(semantic);
-
- if (attr) {
- return semantic[attr] || '';
- }
-};
-
-
-module.exports.setLabel = function(element, text) {
- var semantic = element.businessObject,
- attr = getLabelAttr(semantic);
-
- if (attr) {
- semantic[attr] = text;
- }
-
- var label = element.label || element;
-
- // show label
- label.hidden = false;
-
- return label;
-};
-},{}],13:[function(_dereq_,module,exports){
-'use strict';
-
-var LabelUtil = _dereq_(12);
-
-
-/**
- * A handler that updates the text of a BPMN element.
- *
- * @param {EventBus} eventBus
- */
-function UpdateTextHandler(eventBus) {
-
- function setText(element, text) {
- var label = LabelUtil.setLabel(element, text);
-
- eventBus.fire('element.changed', { element: label });
- }
-
- function execute(ctx) {
- ctx.oldLabel = LabelUtil.getLabel(ctx.element);
- return setText(ctx.element, ctx.newLabel);
- }
-
- function revert(ctx) {
- return setText(ctx.element, ctx.oldLabel);
- }
-
-
- function canExecute(ctx) {
- return true;
- }
-
- // API
-
- this.execute = execute;
- this.revert = revert;
-
- this.canExecute = canExecute;
-}
-
-
-UpdateTextHandler.$inject = [ 'eventBus' ];
-
-module.exports = UpdateTextHandler;
-},{"12":12}],14:[function(_dereq_,module,exports){
-module.exports = {
- __depends__: [
- _dereq_(77),
- _dereq_(93),
- _dereq_(70)
- ],
- __init__: [ 'labelEditingProvider' ],
- labelEditingProvider: [ 'type', _dereq_(11) ]
-};
-},{"11":11,"70":70,"77":77,"93":93}],15:[function(_dereq_,module,exports){
-'use strict';
-
-var map = _dereq_(207),
- assign = _dereq_(325),
- pick = _dereq_(330);
-
-
-function BpmnFactory(moddle) {
- this._model = moddle;
-}
-
-BpmnFactory.$inject = [ 'moddle' ];
-
-
-BpmnFactory.prototype._needsId = function(element) {
- return element.$instanceOf('bpmn:RootElement') ||
- element.$instanceOf('bpmn:FlowElement') ||
- element.$instanceOf('bpmn:MessageFlow') ||
- element.$instanceOf('bpmn:Artifact') ||
- element.$instanceOf('bpmn:Participant') ||
- element.$instanceOf('bpmn:Process') ||
- element.$instanceOf('bpmn:Collaboration') ||
- element.$instanceOf('bpmndi:BPMNShape') ||
- element.$instanceOf('bpmndi:BPMNEdge') ||
- element.$instanceOf('bpmndi:BPMNDiagram') ||
- element.$instanceOf('bpmndi:BPMNPlane');
-};
-
-BpmnFactory.prototype._ensureId = function(element) {
-
- // generate semantic ids for elements
- // bpmn:SequenceFlow -> SequenceFlow_ID
- var prefix = (element.$type || '').replace(/^[^:]*:/g, '') + '_';
-
- if (!element.id && this._needsId(element)) {
- element.id = this._model.ids.nextPrefixed(prefix, element);
- }
-};
-
-
-BpmnFactory.prototype.create = function(type, attrs) {
- var element = this._model.create(type, attrs || {});
-
- this._ensureId(element);
-
- return element;
-};
-
-
-BpmnFactory.prototype.createDiLabel = function() {
- return this.create('bpmndi:BPMNLabel', {
- bounds: this.createDiBounds()
- });
-};
-
-
-BpmnFactory.prototype.createDiShape = function(semantic, bounds, attrs) {
-
- return this.create('bpmndi:BPMNShape', assign({
- bpmnElement: semantic,
- bounds: this.createDiBounds(bounds)
- }, attrs));
-};
-
-
-BpmnFactory.prototype.createDiBounds = function(bounds) {
- return this.create('dc:Bounds', bounds);
-};
-
-
-BpmnFactory.prototype.createDiWaypoints = function(waypoints) {
- return map(waypoints, function(pos) {
- return this.createDiWaypoint(pos);
- }, this);
-};
-
-BpmnFactory.prototype.createDiWaypoint = function(point) {
- return this.create('dc:Point', pick(point, [ 'x', 'y' ]));
-};
-
-
-BpmnFactory.prototype.createDiEdge = function(semantic, waypoints, attrs) {
- return this.create('bpmndi:BPMNEdge', assign({
- bpmnElement: semantic
- }, attrs));
-};
-
-BpmnFactory.prototype.createDiPlane = function(semantic) {
- return this.create('bpmndi:BPMNPlane', {
- bpmnElement: semantic
- });
-};
-
-module.exports = BpmnFactory;
-
-},{"207":207,"325":325,"330":330}],16:[function(_dereq_,module,exports){
-'use strict';
-
-var inherits = _dereq_(195);
-
-var assign = _dereq_(325);
-
-var BaseLayouter = _dereq_(164),
- LayoutUtil = _dereq_(166),
- ManhattanLayout = _dereq_(167);
-
-var is = _dereq_(47).is;
-
-
-function BpmnLayouter() {}
-
-inherits(BpmnLayouter, BaseLayouter);
-
-module.exports = BpmnLayouter;
-
-
-function getAttachment(waypoints, idx, shape) {
- var point = waypoints && waypoints[idx];
-
- return point ? (point.original || point) : LayoutUtil.getMidPoint(shape);
-}
-
-
-BpmnLayouter.prototype.layoutConnection = function(connection, hints) {
- var source = connection.source,
- target = connection.target,
- waypoints = connection.waypoints,
- start,
- end;
-
- var layoutManhattan,
- updatedWaypoints;
-
- start = getAttachment(waypoints, 0, source);
- end = getAttachment(waypoints, waypoints && waypoints.length - 1, target);
-
- // manhattan layout sequence / message flows
- if (is(connection, 'bpmn:MessageFlow')) {
- layoutManhattan = {
- preferStraight: true,
- preferVertical: true
- };
- }
-
- if (is(connection, 'bpmn:SequenceFlow')) {
- layoutManhattan = {};
- }
-
- if (layoutManhattan) {
-
- layoutManhattan = assign(layoutManhattan, hints);
-
- updatedWaypoints =
- ManhattanLayout.repairConnection(
- source, target, start, end,
- waypoints,
- layoutManhattan);
- }
-
- return updatedWaypoints || [ start, end ];
-};
-},{"164":164,"166":166,"167":167,"195":195,"325":325,"47":47}],17:[function(_dereq_,module,exports){
-'use strict';
-
-var assign = _dereq_(325),
- forEach = _dereq_(204),
- inherits = _dereq_(195);
-
-var Collections = _dereq_(175),
- Model = _dereq_(168);
-
-var CommandInterceptor = _dereq_(75);
-
-
-/**
- * A handler responsible for updating the underlying BPMN 2.0 XML + DI
- * once changes on the diagram happen
- */
-function BpmnUpdater(eventBus, bpmnFactory, connectionDocking) {
-
- CommandInterceptor.call(this, eventBus);
-
- this._bpmnFactory = bpmnFactory;
-
- var self = this;
-
-
-
- ////// connection cropping /////////////////////////
-
- // crop connection ends during create/update
- function cropConnection(e) {
- var context = e.context,
- connection;
-
- if (!context.cropped) {
- connection = context.connection;
- connection.waypoints = connectionDocking.getCroppedWaypoints(connection);
- context.cropped = true;
- }
- }
-
- this.executed([
- 'connection.layout',
- 'connection.create',
- 'connection.reconnectEnd',
- 'connection.reconnectStart'
- ], cropConnection);
-
- this.reverted([ 'connection.layout' ], function(e) {
- delete e.context.cropped;
- });
-
-
-
- ////// BPMN + DI update /////////////////////////
-
-
- // update parent
- function updateParent(e) {
- self.updateParent(e.context.shape || e.context.connection);
- }
-
- this.executed([ 'shape.move',
- 'shape.create',
- 'shape.delete',
- 'connection.create',
- 'connection.move',
- 'connection.delete' ], updateParent);
- this.reverted([ 'shape.move',
- 'shape.create',
- 'shape.delete',
- 'connection.create',
- 'connection.move',
- 'connection.delete' ], updateParent);
-
- /*
- * ## Updating Parent
- *
- * When morphing a Process into a Collaboration or vice-versa,
- * make sure that both the *semantic* and *di* parent of each element
- * is updated.
- *
- */
- function updateRoot(event) {
- var context = event.context,
- oldRoot = context.oldRoot,
- children = oldRoot.children;
-
- forEach(children, function(child) {
- self.updateParent(child);
- });
- }
-
- this.executed([ 'canvas.updateRoot' ], updateRoot);
- this.reverted([ 'canvas.updateRoot' ], updateRoot);
-
-
- // update bounds
- function updateBounds(e) {
- self.updateBounds(e.context.shape);
- }
-
- this.executed([ 'shape.move', 'shape.create', 'shape.resize' ], updateBounds);
- this.reverted([ 'shape.move', 'shape.create', 'shape.resize' ], updateBounds);
-
-
- // attach / detach connection
- function updateConnection(e) {
- self.updateConnection(e.context.connection);
- }
-
- this.executed([
- 'connection.create',
- 'connection.move',
- 'connection.delete',
- 'connection.reconnectEnd',
- 'connection.reconnectStart'
- ], updateConnection);
-
- this.reverted([
- 'connection.create',
- 'connection.move',
- 'connection.delete',
- 'connection.reconnectEnd',
- 'connection.reconnectStart'
- ], updateConnection);
-
-
- // update waypoints
- function updateConnectionWaypoints(e) {
- self.updateConnectionWaypoints(e.context.connection);
- }
-
- this.executed([
- 'connection.layout',
- 'connection.move',
- 'connection.updateWaypoints',
- 'connection.reconnectEnd',
- 'connection.reconnectStart'
- ], updateConnectionWaypoints);
-
- this.reverted([
- 'connection.layout',
- 'connection.move',
- 'connection.updateWaypoints',
- 'connection.reconnectEnd',
- 'connection.reconnectStart'
- ], updateConnectionWaypoints);
-}
-
-inherits(BpmnUpdater, CommandInterceptor);
-
-module.exports = BpmnUpdater;
-
-BpmnUpdater.$inject = [ 'eventBus', 'bpmnFactory', 'connectionDocking'];
-
-
-/////// implementation //////////////////////////////////
-
-
-BpmnUpdater.prototype.updateParent = function(element) {
-
- // do not update BPMN 2.0 label parent
- if (element instanceof Model.Label) {
- return;
- }
-
- var parentShape = element.parent;
-
- var businessObject = element.businessObject,
- parentBusinessObject = parentShape && parentShape.businessObject,
- parentDi = parentBusinessObject && parentBusinessObject.di;
-
- this.updateSemanticParent(businessObject, parentBusinessObject);
-
- this.updateDiParent(businessObject.di, parentDi);
-};
-
-
-BpmnUpdater.prototype.updateBounds = function(shape) {
-
- var di = shape.businessObject.di;
-
- var bounds = (shape instanceof Model.Label) ? this._getLabel(di).bounds : di.bounds;
-
- assign(bounds, {
- x: shape.x,
- y: shape.y,
- width: shape.width,
- height: shape.height
- });
-};
-
-
-BpmnUpdater.prototype.updateDiParent = function(di, parentDi) {
-
- if (parentDi && !parentDi.$instanceOf('bpmndi:BPMNPlane')) {
- parentDi = parentDi.$parent;
- }
-
- if (di.$parent === parentDi) {
- return;
- }
-
- var planeElements = (parentDi || di.$parent).get('planeElement');
-
- if (parentDi) {
- planeElements.push(di);
- di.$parent = parentDi;
- } else {
- Collections.remove(planeElements, di);
- di.$parent = null;
- }
-};
-
-function getDefinitions(element) {
- while (element && !element.$instanceOf('bpmn:Definitions')) {
- element = element.$parent;
- }
-
- return element;
-}
-
-BpmnUpdater.prototype.updateSemanticParent = function(businessObject, newParent) {
-
- var containment;
-
- if (businessObject.$parent === newParent) {
- return;
- }
-
- if (businessObject.$instanceOf('bpmn:FlowElement')) {
-
- if (newParent && newParent.$instanceOf('bpmn:Participant')) {
- newParent = newParent.processRef;
- }
-
- containment = 'flowElements';
-
- } else
-
- if (businessObject.$instanceOf('bpmn:Artifact')) {
-
- while (newParent &&
- !newParent.$instanceOf('bpmn:Process') &&
- !newParent.$instanceOf('bpmn:SubProcess') &&
- !newParent.$instanceOf('bpmn:Collaboration')) {
-
- if (newParent.$instanceOf('bpmn:Participant')) {
- newParent = newParent.processRef;
- break;
- } else {
- newParent = newParent.$parent;
- }
- }
-
- containment = 'artifacts';
- } else
-
- if (businessObject.$instanceOf('bpmn:MessageFlow')) {
- containment = 'messageFlows';
-
- } else
-
- if (businessObject.$instanceOf('bpmn:Participant')) {
- containment = 'participants';
-
- // make sure the participants process is properly attached / detached
- // from the XML document
-
- var process = businessObject.processRef,
- definitions;
-
- if (process) {
- definitions = getDefinitions(businessObject.$parent || newParent);
-
- if (businessObject.$parent) {
- Collections.remove(definitions.get('rootElements'), process);
- process.$parent = null;
- }
-
- if (newParent) {
- Collections.add(definitions.get('rootElements'), process);
- process.$parent = definitions;
- }
- }
- }
-
- if (!containment) {
- throw new Error('no parent for ', businessObject, newParent);
- }
-
- var children;
-
- if (businessObject.$parent) {
- // remove from old parent
- children = businessObject.$parent.get(containment);
- Collections.remove(children, businessObject);
- }
-
- if (!newParent) {
- businessObject.$parent = null;
- } else {
- // add to new parent
- children = newParent.get(containment);
- children.push(businessObject);
- businessObject.$parent = newParent;
- }
-};
-
-
-BpmnUpdater.prototype.updateConnectionWaypoints = function(connection) {
-
- connection.businessObject.di.set('waypoint', this._bpmnFactory.createDiWaypoints(connection.waypoints));
-};
-
-
-BpmnUpdater.prototype.updateConnection = function(connection) {
-
- var businessObject = connection.businessObject,
- newSource = connection.source && connection.source.businessObject,
- newTarget = connection.target && connection.target.businessObject;
-
- var inverseSet = businessObject.$instanceOf('bpmn:SequenceFlow');
-
- if (businessObject.sourceRef !== newSource) {
- if (inverseSet) {
- Collections.remove(businessObject.sourceRef && businessObject.sourceRef.get('outgoing'), businessObject);
-
- if (newSource) {
- newSource.get('outgoing').push(businessObject);
- }
- }
-
- businessObject.sourceRef = newSource;
- }
- if (businessObject.targetRef !== newTarget) {
- if (inverseSet) {
- Collections.remove(businessObject.targetRef && businessObject.targetRef.get('incoming'), businessObject);
-
- if (newTarget) {
- newTarget.get('incoming').push(businessObject);
- }
- }
-
- businessObject.targetRef = newTarget;
- }
-
- businessObject.di.set('waypoint', this._bpmnFactory.createDiWaypoints(connection.waypoints));
-};
-
-
-/////// helpers /////////////////////////////////////////
-
-BpmnUpdater.prototype._getLabel = function(di) {
- if (!di.label) {
- di.label = this._bpmnFactory.createDiLabel();
- }
-
- return di.label;
-};
-},{"168":168,"175":175,"195":195,"204":204,"325":325,"75":75}],18:[function(_dereq_,module,exports){
-'use strict';
-
-var assign = _dereq_(325),
- inherits = _dereq_(195);
-
-var BaseElementFactory = _dereq_(79),
- LabelUtil = _dereq_(46);
-
-
-/**
- * A bpmn-aware factory for diagram-js shapes
- */
-function ElementFactory(bpmnFactory, moddle) {
- BaseElementFactory.call(this);
-
- this._bpmnFactory = bpmnFactory;
- this._moddle = moddle;
-}
-
-inherits(ElementFactory, BaseElementFactory);
-
-
-ElementFactory.$inject = [ 'bpmnFactory', 'moddle' ];
-
-module.exports = ElementFactory;
-
-ElementFactory.prototype.baseCreate = BaseElementFactory.prototype.create;
-
-ElementFactory.prototype.create = function(elementType, attrs) {
-
- // no special magic for labels,
- // we assume their businessObjects have already been created
- // and wired via attrs
- if (elementType === 'label') {
- return this.baseCreate(elementType, assign({ type: 'label' }, LabelUtil.DEFAULT_LABEL_SIZE, attrs));
- }
-
- attrs = attrs || {};
-
- var businessObject = attrs.businessObject,
- size;
-
- if (!businessObject) {
- if (!attrs.type) {
- throw new Error('no shape type specified');
- }
-
- businessObject = this._bpmnFactory.create(attrs.type);
- }
-
- if (!businessObject.di) {
- if (elementType === 'root') {
- businessObject.di = this._bpmnFactory.createDiPlane(businessObject, [], {
- id: businessObject.id + '_di'
- });
- } else
- if (elementType === 'connection') {
- businessObject.di = this._bpmnFactory.createDiEdge(businessObject, [], {
- id: businessObject.id + '_di'
- });
- } else {
- businessObject.di = this._bpmnFactory.createDiShape(businessObject, {}, {
- id: businessObject.id + '_di'
- });
- }
- }
-
- if (!!attrs.isExpanded) {
- businessObject.di.isExpanded = attrs.isExpanded;
- }
-
- if (businessObject.$instanceOf('bpmn:ExclusiveGateway')) {
- businessObject.di.isMarkerVisible = true;
- }
-
- if (attrs._eventDefinitionType) {
- var eventDefinitions = businessObject.get('eventDefinitions') || [],
- newEventDefinition = this._moddle.create(attrs._eventDefinitionType);
-
- eventDefinitions.push(newEventDefinition);
- businessObject.eventDefinitions = eventDefinitions;
- }
-
- size = this._getDefaultSize(businessObject);
-
- attrs = assign({
- businessObject: businessObject,
- id: businessObject.id
- }, size, attrs);
-
- return this.baseCreate(elementType, attrs);
-};
-
-
-ElementFactory.prototype._getDefaultSize = function(semantic) {
-
- if (semantic.$instanceOf('bpmn:SubProcess')) {
- var isExpanded = semantic.di.isExpanded === true;
-
- if (isExpanded) {
- return { width: 350, height: 200 };
- } else {
- return { width: 100, height: 80 };
- }
- }
-
- if (semantic.$instanceOf('bpmn:Task')) {
- return { width: 100, height: 80 };
- }
-
- if (semantic.$instanceOf('bpmn:Gateway')) {
- return { width: 50, height: 50 };
- }
-
- if (semantic.$instanceOf('bpmn:Event')) {
- return { width: 36, height: 36 };
- }
-
- if (semantic.$instanceOf('bpmn:Participant')) {
- return { width: 600, height: 250 };
- }
-
- return { width: 100, height: 80 };
-};
-
-
-ElementFactory.prototype.createParticipantShape = function(collapsed) {
-
- var participantShape = this.createShape({ type: 'bpmn:Participant' });
-
- if (!collapsed) {
- participantShape.businessObject.processRef = this._bpmnFactory.create('bpmn:Process');
- }
-
- return participantShape;
-};
-},{"195":195,"325":325,"46":46,"79":79}],19:[function(_dereq_,module,exports){
-'use strict';
-
-var assign = _dereq_(325),
- forEach = _dereq_(204);
-
-var LabelUtil = _dereq_(46);
-
-var hasExternalLabel = LabelUtil.hasExternalLabel,
- getExternalLabelMid = LabelUtil.getExternalLabelMid;
-
-
-function LabelSupport(eventBus, modeling, bpmnFactory) {
-
- // create external labels on shape creation
-
- eventBus.on([
- 'commandStack.shape.create.postExecute',
- 'commandStack.connection.create.postExecute'
- ], function(e) {
- var context = e.context;
-
- var element = context.shape || context.connection,
- businessObject = element.businessObject;
-
- var position;
-
- if (hasExternalLabel(businessObject)) {
- position = getExternalLabelMid(element);
- modeling.createLabel(element, position, {
- id: businessObject.id + '_label',
- businessObject: businessObject
- });
- }
- });
-
-
- // indicate label is dragged during move
-
- // we need to add labels to the list of selected
- // shapes before the visuals get drawn.
- //
- // Hence this awesome magic number.
- //
- eventBus.on('shape.move.start', function(e) {
-
- var context = e.context,
- shapes = context.shapes;
-
- var labels = [];
-
- forEach(shapes, function(element) {
- var label = element.label;
-
- if (label && !label.hidden && context.shapes.indexOf(label) === -1) {
- labels.push(label);
- }
- });
-
- forEach(labels, function(label) {
- shapes.push(label);
- });
- });
-
-
- // move labels with shapes
-
- eventBus.on([
- 'commandStack.shapes.move.postExecute'
- ], function(e) {
-
- var context = e.context,
- closure = context.closure,
- enclosedElements = closure.enclosedElements;
-
- // ensure we move all labels with their respective elements
- // if they have not been moved already
-
- forEach(enclosedElements, function(e) {
- if (e.label && !enclosedElements[e.label.id]) {
- modeling.moveShape(e.label, context.delta, e.parent);
- }
- });
- });
-
-
- // update di information on label movement and creation
-
- eventBus.on([
- 'commandStack.label.create.executed',
- 'commandStack.shape.moved.executed'
- ], function(e) {
-
- var element = e.context.shape,
- businessObject = element.businessObject,
- di = businessObject.di;
-
- // we want to trigger on real labels only
- if (!element.labelTarget) {
- return;
- }
-
- if (!di.label) {
- di.label = bpmnFactory.create('bpmndi:BPMNLabel', {
- bounds: bpmnFactory.create('dc:Bounds')
- });
- }
-
- assign(di.label.bounds, {
- x: element.x,
- y: element.y,
- width: element.width,
- height: element.height
- });
- });
-}
-
-LabelSupport.$inject = [ 'eventBus', 'modeling', 'bpmnFactory' ];
-
-module.exports = LabelSupport;
-
-},{"204":204,"325":325,"46":46}],20:[function(_dereq_,module,exports){
-'use strict';
-
-var inherits = _dereq_(195);
-
-var BaseModeling = _dereq_(108);
-
-var UpdatePropertiesHandler = _dereq_(29),
- UpdateCanvasRootHandler = _dereq_(28);
-
-
-/**
- * BPMN 2.0 modeling features activator
- *
- * @param {EventBus} eventBus
- * @param {ElementFactory} elementFactory
- * @param {CommandStack} commandStack
- * @param {BpmnRules} bpmnRules
- */
-function Modeling(eventBus, elementFactory, commandStack, bpmnRules) {
- BaseModeling.call(this, eventBus, elementFactory, commandStack);
-
- this._bpmnRules = bpmnRules;
-}
-
-inherits(Modeling, BaseModeling);
-
-Modeling.$inject = [ 'eventBus', 'elementFactory', 'commandStack', 'bpmnRules' ];
-
-module.exports = Modeling;
-
-
-Modeling.prototype.getHandlers = function() {
- var handlers = BaseModeling.prototype.getHandlers.call(this);
-
- handlers['element.updateProperties'] = UpdatePropertiesHandler;
- handlers['canvas.updateRoot'] = UpdateCanvasRootHandler;
-
- return handlers;
-};
-
-
-Modeling.prototype.updateLabel = function(element, newLabel) {
- this._commandStack.execute('element.updateLabel', {
- element: element,
- newLabel: newLabel
- });
-};
-
-
-var getSharedParent = _dereq_(21).getSharedParent;
-
-Modeling.prototype.connect = function(source, target, attrs) {
-
- var bpmnRules = this._bpmnRules;
-
- if (!attrs) {
- if (bpmnRules.canConnectMessageFlow(source, target)) {
- attrs = {
- type: 'bpmn:MessageFlow'
- };
- } else
- if (bpmnRules.canConnectSequenceFlow(source, target)) {
- attrs = {
- type: 'bpmn:SequenceFlow'
- };
- } else {
- attrs = {
- type: 'bpmn:Association'
- };
- }
- }
-
- return this.createConnection(source, target, attrs, getSharedParent(source, target));
-};
-
-
-Modeling.prototype.updateProperties = function(element, properties) {
- this._commandStack.execute('element.updateProperties', {
- element: element,
- properties: properties
- });
-};
-
-
-/**
- * Transform the current diagram into a collaboration.
- *
- * @return {djs.model.Root} the new root element
- */
-Modeling.prototype.makeCollaboration = function() {
-
- var collaborationElement = this._create('root', {
- type: 'bpmn:Collaboration'
- });
-
- var context = {
- newRoot: collaborationElement
- };
-
- this._commandStack.execute('canvas.updateRoot', context);
-
- return collaborationElement;
-};
-
-/**
- * Transform the current diagram into a process.
- *
- * @return {djs.model.Root} the new root element
- */
-Modeling.prototype.makeProcess = function() {
-
- var processElement = this._create('root', {
- type: 'bpmn:Process'
- });
-
- var context = {
- newRoot: processElement
- };
-
- this._commandStack.execute('canvas.updateRoot', context);
-};
-},{"108":108,"195":195,"21":21,"28":28,"29":29}],21:[function(_dereq_,module,exports){
-'use strict';
-
-var find = _dereq_(203);
-
-
-function getParents(element) {
-
- var parents = [];
-
- while (element) {
- element = element.parent;
-
- if (element) {
- parents.push(element);
- }
- }
-
- return parents;
-}
-
-module.exports.getParents = getParents;
-
-
-function getSharedParent(a, b) {
-
- var parentsA = getParents(a),
- parentsB = getParents(b);
-
- return find(parentsA, function(parent) {
- return parentsB.indexOf(parent) !== -1;
- });
-}
-
-module.exports.getSharedParent = getSharedParent;
-},{"203":203}],22:[function(_dereq_,module,exports){
-'use strict';
-
-var inherits = _dereq_(195);
-
-var is = _dereq_(47).is;
-
-var CommandInterceptor = _dereq_(75);
-
-
-function AppendBehavior(eventBus, elementFactory, bpmnRules) {
-
- CommandInterceptor.call(this, eventBus);
-
- // assign correct shape position unless already set
-
- this.preExecute('shape.append', function(context) {
-
- var source = context.source,
- shape = context.shape;
-
- if (!context.position) {
-
- if (is(shape, 'bpmn:TextAnnotation')) {
- context.position = {
- x: source.x + source.width / 2 + 75,
- y: source.y - (50) - shape.height / 2
- };
- } else {
- context.position = {
- x: source.x + source.width + 80 + shape.width / 2,
- y: source.y + source.height / 2
- };
- }
- }
- }, true);
-}
-
-
-AppendBehavior.$inject = [ 'eventBus', 'elementFactory', 'bpmnRules' ];
-
-inherits(AppendBehavior, CommandInterceptor);
-
-module.exports = AppendBehavior;
-},{"195":195,"47":47,"75":75}],23:[function(_dereq_,module,exports){
-'use strict';
-
-var inherits = _dereq_(195);
-
-var CommandInterceptor = _dereq_(75);
-
-var is = _dereq_(47).is;
-
-/**
- * BPMN specific create behavior
- */
-function CreateBehavior(eventBus, modeling) {
-
- CommandInterceptor.call(this, eventBus);
-
-
- /**
- * morph process into collaboration before adding
- * participant onto collaboration
- */
-
- this.preExecute('shape.create', function(context) {
-
- var parent = context.parent,
- shape = context.shape,
- position = context.position;
-
- if (is(parent, 'bpmn:Process') && is(shape, 'bpmn:Participant')) {
-
- // this is going to detach the process root
- // and set the returned collaboration element
- // as the new root element
- var collaborationElement = modeling.makeCollaboration();
-
- // monkey patch the create context
- // so that the participant is being dropped
- // onto the new collaboration root instead
- context.position = position;
- context.parent = collaborationElement;
-
- context.processRoot = parent;
- }
- }, true);
-
- this.execute('shape.create', function(context) {
-
- var processRoot = context.processRoot,
- shape = context.shape;
-
- if (processRoot) {
- context.oldProcessRef = shape.businessObject.processRef;
-
- // assign the participant processRef
- shape.businessObject.processRef = processRoot.businessObject;
- }
- }, true);
-
- this.revert('shape.create', function(context) {
- var processRoot = context.processRoot,
- shape = context.shape;
-
- if (processRoot) {
- // assign the participant processRef
- shape.businessObject.processRef = context.oldProcessRef;
- }
- }, true);
-
- this.postExecute('shape.create', function(context) {
-
- var processRoot = context.processRoot,
- shape = context.shape;
-
- if (processRoot) {
- // process root is already detached at this point
- var processChildren = processRoot.children.slice();
- modeling.moveShapes(processChildren, { x: 0, y: 0 }, shape);
- }
- }, true);
-
-}
-
-CreateBehavior.$inject = [ 'eventBus', 'modeling' ];
-
-inherits(CreateBehavior, CommandInterceptor);
-
-module.exports = CreateBehavior;
-},{"195":195,"47":47,"75":75}],24:[function(_dereq_,module,exports){
-'use strict';
-
-var forEach = _dereq_(204),
- inherits = _dereq_(195);
-
-var CommandInterceptor = _dereq_(75);
-
-var is = _dereq_(47).is,
- getSharedParent = _dereq_(21).getSharedParent;
-
-
-function DropBehavior(eventBus, modeling, bpmnRules) {
-
- CommandInterceptor.call(this, eventBus);
-
- // remove sequence flows that should not be allowed
- // after a move operation
-
- this.postExecute('shapes.move', function(context) {
-
- var closure = context.closure,
- allConnections = closure.allConnections;
-
- forEach(allConnections, function(c) {
-
- var source = c.source,
- target = c.target;
-
- var replacementType,
- remove;
-
- /**
- * Check if incoming or outgoing connections
- * can stay or could be substituted with an
- * appropriate replacement.
- *
- * This holds true for SequenceFlow <> MessageFlow.
- */
-
- if (is(c, 'bpmn:SequenceFlow')) {
- if (!bpmnRules.canConnectSequenceFlow(source, target)) {
- remove = true;
- }
-
- if (bpmnRules.canConnectMessageFlow(source, target)) {
- replacementType = 'bpmn:MessageFlow';
- }
- }
-
- // transform message flows into sequence flows, if possible
-
- if (is(c, 'bpmn:MessageFlow')) {
-
- if (!bpmnRules.canConnectMessageFlow(source, target)) {
- remove = true;
- }
-
- if (bpmnRules.canConnectSequenceFlow(source, target)) {
- replacementType = 'bpmn:SequenceFlow';
- }
- }
-
- if (is(c, 'bpmn:Association') && !bpmnRules.canConnectAssociation(source, target)) {
- remove = true;
- }
-
-
- // remove invalid connection
- if (remove) {
- modeling.removeConnection(c);
- }
-
- // replace SequenceFlow <> MessageFlow
-
- if (replacementType) {
- modeling.createConnection(source, target, {
- type: replacementType,
- waypoints: c.waypoints.slice()
- }, getSharedParent(source, target));
- }
- });
- }, true);
-}
-
-inherits(DropBehavior, CommandInterceptor);
-
-DropBehavior.$inject = [ 'eventBus', 'modeling', 'bpmnRules' ];
-
-module.exports = DropBehavior;
-},{"195":195,"204":204,"21":21,"47":47,"75":75}],25:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_(47).is;
-
-
-function ModelingFeedback(eventBus, tooltips) {
-
- function showError(position, message) {
- tooltips.add({
- position: {
- x: position.x + 5,
- y: position.y + 5
- },
- type: 'error',
- timeout: 2000,
- html: '' + message + '
'
- });
- }
-
- eventBus.on([ 'shape.move.rejected', 'create.rejected' ], function(event) {
-
- var context = event.context,
- shape = context.shape,
- target = context.target;
-
- if (is(target, 'bpmn:Collaboration') && is(shape, 'bpmn:FlowNode')) {
- showError(event, 'flow elements must be children of pools/participants');
- }
- });
-
-}
-
-
-ModelingFeedback.$inject = [ 'eventBus', 'tooltips' ];
-
-module.exports = ModelingFeedback;
-},{"47":47}],26:[function(_dereq_,module,exports){
-'use strict';
-
-var inherits = _dereq_(195);
-
-var CommandInterceptor = _dereq_(75);
-
-var is = _dereq_(47).is;
-
-
-/**
- * BPMN specific remove behavior
- */
-function RemoveBehavior(eventBus, modeling) {
-
- CommandInterceptor.call(this, eventBus);
-
-
- /**
- * morph collaboration diagram into process diagram
- * after the last participant has been removed
- */
-
- this.preExecute('shape.delete', function(context) {
-
- var shape = context.shape,
- parent = shape.parent;
-
- // activate the behavior if the shape to be removed
- // is a participant
- if (is(shape, 'bpmn:Participant')) {
- context.collaborationRoot = parent;
- }
- }, true);
-
- this.postExecute('shape.delete', function(context) {
-
- var collaborationRoot = context.collaborationRoot;
-
- if (collaborationRoot && !collaborationRoot.businessObject.participants.length) {
- // replace empty collaboration with process diagram
- modeling.makeProcess();
- }
- }, true);
-
-}
-
-RemoveBehavior.$inject = [ 'eventBus', 'modeling' ];
-
-inherits(RemoveBehavior, CommandInterceptor);
-
-module.exports = RemoveBehavior;
-},{"195":195,"47":47,"75":75}],27:[function(_dereq_,module,exports){
-module.exports = {
- __init__: [
- 'appendBehavior',
- 'createBehavior',
- 'dropBehavior',
- 'removeBehavior',
- 'modelingFeedback'
- ],
- appendBehavior: [ 'type', _dereq_(22) ],
- dropBehavior: [ 'type', _dereq_(24) ],
- createBehavior: [ 'type', _dereq_(23) ],
- removeBehavior: [ 'type', _dereq_(26) ],
- modelingFeedback: [ 'type', _dereq_(25) ]
-};
-},{"22":22,"23":23,"24":24,"25":25,"26":26}],28:[function(_dereq_,module,exports){
-'use strict';
-
-var Collections = _dereq_(175);
-
-
-function UpdateCanvasRootHandler(canvas, modeling) {
- this._canvas = canvas;
- this._modeling = modeling;
-}
-
-UpdateCanvasRootHandler.$inject = [ 'canvas', 'modeling' ];
-
-module.exports = UpdateCanvasRootHandler;
-
-
-UpdateCanvasRootHandler.prototype.execute = function(context) {
-
- var canvas = this._canvas;
-
- var newRoot = context.newRoot,
- newRootBusinessObject = newRoot.businessObject,
- oldRoot = canvas.getRootElement(),
- oldRootBusinessObject = oldRoot.businessObject,
- bpmnDefinitions = oldRootBusinessObject.$parent,
- diPlane = oldRootBusinessObject.di;
-
- // (1) replace process old <> new root
- canvas.setRootElement(newRoot, true);
-
- // (2) update root elements
- Collections.add(bpmnDefinitions.rootElements, newRootBusinessObject);
- newRootBusinessObject.$parent = bpmnDefinitions;
-
- Collections.remove(bpmnDefinitions.rootElements, oldRootBusinessObject);
- oldRootBusinessObject.$parent = null;
-
- // (3) wire di
- oldRootBusinessObject.di = null;
-
- diPlane.bpmnElement = newRootBusinessObject;
- newRootBusinessObject.di = diPlane;
-
- context.oldRoot = oldRoot;
-};
-
-
-UpdateCanvasRootHandler.prototype.revert = function(context) {
-
- var canvas = this._canvas;
-
- var newRoot = context.newRoot,
- newRootBusinessObject = newRoot.businessObject,
- oldRoot = context.oldRoot,
- oldRootBusinessObject = oldRoot.businessObject,
- bpmnDefinitions = newRootBusinessObject.$parent,
- diPlane = newRootBusinessObject.di;
-
- // (1) replace process old <> new root
- canvas.setRootElement(oldRoot, true);
-
- // (2) update root elements
- Collections.remove(bpmnDefinitions.rootElements, newRootBusinessObject);
- newRootBusinessObject.$parent = null;
-
- Collections.add(bpmnDefinitions.rootElements, oldRootBusinessObject);
- oldRootBusinessObject.$parent = bpmnDefinitions;
-
- // (3) wire di
- newRootBusinessObject.di = null;
-
- diPlane.bpmnElement = oldRootBusinessObject;
- oldRootBusinessObject.di = diPlane;
-};
-},{"175":175}],29:[function(_dereq_,module,exports){
-'use strict';
-
-var assign = _dereq_(325),
- pick = _dereq_(330),
- keys = _dereq_(326);
-
-var DEFAULT_FLOW = 'default',
- NAME = 'name',
- ID = 'id';
-
-
-/**
- * A handler that implements a BPMN 2.0 property update.
- *
- * This should be used to set simple properties on elements with
- * an underlying BPMN business object.
- *
- * Use respective diagram-js provided handlers if you would
- * like to perform automated modeling.
- */
-function UpdatePropertiesHandler(elementRegistry) {
- this._elementRegistry = elementRegistry;
-}
-
-UpdatePropertiesHandler.$inject = [ 'elementRegistry' ];
-
-module.exports = UpdatePropertiesHandler;
-
-
-////// api /////////////////////////////////////////////
-
-/**
- * Updates a BPMN element with a list of new properties
- *
- * @param {Object} context
- * @param {djs.model.Base} context.element the element to update
- * @param {Object} context.properties a list of properties to set on the element's
- * businessObject (the BPMN model element)
- *
- * @return {Array} the updated element
- */
-UpdatePropertiesHandler.prototype.execute = function(context) {
-
- var element = context.element,
- changed = [ element ];
-
- if (!element) {
- throw new Error('element required');
- }
-
- var elementRegistry = this._elementRegistry;
-
- var businessObject = element.businessObject,
- properties = context.properties,
- oldProperties = context.oldProperties || pick(businessObject, keys(properties));
-
- if (ID in properties) {
- elementRegistry.updateId(element, properties[ID]);
- }
-
- // correctly indicate visual changes on default flow updates
- if (DEFAULT_FLOW in properties) {
-
- if (properties[DEFAULT_FLOW]) {
- changed.push(elementRegistry.get(properties[DEFAULT_FLOW].id));
- }
-
- if (businessObject[DEFAULT_FLOW]) {
- changed.push(elementRegistry.get(businessObject[DEFAULT_FLOW].id));
- }
- }
-
- if (NAME in properties && element.label) {
- changed.push(element.label);
- }
-
- // update properties
- assign(businessObject, properties);
-
-
- // store old values
- context.oldProperties = oldProperties;
- context.changed = changed;
-
- // indicate changed on objects affected by the update
- return changed;
-};
-
-/**
- * Reverts the update on a BPMN elements properties.
- *
- * @param {Object} context
- *
- * @return {djs.mode.Base} the updated element
- */
-UpdatePropertiesHandler.prototype.revert = function(context) {
-
- var element = context.element,
- oldProperties = context.oldProperties,
- businessObject = element.businessObject,
- elementRegistry = this._elementRegistry;
-
- assign(businessObject, context.oldProperties);
-
- if (ID in oldProperties) {
- elementRegistry.updateId(element, oldProperties[ID]);
- }
-
- return context.changed;
-};
-},{"325":325,"326":326,"330":330}],30:[function(_dereq_,module,exports){
-module.exports = {
- __init__: [ 'modeling', 'bpmnUpdater', 'labelSupport' ],
- __depends__: [
- _dereq_(14),
- _dereq_(32),
- _dereq_(27),
- _dereq_(77),
- _dereq_(160),
- _dereq_(93)
- ],
- bpmnFactory: [ 'type', _dereq_(15) ],
- bpmnUpdater: [ 'type', _dereq_(17) ],
- elementFactory: [ 'type', _dereq_(18) ],
- modeling: [ 'type', _dereq_(20) ],
- labelSupport: [ 'type', _dereq_(19) ],
- layouter: [ 'type', _dereq_(16) ],
- connectionDocking: [ 'type', _dereq_(165) ]
-};
-
-},{"14":14,"15":15,"16":16,"160":160,"165":165,"17":17,"18":18,"19":19,"20":20,"27":27,"32":32,"77":77,"93":93}],31:[function(_dereq_,module,exports){
-'use strict';
-
-var groupBy = _dereq_(205),
- size = _dereq_(209),
- find = _dereq_(203),
- inherits = _dereq_(195);
-
-var getParents = _dereq_(21).getParents,
- is = _dereq_(47).is,
- getBusinessObject = _dereq_(47).getBusinessObject,
- isExpanded = _dereq_(45).isExpanded;
-
-
-var RuleProvider = _dereq_(145);
-
-/**
- * BPMN specific modeling rule
- */
-function BpmnRules(eventBus) {
- RuleProvider.call(this, eventBus);
-}
-
-inherits(BpmnRules, RuleProvider);
-
-BpmnRules.$inject = [ 'eventBus' ];
-
-module.exports = BpmnRules;
-
-BpmnRules.prototype.init = function() {
-
- this.addRule('connection.create', function(context) {
- var source = context.source,
- target = context.target;
-
- return canConnect(source, target);
- });
-
- this.addRule('connection.reconnectStart', function(context) {
-
- var connection = context.connection,
- source = context.hover || context.source,
- target = connection.target;
-
- return canConnect(source, target, connection);
- });
-
- this.addRule('connection.reconnectEnd', function(context) {
-
- var connection = context.connection,
- source = connection.source,
- target = context.hover || context.target;
-
- return canConnect(source, target, connection);
- });
-
- this.addRule('connection.updateWaypoints', function(context) {
- // OK! but visually ignore
- return null;
- });
-
- this.addRule('shape.resize', function(context) {
-
- var shape = context.shape,
- newBounds = context.newBounds;
-
- return canResize(shape, newBounds);
- });
-
- this.addRule('shapes.move', function(context) {
-
- var target = context.newParent,
- shapes = context.shapes;
-
- return canMove(shapes, target);
- });
-
- this.addRule([ 'shape.create', 'shape.append' ], function(context) {
- var target = context.parent,
- shape = context.shape,
- source = context.source;
-
- return canCreate(shape, target, source);
- });
-
-};
-
-BpmnRules.prototype.canConnectMessageFlow = canConnectMessageFlow;
-
-BpmnRules.prototype.canConnectSequenceFlow = canConnectSequenceFlow;
-
-BpmnRules.prototype.canConnectAssociation = canConnectAssociation;
-
-BpmnRules.prototype.canMove = canMove;
-
-BpmnRules.prototype.canDrop = canDrop;
-
-BpmnRules.prototype.canCreate = canCreate;
-
-BpmnRules.prototype.canConnect = canConnect;
-
-BpmnRules.prototype.canResize = canResize;
-
-/**
- * Utility functions for rule checking
- */
-
-function nonExistantOrLabel(element) {
- return !element || isLabel(element);
-}
-
-function isSame(a, b) {
- return a === b;
-}
-
-function getOrganizationalParent(element) {
-
- var bo = getBusinessObject(element);
-
- while (bo && !is(bo, 'bpmn:Process')) {
- if (is(bo, 'bpmn:Participant')) {
- return bo.processRef || bo;
- }
-
- bo = bo.$parent;
- }
-
- return bo;
-}
-
-function isSameOrganization(a, b) {
- var parentA = getOrganizationalParent(a),
- parentB = getOrganizationalParent(b);
-
- return parentA === parentB;
-}
-
-function isMessageFlowSource(element) {
- return is(element, 'bpmn:InteractionNode') && (
- !is(element, 'bpmn:Event') || (
- is(element, 'bpmn:ThrowEvent') &&
- hasEventDefinitionOrNone(element, 'bpmn:MessageEventDefinition')
- )
- );
-}
-
-function isMessageFlowTarget(element) {
- return is(element, 'bpmn:InteractionNode') && (
- !is(element, 'bpmn:Event') || (
- is(element, 'bpmn:CatchEvent') &&
- hasEventDefinitionOrNone(element, 'bpmn:MessageEventDefinition')
- )
- );
-}
-
-function getScopeParent(element) {
-
- var bo = getBusinessObject(element);
-
- if (is(bo, 'bpmn:Participant')) {
- return null;
- }
-
- while (bo) {
- bo = bo.$parent;
-
- if (is(bo, 'bpmn:FlowElementsContainer')) {
- return bo;
- }
- }
-
- return bo;
-}
-
-function isSameScope(a, b) {
- var scopeParentA = getScopeParent(a),
- scopeParentB = getScopeParent(b);
-
- return scopeParentA && (scopeParentA === scopeParentB);
-}
-
-function hasEventDefinition(element, eventDefinition) {
- var bo = getBusinessObject(element);
-
- return !!find(bo.eventDefinitions || [], function(definition) {
- return is(definition, eventDefinition);
- });
-}
-
-function hasEventDefinitionOrNone(element, eventDefinition) {
- var bo = getBusinessObject(element);
-
- return (bo.eventDefinitions || []).every(function(definition) {
- return is(definition, eventDefinition);
- });
-}
-
-function isSequenceFlowSource(element) {
- return is(element, 'bpmn:FlowNode') && !is(element, 'bpmn:EndEvent') && !(
- is(element, 'bpmn:IntermediateThrowEvent') &&
- hasEventDefinition(element, 'bpmn:LinkEventDefinition')
- );
-}
-
-function isSequenceFlowTarget(element) {
- return is(element, 'bpmn:FlowNode') && !is(element, 'bpmn:StartEvent') && !(
- is(element, 'bpmn:IntermediateCatchEvent') &&
- hasEventDefinition(element, 'bpmn:LinkEventDefinition')
- );
-}
-
-function isEventBasedTarget(element) {
- return is(element, 'bpmn:ReceiveTask') || (
- is(element, 'bpmn:IntermediateCatchEvent') && (
- hasEventDefinition(element, 'bpmn:MessageEventDefinition') ||
- hasEventDefinition(element, 'bpmn:TimerEventDefinition') ||
- hasEventDefinition(element, 'bpmn:ConditionalEventDefinition') ||
- hasEventDefinition(element, 'bpmn:SignalEventDefinition')
- )
- );
-}
-
-function isLabel(element) {
- return element.labelTarget;
-}
-
-function isConnection(element) {
- return element.waypoints;
-}
-
-function isParent(possibleParent, element) {
- var allParents = getParents(element);
- return allParents.indexOf(possibleParent) !== -1;
-}
-
-function canConnect(source, target, connection) {
-
- if (nonExistantOrLabel(source) || nonExistantOrLabel(target)) {
- return null;
- }
-
- // See https://github.com/bpmn-io/bpmn-js/issues/178
- // as a workround we disallow connections with same
- // target and source element.
- // This rule must be removed if a auto layout for this
- // connections is implemented.
- if (isSame(source, target)) {
- return false;
- }
-
- if (canConnectMessageFlow(source, target) ||
- canConnectSequenceFlow(source, target)) {
-
- return true;
- }
-
- if (is(connection, 'bpmn:Association')) {
- return canConnectAssociation(source, target);
- }
-
- return false;
-}
-
-/**
- * Can an element be dropped into the target element
- *
- * @return {Boolean}
- */
-function canDrop(element, target) {
-
- // can move labels everywhere
- if (isLabel(element) && !isConnection(target)) {
- return true;
- }
-
- // allow to create new participants on
- // on existing collaboration and process diagrams
- if (is(element, 'bpmn:Participant')) {
- return is(target, 'bpmn:Process') || is(target, 'bpmn:Collaboration');
- }
-
- // drop flow elements onto flow element containers
- // and participants
- if (is(element, 'bpmn:FlowElement')) {
- if (is(target, 'bpmn:FlowElementsContainer')) {
- return isExpanded(target) !== false;
- }
-
- return is(target, 'bpmn:Participant');
- }
-
- if (is(element, 'bpmn:Artifact')) {
- return is(target, 'bpmn:Collaboration') ||
- is(target, 'bpmn:Participant') ||
- is(target, 'bpmn:Process');
- }
-
- if (is(element, 'bpmn:MessageFlow')) {
- return is(target, 'bpmn:Collaboration');
- }
-
- return false;
-}
-
-function canMove(elements, target) {
-
- // only move if they have the same parent
- var sameParent = size(groupBy(elements, function(s) { return s.parent && s.parent.id; })) === 1;
-
- if (!sameParent) {
- return false;
- }
-
- if (!target) {
- return true;
- }
-
- return elements.every(function(element) {
- return canDrop(element, target);
- });
-}
-
-function canCreate(shape, target, source) {
-
- if (!target) {
- return false;
- }
-
- if (isLabel(target)) {
- return null;
- }
-
- if (isSame(source, target)) {
- return false;
- }
-
- // ensure we do not drop the element
- // into source
- if (source && isParent(source, target)) {
- return false;
- }
-
- return canDrop(shape, target);
-}
-
-function canResize(shape, newBounds) {
- if (is(shape, 'bpmn:SubProcess')) {
- return isExpanded(shape) && (
- !newBounds || (newBounds.width >= 100 && newBounds.height >= 80)
- );
- }
-
- if (is(shape, 'bpmn:Participant')) {
- return !newBounds || (newBounds.width >= 100 && newBounds.height >= 80);
- }
-
- if (is(shape, 'bpmn:TextAnnotation')) {
- return true;
- }
-
- return false;
-}
-
-function canConnectAssociation(source, target) {
-
- // do not connect connections
- if (isConnection(source) || isConnection(target)) {
- return false;
- }
-
- // connect if different parent
- return !isParent(target, source) &&
- !isParent(source, target);
-}
-
-function canConnectMessageFlow(source, target) {
-
- return isMessageFlowSource(source) &&
- isMessageFlowTarget(target) &&
- !isSameOrganization(source, target);
-}
-
-function canConnectSequenceFlow(source, target) {
-
- return isSequenceFlowSource(source) &&
- isSequenceFlowTarget(target) &&
- isSameScope(source, target) &&
- !(is(source, 'bpmn:EventBasedGateway') && !isEventBasedTarget(target));
-}
-},{"145":145,"195":195,"203":203,"205":205,"209":209,"21":21,"45":45,"47":47}],32:[function(_dereq_,module,exports){
-module.exports = {
- __depends__: [
- _dereq_(147)
- ],
- __init__: [ 'bpmnRules' ],
- bpmnRules: [ 'type', _dereq_(31) ]
-};
-
-},{"147":147,"31":31}],33:[function(_dereq_,module,exports){
-'use strict';
-
-var assign = _dereq_(325);
-
-/**
- * A palette provider for BPMN 2.0 elements.
- */
-function PaletteProvider(palette, create, elementFactory, spaceTool, lassoTool) {
-
- this._create = create;
- this._elementFactory = elementFactory;
- this._spaceTool = spaceTool;
- this._lassoTool = lassoTool;
-
- palette.registerProvider(this);
-}
-
-module.exports = PaletteProvider;
-
-PaletteProvider.$inject = [ 'palette', 'create', 'elementFactory', 'spaceTool', 'lassoTool' ];
-
-
-PaletteProvider.prototype.getPaletteEntries = function(element) {
-
- var actions = {},
- create = this._create,
- elementFactory = this._elementFactory,
- spaceTool = this._spaceTool,
- lassoTool = this._lassoTool;
-
-
- function createAction(type, group, className, title, options) {
-
- function createListener(event) {
- var shape = elementFactory.createShape(assign({ type: type }, options));
-
- if (options) {
- shape.businessObject.di.isExpanded = options.isExpanded;
- }
-
- create.start(event, shape);
- }
-
- var shortType = type.replace(/^bpmn\:/, '');
-
- return {
- group: group,
- className: className,
- title: title || 'Create ' + shortType,
- action: {
- dragstart: createListener,
- click: createListener
- }
- };
- }
-
- function createParticipant(event, collapsed) {
- create.start(event, elementFactory.createParticipantShape(collapsed));
- }
-
- assign(actions, {
- 'lasso-tool': {
- group: 'tools',
- className: 'icon-lasso-tool',
- title: 'Activate the lasso tool',
- action: {
- click: function(event) {
- lassoTool.activateSelection(event);
- }
- }
- },
- 'space-tool': {
- group: 'tools',
- className: 'icon-space-tool',
- title: 'Activate the create/remove space tool',
- action: {
- click: function(event) {
- spaceTool.activateSelection(event);
- }
- }
- },
- 'tool-separator': {
- group: 'tools',
- separator: true
- },
- 'create.start-event': createAction(
- 'bpmn:StartEvent', 'event', 'icon-start-event-none'
- ),
- 'create.intermediate-event': createAction(
- 'bpmn:IntermediateThrowEvent', 'event', 'icon-intermediate-event-none'
- ),
- 'create.end-event': createAction(
- 'bpmn:EndEvent', 'event', 'icon-end-event-none'
- ),
- 'create.exclusive-gateway': createAction(
- 'bpmn:ExclusiveGateway', 'gateway', 'icon-gateway-xor'
- ),
- 'create.task': createAction(
- 'bpmn:Task', 'activity', 'icon-task'
- ),
- 'create.subprocess-collapsed': createAction(
- 'bpmn:SubProcess', 'activity', 'icon-subprocess-collapsed', 'Create collapsed Sub Process',
- { isExpanded: false }
- ),
- 'create.subprocess-expanded': createAction(
- 'bpmn:SubProcess', 'activity', 'icon-subprocess-expanded', 'Create expanded SubProcess',
- { isExpanded: true }
- ),
- 'create.participant-expanded': {
- group: 'collaboration',
- className: 'icon-participant',
- title: 'Create Pool/Participant',
- action: {
- dragstart: createParticipant,
- click: createParticipant
- }
- }
- });
-
- return actions;
-};
-
-},{"325":325}],34:[function(_dereq_,module,exports){
-module.exports = {
- __depends__: [
- _dereq_(137),
- _dereq_(99)
- ],
- __init__: [ 'paletteProvider' ],
- paletteProvider: [ 'type', _dereq_(33) ]
-};
-
-},{"137":137,"33":33,"99":99}],35:[function(_dereq_,module,exports){
-'use strict';
-
-var forEach = _dereq_(204),
- filter = _dereq_(202);
-
-var REPLACE_OPTIONS = _dereq_(36);
-
-var startEventReplace = REPLACE_OPTIONS.START_EVENT,
- intermediateEventReplace = REPLACE_OPTIONS.INTERMEDIATE_EVENT,
- endEventReplace = REPLACE_OPTIONS.END_EVENT,
- gatewayReplace = REPLACE_OPTIONS.GATEWAY,
- taskReplace = REPLACE_OPTIONS.TASK;
-
-
-/**
- * A replace menu provider that gives users the controls to choose
- * and replace BPMN elements with each other.
- *
- * @param {BpmnFactory} bpmnFactory
- * @param {Moddle} moddle
- * @param {PopupMenu} popupMenu
- * @param {Replace} replace
- */
-function BpmnReplace(bpmnFactory, moddle, popupMenu, replace, selection) {
-
- /**
- * Prepares a new business object for the replacement element
- * and triggers the replace operation.
- *
- * @param {djs.model.Base} element
- * @param {Object} target
- * @return {djs.model.Base} the newly created element
- */
- function replaceElement(element, target) {
-
- var type = target.type,
- oldBusinessObject = element.businessObject,
- businessObject = bpmnFactory.create(type);
-
- var newElement = {
- type: type,
- businessObject: businessObject
- };
-
- // initialize custom BPMN extensions
-
- if (target.eventDefinition) {
- var eventDefinitions = businessObject.get('eventDefinitions'),
- eventDefinition = moddle.create(target.eventDefinition);
-
- eventDefinitions.push(eventDefinition);
- }
-
- if (target.instantiate !== undefined) {
- businessObject.instantiate = target.instantiate;
- }
-
- if (target.eventGatewayType !== undefined) {
- businessObject.eventGatewayType = target.eventGatewayType;
- }
-
- // copy size (for activities only)
- if (oldBusinessObject.$instanceOf('bpmn:Activity')) {
-
- // TODO: need also to respect min/max Size
-
- newElement.width = element.width;
- newElement.height = element.height;
- }
-
- // TODO: copy other elligable properties from old business object
- businessObject.name = oldBusinessObject.name;
-
- newElement = replace.replaceElement(element, newElement);
-
- selection.select(newElement);
-
- return newElement;
- }
-
-
- function getReplaceOptions(element) {
-
- var menuEntries = [];
- var businessObject = element.businessObject;
-
- if (businessObject.$instanceOf('bpmn:StartEvent')) {
- addEntries(startEventReplace, filterEvents);
- } else
-
- if (businessObject.$instanceOf('bpmn:IntermediateCatchEvent') ||
- businessObject.$instanceOf('bpmn:IntermediateThrowEvent')) {
-
- addEntries(intermediateEventReplace, filterEvents);
- } else
-
- if (businessObject.$instanceOf('bpmn:EndEvent')) {
-
- addEntries(endEventReplace, filterEvents);
- } else
-
- if (businessObject.$instanceOf('bpmn:Gateway')) {
-
- addEntries(gatewayReplace, function(entry) {
-
- return entry.target.type !== businessObject.$type;
- });
- } else
-
- if (businessObject.$instanceOf('bpmn:FlowNode')) {
- addEntries(taskReplace, function(entry) {
- return entry.target.type !== businessObject.$type;
- });
- }
-
- function filterEvents(entry) {
-
- var target = entry.target;
-
- var eventDefinition = businessObject.eventDefinitions && businessObject.eventDefinitions[0].$type;
- var isEventDefinitionEqual = target.eventDefinition == eventDefinition;
- var isEventTypeEqual = businessObject.$type == target.type;
-
- return ((!isEventDefinitionEqual && isEventTypeEqual) ||
- !isEventTypeEqual) ||
- !(isEventDefinitionEqual && isEventTypeEqual);
- }
-
- function addEntries(entries, filterFun) {
- // Filter selected type from the array
- var filteredEntries = filter(entries, filterFun);
-
- // Add entries to replace menu
- forEach(filteredEntries, function(definition) {
-
- var entry = addMenuEntry(definition);
- menuEntries.push(entry);
- });
- }
-
- function addMenuEntry(definition) {
-
- return {
- label: definition.label,
- className: definition.className,
- action: {
- name: definition.actionName,
- handler: function() {
- replaceElement(element, definition.target);
- }
- }
- };
- }
-
- return menuEntries;
- }
-
-
- // API
-
- this.openChooser = function(position, element) {
- var entries = this.getReplaceOptions(element);
-
- popupMenu.open('replace-menu', position, entries);
- };
-
- this.getReplaceOptions = getReplaceOptions;
-
- this.replaceElement = replaceElement;
-}
-
-BpmnReplace.$inject = [ 'bpmnFactory', 'moddle', 'popupMenu', 'replace', 'selection' ];
-
-module.exports = BpmnReplace;
-},{"202":202,"204":204,"36":36}],36:[function(_dereq_,module,exports){
-'use strict';
-
-module.exports.START_EVENT = [
- {
- label: 'Start Event',
- actionName: 'replace-with-none-start',
- className: 'icon-start-event-none',
- target: {
- type: 'bpmn:StartEvent'
- }
- },
- {
- label: 'Intermediate Throw Event',
- actionName: 'replace-with-intermediate-throwing',
- className: 'icon-intermediate-event-none',
- target: {
- type: 'bpmn:IntermediateThrowEvent'
- }
- },
- {
- label: 'End Event',
- actionName: 'replace-with-message-end',
- className: 'icon-end-event-none',
- target: {
- type: 'bpmn:EndEvent'
- }
- },
- {
- label: 'Message Start Event',
- actionName: 'replace-with-message-start',
- className: 'icon-start-event-message',
- target: {
- type: 'bpmn:StartEvent',
- eventDefinition: 'bpmn:MessageEventDefinition'
- }
- },
- {
- label: 'Timer Start Event',
- actionName: 'replace-with-timer-start',
- className: 'icon-start-event-timer',
- target: {
- type: 'bpmn:StartEvent',
- eventDefinition: 'bpmn:TimerEventDefinition'
- }
- },
- {
- label: 'Conditional Start Event',
- actionName: 'replace-with-conditional-start',
- className: 'icon-start-event-condition',
- target: {
- type: 'bpmn:StartEvent',
- eventDefinition: 'bpmn:ConditionalEventDefinition'
- }
- },
- {
- label: 'Signal Start Event',
- actionName: 'replace-with-signal-start',
- className: 'icon-start-event-signal',
- target: {
- type: 'bpmn:StartEvent',
- eventDefinition: 'bpmn:SignalEventDefinition'
- }
- }
-];
-
-module.exports.INTERMEDIATE_EVENT = [
- {
- label: 'Start Event',
- actionName: 'replace-with-none-start',
- className: 'icon-start-event-none',
- target: {
- type: 'bpmn:StartEvent'
- }
- },
- {
- label: 'Intermediate Throw Event',
- actionName: 'replace-with-message-intermediate-throw',
- className: 'icon-intermediate-event-none',
- target: {
- type: 'bpmn:IntermediateThrowEvent'
- }
- },
- {
- label: 'End Event',
- actionName: 'replace-with-message-end',
- className: 'icon-end-event-none',
- target: {
- type: 'bpmn:EndEvent'
- }
- },
- {
- label: 'Message Intermediate Catch Event',
- actionName: 'replace-with-intermediate-catch',
- className: 'icon-intermediate-event-catch-message',
- target: {
- type: 'bpmn:IntermediateCatchEvent',
- eventDefinition: 'bpmn:MessageEventDefinition'
- }
- },
- {
- label: 'Message Intermediate Throw Event',
- actionName: 'replace-with-intermediate-throw',
- className: 'icon-intermediate-event-throw-message',
- target: {
- type: 'bpmn:IntermediateThrowEvent',
- eventDefinition: 'bpmn:MessageEventDefinition'
- }
- },
- {
- label: 'Timer Intermediate Catch Event',
- actionName: 'replace-with-timer-intermediate-catch',
- className: 'icon-intermediate-event-catch-timer',
- target: {
- type: 'bpmn:IntermediateCatchEvent',
- eventDefinition: 'bpmn:TimerEventDefinition'
- }
- },
- {
- label: 'Escalation Intermediate Catch Event',
- actionName: 'replace-with-escalation-catch',
- className: 'icon-intermediate-event-catch-escalation',
- target: {
- type: 'bpmn:IntermediateCatchEvent',
- eventDefinition: 'bpmn:EscalationEventDefinition'
- }
- },
- {
- label: 'Conditional Intermediate Catch Event',
- actionName: 'replace-with-conditional-intermediate-catch',
- className: 'icon-intermediate-event-catch-condition',
- target: {
- type: 'bpmn:IntermediateCatchEvent',
- eventDefinition: 'bpmn:ConditionalEventDefinition'
- }
- },
- {
- label: 'Link Intermediate Catch Event',
- actionName: 'replace-with-link-intermediate-catch',
- className: 'icon-intermediate-event-catch-link',
- target: {
- type: 'bpmn:IntermediateCatchEvent',
- eventDefinition: 'bpmn:LinkEventDefinition'
- }
- },
- {
- label: 'Link Intermediate Throw Event',
- actionName: 'replace-with-link-intermediate-throw',
- className: 'icon-intermediate-event-throw-link',
- target: {
- type: 'bpmn:IntermediateThrowEvent',
- eventDefinition: 'bpmn:LinkEventDefinition'
- }
- },
- {
- label: 'Compensation Intermediate Throw Event',
- actionName: 'replace-with-compensation-intermediate-throw',
- className: 'icon-intermediate-event-throw-compensation',
- target: {
- type: 'bpmn:IntermediateThrowEvent',
- eventDefinition: 'bpmn:CompensateEventDefinition'
- }
- },
- {
- label: 'Signal Throw Catch Event',
- actionName: 'replace-with-throw-intermediate-catch',
- className: 'icon-intermediate-event-catch-signal',
- target: {
- type: 'bpmn:IntermediateCatchEvent',
- eventDefinition: 'bpmn:SignalEventDefinition'
- }
- },
- {
- label: 'Signal Intermediate Throw Event',
- actionName: 'replace-with-signal-intermediate-throw',
- className: 'icon-intermediate-event-throw-signal',
- target: {
- type: 'bpmn:IntermediateThrowEvent',
- eventDefinition: 'bpmn:SignalEventDefinition'
- }
- }
-];
-
-module.exports.END_EVENT = [
- {
- label: 'Start Event',
- actionName: 'replace-with-none-start',
- className: 'icon-start-event-none',
- target: {
- type: 'bpmn:StartEvent'
- }
- },
- {
- label: 'Intermediate Throw Event',
- actionName: 'replace-with-message-intermediate-throw',
- className: 'icon-intermediate-event-none',
- target: {
- type: 'bpmn:IntermediateThrowEvent'
- }
- },
- {
- label: 'End Event',
- actionName: 'replace-with-none-end',
- className: 'icon-end-event-none',
- target: {
- type: 'bpmn:EndEvent'
- }
- },
- {
- label: 'Message End Event',
- actionName: 'replace-with-message-end',
- className: 'icon-end-event-message',
- target: {
- type: 'bpmn:EndEvent',
- eventDefinition: 'bpmn:MessageEventDefinition'
- }
- },
- {
- label: 'Escalation End Event',
- actionName: 'replace-with-escalation-end',
- className: 'icon-end-event-escalation',
- target: {
- type: 'bpmn:EndEvent',
- eventDefinition: 'bpmn:EscalationEventDefinition'
- }
- },
- {
- label: 'Error End Event',
- actionName: 'replace-with-error-end',
- className: 'icon-end-event-error',
- target: {
- type: 'bpmn:EndEvent',
- eventDefinition: 'bpmn:ErrorEventDefinition'
- }
- },
- {
- label: 'Cancel End Event',
- actionName: 'replace-with-cancel-end',
- className: 'icon-end-event-cancel',
- target: {
- type: 'bpmn:EndEvent',
- eventDefinition: 'bpmn:CancelEventDefinition'
- }
- },
- {
- label: 'Compensation End Event',
- actionName: 'replace-with-compensation-end',
- className: 'icon-end-event-compensation',
- target: {
- type: 'bpmn:EndEvent',
- eventDefinition: 'bpmn:CompensateEventDefinition'
- }
- },
- {
- label: 'Signal End Event',
- actionName: 'replace-with-signal-end',
- className: 'icon-end-event-signal',
- target: {
- type: 'bpmn:EndEvent',
- eventDefinition: 'bpmn:SignalEventDefinition'
- }
- },
- {
- label: 'Terminate End Event',
- actionName: 'replace-with-terminate-end',
- className: 'icon-end-event-terminate',
- target: {
- type: 'bpmn:EndEvent',
- eventDefinition: 'bpmn:TerminateEventDefinition'
- }
- }
-];
-
-module.exports.GATEWAY = [
- {
- label: 'Exclusive Gateway',
- actionName: 'replace-with-exclusive-gateway',
- className: 'icon-gateway-xor',
- target: {
- type: 'bpmn:ExclusiveGateway'
- }
- },
- {
- label: 'Parallel Gateway',
- actionName: 'replace-with-parallel-gateway',
- className: 'icon-gateway-parallel',
- target: {
- type: 'bpmn:ParallelGateway'
- }
- },
- {
- label: 'Inclusive Gateway',
- actionName: 'replace-with-inclusive-gateway',
- className: 'icon-gateway-or',
- target: {
- type: 'bpmn:InclusiveGateway'
- }
- },
- {
- label: 'Complex Gateway',
- actionName: 'replace-with-complex-gateway',
- className: 'icon-gateway-complex',
- target: {
- type: 'bpmn:ComplexGateway'
- }
- },
- {
- label: 'Event based Gateway',
- actionName: 'replace-with-event-based-gateway',
- className: 'icon-gateway-eventbased',
- target: {
- type: 'bpmn:EventBasedGateway',
- instantiate: false,
- eventGatewayType: 'Exclusive'
- }
- }
- // Gateways deactivated until https://github.com/bpmn-io/bpmn-js/issues/194
- // {
- // label: 'Event based instantiating Gateway',
- // actionName: 'replace-with-exclusive-event-based-gateway',
- // className: 'icon-exclusive-event-based',
- // target: {
- // type: 'bpmn:EventBasedGateway'
- // },
- // options: {
- // businessObject: { instantiate: true, eventGatewayType: 'Exclusive' }
- // }
- // },
- // {
- // label: 'Parallel Event based instantiating Gateway',
- // actionName: 'replace-with-parallel-event-based-instantiate-gateway',
- // className: 'icon-parallel-event-based-instantiate-gateway',
- // target: {
- // type: 'bpmn:EventBasedGateway'
- // },
- // options: {
- // businessObject: { instantiate: true, eventGatewayType: 'Parallel' }
- // }
- // }
-];
-
-
-module.exports.TASK = [
- {
- label: 'Task',
- actionName: 'replace-with-task',
- className: 'icon-task',
- target: {
- type: 'bpmn:Task'
- }
- },
- {
- label: 'Send Task',
- actionName: 'replace-with-send-task',
- className: 'icon-send',
- target: {
- type: 'bpmn:SendTask'
- }
- },
- {
- label: 'Receive Task',
- actionName: 'replace-with-receive-task',
- className: 'icon-receive',
- target: {
- type: 'bpmn:ReceiveTask'
- }
- },
- {
- label: 'User Task',
- actionName: 'replace-with-user-task',
- className: 'icon-user',
- target: {
- type: 'bpmn:UserTask'
- }
- },
- {
- label: 'Manual Task',
- actionName: 'replace-with-manual-task',
- className: 'icon-manual',
- target: {
- type: 'bpmn:ManualTask'
- }
- },
- {
- label: 'Business Rule Task',
- actionName: 'replace-with-rule-task',
- className: 'icon-business-rule',
- target: {
- type: 'bpmn:BusinessRuleTask'
- }
- },
- {
- label: 'Service Task',
- actionName: 'replace-with-service-task',
- className: 'icon-service',
- target: {
- type: 'bpmn:ServiceTask'
- }
- },
- {
- label: 'Script Task',
- actionName: 'replace-with-script-task',
- className: 'icon-script',
- target: {
- type: 'bpmn:ScriptTask'
- }
- }
-];
-},{}],37:[function(_dereq_,module,exports){
-module.exports = {
- __depends__: [
- _dereq_(139),
- _dereq_(141),
- _dereq_(151)
- ],
- bpmnReplace: [ 'type', _dereq_(35) ]
-};
-},{"139":139,"141":141,"151":151,"35":35}],38:[function(_dereq_,module,exports){
-'use strict';
-
-var inherits = _dereq_(195);
-
-var forEach = _dereq_(204);
-
-var getBoundingBox = _dereq_(177).getBBox;
-var is = _dereq_(21).is;
-
-var Snapping = _dereq_(154),
- SnapUtil = _dereq_(153);
-
-var is = _dereq_(47).is;
-
-var mid = SnapUtil.mid,
- topLeft = SnapUtil.topLeft,
- bottomRight = SnapUtil.bottomRight;
-
-var round = Math.round;
-
-
-/**
- * BPMN specific snapping functionality
- *
- * * snap on process elements if a pool is created inside a
- * process diagram
- *
- * @param {EventBus} eventBus
- * @param {Canvas} canvas
- */
-function BpmnSnapping(eventBus, canvas) {
-
- // instantiate super
- Snapping.call(this, eventBus, canvas);
-
-
- /**
- * Drop participant on process <> process elements snapping
- */
-
- function initParticipantSnapping(context, shape, elements) {
-
- if (!elements.length) {
- return;
- }
-
- var snapBox = getBoundingBox(elements.filter(function(e) {
- return !e.labelTarget && !e.waypoints;
- }));
-
- snapBox.x -= 50;
- snapBox.y -= 20;
- snapBox.width += 70;
- snapBox.height += 40;
-
- // adjust shape height to include bounding box
- shape.width = Math.max(shape.width, snapBox.width);
- shape.height = Math.max(shape.height, snapBox.height);
-
- context.participantSnapBox = snapBox;
- }
-
- function snapParticipant(snapBox, shape, event) {
-
- var shapeHalfWidth = shape.width / 2 - 30,
- shapeHalfHeight = shape.height / 2;
-
- var currentTopLeft = {
- x: event.x - shapeHalfWidth - 30,
- y: event.y - shapeHalfHeight
- };
-
- var currentBottomRight = {
- x: event.x + shapeHalfWidth + 30,
- y: event.y + shapeHalfHeight
- };
-
- var snapTopLeft = snapBox,
- snapBottomRight = bottomRight(snapBox);
-
- if (currentTopLeft.x >= snapTopLeft.x) {
- event.x = snapTopLeft.x + 30 + shapeHalfWidth;
- event.snapped = true;
- } else
- if (currentBottomRight.x <= snapBottomRight.x) {
- event.x = snapBottomRight.x - 30 - shapeHalfWidth;
- event.snapped = true;
- }
-
- if (currentTopLeft.y >= snapTopLeft.y) {
- event.y = snapTopLeft.y + shapeHalfHeight;
- event.snapped = true;
- } else
- if (currentBottomRight.y <= snapBottomRight.y) {
- event.y = snapBottomRight.y - shapeHalfHeight;
- event.snapped = true;
- }
- }
-
- eventBus.on('create.start', function(event) {
-
- var context = event.context,
- shape = context.shape,
- rootElement = canvas.getRootElement();
-
- // snap participant around existing elements (if any)
- if (is(shape, 'bpmn:Participant') && is(rootElement, 'bpmn:Process')) {
-
- initParticipantSnapping(context, shape, rootElement.children);
- }
- });
-
- eventBus.on([ 'create.move', 'create.end' ], 1500, function(event) {
-
- var context = event.context,
- shape = context.shape,
- participantSnapBox = context.participantSnapBox;
-
- if (!event.snapped && participantSnapBox) {
- snapParticipant(participantSnapBox, shape, event);
- }
- });
-
- eventBus.on('resize.start', 1500, function(event) {
- var context = event.context,
- shape = context.shape;
-
- if (is(shape, 'bpmn:SubProcess')) {
- context.minDimensions = { width: 140, height: 120 };
- }
-
- if (is(shape, 'bpmn:Participant')) {
- context.minDimensions = { width: 400, height: 200 };
- }
-
- if (is(shape, 'bpmn:TextAnnotation')) {
- context.minDimensions = { width: 50, height: 50 };
- }
- });
-
-}
-
-inherits(BpmnSnapping, Snapping);
-
-BpmnSnapping.$inject = [ 'eventBus', 'canvas' ];
-
-module.exports = BpmnSnapping;
-
-
-BpmnSnapping.prototype.initSnap = function(event) {
-
- var context = event.context,
- shape = context.shape,
- shapeMid,
- shapeBounds,
- shapeTopLeft,
- shapeBottomRight,
- snapContext;
-
-
- snapContext = Snapping.prototype.initSnap.call(this, event);
-
- if (is(shape, 'bpmn:Participant')) {
- // assign higher priority for outer snaps on participants
- snapContext.setSnapLocations([ 'top-left', 'bottom-right', 'mid' ]);
- }
-
-
- if (shape) {
-
- shapeMid = mid(shape, event);
-
- shapeBounds = {
- width: shape.width,
- height: shape.height,
- x: isNaN(shape.x) ? round(shapeMid.x - shape.width / 2) : shape.x,
- y: isNaN(shape.y) ? round(shapeMid.y - shape.height / 2) : shape.y,
- };
-
- shapeTopLeft = topLeft(shapeBounds);
- shapeBottomRight = bottomRight(shapeBounds);
-
- snapContext.setSnapOrigin('top-left', {
- x: shapeTopLeft.x - event.x,
- y: shapeTopLeft.y - event.y
- });
-
- snapContext.setSnapOrigin('bottom-right', {
- x: shapeBottomRight.x - event.x,
- y: shapeBottomRight.y - event.y
- });
-
-
- forEach(shape.outgoing, function(c) {
- var docking = c.waypoints[0];
-
- docking = docking.original || docking;
-
- snapContext.setSnapOrigin(c.id + '-docking', {
- x: docking.x - event.x,
- y: docking.y - event.y
- });
- });
-
- forEach(shape.incoming, function(c) {
- var docking = c.waypoints[c.waypoints.length - 1];
-
- docking = docking.original || docking;
-
- snapContext.setSnapOrigin(c.id + '-docking', {
- x: docking.x - event.x,
- y: docking.y - event.y
- });
- });
-
- }
-
- var source = context.source;
-
- if (source) {
- snapContext.addDefaultSnap('mid', mid(source));
- }
-};
-
-
-BpmnSnapping.prototype.addTargetSnaps = function(snapPoints, shape, target) {
-
- var siblings = this.getSiblings(shape, target);
-
-
- forEach(siblings, function(s) {
- snapPoints.add('mid', mid(s));
-
- if (is(s, 'bpmn:Participant')) {
- snapPoints.add('top-left', topLeft(s));
- snapPoints.add('bottom-right', bottomRight(s));
- }
- });
-
- forEach(shape.incoming, function(c) {
-
- if (siblings.indexOf(c.source) === -1) {
- snapPoints.add('mid', mid(c.source));
-
- var docking = c.waypoints[0];
- snapPoints.add(c.id + '-docking', docking.original || docking);
- }
- });
-
-
- forEach(shape.outgoing, function(c) {
-
- if (siblings.indexOf(c.target) === -1) {
- snapPoints.add('mid', mid(c.target));
-
- var docking = c.waypoints[c.waypoints.length - 1];
- snapPoints.add(c.id + '-docking', docking.original || docking);
- }
- });
-
-};
-},{"153":153,"154":154,"177":177,"195":195,"204":204,"21":21,"47":47}],39:[function(_dereq_,module,exports){
-module.exports = {
- __init__: [ 'snapping' ],
- snapping: [ 'type', _dereq_(38) ]
-};
-},{"38":38}],40:[function(_dereq_,module,exports){
-'use strict';
-
-var assign = _dereq_(325),
- map = _dereq_(207);
-
-var LabelUtil = _dereq_(46);
-
-var hasExternalLabel = LabelUtil.hasExternalLabel,
- getExternalLabelBounds = LabelUtil.getExternalLabelBounds,
- isExpanded = _dereq_(45).isExpanded,
- elementToString = _dereq_(43).elementToString;
-
-
-function elementData(semantic, attrs) {
- return assign({
- id: semantic.id,
- type: semantic.$type,
- businessObject: semantic
- }, attrs);
-}
-
-function collectWaypoints(waypoints) {
- return map(waypoints, function(p) {
- return { x: p.x, y: p.y };
- });
-}
-
-
-/**
- * An importer that adds bpmn elements to the canvas
- *
- * @param {EventBus} eventBus
- * @param {Canvas} canvas
- * @param {ElementFactory} elementFactory
- * @param {ElementRegistry} elementRegistry
- */
-function BpmnImporter(eventBus, canvas, elementFactory, elementRegistry) {
- this._eventBus = eventBus;
- this._canvas = canvas;
-
- this._elementFactory = elementFactory;
- this._elementRegistry = elementRegistry;
-}
-
-BpmnImporter.$inject = [ 'eventBus', 'canvas', 'elementFactory', 'elementRegistry' ];
-
-module.exports = BpmnImporter;
-
-
-/**
- * Add bpmn element (semantic) to the canvas onto the
- * specified parent shape.
- */
-BpmnImporter.prototype.add = function(semantic, parentElement) {
-
- var di = semantic.di,
- element;
-
- // ROOT ELEMENT
- // handle the special case that we deal with a
- // invisible root element (process or collaboration)
- if (di.$instanceOf('bpmndi:BPMNPlane')) {
-
- // add a virtual element (not being drawn)
- element = this._elementFactory.createRoot(elementData(semantic));
-
- this._canvas.setRootElement(element);
- }
-
- // SHAPE
- else if (di.$instanceOf('bpmndi:BPMNShape')) {
-
- var collapsed = !isExpanded(semantic);
- var hidden = parentElement && (parentElement.hidden || parentElement.collapsed);
-
- var bounds = semantic.di.bounds;
-
- element = this._elementFactory.createShape(elementData(semantic, {
- collapsed: collapsed,
- hidden: hidden,
- x: Math.round(bounds.x),
- y: Math.round(bounds.y),
- width: Math.round(bounds.width),
- height: Math.round(bounds.height)
- }));
-
- this._canvas.addShape(element, parentElement);
- }
-
- // CONNECTION
- else if (di.$instanceOf('bpmndi:BPMNEdge')) {
-
- var source = this._getSource(semantic),
- target = this._getTarget(semantic);
-
- element = this._elementFactory.createConnection(elementData(semantic, {
- source: source,
- target: target,
- waypoints: collectWaypoints(semantic.di.waypoint)
- }));
-
- this._canvas.addConnection(element, parentElement);
- } else {
- throw new Error('unknown di ' + elementToString(di) + ' for element ' + elementToString(semantic));
- }
-
- // (optional) LABEL
- if (hasExternalLabel(semantic)) {
- this.addLabel(semantic, element);
- }
-
-
- this._eventBus.fire('bpmnElement.added', { element: element });
-
- return element;
-};
-
-
-/**
- * add label for an element
- */
-BpmnImporter.prototype.addLabel = function(semantic, element) {
- var bounds = getExternalLabelBounds(semantic, element);
-
- var label = this._elementFactory.createLabel(elementData(semantic, {
- id: semantic.id + '_label',
- labelTarget: element,
- type: 'label',
- hidden: element.hidden,
- x: Math.round(bounds.x),
- y: Math.round(bounds.y),
- width: Math.round(bounds.width),
- height: Math.round(bounds.height)
- }));
-
- return this._canvas.addShape(label, element.parent);
-};
-
-/**
- * Return the drawn connection end based on the given side.
- *
- * @throws {Error} if the end is not yet drawn
- */
-BpmnImporter.prototype._getEnd = function(semantic, side) {
-
- var element,
- refSemantic,
- type = semantic.$type;
-
- refSemantic = semantic[side + 'Ref'];
-
- // handle mysterious isMany DataAssociation#sourceRef
- if (side === 'source' && type === 'bpmn:DataInputAssociation') {
- refSemantic = refSemantic && refSemantic[0];
- }
-
- // fix source / target for DataInputAssociation / DataOutputAssociation
- if (side === 'source' && type === 'bpmn:DataOutputAssociation' ||
- side === 'target' && type === 'bpmn:DataInputAssociation') {
-
- refSemantic = semantic.$parent;
- }
-
- element = refSemantic && this._getElement(refSemantic);
-
- if (element) {
- return element;
- }
-
- if (refSemantic) {
- throw new Error(
- 'element ' + elementToString(refSemantic) + ' referenced by ' +
- elementToString(semantic) + '#' + side + 'Ref not yet drawn');
- } else {
- throw new Error(elementToString(semantic) + '#' + side + 'Ref not specified');
- }
-};
-
-BpmnImporter.prototype._getSource = function(semantic) {
- return this._getEnd(semantic, 'source');
-};
-
-BpmnImporter.prototype._getTarget = function(semantic) {
- return this._getEnd(semantic, 'target');
-};
-
-
-BpmnImporter.prototype._getElement = function(semantic) {
- return this._elementRegistry.get(semantic.id);
-};
-
-},{"207":207,"325":325,"43":43,"45":45,"46":46}],41:[function(_dereq_,module,exports){
-'use strict';
-
-var filter = _dereq_(202),
- find = _dereq_(203),
- forEach = _dereq_(204);
-
-var Refs = _dereq_(356);
-
-var elementToString = _dereq_(43).elementToString;
-
-var diRefs = new Refs({ name: 'bpmnElement', enumerable: true }, { name: 'di' });
-
-/**
- * Returns true if an element has the given meta-model type
- *
- * @param {ModdleElement} element
- * @param {String} type
- *
- * @return {Boolean}
- */
-function is(element, type) {
- return element.$instanceOf(type);
-}
-
-
-/**
- * Find a suitable display candidate for definitions where the DI does not
- * correctly specify one.
- */
-function findDisplayCandidate(definitions) {
- return find(definitions.rootElements, function(e) {
- return is(e, 'bpmn:Process') || is(e, 'bpmn:Collaboration');
- });
-}
-
-
-function BpmnTreeWalker(handler) {
-
- // list of containers already walked
- var handledProcesses = [];
-
- // list of elements to handle deferred to ensure
- // prerequisites are drawn
- var deferred = [];
-
- ///// Helpers /////////////////////////////////
-
- function contextual(fn, ctx) {
- return function(e) {
- fn(e, ctx);
- };
- }
-
- function visit(element, ctx) {
-
- var gfx = element.gfx;
-
- // avoid multiple rendering of elements
- if (gfx) {
- throw new Error('already rendered ' + elementToString(element));
- }
-
- // call handler
- return handler.element(element, ctx);
- }
-
- function visitRoot(element, diagram) {
- return handler.root(element, diagram);
- }
-
- function visitIfDi(element, ctx) {
- try {
- return element.di && visit(element, ctx);
- } catch (e) {
- logError(e.message, { element: element, error: e });
-
- console.error('failed to import ' + elementToString(element));
- console.error(e);
- }
- }
-
- function logError(message, context) {
- handler.error(message, context);
- }
-
- ////// DI handling ////////////////////////////
-
- function registerDi(di) {
- var bpmnElement = di.bpmnElement;
-
- if (bpmnElement) {
- if (bpmnElement.di) {
- logError('multiple DI elements defined for ' + elementToString(bpmnElement), { element: bpmnElement });
- } else {
- diRefs.bind(bpmnElement, 'di');
- bpmnElement.di = di;
- }
- } else {
- logError('no bpmnElement referenced in ' + elementToString(di), { element: di });
- }
- }
-
- function handleDiagram(diagram) {
- handlePlane(diagram.plane);
- }
-
- function handlePlane(plane) {
- registerDi(plane);
-
- forEach(plane.planeElement, handlePlaneElement);
- }
-
- function handlePlaneElement(planeElement) {
- registerDi(planeElement);
- }
-
-
- ////// Semantic handling //////////////////////
-
- function handleDefinitions(definitions, diagram) {
- // make sure we walk the correct bpmnElement
-
- var diagrams = definitions.diagrams;
-
- if (diagram && diagrams.indexOf(diagram) === -1) {
- throw new Error('diagram not part of bpmn:Definitions');
- }
-
- if (!diagram && diagrams && diagrams.length) {
- diagram = diagrams[0];
- }
-
- // no diagram -> nothing to import
- if (!diagram) {
- return;
- }
-
- // load DI from selected diagram only
- handleDiagram(diagram);
-
-
- var plane = diagram.plane;
-
- if (!plane) {
- throw new Error('no plane for ' + elementToString(diagram));
- }
-
-
- var rootElement = plane.bpmnElement;
-
- // ensure we default to a suitable display candidate (process or collaboration),
- // even if non is specified in DI
- if (!rootElement) {
- rootElement = findDisplayCandidate(definitions);
-
- if (!rootElement) {
- return logError('no process or collaboration present to display');
- } else {
-
- logError('correcting missing bpmnElement on ' + elementToString(plane) + ' to ' + elementToString(rootElement));
-
- // correct DI on the fly
- plane.bpmnElement = rootElement;
- registerDi(plane);
- }
- }
-
-
- var ctx = visitRoot(rootElement, plane);
-
- if (is(rootElement, 'bpmn:Process')) {
- handleProcess(rootElement, ctx);
- } else if (is(rootElement, 'bpmn:Collaboration')) {
- handleCollaboration(rootElement, ctx);
-
- // force drawing of everything not yet drawn that is part of the target DI
- handleUnhandledProcesses(definitions.rootElements, ctx);
- } else {
- throw new Error('unsupported bpmnElement for ' + elementToString(plane) + ' : ' + elementToString(rootElement));
- }
-
- // handle all deferred elements
- handleDeferred(deferred);
- }
-
- function handleDeferred(deferred) {
- forEach(deferred, function(d) { d(); });
- }
-
- function handleProcess(process, context) {
- handleFlowElementsContainer(process, context);
- handleIoSpecification(process.ioSpecification, context);
-
- handleArtifacts(process.artifacts, context);
-
- // log process handled
- handledProcesses.push(process);
- }
-
- function handleUnhandledProcesses(rootElements) {
-
- // walk through all processes that have not yet been drawn and draw them
- // if they contain lanes with DI information.
- // we do this to pass the free-floating lane test cases in the MIWG test suite
- var processes = filter(rootElements, function(e) {
- return is(e, 'bpmn:Process') && e.laneSets && handledProcesses.indexOf(e) === -1;
- });
-
- processes.forEach(contextual(handleProcess));
- }
-
- function handleMessageFlow(messageFlow, context) {
- visitIfDi(messageFlow, context);
- }
-
- function handleMessageFlows(messageFlows, context) {
- forEach(messageFlows, contextual(handleMessageFlow, context));
- }
-
- function handleDataAssociation(association, context) {
- visitIfDi(association, context);
- }
-
- function handleDataInput(dataInput, context) {
- visitIfDi(dataInput, context);
- }
-
- function handleDataOutput(dataOutput, context) {
- visitIfDi(dataOutput, context);
- }
-
- function handleArtifact(artifact, context) {
-
- // bpmn:TextAnnotation
- // bpmn:Group
- // bpmn:Association
-
- visitIfDi(artifact, context);
- }
-
- function handleArtifacts(artifacts, context) {
-
- forEach(artifacts, function(e) {
- if (is(e, 'bpmn:Association')) {
- deferred.push(function() {
- handleArtifact(e, context);
- });
- } else {
- handleArtifact(e, context);
- }
- });
- }
-
- function handleIoSpecification(ioSpecification, context) {
-
- if (!ioSpecification) {
- return;
- }
-
- forEach(ioSpecification.dataInputs, contextual(handleDataInput, context));
- forEach(ioSpecification.dataOutputs, contextual(handleDataOutput, context));
- }
-
- function handleSubProcess(subProcess, context) {
- handleFlowElementsContainer(subProcess, context);
- handleArtifacts(subProcess.artifacts, context);
- }
-
- function handleFlowNode(flowNode, context) {
- var childCtx = visitIfDi(flowNode, context);
-
- if (is(flowNode, 'bpmn:SubProcess')) {
- handleSubProcess(flowNode, childCtx || context);
- }
- }
-
- function handleSequenceFlow(sequenceFlow, context) {
- visitIfDi(sequenceFlow, context);
- }
-
- function handleDataElement(dataObject, context) {
- visitIfDi(dataObject, context);
- }
-
- function handleBoundaryEvent(dataObject, context) {
- visitIfDi(dataObject, context);
- }
-
- function handleLane(lane, context) {
- var newContext = visitIfDi(lane, context);
-
- if (lane.childLaneSet) {
- handleLaneSet(lane.childLaneSet, newContext || context);
- } else {
- var filterList = filter(lane.flowNodeRef, function(e) {
- return e.$type !== 'bpmn:BoundaryEvent';
- });
- handleFlowElements(filterList, newContext || context);
- }
- }
-
- function handleLaneSet(laneSet, context) {
- forEach(laneSet.lanes, contextual(handleLane, context));
- }
-
- function handleLaneSets(laneSets, context) {
- forEach(laneSets, contextual(handleLaneSet, context));
- }
-
- function handleFlowElementsContainer(container, context) {
-
- if (container.laneSets) {
- handleLaneSets(container.laneSets, context);
- handleNonFlowNodes(container.flowElements);
- } else {
- handleFlowElements(container.flowElements, context);
- }
- }
-
- function handleNonFlowNodes(flowElements, context) {
- forEach(flowElements, function(e) {
- if (is(e, 'bpmn:SequenceFlow')) {
- deferred.push(function() {
- handleSequenceFlow(e, context);
- });
- } else if (is(e, 'bpmn:BoundaryEvent')) {
- deferred.unshift(function() {
- handleBoundaryEvent(e, context);
- });
- } else if (is(e, 'bpmn:DataObject')) {
- // SKIP (assume correct referencing via DataObjectReference)
- } else if (is(e, 'bpmn:DataStoreReference')) {
- handleDataElement(e, context);
- } else if (is(e, 'bpmn:DataObjectReference')) {
- handleDataElement(e, context);
- }
- });
- }
-
- function handleFlowElements(flowElements, context) {
- forEach(flowElements, function(e) {
- if (is(e, 'bpmn:SequenceFlow')) {
- deferred.push(function() {
- handleSequenceFlow(e, context);
- });
- } else if (is(e, 'bpmn:BoundaryEvent')) {
- deferred.unshift(function() {
- handleBoundaryEvent(e, context);
- });
- } else if (is(e, 'bpmn:FlowNode')) {
- handleFlowNode(e, context);
-
- if (is(e, 'bpmn:Activity')) {
-
- handleIoSpecification(e.ioSpecification, context);
-
- // defer handling of associations
- deferred.push(function() {
- forEach(e.dataInputAssociations, contextual(handleDataAssociation, context));
- forEach(e.dataOutputAssociations, contextual(handleDataAssociation, context));
- });
- }
- } else if (is(e, 'bpmn:DataObject')) {
- // SKIP (assume correct referencing via DataObjectReference)
- } else if (is(e, 'bpmn:DataStoreReference')) {
- handleDataElement(e, context);
- } else if (is(e, 'bpmn:DataObjectReference')) {
- handleDataElement(e, context);
- } else {
- logError(
- 'unrecognized flowElement ' + elementToString(e) + ' in context ' +
- (context ? elementToString(context.businessObject) : null),
- { element: e, context: context });
- }
- });
- }
-
- function handleParticipant(participant, context) {
- var newCtx = visitIfDi(participant, context);
-
- var process = participant.processRef;
- if (process) {
- handleProcess(process, newCtx || context);
- }
- }
-
- function handleCollaboration(collaboration) {
-
- forEach(collaboration.participants, contextual(handleParticipant));
-
- handleArtifacts(collaboration.artifacts);
-
- // handle message flows latest in the process
- deferred.push(function() {
- handleMessageFlows(collaboration.messageFlows);
- });
- }
-
-
- ///// API ////////////////////////////////
-
- return {
- handleDefinitions: handleDefinitions
- };
-}
-
-module.exports = BpmnTreeWalker;
-},{"202":202,"203":203,"204":204,"356":356,"43":43}],42:[function(_dereq_,module,exports){
-'use strict';
-
-var BpmnTreeWalker = _dereq_(41);
-
-
-/**
- * Import the definitions into a diagram.
- *
- * Errors and warnings are reported through the specified callback.
- *
- * @param {Diagram} diagram
- * @param {ModdleElement} definitions
- * @param {Function} done the callback, invoked with (err, [ warning ]) once the import is done
- */
-function importBpmnDiagram(diagram, definitions, done) {
-
- var importer = diagram.get('bpmnImporter'),
- eventBus = diagram.get('eventBus');
-
- var error,
- warnings = [];
-
- function parse(definitions) {
-
- var visitor = {
-
- root: function(element) {
- return importer.add(element);
- },
-
- element: function(element, parentShape) {
- return importer.add(element, parentShape);
- },
-
- error: function(message, context) {
- warnings.push({ message: message, context: context });
- }
- };
-
- var walker = new BpmnTreeWalker(visitor);
-
- // import
- walker.handleDefinitions(definitions);
- }
-
- eventBus.fire('import.start');
-
- try {
- parse(definitions);
- } catch (e) {
- error = e;
- }
-
- eventBus.fire(error ? 'import.error' : 'import.success', { error: error, warnings: warnings });
- done(error, warnings);
-}
-
-module.exports.importBpmnDiagram = importBpmnDiagram;
-},{"41":41}],43:[function(_dereq_,module,exports){
-'use strict';
-
-module.exports.elementToString = function(e) {
- if (!e) {
- return '';
- }
-
- return '<' + e.$type + (e.id ? ' id="' + e.id : '') + '" />';
-};
-},{}],44:[function(_dereq_,module,exports){
-module.exports = {
- bpmnImporter: [ 'type', _dereq_(40) ]
-};
-},{"40":40}],45:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_(47).is,
- getBusinessObject = _dereq_(47).getBusinessObject;
-
-module.exports.isExpanded = function(element) {
-
- if (is(element, 'bpmn:CallActivity')) {
- return false;
- }
-
- if (is(element, 'bpmn:SubProcess')) {
- return getBusinessObject(element).di.isExpanded;
- }
-
- if (is(element, 'bpmn:Participant')) {
- return !!getBusinessObject(element).processRef;
- }
-
- return true;
-};
-
-},{"47":47}],46:[function(_dereq_,module,exports){
-'use strict';
-
-var assign = _dereq_(325);
-
-
-var DEFAULT_LABEL_SIZE = module.exports.DEFAULT_LABEL_SIZE = {
- width: 90,
- height: 20
-};
-
-
-/**
- * Returns true if the given semantic has an external label
- *
- * @param {BpmnElement} semantic
- * @return {Boolean} true if has label
- */
-module.exports.hasExternalLabel = function(semantic) {
-
- return semantic.$instanceOf('bpmn:Event') ||
- semantic.$instanceOf('bpmn:Gateway') ||
- semantic.$instanceOf('bpmn:DataStoreReference') ||
- semantic.$instanceOf('bpmn:DataObjectReference') ||
- semantic.$instanceOf('bpmn:SequenceFlow') ||
- semantic.$instanceOf('bpmn:MessageFlow');
-};
-
-
-/**
- * Get the middle of a number of waypoints
- *
- * @param {Array} waypoints
- * @return {Point} the mid point
- */
-var getWaypointsMid = module.exports.getWaypointsMid = function(waypoints) {
-
- var mid = waypoints.length / 2 - 1;
-
- var first = waypoints[Math.floor(mid)];
- var second = waypoints[Math.ceil(mid + 0.01)];
-
- return {
- x: first.x + (second.x - first.x) / 2,
- y: first.y + (second.y - first.y) / 2
- };
-};
-
-
-var getExternalLabelMid = module.exports.getExternalLabelMid = function(element) {
-
- if (element.waypoints) {
- return getWaypointsMid(element.waypoints);
- } else {
- return {
- x: element.x + element.width / 2,
- y: element.y + element.height + DEFAULT_LABEL_SIZE.height / 2
- };
- }
-};
-
-/**
- * Returns the bounds of an elements label, parsed from the elements DI or
- * generated from its bounds.
- *
- * @param {BpmnElement} semantic
- * @param {djs.model.Base} element
- */
-module.exports.getExternalLabelBounds = function(semantic, element) {
-
- var mid,
- size,
- bounds,
- di = semantic.di,
- label = di.label;
-
- if (label && label.bounds) {
- bounds = label.bounds;
-
- size = {
- width: Math.max(DEFAULT_LABEL_SIZE.width, bounds.width),
- height: bounds.height
- };
-
- mid = {
- x: bounds.x + bounds.width / 2,
- y: bounds.y + bounds.height / 2
- };
- } else {
-
- mid = getExternalLabelMid(element);
-
- size = DEFAULT_LABEL_SIZE;
- }
-
- return assign({
- x: mid.x - size.width / 2,
- y: mid.y - size.height / 2
- }, size);
-};
-},{"325":325}],47:[function(_dereq_,module,exports){
-'use strict';
-
-/**
- * Is an element of the given BPMN type?
- *
- * @param {djs.model.Base|ModdleElement} element
- * @param {String} type
- *
- * @return {Boolean}
- */
-function is(element, type) {
- var bo = getBusinessObject(element);
-
- return bo && bo.$instanceOf(type);
-}
-
-module.exports.is = is;
-
-
-/**
- * Return the business object for a given element.
- *
- * @param {djs.model.Base|ModdleElement} element
- *
- * @return {ModdleElement}
- */
-function getBusinessObject(element) {
- return (element && element.businessObject) || element;
-}
-
-module.exports.getBusinessObject = getBusinessObject;
-
-},{}],48:[function(_dereq_,module,exports){
-module.exports = _dereq_(51);
-},{"51":51}],49:[function(_dereq_,module,exports){
-'use strict';
-
-var isString = _dereq_(322),
- isFunction = _dereq_(317),
- assign = _dereq_(325);
-
-var Moddle = _dereq_(57),
- XmlReader = _dereq_(53),
- XmlWriter = _dereq_(54);
-
-/**
- * A sub class of {@link Moddle} with support for import and export of BPMN 2.0 xml files.
- *
- * @class BpmnModdle
- * @extends Moddle
- *
- * @param {Object|Array} packages to use for instantiating the model
- * @param {Object} [options] additional options to pass over
- */
-function BpmnModdle(packages, options) {
- Moddle.call(this, packages, options);
-}
-
-BpmnModdle.prototype = Object.create(Moddle.prototype);
-
-module.exports = BpmnModdle;
-
-
-/**
- * Instantiates a BPMN model tree from a given xml string.
- *
- * @param {String} xmlStr
- * @param {String} [typeName='bpmn:Definitions'] name of the root element
- * @param {Object} [options] options to pass to the underlying reader
- * @param {Function} done callback that is invoked with (err, result, parseContext)
- * once the import completes
- */
-BpmnModdle.prototype.fromXML = function(xmlStr, typeName, options, done) {
-
- if (!isString(typeName)) {
- done = options;
- options = typeName;
- typeName = 'bpmn:Definitions';
- }
-
- if (isFunction(options)) {
- done = options;
- options = {};
- }
-
- var reader = new XmlReader(assign({ model: this, lax: true }, options));
- var rootHandler = reader.handler(typeName);
-
- reader.fromXML(xmlStr, rootHandler, done);
-};
-
-
-/**
- * Serializes a BPMN 2.0 object tree to XML.
- *
- * @param {String} element the root element, typically an instance of `bpmn:Definitions`
- * @param {Object} [options] to pass to the underlying writer
- * @param {Function} done callback invoked with (err, xmlStr) once the import completes
- */
-BpmnModdle.prototype.toXML = function(element, options, done) {
-
- if (isFunction(options)) {
- done = options;
- options = {};
- }
-
- var writer = new XmlWriter(options);
- try {
- var result = writer.toXML(element);
- done(null, result);
- } catch (e) {
- done(e);
- }
-};
-
-},{"317":317,"322":322,"325":325,"53":53,"54":54,"57":57}],50:[function(_dereq_,module,exports){
-'use strict';
-
-var ID_PATTERN = /^(.*:)?id$/;
-
-/**
- * Extends the bpmn instance with id support.
- *
- * @example
- *
- * var moddle, ids;
- *
- * require('id-support').extend(moddle, ids);
- *
- * moddle.ids.next(); // create a next id
- * moddle.ids; // ids instance
- *
- * // claims id as used
- * moddle.create('foo:Bar', { id: 'fooobar1' });
- *
- *
- * @param {Moddle} model
- * @param {Ids} ids
- *
- * @return {Moddle} the extended moddle instance
- */
-module.exports.extend = function(model, ids) {
-
- var set = model.properties.set;
-
- // do not reinitialize setter
- // unless it is already initialized
- if (!model.ids) {
-
- model.properties.set = function(target, property, value) {
-
- // ensure we log used ids once they are assigned
- // to model elements
- if (ID_PATTERN.test(property)) {
-
- var assigned = model.ids.assigned(value);
- if (assigned && assigned !== target) {
- throw new Error('id <' + value + '> already used');
- }
-
- model.ids.claim(value, target);
- }
-
- set.call(this, target, property, value);
- };
- }
-
- model.ids = ids;
-
- return model;
-};
-},{}],51:[function(_dereq_,module,exports){
-'use strict';
-
-var assign = _dereq_(325);
-
-var BpmnModdle = _dereq_(49);
-
-var packages = {
- bpmn: _dereq_(66),
- bpmndi: _dereq_(67),
- dc: _dereq_(68),
- di: _dereq_(69)
-};
-
-module.exports = function(additionalPackages, options) {
- return new BpmnModdle(assign({}, packages, additionalPackages), options);
-};
-},{"325":325,"49":49,"66":66,"67":67,"68":68,"69":69}],52:[function(_dereq_,module,exports){
-'use strict';
-
-function capitalize(string) {
- return string.charAt(0).toUpperCase() + string.slice(1);
-}
-
-function lower(string) {
- return string.charAt(0).toLowerCase() + string.slice(1);
-}
-
-function hasLowerCaseAlias(pkg) {
- return pkg.xml && pkg.xml.tagAlias === 'lowerCase';
-}
-
-
-module.exports.aliasToName = function(alias, pkg) {
- if (hasLowerCaseAlias(pkg)) {
- return capitalize(alias);
- } else {
- return alias;
- }
-};
-
-module.exports.nameToAlias = function(name, pkg) {
- if (hasLowerCaseAlias(pkg)) {
- return lower(name);
- } else {
- return name;
- }
-};
-
-module.exports.DEFAULT_NS_MAP = {
- 'xsi': 'http://www.w3.org/2001/XMLSchema-instance'
-};
-
-module.exports.XSI_TYPE = 'xsi:type';
-},{}],53:[function(_dereq_,module,exports){
-'use strict';
-
-var reduce = _dereq_(208),
- forEach = _dereq_(204),
- find = _dereq_(203),
- assign = _dereq_(325),
- defer = _dereq_(215);
-
-var Stack = _dereq_(56),
- SaxParser = _dereq_(55).parser,
- Moddle = _dereq_(57),
- parseNameNs = _dereq_(62).parseName,
- Types = _dereq_(65),
- coerceType = Types.coerceType,
- isSimpleType = Types.isSimple,
- common = _dereq_(52),
- XSI_TYPE = common.XSI_TYPE,
- XSI_URI = common.DEFAULT_NS_MAP.xsi,
- aliasToName = common.aliasToName;
-
-function parseNodeAttributes(node) {
- var nodeAttrs = node.attributes;
-
- return reduce(nodeAttrs, function(result, v, k) {
- var name, ns;
-
- if (!v.local) {
- name = v.prefix;
- } else {
- ns = parseNameNs(v.name, v.prefix);
- name = ns.name;
- }
-
- result[name] = v.value;
- return result;
- }, {});
-}
-
-function normalizeType(node, attr, model) {
- var nameNs = parseNameNs(attr.value);
-
- var uri = node.ns[nameNs.prefix || ''],
- localName = nameNs.localName,
- pkg = uri && model.getPackage(uri),
- typePrefix;
-
- if (pkg) {
- typePrefix = pkg.xml && pkg.xml.typePrefix;
-
- if (typePrefix && localName.indexOf(typePrefix) === 0) {
- localName = localName.slice(typePrefix.length);
- }
-
- attr.value = pkg.prefix + ':' + localName;
- }
-}
-
-/**
- * Normalizes namespaces for a node given an optional default namespace and a
- * number of mappings from uris to default prefixes.
- *
- * @param {XmlNode} node
- * @param {Model} model the model containing all registered namespaces
- * @param {Uri} defaultNsUri
- */
-function normalizeNamespaces(node, model, defaultNsUri) {
- var uri, prefix;
-
- uri = node.uri || defaultNsUri;
-
- if (uri) {
- var pkg = model.getPackage(uri);
-
- if (pkg) {
- prefix = pkg.prefix;
- } else {
- prefix = node.prefix;
- }
-
- node.prefix = prefix;
- node.uri = uri;
- }
-
- forEach(node.attributes, function(attr) {
-
- // normalize xsi:type attributes because the
- // assigned type may or may not be namespace prefixed
- if (attr.uri === XSI_URI && attr.local === 'type') {
- normalizeType(node, attr, model);
- }
-
- normalizeNamespaces(attr, model, null);
- });
-}
-
-
-/**
- * A parse context.
- *
- * @class
- *
- * @param {Object} options
- * @param {ElementHandler} options.parseRoot the root handler for parsing a document
- * @param {boolean} [options.lax=false] whether or not to ignore invalid elements
- */
-function Context(options) {
-
- /**
- * @property {ElementHandler} parseRoot
- */
-
- /**
- * @property {Boolean} lax
- */
-
- assign(this, options);
-
- var elementsById = this.elementsById = {};
- var references = this.references = [];
- var warnings = this.warnings = [];
-
- this.addReference = function(reference) {
- references.push(reference);
- };
-
- this.addElement = function(id, element) {
-
- if (!id || !element) {
- throw new Error('[xml-reader] id or ctx must not be null');
- }
-
- elementsById[id] = element;
- };
-
- this.addWarning = function (w) {
- warnings.push(w);
- };
-}
-
-function BaseHandler() {}
-
-BaseHandler.prototype.handleEnd = function() {};
-BaseHandler.prototype.handleText = function() {};
-BaseHandler.prototype.handleNode = function() {};
-
-
-/**
- * A simple pass through handler that does nothing except for
- * ignoring all input it receives.
- *
- * This is used to ignore unknown elements and
- * attributes.
- */
-function NoopHandler() { }
-
-NoopHandler.prototype = new BaseHandler();
-
-NoopHandler.prototype.handleNode = function() {
- return this;
-};
-
-function BodyHandler() {}
-
-BodyHandler.prototype = new BaseHandler();
-
-BodyHandler.prototype.handleText = function(text) {
- this.body = (this.body || '') + text;
-};
-
-function ReferenceHandler(property, context) {
- this.property = property;
- this.context = context;
-}
-
-ReferenceHandler.prototype = new BodyHandler();
-
-ReferenceHandler.prototype.handleNode = function(node) {
-
- if (this.element) {
- throw new Error('expected no sub nodes');
- } else {
- this.element = this.createReference(node);
- }
-
- return this;
-};
-
-ReferenceHandler.prototype.handleEnd = function() {
- this.element.id = this.body;
-};
-
-ReferenceHandler.prototype.createReference = function() {
- return {
- property: this.property.ns.name,
- id: ''
- };
-};
-
-function ValueHandler(propertyDesc, element) {
- this.element = element;
- this.propertyDesc = propertyDesc;
-}
-
-ValueHandler.prototype = new BodyHandler();
-
-ValueHandler.prototype.handleEnd = function() {
-
- var value = this.body,
- element = this.element,
- propertyDesc = this.propertyDesc;
-
- value = coerceType(propertyDesc.type, value);
-
- if (propertyDesc.isMany) {
- element.get(propertyDesc.name).push(value);
- } else {
- element.set(propertyDesc.name, value);
- }
-};
-
-
-function BaseElementHandler() {}
-
-BaseElementHandler.prototype = Object.create(BodyHandler.prototype);
-
-BaseElementHandler.prototype.handleNode = function(node) {
- var parser = this,
- element = this.element,
- id;
-
- if (!element) {
- element = this.element = this.createElement(node);
- id = element.id;
-
- if (id) {
- this.context.addElement(id, element);
- }
- } else {
- parser = this.handleChild(node);
- }
-
- return parser;
-};
-
-/**
- * @class XMLReader.ElementHandler
- *
- */
-function ElementHandler(model, type, context) {
- this.model = model;
- this.type = model.getType(type);
- this.context = context;
-}
-
-ElementHandler.prototype = new BaseElementHandler();
-
-ElementHandler.prototype.addReference = function(reference) {
- this.context.addReference(reference);
-};
-
-ElementHandler.prototype.handleEnd = function() {
-
- var value = this.body,
- element = this.element,
- descriptor = element.$descriptor,
- bodyProperty = descriptor.bodyProperty;
-
- if (bodyProperty && value !== undefined) {
- value = coerceType(bodyProperty.type, value);
- element.set(bodyProperty.name, value);
- }
-};
-
-/**
- * Create an instance of the model from the given node.
- *
- * @param {Element} node the xml node
- */
-ElementHandler.prototype.createElement = function(node) {
- var attributes = parseNodeAttributes(node),
- Type = this.type,
- descriptor = Type.$descriptor,
- context = this.context,
- instance = new Type({});
-
- forEach(attributes, function(value, name) {
-
- var prop = descriptor.propertiesByName[name];
-
- if (prop && prop.isReference) {
- context.addReference({
- element: instance,
- property: prop.ns.name,
- id: value
- });
- } else {
- if (prop) {
- value = coerceType(prop.type, value);
- }
-
- instance.set(name, value);
- }
- });
-
- return instance;
-};
-
-ElementHandler.prototype.getPropertyForNode = function(node) {
-
- var nameNs = parseNameNs(node.local, node.prefix);
-
- var type = this.type,
- model = this.model,
- descriptor = type.$descriptor;
-
- var propertyName = nameNs.name,
- property = descriptor.propertiesByName[propertyName],
- elementTypeName,
- elementType,
- typeAnnotation;
-
- // search for properties by name first
-
- if (property) {
-
- if (property.serialize === XSI_TYPE) {
- typeAnnotation = node.attributes[XSI_TYPE];
-
- // xsi type is optional, if it does not exists the
- // default type is assumed
- if (typeAnnotation) {
-
- elementTypeName = typeAnnotation.value;
-
- // TODO: extract real name from attribute
- elementType = model.getType(elementTypeName);
-
- return assign({}, property, { effectiveType: elementType.$descriptor.name });
- }
- }
-
- // search for properties by name first
- return property;
- }
-
-
- var pkg = model.getPackage(nameNs.prefix);
-
- if (pkg) {
- elementTypeName = nameNs.prefix + ':' + aliasToName(nameNs.localName, descriptor.$pkg);
- elementType = model.getType(elementTypeName);
-
- // search for collection members later
- property = find(descriptor.properties, function(p) {
- return !p.isVirtual && !p.isReference && !p.isAttribute && elementType.hasType(p.type);
- });
-
- if (property) {
- return assign({}, property, { effectiveType: elementType.$descriptor.name });
- }
- } else {
- // parse unknown element (maybe extension)
- property = find(descriptor.properties, function(p) {
- return !p.isReference && !p.isAttribute && p.type === 'Element';
- });
-
- if (property) {
- return property;
- }
- }
-
- throw new Error('unrecognized element <' + nameNs.name + '>');
-};
-
-ElementHandler.prototype.toString = function() {
- return 'ElementDescriptor[' + this.type.$descriptor.name + ']';
-};
-
-ElementHandler.prototype.valueHandler = function(propertyDesc, element) {
- return new ValueHandler(propertyDesc, element);
-};
-
-ElementHandler.prototype.referenceHandler = function(propertyDesc) {
- return new ReferenceHandler(propertyDesc, this.context);
-};
-
-ElementHandler.prototype.handler = function(type) {
- if (type === 'Element') {
- return new GenericElementHandler(this.model, type, this.context);
- } else {
- return new ElementHandler(this.model, type, this.context);
- }
-};
-
-/**
- * Handle the child element parsing
- *
- * @param {Element} node the xml node
- */
-ElementHandler.prototype.handleChild = function(node) {
- var propertyDesc, type, element, childHandler;
-
- propertyDesc = this.getPropertyForNode(node);
- element = this.element;
-
- type = propertyDesc.effectiveType || propertyDesc.type;
-
- if (isSimpleType(type)) {
- return this.valueHandler(propertyDesc, element);
- }
-
- if (propertyDesc.isReference) {
- childHandler = this.referenceHandler(propertyDesc).handleNode(node);
- } else {
- childHandler = this.handler(type).handleNode(node);
- }
-
- var newElement = childHandler.element;
-
- // child handles may decide to skip elements
- // by not returning anything
- if (newElement !== undefined) {
-
- if (propertyDesc.isMany) {
- element.get(propertyDesc.name).push(newElement);
- } else {
- element.set(propertyDesc.name, newElement);
- }
-
- if (propertyDesc.isReference) {
- assign(newElement, {
- element: element
- });
-
- this.context.addReference(newElement);
- } else {
- // establish child -> parent relationship
- newElement.$parent = element;
- }
- }
-
- return childHandler;
-};
-
-
-function GenericElementHandler(model, type, context) {
- this.model = model;
- this.context = context;
-}
-
-GenericElementHandler.prototype = Object.create(BaseElementHandler.prototype);
-
-GenericElementHandler.prototype.createElement = function(node) {
-
- var name = node.name,
- prefix = node.prefix,
- uri = node.ns[prefix],
- attributes = node.attributes;
-
- return this.model.createAny(name, uri, attributes);
-};
-
-GenericElementHandler.prototype.handleChild = function(node) {
-
- var handler = new GenericElementHandler(this.model, 'Element', this.context).handleNode(node),
- element = this.element;
-
- var newElement = handler.element,
- children;
-
- if (newElement !== undefined) {
- children = element.$children = element.$children || [];
- children.push(newElement);
-
- // establish child -> parent relationship
- newElement.$parent = element;
- }
-
- return handler;
-};
-
-GenericElementHandler.prototype.handleText = function(text) {
- this.body = this.body || '' + text;
-};
-
-GenericElementHandler.prototype.handleEnd = function() {
- if (this.body) {
- this.element.$body = this.body;
- }
-};
-
-/**
- * A reader for a meta-model
- *
- * @param {Object} options
- * @param {Model} options.model used to read xml files
- * @param {Boolean} options.lax whether to make parse errors warnings
- */
-function XMLReader(options) {
-
- if (options instanceof Moddle) {
- options = {
- model: options
- };
- }
-
- assign(this, { lax: false }, options);
-}
-
-
-XMLReader.prototype.fromXML = function(xml, rootHandler, done) {
-
- var model = this.model,
- lax = this.lax,
- context = new Context({
- parseRoot: rootHandler
- });
-
- var parser = new SaxParser(true, { xmlns: true, trim: true }),
- stack = new Stack();
-
- rootHandler.context = context;
-
- // push root handler
- stack.push(rootHandler);
-
-
- function resolveReferences() {
-
- var elementsById = context.elementsById;
- var references = context.references;
-
- var i, r;
-
- for (i = 0; !!(r = references[i]); i++) {
- var element = r.element;
- var reference = elementsById[r.id];
- var property = element.$descriptor.propertiesByName[r.property];
-
- if (!reference) {
- context.addWarning({
- message: 'unresolved reference <' + r.id + '>',
- element: r.element,
- property: r.property,
- value: r.id
- });
- }
-
- if (property.isMany) {
- var collection = element.get(property.name),
- idx = collection.indexOf(r);
-
- if (!reference) {
- // remove unresolvable reference
- collection.splice(idx, 1);
- } else {
- // update reference
- collection[idx] = reference;
- }
- } else {
- element.set(property.name, reference);
- }
- }
- }
-
- function handleClose(tagName) {
- stack.pop().handleEnd();
- }
-
- function handleOpen(node) {
- var handler = stack.peek();
-
- normalizeNamespaces(node, model);
-
- try {
- stack.push(handler.handleNode(node));
- } catch (e) {
-
- var line = this.line,
- column = this.column;
-
- var message =
- 'unparsable content <' + node.name + '> detected\n\t' +
- 'line: ' + line + '\n\t' +
- 'column: ' + column + '\n\t' +
- 'nested error: ' + e.message;
-
- if (lax) {
- context.addWarning({
- message: message,
- error: e
- });
-
- console.warn('could not parse node');
- console.warn(e);
-
- stack.push(new NoopHandler());
- } else {
- console.error('could not parse document');
- console.error(e);
-
- throw new Error(message);
- }
- }
- }
-
- function handleText(text) {
- stack.peek().handleText(text);
- }
-
- parser.onopentag = handleOpen;
- parser.oncdata = parser.ontext = handleText;
- parser.onclosetag = handleClose;
- parser.onend = resolveReferences;
-
- // deferred parse XML to make loading really ascnchronous
- // this ensures the execution environment (node or browser)
- // is kept responsive and that certain optimization strategies
- // can kick in
- defer(function() {
- var error;
-
- try {
- parser.write(xml).close();
- } catch (e) {
- error = e;
- }
-
- done(error, error ? undefined : rootHandler.element, context);
- });
-};
-
-XMLReader.prototype.handler = function(name) {
- return new ElementHandler(this.model, name);
-};
-
-module.exports = XMLReader;
-module.exports.ElementHandler = ElementHandler;
-},{"203":203,"204":204,"208":208,"215":215,"325":325,"52":52,"55":55,"56":56,"57":57,"62":62,"65":65}],54:[function(_dereq_,module,exports){
-'use strict';
-
-var map = _dereq_(207),
- forEach = _dereq_(204),
- isString = _dereq_(322),
- filter = _dereq_(202),
- assign = _dereq_(325);
-
-var Types = _dereq_(65),
- parseNameNs = _dereq_(62).parseName,
- common = _dereq_(52),
- nameToAlias = common.nameToAlias;
-
-var XML_PREAMBLE = '\n',
- ESCAPE_CHARS = /(<|>|'|"|&|\n\r|\n)/g,
- DEFAULT_NS_MAP = common.DEFAULT_NS_MAP,
- XSI_TYPE = common.XSI_TYPE;
-
-
-function nsName(ns) {
- if (isString(ns)) {
- return ns;
- } else {
- return (ns.prefix ? ns.prefix + ':' : '') + ns.localName;
- }
-}
-
-function getElementNs(ns, descriptor) {
- if (descriptor.isGeneric) {
- return descriptor.name;
- } else {
- return assign({ localName: nameToAlias(descriptor.ns.localName, descriptor.$pkg) }, ns);
- }
-}
-
-function getPropertyNs(ns, descriptor) {
- return assign({ localName: descriptor.ns.localName }, ns);
-}
-
-function getSerializableProperties(element) {
- var descriptor = element.$descriptor;
-
- return filter(descriptor.properties, function(p) {
- var name = p.name;
-
- // do not serialize defaults
- if (!element.hasOwnProperty(name)) {
- return false;
- }
-
- var value = element[name];
-
- // do not serialize default equals
- if (value === p.default) {
- return false;
- }
-
- return p.isMany ? value.length : true;
- });
-}
-
-var ESCAPE_MAP = {
- '\n': '10',
- '\n\r': '10',
- '"': '34',
- '\'': '39',
- '<': '60',
- '>': '62',
- '&': '38'
-};
-
-/**
- * Escape a string attribute to not contain any bad values (line breaks, '"', ...)
- *
- * @param {String} str the string to escape
- * @return {String} the escaped string
- */
-function escapeAttr(str) {
-
- // ensure we are handling strings here
- str = isString(str) ? str : '' + str;
-
- return str.replace(ESCAPE_CHARS, function(str) {
- return '' + ESCAPE_MAP[str] + ';';
- });
-}
-
-function filterAttributes(props) {
- return filter(props, function(p) { return p.isAttr; });
-}
-
-function filterContained(props) {
- return filter(props, function(p) { return !p.isAttr; });
-}
-
-
-function ReferenceSerializer(parent, ns) {
- this.ns = ns;
-}
-
-ReferenceSerializer.prototype.build = function(element) {
- this.element = element;
- return this;
-};
-
-ReferenceSerializer.prototype.serializeTo = function(writer) {
- writer
- .appendIndent()
- .append('<' + nsName(this.ns) + '>' + this.element.id + '' + nsName(this.ns) + '>')
- .appendNewLine();
-};
-
-function BodySerializer() {}
-
-BodySerializer.prototype.serializeValue = BodySerializer.prototype.serializeTo = function(writer) {
- var escape = this.escape;
-
- if (escape) {
- writer.append('');
- }
-};
-
-BodySerializer.prototype.build = function(prop, value) {
- this.value = value;
-
- if (prop.type === 'String' && ESCAPE_CHARS.test(value)) {
- this.escape = true;
- }
-
- return this;
-};
-
-function ValueSerializer(ns) {
- this.ns = ns;
-}
-
-ValueSerializer.prototype = new BodySerializer();
-
-ValueSerializer.prototype.serializeTo = function(writer) {
-
- writer
- .appendIndent()
- .append('<' + nsName(this.ns) + '>');
-
- this.serializeValue(writer);
-
- writer
- .append( '' + nsName(this.ns) + '>')
- .appendNewLine();
-};
-
-function ElementSerializer(parent, ns) {
- this.body = [];
- this.attrs = [];
-
- this.parent = parent;
- this.ns = ns;
-}
-
-ElementSerializer.prototype.build = function(element) {
- this.element = element;
-
- var otherAttrs = this.parseNsAttributes(element);
-
- if (!this.ns) {
- this.ns = this.nsTagName(element.$descriptor);
- }
-
- if (element.$descriptor.isGeneric) {
- this.parseGeneric(element);
- } else {
- var properties = getSerializableProperties(element);
-
- this.parseAttributes(filterAttributes(properties));
- this.parseContainments(filterContained(properties));
-
- this.parseGenericAttributes(element, otherAttrs);
- }
-
- return this;
-};
-
-ElementSerializer.prototype.nsTagName = function(descriptor) {
- var effectiveNs = this.logNamespaceUsed(descriptor.ns);
- return getElementNs(effectiveNs, descriptor);
-};
-
-ElementSerializer.prototype.nsPropertyTagName = function(descriptor) {
- var effectiveNs = this.logNamespaceUsed(descriptor.ns);
- return getPropertyNs(effectiveNs, descriptor);
-};
-
-ElementSerializer.prototype.isLocalNs = function(ns) {
- return ns.uri === this.ns.uri;
-};
-
-ElementSerializer.prototype.nsAttributeName = function(element) {
-
- var ns;
-
- if (isString(element)) {
- ns = parseNameNs(element);
- } else
- if (element.ns) {
- ns = element.ns;
- }
-
- var effectiveNs = this.logNamespaceUsed(ns);
-
- // strip prefix if same namespace like parent
- if (this.isLocalNs(effectiveNs)) {
- return { localName: ns.localName };
- } else {
- return assign({ localName: ns.localName }, effectiveNs);
- }
-};
-
-ElementSerializer.prototype.parseGeneric = function(element) {
-
- var self = this,
- body = this.body,
- attrs = this.attrs;
-
- forEach(element, function(val, key) {
-
- if (key === '$body') {
- body.push(new BodySerializer().build({ type: 'String' }, val));
- } else
- if (key === '$children') {
- forEach(val, function(child) {
- body.push(new ElementSerializer(self).build(child));
- });
- } else
- if (key.indexOf('$') !== 0) {
- attrs.push({ name: key, value: escapeAttr(val) });
- }
- });
-};
-
-/**
- * Parse namespaces and return a list of left over generic attributes
- *
- * @param {Object} element
- * @return {Array}
- */
-ElementSerializer.prototype.parseNsAttributes = function(element) {
- var self = this;
-
- var genericAttrs = element.$attrs;
-
- var attributes = [];
-
- // parse namespace attributes first
- // and log them. push non namespace attributes to a list
- // and process them later
- forEach(genericAttrs, function(value, name) {
- var nameNs = parseNameNs(name);
-
- if (nameNs.prefix === 'xmlns') {
- self.logNamespace({ prefix: nameNs.localName, uri: value });
- } else
- if (!nameNs.prefix && nameNs.localName === 'xmlns') {
- self.logNamespace({ uri: value });
- } else {
- attributes.push({ name: name, value: value });
- }
- });
-
- return attributes;
-};
-
-ElementSerializer.prototype.parseGenericAttributes = function(element, attributes) {
-
- var self = this;
-
- forEach(attributes, function(attr) {
-
- // do not serialize xsi:type attribute
- // it is set manually based on the actual implementation type
- if (attr.name === XSI_TYPE) {
- return;
- }
-
- try {
- self.addAttribute(self.nsAttributeName(attr.name), attr.value);
- } catch (e) {
- console.warn('[writer] missing namespace information for ', attr.name, '=', attr.value, 'on', element, e);
- }
- });
-};
-
-ElementSerializer.prototype.parseContainments = function(properties) {
-
- var self = this,
- body = this.body,
- element = this.element;
-
- forEach(properties, function(p) {
- var value = element.get(p.name),
- isReference = p.isReference,
- isMany = p.isMany;
-
- var ns = self.nsPropertyTagName(p);
-
- if (!isMany) {
- value = [ value ];
- }
-
- if (p.isBody) {
- body.push(new BodySerializer().build(p, value[0]));
- } else
- if (Types.isSimple(p.type)) {
- forEach(value, function(v) {
- body.push(new ValueSerializer(ns).build(p, v));
- });
- } else
- if (isReference) {
- forEach(value, function(v) {
- body.push(new ReferenceSerializer(self, ns).build(v));
- });
- } else {
- // allow serialization via type
- // rather than element name
- var asType = p.serialize === XSI_TYPE;
-
- forEach(value, function(v) {
- var serializer;
-
- if (asType) {
- serializer = new TypeSerializer(self, ns);
- } else {
- serializer = new ElementSerializer(self);
- }
-
- body.push(serializer.build(v));
- });
- }
- });
-};
-
-ElementSerializer.prototype.getNamespaces = function() {
- if (!this.parent) {
- if (!this.namespaces) {
- this.namespaces = {
- prefixMap: {},
- uriMap: {},
- used: {}
- };
- }
- } else {
- this.namespaces = this.parent.getNamespaces();
- }
-
- return this.namespaces;
-};
-
-ElementSerializer.prototype.logNamespace = function(ns) {
- var namespaces = this.getNamespaces();
-
- var existing = namespaces.uriMap[ns.uri];
-
- if (!existing) {
- namespaces.uriMap[ns.uri] = ns;
- }
-
- namespaces.prefixMap[ns.prefix] = ns.uri;
-
- return ns;
-};
-
-ElementSerializer.prototype.logNamespaceUsed = function(ns) {
- var element = this.element,
- model = element.$model,
- namespaces = this.getNamespaces();
-
- // ns may be
- //
- // * prefix only
- // * prefix:uri
-
- var prefix = ns.prefix;
- var uri = ns.uri || DEFAULT_NS_MAP[prefix] ||
- namespaces.prefixMap[prefix] || (model ? (model.getPackage(prefix) || {}).uri : null);
-
- if (!uri) {
- throw new Error('no namespace uri given for prefix <' + ns.prefix + '>');
- }
-
- ns = namespaces.uriMap[uri];
-
- if (!ns) {
- ns = this.logNamespace({ prefix: prefix, uri: uri });
- }
-
- if (!namespaces.used[ns.uri]) {
- namespaces.used[ns.uri] = ns;
- }
-
- return ns;
-};
-
-ElementSerializer.prototype.parseAttributes = function(properties) {
- var self = this,
- element = this.element;
-
- forEach(properties, function(p) {
- self.logNamespaceUsed(p.ns);
-
- var value = element.get(p.name);
-
- if (p.isReference) {
- value = value.id;
- }
-
- self.addAttribute(self.nsAttributeName(p), value);
- });
-};
-
-ElementSerializer.prototype.addAttribute = function(name, value) {
- var attrs = this.attrs;
-
- if (isString(value)) {
- value = escapeAttr(value);
- }
-
- attrs.push({ name: name, value: value });
-};
-
-ElementSerializer.prototype.serializeAttributes = function(writer) {
- var attrs = this.attrs,
- root = !this.parent,
- namespaces = this.namespaces;
-
- function collectNsAttrs() {
- return map(namespaces.used, function(ns) {
- var name = 'xmlns' + (ns.prefix ? ':' + ns.prefix : '');
- return { name: name, value: ns.uri };
- });
- }
-
- if (root) {
- attrs = collectNsAttrs().concat(attrs);
- }
-
- forEach(attrs, function(a) {
- writer
- .append(' ')
- .append(nsName(a.name)).append('="').append(a.value).append('"');
- });
-};
-
-ElementSerializer.prototype.serializeTo = function(writer) {
- var hasBody = this.body.length,
- indent = !(this.body.length === 1 && this.body[0] instanceof BodySerializer);
-
- writer
- .appendIndent()
- .append('<' + nsName(this.ns));
-
- this.serializeAttributes(writer);
-
- writer.append(hasBody ? '>' : ' />');
-
- if (hasBody) {
-
- if (indent) {
- writer
- .appendNewLine()
- .indent();
- }
-
- forEach(this.body, function(b) {
- b.serializeTo(writer);
- });
-
- if (indent) {
- writer
- .unindent()
- .appendIndent();
- }
-
- writer.append('' + nsName(this.ns) + '>');
- }
-
- writer.appendNewLine();
-};
-
-/**
- * A serializer for types that handles serialization of data types
- */
-function TypeSerializer(parent, ns) {
- ElementSerializer.call(this, parent, ns);
-}
-
-TypeSerializer.prototype = new ElementSerializer();
-
-TypeSerializer.prototype.build = function(element) {
- var descriptor = element.$descriptor;
-
- this.element = element;
-
- this.typeNs = this.nsTagName(descriptor);
-
- // add xsi:type attribute to represent the elements
- // actual type
-
- var typeNs = this.typeNs,
- pkg = element.$model.getPackage(typeNs.uri),
- typePrefix = (pkg.xml && pkg.xml.typePrefix) || '';
-
- this.addAttribute(this.nsAttributeName(XSI_TYPE),
- (typeNs.prefix ? typeNs.prefix + ':' : '') +
- typePrefix + descriptor.ns.localName);
-
- // do the usual stuff
- return ElementSerializer.prototype.build.call(this, element);
-};
-
-TypeSerializer.prototype.isLocalNs = function(ns) {
- return ns.uri === this.typeNs.uri;
-};
-
-function SavingWriter() {
- this.value = '';
-
- this.write = function(str) {
- this.value += str;
- };
-}
-
-function FormatingWriter(out, format) {
-
- var indent = [''];
-
- this.append = function(str) {
- out.write(str);
-
- return this;
- };
-
- this.appendNewLine = function() {
- if (format) {
- out.write('\n');
- }
-
- return this;
- };
-
- this.appendIndent = function() {
- if (format) {
- out.write(indent.join(' '));
- }
-
- return this;
- };
-
- this.indent = function() {
- indent.push('');
- return this;
- };
-
- this.unindent = function() {
- indent.pop();
- return this;
- };
-}
-
-/**
- * A writer for meta-model backed document trees
- *
- * @param {Object} options output options to pass into the writer
- */
-function XMLWriter(options) {
-
- options = assign({ format: false, preamble: true }, options || {});
-
- function toXML(tree, writer) {
- var internalWriter = writer || new SavingWriter();
- var formatingWriter = new FormatingWriter(internalWriter, options.format);
-
- if (options.preamble) {
- formatingWriter.append(XML_PREAMBLE);
- }
-
- new ElementSerializer().build(tree).serializeTo(formatingWriter);
-
- if (!writer) {
- return internalWriter.value;
- }
- }
-
- return {
- toXML: toXML
- };
-}
-
-module.exports = XMLWriter;
-},{"202":202,"204":204,"207":207,"322":322,"325":325,"52":52,"62":62,"65":65}],55:[function(_dereq_,module,exports){
-(function (Buffer){
-// wrapper for non-node envs
-;(function (sax) {
-
-sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }
-sax.SAXParser = SAXParser
-sax.SAXStream = SAXStream
-sax.createStream = createStream
-
-// When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.
-// When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),
-// since that's the earliest that a buffer overrun could occur. This way, checks are
-// as rare as required, but as often as necessary to ensure never crossing this bound.
-// Furthermore, buffers are only tested at most once per write(), so passing a very
-// large string into write() might have undesirable effects, but this is manageable by
-// the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme
-// edge case, result in creating at most one complete copy of the string passed in.
-// Set to Infinity to have unlimited buffers.
-sax.MAX_BUFFER_LENGTH = 64 * 1024
-
-var buffers = [
- "comment", "sgmlDecl", "textNode", "tagName", "doctype",
- "procInstName", "procInstBody", "entity", "attribName",
- "attribValue", "cdata", "script"
-]
-
-sax.EVENTS = // for discoverability.
- [ "text"
- , "processinginstruction"
- , "sgmldeclaration"
- , "doctype"
- , "comment"
- , "attribute"
- , "opentag"
- , "closetag"
- , "opencdata"
- , "cdata"
- , "closecdata"
- , "error"
- , "end"
- , "ready"
- , "script"
- , "opennamespace"
- , "closenamespace"
- ]
-
-function SAXParser (strict, opt) {
- if (!(this instanceof SAXParser)) return new SAXParser(strict, opt)
-
- var parser = this
- clearBuffers(parser)
- parser.q = parser.c = ""
- parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH
- parser.opt = opt || {}
- parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags
- parser.looseCase = parser.opt.lowercase ? "toLowerCase" : "toUpperCase"
- parser.tags = []
- parser.closed = parser.closedRoot = parser.sawRoot = false
- parser.tag = parser.error = null
- parser.strict = !!strict
- parser.noscript = !!(strict || parser.opt.noscript)
- parser.state = S.BEGIN
- parser.ENTITIES = Object.create(sax.ENTITIES)
- parser.attribList = []
-
- // namespaces form a prototype chain.
- // it always points at the current tag,
- // which protos to its parent tag.
- if (parser.opt.xmlns) parser.ns = Object.create(rootNS)
-
- // mostly just for error reporting
- parser.trackPosition = parser.opt.position !== false
- if (parser.trackPosition) {
- parser.position = parser.line = parser.column = 0
- }
- emit(parser, "onready")
-}
-
-if (!Object.create) Object.create = function (o) {
- function f () { this.__proto__ = o }
- f.prototype = o
- return new f
-}
-
-if (!Object.getPrototypeOf) Object.getPrototypeOf = function (o) {
- return o.__proto__
-}
-
-if (!Object.keys) Object.keys = function (o) {
- var a = []
- for (var i in o) if (o.hasOwnProperty(i)) a.push(i)
- return a
-}
-
-function checkBufferLength (parser) {
- var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)
- , maxActual = 0
- for (var i = 0, l = buffers.length; i < l; i ++) {
- var len = parser[buffers[i]].length
- if (len > maxAllowed) {
- // Text/cdata nodes can get big, and since they're buffered,
- // we can get here under normal conditions.
- // Avoid issues by emitting the text node now,
- // so at least it won't get any bigger.
- switch (buffers[i]) {
- case "textNode":
- closeText(parser)
- break
-
- case "cdata":
- emitNode(parser, "oncdata", parser.cdata)
- parser.cdata = ""
- break
-
- case "script":
- emitNode(parser, "onscript", parser.script)
- parser.script = ""
- break
-
- default:
- error(parser, "Max buffer length exceeded: "+buffers[i])
- }
- }
- maxActual = Math.max(maxActual, len)
- }
- // schedule the next check for the earliest possible buffer overrun.
- parser.bufferCheckPosition = (sax.MAX_BUFFER_LENGTH - maxActual)
- + parser.position
-}
-
-function clearBuffers (parser) {
- for (var i = 0, l = buffers.length; i < l; i ++) {
- parser[buffers[i]] = ""
- }
-}
-
-function flushBuffers (parser) {
- closeText(parser)
- if (parser.cdata !== "") {
- emitNode(parser, "oncdata", parser.cdata)
- parser.cdata = ""
- }
- if (parser.script !== "") {
- emitNode(parser, "onscript", parser.script)
- parser.script = ""
- }
-}
-
-SAXParser.prototype =
- { end: function () { end(this) }
- , write: write
- , resume: function () { this.error = null; return this }
- , close: function () { return this.write(null) }
- , flush: function () { flushBuffers(this) }
- }
-
-try {
- var Stream = _dereq_("stream").Stream
-} catch (ex) {
- var Stream = function () {}
-}
-
-
-var streamWraps = sax.EVENTS.filter(function (ev) {
- return ev !== "error" && ev !== "end"
-})
-
-function createStream (strict, opt) {
- return new SAXStream(strict, opt)
-}
-
-function SAXStream (strict, opt) {
- if (!(this instanceof SAXStream)) return new SAXStream(strict, opt)
-
- Stream.apply(this)
-
- this._parser = new SAXParser(strict, opt)
- this.writable = true
- this.readable = true
-
-
- var me = this
-
- this._parser.onend = function () {
- me.emit("end")
- }
-
- this._parser.onerror = function (er) {
- me.emit("error", er)
-
- // if didn't throw, then means error was handled.
- // go ahead and clear error, so we can write again.
- me._parser.error = null
- }
-
- this._decoder = null;
-
- streamWraps.forEach(function (ev) {
- Object.defineProperty(me, "on" + ev, {
- get: function () { return me._parser["on" + ev] },
- set: function (h) {
- if (!h) {
- me.removeAllListeners(ev)
- return me._parser["on"+ev] = h
- }
- me.on(ev, h)
- },
- enumerable: true,
- configurable: false
- })
- })
-}
-
-SAXStream.prototype = Object.create(Stream.prototype,
- { constructor: { value: SAXStream } })
-
-SAXStream.prototype.write = function (data) {
- if (typeof Buffer === 'function' &&
- typeof Buffer.isBuffer === 'function' &&
- Buffer.isBuffer(data)) {
- if (!this._decoder) {
- var SD = _dereq_('string_decoder').StringDecoder
- this._decoder = new SD('utf8')
- }
- data = this._decoder.write(data);
- }
-
- this._parser.write(data.toString())
- this.emit("data", data)
- return true
-}
-
-SAXStream.prototype.end = function (chunk) {
- if (chunk && chunk.length) this.write(chunk)
- this._parser.end()
- return true
-}
-
-SAXStream.prototype.on = function (ev, handler) {
- var me = this
- if (!me._parser["on"+ev] && streamWraps.indexOf(ev) !== -1) {
- me._parser["on"+ev] = function () {
- var args = arguments.length === 1 ? [arguments[0]]
- : Array.apply(null, arguments)
- args.splice(0, 0, ev)
- me.emit.apply(me, args)
- }
- }
-
- return Stream.prototype.on.call(me, ev, handler)
-}
-
-
-
-// character classes and tokens
-var whitespace = "\r\n\t "
- // this really needs to be replaced with character classes.
- // XML allows all manner of ridiculous numbers and digits.
- , number = "0124356789"
- , letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
- // (Letter | "_" | ":")
- , quote = "'\""
- , entity = number+letter+"#"
- , attribEnd = whitespace + ">"
- , CDATA = "[CDATA["
- , DOCTYPE = "DOCTYPE"
- , XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace"
- , XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/"
- , rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }
-
-// turn all the string character sets into character class objects.
-whitespace = charClass(whitespace)
-number = charClass(number)
-letter = charClass(letter)
-
-// http://www.w3.org/TR/REC-xml/#NT-NameStartChar
-// This implementation works on strings, a single character at a time
-// as such, it cannot ever support astral-plane characters (10000-EFFFF)
-// without a significant breaking change to either this parser, or the
-// JavaScript language. Implementation of an emoji-capable xml parser
-// is left as an exercise for the reader.
-var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
-
-var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/
-
-quote = charClass(quote)
-entity = charClass(entity)
-attribEnd = charClass(attribEnd)
-
-function charClass (str) {
- return str.split("").reduce(function (s, c) {
- s[c] = true
- return s
- }, {})
-}
-
-function isRegExp (c) {
- return Object.prototype.toString.call(c) === '[object RegExp]'
-}
-
-function is (charclass, c) {
- return isRegExp(charclass) ? !!c.match(charclass) : charclass[c]
-}
-
-function not (charclass, c) {
- return !is(charclass, c)
-}
-
-var S = 0
-sax.STATE =
-{ BEGIN : S++
-, TEXT : S++ // general stuff
-, TEXT_ENTITY : S++ // & and such.
-, OPEN_WAKA : S++ // <
-, SGML_DECL : S++ //
-, SCRIPT : S++ //