JSFiddle - React, Tailwind, and code Playground
HTML
<div id="holder"></div>
CSS
body {
background: #333;
color: #fff;
font: 300 100.1%"Helvetica Neue", Helvetica, "Arial Unicode MS", Arial, sans-serif;
}
#holder {
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
padding:5px;
margin:9px;
display:block;
}
#holder, svg {
border:1px solid white;
display:inline-block;
}
#copy {
bottom: 0;
font: 300 .7em"Helvetica Neue", Helvetica, "Arial Unicode MS", Arial, sans-serif;
position: absolute;
right: 1em;
text-align: right;
}
#copy a {
color: #fff;
}
p {
text-align: center;
}
JavaScript
Raphael.fn.connection = function (obj1, obj2, line, bg) {
if (obj1.line && obj1.from && obj1.to) {
line = obj1;
obj1 = line.from;
obj2 = line.to;
}
var bb1 = obj1.getBBox(),
bb2 = obj2.getBBox(),
p = [{
x: bb1.x + bb1.width / 2,
y: bb1.y - 1
}, {
x: bb1.x + bb1.width / 2,
y: bb1.y + bb1.height + 1
}, {
x: bb1.x - 1,
y: bb1.y + bb1.height / 2
}, {
x: bb1.x + bb1.width + 1,
y: bb1.y + bb1.height / 2
}, {
x: bb2.x + bb2.width / 2,
y: bb2.y - 1
}, {
x: bb2.x + bb2.width / 2,
y: bb2.y + bb2.height + 1
}, {
x: bb2.x - 1,
y: bb2.y + bb2.height / 2
}, {
x: bb2.x + bb2.width + 1,
y: bb2.y + bb2.height / 2
}],
d = {}, dis = [];
for (var i = 0; i < 4; i++) {
for (var j = 4; j < 8; j++) {
var dx = Math.abs(p[i].x - p[j].x),
dy = Math.abs(p[i].y - p[j].y);
if ((i == j - 4) || (((i != 3 && j != 6) || p[i].x < p[j].x) && ((i != 2 && j != 7) || p[i].x > p[j].x) && ((i != 0 && j != 5) || p[i].y > p[j].y) && ((i != 1 && j != 4) || p[i].y < p[j].y))) {
dis.push(dx + dy);
d[dis[dis.length - 1]] = [i, j];
}
}
}
if (dis.length == 0) {
var res = [0, 4];
} else {
res = d[Math.min.apply(Math, dis)];
}
var x1 = p[res[0]].x,
y1 = p[res[0]].y,
x4 = p[res[1]].x,
y4 = p[res[1]].y;
dx = Math.max(Math.abs(x1 - x4) / 2, 10);
dy = Math.max(Math.abs(y1 - y4) / 2, 10);
var x2 = [x1, x1, x1 - dx, x1 + dx][res[0]].toFixed(3),
y2 = [y1 - dy, y1 + dy, y1, y1][res[0]].toFixed(3),
x3 = [0, 0, 0, 0, x4, x4, x4 - dx, x4 + dx][res[1]].toFixed(3),
y3 = [0, 0, 0, 0, y1 + dy, y1 - dy, y4,...