You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
236 lines
8.5 KiB
236 lines
8.5 KiB
|
|
/* |
|
* 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 { isFunction, extend, createHashMap } from 'zrender/lib/core/util.js'; |
|
import makeStyleMapper from '../model/mixin/makeStyleMapper.js'; |
|
import { ITEM_STYLE_KEY_MAP } from '../model/mixin/itemStyle.js'; |
|
import { LINE_STYLE_KEY_MAP } from '../model/mixin/lineStyle.js'; |
|
import Model from '../model/Model.js'; |
|
import { makeInner } from '../util/model.js'; |
|
var inner = makeInner(); |
|
var defaultStyleMappers = { |
|
itemStyle: makeStyleMapper(ITEM_STYLE_KEY_MAP, true), |
|
lineStyle: makeStyleMapper(LINE_STYLE_KEY_MAP, true) |
|
}; |
|
var defaultColorKey = { |
|
lineStyle: 'stroke', |
|
itemStyle: 'fill' |
|
}; |
|
|
|
function getStyleMapper(seriesModel, stylePath) { |
|
var styleMapper = seriesModel.visualStyleMapper || defaultStyleMappers[stylePath]; |
|
|
|
if (!styleMapper) { |
|
console.warn("Unknown style type '" + stylePath + "'."); |
|
return defaultStyleMappers.itemStyle; |
|
} |
|
|
|
return styleMapper; |
|
} |
|
|
|
function getDefaultColorKey(seriesModel, stylePath) { |
|
// return defaultColorKey[stylePath] || |
|
var colorKey = seriesModel.visualDrawType || defaultColorKey[stylePath]; |
|
|
|
if (!colorKey) { |
|
console.warn("Unknown style type '" + stylePath + "'."); |
|
return 'fill'; |
|
} |
|
|
|
return colorKey; |
|
} |
|
|
|
var seriesStyleTask = { |
|
createOnAllSeries: true, |
|
performRawSeries: true, |
|
reset: function (seriesModel, ecModel) { |
|
var data = seriesModel.getData(); |
|
var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; // Set in itemStyle |
|
|
|
var styleModel = seriesModel.getModel(stylePath); |
|
var getStyle = getStyleMapper(seriesModel, stylePath); |
|
var globalStyle = getStyle(styleModel); |
|
var decalOption = styleModel.getShallow('decal'); |
|
|
|
if (decalOption) { |
|
data.setVisual('decal', decalOption); |
|
decalOption.dirty = true; |
|
} // TODO |
|
|
|
|
|
var colorKey = getDefaultColorKey(seriesModel, stylePath); |
|
var color = globalStyle[colorKey]; // TODO style callback |
|
|
|
var colorCallback = isFunction(color) ? color : null; |
|
var hasAutoColor = globalStyle.fill === 'auto' || globalStyle.stroke === 'auto'; // Get from color palette by default. |
|
|
|
if (!globalStyle[colorKey] || colorCallback || hasAutoColor) { |
|
// Note: If some series has color specified (e.g., by itemStyle.color), we DO NOT |
|
// make it effect palette. Because some scenarios users need to make some series |
|
// transparent or as background, which should better not effect the palette. |
|
var colorPalette = seriesModel.getColorFromPalette( // TODO series count changed. |
|
seriesModel.name, null, ecModel.getSeriesCount()); |
|
|
|
if (!globalStyle[colorKey]) { |
|
globalStyle[colorKey] = colorPalette; |
|
data.setVisual('colorFromPalette', true); |
|
} |
|
|
|
globalStyle.fill = globalStyle.fill === 'auto' || isFunction(globalStyle.fill) ? colorPalette : globalStyle.fill; |
|
globalStyle.stroke = globalStyle.stroke === 'auto' || isFunction(globalStyle.stroke) ? colorPalette : globalStyle.stroke; |
|
} |
|
|
|
data.setVisual('style', globalStyle); |
|
data.setVisual('drawType', colorKey); // Only visible series has each data be visual encoded |
|
|
|
if (!ecModel.isSeriesFiltered(seriesModel) && colorCallback) { |
|
data.setVisual('colorFromPalette', false); |
|
return { |
|
dataEach: function (data, idx) { |
|
var dataParams = seriesModel.getDataParams(idx); |
|
var itemStyle = extend({}, globalStyle); |
|
itemStyle[colorKey] = colorCallback(dataParams); |
|
data.setItemVisual(idx, 'style', itemStyle); |
|
} |
|
}; |
|
} |
|
} |
|
}; |
|
var sharedModel = new Model(); |
|
var dataStyleTask = { |
|
createOnAllSeries: true, |
|
performRawSeries: true, |
|
reset: function (seriesModel, ecModel) { |
|
if (seriesModel.ignoreStyleOnData || ecModel.isSeriesFiltered(seriesModel)) { |
|
return; |
|
} |
|
|
|
var data = seriesModel.getData(); |
|
var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; // Set in itemStyle |
|
|
|
var getStyle = getStyleMapper(seriesModel, stylePath); |
|
var colorKey = data.getVisual('drawType'); |
|
return { |
|
dataEach: data.hasItemOption ? function (data, idx) { |
|
// Not use getItemModel for performance considuration |
|
var rawItem = data.getRawDataItem(idx); |
|
|
|
if (rawItem && rawItem[stylePath]) { |
|
sharedModel.option = rawItem[stylePath]; |
|
var style = getStyle(sharedModel); |
|
var existsStyle = data.ensureUniqueItemVisual(idx, 'style'); |
|
extend(existsStyle, style); |
|
|
|
if (sharedModel.option.decal) { |
|
data.setItemVisual(idx, 'decal', sharedModel.option.decal); |
|
sharedModel.option.decal.dirty = true; |
|
} |
|
|
|
if (colorKey in style) { |
|
data.setItemVisual(idx, 'colorFromPalette', false); |
|
} |
|
} |
|
} : null |
|
}; |
|
} |
|
}; // Pick color from palette for the data which has not been set with color yet. |
|
// Note: do not support stream rendering. No such cases yet. |
|
|
|
var dataColorPaletteTask = { |
|
performRawSeries: true, |
|
overallReset: function (ecModel) { |
|
// Each type of series uses one scope. |
|
// Pie and funnel are using different scopes. |
|
var paletteScopeGroupByType = createHashMap(); |
|
ecModel.eachSeries(function (seriesModel) { |
|
var colorBy = seriesModel.getColorBy(); |
|
|
|
if (seriesModel.isColorBySeries()) { |
|
return; |
|
} |
|
|
|
var key = seriesModel.type + '-' + colorBy; |
|
var colorScope = paletteScopeGroupByType.get(key); |
|
|
|
if (!colorScope) { |
|
colorScope = {}; |
|
paletteScopeGroupByType.set(key, colorScope); |
|
} |
|
|
|
inner(seriesModel).scope = colorScope; |
|
}); |
|
ecModel.eachSeries(function (seriesModel) { |
|
if (seriesModel.isColorBySeries() || ecModel.isSeriesFiltered(seriesModel)) { |
|
return; |
|
} |
|
|
|
var dataAll = seriesModel.getRawData(); |
|
var idxMap = {}; |
|
var data = seriesModel.getData(); |
|
var colorScope = inner(seriesModel).scope; |
|
var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; |
|
var colorKey = getDefaultColorKey(seriesModel, stylePath); |
|
data.each(function (idx) { |
|
var rawIdx = data.getRawIndex(idx); |
|
idxMap[rawIdx] = idx; |
|
}); // Iterate on data before filtered. To make sure color from palette can be |
|
// Consistent when toggling legend. |
|
|
|
dataAll.each(function (rawIdx) { |
|
var idx = idxMap[rawIdx]; |
|
var fromPalette = data.getItemVisual(idx, 'colorFromPalette'); // Get color from palette for each data only when the color is inherited from series color, which is |
|
// also picked from color palette. So following situation is not in the case: |
|
// 1. series.itemStyle.color is set |
|
// 2. color is encoded by visualMap |
|
|
|
if (fromPalette) { |
|
var itemStyle = data.ensureUniqueItemVisual(idx, 'style'); |
|
var name_1 = dataAll.getName(rawIdx) || rawIdx + ''; |
|
var dataCount = dataAll.count(); |
|
itemStyle[colorKey] = seriesModel.getColorFromPalette(name_1, colorScope, dataCount); |
|
} |
|
}); |
|
}); |
|
} |
|
}; |
|
export { seriesStyleTask, dataStyleTask, dataColorPaletteTask }; |