Merge pull request #2659 from chartjs/fix/2639

Fix pie custom tooltip sample
This commit is contained in:
Evert Timberg 2016-05-28 10:52:42 -04:00
commit d79bcb74ba

View File

@ -13,63 +13,31 @@
text-align: center; text-align: center;
} }
#chartjs-tooltip { #chartjs-tooltip {
opacity: 1; opacity: 1;
position: absolute; position: absolute;
background: rgba(0, 0, 0, .7); background: rgba(0, 0, 0, .7);
color: white; color: white;
padding: 3px; border-radius: 3px;
border-radius: 3px; -webkit-transition: all .1s ease;
-webkit-transition: all .1s ease; transition: all .1s ease;
transition: all .1s ease; pointer-events: none;
pointer-events: none; -webkit-transform: translate(-50%, 0);
-webkit-transform: translate(-50%, 0); transform: translate(-50%, 0);
transform: translate(-50%, 0);
} }
#chartjs-tooltip.below {
-webkit-transform: translate(-50%, 0); .chartjs-tooltip-key {
transform: translate(-50%, 0); display: inline-block;
} width: 10px;
#chartjs-tooltip.below:before { height: 10px;
border: solid;
border-color: #111 transparent;
border-color: rgba(0, 0, 0, .8) transparent;
border-width: 0 8px 8px 8px;
bottom: 1em;
content: "";
display: block;
left: 50%;
position: absolute;
z-index: 99;
-webkit-transform: translate(-50%, -100%);
transform: translate(-50%, -100%);
}
#chartjs-tooltip.above {
-webkit-transform: translate(-50%, -100%);
transform: translate(-50%, -100%);
}
#chartjs-tooltip.above:before {
border: solid;
border-color: #111 transparent;
border-color: rgba(0, 0, 0, .8) transparent;
border-width: 8px 8px 0 8px;
bottom: 1em;
content: "";
display: block;
left: 50%;
top: 100%;
position: absolute;
z-index: 99;
-webkit-transform: translate(-50%, 0);
transform: translate(-50%, 0);
} }
</style> </style>
</head> </head>
<body> <body>
<div id="canvas-holder"> <div id="canvas-holder" style="width: 50px;">
<canvas id="chart-area1" width="50" height="50" /> <canvas id="chart-area1" width="50" height="50" />
</div> </div>
<div id="canvas-holder"> <div id="canvas-holder" style="width: 300px;">
<canvas id="chart-area2" width="300" height="300" /> <canvas id="chart-area2" width="300" height="300" />
</div> </div>
@ -77,96 +45,110 @@
<script> <script>
Chart.defaults.global.customTooltips = function(tooltip) { Chart.defaults.global.tooltips.custom = function(tooltip) {
// Tooltip Element // Tooltip Element
var tooltipEl = $('#chartjs-tooltip'); var tooltipEl = $('#chartjs-tooltip');
// Hide if no tooltip if (!tooltipEl[0]) {
if (!tooltip) { $('body').append('<div id="chartjs-tooltip"></div>');
tooltipEl.css({ tooltipEl = $('#chartjs-tooltip');
opacity: 0 }
});
return;
}
// Set caret Position // Hide if no tooltip
tooltipEl.removeClass('above below'); if (!tooltip.opacity) {
tooltipEl.addClass(tooltip.yAlign);
// Set Text
tooltipEl.html(tooltip.text);
// Find Y Location on page
var top;
if (tooltip.yAlign == 'above') {
top = tooltip.y - tooltip.caretHeight - tooltip.caretPadding;
} else {
top = tooltip.y + tooltip.caretHeight + tooltip.caretPadding;
}
//Function to find absolution position of the element and not just it's relative position
function getPosition (element) {
var top = 0, left = 0;
do {
top += element.offsetTop || 0;
left += element.offsetLeft || 0;
element = element.offsetParent;
} while (element);
return {
top: top,
left: left
};
};
//Finding absolute position of the chart canvas
var position = getPosition(tooltip.chart.canvas)
// Display, position, and set styles for font
tooltipEl.css({ tooltipEl.css({
opacity: 1, opacity: 0
left: position.left + tooltip.x + 'px',
top: position.top + top + 'px',
fontFamily: tooltip.fontFamily,
fontSize: tooltip.fontSize,
fontStyle: tooltip.fontStyle,
}); });
$('.chartjs-wrap canvas')
.each(function(index, el) {
$(el).css('cursor', 'default');
});
return;
}
$(this._chart.canvas).css('cursor', 'pointer');
// Set caret Position
tooltipEl.removeClass('above below no-transform');
if (tooltip.yAlign) {
tooltipEl.addClass(tooltip.yAlign);
} else {
tooltipEl.addClass('no-transform');
}
// Set Text
if (tooltip.body) {
var innerHtml = [
(tooltip.beforeTitle || []).join('\n'), (tooltip.title || []).join('\n'), (tooltip.afterTitle || []).join('\n'), (tooltip.beforeBody || []).join('\n'), (tooltip.body || []).join('\n'), (tooltip.afterBody || []).join('\n'), (tooltip.beforeFooter || [])
.join('\n'), (tooltip.footer || []).join('\n'), (tooltip.afterFooter || []).join('\n')
];
tooltipEl.html(innerHtml.join('\n'));
}
// Find Y Location on page
var top = 0;
if (tooltip.yAlign) {
if (tooltip.yAlign == 'above') {
top = tooltip.y - tooltip.caretHeight - tooltip.caretPadding;
} else {
top = tooltip.y + tooltip.caretHeight + tooltip.caretPadding;
}
}
var position = $(this._chart.canvas)[0].getBoundingClientRect();
// Display, position, and set styles for font
tooltipEl.css({
opacity: 1,
width: tooltip.width ? (tooltip.width + 'px') : 'auto',
left: position.left + tooltip.x + 'px',
top: position.top + top + 'px',
fontFamily: tooltip._fontFamily,
fontSize: tooltip.fontSize,
fontStyle: tooltip._fontStyle,
padding: tooltip.yPadding + 'px ' + tooltip.xPadding + 'px',
});
}; };
var pieData = [{ var config = {
value: 300, type: 'pie',
color: "#F7464A", data: {
highlight: "#FF5A5E", datasets: [{
label: "Red" data: [300, 50, 100, 40, 10],
}, { backgroundColor: [
value: 50, "#F7464A",
color: "#46BFBD", "#46BFBD",
highlight: "#5AD3D1", "#FDB45C",
label: "Green" "#949FB1",
}, { "#4D5360",
value: 100, ],
color: "#FDB45C", }],
highlight: "#FFC870", labels: [
label: "Yellow" "Red",
}, { "Green",
value: 40, "Yellow",
color: "#949FB1", "Grey",
highlight: "#A8B3C5", "Dark Grey"
label: "Grey" ]
}, { },
value: 120, options: {
color: "#4D5360", responsive: true,
highlight: "#616774", legend: {
label: "Dark Grey" display: false
}]; },
tooltips: {
enabled: false,
}
}
};
window.onload = function() { window.onload = function() {
var ctx1 = document.getElementById("chart-area1").getContext("2d"); var ctx1 = document.getElementById("chart-area1").getContext("2d");
window.myPie = new Chart(ctx1).Pie(pieData); window.myPie = new Chart(ctx1, config);
var ctx2 = document.getElementById("chart-area2").getContext("2d"); var ctx2 = document.getElementById("chart-area2").getContext("2d");
window.myPie = new Chart(ctx2).Pie(pieData); window.myPie = new Chart(ctx2, config);
}; };
</script> </script>
</body> </body>