in src/visual/Visualizer.js [571:620]
_listenLinks() {
const graph = this._graph;
graph.on('remove', (cell, child, opts) => {
if (this._readOnly) {
return;
}
if (cell instanceof VisualLink && cell.conn && cell.conn.isValid() && !opts.silent) {
cell.conn.unbind();
}
}, this);
graph.on('change:source change:target', (link) => {
if (this._readOnly) {
return;
}
if (link instanceof VisualLink) {
const source = graph.getCell(link.get('source').id);
const target = graph.getCell(link.get('target').id);
if (!(source instanceof VisualStep) || !(target instanceof VisualStep)) {
return;
}
if (!source.step || !target.step) {
return;
}
const sourceChild = source.step;
const targetChild = target.step;
if (link.conn) {
link.conn.unbind();
}
if (!targetChild || !sourceChild) {
return;
}
const srcPortName = link.get('source').port;
const sourcePort = this.paper.findViewByModel(link).sourceMagnet.getAttribute('port-group') === 'in' ?
sourceChild.i[srcPortName] :
sourceChild.o[srcPortName];
const dstPortName = link.get('target').port;
const targetPort = this.paper.findViewByModel(link).targetMagnet.getAttribute('port-group') === 'in' ?
targetChild.i[dstPortName] :
targetChild.o[dstPortName];
link.conn = targetPort.bind(sourcePort);
}
}, this);
}