]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Tooltip label and value via controller (#6744)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Fri, 15 Nov 2019 16:51:45 +0000 (18:51 +0200)
committerEvert Timberg <evert.timberg+github@gmail.com>
Fri, 15 Nov 2019 16:51:45 +0000 (11:51 -0500)
src/controllers/controller.bar.js
src/controllers/controller.bubble.js
src/controllers/controller.radar.js
src/core/core.controller.js
src/core/core.datasetController.js
src/core/core.tooltip.js

index 212ff840ebbdac1d4f723eb886787117167a36ce..8d7e01f71e3c5a0437184d7d2557715aa0d493ed 100644 (file)
@@ -239,6 +239,25 @@ module.exports = DatasetController.extend({
                return parsed;
        },
 
+       /**
+        * @private
+        */
+       _getLabelAndValue: function(index) {
+               const me = this;
+               const indexScale = me._getIndexScale();
+               const valueScale = me._getValueScale();
+               const parsed = me._getParsed(index);
+               const custom = parsed._custom;
+               const value = custom
+                       ? '[' + custom.start + ', ' + custom.end + ']'
+                       : '' + valueScale.getLabelForValue(parsed[valueScale.id]);
+
+               return {
+                       label: '' + indexScale.getLabelForValue(parsed[indexScale.id]),
+                       value: value
+               };
+       },
+
        initialize: function() {
                var me = this;
                var meta;
index d344f488e745ad6a90990b921517736d8836d917..726f86b81ba624a33921667a0601acd241ea5a80 100644 (file)
@@ -27,11 +27,6 @@ defaults._set('bubble', {
                        title: function() {
                                // Title doesn't make sense for scatter since we format the data as a point
                                return '';
-                       },
-                       label: function(item, data) {
-                               var datasetLabel = data.datasets[item.datasetIndex].label || '';
-                               var dataPoint = data.datasets[item.datasetIndex].data[item.index] || {r: '?'};
-                               return datasetLabel + ': (' + item.label + ', ' + item.value + ', ' + dataPoint.r + ')';
                        }
                }
        }
@@ -94,6 +89,25 @@ module.exports = DatasetController.extend({
                return Math.max(firstPoint, lastPoint) / 2;
        },
 
+       /**
+        * @private
+        */
+       _getLabelAndValue: function(index) {
+               const me = this;
+               const meta = me._cachedMeta;
+               const xScale = me.getScaleForId(meta.xAxisID);
+               const yScale = me.getScaleForId(meta.yAxisID);
+               const parsed = me._getParsed(index);
+               const x = xScale.getLabelForValue(parsed[xScale.id]);
+               const y = yScale.getLabelForValue(parsed[yScale.id]);
+               const r = parsed._custom;
+
+               return {
+                       label: meta.label,
+                       value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'
+               };
+       },
+
        /**
         * @protected
         */
index b31ceab042c917a6b85c6b5b236a046bda1b9e13..8596e39b39170afca9eb84bbd7c69c2bbeed86aa 100644 (file)
@@ -77,6 +77,20 @@ module.exports = DatasetController.extend({
                return this.chart.scale.id;
        },
 
+       /**
+        * @private
+        */
+       _getLabelAndValue: function(index) {
+               const me = this;
+               const scale = me._getValueScale();
+               const parsed = me._getParsed(index);
+
+               return {
+                       label: scale._getLabels()[index],
+                       value: '' + scale.getLabelForValue(parsed[scale.id])
+               };
+       },
+
        update: function(reset) {
                var me = this;
                var meta = me.getMeta();
index 5b2f5230ef347b3382c58863bbafad89955ec6a3..c1ca43a3d616930d00a353848cb12e1098a71333 100644 (file)
@@ -432,6 +432,7 @@ helpers.extend(Chart.prototype, /** @lends Chart */ {
                        meta.type = type;
                        meta.order = dataset.order || 0;
                        meta.index = i;
+                       meta.label = '' + dataset.label;
 
                        if (meta.controller) {
                                meta.controller.updateIndex(i);
index 3de5c5531e0faf808bcefb2c12c8000662249e18..d9adc2ef9afc44b8303e0c055d2cf94abbfe3802 100644 (file)
@@ -717,6 +717,23 @@ helpers.extend(DatasetController.prototype, {
                return false;
        },
 
+       /**
+        * @private
+        */
+       _getLabelAndValue: function(index) {
+               const me = this;
+               const indexScale = me._getIndexScale();
+               const valueScale = me._getValueScale();
+               const parsed = me._getParsed(index);
+               return {
+                       label: indexScale ? '' + indexScale.getLabelForValue(parsed[indexScale.id]) : '',
+                       value: valueScale ? '' + valueScale.getLabelForValue(parsed[valueScale.id]) : ''
+               };
+       },
+
+       /**
+        * @private
+        */
        _update: function(reset) {
                var me = this;
                me._configure();
index 4b83d1f7e16053f934195ecef3a18a96a0b4b1e7..e6a439f83482633fbc9569bd7e8bfe75d86b156d 100644 (file)
@@ -206,14 +206,11 @@ function splitNewlines(str) {
  */
 function createTooltipItem(chart, item) {
        const {datasetIndex, element, index} = item;
-       const controller = chart.getDatasetMeta(datasetIndex).controller;
-       const indexScale = controller._getIndexScale();
-       const valueScale = controller._getValueScale();
-       const parsed = controller._getParsed(index);
+       const {label, value} = chart.getDatasetMeta(datasetIndex).controller._getLabelAndValue(index);
 
        return {
-               label: indexScale ? '' + indexScale.getLabelForValue(parsed[indexScale.id]) : '',
-               value: valueScale ? '' + valueScale.getLabelForValue(parsed[valueScale.id]) : '',
+               label: label,
+               value: value,
                index: index,
                datasetIndex: datasetIndex,
                x: element._model.x,