in zookeeper-contrib/zookeeper-contrib-loggraph/src/main/resources/webapp/org/apache/zookeeper/graph/resources/raphael.js [2557:2678]
Element[proto].scale = function (x, y, cx, cy) {
if (x == null && y == null) {
return {
x: this._.sx,
y: this._.sy,
toString: x_y
};
}
y = y || x;
!+y && (y = x);
var dx,
dy,
dcx,
dcy,
a = this.attrs;
if (x != 0) {
var bb = this.getBBox(),
rcx = bb.x + bb.width / 2,
rcy = bb.y + bb.height / 2,
kx = x / this._.sx,
ky = y / this._.sy;
cx = (+cx || cx == 0) ? cx : rcx;
cy = (+cy || cy == 0) ? cy : rcy;
var dirx = ~~(x / math.abs(x)),
diry = ~~(y / math.abs(y)),
s = this.node.style,
ncx = cx + (rcx - cx) * kx,
ncy = cy + (rcy - cy) * ky;
switch (this.type) {
case "rect":
case "image":
var neww = a.width * dirx * kx,
newh = a.height * diry * ky;
this.attr({
height: newh,
r: a.r * mmin(dirx * kx, diry * ky),
width: neww,
x: ncx - neww / 2,
y: ncy - newh / 2
});
break;
case "circle":
case "ellipse":
this.attr({
rx: a.rx * dirx * kx,
ry: a.ry * diry * ky,
r: a.r * mmin(dirx * kx, diry * ky),
cx: ncx,
cy: ncy
});
break;
case "path":
var path = pathToRelative(a.path),
skip = true;
for (var i = 0, ii = path[length]; i < ii; i++) {
var p = path[i],
P0 = upperCase.call(p[0]);
if (P0 == "M" && skip) {
continue;
} else {
skip = false;
}
if (P0 == "A") {
p[path[i][length] - 2] *= kx;
p[path[i][length] - 1] *= ky;
p[1] *= dirx * kx;
p[2] *= diry * ky;
p[5] = +!(dirx + diry ? !+p[5] : +p[5]);
} else if (P0 == "H") {
for (var j = 1, jj = p[length]; j < jj; j++) {
p[j] *= kx;
}
} else if (P0 == "V") {
for (j = 1, jj = p[length]; j < jj; j++) {
p[j] *= ky;
}
} else {
for (j = 1, jj = p[length]; j < jj; j++) {
p[j] *= (j % 2) ? kx : ky;
}
}
}
var dim2 = pathDimensions(path);
dx = ncx - dim2.x - dim2.width / 2;
dy = ncy - dim2.y - dim2.height / 2;
path[0][1] += dx;
path[0][2] += dy;
this.attr({path: path});
break;
}
if (this.type in {text: 1, image:1} && (dirx != 1 || diry != 1)) {
if (this.transformations) {
this.transformations[2] = "scale("[concat](dirx, ",", diry, ")");
this.node[setAttribute]("transform", this.transformations[join](S));
dx = (dirx == -1) ? -a.x - (neww || 0) : a.x;
dy = (diry == -1) ? -a.y - (newh || 0) : a.y;
this.attr({x: dx, y: dy});
a.fx = dirx - 1;
a.fy = diry - 1;
} else {
this.node.filterMatrix = " progid:DXImageTransform.Microsoft.Matrix(M11="[concat](dirx,
", M12=0, M21=0, M22=", diry,
", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");
s.filter = (this.node.filterMatrix || E) + (this.node.filterOpacity || E);
}
} else {
if (this.transformations) {
this.transformations[2] = E;
this.node[setAttribute]("transform", this.transformations[join](S));
a.fx = 0;
a.fy = 0;
} else {
this.node.filterMatrix = E;
s.filter = (this.node.filterMatrix || E) + (this.node.filterOpacity || E);
}
}
a.scale = [x, y, cx, cy][join](S);
this._.sx = x;
this._.sy = y;
}
return this;
};