chartjs-plugin-piechart-outlabels
Version:
Chart.js plugin to display float data labels on pie/doughnut chart outside the border.
79 lines (62 loc) • 2.01 kB
JavaScript
import Chart from 'chart.js';
var helpers = Chart.helpers;
export default helpers.merge(helpers, {
// @todo move this method in Chart.helpers.canvas.toFont (deprecates helpers.fontString)
// @see https://developer.mozilla.org/en-US/docs/Web/CSS/font
toFontString: function(font) {
if (!font || helpers.isNullOrUndef(font.size) || helpers.isNullOrUndef(font.family)) {
return null;
}
return (font.style ? font.style + ' ' : '')
+ (font.weight ? font.weight + ' ' : '')
+ font.size + 'px '
+ font.family;
},
// @todo move this in Chart.helpers.canvas.textSize
// @todo cache calls of measureText if font doesn't change?!
textSize: function(ctx, lines, font) {
var items = [].concat(lines);
var ilen = items.length;
var prev = ctx.font;
var width = 0;
var i;
ctx.font = font.string;
for (i = 0; i < ilen; ++i) {
width = Math.max(ctx.measureText(items[i]).width, width);
}
ctx.font = prev;
return {
height: ilen * font.lineHeight,
width: width
};
},
// @todo move this method in Chart.helpers.options.toFont
parseFont: function(value, height) {
var global = Chart.defaults.global;
var size = helpers.valueOrDefault(value.size, global.defaultFontSize);
if (value.resizable) {
size = this.adaptTextSizeToHeight(height, value.minSize, value.maxSize);
}
var font = {
family: helpers.valueOrDefault(value.family, global.defaultFontFamily),
lineHeight: helpers.options.toLineHeight(value.lineHeight, size),
size: size,
style: helpers.valueOrDefault(value.style, global.defaultFontStyle),
weight: helpers.valueOrDefault(value.weight, null),
string: ''
};
font.string = helpers.toFontString(font);
return font;
},
adaptTextSizeToHeight: function(height, min, max) {
var size = (height / 100) * 2.5;
if(min && size < min) {
return min;
}
if(max && size > max) {
return max;
}
return size;
}
});
;