172 lines
5.8 KiB
JavaScript
172 lines
5.8 KiB
JavaScript
|
|
||
|
/*
|
||
|
* 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 { indexOf, createHashMap, assert } from 'zrender/lib/core/util.js';
|
||
|
export var DATA_ZOOM_AXIS_DIMENSIONS = ['x', 'y', 'radius', 'angle', 'single'];
|
||
|
// Supported coords.
|
||
|
// FIXME: polar has been broken (but rarely used).
|
||
|
var SERIES_COORDS = ['cartesian2d', 'polar', 'singleAxis'];
|
||
|
export function isCoordSupported(seriesModel) {
|
||
|
var coordType = seriesModel.get('coordinateSystem');
|
||
|
return indexOf(SERIES_COORDS, coordType) >= 0;
|
||
|
}
|
||
|
export function getAxisMainType(axisDim) {
|
||
|
if (process.env.NODE_ENV !== 'production') {
|
||
|
assert(axisDim);
|
||
|
}
|
||
|
return axisDim + 'Axis';
|
||
|
}
|
||
|
export function getAxisIndexPropName(axisDim) {
|
||
|
if (process.env.NODE_ENV !== 'production') {
|
||
|
assert(axisDim);
|
||
|
}
|
||
|
return axisDim + 'AxisIndex';
|
||
|
}
|
||
|
export function getAxisIdPropName(axisDim) {
|
||
|
if (process.env.NODE_ENV !== 'production') {
|
||
|
assert(axisDim);
|
||
|
}
|
||
|
return axisDim + 'AxisId';
|
||
|
}
|
||
|
/**
|
||
|
* If two dataZoomModels has the same axis controlled, we say that they are 'linked'.
|
||
|
* This function finds all linked dataZoomModels start from the given payload.
|
||
|
*/
|
||
|
export function findEffectedDataZooms(ecModel, payload) {
|
||
|
// Key: `DataZoomAxisDimension`
|
||
|
var axisRecords = createHashMap();
|
||
|
var effectedModels = [];
|
||
|
// Key: uid of dataZoomModel
|
||
|
var effectedModelMap = createHashMap();
|
||
|
// Find the dataZooms specified by payload.
|
||
|
ecModel.eachComponent({
|
||
|
mainType: 'dataZoom',
|
||
|
query: payload
|
||
|
}, function (dataZoomModel) {
|
||
|
if (!effectedModelMap.get(dataZoomModel.uid)) {
|
||
|
addToEffected(dataZoomModel);
|
||
|
}
|
||
|
});
|
||
|
// Start from the given dataZoomModels, travel the graph to find
|
||
|
// all of the linked dataZoom models.
|
||
|
var foundNewLink;
|
||
|
do {
|
||
|
foundNewLink = false;
|
||
|
ecModel.eachComponent('dataZoom', processSingle);
|
||
|
} while (foundNewLink);
|
||
|
function processSingle(dataZoomModel) {
|
||
|
if (!effectedModelMap.get(dataZoomModel.uid) && isLinked(dataZoomModel)) {
|
||
|
addToEffected(dataZoomModel);
|
||
|
foundNewLink = true;
|
||
|
}
|
||
|
}
|
||
|
function addToEffected(dataZoom) {
|
||
|
effectedModelMap.set(dataZoom.uid, true);
|
||
|
effectedModels.push(dataZoom);
|
||
|
markAxisControlled(dataZoom);
|
||
|
}
|
||
|
function isLinked(dataZoomModel) {
|
||
|
var isLink = false;
|
||
|
dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) {
|
||
|
var axisIdxArr = axisRecords.get(axisDim);
|
||
|
if (axisIdxArr && axisIdxArr[axisIndex]) {
|
||
|
isLink = true;
|
||
|
}
|
||
|
});
|
||
|
return isLink;
|
||
|
}
|
||
|
function markAxisControlled(dataZoomModel) {
|
||
|
dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) {
|
||
|
(axisRecords.get(axisDim) || axisRecords.set(axisDim, []))[axisIndex] = true;
|
||
|
});
|
||
|
}
|
||
|
return effectedModels;
|
||
|
}
|
||
|
/**
|
||
|
* Find the first target coordinate system.
|
||
|
* Available after model built.
|
||
|
*
|
||
|
* @return Like {
|
||
|
* grid: [
|
||
|
* {model: coord0, axisModels: [axis1, axis3], coordIndex: 1},
|
||
|
* {model: coord1, axisModels: [axis0, axis2], coordIndex: 0},
|
||
|
* ...
|
||
|
* ], // cartesians must not be null/undefined.
|
||
|
* polar: [
|
||
|
* {model: coord0, axisModels: [axis4], coordIndex: 0},
|
||
|
* ...
|
||
|
* ], // polars must not be null/undefined.
|
||
|
* singleAxis: [
|
||
|
* {model: coord0, axisModels: [], coordIndex: 0}
|
||
|
* ]
|
||
|
* }
|
||
|
*/
|
||
|
export function collectReferCoordSysModelInfo(dataZoomModel) {
|
||
|
var ecModel = dataZoomModel.ecModel;
|
||
|
var coordSysInfoWrap = {
|
||
|
infoList: [],
|
||
|
infoMap: createHashMap()
|
||
|
};
|
||
|
dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) {
|
||
|
var axisModel = ecModel.getComponent(getAxisMainType(axisDim), axisIndex);
|
||
|
if (!axisModel) {
|
||
|
return;
|
||
|
}
|
||
|
var coordSysModel = axisModel.getCoordSysModel();
|
||
|
if (!coordSysModel) {
|
||
|
return;
|
||
|
}
|
||
|
var coordSysUid = coordSysModel.uid;
|
||
|
var coordSysInfo = coordSysInfoWrap.infoMap.get(coordSysUid);
|
||
|
if (!coordSysInfo) {
|
||
|
coordSysInfo = {
|
||
|
model: coordSysModel,
|
||
|
axisModels: []
|
||
|
};
|
||
|
coordSysInfoWrap.infoList.push(coordSysInfo);
|
||
|
coordSysInfoWrap.infoMap.set(coordSysUid, coordSysInfo);
|
||
|
}
|
||
|
coordSysInfo.axisModels.push(axisModel);
|
||
|
});
|
||
|
return coordSysInfoWrap;
|
||
|
}
|