JSFiddle - React, Tailwind, and code Playground
by Florian Ferbach
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 {
height: 480px;
left: 50%;
margin: -240px 0 0 -320px;
position: absolute;
top: 50%;
width: 640px;
}
#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;
}
#holder {
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border: solid 1px #333;
}
p {
text-align: center;
}
JavaScript
Raphael.st.draggable = function() {
var me = this,
lx = 0,
ly = 0,
ox = 0,
oy = 0,
moveFnc = function(dx, dy) {
lx = dx + ox;
ly = dy + oy;
me.transform('t' + lx + ',' + ly);
},
startFnc = function() {},
endFnc = function() {
ox = lx;
oy = ly;
};
this.drag(moveFnc, startFnc, endFnc);
};
Raphael.fn.node = function(x, y, radius, txt) {
this.x = x;
this.y = y;
this.radius = radius;
this.txt = txt;
this.circleObj = this.circle(this.x, this.y, radius);
this.textObj = this.text(this.x, this.y, this.txt);
this.st = this.set();
this.st.push(
this.circleObj,
this.textObj
);
this.st.draggable();
return this.st;
};
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...