You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					149 lines
				
				4.0 KiB
			
		
		
			
		
	
	
					149 lines
				
				4.0 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								* Licensed to the Apache Software Foundation (ASF) under one
							 | 
						||
| 
								 | 
							
								* or more contributor license agreements.  See the NOTICE file
							 | 
						||
| 
								 | 
							
								* distributed with this work for additional information
							 | 
						||
| 
								 | 
							
								* regarding copyright ownership.  The ASF licenses this file
							 | 
						||
| 
								 | 
							
								* to you under the Apache License, Version 2.0 (the
							 | 
						||
| 
								 | 
							
								* "License"); you may not use this file except in compliance
							 | 
						||
| 
								 | 
							
								* with the License.  You may obtain a copy of the License at
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								*   http://www.apache.org/licenses/LICENSE-2.0
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								* Unless required by applicable law or agreed to in writing,
							 | 
						||
| 
								 | 
							
								* software distributed under the License is distributed on an
							 | 
						||
| 
								 | 
							
								* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
							 | 
						||
| 
								 | 
							
								* KIND, either express or implied.  See the License for the
							 | 
						||
| 
								 | 
							
								* specific language governing permissions and limitations
							 | 
						||
| 
								 | 
							
								* under the License.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var zrUtil = require("zrender/lib/core/util");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var Scale = require("./Scale");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var OrdinalMeta = require("../data/OrdinalMeta");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								* Licensed to the Apache Software Foundation (ASF) under one
							 | 
						||
| 
								 | 
							
								* or more contributor license agreements.  See the NOTICE file
							 | 
						||
| 
								 | 
							
								* distributed with this work for additional information
							 | 
						||
| 
								 | 
							
								* regarding copyright ownership.  The ASF licenses this file
							 | 
						||
| 
								 | 
							
								* to you under the Apache License, Version 2.0 (the
							 | 
						||
| 
								 | 
							
								* "License"); you may not use this file except in compliance
							 | 
						||
| 
								 | 
							
								* with the License.  You may obtain a copy of the License at
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								*   http://www.apache.org/licenses/LICENSE-2.0
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								* Unless required by applicable law or agreed to in writing,
							 | 
						||
| 
								 | 
							
								* software distributed under the License is distributed on an
							 | 
						||
| 
								 | 
							
								* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
							 | 
						||
| 
								 | 
							
								* KIND, either express or implied.  See the License for the
							 | 
						||
| 
								 | 
							
								* specific language governing permissions and limitations
							 | 
						||
| 
								 | 
							
								* under the License.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Linear continuous scale
							 | 
						||
| 
								 | 
							
								 * @module echarts/coord/scale/Ordinal
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * http://en.wikipedia.org/wiki/Level_of_measurement
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								// FIXME only one data
							 | 
						||
| 
								 | 
							
								var scaleProto = Scale.prototype;
							 | 
						||
| 
								 | 
							
								var OrdinalScale = Scale.extend({
							 | 
						||
| 
								 | 
							
								  type: 'ordinal',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * @param {module:echarts/data/OrdianlMeta|Array.<string>} ordinalMeta
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  init: function (ordinalMeta, extent) {
							 | 
						||
| 
								 | 
							
								    // Caution: Should not use instanceof, consider ec-extensions using
							 | 
						||
| 
								 | 
							
								    // import approach to get OrdinalMeta class.
							 | 
						||
| 
								 | 
							
								    if (!ordinalMeta || zrUtil.isArray(ordinalMeta)) {
							 | 
						||
| 
								 | 
							
								      ordinalMeta = new OrdinalMeta({
							 | 
						||
| 
								 | 
							
								        categories: ordinalMeta
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    this._ordinalMeta = ordinalMeta;
							 | 
						||
| 
								 | 
							
								    this._extent = extent || [0, ordinalMeta.categories.length - 1];
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  parse: function (val) {
							 | 
						||
| 
								 | 
							
								    return typeof val === 'string' ? this._ordinalMeta.getOrdinal(val) // val might be float.
							 | 
						||
| 
								 | 
							
								    : Math.round(val);
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  contain: function (rank) {
							 | 
						||
| 
								 | 
							
								    rank = this.parse(rank);
							 | 
						||
| 
								 | 
							
								    return scaleProto.contain.call(this, rank) && this._ordinalMeta.categories[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) {
							 | 
						||
| 
								 | 
							
								    if (!this.isBlank()) {
							 | 
						||
| 
								 | 
							
								      // Note that if no data, ordinalMeta.categories is an empty array.
							 | 
						||
| 
								 | 
							
								      return this._ordinalMeta.categories[n];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * @return {number}
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  count: function () {
							 | 
						||
| 
								 | 
							
								    return this._extent[1] - this._extent[0] + 1;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * @override
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  unionExtentFromData: function (data, dim) {
							 | 
						||
| 
								 | 
							
								    this.unionExtent(data.getApproximateExtent(dim));
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  getOrdinalMeta: function () {
							 | 
						||
| 
								 | 
							
								    return this._ordinalMeta;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  niceTicks: zrUtil.noop,
							 | 
						||
| 
								 | 
							
								  niceExtent: zrUtil.noop
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @return {module:echarts/scale/Time}
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								OrdinalScale.create = function () {
							 | 
						||
| 
								 | 
							
								  return new OrdinalScale();
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _default = OrdinalScale;
							 | 
						||
| 
								 | 
							
								module.exports = _default;
							 |