| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 | 
							- 'use strict';
 
- module.exports = function(Chart) {
 
- 	var helpers = Chart.helpers;
 
- 	// Default config for a category scale
 
- 	var defaultConfig = {
 
- 		position: 'bottom'
 
- 	};
 
- 	var DatasetScale = Chart.Scale.extend({
 
- 		/**
 
- 		* Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those
 
- 		* else fall back to data.labels
 
- 		* @private
 
- 		*/
 
- 		getLabels: function() {
 
- 			var data = this.chart.data;
 
- 			return (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;
 
- 		},
 
- 		// Implement this so that
 
- 		determineDataLimits: function() {
 
- 			var me = this;
 
- 			var labels = me.getLabels();
 
- 			me.minIndex = 0;
 
- 			me.maxIndex = labels.length - 1;
 
- 			var findIndex;
 
- 			if (me.options.ticks.min !== undefined) {
 
- 				// user specified min value
 
- 				findIndex = helpers.indexOf(labels, me.options.ticks.min);
 
- 				me.minIndex = findIndex !== -1 ? findIndex : me.minIndex;
 
- 			}
 
- 			if (me.options.ticks.max !== undefined) {
 
- 				// user specified max value
 
- 				findIndex = helpers.indexOf(labels, me.options.ticks.max);
 
- 				me.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;
 
- 			}
 
- 			me.min = labels[me.minIndex];
 
- 			me.max = labels[me.maxIndex];
 
- 		},
 
- 		buildTicks: function() {
 
- 			var me = this;
 
- 			var labels = me.getLabels();
 
- 			// If we are viewing some subset of labels, slice the original array
 
- 			me.ticks = (me.minIndex === 0 && me.maxIndex === labels.length - 1) ? labels : labels.slice(me.minIndex, me.maxIndex + 1);
 
- 		},
 
- 		getLabelForIndex: function(index, datasetIndex) {
 
- 			var me = this;
 
- 			var data = me.chart.data;
 
- 			var isHorizontal = me.isHorizontal();
 
- 			if ((data.xLabels && isHorizontal) || (data.yLabels && !isHorizontal)) {
 
- 				return me.getRightValue(data.datasets[datasetIndex].data[index]);
 
- 			}
 
- 			return me.ticks[index];
 
- 		},
 
- 		// Used to get data value locations.  Value can either be an index or a numerical value
 
- 		getPixelForValue: function(value, index, datasetIndex, includeOffset) {
 
- 			var me = this;
 
- 			// 1 is added because we need the length but we have the indexes
 
- 			var offsetAmt = Math.max((me.maxIndex + 1 - me.minIndex - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);
 
- 			if (value !== undefined && isNaN(index)) {
 
- 				var labels = me.getLabels();
 
- 				var idx = labels.indexOf(value);
 
- 				index = idx !== -1 ? idx : index;
 
- 			}
 
- 			if (me.isHorizontal()) {
 
- 				var valueWidth = me.width / offsetAmt;
 
- 				var widthOffset = (valueWidth * (index - me.minIndex));
 
- 				if (me.options.gridLines.offsetGridLines && includeOffset || me.maxIndex === me.minIndex && includeOffset) {
 
- 					widthOffset += (valueWidth / 2);
 
- 				}
 
- 				return me.left + Math.round(widthOffset);
 
- 			}
 
- 			var valueHeight = me.height / offsetAmt;
 
- 			var heightOffset = (valueHeight * (index - me.minIndex));
 
- 			if (me.options.gridLines.offsetGridLines && includeOffset) {
 
- 				heightOffset += (valueHeight / 2);
 
- 			}
 
- 			return me.top + Math.round(heightOffset);
 
- 		},
 
- 		getPixelForTick: function(index, includeOffset) {
 
- 			return this.getPixelForValue(this.ticks[index], index + this.minIndex, null, includeOffset);
 
- 		},
 
- 		getValueForPixel: function(pixel) {
 
- 			var me = this;
 
- 			var value;
 
- 			var offsetAmt = Math.max((me.ticks.length - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);
 
- 			var horz = me.isHorizontal();
 
- 			var valueDimension = (horz ? me.width : me.height) / offsetAmt;
 
- 			pixel -= horz ? me.left : me.top;
 
- 			if (me.options.gridLines.offsetGridLines) {
 
- 				pixel -= (valueDimension / 2);
 
- 			}
 
- 			if (pixel <= 0) {
 
- 				value = 0;
 
- 			} else {
 
- 				value = Math.round(pixel / valueDimension);
 
- 			}
 
- 			return value;
 
- 		},
 
- 		getBasePixel: function() {
 
- 			return this.bottom;
 
- 		}
 
- 	});
 
- 	Chart.scaleService.registerScaleType('category', DatasetScale, defaultConfig);
 
- };
 
 
  |