| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | 
							- 'use strict';
 
- module.exports = function(Chart) {
 
- 	var helpers = Chart.helpers;
 
- 	Chart.defaults.bubble = {
 
- 		hover: {
 
- 			mode: 'single'
 
- 		},
 
- 		scales: {
 
- 			xAxes: [{
 
- 				type: 'linear', // bubble should probably use a linear scale by default
 
- 				position: 'bottom',
 
- 				id: 'x-axis-0' // need an ID so datasets can reference the scale
 
- 			}],
 
- 			yAxes: [{
 
- 				type: 'linear',
 
- 				position: 'left',
 
- 				id: 'y-axis-0'
 
- 			}]
 
- 		},
 
- 		tooltips: {
 
- 			callbacks: {
 
- 				title: function() {
 
- 					// Title doesn't make sense for scatter since we format the data as a point
 
- 					return '';
 
- 				},
 
- 				label: function(tooltipItem, data) {
 
- 					var datasetLabel = data.datasets[tooltipItem.datasetIndex].label || '';
 
- 					var dataPoint = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
 
- 					return datasetLabel + ': (' + tooltipItem.xLabel + ', ' + tooltipItem.yLabel + ', ' + dataPoint.r + ')';
 
- 				}
 
- 			}
 
- 		}
 
- 	};
 
- 	Chart.controllers.bubble = Chart.DatasetController.extend({
 
- 		dataElementType: Chart.elements.Point,
 
- 		update: function(reset) {
 
- 			var me = this;
 
- 			var meta = me.getMeta();
 
- 			var points = meta.data;
 
- 			// Update Points
 
- 			helpers.each(points, function(point, index) {
 
- 				me.updateElement(point, index, reset);
 
- 			});
 
- 		},
 
- 		updateElement: function(point, index, reset) {
 
- 			var me = this;
 
- 			var meta = me.getMeta();
 
- 			var xScale = me.getScaleForId(meta.xAxisID);
 
- 			var yScale = me.getScaleForId(meta.yAxisID);
 
- 			var custom = point.custom || {};
 
- 			var dataset = me.getDataset();
 
- 			var data = dataset.data[index];
 
- 			var pointElementOptions = me.chart.options.elements.point;
 
- 			var dsIndex = me.index;
 
- 			helpers.extend(point, {
 
- 				// Utility
 
- 				_xScale: xScale,
 
- 				_yScale: yScale,
 
- 				_datasetIndex: dsIndex,
 
- 				_index: index,
 
- 				// Desired view properties
 
- 				_model: {
 
- 					x: reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex, me.chart.isCombo),
 
- 					y: reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex),
 
- 					// Appearance
 
- 					radius: reset ? 0 : custom.radius ? custom.radius : me.getRadius(data),
 
- 					// Tooltip
 
- 					hitRadius: custom.hitRadius ? custom.hitRadius : helpers.getValueAtIndexOrDefault(dataset.hitRadius, index, pointElementOptions.hitRadius)
 
- 				}
 
- 			});
 
- 			// Trick to reset the styles of the point
 
- 			Chart.DatasetController.prototype.removeHoverStyle.call(me, point, pointElementOptions);
 
- 			var model = point._model;
 
- 			model.skip = custom.skip ? custom.skip : (isNaN(model.x) || isNaN(model.y));
 
- 			point.pivot();
 
- 		},
 
- 		getRadius: function(value) {
 
- 			return value.r || this.chart.options.elements.point.radius;
 
- 		},
 
- 		setHoverStyle: function(point) {
 
- 			var me = this;
 
- 			Chart.DatasetController.prototype.setHoverStyle.call(me, point);
 
- 			// Radius
 
- 			var dataset = me.chart.data.datasets[point._datasetIndex];
 
- 			var index = point._index;
 
- 			var custom = point.custom || {};
 
- 			var model = point._model;
 
- 			model.radius = custom.hoverRadius ? custom.hoverRadius : (helpers.getValueAtIndexOrDefault(dataset.hoverRadius, index, me.chart.options.elements.point.hoverRadius)) + me.getRadius(dataset.data[index]);
 
- 		},
 
- 		removeHoverStyle: function(point) {
 
- 			var me = this;
 
- 			Chart.DatasetController.prototype.removeHoverStyle.call(me, point, me.chart.options.elements.point);
 
- 			var dataVal = me.chart.data.datasets[point._datasetIndex].data[point._index];
 
- 			var custom = point.custom || {};
 
- 			var model = point._model;
 
- 			model.radius = custom.radius ? custom.radius : me.getRadius(dataVal);
 
- 		}
 
- 	});
 
- };
 
 
  |