1 line
51 KiB
JSON
1 line
51 KiB
JSON
{"ast":null,"code":"import \"core-js/modules/es.array.slice.js\";\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO: move labels out of viewport.\nimport { BoundingRect, updateProps, initProps, isElementRemoved } from '../util/graphic.js';\nimport { getECData } from '../util/innerStore.js';\nimport { parsePercent } from '../util/number.js';\nimport Transformable from 'zrender/lib/core/Transformable.js';\nimport { updateLabelLinePoints, setLabelLineStyle, getLabelLineStatesModels } from './labelGuideHelper.js';\nimport { makeInner } from '../util/model.js';\nimport { retrieve2, each, keys, isFunction, filter, indexOf } from 'zrender/lib/core/util.js';\nimport { prepareLayoutList, hideOverlap, shiftLayoutOnX, shiftLayoutOnY } from './labelLayoutHelper.js';\nimport { labelInner, animateLabelValue } from './labelStyle.js';\n\nfunction cloneArr(points) {\n if (points) {\n var newPoints = [];\n\n for (var i = 0; i < points.length; i++) {\n newPoints.push(points[i].slice());\n }\n\n return newPoints;\n }\n}\n\nfunction prepareLayoutCallbackParams(labelItem, hostEl) {\n var label = labelItem.label;\n var labelLine = hostEl && hostEl.getTextGuideLine();\n return {\n dataIndex: labelItem.dataIndex,\n dataType: labelItem.dataType,\n seriesIndex: labelItem.seriesModel.seriesIndex,\n text: labelItem.label.style.text,\n rect: labelItem.hostRect,\n labelRect: labelItem.rect,\n // x: labelAttr.x,\n // y: labelAttr.y,\n align: label.style.align,\n verticalAlign: label.style.verticalAlign,\n labelLinePoints: cloneArr(labelLine && labelLine.shape.points)\n };\n}\n\nvar LABEL_OPTION_TO_STYLE_KEYS = ['align', 'verticalAlign', 'width', 'height', 'fontSize'];\nvar dummyTransformable = new Transformable();\nvar labelLayoutInnerStore = makeInner();\nvar labelLineAnimationStore = makeInner();\n\nfunction extendWithKeys(target, source, keys) {\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (source[key] != null) {\n target[key] = source[key];\n }\n }\n}\n\nvar LABEL_LAYOUT_PROPS = ['x', 'y', 'rotation'];\n\nvar LabelManager =\n/** @class */\nfunction () {\n function LabelManager() {\n this._labelList = [];\n this._chartViewList = [];\n }\n\n LabelManager.prototype.clearLabels = function () {\n this._labelList = [];\n this._chartViewList = [];\n };\n /**\n * Add label to manager\n */\n\n\n LabelManager.prototype._addLabel = function (dataIndex, dataType, seriesModel, label, layoutOption) {\n var labelStyle = label.style;\n var hostEl = label.__hostTarget;\n var textConfig = hostEl.textConfig || {}; // TODO: If label is in other state.\n\n var labelTransform = label.getComputedTransform();\n var labelRect = label.getBoundingRect().plain();\n BoundingRect.applyTransform(labelRect, labelRect, labelTransform);\n\n if (labelTransform) {\n dummyTransformable.setLocalTransform(labelTransform);\n } else {\n // Identity transform.\n dummyTransformable.x = dummyTransformable.y = dummyTransformable.rotation = dummyTransformable.originX = dummyTransformable.originY = 0;\n dummyTransformable.scaleX = dummyTransformable.scaleY = 1;\n }\n\n var host = label.__hostTarget;\n var hostRect;\n\n if (host) {\n hostRect = host.getBoundingRect().plain();\n var transform = host.getComputedTransform();\n BoundingRect.applyTransform(hostRect, hostRect, transform);\n }\n\n var labelGuide = hostRect && host.getTextGuideLine();\n\n this._labelList.push({\n label: label,\n labelLine: labelGuide,\n seriesModel: seriesModel,\n dataIndex: dataIndex,\n dataType: dataType,\n layoutOption: layoutOption,\n computedLayoutOption: null,\n rect: labelRect,\n hostRect: hostRect,\n // Label with lower priority will be hidden when overlapped\n // Use rect size as default priority\n priority: hostRect ? hostRect.width * hostRect.height : 0,\n // Save default label attributes.\n // For restore if developers want get back to default value in callback.\n defaultAttr: {\n ignore: label.ignore,\n labelGuideIgnore: labelGuide && labelGuide.ignore,\n x: dummyTransformable.x,\n y: dummyTransformable.y,\n scaleX: dummyTransformable.scaleX,\n scaleY: dummyTransformable.scaleY,\n rotation: dummyTransformable.rotation,\n style: {\n x: labelStyle.x,\n y: labelStyle.y,\n align: labelStyle.align,\n verticalAlign: labelStyle.verticalAlign,\n width: labelStyle.width,\n height: labelStyle.height,\n fontSize: labelStyle.fontSize\n },\n cursor: label.cursor,\n attachedPos: textConfig.position,\n attachedRot: textConfig.rotation\n }\n });\n };\n\n LabelManager.prototype.addLabelsOfSeries = function (chartView) {\n var _this = this;\n\n this._chartViewList.push(chartView);\n\n var seriesModel = chartView.__model;\n var layoutOption = seriesModel.get('labelLayout');\n /**\n * Ignore layouting if it's not specified anything.\n */\n\n if (!(isFunction(layoutOption) || keys(layoutOption).length)) {\n return;\n }\n\n chartView.group.traverse(function (child) {\n if (child.ignore) {\n return true; // Stop traverse descendants.\n } // Only support label being hosted on graphic elements.\n\n\n var textEl = child.getTextContent();\n var ecData = getECData(child); // Can only attach the text on the element with dataIndex\n\n if (textEl && !textEl.disableLabelLayout) {\n _this._addLabel(ecData.dataIndex, ecData.dataType, seriesModel, textEl, layoutOption);\n }\n });\n };\n\n LabelManager.prototype.updateLayoutConfig = function (api) {\n var width = api.getWidth();\n var height = api.getHeight();\n\n function createDragHandler(el, labelLineModel) {\n return function () {\n updateLabelLinePoints(el, labelLineModel);\n };\n }\n\n for (var i = 0; i < this._labelList.length; i++) {\n var labelItem = this._labelList[i];\n var label = labelItem.label;\n var hostEl = label.__hostTarget;\n var defaultLabelAttr = labelItem.defaultAttr;\n var layoutOption = void 0; // TODO A global layout option?\n\n if (isFunction(labelItem.layoutOption)) {\n layoutOption = labelItem.layoutOption(prepareLayoutCallbackParams(labelItem, hostEl));\n } else {\n layoutOption = labelItem.layoutOption;\n }\n\n layoutOption = layoutOption || {};\n labelItem.computedLayoutOption = layoutOption;\n var degreeToRadian = Math.PI / 180; // TODO hostEl should always exists.\n // Or label should not have parent because the x, y is all in global space.\n\n if (hostEl) {\n hostEl.setTextConfig({\n // Force to set local false.\n local: false,\n // Ignore position and rotation config on the host el if x or y is changed.\n position: layoutOption.x != null || layoutOption.y != null ? null : defaultLabelAttr.attachedPos,\n // Ignore rotation config on the host el if rotation is changed.\n rotation: layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.attachedRot,\n offset: [layoutOption.dx || 0, layoutOption.dy || 0]\n });\n }\n\n var needsUpdateLabelLine = false;\n\n if (layoutOption.x != null) {\n // TODO width of chart view.\n label.x = parsePercent(layoutOption.x, width);\n label.setStyle('x', 0); // Ignore movement in style. TODO: origin.\n\n needsUpdateLabelLine = true;\n } else {\n label.x = defaultLabelAttr.x;\n label.setStyle('x', defaultLabelAttr.style.x);\n }\n\n if (layoutOption.y != null) {\n // TODO height of chart view.\n label.y = parsePercent(layoutOption.y, height);\n label.setStyle('y', 0); // Ignore movement in style.\n\n needsUpdateLabelLine = true;\n } else {\n label.y = defaultLabelAttr.y;\n label.setStyle('y', defaultLabelAttr.style.y);\n }\n\n if (layoutOption.labelLinePoints) {\n var guideLine = hostEl.getTextGuideLine();\n\n if (guideLine) {\n guideLine.setShape({\n points: layoutOption.labelLinePoints\n }); // Not update\n\n needsUpdateLabelLine = false;\n }\n }\n\n var labelLayoutStore = labelLayoutInnerStore(label);\n labelLayoutStore.needsUpdateLabelLine = needsUpdateLabelLine;\n label.rotation = layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.rotation;\n label.scaleX = defaultLabelAttr.scaleX;\n label.scaleY = defaultLabelAttr.scaleY;\n\n for (var k = 0; k < LABEL_OPTION_TO_STYLE_KEYS.length; k++) {\n var key = LABEL_OPTION_TO_STYLE_KEYS[k];\n label.setStyle(key, layoutOption[key] != null ? layoutOption[key] : defaultLabelAttr.style[key]);\n }\n\n if (layoutOption.draggable) {\n label.draggable = true;\n label.cursor = 'move';\n\n if (hostEl) {\n var hostModel = labelItem.seriesModel;\n\n if (labelItem.dataIndex != null) {\n var data = labelItem.seriesModel.getData(labelItem.dataType);\n hostModel = data.getItemModel(labelItem.dataIndex);\n }\n\n label.on('drag', createDragHandler(hostEl, hostModel.getModel('labelLine')));\n }\n } else {\n // TODO Other drag functions?\n label.off('drag');\n label.cursor = defaultLabelAttr.cursor;\n }\n }\n };\n\n LabelManager.prototype.layout = function (api) {\n var width = api.getWidth();\n var height = api.getHeight();\n var labelList = prepareLayoutList(this._labelList);\n var labelsNeedsAdjustOnX = filter(labelList, function (item) {\n return item.layoutOption.moveOverlap === 'shiftX';\n });\n var labelsNeedsAdjustOnY = filter(labelList, function (item) {\n return item.layoutOption.moveOverlap === 'shiftY';\n });\n shiftLayoutOnX(labelsNeedsAdjustOnX, 0, width);\n shiftLayoutOnY(labelsNeedsAdjustOnY, 0, height);\n var labelsNeedsHideOverlap = filter(labelList, function (item) {\n return item.layoutOption.hideOverlap;\n });\n hideOverlap(labelsNeedsHideOverlap);\n };\n /**\n * Process all labels. Not only labels with layoutOption.\n */\n\n\n LabelManager.prototype.processLabelsOverall = function () {\n var _this = this;\n\n each(this._chartViewList, function (chartView) {\n var seriesModel = chartView.__model;\n var ignoreLabelLineUpdate = chartView.ignoreLabelLineUpdate;\n var animationEnabled = seriesModel.isAnimationEnabled();\n chartView.group.traverse(function (child) {\n if (child.ignore && !child.forceLabelAnimation) {\n return true; // Stop traverse descendants.\n }\n\n var needsUpdateLabelLine = !ignoreLabelLineUpdate;\n var label = child.getTextContent();\n\n if (!needsUpdateLabelLine && label) {\n needsUpdateLabelLine = labelLayoutInnerStore(label).needsUpdateLabelLine;\n }\n\n if (needsUpdateLabelLine) {\n _this._updateLabelLine(child, seriesModel);\n }\n\n if (animationEnabled) {\n _this._animateLabels(child, seriesModel);\n }\n });\n });\n };\n\n LabelManager.prototype._updateLabelLine = function (el, seriesModel) {\n // Only support label being hosted on graphic elements.\n var textEl = el.getTextContent(); // Update label line style.\n\n var ecData = getECData(el);\n var dataIndex = ecData.dataIndex; // Only support labelLine on the labels represent data.\n\n if (textEl && dataIndex != null) {\n var data = seriesModel.getData(ecData.dataType);\n var itemModel = data.getItemModel(dataIndex);\n var defaultStyle = {};\n var visualStyle = data.getItemVisual(dataIndex, 'style');\n var visualType = data.getVisual('drawType'); // Default to be same with main color\n\n defaultStyle.stroke = visualStyle[visualType];\n var labelLineModel = itemModel.getModel('labelLine');\n setLabelLineStyle(el, getLabelLineStatesModels(itemModel), defaultStyle);\n updateLabelLinePoints(el, labelLineModel);\n }\n };\n\n LabelManager.prototype._animateLabels = function (el, seriesModel) {\n var textEl = el.getTextContent();\n var guideLine = el.getTextGuideLine(); // Animate\n\n if (textEl // `forceLabelAnimation` has the highest priority\n && (el.forceLabelAnimation || !textEl.ignore && !textEl.invisible && !el.disableLabelAnimation && !isElementRemoved(el))) {\n var layoutStore = labelLayoutInnerStore(textEl);\n var oldLayout = layoutStore.oldLayout;\n var ecData = getECData(el);\n var dataIndex = ecData.dataIndex;\n var newProps = {\n x: textEl.x,\n y: textEl.y,\n rotation: textEl.rotation\n };\n var data = seriesModel.getData(ecData.dataType);\n\n if (!oldLayout) {\n textEl.attr(newProps); // Disable fade in animation if value animation is enabled.\n\n if (!labelInner(textEl).valueAnimation) {\n var oldOpacity = retrieve2(textEl.style.opacity, 1); // Fade in animation\n\n textEl.style.opacity = 0;\n initProps(textEl, {\n style: {\n opacity: oldOpacity\n }\n }, seriesModel, dataIndex);\n }\n } else {\n textEl.attr(oldLayout); // Make sure the animation from is in the right status.\n\n var prevStates = el.prevStates;\n\n if (prevStates) {\n if (indexOf(prevStates, 'select') >= 0) {\n textEl.attr(layoutStore.oldLayoutSelect);\n }\n\n if (indexOf(prevStates, 'emphasis') >= 0) {\n textEl.attr(layoutStore.oldLayoutEmphasis);\n }\n }\n\n updateProps(textEl, newProps, seriesModel, dataIndex);\n }\n\n layoutStore.oldLayout = newProps;\n\n if (textEl.states.select) {\n var layoutSelect = layoutStore.oldLayoutSelect = {};\n extendWithKeys(layoutSelect, newProps, LABEL_LAYOUT_PROPS);\n extendWithKeys(layoutSelect, textEl.states.select, LABEL_LAYOUT_PROPS);\n }\n\n if (textEl.states.emphasis) {\n var layoutEmphasis = layoutStore.oldLayoutEmphasis = {};\n extendWithKeys(layoutEmphasis, newProps, LABEL_LAYOUT_PROPS);\n extendWithKeys(layoutEmphasis, textEl.states.emphasis, LABEL_LAYOUT_PROPS);\n }\n\n animateLabelValue(textEl, dataIndex, data, seriesModel, seriesModel);\n }\n\n if (guideLine && !guideLine.ignore && !guideLine.invisible) {\n var layoutStore = labelLineAnimationStore(guideLine);\n var oldLayout = layoutStore.oldLayout;\n var newLayout = {\n points: guideLine.shape.points\n };\n\n if (!oldLayout) {\n guideLine.setShape(newLayout);\n guideLine.style.strokePercent = 0;\n initProps(guideLine, {\n style: {\n strokePercent: 1\n }\n }, seriesModel);\n } else {\n guideLine.attr({\n shape: oldLayout\n });\n updateProps(guideLine, {\n shape: newLayout\n }, seriesModel);\n }\n\n layoutStore.oldLayout = newLayout;\n }\n };\n\n return LabelManager;\n}();\n\nexport default LabelManager;","map":{"version":3,"sources":["D:/Work/WorkSpace/GitWorkSpace/TenShop/resource/ElectronicMall/src啊/ElectronicMallVue/node_modules/echarts/lib/label/LabelManager.js"],"names":["BoundingRect","updateProps","initProps","isElementRemoved","getECData","parsePercent","Transformable","updateLabelLinePoints","setLabelLineStyle","getLabelLineStatesModels","makeInner","retrieve2","each","keys","isFunction","filter","indexOf","prepareLayoutList","hideOverlap","shiftLayoutOnX","shiftLayoutOnY","labelInner","animateLabelValue","cloneArr","points","newPoints","i","length","push","slice","prepareLayoutCallbackParams","labelItem","hostEl","label","labelLine","getTextGuideLine","dataIndex","dataType","seriesIndex","seriesModel","text","style","rect","hostRect","labelRect","align","verticalAlign","labelLinePoints","shape","LABEL_OPTION_TO_STYLE_KEYS","dummyTransformable","labelLayoutInnerStore","labelLineAnimationStore","extendWithKeys","target","source","key","LABEL_LAYOUT_PROPS","LabelManager","_labelList","_chartViewList","prototype","clearLabels","_addLabel","layoutOption","labelStyle","__hostTarget","textConfig","labelTransform","getComputedTransform","getBoundingRect","plain","applyTransform","setLocalTransform","x","y","rotation","originX","originY","scaleX","scaleY","host","transform","labelGuide","computedLayoutOption","priority","width","height","defaultAttr","ignore","labelGuideIgnore","fontSize","cursor","attachedPos","position","attachedRot","addLabelsOfSeries","chartView","_this","__model","get","group","traverse","child","textEl","getTextContent","ecData","disableLabelLayout","updateLayoutConfig","api","getWidth","getHeight","createDragHandler","el","labelLineModel","defaultLabelAttr","degreeToRadian","Math","PI","setTextConfig","local","rotate","offset","dx","dy","needsUpdateLabelLine","setStyle","guideLine","setShape","labelLayoutStore","k","draggable","hostModel","data","getData","getItemModel","on","getModel","off","layout","labelList","labelsNeedsAdjustOnX","item","moveOverlap","labelsNeedsAdjustOnY","labelsNeedsHideOverlap","processLabelsOverall","ignoreLabelLineUpdate","animationEnabled","isAnimationEnabled","forceLabelAnimation","_updateLabelLine","_animateLabels","itemModel","defaultStyle","visualStyle","getItemVisual","visualType","getVisual","stroke","invisible","disableLabelAnimation","layoutStore","oldLayout","newProps","attr","valueAnimation","oldOpacity","opacity","prevStates","oldLayoutSelect","oldLayoutEmphasis","states","select","layoutSelect","emphasis","layoutEmphasis","newLayout","strokePercent"],"mappings":"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","sourcesContent":["\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO: move labels out of viewport.\nimport { BoundingRect, updateProps, initProps, isElementRemoved } from '../util/graphic.js';\nimport { getECData } from '../util/innerStore.js';\nimport { parsePercent } from '../util/number.js';\nimport Transformable from 'zrender/lib/core/Transformable.js';\nimport { updateLabelLinePoints, setLabelLineStyle, getLabelLineStatesModels } from './labelGuideHelper.js';\nimport { makeInner } from '../util/model.js';\nimport { retrieve2, each, keys, isFunction, filter, indexOf } from 'zrender/lib/core/util.js';\nimport { prepareLayoutList, hideOverlap, shiftLayoutOnX, shiftLayoutOnY } from './labelLayoutHelper.js';\nimport { labelInner, animateLabelValue } from './labelStyle.js';\n\nfunction cloneArr(points) {\n if (points) {\n var newPoints = [];\n\n for (var i = 0; i < points.length; i++) {\n newPoints.push(points[i].slice());\n }\n\n return newPoints;\n }\n}\n\nfunction prepareLayoutCallbackParams(labelItem, hostEl) {\n var label = labelItem.label;\n var labelLine = hostEl && hostEl.getTextGuideLine();\n return {\n dataIndex: labelItem.dataIndex,\n dataType: labelItem.dataType,\n seriesIndex: labelItem.seriesModel.seriesIndex,\n text: labelItem.label.style.text,\n rect: labelItem.hostRect,\n labelRect: labelItem.rect,\n // x: labelAttr.x,\n // y: labelAttr.y,\n align: label.style.align,\n verticalAlign: label.style.verticalAlign,\n labelLinePoints: cloneArr(labelLine && labelLine.shape.points)\n };\n}\n\nvar LABEL_OPTION_TO_STYLE_KEYS = ['align', 'verticalAlign', 'width', 'height', 'fontSize'];\nvar dummyTransformable = new Transformable();\nvar labelLayoutInnerStore = makeInner();\nvar labelLineAnimationStore = makeInner();\n\nfunction extendWithKeys(target, source, keys) {\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (source[key] != null) {\n target[key] = source[key];\n }\n }\n}\n\nvar LABEL_LAYOUT_PROPS = ['x', 'y', 'rotation'];\n\nvar LabelManager =\n/** @class */\nfunction () {\n function LabelManager() {\n this._labelList = [];\n this._chartViewList = [];\n }\n\n LabelManager.prototype.clearLabels = function () {\n this._labelList = [];\n this._chartViewList = [];\n };\n /**\n * Add label to manager\n */\n\n\n LabelManager.prototype._addLabel = function (dataIndex, dataType, seriesModel, label, layoutOption) {\n var labelStyle = label.style;\n var hostEl = label.__hostTarget;\n var textConfig = hostEl.textConfig || {}; // TODO: If label is in other state.\n\n var labelTransform = label.getComputedTransform();\n var labelRect = label.getBoundingRect().plain();\n BoundingRect.applyTransform(labelRect, labelRect, labelTransform);\n\n if (labelTransform) {\n dummyTransformable.setLocalTransform(labelTransform);\n } else {\n // Identity transform.\n dummyTransformable.x = dummyTransformable.y = dummyTransformable.rotation = dummyTransformable.originX = dummyTransformable.originY = 0;\n dummyTransformable.scaleX = dummyTransformable.scaleY = 1;\n }\n\n var host = label.__hostTarget;\n var hostRect;\n\n if (host) {\n hostRect = host.getBoundingRect().plain();\n var transform = host.getComputedTransform();\n BoundingRect.applyTransform(hostRect, hostRect, transform);\n }\n\n var labelGuide = hostRect && host.getTextGuideLine();\n\n this._labelList.push({\n label: label,\n labelLine: labelGuide,\n seriesModel: seriesModel,\n dataIndex: dataIndex,\n dataType: dataType,\n layoutOption: layoutOption,\n computedLayoutOption: null,\n rect: labelRect,\n hostRect: hostRect,\n // Label with lower priority will be hidden when overlapped\n // Use rect size as default priority\n priority: hostRect ? hostRect.width * hostRect.height : 0,\n // Save default label attributes.\n // For restore if developers want get back to default value in callback.\n defaultAttr: {\n ignore: label.ignore,\n labelGuideIgnore: labelGuide && labelGuide.ignore,\n x: dummyTransformable.x,\n y: dummyTransformable.y,\n scaleX: dummyTransformable.scaleX,\n scaleY: dummyTransformable.scaleY,\n rotation: dummyTransformable.rotation,\n style: {\n x: labelStyle.x,\n y: labelStyle.y,\n align: labelStyle.align,\n verticalAlign: labelStyle.verticalAlign,\n width: labelStyle.width,\n height: labelStyle.height,\n fontSize: labelStyle.fontSize\n },\n cursor: label.cursor,\n attachedPos: textConfig.position,\n attachedRot: textConfig.rotation\n }\n });\n };\n\n LabelManager.prototype.addLabelsOfSeries = function (chartView) {\n var _this = this;\n\n this._chartViewList.push(chartView);\n\n var seriesModel = chartView.__model;\n var layoutOption = seriesModel.get('labelLayout');\n /**\n * Ignore layouting if it's not specified anything.\n */\n\n if (!(isFunction(layoutOption) || keys(layoutOption).length)) {\n return;\n }\n\n chartView.group.traverse(function (child) {\n if (child.ignore) {\n return true; // Stop traverse descendants.\n } // Only support label being hosted on graphic elements.\n\n\n var textEl = child.getTextContent();\n var ecData = getECData(child); // Can only attach the text on the element with dataIndex\n\n if (textEl && !textEl.disableLabelLayout) {\n _this._addLabel(ecData.dataIndex, ecData.dataType, seriesModel, textEl, layoutOption);\n }\n });\n };\n\n LabelManager.prototype.updateLayoutConfig = function (api) {\n var width = api.getWidth();\n var height = api.getHeight();\n\n function createDragHandler(el, labelLineModel) {\n return function () {\n updateLabelLinePoints(el, labelLineModel);\n };\n }\n\n for (var i = 0; i < this._labelList.length; i++) {\n var labelItem = this._labelList[i];\n var label = labelItem.label;\n var hostEl = label.__hostTarget;\n var defaultLabelAttr = labelItem.defaultAttr;\n var layoutOption = void 0; // TODO A global layout option?\n\n if (isFunction(labelItem.layoutOption)) {\n layoutOption = labelItem.layoutOption(prepareLayoutCallbackParams(labelItem, hostEl));\n } else {\n layoutOption = labelItem.layoutOption;\n }\n\n layoutOption = layoutOption || {};\n labelItem.computedLayoutOption = layoutOption;\n var degreeToRadian = Math.PI / 180; // TODO hostEl should always exists.\n // Or label should not have parent because the x, y is all in global space.\n\n if (hostEl) {\n hostEl.setTextConfig({\n // Force to set local false.\n local: false,\n // Ignore position and rotation config on the host el if x or y is changed.\n position: layoutOption.x != null || layoutOption.y != null ? null : defaultLabelAttr.attachedPos,\n // Ignore rotation config on the host el if rotation is changed.\n rotation: layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.attachedRot,\n offset: [layoutOption.dx || 0, layoutOption.dy || 0]\n });\n }\n\n var needsUpdateLabelLine = false;\n\n if (layoutOption.x != null) {\n // TODO width of chart view.\n label.x = parsePercent(layoutOption.x, width);\n label.setStyle('x', 0); // Ignore movement in style. TODO: origin.\n\n needsUpdateLabelLine = true;\n } else {\n label.x = defaultLabelAttr.x;\n label.setStyle('x', defaultLabelAttr.style.x);\n }\n\n if (layoutOption.y != null) {\n // TODO height of chart view.\n label.y = parsePercent(layoutOption.y, height);\n label.setStyle('y', 0); // Ignore movement in style.\n\n needsUpdateLabelLine = true;\n } else {\n label.y = defaultLabelAttr.y;\n label.setStyle('y', defaultLabelAttr.style.y);\n }\n\n if (layoutOption.labelLinePoints) {\n var guideLine = hostEl.getTextGuideLine();\n\n if (guideLine) {\n guideLine.setShape({\n points: layoutOption.labelLinePoints\n }); // Not update\n\n needsUpdateLabelLine = false;\n }\n }\n\n var labelLayoutStore = labelLayoutInnerStore(label);\n labelLayoutStore.needsUpdateLabelLine = needsUpdateLabelLine;\n label.rotation = layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.rotation;\n label.scaleX = defaultLabelAttr.scaleX;\n label.scaleY = defaultLabelAttr.scaleY;\n\n for (var k = 0; k < LABEL_OPTION_TO_STYLE_KEYS.length; k++) {\n var key = LABEL_OPTION_TO_STYLE_KEYS[k];\n label.setStyle(key, layoutOption[key] != null ? layoutOption[key] : defaultLabelAttr.style[key]);\n }\n\n if (layoutOption.draggable) {\n label.draggable = true;\n label.cursor = 'move';\n\n if (hostEl) {\n var hostModel = labelItem.seriesModel;\n\n if (labelItem.dataIndex != null) {\n var data = labelItem.seriesModel.getData(labelItem.dataType);\n hostModel = data.getItemModel(labelItem.dataIndex);\n }\n\n label.on('drag', createDragHandler(hostEl, hostModel.getModel('labelLine')));\n }\n } else {\n // TODO Other drag functions?\n label.off('drag');\n label.cursor = defaultLabelAttr.cursor;\n }\n }\n };\n\n LabelManager.prototype.layout = function (api) {\n var width = api.getWidth();\n var height = api.getHeight();\n var labelList = prepareLayoutList(this._labelList);\n var labelsNeedsAdjustOnX = filter(labelList, function (item) {\n return item.layoutOption.moveOverlap === 'shiftX';\n });\n var labelsNeedsAdjustOnY = filter(labelList, function (item) {\n return item.layoutOption.moveOverlap === 'shiftY';\n });\n shiftLayoutOnX(labelsNeedsAdjustOnX, 0, width);\n shiftLayoutOnY(labelsNeedsAdjustOnY, 0, height);\n var labelsNeedsHideOverlap = filter(labelList, function (item) {\n return item.layoutOption.hideOverlap;\n });\n hideOverlap(labelsNeedsHideOverlap);\n };\n /**\n * Process all labels. Not only labels with layoutOption.\n */\n\n\n LabelManager.prototype.processLabelsOverall = function () {\n var _this = this;\n\n each(this._chartViewList, function (chartView) {\n var seriesModel = chartView.__model;\n var ignoreLabelLineUpdate = chartView.ignoreLabelLineUpdate;\n var animationEnabled = seriesModel.isAnimationEnabled();\n chartView.group.traverse(function (child) {\n if (child.ignore && !child.forceLabelAnimation) {\n return true; // Stop traverse descendants.\n }\n\n var needsUpdateLabelLine = !ignoreLabelLineUpdate;\n var label = child.getTextContent();\n\n if (!needsUpdateLabelLine && label) {\n needsUpdateLabelLine = labelLayoutInnerStore(label).needsUpdateLabelLine;\n }\n\n if (needsUpdateLabelLine) {\n _this._updateLabelLine(child, seriesModel);\n }\n\n if (animationEnabled) {\n _this._animateLabels(child, seriesModel);\n }\n });\n });\n };\n\n LabelManager.prototype._updateLabelLine = function (el, seriesModel) {\n // Only support label being hosted on graphic elements.\n var textEl = el.getTextContent(); // Update label line style.\n\n var ecData = getECData(el);\n var dataIndex = ecData.dataIndex; // Only support labelLine on the labels represent data.\n\n if (textEl && dataIndex != null) {\n var data = seriesModel.getData(ecData.dataType);\n var itemModel = data.getItemModel(dataIndex);\n var defaultStyle = {};\n var visualStyle = data.getItemVisual(dataIndex, 'style');\n var visualType = data.getVisual('drawType'); // Default to be same with main color\n\n defaultStyle.stroke = visualStyle[visualType];\n var labelLineModel = itemModel.getModel('labelLine');\n setLabelLineStyle(el, getLabelLineStatesModels(itemModel), defaultStyle);\n updateLabelLinePoints(el, labelLineModel);\n }\n };\n\n LabelManager.prototype._animateLabels = function (el, seriesModel) {\n var textEl = el.getTextContent();\n var guideLine = el.getTextGuideLine(); // Animate\n\n if (textEl // `forceLabelAnimation` has the highest priority\n && (el.forceLabelAnimation || !textEl.ignore && !textEl.invisible && !el.disableLabelAnimation && !isElementRemoved(el))) {\n var layoutStore = labelLayoutInnerStore(textEl);\n var oldLayout = layoutStore.oldLayout;\n var ecData = getECData(el);\n var dataIndex = ecData.dataIndex;\n var newProps = {\n x: textEl.x,\n y: textEl.y,\n rotation: textEl.rotation\n };\n var data = seriesModel.getData(ecData.dataType);\n\n if (!oldLayout) {\n textEl.attr(newProps); // Disable fade in animation if value animation is enabled.\n\n if (!labelInner(textEl).valueAnimation) {\n var oldOpacity = retrieve2(textEl.style.opacity, 1); // Fade in animation\n\n textEl.style.opacity = 0;\n initProps(textEl, {\n style: {\n opacity: oldOpacity\n }\n }, seriesModel, dataIndex);\n }\n } else {\n textEl.attr(oldLayout); // Make sure the animation from is in the right status.\n\n var prevStates = el.prevStates;\n\n if (prevStates) {\n if (indexOf(prevStates, 'select') >= 0) {\n textEl.attr(layoutStore.oldLayoutSelect);\n }\n\n if (indexOf(prevStates, 'emphasis') >= 0) {\n textEl.attr(layoutStore.oldLayoutEmphasis);\n }\n }\n\n updateProps(textEl, newProps, seriesModel, dataIndex);\n }\n\n layoutStore.oldLayout = newProps;\n\n if (textEl.states.select) {\n var layoutSelect = layoutStore.oldLayoutSelect = {};\n extendWithKeys(layoutSelect, newProps, LABEL_LAYOUT_PROPS);\n extendWithKeys(layoutSelect, textEl.states.select, LABEL_LAYOUT_PROPS);\n }\n\n if (textEl.states.emphasis) {\n var layoutEmphasis = layoutStore.oldLayoutEmphasis = {};\n extendWithKeys(layoutEmphasis, newProps, LABEL_LAYOUT_PROPS);\n extendWithKeys(layoutEmphasis, textEl.states.emphasis, LABEL_LAYOUT_PROPS);\n }\n\n animateLabelValue(textEl, dataIndex, data, seriesModel, seriesModel);\n }\n\n if (guideLine && !guideLine.ignore && !guideLine.invisible) {\n var layoutStore = labelLineAnimationStore(guideLine);\n var oldLayout = layoutStore.oldLayout;\n var newLayout = {\n points: guideLine.shape.points\n };\n\n if (!oldLayout) {\n guideLine.setShape(newLayout);\n guideLine.style.strokePercent = 0;\n initProps(guideLine, {\n style: {\n strokePercent: 1\n }\n }, seriesModel);\n } else {\n guideLine.attr({\n shape: oldLayout\n });\n updateProps(guideLine, {\n shape: newLayout\n }, seriesModel);\n }\n\n layoutStore.oldLayout = newLayout;\n }\n };\n\n return LabelManager;\n}();\n\nexport default LabelManager;"]},"metadata":{},"sourceType":"module"} |