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.
216 lines
8.5 KiB
216 lines
8.5 KiB
4 weeks ago
|
|
||
|
/*
|
||
|
* 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 };
|