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.
214 lines
7.6 KiB
214 lines
7.6 KiB
4 weeks 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.
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 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;
|