| 
/* 
 | 
* 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; 
 |