* @see {module:echarts/test/ut/spec/data/completeDimensions} * * This method builds the relationship between: * + "what the coord sys or series requires (see `sysDims`)", * + "what the user defines (in `encode` and `dimensions`, see `opt.dimsDef` and `opt.encodeDef`)" * + "w
(sysDims, source, opt)
| 34107 | */ |
| 34108 | |
| 34109 | function completeDimensions(sysDims, source, opt) { |
| 34110 | if (!isSourceInstance(source)) { |
| 34111 | source = createSourceFromSeriesDataOption(source); |
| 34112 | } |
| 34113 | |
| 34114 | opt = opt || {}; |
| 34115 | sysDims = (sysDims || []).slice(); |
| 34116 | var dimsDef = (opt.dimsDef || []).slice(); |
| 34117 | var dataDimNameMap = createHashMap(); |
| 34118 | var coordDimNameMap = createHashMap(); // let valueCandidate; |
| 34119 | |
| 34120 | var result = []; |
| 34121 | var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimCount); // Apply user defined dims (`name` and `type`) and init result. |
| 34122 | |
| 34123 | for (var i = 0; i < dimCount; i++) { |
| 34124 | var dimDefItemRaw = dimsDef[i]; |
| 34125 | var dimDefItem = dimsDef[i] = extend({}, isObject(dimDefItemRaw) ? dimDefItemRaw : { |
| 34126 | name: dimDefItemRaw |
| 34127 | }); |
| 34128 | var userDimName = dimDefItem.name; |
| 34129 | var resultItem = result[i] = new DataDimensionInfo(); // Name will be applied later for avoiding duplication. |
| 34130 | |
| 34131 | if (userDimName != null && dataDimNameMap.get(userDimName) == null) { |
| 34132 | // Only if `series.dimensions` is defined in option |
| 34133 | // displayName, will be set, and dimension will be diplayed vertically in |
| 34134 | // tooltip by default. |
| 34135 | resultItem.name = resultItem.displayName = userDimName; |
| 34136 | dataDimNameMap.set(userDimName, i); |
| 34137 | } |
| 34138 | |
| 34139 | dimDefItem.type != null && (resultItem.type = dimDefItem.type); |
| 34140 | dimDefItem.displayName != null && (resultItem.displayName = dimDefItem.displayName); |
| 34141 | } |
| 34142 | |
| 34143 | var encodeDef = opt.encodeDef; |
| 34144 | |
| 34145 | if (!encodeDef && opt.encodeDefaulter) { |
| 34146 | encodeDef = opt.encodeDefaulter(source, dimCount); |
| 34147 | } |
| 34148 | |
| 34149 | var encodeDefMap = createHashMap(encodeDef); // Set `coordDim` and `coordDimIndex` by `encodeDefMap` and normalize `encodeDefMap`. |
| 34150 | |
| 34151 | encodeDefMap.each(function (dataDimsRaw, coordDim) { |
| 34152 | var dataDims = normalizeToArray(dataDimsRaw).slice(); // Note: It is allowed that `dataDims.length` is `0`, e.g., options is |
| 34153 | // `{encode: {x: -1, y: 1}}`. Should not filter anything in |
| 34154 | // this case. |
| 34155 | |
| 34156 | if (dataDims.length === 1 && !isString(dataDims[0]) && dataDims[0] < 0) { |
| 34157 | encodeDefMap.set(coordDim, false); |
| 34158 | return; |
| 34159 | } |
| 34160 | |
| 34161 | var validDataDims = encodeDefMap.set(coordDim, []); |
| 34162 | each(dataDims, function (resultDimIdxOrName, idx) { |
| 34163 | // The input resultDimIdx can be dim name or index. |
| 34164 | var resultDimIdx = isString(resultDimIdxOrName) ? dataDimNameMap.get(resultDimIdxOrName) : resultDimIdxOrName; |
| 34165 | |
| 34166 | if (resultDimIdx != null && resultDimIdx < dimCount) { |
no test coverage detected
searching dependent graphs…