in activemq-web-console/src/main/webapp/js/plotkit/SVG.js [431:545]
PlotKit.SVGRenderer.prototype._renderPieAxis = function() {
if (this.layout.xticks) {
// make a lookup dict for x->slice values
var lookup = new Array();
for (var i = 0; i < this.layout.slices.length; i++) {
lookup[this.layout.slices[i].xval] = this.layout.slices[i];
}
var centerx = this.area.x + this.area.w * 0.5;
var centery = this.area.y + this.area.h * 0.5;
var radius = Math.min(this.area.w * this.options.pieRadius + 10,
this.area.h * this.options.pieRadius + 10);
var labelWidth = this.options.axisLabelWidth;
for (var i = 0; i < this.layout.xticks.length; i++) {
var slice = lookup[this.layout.xticks[i][0]];
if (MochiKit.Base.isUndefinedOrNull(slice))
continue;
var angle = (slice.startAngle + slice.endAngle)/2;
// normalize the angle
var normalisedAngle = angle;
if (normalisedAngle > Math.PI * 2)
normalisedAngle = normalisedAngle - Math.PI * 2;
else if (normalisedAngle < 0)
normalisedAngle = normalisedAngle + Math.PI * 2;
var labelx = centerx + Math.sin(normalisedAngle) * (radius + 10);
var labely = centery - Math.cos(normalisedAngle) * (radius + 10);
var attrib = {
"position": "absolute",
"zIndex": 11,
"width": labelWidth + "px",
"fontSize": this.options.axisLabelFontSize + "px",
"overflow": "hidden",
"color": this.options.axisLabelColor.toHexString()
};
var svgattrib = {
"width": labelWidth + "px",
"fontSize": this.options.axisLabelFontSize + "px",
"height": (this.options.axisLabelFontSize + 3) + "px",
"fill": this.options.axisLabelColor.toRGBString()
};
if (normalisedAngle <= Math.PI * 0.5) {
// text on top and align left
MochiKit.Base.update(attrib, {
'textAlign': 'left', 'verticalAlign': 'top',
'left': labelx + 'px',
'top': (labely - this.options.axisLabelFontSize) + "px"
});
MochiKit.Base.update(svgattrib, {
"x": labelx,
"y" :(labely - this.options.axisLabelFontSize),
"textAnchor": "left"
});
}
else if ((normalisedAngle > Math.PI * 0.5) && (normalisedAngle <= Math.PI)) {
// text on bottom and align left
MochiKit.Base.update(attrib, {
'textAlign': 'left', 'verticalAlign': 'bottom',
'left': labelx + 'px',
'top': labely + "px"
});
MochiKit.Base.update(svgattrib, {
'textAnchor': 'left',
'x': labelx,
'y': labely
});
}
else if ((normalisedAngle > Math.PI) && (normalisedAngle <= Math.PI*1.5)) {
// text on bottom and align right
MochiKit.Base.update(attrib, {
'textAlign': 'right', 'verticalAlign': 'bottom',
'left': labelx + 'px',
'top': labely + "px"
});
MochiKit.Base.update(svgattrib, {
'textAnchor': 'right',
'x': labelx - labelWidth,
'y': labely
});
}
else {
// text on top and align right
MochiKit.Base.update(attrib, {
'textAlign': 'left', 'verticalAlign': 'bottom',
'left': labelx + 'px',
'top': labely + "px"
});
MochiKit.Base.update(svgattrib, {
'textAnchor': 'left',
'x': labelx - labelWidth,
'y': labely - this.options.axisLabelFontSize
});
}
if (this.options.axisLabelUseDiv) {
var label = DIV({'style': attrib}, this.layout.xticks[i][1]);
this.xlabels.push(label);
MochiKit.DOM.appendChildNodes(this.container, label);
}
else {
var label = this.createSVGElement("text", svgattrib);
label.appendChild(this.document.createTextNode(this.layout.xticks[i][1]));
this.root.appendChild(label);
}
}
}
};