function backwardLink()

in app/assets/javascripts/sankey.js [153:205]


    function backwardLink(part, d) {

      var curveExtension = 30;
      var curveDepth = 15;

      function getDir(d) {
        return d.source.y + d.sy > d.target.y + d.ty ? -1 : 1;
      }

      function p(x, y) {
        return x + "," + y + " ";
      }

      var dt = getDir(d) * curveDepth,
          x0 = d.source.x + d.source.dx,
          y0 = d.source.y + d.sy,
          x1 = d.target.x,
          y1 = d.target.y + d.ty;

      switch (part) {
        case 0:
          return "M" + p(x0, y0) + 
                 "C" + p(x0, y0) +
                       p(x0 + curveExtension, y0) +
                       p(x0 + curveExtension, y0 + dt) +
                 "L" + p(x0 + curveExtension, y0 + dt + d.dy) +
                 "C" + p(x0 + curveExtension, y0 + d.dy) +
                       p(x0, y0 + d.dy) +
                       p(x0, y0 + d.dy) +
                 "Z";
        case 1:
          return "M" + p(x0 + curveExtension, y0 + dt) + 
                 "C" + p(x0 + curveExtension, y0 + 3 * dt) +
                       p(x1 - curveExtension, y1 - 3 * dt) +
                       p(x1 - curveExtension, y1 - dt) +
                 "L" + p(x1 - curveExtension, y1 - dt + d.dy) +
                 "C" + p(x1 - curveExtension, y1 - 3 * dt + d.dy) +
                       p(x0 + curveExtension, y0 + 3 * dt + d.dy) +
                       p(x0 + curveExtension, y0 + dt + d.dy) +
                 "Z";

        case 2:
          return "M" + p(x1 - curveExtension, y1 - dt) + 
                 "C" + p(x1 - curveExtension, y1) +
                       p(x1, y1) +
                       p(x1, y1) +
                 "L" + p(x1, y1 + d.dy) +
                 "C" + p(x1, y1 + d.dy) +
                       p(x1 - curveExtension, y1 + d.dy) +
                       p(x1 - curveExtension, y1 + d.dy - dt) +
                 "Z";
      }
    }