|   | 
| /* | 
| * 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 { each, isString } from 'zrender/lib/core/util.js'; | 
| import { isSeriesDataSchema } from './SeriesDataSchema.js'; | 
| /** | 
|  * Note that it is too complicated to support 3d stack by value | 
|  * (have to create two-dimension inverted index), so in 3d case | 
|  * we just support that stacked by index. | 
|  * | 
|  * @param seriesModel | 
|  * @param dimensionsInput The same as the input of <module:echarts/data/SeriesData>. | 
|  *        The input will be modified. | 
|  * @param opt | 
|  * @param opt.stackedCoordDimension Specify a coord dimension if needed. | 
|  * @param opt.byIndex=false | 
|  * @return calculationInfo | 
|  * { | 
|  *     stackedDimension: string | 
|  *     stackedByDimension: string | 
|  *     isStackedByIndex: boolean | 
|  *     stackedOverDimension: string | 
|  *     stackResultDimension: string | 
|  * } | 
|  */ | 
| export function enableDataStack(seriesModel, dimensionsInput, opt) { | 
|   opt = opt || {}; | 
|   var byIndex = opt.byIndex; | 
|   var stackedCoordDimension = opt.stackedCoordDimension; | 
|   var dimensionDefineList; | 
|   var schema; | 
|   var store; | 
|   if (isLegacyDimensionsInput(dimensionsInput)) { | 
|     dimensionDefineList = dimensionsInput; | 
|   } else { | 
|     schema = dimensionsInput.schema; | 
|     dimensionDefineList = schema.dimensions; | 
|     store = dimensionsInput.store; | 
|   } | 
|   // Compatibal: when `stack` is set as '', do not stack. | 
|   var mayStack = !!(seriesModel && seriesModel.get('stack')); | 
|   var stackedByDimInfo; | 
|   var stackedDimInfo; | 
|   var stackResultDimension; | 
|   var stackedOverDimension; | 
|   each(dimensionDefineList, function (dimensionInfo, index) { | 
|     if (isString(dimensionInfo)) { | 
|       dimensionDefineList[index] = dimensionInfo = { | 
|         name: dimensionInfo | 
|       }; | 
|     } | 
|     if (mayStack && !dimensionInfo.isExtraCoord) { | 
|       // Find the first ordinal dimension as the stackedByDimInfo. | 
|       if (!byIndex && !stackedByDimInfo && dimensionInfo.ordinalMeta) { | 
|         stackedByDimInfo = dimensionInfo; | 
|       } | 
|       // Find the first stackable dimension as the stackedDimInfo. | 
|       if (!stackedDimInfo && dimensionInfo.type !== 'ordinal' && dimensionInfo.type !== 'time' && (!stackedCoordDimension || stackedCoordDimension === dimensionInfo.coordDim)) { | 
|         stackedDimInfo = dimensionInfo; | 
|       } | 
|     } | 
|   }); | 
|   if (stackedDimInfo && !byIndex && !stackedByDimInfo) { | 
|     // Compatible with previous design, value axis (time axis) only stack by index. | 
|     // It may make sense if the user provides elaborately constructed data. | 
|     byIndex = true; | 
|   } | 
|   // Add stack dimension, they can be both calculated by coordinate system in `unionExtent`. | 
|   // That put stack logic in List is for using conveniently in echarts extensions, but it | 
|   // might not be a good way. | 
|   if (stackedDimInfo) { | 
|     // Use a weird name that not duplicated with other names. | 
|     // Also need to use seriesModel.id as postfix because different | 
|     // series may share same data store. The stack dimension needs to be distinguished. | 
|     stackResultDimension = '__\0ecstackresult_' + seriesModel.id; | 
|     stackedOverDimension = '__\0ecstackedover_' + seriesModel.id; | 
|     // Create inverted index to fast query index by value. | 
|     if (stackedByDimInfo) { | 
|       stackedByDimInfo.createInvertedIndices = true; | 
|     } | 
|     var stackedDimCoordDim_1 = stackedDimInfo.coordDim; | 
|     var stackedDimType = stackedDimInfo.type; | 
|     var stackedDimCoordIndex_1 = 0; | 
|     each(dimensionDefineList, function (dimensionInfo) { | 
|       if (dimensionInfo.coordDim === stackedDimCoordDim_1) { | 
|         stackedDimCoordIndex_1++; | 
|       } | 
|     }); | 
|     var stackedOverDimensionDefine = { | 
|       name: stackResultDimension, | 
|       coordDim: stackedDimCoordDim_1, | 
|       coordDimIndex: stackedDimCoordIndex_1, | 
|       type: stackedDimType, | 
|       isExtraCoord: true, | 
|       isCalculationCoord: true, | 
|       storeDimIndex: dimensionDefineList.length | 
|     }; | 
|     var stackResultDimensionDefine = { | 
|       name: stackedOverDimension, | 
|       // This dimension contains stack base (generally, 0), so do not set it as | 
|       // `stackedDimCoordDim` to avoid extent calculation, consider log scale. | 
|       coordDim: stackedOverDimension, | 
|       coordDimIndex: stackedDimCoordIndex_1 + 1, | 
|       type: stackedDimType, | 
|       isExtraCoord: true, | 
|       isCalculationCoord: true, | 
|       storeDimIndex: dimensionDefineList.length + 1 | 
|     }; | 
|     if (schema) { | 
|       if (store) { | 
|         stackedOverDimensionDefine.storeDimIndex = store.ensureCalculationDimension(stackedOverDimension, stackedDimType); | 
|         stackResultDimensionDefine.storeDimIndex = store.ensureCalculationDimension(stackResultDimension, stackedDimType); | 
|       } | 
|       schema.appendCalculationDimension(stackedOverDimensionDefine); | 
|       schema.appendCalculationDimension(stackResultDimensionDefine); | 
|     } else { | 
|       dimensionDefineList.push(stackedOverDimensionDefine); | 
|       dimensionDefineList.push(stackResultDimensionDefine); | 
|     } | 
|   } | 
|   return { | 
|     stackedDimension: stackedDimInfo && stackedDimInfo.name, | 
|     stackedByDimension: stackedByDimInfo && stackedByDimInfo.name, | 
|     isStackedByIndex: byIndex, | 
|     stackedOverDimension: stackedOverDimension, | 
|     stackResultDimension: stackResultDimension | 
|   }; | 
| } | 
| function isLegacyDimensionsInput(dimensionsInput) { | 
|   return !isSeriesDataSchema(dimensionsInput.schema); | 
| } | 
| export function isDimensionStacked(data, stackedDim) { | 
|   // Each single series only maps to one pair of axis. So we do not need to | 
|   // check stackByDim, whatever stacked by a dimension or stacked by index. | 
|   return !!stackedDim && stackedDim === data.getCalculationInfo('stackedDimension'); | 
| } | 
| export function getStackedDimension(data, targetDim) { | 
|   return isDimensionStacked(data, targetDim) ? data.getCalculationInfo('stackResultDimension') : targetDim; | 
| } |