UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

178 lines (177 loc) 7.58 kB
import Model from "../../model/Model.mjs"; import { each, curry, clone, defaults, isArray, indexOf } from "../../../../zrender/lib/core/util.mjs"; function collect(ecModel, api) { var result = { axesInfo: {}, seriesInvolved: false, coordSysAxesInfo: {}, coordSysMap: {} }; collectAxesInfo(result, ecModel, api); result.seriesInvolved && collectSeriesInfo(result, ecModel); return result; } function collectAxesInfo(result, ecModel, api) { var globalTooltipModel = ecModel.getComponent("tooltip"); var globalAxisPointerModel = ecModel.getComponent("axisPointer"); var linksOption = globalAxisPointerModel.get("link", true) || []; var linkGroups = []; each(api.getCoordinateSystems(), function(coordSys) { if (!coordSys.axisPointerEnabled) { return; } var coordSysKey = makeKey(coordSys.model); var axesInfoInCoordSys = result.coordSysAxesInfo[coordSysKey] = {}; result.coordSysMap[coordSysKey] = coordSys; var coordSysModel = coordSys.model; var baseTooltipModel = coordSysModel.getModel("tooltip", globalTooltipModel); each(coordSys.getAxes(), curry(saveTooltipAxisInfo, false, null)); if (coordSys.getTooltipAxes && globalTooltipModel && baseTooltipModel.get("show")) { var triggerAxis = baseTooltipModel.get("trigger") === "axis"; var cross = baseTooltipModel.get(["axisPointer", "type"]) === "cross"; var tooltipAxes = coordSys.getTooltipAxes(baseTooltipModel.get(["axisPointer", "axis"])); if (triggerAxis || cross) { each(tooltipAxes.baseAxes, curry(saveTooltipAxisInfo, cross ? "cross" : true, triggerAxis)); } if (cross) { each(tooltipAxes.otherAxes, curry(saveTooltipAxisInfo, "cross", false)); } } function saveTooltipAxisInfo(fromTooltip, triggerTooltip, axis) { var axisPointerModel = axis.model.getModel("axisPointer", globalAxisPointerModel); var axisPointerShow = axisPointerModel.get("show"); if (!axisPointerShow || axisPointerShow === "auto" && !fromTooltip && !isHandleTrigger(axisPointerModel)) { return; } if (triggerTooltip == null) { triggerTooltip = axisPointerModel.get("triggerTooltip"); } axisPointerModel = fromTooltip ? makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) : axisPointerModel; var snap = axisPointerModel.get("snap"); var axisKey = makeKey(axis.model); var involveSeries = triggerTooltip || snap || axis.type === "category"; var axisInfo = result.axesInfo[axisKey] = { key: axisKey, axis, coordSys, axisPointerModel, triggerTooltip, involveSeries, snap, useHandle: isHandleTrigger(axisPointerModel), seriesModels: [], linkGroup: null }; axesInfoInCoordSys[axisKey] = axisInfo; result.seriesInvolved = result.seriesInvolved || involveSeries; var groupIndex = getLinkGroupIndex(linksOption, axis); if (groupIndex != null) { var linkGroup = linkGroups[groupIndex] || (linkGroups[groupIndex] = { axesInfo: {} }); linkGroup.axesInfo[axisKey] = axisInfo; linkGroup.mapper = linksOption[groupIndex].mapper; axisInfo.linkGroup = linkGroup; } } }); } function makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) { var tooltipAxisPointerModel = baseTooltipModel.getModel("axisPointer"); var fields = ["type", "snap", "lineStyle", "shadowStyle", "label", "animation", "animationDurationUpdate", "animationEasingUpdate", "z"]; var volatileOption = {}; each(fields, function(field) { volatileOption[field] = clone(tooltipAxisPointerModel.get(field)); }); volatileOption.snap = axis.type !== "category" && !!triggerTooltip; if (tooltipAxisPointerModel.get("type") === "cross") { volatileOption.type = "line"; } var labelOption = volatileOption.label || (volatileOption.label = {}); labelOption.show == null && (labelOption.show = false); if (fromTooltip === "cross") { var tooltipAxisPointerLabelShow = tooltipAxisPointerModel.get(["label", "show"]); labelOption.show = tooltipAxisPointerLabelShow != null ? tooltipAxisPointerLabelShow : true; if (!triggerTooltip) { var crossStyle = volatileOption.lineStyle = tooltipAxisPointerModel.get("crossStyle"); crossStyle && defaults(labelOption, crossStyle.textStyle); } } return axis.model.getModel("axisPointer", new Model(volatileOption, globalAxisPointerModel, ecModel)); } function collectSeriesInfo(result, ecModel) { ecModel.eachSeries(function(seriesModel) { var coordSys = seriesModel.coordinateSystem; var seriesTooltipTrigger = seriesModel.get(["tooltip", "trigger"], true); var seriesTooltipShow = seriesModel.get(["tooltip", "show"], true); if (!coordSys || seriesTooltipTrigger === "none" || seriesTooltipTrigger === false || seriesTooltipTrigger === "item" || seriesTooltipShow === false || seriesModel.get(["axisPointer", "show"], true) === false) { return; } each(result.coordSysAxesInfo[makeKey(coordSys.model)], function(axisInfo) { var axis = axisInfo.axis; if (coordSys.getAxis(axis.dim) === axis) { axisInfo.seriesModels.push(seriesModel); axisInfo.seriesDataCount == null && (axisInfo.seriesDataCount = 0); axisInfo.seriesDataCount += seriesModel.getData().count(); } }); }); } function getLinkGroupIndex(linksOption, axis) { var axisModel = axis.model; var dim = axis.dim; for (var i = 0; i < linksOption.length; i++) { var linkOption = linksOption[i] || {}; if (checkPropInLink(linkOption[dim + "AxisId"], axisModel.id) || checkPropInLink(linkOption[dim + "AxisIndex"], axisModel.componentIndex) || checkPropInLink(linkOption[dim + "AxisName"], axisModel.name)) { return i; } } } function checkPropInLink(linkPropValue, axisPropValue) { return linkPropValue === "all" || isArray(linkPropValue) && indexOf(linkPropValue, axisPropValue) >= 0 || linkPropValue === axisPropValue; } function fixValue(axisModel) { var axisInfo = getAxisInfo(axisModel); if (!axisInfo) { return; } var axisPointerModel = axisInfo.axisPointerModel; var scale = axisInfo.axis.scale; var option = axisPointerModel.option; var status = axisPointerModel.get("status"); var value = axisPointerModel.get("value"); if (value != null) { value = scale.parse(value); } var useHandle = isHandleTrigger(axisPointerModel); if (status == null) { option.status = useHandle ? "show" : "hide"; } var extent = scale.getExtent().slice(); extent[0] > extent[1] && extent.reverse(); if (value == null || value > extent[1]) { value = extent[1]; } if (value < extent[0]) { value = extent[0]; } option.value = value; if (useHandle) { option.status = axisInfo.axis.scale.isBlank() ? "hide" : "show"; } } function getAxisInfo(axisModel) { var coordSysAxesInfo = (axisModel.ecModel.getComponent("axisPointer") || {}).coordSysAxesInfo; return coordSysAxesInfo && coordSysAxesInfo.axesInfo[makeKey(axisModel)]; } function getAxisPointerModel(axisModel) { var axisInfo = getAxisInfo(axisModel); return axisInfo && axisInfo.axisPointerModel; } function isHandleTrigger(axisPointerModel) { return !!axisPointerModel.get(["handle", "show"]); } function makeKey(model) { return model.type + "||" + model.id; } export { collect, fixValue, getAxisInfo, getAxisPointerModel, makeKey };