/* * 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. */ /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /* * 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. */ import { __extends } from "tslib"; /** * Linear continuous scale * http://en.wikipedia.org/wiki/Level_of_measurement */ // FIXME only one data import Scale from './Scale.js'; import OrdinalMeta from '../data/OrdinalMeta.js'; import * as scaleHelper from './helper.js'; import { isArray, map, isObject, isString } from 'zrender/lib/core/util.js'; var OrdinalScale = /** @class */ function (_super) { __extends(OrdinalScale, _super); function OrdinalScale(setting) { var _this = _super.call(this, setting) || this; _this.type = 'ordinal'; var ordinalMeta = _this.getSetting('ordinalMeta'); // Caution: Should not use instanceof, consider ec-extensions using // import approach to get OrdinalMeta class. if (!ordinalMeta) { ordinalMeta = new OrdinalMeta({}); } if (isArray(ordinalMeta)) { ordinalMeta = new OrdinalMeta({ categories: map(ordinalMeta, function (item) { return isObject(item) ? item.value : item; }) }); } _this._ordinalMeta = ordinalMeta; _this._extent = _this.getSetting('extent') || [0, ordinalMeta.categories.length - 1]; return _this; } OrdinalScale.prototype.parse = function (val) { // Caution: Math.round(null) will return `0` rather than `NaN` if (val == null) { return NaN; } return isString(val) ? this._ordinalMeta.getOrdinal(val) // val might be float. : Math.round(val); }; OrdinalScale.prototype.contain = function (rank) { rank = this.parse(rank); return scaleHelper.contain(rank, this._extent) && this._ordinalMeta.categories[rank] != null; }; /** * Normalize given rank or name to linear [0, 1] * @param val raw ordinal number. * @return normalized value in [0, 1]. */ OrdinalScale.prototype.normalize = function (val) { val = this._getTickNumber(this.parse(val)); return scaleHelper.normalize(val, this._extent); }; /** * @param val normalized value in [0, 1]. * @return raw ordinal number. */ OrdinalScale.prototype.scale = function (val) { val = Math.round(scaleHelper.scale(val, this._extent)); return this.getRawOrdinalNumber(val); }; OrdinalScale.prototype.getTicks = function () { var ticks = []; var extent = this._extent; var rank = extent[0]; while (rank <= extent[1]) { ticks.push({ value: rank }); rank++; } return ticks; }; OrdinalScale.prototype.getMinorTicks = function (splitNumber) { // Not support. return; }; /** * @see `Ordinal['_ordinalNumbersByTick']` */ OrdinalScale.prototype.setSortInfo = function (info) { if (info == null) { this._ordinalNumbersByTick = this._ticksByOrdinalNumber = null; return; } var infoOrdinalNumbers = info.ordinalNumbers; var ordinalsByTick = this._ordinalNumbersByTick = []; var ticksByOrdinal = this._ticksByOrdinalNumber = []; // Unnecessary support negative tick in `realtimeSort`. var tickNum = 0; var allCategoryLen = this._ordinalMeta.categories.length; for (var len = Math.min(allCategoryLen, infoOrdinalNumbers.length); tickNum < len; ++tickNum) { var ordinalNumber = infoOrdinalNumbers[tickNum]; ordinalsByTick[tickNum] = ordinalNumber; ticksByOrdinal[ordinalNumber] = tickNum; } // Handle that `series.data` only covers part of the `axis.category.data`. var unusedOrdinal = 0; for (; tickNum < allCategoryLen; ++tickNum) { while (ticksByOrdinal[unusedOrdinal] != null) { unusedOrdinal++; } ; ordinalsByTick.push(unusedOrdinal); ticksByOrdinal[unusedOrdinal] = tickNum; } }; OrdinalScale.prototype._getTickNumber = function (ordinal) { var ticksByOrdinalNumber = this._ticksByOrdinalNumber; // also support ordinal out of range of `ordinalMeta.categories.length`, // where ordinal numbers are used as tick value directly. return ticksByOrdinalNumber && ordinal >= 0 && ordinal < ticksByOrdinalNumber.length ? ticksByOrdinalNumber[ordinal] : ordinal; }; /** * @usage * ```js * const ordinalNumber = ordinalScale.getRawOrdinalNumber(tickVal); * * // case0 * const rawOrdinalValue = axisModel.getCategories()[ordinalNumber]; * // case1 * const rawOrdinalValue = this._ordinalMeta.categories[ordinalNumber]; * // case2 * const coord = axis.dataToCoord(ordinalNumber); * ``` * * @param {OrdinalNumber} tickNumber index of display */ OrdinalScale.prototype.getRawOrdinalNumber = function (tickNumber) { var ordinalNumbersByTick = this._ordinalNumbersByTick; // tickNumber may be out of range, e.g., when axis max is larger than `ordinalMeta.categories.length`., // where ordinal numbers are used as tick value directly. return ordinalNumbersByTick && tickNumber >= 0 && tickNumber < ordinalNumbersByTick.length ? ordinalNumbersByTick[tickNumber] : tickNumber; }; /** * Get item on tick */ OrdinalScale.prototype.getLabel = function (tick) { if (!this.isBlank()) { var ordinalNumber = this.getRawOrdinalNumber(tick.value); var cateogry = this._ordinalMeta.categories[ordinalNumber]; // Note that if no data, ordinalMeta.categories is an empty array. // Return empty if it's not exist. return cateogry == null ? '' : cateogry + ''; } }; OrdinalScale.prototype.count = function () { return this._extent[1] - this._extent[0] + 1; }; OrdinalScale.prototype.unionExtentFromData = function (data, dim) { this.unionExtent(data.getApproximateExtent(dim)); }; /** * @override * If value is in extent range */ OrdinalScale.prototype.isInExtentRange = function (value) { value = this._getTickNumber(value); return this._extent[0] <= value && this._extent[1] >= value; }; OrdinalScale.prototype.getOrdinalMeta = function () { return this._ordinalMeta; }; OrdinalScale.prototype.calcNiceTicks = function () {}; OrdinalScale.prototype.calcNiceExtent = function () {}; OrdinalScale.type = 'ordinal'; return OrdinalScale; }(Scale); Scale.registerClass(OrdinalScale); export default OrdinalScale;