Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
events = isArray(events) ? events : [ events ];
if (isFunction(priority)) {
that = callback;
callback = priority;
priority = DEFAULT_PRIORITY;
}
if (!isNumber(priority)) {
throw new Error('priority must be a number');
}
var actualCallback = callback;
if (that) {
actualCallback = bind(callback, that);
// make sure we remember and are able to remove
// bound callbacks via {@link #off} using the original
// callback
actualCallback[FN_REF] = callback[FN_REF] || callback;
}
var self = this;
events.forEach(function(e) {
self._addListener(e, {
priority: priority,
callback: actualCallback,
next: null
});
});
DescriptorBuilder.prototype.addTrait = function(t, inherited) {
var typesByName = this.allTypesByName,
types = this.allTypes;
var typeName = t.name;
if (typeName in typesByName) {
return;
}
forEach(t.properties, bind(function(p) {
// clone property to allow extensions
p = assign({}, p, {
name: p.ns.localName,
inherited: inherited
});
Object.defineProperty(p, 'definedBy', {
value: t
});
var replaces = p.replaces,
redefines = p.redefines;
// add replace/redefine support
if (replaces || redefines) {
Registry.prototype.registerPackage = function(pkg) {
// copy package
pkg = assign({}, pkg);
var pkgMap = this.packageMap;
ensureAvailable(pkgMap, pkg, 'prefix');
ensureAvailable(pkgMap, pkg, 'uri');
// register types
forEach(pkg.types, bind(function(descriptor) {
this.registerType(descriptor, pkg);
}, this));
pkgMap[pkg.uri] = pkgMap[pkg.prefix] = pkg;
this.packages.push(pkg);
};
export default function Snapping(canvas) {
this._canvas = canvas;
// delay hide by 1000 seconds since last snap
this._asyncHide = debounce(bind(this.hide, this), SNAP_LINE_HIDE_DELAY);
}
// html container
var container = this._container = createContainer(config);
var svg = this._svg = svgCreate('svg');
svgAttr(svg, { width: '100%', height: '100%' });
svgAppend(container, svg);
var viewport = this._viewport = createGroup(svg, 'viewport');
this._layers = {};
// debounce canvas.viewbox.changed events
// for smoother diagram interaction
if (config.deferUpdate !== false) {
this._viewboxChanged = debounce(bind(this._viewboxChanged, this), 300);
}
eventBus.on('diagram.init', function() {
/**
* An event indicating that the canvas is ready to be drawn on.
*
* @memberOf Canvas
*
* @event canvas.init
*
* @type {Object}
* @property {SVGElement} svg the created svg element
* @property {SVGElement} viewport the direct parent of diagram elements and shapes
*/
eventBus.fire('canvas.init', {
export default function ZoomScroll(config, eventBus, canvas) {
config = config || {};
this._enabled = false;
this._canvas = canvas;
this._container = canvas._container;
this._handleWheel = bind(this._handleWheel, this);
this._totalDelta = 0;
this._scale = config.scale || DEFAULT_SCALE;
var self = this;
eventBus.on('canvas.init', function(e) {
self._init(config.enabled !== false);
});
}
MouseTracking.prototype._init = function() {
var eventBus = this._eventBus,
canvas = this._canvas;
var container = canvas.getContainer();
this._setMousePosition = bind(this._setMousePosition, this);
container.addEventListener('mousemove', this._setMousePosition);
eventBus.on('diagram.destroy', function() {
container.removeEventListener('mousemove', this._setMousePosition);
}, this);
eventBus.on('element.hover', this._setHoverElement, this);
};
constructor(config, injector, eventBus, contextPad,
modeling, elementFactory, connect, create,
popupMenu, canvas, rules, translate) {
super(config, injector, eventBus, contextPad,
modeling, elementFactory, connect, create,
popupMenu, canvas, rules, translate);
this.autoPlace = undefined;
if (config.autoPlace !== false) {
this.autoPlace = injector.get('autoPlace', false);
}
this.defaultEntries = bind(super.getContextPadEntries, this);
}
export default function Registry(packages, properties) {
this.packageMap = {};
this.typeMap = {};
this.packages = [];
this.properties = properties;
forEach(packages, bind(this.registerPackage, this));
}
export default function TextBox(options) {
this.container = options.container;
this.parent = domify(
'<div class="djs-direct-editing-parent">' +
'<div class="djs-direct-editing-content"></div>' +
'</div>'
);
this.content = domQuery('[contenteditable]', this.parent);
this.keyHandler = options.keyHandler || function() {};
this.resizeHandler = options.resizeHandler || function() {};
this.autoResize = bind(this.autoResize, this);
this.handlePaste = bind(this.handlePaste, this);
}