This is an automated email from the ASF dual-hosted git repository. sushuang pushed a commit to branch decal-custom in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git
commit 4e1e8fce2c9d0cb57d5441b7cf3fd1f800d1923c Author: 100pah <[email protected]> AuthorDate: Thu Oct 29 02:24:15 2020 +0800 fix: [decal] (1) move option.decals to option.area.decal.decals. (2) disable series.decals (3) fix decals default option merge. --- src/chart/helper/enableAriaDecalForTree.ts | 4 +- src/chart/sankey/SankeySeries.ts | 3 +- src/component/aria.ts | 4 +- src/model/Global.ts | 7 +++ src/model/Series.ts | 9 ---- src/model/globalDefault.ts | 72 ++++++++++++++++-------------- src/model/mixin/palette.ts | 28 +++++------- src/util/types.ts | 6 +-- src/visual/aria.ts | 20 +++++---- 9 files changed, 75 insertions(+), 78 deletions(-) diff --git a/src/chart/helper/enableAriaDecalForTree.ts b/src/chart/helper/enableAriaDecalForTree.ts index b76aa84..fca0cf9 100644 --- a/src/chart/helper/enableAriaDecalForTree.ts +++ b/src/chart/helper/enableAriaDecalForTree.ts @@ -1,5 +1,6 @@ import SeriesModel from '../../model/Series'; import {Dictionary, DecalObject} from '../../util/types'; +import { getDecalFromPalette } from '../../model/mixin/palette'; export default function (seriesModel: SeriesModel) { const data = seriesModel.getData(); @@ -13,7 +14,8 @@ export default function (seriesModel: SeriesModel) { current = current.parentNode; } - const decal = seriesModel.getDecalFromPalette( + const decal = getDecalFromPalette( + seriesModel.ecModel, current.name || current.dataIndex + '', decalPaletteScope ); diff --git a/src/chart/sankey/SankeySeries.ts b/src/chart/sankey/SankeySeries.ts index d57b1ef..eb09f18 100644 --- a/src/chart/sankey/SankeySeries.ts +++ b/src/chart/sankey/SankeySeries.ts @@ -39,6 +39,7 @@ import GlobalModel from '../../model/Global'; import List from '../../data/List'; import { LayoutRect } from '../../util/layout'; import { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup'; +import { getDecalFromPalette } from '../../model/mixin/palette'; type FocusNodeAdjacency = boolean | 'inEdges' | 'outEdges' | 'allEdges'; @@ -282,7 +283,7 @@ class SankeySeriesModel extends SeriesModel<SankeySeriesOption> { const nodes = graph.nodes; zrUtil.each(nodes, node => { const name = this.getDataParams(node.dataIndex, 'node').name; - const paletteDecal = this.getDecalFromPalette(name, null, nodes.length); + const paletteDecal = getDecalFromPalette(this.ecModel, name, null, nodes.length); const decal = zrUtil.defaults(node.getVisual('style').decal || {}, paletteDecal); node.hostGraph.data.setItemVisual(node.dataIndex, 'decal', decal); }); diff --git a/src/component/aria.ts b/src/component/aria.ts index 092236f..baa1252 100644 --- a/src/component/aria.ts +++ b/src/component/aria.ts @@ -20,6 +20,7 @@ import * as echarts from '../echarts'; import ariaVisual from '../visual/aria'; import ariaPreprocessor from './aria/preprocessor'; +import { DecalObject } from '../util/types'; const PRIORITY_VISUAL_ARIA = echarts.PRIORITY.VISUAL.ARIA; @@ -66,7 +67,8 @@ export interface AriaOption extends AriaLabelOption { label?: AriaLabelOption; decal?: { show?: boolean; - } + decals?: DecalObject | DecalObject[]; + }; } echarts.registerPreprocessor(ariaPreprocessor); diff --git a/src/model/Global.ts b/src/model/Global.ts index 48fefab..a5ba207 100644 --- a/src/model/Global.ts +++ b/src/model/Global.ts @@ -813,6 +813,13 @@ class GlobalModel extends Model<ECUnitOption> { ecModel._componentsMap = createHashMap({series: []}); ecModel._componentsCount = createHashMap(); + // If user spefied `option.aria`, aria will be enable. This detection should be + // performed before theme and globalDefault merge. + const airaOption = baseOption.aria; + if (isObject(airaOption) && airaOption.enabled == null) { + airaOption.enabled = true; + } + mergeTheme(baseOption, ecModel._theme.option); // TODO Needs clone when merging to the unexisted property diff --git a/src/model/Series.ts b/src/model/Series.ts index 655cf44..47b9782 100644 --- a/src/model/Series.ts +++ b/src/model/Series.ts @@ -460,15 +460,6 @@ class SeriesModel<Opt extends SeriesOption = SeriesOption> extends ComponentMode return color; } - getDecalFromPalette(name: string, scope: any, requestColorNum?: number): DecalObject { - const ecModel = this.ecModel; - let decal = PaletteMixin.prototype.getDecalFromPalette.call(this, name, scope, requestColorNum); - if (!decal) { - decal = ecModel.getDecalFromPalette(name, scope, requestColorNum); - } - return decal; - } - /** * Use `data.mapDimensionsAll(coordDim)` instead. * @deprecated diff --git a/src/model/globalDefault.ts b/src/model/globalDefault.ts index b7cd6c5..d25eab1 100644 --- a/src/model/globalDefault.ts +++ b/src/model/globalDefault.ts @@ -56,40 +56,44 @@ export default { gradientColor: ['#f6efa6', '#d88273', '#bf444c'], - decals: [{ - color: decalColor, - dashArrayX: [1, 0], - dashArrayY: [2, 5], - symbolSize: 1, - rotation: Math.PI / 6 - }, { - color: decalColor, - symbol: 'circle', - dashArrayX: [[8, 8], [0, 8, 8, 0]], - dashArrayY: [6, 0], - symbolSize: 0.8 - }, { - color: decalColor, - dashArrayX: [1, 0], - dashArrayY: [4, 3], - dashLineOffset: 0, - rotation: -Math.PI / 4 - }, { - color: decalColor, - dashArrayX: [[6, 6], [0, 6, 6, 0]], - dashArrayY: [6, 0] - }, { - color: decalColor, - dashArrayX: [[1, 0], [1, 6]], - dashArrayY: [1, 0, 6, 0], - rotation: Math.PI / 4 - }, { - color: decalColor, - symbol: 'triangle', - dashArrayX: [[9, 9], [0, 9, 9, 0]], - dashArrayY: [7, 2], - symbolSize: 0.75 - }], + aria: { + decal: { + decals: [{ + color: decalColor, + dashArrayX: [1, 0], + dashArrayY: [2, 5], + symbolSize: 1, + rotation: Math.PI / 6 + }, { + color: decalColor, + symbol: 'circle', + dashArrayX: [[8, 8], [0, 8, 8, 0]], + dashArrayY: [6, 0], + symbolSize: 0.8 + }, { + color: decalColor, + dashArrayX: [1, 0], + dashArrayY: [4, 3], + dashLineOffset: 0, + rotation: -Math.PI / 4 + }, { + color: decalColor, + dashArrayX: [[6, 6], [0, 6, 6, 0]], + dashArrayY: [6, 0] + }, { + color: decalColor, + dashArrayX: [[1, 0], [1, 6]], + dashArrayY: [1, 0, 6, 0], + rotation: Math.PI / 4 + }, { + color: decalColor, + symbol: 'triangle', + dashArrayX: [[9, 9], [0, 9, 9, 0]], + dashArrayY: [7, 2], + symbolSize: 0.75 + }] + } + }, // If xAxis and yAxis declared, grid is created by default. // grid: {}, diff --git a/src/model/mixin/palette.ts b/src/model/mixin/palette.ts index c0b6c85..0f74d7d 100644 --- a/src/model/mixin/palette.ts +++ b/src/model/mixin/palette.ts @@ -22,6 +22,7 @@ import {isArray} from 'zrender/src/core/util'; import {makeInner, normalizeToArray} from '../../util/model'; import Model from '../Model'; import {ZRColor, PaletteOptionMixin, DecalObject} from '../../util/types'; +import GlobalModel from '../Global'; type Inner<T> = (hostObj: PaletteMixin<PaletteOptionMixin>) => { paletteIdx: number; @@ -58,26 +59,17 @@ class PaletteMixin<T extends PaletteOptionMixin = PaletteOptionMixin> { clearColorPalette(this: PaletteMixin<T>) { clearPalette<ZRColor>(this, innerColor); } - - getDecalFromPalette( - this: PaletteMixin<T>, - name: string, - scope?: any, - requestNum?: number - ): DecalObject { - let decals = this.get('decals'); - if (!isArray(decals)) { - decals = [decals as DecalObject]; - } - const defaultDecals = decals as DecalObject[]; - return getFromPalette<DecalObject>(this, innerDecal, defaultDecals, [defaultDecals], name, scope, requestNum); - } - - clearDecalPalette(this: PaletteMixin<T>) { - clearPalette<DecalObject>(this, innerDecal); - } } +export function getDecalFromPalette( + ecModel: GlobalModel, + name: string, + scope?: any, + requestNum?: number +): DecalObject { + const defaultDecals = normalizeToArray(ecModel.get(['aria', 'decal', 'decals'])); + return getFromPalette<DecalObject>(ecModel, innerDecal, defaultDecals, null, name, scope, requestNum); +} function getNearestPalette<T>( diff --git a/src/util/types.ts b/src/util/types.ts index c2411d8..0be5a4c 100644 --- a/src/util/types.ts +++ b/src/util/types.ts @@ -711,11 +711,7 @@ export type ComponentLayoutMode = { ignoreSize?: boolean | boolean[] }; /******************* Mixins for Common Option Properties ********************** */ -export interface PaletteOptionMixin { - color?: ZRColor | ZRColor[] - colorLayer?: ZRColor[][], - decals?: DecalObject | DecalObject[] -} +export type PaletteOptionMixin = ColorPaletteOptionMixin; export interface ColorPaletteOptionMixin { color?: ZRColor | ZRColor[] diff --git a/src/visual/aria.ts b/src/visual/aria.ts index 21c8b37..41011f1 100644 --- a/src/visual/aria.ts +++ b/src/visual/aria.ts @@ -28,9 +28,9 @@ import {TitleOption} from '../component/title'; import {makeInner} from '../util/model'; import {Dictionary, DecalObject, InnerDecalObject} from '../util/types'; import {LocaleOption} from '../locale'; +import { getDecalFromPalette } from '../model/mixin/palette'; -const defaultOption: AriaOption = { - enabled: true, +const DEFAULT_OPTION: AriaOption = { label: { enabled: true }, @@ -48,15 +48,15 @@ type SeriesTypes = keyof LocaleOption['series']['typeNames']; export default function (ecModel: GlobalModel, api: ExtensionAPI) { const ariaModel: Model<AriaOption> = ecModel.getModel('aria'); - if (ariaModel.option) { - const labelLocale = ecModel.getLocaleModel().get('aria'); - defaultOption.label = zrUtil.defaults(labelLocale, defaultOption.label); - ariaModel.option = zrUtil.defaults(ariaModel.option, defaultOption); - } + // See "area enabled" detection code in `GlobalModel.ts`. if (!ariaModel.get('enabled')) { return; } + const defaultOption = zrUtil.clone(DEFAULT_OPTION); + zrUtil.merge(defaultOption.label, ecModel.getLocaleModel().get('aria'), false); + zrUtil.merge(ariaModel.option, defaultOption, false); + setDecal(); setLabel(); @@ -107,7 +107,8 @@ export default function (ecModel: GlobalModel, api: ExtensionAPI) { const idx = idxMap[rawIdx]; const itemStyle = data.ensureUniqueItemVisual(idx, 'style'); const name = dataAll.getName(rawIdx) || (rawIdx + ''); - const paletteDecal = seriesModel.getDecalFromPalette( + const paletteDecal = getDecalFromPalette( + seriesModel.ecModel, name, decalScope, dataCount @@ -121,7 +122,8 @@ export default function (ecModel: GlobalModel, api: ExtensionAPI) { } else { const style = data.getVisual('style'); - const paletteDecal = seriesModel.getDecalFromPalette( + const paletteDecal = getDecalFromPalette( + seriesModel.ecModel, seriesModel.name, decalPaletteScope, ecModel.getSeriesCount() --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
