Commit Graph

956 Commits

Author SHA1 Message Date
Philipp Fromme 8b4ddd53c0 chore(bpmn-auto-resize): add test 2019-05-10 07:22:51 +00:00
Philipp Fromme 2335282a82 fix(bpmn-create-connect-preview): override #getConnection 2019-05-09 14:12:37 +00:00
Philipp Fromme 1958b2e81b fix(bpmn-connect-preview): override #getConnection 2019-05-09 14:12:37 +00:00
Nico Rehwaldt d90f048e8c chore(layout): support { source, target } hints in BpmnLayouter
Closes #743
2019-05-08 12:59:27 +00:00
Philipp Fromme 175e395768 feat(ordering): always render groups on top
Closes #979
2019-05-07 14:36:32 +02:00
Niklas Kiefer bf2dfe4338 feat(rules): add resizing of groups
Closes #956
2019-05-07 14:36:32 +02:00
Niklas Kiefer 89886d7c12 feat(ElementFactory): add #isFrame property on group creation
This allows basic support for diagram-js frame elements.

Closes #959
Closes #960
2019-05-07 14:36:32 +02:00
Philipp Fromme 13f1e05ee7 feat(grid-snapping): integrate with connection layout
Closes #1010
Related to #973
2019-05-07 10:08:35 +02:00
Maciej Barelkowski e4fe8c239b style(modeling): simplify event-based-gateway behavior 2019-05-06 12:41:11 +02:00
Gustavo E. Jimenez Folta 424a05a18a feat(modeling): correctly handle event based gateway connections
Handles two new scenarios:

1. A user wants to connect an event-based gateway to an event-based
gateway target with existing incoming sequence flows. The existing
sequence flows are removed before connecting the new one.

2. A user wants to replace a gateway, that is already connected to
event-based gateway targets, with an event-based gateway. The existing
incoming sequence flows of the targets, which do not belong to the
newly replaced event-based gateway, are removed before the replacement
operation finishes.

This is because target elements in an event gateway configuration
must not have any additional incoming sequence flows other than
that from the event gateway.
2019-05-06 12:41:11 +02:00
Gustavo E. Jimenez Folta b6e9c2186a fix(BpmnRules): update canConnectSequenceFlow()
This prevents multiple incoming sequence flows to target events of an
event-based gateway when the connection source is not an event-based
gateway.
2019-05-06 12:41:11 +02:00
Philipp Fromme 867b41c04f feat(grid-snapping): integrate grid snapping with auto place feature
Closes #1003
2019-04-30 09:32:42 +00:00
Philipp Fromme 4388359fb1 chore(autp-place): move helper function to util 2019-04-30 09:32:42 +00:00
Nico Rehwaldt 5affe25705 feat(modeling): adjust default collapsed participant height to 60px
This better aligns our collapse behavior with other tools.
2019-04-29 12:04:01 +00:00
Nico Rehwaldt 86506468ba feat(Modeler): re-integrate grid snapping 2019-04-26 18:31:36 +00:00
Philipp Fromme fa2e472361 feat(grid-snapping): integrate auto resize
Related to camunda/camunda-modeler#1344
Related to camunda/camunda-modeler#1349
2019-04-26 18:31:36 +00:00
Philipp Fromme 3b756e0725 feat(grid-snapping): snap resizable elements top-left
Related to camunda/camunda-modeler#1344
2019-04-26 18:31:36 +00:00
Maciej Barelkowski b72426834d chore(Modeler): disable grid snapping 2019-04-25 10:21:05 +02:00
Maciej Barelkowski 06ffc9d407 fix(modeling/BpmnLayouter): properly lay out boundary event connections
Closes #891
2019-04-24 11:56:01 +00:00
Maciej Barelkowski 5438f1a0c2 chore(modeling/BpmnLayouter): refactor boundary event layout 2019-04-24 11:56:01 +00:00
Gustavo E. Jimenez Folta 0f7b8f483c feat(replace): auto-resize height when toggling pool collapse/expand 2019-04-23 15:56:50 +02:00
Maciej Barelkowski 55ca4c8f3d chore(modeling/label): adjust label position to laid out connection
Closes #718
2019-04-18 16:06:44 +00:00
Maciej Barelkowski 411da58d43 chore(modeling): remove reconnect listeners
Listeners are triggered via layout event.
2019-04-18 16:06:44 +00:00
Nico Rehwaldt 13e3752f94 fix(draw): render hex and rgb encoded color markers
Until now we did not properly sanitize the IDs we create for colored
markers. This would make the marker retrival fail with fill and
stroke colors encoded in hex and rgb(a, b, c) form.

This commit improves the situation by removing forbidden chars from
the marker ID.

Closes #981
Related to camunda/camunda-modeler#1342
2019-04-18 14:42:01 +00:00
Nico Rehwaldt daee95743d chore(Viewer): type BPMNDiagram arg where possible 2019-04-16 15:20:12 +02:00
Valerio Spadaro 3f0583ad5f feat(Viewer): add #open method
This adds a method to switch displayed diagram without reimporting
xml via

```
var viewer = new Viewer({ container: container });
viewer.importXML(xml, diagramId, done);

var diagrams = viewer.getDefinitions().diagrams;
viewer.open(diagrams[1], done);
```
2019-04-16 15:20:12 +02:00
Valerio Spadaro 1c0585aaaf feat(Viewer): allow to select diagram to view
This introduces a new parameter to `Viewer#importXML`
which enables to choose the diagram to display.

```
var viewer = new Viewer({ container: container });
viewer.importXML(xml, diagramId, done);
```

Closes #87
2019-04-16 15:20:12 +02:00
Maciej Barelkowski 0c71ad30a0 feat(Viewer): remove businessObject#di binding on #clear
Closes #978
2019-04-16 15:10:43 +02:00
Maciej Barelkowski 00b7d9ecc2 fix(import/BpmnTreeWalker): pass context to unhandled process handler 2019-04-16 09:15:14 +00:00
Philipp Fromme b596c6dd06 feat(snapping): add grid snapping
Related to #973
2019-04-12 17:42:08 +02:00
Maciej Barelkowski 6f7925080c chore(modeling/BpmnUpdater): remove now unnecessary crop on reconnect
As of diagram-js@3.2.0 layouting will be triggered
on reconnectStart / reconnectEnd.

Related to #940
2019-04-10 19:08:49 +00:00
Nico Rehwaldt 8ca4c1d7b0 feat(modeling): allow basic movement of DataInput / DataOutput
Allow moving DataInput / DataOutput as
long as they do not leave their original
container.

Related to #951
2019-03-29 13:21:34 +00:00
Nico Rehwaldt fe9d4ff06d feat(modeling): ensure wrapping DataInput/Output in participant works 2019-03-29 13:21:34 +00:00
Nico Rehwaldt 8c49cb679b fix(modeling): properly handle DataInput / DataOutput move
Closes #961
2019-03-29 13:21:34 +00:00
Nico Rehwaldt 2fff30a284 feat(label-editing): support data input/output
Related to #951
2019-03-26 11:55:36 +01:00
Nico Rehwaldt 89719de3be feat(import): render DataInput and DataOutput labels
Related to #951
Related to camunda/camunda-modeler#1324
2019-03-26 11:55:36 +01:00
Nico Rehwaldt 45486f2afe fix(import): gracefully handle missing waypoints
This ensures we do not blow up if a diagram
is missing waypoints for connections.

Related to camunda/camunda-modeler#1294
2019-03-12 08:56:03 +00:00
Maciej Barelkowski 39d4f1c57e feat(modeling): set isHorizontal=true for partipant/lane DIs
Closes #934
2019-01-31 10:46:16 +00:00
Nico Rehwaldt 31271059d4 fix(ordering): render labels always on top 2018-12-04 13:48:12 +00:00
Nico Rehwaldt 7aad42d178 fix(modeling): limit flow join behavior to bpmn:SequenceFlows
Closes #917
2018-11-30 09:32:05 +00:00
Nico Rehwaldt 9240971ce7 style(rules): remove unneeded unwrapping 2018-11-21 09:37:38 +01:00
Niklas Kiefer 921eeb4843 fix(Modeler): use correct copy-paste-module 2018-11-06 13:56:53 +00:00
Nico Rehwaldt a94406e423 feat(modeler): (re-)integrate selection moving via keyboard
Closes #376
2018-10-29 14:52:41 +00:00
Nico Rehwaldt c3f967b39f chore(keyboard): handle { keyEvent } listener result
* event got renamed to keyEvent in context passed to
  keyboard listeners
2018-10-29 14:52:41 +00:00
Nico Rehwaldt a525c633a2 chore(keyboard): register keys backed by editor actions only
* only register keyboard bindings that are backed by actual
  editor actions
* rename BpmnKeyBindings -> BpmnKeyboardBindings for parity with
  diagram-js@latest
* sub-class and override _keyboardBindings_ service provided
  by diagram-js
* extend spec to verify default actions
2018-10-29 14:52:41 +00:00
Nico Rehwaldt 645265ad7e chore(editor-actions): make dependencies optional
* Treat features as optional dependencies and register action
  only if feature exists
* Explicitly add features to the Modeler and NavigatedViewer types
2018-10-29 14:52:41 +00:00
Maciej Barelkowski f0610721c9 feat(keyboard): use key value for bindings
`KeyboardEvent.keyCode` is deprecated, so the BpmnKeyBindings will
use non-deprecated `KeyboardEvent.key` instead.
2018-10-29 14:52:41 +00:00
Maciej Barelkowski 75135b667a feat(keyboard): rewrite listeners to use event passed in context
With the new version of `diagram-js`, the keyboard listeners receive
a single parameter which is an object with `KeyboardEvent` event
as the only property. `BpmnKeyBindings` needed to change in order
to make use of new version of API.
2018-10-29 14:52:41 +00:00
Nico Rehwaldt 8967362df7 chore(project): detect unresolved lint rules
This ensures we don't accidently require files in the lib directory
via the global `lib` import. That stuff works during tests but does
not work in the final bundle.

Considerations: This plugin adds some runtime overhead to our linting
process.
2018-10-26 11:18:37 +00:00
Niklas Kiefer acd2fe520b feat(draw): render group names
Closes #844
2018-10-25 14:32:07 +02:00
Philipp Fromme 6d54ff34e3 chore(boundary-event-behavior): clean up tests 2018-10-17 14:31:40 +00:00
Niklas Kiefer 178e1cfccb fix(modeling/behaviors): add a behavior that deletes attached boundaries after replacing a gateway with an event based gateway 2018-10-17 13:12:31 +00:00
Niklas Kiefer b3e4b1dc1f fix(modeling/behaviors): add behavior for deleting boundaries on receive tasks after connecting to event based gateway 2018-10-16 10:53:57 +00:00
Niklas Kiefer ea681df2d3 fix(bpmn-rules): adjust canAttach rule for boundary events after event based gateways 2018-10-16 10:53:57 +00:00
Maciej Barelkowski ba42e9edde feat(global-connect): use rules for connection starting
* remove `BpmnGlobalConnect` provider
* use `connection.start` rule to determine whether
  an element can start a connection

Closes #565
Closes #870

BREAKING CHANGE:

* `BpmnGlobalConnect` got removed. Add `connection.start`
  rule to specify whether connection should be allowed.
2018-10-11 09:28:30 +00:00
Niklas Kiefer 350a5ab75e feat(contextPad): Adjustments for IntermediateCatchEvents
adjust tooltip titles
i18n support
2018-10-02 09:09:19 +02:00
Niklas Kiefer 6b0a73145d feat(contextPad): improve tooltip titles for IntermediateCatchEvents 2018-10-01 12:38:19 +00:00
Nico Rehwaldt 90faab981d fix(draw): correct embedded label padding 2018-09-20 21:57:23 +02:00
ruvor 31177b94e7 style(Viewer): fix a typo in the imported name 2018-09-03 09:24:10 +02:00
Nico Rehwaldt 374c7d7f18 fix(rules): correct bpmn:Lane insert rule
Closes #855
2018-08-29 00:38:03 +02:00
Nico Rehwaldt 6689af6f5b feat(snapping): snap message flows to bpmn:Event mid
This snaps source / target to the element mid, if
the element is a `bpmn:Event`.

There is usually no more than one snap point for
an event other than the center.

Closes #850
2018-08-22 14:43:16 +02:00
Nico Rehwaldt cdacc69a3d chore(modeling/BpmnLayouter): simplify manhattan layout logic 2018-08-22 14:43:16 +02:00
Nico Rehwaldt 905ee6f667 fix(rules): allow labels to be dropped everywhere
Closes #849
2018-08-22 14:41:59 +02:00
Nico Rehwaldt 898a0fa9c8 fix(modeling/DropOnFlowBehavior): filter redundant connections
This prevents duplicate flows from being created, accidentially.

Closes #774
2018-07-25 11:10:51 +02:00
Nico Rehwaldt 249ea6a3ea fix(modeling): disallow inserting on incoming/outgoing connection
Closes #836
2018-07-25 11:10:51 +02:00
Philipp Fromme e637a8e57b feat(modeling/BpmnLayouter): layout Element -> Element loops
Closes #824
2018-07-13 10:29:00 +02:00
Philipp Fromme 220c0a73f3 feat(modeling/BpmnLayouter): handle boundary events
This adds proper connection layouting for sequence
flows leaving from boundary events.

If needed, such connections will be layoute with
an U-turn.

Closes #467
2018-07-13 10:16:11 +02:00
Nico Rehwaldt 4806938600 feat(modeling): create label at appropriate position
This re-introduces adaptive label positioning
on label creation as a feature.

It worked before but broke during the introduction
of optional labels.

Closes #825
2018-07-11 13:26:43 +02:00
Nico Rehwaldt cec9d08d61 fix(draw): revert to Arial as default font
This partially reverts commit 891cf4ac0c
which set `sans-serif` as the default font.

Setting it back to Arial solves SVG export and rendering issues,
especially on platforms (Windows, Mac) where the default font
metrics differ highly from Arial.

NOTE: The font can still be easily overriden if integrators wish
to do so in order to give their users a more native look and feel.

Closes #819
2018-06-28 10:21:08 +02:00
Nico Rehwaldt 75c0880341 chore(replace): retain definitions where appropriate
* simplify implementation
* retain event definitions when switching from interrupting
  to non-interrupting and vice versa

Closes #799
2018-06-28 09:03:34 +02:00
Nico Rehwaldt 300e7010c4 fix(modeling): correct DataStoreBehavior updating multiple stores 2018-06-18 09:21:18 +02:00
Philipp Fromme 5cc28d5d55 fix(modeling): apply DataStoreBehavior in collaboration only
* updating parents of datastores in the root is only
  necessary when deleting a subprocess in a collaboration

Related to camunda/camunda-modeler#823
2018-06-13 13:48:39 +02:00
Nico Rehwaldt 834ac7db77 fix(draw): adjust center-middle aligned label padding 2018-06-13 11:09:09 +02:00
Nico Rehwaldt fb5fccb331 style(modeling): use constant instead of magic string 2018-06-13 11:08:46 +02:00
Philipp Fromme 100f3fb2ee fix(label-behavior): text annotation resizing after text property change
Depends on bpmn-io/diagram-js#259

Related to camunda/camunda-modeler#631
2018-06-13 11:02:55 +02:00
Nico Rehwaldt 3c87716895 feat(viewer): emit export events
This makes the viewer emit events during SVG and XML export.

These events allow others to hook in, i.e. to trigger additional _save_
actions.

Closes #811
2018-06-12 15:44:52 +02:00
Nico Rehwaldt 6c081d854f chore(label-editing): remove businessObject name on empty text
The following two actions will now unset the
business objects name property:

* deleting external label
* entering empty text via direct editing
2018-06-11 11:39:08 +02:00
Nico Rehwaldt a7a1743df0 fix(modeling): properly cascade label deletion
Ensure we execute the following nicely:

* unset name -> remove label shape
* remove label shape -> unset name
2018-06-11 11:39:08 +02:00
Nico Rehwaldt 4ade805f3d style(modeling): use constant instead of magic string 2018-06-06 14:31:31 +02:00
Philipp Fromme 4a0f6da814 fix(label-behavior): properly check for name property change
Related to camunda/camunda-modeler#824
2018-06-06 13:35:57 +02:00
Philipp Fromme 891cf4ac0c feat(draw+modeling): support lineHeight
* take numeric line height into account when
  rendering text labels
* take line height into account when directly
  editing labels
* use default line height of 1.2 for text rendering

Closes #803
2018-05-29 11:58:15 +02:00
Nico Rehwaldt b1a4e08ddd feat(modeling): assign ID when creating bpmn:LaneSet 2018-05-28 09:55:30 +02:00
Nico Rehwaldt 4bb270f192 chore(draw): unify text rendering into service
A newly introduced TextRenderer is responsible for text
rendering and text related bounds computation.

This removes a bunch of code duplication, too.
2018-05-24 16:26:01 +02:00
Philipp Fromme 7537757357 feat(labels): labels can be deleted
Related to camunda/camunda-modeler#243
2018-05-24 16:22:51 +02:00
Nico Rehwaldt 0b66b77483 chore(draw): retrieve default colors from bpmnRenderer config
Related to #713
2018-05-24 15:03:52 +02:00
Philipp Fromme dc1f18a497 feat(bpmn-renderer): accept default fill and stroke color
Related to #797
2018-05-24 07:39:30 +02:00
Philipp Fromme 690417b389 feat(modeling): allow data store anywhere in collaboration
ensure valid BPMN 2.0 parent when

* creating/moving data store
* removing participant
* turning process into collaboration
* turning collaboration into process

Closes #483
2018-05-17 15:09:37 +02:00
Nico Rehwaldt b98dd6fe95 fix(modeling): correctly handle missing bpmndi:Label bounds
Closes #794
2018-05-17 14:57:54 +02:00
pedesen 17896df65c chore(contextPadProvider): adjust popupMenu method calls
Since breaking changes were introduced in diagram-js
popupMenu methos calls need to be adjusted

* call popupMenu#open with element, id and position as params
* call popupMenu#isEmpty with element and providerId as params
* remove popupMenu#create call
2018-05-14 15:13:29 +02:00
Nicolas Boissel-Dallier 9379abafcc fix(auto-place): fix infinite loop during auto-place
* NaN was returned when autoplacing an element after
  a boundary event, attached to its hosts corner.

Closes #788
2018-05-04 10:40:01 +02:00
Nico Rehwaldt 67b9711399 feat(import/BpmnTreeWalker): make businessObject#di prop configurable
This allows advanced use-cases such as lazy importing
elements into the diagram.
2018-04-25 21:31:43 +02:00
Philipp Fromme 12a38da9c7 feat(import): expose additional BpmnTreeWalker functionality
* expose API needed for lazy sub-process imports
* also changes #handleDeferred to NOT expect deferred
  as a parameter anymore

Related to bpmn-io/bpmn-js-signavio-compat#1
2018-04-25 21:31:02 +02:00
Nico Rehwaldt 16a7ab2879 fix(label-editing): complete on popup menu open
This improves the user flow.

Addresses camunda/camunda-modeler#770
2018-04-13 10:12:37 +02:00
Nico Rehwaldt 68f85a171d fix(rules): allow message flows between collapsed pools
Adresses camunda/camunda-modeler#782
2018-04-12 19:35:19 +02:00
pedesen fcd1e2f12c feat(snapping): add initial snapping for associations
Snap to target mid when creating associations.

Closes #782
2018-04-11 13:55:16 +02:00
Nico Rehwaldt e5a3973107 fix(replace-preview): escape element ids in CSS selectors 2018-04-10 09:34:49 +02:00
Nico Rehwaldt 365522a49c chore(context-pad): change gateway icon to GATEWAY_NONE
This is related to the recent palette change that dropped the marker
from the Gateway icon.

Related to 9edd462880
2018-04-09 14:42:51 +02:00
Nico Rehwaldt a77d44455f fix(draw): only apply fillOpacity on actual fill
This corrects some SVG to image issues.

Addresses camunda/camunda-modeler#764
2018-04-09 13:03:53 +02:00
Nico Rehwaldt e159b002cd fix(copy-paste): correctly set $parent on copied model elements
Related to camunda/camunda-modeler#625
2018-04-09 11:27:58 +02:00
Nico Rehwaldt 9be61259bd chore(project): drop 'use strict'
We use ES modules, so 'use strict' is not necessary anymore.
2018-04-03 18:09:53 +02:00
Nico Rehwaldt d3449ca87c chore(project): es6ify source code
* use ES6 import / export
* UTILS: export individual utilities
* TESTS: localize TestHelper includes

BREAKING CHANGE:

* all utilities export independent functions
* library sources got ported to ES6. You must now use
  a ES module bundler such as Browserify + babelify or
  Webpack to consume this library (or parts of it).
2018-04-03 16:32:14 +02:00
Nico Rehwaldt e4dbc422bf chore(project): migrate to tiny-svg@1.x 2018-03-28 10:49:55 +02:00
Nico Rehwaldt 9edd462880 chore(palette): change gateway icon to GATEWAY_NONE 2018-03-23 15:05:43 +01:00
Philipp Fromme bec8d06e08 chore(project): fix typos introduced 2018-03-22 12:43:36 +01:00
Nico Rehwaldt 11f5a22471 chore(project): adjust min-dash usage (2) 2018-03-22 11:59:39 +01:00
TheSharpieOne Bot 245d1d6a96 chore(project): upgrade lodash to min-dash 2018-03-22 11:59:39 +01:00
Nico Rehwaldt e8e5e2ced9 chore(project): update to min-dom@2 2018-03-22 00:54:59 +01:00
Nico Rehwaldt 5d76181490 chore(palette): make tooltips more understandable
Closes #772
2018-03-20 11:11:04 +01:00
Nico Rehwaldt b03014fc2c chore(project): update to new lint style 2018-02-27 10:08:31 +01:00
Nico Rehwaldt 19e4e19bb5 chore(project): migrate to new SECTION comments 2018-02-27 09:57:22 +01:00
Nico Rehwaldt b35aa48d14 fix(label-editing): complete on autoPlace start
Closes #764
2018-02-20 11:33:28 +01:00
Nico Rehwaldt 25dc30df06 fix(modeling/rules): make compensation activity a message flow source
Related to camunda/camunda-modeler#661
2018-02-20 11:32:52 +01:00
Nico Rehwaldt b070be5855 fix(powered-by): correctly display logo in IE/Edge 2018-02-19 09:11:23 +01:00
Philipp Fromme f5afc732fe fix(drop-on-flow): don't insert on accidentally found intersection
Related to camunda/camunda-modeler#727
2018-02-14 22:15:33 +01:00
Nico Rehwaldt c96741df03 chore(replace): minor reformat 2018-02-14 22:08:04 +01:00
Philipp Fromme ef52dff84c fix(bpmn-replace): correctly replace sub process -> call activity
* when not morphing collapsed sub process with children
  into expanded sub process children must be removed

Related to camunda/camunda-modeler#739
2018-02-14 22:07:28 +01:00
Philipp Fromme f047fefd89 fix(update-properties-handler): fix typo 2018-01-31 18:21:16 +01:00
Nico Rehwaldt cbb2f9f600 fix(modeling): correct DI updating
Don't assign <di> property to businessObject; will
be serialized as di="[Object...]" otherwise.

Closes #756
2018-01-31 12:22:31 +01:00
Nico Rehwaldt 3124f9ba96 chore(modeling): minor SetColorHandler cleanup 2018-01-31 12:16:08 +01:00
Nico Rehwaldt f1daf4841f fix(modeling): support newBounds
This fixes a bug where Modeling#updateLabel would not work on
text annotations, because these need to have labels pre-configured.

* Modeling#updateLabel now takes the (optional) newBounds
* newBounds must now explicitly be passed to trigger resize
  for text annotations
* newBounds is _only_ passed for text annotations via
  LabelEditingProvider (it was discarded before anyway)
* lib/features/label-editing did not depend on lib/features/modeling
  for historical reasons. It now uses the offical #updateLabel
  API provided by Modeling
* Localize test diagrams

Closes #753
2018-01-29 17:20:41 +01:00
Nico Rehwaldt d32da90013 chore(lint): bump eslint
...and fix lint errors
2018-01-28 20:35:04 +01:00
Nico Rehwaldt 49cc8dc7ea chore(lint): disallow trailing spaces
+ format lint rules
+ fix lint error
2018-01-24 11:41:57 +01:00
Nico Rehwaldt 729ddce821 fix(copy-paste): don't override descriptor <type> property
This is redundant anyway, as we take the type + additional
information from the to-be-copied business object.

Closes #751
2018-01-18 11:22:09 +01:00
Nico Rehwaldt 1f5c69a58b fix(modeling): create ConditionalEventDefinition with condition
This ensures we always create valid BPMN 2.0 XML when
creating conditional start and intermediate events.

Closes #747
2018-01-03 14:19:01 +01:00
Nico Rehwaldt f15407d95b chore(Viewer): inline logo as SVG
Make logo retina friendly and save 30 bytes.

Closes #119
2018-01-02 13:46:15 +01:00
Nico Rehwaldt 562674e74b chore(project): bump diagram-js dependency
Fixes text sometimes being selected during dragging.

* makes a ContextPad hack obsolete, too.
2017-12-22 15:49:00 +01:00
Nico Rehwaldt 367399d509 feat(rules): support attach from context-menu
* 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
2017-12-22 10:32:54 +01:00
Nico Rehwaldt 22d2b97bbe feat(auto-place): handle boundary events
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
2017-12-22 10:32:54 +01:00
Nico Rehwaldt 718836f53e chore(auto-place): improve TextAnnotation and DataElement locations
Related to #563
2017-12-22 10:32:54 +01:00
Nico Rehwaldt a845560425 chore(auto-place): handle multiple source <-> target connections
Related to #563
2017-12-22 10:32:54 +01:00
Nico Rehwaldt 2e4cd7e0a9 chore(auto-place): factor out deconflict position into method 2017-12-22 10:32:54 +01:00
Nico Rehwaldt ae96f3714d feat(modeling): add auto placement from context menu
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 } });
  ```
2017-12-22 10:30:44 +01:00
Nico Rehwaldt 6b5277b936 chore(draw): render connections without source
This allows us to renders temporary connections,
i.e. during create / connect.
2017-12-22 10:30:44 +01:00
Nico Rehwaldt c220bfb612 fix(draw): no opacity for boundary events
Ensure boundary events have no opacity.

Fixed regression introduced with #727
2017-12-15 14:35:51 +01:00
Nico Rehwaldt 1e6186e3ce feat(draw): render sequence flows behind tasks
* 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
2017-12-14 11:56:00 +01:00
Nico Rehwaldt 1333479815 fix(modeling/behavior): round label move adjustment
Ensure we don't return floating point numbers for conection label
adjustments calculated on connection changes.
2017-12-13 14:21:19 +01:00
Nico Rehwaldt 4a3c0378b9 fix(label-editing): fix isTouch not being processed
Actually use event.isTouch to check label editing activation on
create.end.

This makes 7e928ec709 work.
2017-12-13 13:30:51 +01:00
Nico Rehwaldt 058cfbb579 chore(label-editing): use isAny helper 2017-12-13 13:30:51 +01:00
Nico Rehwaldt 5761e01ffe feat(modeling): adjust label location based on free space
Reacts on connection create, layout, reconnect and waypoint
update to find a suitable place for the label and reposition it.

Closes #738
2017-12-11 15:40:40 +01:00
Nico Rehwaldt a830c1e1e0 chore(snapping): remove dead code
* we don't support moving of lanes;
  the removed code never made it into production.
2017-12-11 15:40:40 +01:00
Nico Rehwaldt ce361dabd7 fix(modeling/DropOnFlowBehavior): ensure label is created before executing 2017-12-11 15:40:40 +01:00
Nico Rehwaldt cd24b27768 fix(copy-paste): ignore data associations during cloning
* 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
2017-12-11 15:14:31 +01:00
felixlinker 36a12396fd chore(renderer): extract BpmnRenderer utilities into util
Closes #731
2017-12-10 19:10:12 +01:00
Nico Rehwaldt e9eb9e374a fix(snapping): correct bendpoint snapping on shape move
Don't blindly snap first waypoint; instead, snap only bendpoints
that are manhattan layout aligned with other bendpoints (excluding
start and end).
2017-12-10 13:48:46 +01:00
Nico Rehwaldt f05ad02198 feat(layout): filter redundant connection waypoints 2017-12-10 12:29:54 +01:00
Nico Rehwaldt 7ffb865023 chore(project): consistent async error handling
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.
2017-12-09 22:31:15 +01:00
Nico Rehwaldt 7e928ec709 fix(label-editing): use new isTouch detection for conditional activation
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
```
2017-12-08 19:32:13 +01:00
Nico Rehwaldt 2b37cebeb6 chore(context-pad): remove unused argument 2017-12-08 11:40:55 +01:00
Nico Rehwaldt 50da47e1e1 fix(Viewer): trigger resized on attach
Ensure components get notified on `canvas.resized`, whenever
the Viewer instance gets attached.
2017-12-07 11:59:25 +01:00
Nico Rehwaldt 029c3d76aa chore(context-pad): minor connect / remove tweek
* remove does not activate on dragstart
* connect does not trigger default drag behavior
2017-12-06 23:30:43 +01:00
Nico Rehwaldt e0104e3589 chore(Viewer): handle import error outside try/catch 2017-11-28 13:24:36 +01:00
Nico Rehwaldt 2ef82970fd chore(Viewer): re-expose loaded definitions
The previous release kinda removed access to the currently
loaded definitions.

This restores access by exposing it by `Viewer#getDefinitions()`.
2017-11-23 09:49:54 +01:00
Nico Rehwaldt 642d7b88af chore(Viewer+Modeler): consistently name private instance variables
BREAKING CHANGE:

* definitions, container and moddle have been prefixed with
  an underscore (_) to denote they are private use.
2017-11-20 15:28:29 +01:00
Nico Rehwaldt ce45e9081b chore(project): bump bpmn-moddle dep
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
2017-11-15 19:55:34 +01:00
felixlinker 0cb46183eb chore(draw/BpmnRenderer): exposed _drawPath helper
This allows extensions to reuse the internal drawPath utility.

Cf. #722 for context.
2017-11-13 09:56:02 +01:00
Philipp Fromme 28871bcdaf chore(draw/BpmnRenderer): make instance of ids global
Closes #716
2017-10-04 11:17:43 +02:00
Nico Rehwaldt 4c01a5dab1 fix(Viewer): correctly export <defs> node on IE
Closes #710
2017-09-29 11:42:34 +02:00
Philipp Fromme 9033094473 fix(renderer): prevent duplicate marker IDs
* when having more than one instance of bpmn-js on a page marker IDs got duplicated
2017-09-29 11:08:37 +02:00
pedesen 58207e7db2 feat(DropOnFlowBehavior): drop existing elements on flows
Closes #695
2017-07-27 15:15:08 +02:00
pedesen b1a544b84f fix(dropOnFlowBehavior): ignore drop point if bendpoint is inside shape
Closes #696
2017-07-27 13:41:50 +02:00
pedesen b234f17244 feat(snapping) snap on sequence flows
Closes #398
2017-07-27 13:41:45 +02:00
Philipp Fromme e797d9c142 feat(label-editing): improve text annotation editing
Related to camunda/camunda-modeler#564
2017-07-25 15:05:35 +02:00
Philipp Fromme 114da17403 fix(copy-paste): create new business object on paste
* fixes pasted elements having same business object
* removes temporary fix that prevents pasting twice

Closes #686
Closes camunda/camunda-modeler#561
2017-06-20 16:24:11 +02:00
Nico Rehwaldt 8015b21b15 fix(rules): allow TextAnnotation <-> Data(Store|Object) connection
Closes #687
2017-05-22 12:55:43 +02:00
Nico Rehwaldt 8e55edd80f chore(copy-paste): temporarily prevent consecutive paste
This prevents users from creating invalid
models due to IDs not properly being
generated on consecutive paste (#686).

Closes #688.
2017-05-19 13:01:57 +02:00
Nico Rehwaldt ff140d1a50 style(lib): correct indention 2017-05-19 12:56:59 +02:00
Nico Rehwaldt 83f55b1fb1 fix(modeling): handle label layouting edge case
Related to #669
2017-05-03 15:02:52 +02:00
Nico Rehwaldt 7d896855a9 fix(modeling): correct label line attachments not being recognized
* remove rounding where it does not matter
* work around some precision errors in logic
* adjust test cases (to higher precision)

Closes #669
2017-05-03 15:02:52 +02:00
Philipp Fromme 43a3b07ab2 fix(bpmn-rules): only connect flow nodes and artifacts through association
Closes camunda/camunda-modeler#554
2017-04-11 15:16:39 +02:00
Nico Rehwaldt 2fd46ac294 fix(modeling/layout): handle zero-length lines during adjustment
Closes #669
2017-03-21 09:01:21 +01:00
Nico Rehwaldt 3de5478d04 fix(draw): properly render data-object collection marker
Closes #672
2017-03-21 07:48:57 +01:00
Nico Rehwaldt c853e88e54 chore(modeling): do not expose ElementFactory helpers
Less API surface => BETTER.
2017-03-21 07:23:57 +01:00
Philipp Fromme 12d700fd14 fix(drop-on-flow): disallow drop on flow label
Closes camunda/camunda-modeler#548
2017-03-10 12:47:23 +01:00
Philipp Fromme 79e8378db0 fix(label-support): fix positioning of label created on shape create
* make sure label shape is created with correct size
* make sure test varifies behaviour

Closes camunda/camunda-modeler#535
2017-03-07 15:22:43 +01:00
Nico Rehwaldt d1072471c4 fix(drop-on-sequence-flow): ensure correct behaviour
Closes #667
2017-03-02 11:45:34 +01:00
Philipp Fromme 81de98f786 feat(bpmn-renderer): use updated text util api
Related to bpmn-io/diagram-js#205
2017-03-02 10:55:40 +01:00
Juan Manuel Osorio Gerdts e16d2f5d02 feat(viewer): stronger check for jQuery
Closes #664
2017-02-27 15:28:30 +01:00
Ricardo Matias 1cb3a8eedc feat(util/model): avoid persisting empty property element containers
Closes #512
2017-02-14 15:43:58 +01:00
Ricardo Matias d8098c2feb feat(copy-paste): copy 'fill' and 'stroke' properties
Closes #640
2017-02-13 12:01:42 +01:00
Ricardo Matias 722c86beb2 feat(replace): persist colors when replacing an element
Related to #640
2017-02-13 12:01:42 +01:00
Ricardo Matias 2c51cfbe3d fix(util/model): able to clone Event Definitions extension elements
Related to camunda/camunda-modeler#516
Related to camunda/camunda-modeler#517
2017-02-10 09:47:59 +01:00
Ricardo Matias 1a4a8959fe fix(replace): make sure is respected for expanded sub processes
Closes camunda/camunda-modeler#511
2017-02-10 09:41:44 +01:00
Ricardo Matias b5c65f0b42 Revert "feat(util/model): avoid persisting empty property element containers"
This reverts commit 86c0a0aa75.
2017-02-08 15:44:29 +01:00
Ricardo Matias 86c0a0aa75 feat(util/model): avoid persisting empty property element containers
Closes camunda/camunda-modeler#512
2017-02-08 09:50:12 +01:00
Ricardo Matias b37182b53b feat(util/model): make property cloning pluggable
This introduces a 'property.clone' event that allows
plugging into the cloning mechanism when cloning
nested extension elements.

Related to camunda/camunda-bpmn-moddle#35
2017-01-30 16:38:43 +01:00
Ricardo Matias 2ecb9aeae4 feat(copy-paste): clone properties when morphing to new element
Closes #648
2017-01-30 16:38:43 +01:00
Ricardo Matias 432d7f4b7c fix(replace): assign passed properties to businessObject before cloning 2017-01-30 16:23:57 +01:00
Ricardo Matias 2dcfb1b3c9 feat(util/model): improve the way we clone properties
Now we make sure we don't copy id or
reference properties/elements.
2017-01-30 16:23:56 +01:00
Ricardo Matias af9a36b9b6 feat(replace): clone properties when morphing to new element
Closes #647
2017-01-30 16:23:56 +01:00
Ricardo Matias def402971c feat(modeling): add move onto sequence flow
This adds the ability to move flow nodes onto existing
sequence flows (similar to the create on flow behavior
implemented with an earlier bpmn-js release).

Closes camunda/camunda-modeler#432
2017-01-27 15:31:26 +01:00
Christian Kaps 6dc4af5396 feat(Viewer): allow dynamic attach / detach from DOM
Closes #655

BREAKING CHANGE:

* Viewer / Modeler do not attach to `body` anymore per
  default. Use `new Viewer({ container: 'body' })` to
  restore the old behavior.
2017-01-27 13:28:27 +01:00
Ricardo Matias a9b68b69e0 feat(replace): clone properties when morphing to new element
Closes #647
2017-01-12 16:02:31 +01:00
Ricardo Matias 3d0adc6493 feat(bpmn-clone): add ability to clone bpmn properties
This will allow a complete semantic copy/paste and replace of elements

Closes #646
2017-01-11 09:01:09 +01:00
Philipp Fromme 1f667e0184 fix(move-to-origin): ignore children of subprocesses
Closes camunda/camunda-modeler#444
2017-01-09 14:36:58 +01:00
Nico Rehwaldt 27d65a6503 fix(draw): do not create multiple markers per (type-stoke-fill) 2016-12-20 16:57:09 +01:00
Nico Rehwaldt e2211766eb chore(draw): use positive refX for rendering default flow marker
Fixes PNG image generation using canvg.

Related to camunda/camunda-modeler#250
2016-12-20 16:56:53 +01:00
Nico Rehwaldt c89942fc4c fix(rules): correct and verify data association in sub process move
Related to #638
2016-12-19 15:57:34 +01:00
Nico Rehwaldt bf133bb8da fix(rules): allow data-association + participant move
Closes #638
2016-12-19 15:33:42 +01:00
Philipp Fromme c308151474 feat(editor-actions): add set color editor action
Related to camunda/camunda-modeler#445
2016-12-13 13:02:25 +01:00
Nico Rehwaldt 7f99263a5e fix(draw): color Transaction inner rect 2016-12-05 21:55:12 +01:00
Philipp Fromme a2f33b8e93 feat(modeling): add API for setting fill/stroke color
Closes #629
2016-12-05 17:01:04 +01:00
Philipp Fromme e35248c5fd test(draw): add skipped test for color rendering 2016-12-05 16:55:36 +01:00
Philipp Fromme 8c26699d80 feat(draw): render colored markers
Related to #629
2016-12-05 16:55:32 +01:00
Philipp Fromme 4059f2c501 feat(draw): render colors
Related to #629
2016-12-05 16:53:33 +01:00
Nico Rehwaldt 404c35c97f fix(BpmnRenderer): revert text annotations automatic content fitting
This reverts commit a53562e1d5.

Closes #635
2016-12-01 13:27:30 +01:00
Nico Rehwaldt 1b2a69e9cc chore(renderer): do not double compote TextAnnotation BBox 2016-11-15 15:14:10 +01:00
Philipp Fromme d5fa27ead2 feat(bpmn-rules): replace start events only allowed in event sub process
this includes the following event definitions:

* error
* escalation
* compensate

Closes #583
2016-11-09 14:44:42 +01:00
pedesen 42a40494a7 fix(BpmnRenderer): draw instantiated receive task properly
* fix drawCircle parameter issue
* make BpmnRenderer test cases more restrictive
* revise inconsistent fixture diagrams to avoid warnings

Closes #627
2016-11-09 10:59:58 +01:00
pedesen a53562e1d5 feat(BpmnRenderer): text annotations automatically fit their content
Closes #600
2016-11-09 08:23:34 +01:00
Ricardo Matias 88eb966c99 fix(editor-actions): remove duplicate line 2016-11-07 15:16:59 +01:00
Philipp Fromme 72c4687b35 fix(internet-explorer): fix bugs due to internet explorer 2016-11-01 15:20:22 +01:00
Philipp Fromme db0ce65aa4 feat(graphics): remove snapsvg
Related to bpmn-io/diagram-js#50
2016-11-01 15:20:22 +01:00
pedesen 2c7aad5e0b feat(modeling/BpmnUpdater): update existing (source/target)Element in di
Closes #620
2016-11-01 10:43:08 +01:00
Philipp Fromme ccd5eeb758 fix(bpmn-updater): keep default flow when reconnecting sequence flow end
Closes #619
2016-10-19 11:10:11 +02:00
pedesen f4023cf321 fix(draw/BpmnRenderer): ensure labels keep position if width doesn't change
* adjust positioning tests to pass on Arch Linux

Closes #613
2016-10-07 14:06:28 +02:00
robajz 5441b2e09e fix(BpmnRules) allow move of muliple selected elements across pools
The move was prevented by MessageFlow element being included in the moved selection.
The restrictions on MessageFlow canDrop rules were eased to allow such moves.

Closes #524
2016-09-30 15:50:06 +02:00
Vladimirs Katusenoks 38c81146a3 fix(context-pad): use current context shape
Relates to camunda/camunda-modeler#415
2016-09-19 12:29:20 +02:00
pedesen 5b9dc626a6 chore(label-editing): ensure minimum dimensions for internal labels
* This ensures a reasonable text box dimension at lower zoom levels

Closes #610
2016-09-05 15:52:23 +02:00
pedesen c13ac91e94 feat(BpmnRenderer): align label size/position to text during rendering
Closes #601
2016-09-02 16:43:23 +02:00
Ricardo Matias 7575af4c0f feat(replace-menu): rework opening after element creation
Closes camunda/camunda-modeler#327
2016-08-31 11:02:19 +02:00
pedesen f7f868ec67 chore(label-editing): resize textbox during direct editing
Related to bpmn-io/diagram-js-direct-editing#2
2016-08-29 08:56:12 +02:00
hoferch91 a8cf097ed0 feat(modeling): retain waypoints with connection on shape deletion
When keeping the connection when the intermittant element,
make sure we keep the waypoints, too.

closes #581
2016-08-23 17:13:25 +02:00
Ricardo Matias 18d31a7bc1 feat(editor-actions): add moving all elements to the origin
Related to camunda/camunda-modeler#362
2016-08-22 16:37:35 +02:00
Ricardo Matias 810a107262 feat(context-pad): open the replace menu after creating a shape
Closes camunda/camunda-modeler#327
2016-08-19 16:36:14 +02:00
hoferch91 13a9d24e84 fix(replace-menu): a compensation handler can also be a call-activity
closes #603
2016-08-16 16:02:38 +02:00
Philipp Fromme 681869fb44 fix(bpmn-ordering-provider): handle external labels seperately
closes #606
2016-08-16 14:56:52 +02:00
Philipp Fromme 14ae66e5bb fix(distribute-elements): exclude boundary events from distrubution
closes #605
2016-08-15 15:33:25 +02:00
Philipp Fromme 91cfcd9bac fix(modeling): handle float bendpoints in label behavior
* silently round all values when doing circle-line intersection

closes #602
2016-08-10 13:14:56 +02:00
hoferch91 226a0d76ed feat(replace): properly collapse / expand SubProcess(es)
* correctly toggle collapse / expand state
* update children visibility

Closes #575
Closes #510

review(collapse-expand)
2016-08-09 11:33:59 +02:00
Philipp Fromme 4714a7279d fix(replace-menu-provider): fix property name
* fix property name in order to ensure correct behavior
* adjust unit tests in order to ensure correct assertions
closes #571
2016-08-08 13:52:21 +02:00
Ricardo Matias 0f4dbb32bd feat(preview-support): decouple the shared preview logic 2016-08-08 11:26:20 +02:00
Philipp Fromme 73487358a9 feat(replace-preview): rename moveVisuals to movePreview
related to bpmn-io/diagram-js#182 and bpmn-io/diagram-js#184
2016-08-08 11:23:49 +02:00
Philipp Fromme 7fdd9bc611 fix(snapping): snap sequence flows mid -> mid
With the latest version of bpmn-js it is possible to draw point
top point connections between elements.

This restores the mid -> mid connection snapping for sequence flows.

Closes #588
2016-07-18 12:59:06 +02:00
pedesen 28f7145b32 chore(draw): use lines insted of curves to render escalation events
Closes #592
2016-07-18 11:19:46 +02:00
Jan Stümmel b881ca8086 fix(modeling): handle non-integer waypoints in LabelBehavior
* verify space tool / label layouting behavior

Closes #590
2016-07-14 08:54:45 +02:00
Jan Stümmel 6c77e23692 fix(modeling): do not layout hidden labels
closes #587
2016-07-05 17:19:13 +02:00
Jan Stümmel fd198b6059 feat(modeling): move labels with connections
* move on segment dragging
* move on reconnect
* move on bendpoint add / remove

Closes #331
2016-07-05 12:01:08 +02:00
Adam Brengesjö 91dd1b696c fix(replace):ComplexGateway can have default sequence flows
The BPMN 2.0 specification[1] states "a Sequence Flow that has an
Exclusive, Inclusive or Complex Gateway or an Activity as its source
can also be defined with as default."

This commit will honor that statement by allowing sequence flows from
Complex Gateway to be defined as default.

  [1] = http://www.omg.org/spec/BPMN/2.0/
2016-06-30 14:43:29 +02:00
Nico Rehwaldt df54005cfa feat(modeling): repair broken connection dockings on import
Closes #479
2016-06-27 00:32:17 +02:00
Nico Rehwaldt f5f05ac011 chore(layouting): account for connection(Start|End) hints
Related to bpmn-io/diagram-js#167
2016-06-27 00:32:16 +02:00
Nico Rehwaldt 1743c63d91 style(snapping): use constant instead of magic number 2016-06-22 18:15:20 +02:00
Nico Rehwaldt db53608b3d feat(connect): support point to point connection
Closes #578
2016-06-22 15:52:50 +02:00
Nico Rehwaldt fcf2bbd9aa feat(modeling/layout): improve MessageFlow layout on SubProcesses
Related to #574
2016-06-22 15:52:31 +02:00
Ricardo Matias 6549af7aca feat(modeling/layout): improve message flow layout on Participants
Closes #574
2016-06-22 15:52:06 +02:00
Nico Rehwaldt e99214bb6a chore(editor-actions): factor out into own component
Related to bpmn-io/diagram-js#177
2016-06-21 15:29:03 +02:00
Ricardo Matias 224fa6da61 feat(align-elements): elements can be aligned
Related to bpmn-io/bpmn-js#177
2016-06-21 15:29:03 +02:00
Philipp Fromme e157f1c82f fix(bpmn-updater): keep conditions on element replace
Closes camunda/camunda-modeler#318
2016-06-21 14:01:41 +02:00
Ricardo Matias b43cff1ec2 feat(copy-paste): copy Event Sub Process / Non-Interrupting Boundary
Closes #556, #555
2016-06-21 13:39:37 +02:00
Philipp Fromme 1b17d45260 fix(replace-menu): add sub process to event sub process replace menu
Closes camunda/camunda-modeler#310
2016-06-16 15:18:51 +02:00
pedesen e3144f8ad7 chore(auto-resize): migrate to diagram-js infrastucture
Closes #569
2016-06-15 20:32:40 +02:00