149 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
 | |
| /*
 | |
| * 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; | 
