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.
226 lines
11 KiB
226 lines
11 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 { each, hasOwn } from 'zrender/lib/core/util.js';
|
||
|
var deprecatedLogs = {};
|
||
|
/**
|
||
|
* Whether need to call `convertEC4CompatibleStyle`.
|
||
|
*/
|
||
|
export function isEC4CompatibleStyle(style, elType, hasOwnTextContentOption, hasOwnTextConfig) {
|
||
|
// Since echarts5, `RectText` is separated from its host element and style.text
|
||
|
// does not exist any more. The compat work brings some extra burden on performance.
|
||
|
// So we provide:
|
||
|
// `legacy: true` force make compat.
|
||
|
// `legacy: false`, force do not compat.
|
||
|
// `legacy` not set: auto detect whether legacy.
|
||
|
// But in this case we do not compat (difficult to detect and rare case):
|
||
|
// Becuse custom series and graphic component support "merge", users may firstly
|
||
|
// only set `textStrokeWidth` style or secondly only set `text`.
|
||
|
return style && (style.legacy || style.legacy !== false && !hasOwnTextContentOption && !hasOwnTextConfig && elType !== 'tspan'
|
||
|
// Difficult to detect whether legacy for a "text" el.
|
||
|
&& (elType === 'text' || hasOwn(style, 'text')));
|
||
|
}
|
||
|
/**
|
||
|
* `EC4CompatibleStyle` is style that might be in echarts4 format or echarts5 format.
|
||
|
* @param hostStyle The properties might be modified.
|
||
|
* @return If be text el, `textContentStyle` and `textConfig` will not be returned.
|
||
|
* Otherwise a `textContentStyle` and `textConfig` will be created, whose props area
|
||
|
* retried from the `hostStyle`.
|
||
|
*/
|
||
|
export function convertFromEC4CompatibleStyle(hostStyle, elType, isNormal) {
|
||
|
var srcStyle = hostStyle;
|
||
|
var textConfig;
|
||
|
var textContent;
|
||
|
var textContentStyle;
|
||
|
if (elType === 'text') {
|
||
|
textContentStyle = srcStyle;
|
||
|
} else {
|
||
|
textContentStyle = {};
|
||
|
hasOwn(srcStyle, 'text') && (textContentStyle.text = srcStyle.text);
|
||
|
hasOwn(srcStyle, 'rich') && (textContentStyle.rich = srcStyle.rich);
|
||
|
hasOwn(srcStyle, 'textFill') && (textContentStyle.fill = srcStyle.textFill);
|
||
|
hasOwn(srcStyle, 'textStroke') && (textContentStyle.stroke = srcStyle.textStroke);
|
||
|
hasOwn(srcStyle, 'fontFamily') && (textContentStyle.fontFamily = srcStyle.fontFamily);
|
||
|
hasOwn(srcStyle, 'fontSize') && (textContentStyle.fontSize = srcStyle.fontSize);
|
||
|
hasOwn(srcStyle, 'fontStyle') && (textContentStyle.fontStyle = srcStyle.fontStyle);
|
||
|
hasOwn(srcStyle, 'fontWeight') && (textContentStyle.fontWeight = srcStyle.fontWeight);
|
||
|
textContent = {
|
||
|
type: 'text',
|
||
|
style: textContentStyle,
|
||
|
// ec4 does not support rectText trigger.
|
||
|
// And when text position is different in normal and emphasis
|
||
|
// => hover text trigger emphasis;
|
||
|
// => text position changed, leave mouse pointer immediately;
|
||
|
// That might cause incorrect state.
|
||
|
silent: true
|
||
|
};
|
||
|
textConfig = {};
|
||
|
var hasOwnPos = hasOwn(srcStyle, 'textPosition');
|
||
|
if (isNormal) {
|
||
|
textConfig.position = hasOwnPos ? srcStyle.textPosition : 'inside';
|
||
|
} else {
|
||
|
hasOwnPos && (textConfig.position = srcStyle.textPosition);
|
||
|
}
|
||
|
hasOwn(srcStyle, 'textPosition') && (textConfig.position = srcStyle.textPosition);
|
||
|
hasOwn(srcStyle, 'textOffset') && (textConfig.offset = srcStyle.textOffset);
|
||
|
hasOwn(srcStyle, 'textRotation') && (textConfig.rotation = srcStyle.textRotation);
|
||
|
hasOwn(srcStyle, 'textDistance') && (textConfig.distance = srcStyle.textDistance);
|
||
|
}
|
||
|
convertEC4CompatibleRichItem(textContentStyle, hostStyle);
|
||
|
each(textContentStyle.rich, function (richItem) {
|
||
|
convertEC4CompatibleRichItem(richItem, richItem);
|
||
|
});
|
||
|
return {
|
||
|
textConfig: textConfig,
|
||
|
textContent: textContent
|
||
|
};
|
||
|
}
|
||
|
/**
|
||
|
* The result will be set to `out`.
|
||
|
*/
|
||
|
function convertEC4CompatibleRichItem(out, richItem) {
|
||
|
if (!richItem) {
|
||
|
return;
|
||
|
}
|
||
|
// (1) For simplicity, make textXXX properties (deprecated since ec5) has
|
||
|
// higher priority. For example, consider in ec4 `borderColor: 5, textBorderColor: 10`
|
||
|
// on a rect means `borderColor: 4` on the rect and `borderColor: 10` on an attached
|
||
|
// richText in ec5.
|
||
|
// (2) `out === richItem` if and only if `out` is text el or rich item.
|
||
|
// So we can overwrite existing props in `out` since textXXX has higher priority.
|
||
|
richItem.font = richItem.textFont || richItem.font;
|
||
|
hasOwn(richItem, 'textStrokeWidth') && (out.lineWidth = richItem.textStrokeWidth);
|
||
|
hasOwn(richItem, 'textAlign') && (out.align = richItem.textAlign);
|
||
|
hasOwn(richItem, 'textVerticalAlign') && (out.verticalAlign = richItem.textVerticalAlign);
|
||
|
hasOwn(richItem, 'textLineHeight') && (out.lineHeight = richItem.textLineHeight);
|
||
|
hasOwn(richItem, 'textWidth') && (out.width = richItem.textWidth);
|
||
|
hasOwn(richItem, 'textHeight') && (out.height = richItem.textHeight);
|
||
|
hasOwn(richItem, 'textBackgroundColor') && (out.backgroundColor = richItem.textBackgroundColor);
|
||
|
hasOwn(richItem, 'textPadding') && (out.padding = richItem.textPadding);
|
||
|
hasOwn(richItem, 'textBorderColor') && (out.borderColor = richItem.textBorderColor);
|
||
|
hasOwn(richItem, 'textBorderWidth') && (out.borderWidth = richItem.textBorderWidth);
|
||
|
hasOwn(richItem, 'textBorderRadius') && (out.borderRadius = richItem.textBorderRadius);
|
||
|
hasOwn(richItem, 'textBoxShadowColor') && (out.shadowColor = richItem.textBoxShadowColor);
|
||
|
hasOwn(richItem, 'textBoxShadowBlur') && (out.shadowBlur = richItem.textBoxShadowBlur);
|
||
|
hasOwn(richItem, 'textBoxShadowOffsetX') && (out.shadowOffsetX = richItem.textBoxShadowOffsetX);
|
||
|
hasOwn(richItem, 'textBoxShadowOffsetY') && (out.shadowOffsetY = richItem.textBoxShadowOffsetY);
|
||
|
}
|
||
|
/**
|
||
|
* Convert to pure echarts4 format style.
|
||
|
* `itemStyle` will be modified, added with ec4 style properties from
|
||
|
* `textStyle` and `textConfig`.
|
||
|
*
|
||
|
* [Caveat]: For simplicity, `insideRollback` in ec4 does not compat, where
|
||
|
* `styleEmphasis: {textFill: 'red'}` will remove the normal auto added stroke.
|
||
|
*/
|
||
|
export function convertToEC4StyleForCustomSerise(itemStl, txStl, txCfg) {
|
||
|
var out = itemStl;
|
||
|
// See `custom.ts`, a trick to set extra `textPosition` firstly.
|
||
|
out.textPosition = out.textPosition || txCfg.position || 'inside';
|
||
|
txCfg.offset != null && (out.textOffset = txCfg.offset);
|
||
|
txCfg.rotation != null && (out.textRotation = txCfg.rotation);
|
||
|
txCfg.distance != null && (out.textDistance = txCfg.distance);
|
||
|
var isInside = out.textPosition.indexOf('inside') >= 0;
|
||
|
var hostFill = itemStl.fill || '#000';
|
||
|
convertToEC4RichItem(out, txStl);
|
||
|
var textFillNotSet = out.textFill == null;
|
||
|
if (isInside) {
|
||
|
if (textFillNotSet) {
|
||
|
out.textFill = txCfg.insideFill || '#fff';
|
||
|
!out.textStroke && txCfg.insideStroke && (out.textStroke = txCfg.insideStroke);
|
||
|
!out.textStroke && (out.textStroke = hostFill);
|
||
|
out.textStrokeWidth == null && (out.textStrokeWidth = 2);
|
||
|
}
|
||
|
} else {
|
||
|
if (textFillNotSet) {
|
||
|
out.textFill = itemStl.fill || txCfg.outsideFill || '#000';
|
||
|
}
|
||
|
!out.textStroke && txCfg.outsideStroke && (out.textStroke = txCfg.outsideStroke);
|
||
|
}
|
||
|
out.text = txStl.text;
|
||
|
out.rich = txStl.rich;
|
||
|
each(txStl.rich, function (richItem) {
|
||
|
convertToEC4RichItem(richItem, richItem);
|
||
|
});
|
||
|
return out;
|
||
|
}
|
||
|
function convertToEC4RichItem(out, richItem) {
|
||
|
if (!richItem) {
|
||
|
return;
|
||
|
}
|
||
|
hasOwn(richItem, 'fill') && (out.textFill = richItem.fill);
|
||
|
hasOwn(richItem, 'stroke') && (out.textStroke = richItem.fill);
|
||
|
hasOwn(richItem, 'lineWidth') && (out.textStrokeWidth = richItem.lineWidth);
|
||
|
hasOwn(richItem, 'font') && (out.font = richItem.font);
|
||
|
hasOwn(richItem, 'fontStyle') && (out.fontStyle = richItem.fontStyle);
|
||
|
hasOwn(richItem, 'fontWeight') && (out.fontWeight = richItem.fontWeight);
|
||
|
hasOwn(richItem, 'fontSize') && (out.fontSize = richItem.fontSize);
|
||
|
hasOwn(richItem, 'fontFamily') && (out.fontFamily = richItem.fontFamily);
|
||
|
hasOwn(richItem, 'align') && (out.textAlign = richItem.align);
|
||
|
hasOwn(richItem, 'verticalAlign') && (out.textVerticalAlign = richItem.verticalAlign);
|
||
|
hasOwn(richItem, 'lineHeight') && (out.textLineHeight = richItem.lineHeight);
|
||
|
hasOwn(richItem, 'width') && (out.textWidth = richItem.width);
|
||
|
hasOwn(richItem, 'height') && (out.textHeight = richItem.height);
|
||
|
hasOwn(richItem, 'backgroundColor') && (out.textBackgroundColor = richItem.backgroundColor);
|
||
|
hasOwn(richItem, 'padding') && (out.textPadding = richItem.padding);
|
||
|
hasOwn(richItem, 'borderColor') && (out.textBorderColor = richItem.borderColor);
|
||
|
hasOwn(richItem, 'borderWidth') && (out.textBorderWidth = richItem.borderWidth);
|
||
|
hasOwn(richItem, 'borderRadius') && (out.textBorderRadius = richItem.borderRadius);
|
||
|
hasOwn(richItem, 'shadowColor') && (out.textBoxShadowColor = richItem.shadowColor);
|
||
|
hasOwn(richItem, 'shadowBlur') && (out.textBoxShadowBlur = richItem.shadowBlur);
|
||
|
hasOwn(richItem, 'shadowOffsetX') && (out.textBoxShadowOffsetX = richItem.shadowOffsetX);
|
||
|
hasOwn(richItem, 'shadowOffsetY') && (out.textBoxShadowOffsetY = richItem.shadowOffsetY);
|
||
|
hasOwn(richItem, 'textShadowColor') && (out.textShadowColor = richItem.textShadowColor);
|
||
|
hasOwn(richItem, 'textShadowBlur') && (out.textShadowBlur = richItem.textShadowBlur);
|
||
|
hasOwn(richItem, 'textShadowOffsetX') && (out.textShadowOffsetX = richItem.textShadowOffsetX);
|
||
|
hasOwn(richItem, 'textShadowOffsetY') && (out.textShadowOffsetY = richItem.textShadowOffsetY);
|
||
|
}
|
||
|
export function warnDeprecated(deprecated, insteadApproach) {
|
||
|
if (process.env.NODE_ENV !== 'production') {
|
||
|
var key = deprecated + '^_^' + insteadApproach;
|
||
|
if (!deprecatedLogs[key]) {
|
||
|
console.warn("[ECharts] DEPRECATED: \"" + deprecated + "\" has been deprecated. " + insteadApproach);
|
||
|
deprecatedLogs[key] = true;
|
||
|
}
|
||
|
}
|
||
|
}
|