cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
171 lines (170 loc) • 5.69 kB
JavaScript
import { map, each } from "../../../zrender/lib/core/util.mjs";
import { getPixelPrecision, linearMap, round } from "../util/number.mjs";
import { createAxisTicks, createAxisLabels, calculateCategoryInterval } from "./axisTickLabelBuilder.mjs";
var NORMALIZED_EXTENT = [0, 1];
var Axis = function() {
function Axis2(dim, scale, extent) {
this.onBand = false;
this.inverse = false;
this.dim = dim;
this.scale = scale;
this._extent = extent || [0, 0];
}
Axis2.prototype.contain = function(coord) {
var extent = this._extent;
var min = Math.min(extent[0], extent[1]);
var max = Math.max(extent[0], extent[1]);
return coord >= min && coord <= max;
};
Axis2.prototype.containData = function(data) {
return this.scale.contain(data);
};
Axis2.prototype.getExtent = function() {
return this._extent.slice();
};
Axis2.prototype.getPixelPrecision = function(dataExtent) {
return getPixelPrecision(dataExtent || this.scale.getExtent(), this._extent);
};
Axis2.prototype.setExtent = function(start, end) {
var extent = this._extent;
extent[0] = start;
extent[1] = end;
};
Axis2.prototype.dataToCoord = function(data, clamp) {
var extent = this._extent;
var scale = this.scale;
data = scale.normalize(data);
if (this.onBand && scale.type === "ordinal") {
extent = extent.slice();
fixExtentWithBands(extent, scale.count());
}
return linearMap(data, NORMALIZED_EXTENT, extent, clamp);
};
Axis2.prototype.coordToData = function(coord, clamp) {
var extent = this._extent;
var scale = this.scale;
if (this.onBand && scale.type === "ordinal") {
extent = extent.slice();
fixExtentWithBands(extent, scale.count());
}
var t = linearMap(coord, extent, NORMALIZED_EXTENT, clamp);
return this.scale.scale(t);
};
Axis2.prototype.pointToData = function(point, clamp) {
return;
};
Axis2.prototype.getTicksCoords = function(opt) {
opt = opt || {};
var tickModel = opt.tickModel || this.getTickModel();
var result = createAxisTicks(this, tickModel);
var ticks = result.ticks;
var ticksCoords = map(ticks, function(tickVal) {
return {
coord: this.dataToCoord(this.scale.type === "ordinal" ? this.scale.getRawOrdinalNumber(tickVal) : tickVal),
tickValue: tickVal
};
}, this);
var alignWithLabel = tickModel.get("alignWithLabel");
fixOnBandTicksCoords(this, ticksCoords, alignWithLabel, opt.clamp);
return ticksCoords;
};
Axis2.prototype.getMinorTicksCoords = function() {
if (this.scale.type === "ordinal") {
return [];
}
var minorTickModel = this.model.getModel("minorTick");
var splitNumber = minorTickModel.get("splitNumber");
if (!(splitNumber > 0 && splitNumber < 100)) {
splitNumber = 5;
}
var minorTicks = this.scale.getMinorTicks(splitNumber);
var minorTicksCoords = map(minorTicks, function(minorTicksGroup) {
return map(minorTicksGroup, function(minorTick) {
return {
coord: this.dataToCoord(minorTick),
tickValue: minorTick
};
}, this);
}, this);
return minorTicksCoords;
};
Axis2.prototype.getViewLabels = function() {
return createAxisLabels(this).labels;
};
Axis2.prototype.getLabelModel = function() {
return this.model.getModel("axisLabel");
};
Axis2.prototype.getTickModel = function() {
return this.model.getModel("axisTick");
};
Axis2.prototype.getBandWidth = function() {
var axisExtent = this._extent;
var dataExtent = this.scale.getExtent();
var len = dataExtent[1] - dataExtent[0] + (this.onBand ? 1 : 0);
len === 0 && (len = 1);
var size = Math.abs(axisExtent[1] - axisExtent[0]);
return Math.abs(size) / len;
};
Axis2.prototype.calculateCategoryInterval = function() {
return calculateCategoryInterval(this);
};
return Axis2;
}();
function fixExtentWithBands(extent, nTick) {
var size = extent[1] - extent[0];
var len = nTick;
var margin = size / len / 2;
extent[0] += margin;
extent[1] -= margin;
}
function fixOnBandTicksCoords(axis, ticksCoords, alignWithLabel, clamp) {
var ticksLen = ticksCoords.length;
if (!axis.onBand || alignWithLabel || !ticksLen) {
return;
}
var axisExtent = axis.getExtent();
var last;
var diffSize;
if (ticksLen === 1) {
ticksCoords[0].coord = axisExtent[0];
last = ticksCoords[1] = {
coord: axisExtent[0]
};
} else {
var crossLen = ticksCoords[ticksLen - 1].tickValue - ticksCoords[0].tickValue;
var shift_1 = (ticksCoords[ticksLen - 1].coord - ticksCoords[0].coord) / crossLen;
each(ticksCoords, function(ticksItem) {
ticksItem.coord -= shift_1 / 2;
});
var dataExtent = axis.scale.getExtent();
diffSize = 1 + dataExtent[1] - ticksCoords[ticksLen - 1].tickValue;
last = {
coord: ticksCoords[ticksLen - 1].coord + shift_1 * diffSize
};
ticksCoords.push(last);
}
var inverse = axisExtent[0] > axisExtent[1];
if (littleThan(ticksCoords[0].coord, axisExtent[0])) {
clamp ? ticksCoords[0].coord = axisExtent[0] : ticksCoords.shift();
}
if (clamp && littleThan(axisExtent[0], ticksCoords[0].coord)) {
ticksCoords.unshift({
coord: axisExtent[0]
});
}
if (littleThan(axisExtent[1], last.coord)) {
clamp ? last.coord = axisExtent[1] : ticksCoords.pop();
}
if (clamp && littleThan(last.coord, axisExtent[1])) {
ticksCoords.push({
coord: axisExtent[1]
});
}
function littleThan(a, b) {
a = round(a);
b = round(b);
return inverse ? a > b : a < b;
}
}
var Axis$1 = Axis;
export { Axis$1 as default };