* take target attach and parent hints on `connection.create`
rule into account to implement create from context-menu
Related to bpmn-io/diagram-js#242
Closes#742
Add basic auto-placement of boundary events:
* handle top aligned events
* handle bottom aligned events
* take boundary events into account when placing
host elements and vice versa
Related to #563
Elements will automatically be created at appropriate
positions when context menu create entries are being
clicked (rather than dragged).
This marks a major step forward for mobile modeling,
too as dragging, especially dragging out from very small
controls is very cumbersome to do.
Things we take into account:
* for bpmn:FlowNodes, we try to compute the current
distance between elements on the flow based on
connections going in and out of the flow nodes
source element
* for bpmn:TextAnnotation we assume placement of the
element top right of the source shape
* for bpmn:DataObject and friends we assume a
placement bottom right of the source shape
* for all elements, we try not to place elements on
top of each other; i.e. new elements will be pushed
up or down accordingly, if an element at a chosen
position does already exist
Integration into other services:
* context pad provider works with autoPlace, if
available and defaults to drag start without
* auto placed elements are selected and direct editing
may conditionally be activated based on element type
(LabelEditingProvider knows the rules)
Users can out out of autoPlace by specifying the configuration
property `config.contextPad.autoPlace = false`.
Closes#563
BREAKING CHANGE:
* This breaks the default interaction from the context
pad; if you rely on clicking to start the drag
you can opt out of autoPlace:
```
new BpmnJS({ contextPad: { autoPlace: false } });
```
* ordering provider ensures sequence flows appear
behind tasks
* importer makes sure we render elements in the order
lanes > sequence flows > other flow elements
* consistent minimal opacity ensures elements in
front of tasks don't look _connected_
Closes#727
* use bpmnFactory for cloning to ensure all relevant
elements have actual IDs
* don't copy dataAssociations, as they are visual elements
that will be created during element re-connection
NOTE: This fixes data input association not properly being
wired during target replace, too.
Closes#694, #693
Async utilities properly propagate _all_ errors to the
specified _done_ callback. Failing in _done_ does not
re-invoke it.
Adjustments made in
* Viewer#importXML
* Viewer#saveSVG
* Importer#importBpmnDiagram
Tests cleaned up to remove un-necessary `if (err) { ...` snippets.
Chrome and other modern desktop browsers
ship with touch features out of the box.
Because of that, it is not possible to use
the check
```
'ontouchstart' in document.documentElement
```
This improves the import and export of BPMN 2.0 XML documents
+ improves di prefix collision handling
+ proper deconflicting of prefixes during export
+ validate and detect non-BPMN root elements
+ replace underlying XML parser for higher speed and smaller
bundle size
+ pass parse warnings with errors
NOTE:
* some error messages on broken XML may have changed
due to changes in the underlying XML parser