cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
268 lines (267 loc) • 10.9 kB
JavaScript
import { __extends } from "../../../../tslib/tslib.es6.mjs";
import SeriesData from "../../data/SeriesData.mjs";
import { parsePercent } from "../../util/number.mjs";
import { getAxisInfo, numCalculate, dataTransform, dataFilter, createMarkerDimValueGetter } from "./markerHelper.mjs";
import LineDraw from "../../chart/helper/LineDraw.mjs";
import MarkerView from "./MarkerView.mjs";
import { getStackedDimension } from "../../data/helper/dataStackHelper.mjs";
import { isCoordinateSystemType } from "../../coord/CoordinateSystem.mjs";
import { getECData } from "../../util/innerStore.mjs";
import MarkerModel from "./MarkerModel.mjs";
import { isArray, retrieve2, map, extend, curry, filter, retrieve, clone, isNumber, merge } from "../../../../zrender/lib/core/util.mjs";
import { makeInner } from "../../util/model.mjs";
import { getVisualFromData } from "../../visual/helper.mjs";
var inner = makeInner();
var markLineTransform = function(seriesModel, coordSys, mlModel, item) {
var data = seriesModel.getData();
var itemArray;
if (!isArray(item)) {
var mlType = item.type;
if (mlType === "min" || mlType === "max" || mlType === "average" || mlType === "median" || item.xAxis != null || item.yAxis != null) {
var valueAxis = void 0;
var value = void 0;
if (item.yAxis != null || item.xAxis != null) {
valueAxis = coordSys.getAxis(item.yAxis != null ? "y" : "x");
value = retrieve(item.yAxis, item.xAxis);
} else {
var axisInfo = getAxisInfo(item, data, coordSys, seriesModel);
valueAxis = axisInfo.valueAxis;
var valueDataDim = getStackedDimension(data, axisInfo.valueDataDim);
value = numCalculate(data, valueDataDim, mlType);
}
var valueIndex = valueAxis.dim === "x" ? 0 : 1;
var baseIndex = 1 - valueIndex;
var mlFrom = clone(item);
var mlTo = {
coord: []
};
mlFrom.type = null;
mlFrom.coord = [];
mlFrom.coord[baseIndex] = -Infinity;
mlTo.coord[baseIndex] = Infinity;
var precision = mlModel.get("precision");
if (precision >= 0 && isNumber(value)) {
value = +value.toFixed(Math.min(precision, 20));
}
mlFrom.coord[valueIndex] = mlTo.coord[valueIndex] = value;
itemArray = [mlFrom, mlTo, {
type: mlType,
valueIndex: item.valueIndex,
value
}];
} else {
itemArray = [];
}
} else {
itemArray = item;
}
var normalizedItem = [dataTransform(seriesModel, itemArray[0]), dataTransform(seriesModel, itemArray[1]), extend({}, itemArray[2])];
normalizedItem[2].type = normalizedItem[2].type || null;
merge(normalizedItem[2], normalizedItem[0]);
merge(normalizedItem[2], normalizedItem[1]);
return normalizedItem;
};
function isInfinity(val) {
return !isNaN(val) && !isFinite(val);
}
function ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) {
var otherDimIndex = 1 - dimIndex;
var dimName = coordSys.dimensions[dimIndex];
return isInfinity(fromCoord[otherDimIndex]) && isInfinity(toCoord[otherDimIndex]) && fromCoord[dimIndex] === toCoord[dimIndex] && coordSys.getAxis(dimName).containData(fromCoord[dimIndex]);
}
function markLineFilter(coordSys, item) {
if (coordSys.type === "cartesian2d") {
var fromCoord = item[0].coord;
var toCoord = item[1].coord;
if (fromCoord && toCoord && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys) || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))) {
return true;
}
}
return dataFilter(coordSys, item[0]) && dataFilter(coordSys, item[1]);
}
function updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api) {
var coordSys = seriesModel.coordinateSystem;
var itemModel = data.getItemModel(idx);
var point;
var xPx = parsePercent(itemModel.get("x"), api.getWidth());
var yPx = parsePercent(itemModel.get("y"), api.getHeight());
if (!isNaN(xPx) && !isNaN(yPx)) {
point = [xPx, yPx];
} else {
if (seriesModel.getMarkerPosition) {
point = seriesModel.getMarkerPosition(data.getValues(data.dimensions, idx));
} else {
var dims = coordSys.dimensions;
var x = data.get(dims[0], idx);
var y = data.get(dims[1], idx);
point = coordSys.dataToPoint([x, y]);
}
if (isCoordinateSystemType(coordSys, "cartesian2d")) {
var xAxis = coordSys.getAxis("x");
var yAxis = coordSys.getAxis("y");
var dims = coordSys.dimensions;
if (isInfinity(data.get(dims[0], idx))) {
point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]);
} else if (isInfinity(data.get(dims[1], idx))) {
point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[isFrom ? 0 : 1]);
}
}
if (!isNaN(xPx)) {
point[0] = xPx;
}
if (!isNaN(yPx)) {
point[1] = yPx;
}
}
data.setItemLayout(idx, point);
}
var MarkLineView = function(_super) {
__extends(MarkLineView2, _super);
function MarkLineView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = MarkLineView2.type;
return _this;
}
MarkLineView2.prototype.updateTransform = function(markLineModel, ecModel, api) {
ecModel.eachSeries(function(seriesModel) {
var mlModel = MarkerModel.getMarkerModelFromSeries(seriesModel, "markLine");
if (mlModel) {
var mlData_1 = mlModel.getData();
var fromData_1 = inner(mlModel).from;
var toData_1 = inner(mlModel).to;
fromData_1.each(function(idx) {
updateSingleMarkerEndLayout(fromData_1, idx, true, seriesModel, api);
updateSingleMarkerEndLayout(toData_1, idx, false, seriesModel, api);
});
mlData_1.each(function(idx) {
mlData_1.setItemLayout(idx, [fromData_1.getItemLayout(idx), toData_1.getItemLayout(idx)]);
});
this.markerGroupMap.get(seriesModel.id).updateLayout();
}
}, this);
};
MarkLineView2.prototype.renderSeries = function(seriesModel, mlModel, ecModel, api) {
var coordSys = seriesModel.coordinateSystem;
var seriesId = seriesModel.id;
var seriesData = seriesModel.getData();
var lineDrawMap = this.markerGroupMap;
var lineDraw = lineDrawMap.get(seriesId) || lineDrawMap.set(seriesId, new LineDraw());
this.group.add(lineDraw.group);
var mlData = createList(coordSys, seriesModel, mlModel);
var fromData = mlData.from;
var toData = mlData.to;
var lineData = mlData.line;
inner(mlModel).from = fromData;
inner(mlModel).to = toData;
mlModel.setData(lineData);
var symbolType = mlModel.get("symbol");
var symbolSize = mlModel.get("symbolSize");
var symbolRotate = mlModel.get("symbolRotate");
var symbolOffset = mlModel.get("symbolOffset");
if (!isArray(symbolType)) {
symbolType = [symbolType, symbolType];
}
if (!isArray(symbolSize)) {
symbolSize = [symbolSize, symbolSize];
}
if (!isArray(symbolRotate)) {
symbolRotate = [symbolRotate, symbolRotate];
}
if (!isArray(symbolOffset)) {
symbolOffset = [symbolOffset, symbolOffset];
}
mlData.from.each(function(idx) {
updateDataVisualAndLayout(fromData, idx, true);
updateDataVisualAndLayout(toData, idx, false);
});
lineData.each(function(idx) {
var lineStyle = lineData.getItemModel(idx).getModel("lineStyle").getLineStyle();
lineData.setItemLayout(idx, [fromData.getItemLayout(idx), toData.getItemLayout(idx)]);
if (lineStyle.stroke == null) {
lineStyle.stroke = fromData.getItemVisual(idx, "style").fill;
}
lineData.setItemVisual(idx, {
fromSymbolKeepAspect: fromData.getItemVisual(idx, "symbolKeepAspect"),
fromSymbolOffset: fromData.getItemVisual(idx, "symbolOffset"),
fromSymbolRotate: fromData.getItemVisual(idx, "symbolRotate"),
fromSymbolSize: fromData.getItemVisual(idx, "symbolSize"),
fromSymbol: fromData.getItemVisual(idx, "symbol"),
toSymbolKeepAspect: toData.getItemVisual(idx, "symbolKeepAspect"),
toSymbolOffset: toData.getItemVisual(idx, "symbolOffset"),
toSymbolRotate: toData.getItemVisual(idx, "symbolRotate"),
toSymbolSize: toData.getItemVisual(idx, "symbolSize"),
toSymbol: toData.getItemVisual(idx, "symbol"),
style: lineStyle
});
});
lineDraw.updateData(lineData);
mlData.line.eachItemGraphicEl(function(el) {
getECData(el).dataModel = mlModel;
el.traverse(function(child) {
getECData(child).dataModel = mlModel;
});
});
function updateDataVisualAndLayout(data, idx, isFrom) {
var itemModel = data.getItemModel(idx);
updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api);
var style = itemModel.getModel("itemStyle").getItemStyle();
if (style.fill == null) {
style.fill = getVisualFromData(seriesData, "color");
}
data.setItemVisual(idx, {
symbolKeepAspect: itemModel.get("symbolKeepAspect"),
symbolOffset: retrieve2(itemModel.get("symbolOffset", true), symbolOffset[isFrom ? 0 : 1]),
symbolRotate: retrieve2(itemModel.get("symbolRotate", true), symbolRotate[isFrom ? 0 : 1]),
symbolSize: retrieve2(itemModel.get("symbolSize"), symbolSize[isFrom ? 0 : 1]),
symbol: retrieve2(itemModel.get("symbol", true), symbolType[isFrom ? 0 : 1]),
style
});
}
this.markKeep(lineDraw);
lineDraw.group.silent = mlModel.get("silent") || seriesModel.get("silent");
};
MarkLineView2.type = "markLine";
return MarkLineView2;
}(MarkerView);
function createList(coordSys, seriesModel, mlModel) {
var coordDimsInfos;
if (coordSys) {
coordDimsInfos = map(coordSys && coordSys.dimensions, function(coordDim) {
var info = seriesModel.getData().getDimensionInfo(seriesModel.getData().mapDimension(coordDim)) || {};
return extend(extend({}, info), {
name: coordDim,
ordinalMeta: null
});
});
} else {
coordDimsInfos = [{
name: "value",
type: "float"
}];
}
var fromData = new SeriesData(coordDimsInfos, mlModel);
var toData = new SeriesData(coordDimsInfos, mlModel);
var lineData = new SeriesData([], mlModel);
var optData = map(mlModel.get("data"), curry(markLineTransform, seriesModel, coordSys, mlModel));
if (coordSys) {
optData = filter(optData, curry(markLineFilter, coordSys));
}
var dimValueGetter = createMarkerDimValueGetter(!!coordSys, coordDimsInfos);
fromData.initData(map(optData, function(item) {
return item[0];
}), null, dimValueGetter);
toData.initData(map(optData, function(item) {
return item[1];
}), null, dimValueGetter);
lineData.initData(map(optData, function(item) {
return item[2];
}));
lineData.hasItemOption = true;
return {
from: fromData,
to: toData,
line: lineData
};
}
var MarkLineView$1 = MarkLineView;
export { MarkLineView$1 as default };