Click location on a link

I hope this does something like what you are looking for:

    myDiagram.linkTemplate =
      $(go.Link,
        {
          routing: go.Link.Orthogonal,  // also works when Normal (not Orthogonal)
          click: function(e, link) {
            var mousePoint = e.documentPoint;
            var segment = link.findClosestSegment(mousePoint);
            var startPoint = link.points.elt(segment);
            var endPoint = link.points.elt(segment + 1);
            var linePoint = new go.Point().projectOntoLineSegmentPoint(startPoint, endPoint);
            var fraction = 0;  // assume segment is linear
            if (Math.abs(startPoint.x-endPoint.x) < Math.abs(startPoint.y-endPoint.y)) {
              fraction = (mousePoint.y - startPoint.y) / (endPoint.y - startPoint.y);
            } else {
              fraction = (mousePoint.x - startPoint.x) / (endPoint.x - startPoint.x);
            }
            e.diagram.commit(function(diag) {
              var ad = $(go.Adornment, "Link");
              var shape = $(go.Shape, "Circle", { width: 8, height: 8 });
              ad.add(shape);
              ad.adornedObject = link;
              shape.segmentIndex = segment;
              shape.segmentFraction = fraction;
              if (!link.RightAdornment) {  // check last Adornment added
                shape.segmentOffset = new go.Point(0, 8);
                shape.fill = "red";
                link.addAdornment("Right", ad);
              } else {
                shape.segmentOffset = new go.Point(0, -8);
                shape.fill = "green";
                link.addAdornment("Left", ad);
              }
              link.RightAdornment = !link.RightAdornment;
            }, null);
          }
        },
        $(go.Shape),
        $(go.Shape, { toArrow: "OpenTriangle" })
      );