123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- var MARKER_OK = 'connect-ok',
- MARKER_NOT_OK = 'connect-not-ok';
- /**
- * @class
- * @constructor
- *
- * @param {EventBus} eventBus
- * @param {Dragging} dragging
- * @param {Connect} connect
- * @param {Canvas} canvas
- * @param {ToolManager} toolManager
- * @param {Rules} rules
- */
- export default function GlobalConnect(
- eventBus, dragging, connect,
- canvas, toolManager, rules) {
- var self = this;
- this._dragging = dragging;
- this._rules = rules;
- toolManager.registerTool('global-connect', {
- tool: 'global-connect',
- dragging: 'global-connect.drag'
- });
- eventBus.on('global-connect.hover', function(event) {
- var context = event.context,
- startTarget = event.hover;
- var canStartConnect = context.canStartConnect = self.canStartConnect(startTarget);
- // simply ignore hover
- if (canStartConnect === null) {
- return;
- }
- context.startTarget = startTarget;
- canvas.addMarker(startTarget, canStartConnect ? MARKER_OK : MARKER_NOT_OK);
- });
- eventBus.on([ 'global-connect.out', 'global-connect.cleanup' ], function(event) {
- var startTarget = event.context.startTarget,
- canStartConnect = event.context.canStartConnect;
- if (startTarget) {
- canvas.removeMarker(startTarget, canStartConnect ? MARKER_OK : MARKER_NOT_OK);
- }
- });
- eventBus.on([ 'global-connect.ended' ], function(event) {
- var context = event.context,
- startTarget = context.startTarget,
- startPosition = {
- x: event.x,
- y: event.y
- };
- var canStartConnect = self.canStartConnect(startTarget);
- if (!canStartConnect) {
- return;
- }
- eventBus.once('element.out', function() {
- eventBus.once([ 'connect.ended', 'connect.canceled' ], function() {
- eventBus.fire('global-connect.drag.ended');
- });
- connect.start(null, startTarget, startPosition);
- });
- return false;
- });
- }
- GlobalConnect.$inject = [
- 'eventBus',
- 'dragging',
- 'connect',
- 'canvas',
- 'toolManager',
- 'rules'
- ];
- /**
- * Initiates tool activity.
- */
- GlobalConnect.prototype.start = function(event) {
- this._dragging.init(event, 'global-connect', {
- trapClick: false,
- data: {
- context: {}
- }
- });
- };
- GlobalConnect.prototype.toggle = function() {
- if (this.isActive()) {
- this._dragging.cancel();
- } else {
- this.start();
- }
- };
- GlobalConnect.prototype.isActive = function() {
- var context = this._dragging.context();
- return context && /^global-connect/.test(context.prefix);
- };
- /**
- * Check if source shape can initiate connection.
- *
- * @param {Shape} startTarget
- * @return {Boolean}
- */
- GlobalConnect.prototype.canStartConnect = function(startTarget) {
- return this._rules.allowed('connection.start', { source: startTarget });
- };
|