_listenLinks()

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);
  }