95 lines
2.2 KiB
Plaintext
95 lines
2.2 KiB
Plaintext
/**
|
|
* Linear continuous scale
|
|
* @module echarts/coord/scale/Ordinal
|
|
*
|
|
* http://en.wikipedia.org/wiki/Level_of_measurement
|
|
*/
|
|
|
|
// FIXME only one data
|
|
define(function (require) {
|
|
|
|
var zrUtil = require('zrender/core/util');
|
|
var Scale = require('./Scale');
|
|
|
|
var scaleProto = Scale.prototype;
|
|
|
|
var OrdinalScale = Scale.extend({
|
|
|
|
type: 'ordinal',
|
|
|
|
init: function (data, extent) {
|
|
this._data = data;
|
|
this._extent = extent || [0, data.length - 1];
|
|
},
|
|
|
|
parse: function (val) {
|
|
return typeof val === 'string'
|
|
? zrUtil.indexOf(this._data, val)
|
|
// val might be float.
|
|
: Math.round(val);
|
|
},
|
|
|
|
contain: function (rank) {
|
|
rank = this.parse(rank);
|
|
return scaleProto.contain.call(this, rank)
|
|
&& this._data[rank] != null;
|
|
},
|
|
|
|
/**
|
|
* Normalize given rank or name to linear [0, 1]
|
|
* @param {number|string} [val]
|
|
* @return {number}
|
|
*/
|
|
normalize: function (val) {
|
|
return scaleProto.normalize.call(this, this.parse(val));
|
|
},
|
|
|
|
scale: function (val) {
|
|
return Math.round(scaleProto.scale.call(this, val));
|
|
},
|
|
|
|
/**
|
|
* @return {Array}
|
|
*/
|
|
getTicks: function () {
|
|
var ticks = [];
|
|
var extent = this._extent;
|
|
var rank = extent[0];
|
|
|
|
while (rank <= extent[1]) {
|
|
ticks.push(rank);
|
|
rank++;
|
|
}
|
|
|
|
return ticks;
|
|
},
|
|
|
|
/**
|
|
* Get item on rank n
|
|
* @param {number} n
|
|
* @return {string}
|
|
*/
|
|
getLabel: function (n) {
|
|
return this._data[n];
|
|
},
|
|
|
|
/**
|
|
* @return {number}
|
|
*/
|
|
count: function () {
|
|
return this._extent[1] - this._extent[0] + 1;
|
|
},
|
|
|
|
niceTicks: zrUtil.noop,
|
|
niceExtent: zrUtil.noop
|
|
});
|
|
|
|
/**
|
|
* @return {module:echarts/scale/Time}
|
|
*/
|
|
OrdinalScale.create = function () {
|
|
return new OrdinalScale();
|
|
};
|
|
|
|
return OrdinalScale;
|
|
}); |