1 line
98 KiB
JSON
1 line
98 KiB
JSON
{"ast":null,"code":"import \"core-js/modules/es.array.fill.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*/\nimport { __extends } from \"tslib\";\nimport { bind, each, indexOf, curry, extend, normalizeCssArray, isFunction } from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { isHighDownDispatcher, setAsHighDownDispatcher, setDefaultStateProxy, enableHoverFocus, Z2_EMPHASIS_LIFT } from '../../util/states.js';\nimport DataDiffer from '../../data/DataDiffer.js';\nimport * as helper from '../helper/treeHelper.js';\nimport Breadcrumb from './Breadcrumb.js';\nimport RoamController from '../../component/helper/RoamController.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport * as matrix from 'zrender/lib/core/matrix.js';\nimport * as animationUtil from '../../util/animation.js';\nimport makeStyleMapper from '../../model/mixin/makeStyleMapper.js';\nimport ChartView from '../../view/Chart.js';\nimport Displayable from 'zrender/lib/graphic/Displayable.js';\nimport { makeInner, convertOptionIdName } from '../../util/model.js';\nimport { windowOpen } from '../../util/format.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nvar Group = graphic.Group;\nvar Rect = graphic.Rect;\nvar DRAG_THRESHOLD = 3;\nvar PATH_LABEL_NOAMAL = 'label';\nvar PATH_UPPERLABEL_NORMAL = 'upperLabel'; // Should larger than emphasis states lift z\n\nvar Z2_BASE = Z2_EMPHASIS_LIFT * 10; // Should bigger than every z2.\n\nvar Z2_BG = Z2_EMPHASIS_LIFT * 2;\nvar Z2_CONTENT = Z2_EMPHASIS_LIFT * 3;\nvar getStateItemStyle = makeStyleMapper([['fill', 'color'], // `borderColor` and `borderWidth` has been occupied,\n// so use `stroke` to indicate the stroke of the rect.\n['stroke', 'strokeColor'], ['lineWidth', 'strokeWidth'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor'] // Option decal is in `DecalObject` but style.decal is in `PatternObject`.\n// So do not transfer decal directly.\n]);\n\nvar getItemStyleNormal = function getItemStyleNormal(model) {\n // Normal style props should include emphasis style props.\n var itemStyle = getStateItemStyle(model); // Clear styles set by emphasis.\n\n itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null;\n return itemStyle;\n};\n\nvar inner = makeInner();\n\nvar TreemapView =\n/** @class */\nfunction (_super) {\n __extends(TreemapView, _super);\n\n function TreemapView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = TreemapView.type;\n _this._state = 'ready';\n _this._storage = createStorage();\n return _this;\n }\n /**\n * @override\n */\n\n\n TreemapView.prototype.render = function (seriesModel, ecModel, api, payload) {\n var models = ecModel.findComponents({\n mainType: 'series',\n subType: 'treemap',\n query: payload\n });\n\n if (indexOf(models, seriesModel) < 0) {\n return;\n }\n\n this.seriesModel = seriesModel;\n this.api = api;\n this.ecModel = ecModel;\n var types = ['treemapZoomToNode', 'treemapRootToNode'];\n var targetInfo = helper.retrieveTargetInfo(payload, types, seriesModel);\n var payloadType = payload && payload.type;\n var layoutInfo = seriesModel.layoutInfo;\n var isInit = !this._oldTree;\n var thisStorage = this._storage; // Mark new root when action is treemapRootToNode.\n\n var reRoot = payloadType === 'treemapRootToNode' && targetInfo && thisStorage ? {\n rootNodeGroup: thisStorage.nodeGroup[targetInfo.node.getRawIndex()],\n direction: payload.direction\n } : null;\n\n var containerGroup = this._giveContainerGroup(layoutInfo);\n\n var hasAnimation = seriesModel.get('animation');\n\n var renderResult = this._doRender(containerGroup, seriesModel, reRoot);\n\n hasAnimation && !isInit && (!payloadType || payloadType === 'treemapZoomToNode' || payloadType === 'treemapRootToNode') ? this._doAnimation(containerGroup, renderResult, seriesModel, reRoot) : renderResult.renderFinally();\n\n this._resetController(api);\n\n this._renderBreadcrumb(seriesModel, api, targetInfo);\n };\n\n TreemapView.prototype._giveContainerGroup = function (layoutInfo) {\n var containerGroup = this._containerGroup;\n\n if (!containerGroup) {\n // FIXME\n // 加一层containerGroup是为了clip,但是现在clip功能并没有实现。\n containerGroup = this._containerGroup = new Group();\n\n this._initEvents(containerGroup);\n\n this.group.add(containerGroup);\n }\n\n containerGroup.x = layoutInfo.x;\n containerGroup.y = layoutInfo.y;\n return containerGroup;\n };\n\n TreemapView.prototype._doRender = function (containerGroup, seriesModel, reRoot) {\n var thisTree = seriesModel.getData().tree;\n var oldTree = this._oldTree; // Clear last shape records.\n\n var lastsForAnimation = createStorage();\n var thisStorage = createStorage();\n var oldStorage = this._storage;\n var willInvisibleEls = [];\n\n function doRenderNode(thisNode, oldNode, parentGroup, depth) {\n return renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth);\n } // Notice: When thisTree and oldTree are the same tree (see list.cloneShallow),\n // the oldTree is actually losted, so we cannot find all of the old graphic\n // elements from tree. So we use this strategy: make element storage, move\n // from old storage to new storage, clear old storage.\n\n\n dualTravel(thisTree.root ? [thisTree.root] : [], oldTree && oldTree.root ? [oldTree.root] : [], containerGroup, thisTree === oldTree || !oldTree, 0); // Process all removing.\n\n var willDeleteEls = clearStorage(oldStorage);\n this._oldTree = thisTree;\n this._storage = thisStorage;\n return {\n lastsForAnimation: lastsForAnimation,\n willDeleteEls: willDeleteEls,\n renderFinally: renderFinally\n };\n\n function dualTravel(thisViewChildren, oldViewChildren, parentGroup, sameTree, depth) {\n // When 'render' is triggered by action,\n // 'this' and 'old' may be the same tree,\n // we use rawIndex in that case.\n if (sameTree) {\n oldViewChildren = thisViewChildren;\n each(thisViewChildren, function (child, index) {\n !child.isRemoved() && processNode(index, index);\n });\n } // Diff hierarchically (diff only in each subtree, but not whole).\n // because, consistency of view is important.\n else {\n new DataDiffer(oldViewChildren, thisViewChildren, getKey, getKey).add(processNode).update(processNode).remove(curry(processNode, null)).execute();\n }\n\n function getKey(node) {\n // Identify by name or raw index.\n return node.getId();\n }\n\n function processNode(newIndex, oldIndex) {\n var thisNode = newIndex != null ? thisViewChildren[newIndex] : null;\n var oldNode = oldIndex != null ? oldViewChildren[oldIndex] : null;\n var group = doRenderNode(thisNode, oldNode, parentGroup, depth);\n group && dualTravel(thisNode && thisNode.viewChildren || [], oldNode && oldNode.viewChildren || [], group, sameTree, depth + 1);\n }\n }\n\n function clearStorage(storage) {\n var willDeleteEls = createStorage();\n storage && each(storage, function (store, storageName) {\n var delEls = willDeleteEls[storageName];\n each(store, function (el) {\n el && (delEls.push(el), inner(el).willDelete = true);\n });\n });\n return willDeleteEls;\n }\n\n function renderFinally() {\n each(willDeleteEls, function (els) {\n each(els, function (el) {\n el.parent && el.parent.remove(el);\n });\n });\n each(willInvisibleEls, function (el) {\n el.invisible = true; // Setting invisible is for optimizing, so no need to set dirty,\n // just mark as invisible.\n\n el.dirty();\n });\n }\n };\n\n TreemapView.prototype._doAnimation = function (containerGroup, renderResult, seriesModel, reRoot) {\n var durationOption = seriesModel.get('animationDurationUpdate');\n var easingOption = seriesModel.get('animationEasing'); // TODO: do not support function until necessary.\n\n var duration = (isFunction(durationOption) ? 0 : durationOption) || 0;\n var easing = (isFunction(easingOption) ? null : easingOption) || 'cubicOut';\n var animationWrap = animationUtil.createWrap(); // Make delete animations.\n\n each(renderResult.willDeleteEls, function (store, storageName) {\n each(store, function (el, rawIndex) {\n if (el.invisible) {\n return;\n }\n\n var parent = el.parent; // Always has parent, and parent is nodeGroup.\n\n var target;\n var innerStore = inner(parent);\n\n if (reRoot && reRoot.direction === 'drillDown') {\n target = parent === reRoot.rootNodeGroup // This is the content element of view root.\n // Only `content` will enter this branch, because\n // `background` and `nodeGroup` will not be deleted.\n ? {\n shape: {\n x: 0,\n y: 0,\n width: innerStore.nodeWidth,\n height: innerStore.nodeHeight\n },\n style: {\n opacity: 0\n }\n } // Others.\n : {\n style: {\n opacity: 0\n }\n };\n } else {\n var targetX = 0;\n var targetY = 0;\n\n if (!innerStore.willDelete) {\n // Let node animate to right-bottom corner, cooperating with fadeout,\n // which is appropriate for user understanding.\n // Divided by 2 for reRoot rolling up effect.\n targetX = innerStore.nodeWidth / 2;\n targetY = innerStore.nodeHeight / 2;\n }\n\n target = storageName === 'nodeGroup' ? {\n x: targetX,\n y: targetY,\n style: {\n opacity: 0\n }\n } : {\n shape: {\n x: targetX,\n y: targetY,\n width: 0,\n height: 0\n },\n style: {\n opacity: 0\n }\n };\n } // TODO: do not support delay until necessary.\n\n\n target && animationWrap.add(el, target, duration, 0, easing);\n });\n }); // Make other animations\n\n each(this._storage, function (store, storageName) {\n each(store, function (el, rawIndex) {\n var last = renderResult.lastsForAnimation[storageName][rawIndex];\n var target = {};\n\n if (!last) {\n return;\n }\n\n if (el instanceof graphic.Group) {\n if (last.oldX != null) {\n target.x = el.x;\n target.y = el.y;\n el.x = last.oldX;\n el.y = last.oldY;\n }\n } else {\n if (last.oldShape) {\n target.shape = extend({}, el.shape);\n el.setShape(last.oldShape);\n }\n\n if (last.fadein) {\n el.setStyle('opacity', 0);\n target.style = {\n opacity: 1\n };\n } // When animation is stopped for succedent animation starting,\n // el.style.opacity might not be 1\n else if (el.style.opacity !== 1) {\n target.style = {\n opacity: 1\n };\n }\n }\n\n animationWrap.add(el, target, duration, 0, easing);\n });\n }, this);\n this._state = 'animating';\n animationWrap.finished(bind(function () {\n this._state = 'ready';\n renderResult.renderFinally();\n }, this)).start();\n };\n\n TreemapView.prototype._resetController = function (api) {\n var controller = this._controller; // Init controller.\n\n if (!controller) {\n controller = this._controller = new RoamController(api.getZr());\n controller.enable(this.seriesModel.get('roam'));\n controller.on('pan', bind(this._onPan, this));\n controller.on('zoom', bind(this._onZoom, this));\n }\n\n var rect = new BoundingRect(0, 0, api.getWidth(), api.getHeight());\n controller.setPointerChecker(function (e, x, y) {\n return rect.contain(x, y);\n });\n };\n\n TreemapView.prototype._clearController = function () {\n var controller = this._controller;\n\n if (controller) {\n controller.dispose();\n controller = null;\n }\n };\n\n TreemapView.prototype._onPan = function (e) {\n if (this._state !== 'animating' && (Math.abs(e.dx) > DRAG_THRESHOLD || Math.abs(e.dy) > DRAG_THRESHOLD)) {\n // These param must not be cached.\n var root = this.seriesModel.getData().tree.root;\n\n if (!root) {\n return;\n }\n\n var rootLayout = root.getLayout();\n\n if (!rootLayout) {\n return;\n }\n\n this.api.dispatchAction({\n type: 'treemapMove',\n from: this.uid,\n seriesId: this.seriesModel.id,\n rootRect: {\n x: rootLayout.x + e.dx,\n y: rootLayout.y + e.dy,\n width: rootLayout.width,\n height: rootLayout.height\n }\n });\n }\n };\n\n TreemapView.prototype._onZoom = function (e) {\n var mouseX = e.originX;\n var mouseY = e.originY;\n\n if (this._state !== 'animating') {\n // These param must not be cached.\n var root = this.seriesModel.getData().tree.root;\n\n if (!root) {\n return;\n }\n\n var rootLayout = root.getLayout();\n\n if (!rootLayout) {\n return;\n }\n\n var rect = new BoundingRect(rootLayout.x, rootLayout.y, rootLayout.width, rootLayout.height);\n var layoutInfo = this.seriesModel.layoutInfo; // Transform mouse coord from global to containerGroup.\n\n mouseX -= layoutInfo.x;\n mouseY -= layoutInfo.y; // Scale root bounding rect.\n\n var m = matrix.create();\n matrix.translate(m, m, [-mouseX, -mouseY]);\n matrix.scale(m, m, [e.scale, e.scale]);\n matrix.translate(m, m, [mouseX, mouseY]);\n rect.applyTransform(m);\n this.api.dispatchAction({\n type: 'treemapRender',\n from: this.uid,\n seriesId: this.seriesModel.id,\n rootRect: {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n }\n });\n }\n };\n\n TreemapView.prototype._initEvents = function (containerGroup) {\n var _this = this;\n\n containerGroup.on('click', function (e) {\n if (_this._state !== 'ready') {\n return;\n }\n\n var nodeClick = _this.seriesModel.get('nodeClick', true);\n\n if (!nodeClick) {\n return;\n }\n\n var targetInfo = _this.findTarget(e.offsetX, e.offsetY);\n\n if (!targetInfo) {\n return;\n }\n\n var node = targetInfo.node;\n\n if (node.getLayout().isLeafRoot) {\n _this._rootToNode(targetInfo);\n } else {\n if (nodeClick === 'zoomToNode') {\n _this._zoomToNode(targetInfo);\n } else if (nodeClick === 'link') {\n var itemModel = node.hostTree.data.getItemModel(node.dataIndex);\n var link = itemModel.get('link', true);\n var linkTarget = itemModel.get('target', true) || 'blank';\n link && windowOpen(link, linkTarget);\n }\n }\n }, this);\n };\n\n TreemapView.prototype._renderBreadcrumb = function (seriesModel, api, targetInfo) {\n var _this = this;\n\n if (!targetInfo) {\n targetInfo = seriesModel.get('leafDepth', true) != null ? {\n node: seriesModel.getViewRoot()\n } // FIXME\n // better way?\n // Find breadcrumb tail on center of containerGroup.\n : this.findTarget(api.getWidth() / 2, api.getHeight() / 2);\n\n if (!targetInfo) {\n targetInfo = {\n node: seriesModel.getData().tree.root\n };\n }\n }\n\n (this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group))).render(seriesModel, api, targetInfo.node, function (node) {\n if (_this._state !== 'animating') {\n helper.aboveViewRoot(seriesModel.getViewRoot(), node) ? _this._rootToNode({\n node: node\n }) : _this._zoomToNode({\n node: node\n });\n }\n });\n };\n /**\n * @override\n */\n\n\n TreemapView.prototype.remove = function () {\n this._clearController();\n\n this._containerGroup && this._containerGroup.removeAll();\n this._storage = createStorage();\n this._state = 'ready';\n this._breadcrumb && this._breadcrumb.remove();\n };\n\n TreemapView.prototype.dispose = function () {\n this._clearController();\n };\n\n TreemapView.prototype._zoomToNode = function (targetInfo) {\n this.api.dispatchAction({\n type: 'treemapZoomToNode',\n from: this.uid,\n seriesId: this.seriesModel.id,\n targetNode: targetInfo.node\n });\n };\n\n TreemapView.prototype._rootToNode = function (targetInfo) {\n this.api.dispatchAction({\n type: 'treemapRootToNode',\n from: this.uid,\n seriesId: this.seriesModel.id,\n targetNode: targetInfo.node\n });\n };\n /**\n * @public\n * @param {number} x Global coord x.\n * @param {number} y Global coord y.\n * @return {Object} info If not found, return undefined;\n * @return {number} info.node Target node.\n * @return {number} info.offsetX x refer to target node.\n * @return {number} info.offsetY y refer to target node.\n */\n\n\n TreemapView.prototype.findTarget = function (x, y) {\n var targetInfo;\n var viewRoot = this.seriesModel.getViewRoot();\n viewRoot.eachNode({\n attr: 'viewChildren',\n order: 'preorder'\n }, function (node) {\n var bgEl = this._storage.background[node.getRawIndex()]; // If invisible, there might be no element.\n\n\n if (bgEl) {\n var point = bgEl.transformCoordToLocal(x, y);\n var shape = bgEl.shape; // For performance consideration, don't use 'getBoundingRect'.\n\n if (shape.x <= point[0] && point[0] <= shape.x + shape.width && shape.y <= point[1] && point[1] <= shape.y + shape.height) {\n targetInfo = {\n node: node,\n offsetX: point[0],\n offsetY: point[1]\n };\n } else {\n return false; // Suppress visit subtree.\n }\n }\n }, this);\n return targetInfo;\n };\n\n TreemapView.type = 'treemap';\n return TreemapView;\n}(ChartView);\n/**\n * @inner\n */\n\n\nfunction createStorage() {\n return {\n nodeGroup: [],\n background: [],\n content: []\n };\n}\n/**\n * @inner\n * @return Return undefined means do not travel further.\n */\n\n\nfunction renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth) {\n // Whether under viewRoot.\n if (!thisNode) {\n // Deleting nodes will be performed finally. This method just find\n // element from old storage, or create new element, set them to new\n // storage, and set styles.\n return;\n } // -------------------------------------------------------------------\n // Start of closure variables available in \"Procedures in renderNode\".\n\n\n var thisLayout = thisNode.getLayout();\n var data = seriesModel.getData();\n var nodeModel = thisNode.getModel(); // Only for enabling highlight/downplay. Clear firstly.\n // Because some node will not be rendered.\n\n data.setItemGraphicEl(thisNode.dataIndex, null);\n\n if (!thisLayout || !thisLayout.isInView) {\n return;\n }\n\n var thisWidth = thisLayout.width;\n var thisHeight = thisLayout.height;\n var borderWidth = thisLayout.borderWidth;\n var thisInvisible = thisLayout.invisible;\n var thisRawIndex = thisNode.getRawIndex();\n var oldRawIndex = oldNode && oldNode.getRawIndex();\n var thisViewChildren = thisNode.viewChildren;\n var upperHeight = thisLayout.upperHeight;\n var isParent = thisViewChildren && thisViewChildren.length;\n var itemStyleNormalModel = nodeModel.getModel('itemStyle');\n var itemStyleEmphasisModel = nodeModel.getModel(['emphasis', 'itemStyle']);\n var itemStyleBlurModel = nodeModel.getModel(['blur', 'itemStyle']);\n var itemStyleSelectModel = nodeModel.getModel(['select', 'itemStyle']);\n var borderRadius = itemStyleNormalModel.get('borderRadius') || 0; // End of closure ariables available in \"Procedures in renderNode\".\n // -----------------------------------------------------------------\n // Node group\n\n var group = giveGraphic('nodeGroup', Group);\n\n if (!group) {\n return;\n }\n\n parentGroup.add(group); // x,y are not set when el is above view root.\n\n group.x = thisLayout.x || 0;\n group.y = thisLayout.y || 0;\n group.markRedraw();\n inner(group).nodeWidth = thisWidth;\n inner(group).nodeHeight = thisHeight;\n\n if (thisLayout.isAboveViewRoot) {\n return group;\n } // Background\n\n\n var bg = giveGraphic('background', Rect, depth, Z2_BG);\n bg && renderBackground(group, bg, isParent && thisLayout.upperLabelHeight);\n var emphasisModel = nodeModel.getModel('emphasis');\n var focus = emphasisModel.get('focus');\n var blurScope = emphasisModel.get('blurScope');\n var isDisabled = emphasisModel.get('disabled');\n var focusOrIndices = focus === 'ancestor' ? thisNode.getAncestorsIndices() : focus === 'descendant' ? thisNode.getDescendantIndices() : focus; // No children, render content.\n\n if (isParent) {\n // Because of the implementation about \"traverse\" in graphic hover style, we\n // can not set hover listener on the \"group\" of non-leaf node. Otherwise the\n // hover event from the descendents will be listenered.\n if (isHighDownDispatcher(group)) {\n setAsHighDownDispatcher(group, false);\n }\n\n if (bg) {\n setAsHighDownDispatcher(bg, !isDisabled); // Only for enabling highlight/downplay.\n\n data.setItemGraphicEl(thisNode.dataIndex, bg);\n enableHoverFocus(bg, focusOrIndices, blurScope);\n }\n } else {\n var content = giveGraphic('content', Rect, depth, Z2_CONTENT);\n content && renderContent(group, content);\n bg.disableMorphing = true;\n\n if (bg && isHighDownDispatcher(bg)) {\n setAsHighDownDispatcher(bg, false);\n }\n\n setAsHighDownDispatcher(group, !isDisabled); // Only for enabling highlight/downplay.\n\n data.setItemGraphicEl(thisNode.dataIndex, group);\n enableHoverFocus(group, focusOrIndices, blurScope);\n }\n\n return group; // ----------------------------\n // | Procedures in renderNode |\n // ----------------------------\n\n function renderBackground(group, bg, useUpperLabel) {\n var ecData = getECData(bg); // For tooltip.\n\n ecData.dataIndex = thisNode.dataIndex;\n ecData.seriesIndex = seriesModel.seriesIndex;\n bg.setShape({\n x: 0,\n y: 0,\n width: thisWidth,\n height: thisHeight,\n r: borderRadius\n });\n\n if (thisInvisible) {\n // If invisible, do not set visual, otherwise the element will\n // change immediately before animation. We think it is OK to\n // remain its origin color when moving out of the view window.\n processInvisible(bg);\n } else {\n bg.invisible = false;\n var style = thisNode.getVisual('style');\n var visualBorderColor = style.stroke;\n var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n normalStyle.fill = visualBorderColor;\n var emphasisStyle = getStateItemStyle(itemStyleEmphasisModel);\n emphasisStyle.fill = itemStyleEmphasisModel.get('borderColor');\n var blurStyle = getStateItemStyle(itemStyleBlurModel);\n blurStyle.fill = itemStyleBlurModel.get('borderColor');\n var selectStyle = getStateItemStyle(itemStyleSelectModel);\n selectStyle.fill = itemStyleSelectModel.get('borderColor');\n\n if (useUpperLabel) {\n var upperLabelWidth = thisWidth - 2 * borderWidth;\n prepareText( // PENDING: convert ZRColor to ColorString for text.\n bg, visualBorderColor, style.opacity, {\n x: borderWidth,\n y: 0,\n width: upperLabelWidth,\n height: upperHeight\n });\n } // For old bg.\n else {\n bg.removeTextContent();\n }\n\n bg.setStyle(normalStyle);\n bg.ensureState('emphasis').style = emphasisStyle;\n bg.ensureState('blur').style = blurStyle;\n bg.ensureState('select').style = selectStyle;\n setDefaultStateProxy(bg);\n }\n\n group.add(bg);\n }\n\n function renderContent(group, content) {\n var ecData = getECData(content); // For tooltip.\n\n ecData.dataIndex = thisNode.dataIndex;\n ecData.seriesIndex = seriesModel.seriesIndex;\n var contentWidth = Math.max(thisWidth - 2 * borderWidth, 0);\n var contentHeight = Math.max(thisHeight - 2 * borderWidth, 0);\n content.culling = true;\n content.setShape({\n x: borderWidth,\n y: borderWidth,\n width: contentWidth,\n height: contentHeight,\n r: borderRadius\n });\n\n if (thisInvisible) {\n // If invisible, do not set visual, otherwise the element will\n // change immediately before animation. We think it is OK to\n // remain its origin color when moving out of the view window.\n processInvisible(content);\n } else {\n content.invisible = false;\n var nodeStyle = thisNode.getVisual('style');\n var visualColor = nodeStyle.fill;\n var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n normalStyle.fill = visualColor;\n normalStyle.decal = nodeStyle.decal;\n var emphasisStyle = getStateItemStyle(itemStyleEmphasisModel);\n var blurStyle = getStateItemStyle(itemStyleBlurModel);\n var selectStyle = getStateItemStyle(itemStyleSelectModel); // PENDING: convert ZRColor to ColorString for text.\n\n prepareText(content, visualColor, nodeStyle.opacity, null);\n content.setStyle(normalStyle);\n content.ensureState('emphasis').style = emphasisStyle;\n content.ensureState('blur').style = blurStyle;\n content.ensureState('select').style = selectStyle;\n setDefaultStateProxy(content);\n }\n\n group.add(content);\n }\n\n function processInvisible(element) {\n // Delay invisible setting utill animation finished,\n // avoid element vanish suddenly before animation.\n !element.invisible && willInvisibleEls.push(element);\n }\n\n function prepareText(rectEl, visualColor, visualOpacity, // Can be null/undefined\n upperLabelRect) {\n var normalLabelModel = nodeModel.getModel(upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL);\n var defaultText = convertOptionIdName(nodeModel.get('name'), null);\n var isShow = normalLabelModel.getShallow('show');\n setLabelStyle(rectEl, getLabelStatesModels(nodeModel, upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL), {\n defaultText: isShow ? defaultText : null,\n inheritColor: visualColor,\n defaultOpacity: visualOpacity,\n labelFetcher: seriesModel,\n labelDataIndex: thisNode.dataIndex\n });\n var textEl = rectEl.getTextContent();\n\n if (!textEl) {\n return;\n }\n\n var textStyle = textEl.style;\n var textPadding = normalizeCssArray(textStyle.padding || 0);\n\n if (upperLabelRect) {\n rectEl.setTextConfig({\n layoutRect: upperLabelRect\n });\n textEl.disableLabelLayout = true;\n }\n\n textEl.beforeUpdate = function () {\n var width = Math.max((upperLabelRect ? upperLabelRect.width : rectEl.shape.width) - textPadding[1] - textPadding[3], 0);\n var height = Math.max((upperLabelRect ? upperLabelRect.height : rectEl.shape.height) - textPadding[0] - textPadding[2], 0);\n\n if (textStyle.width !== width || textStyle.height !== height) {\n textEl.setStyle({\n width: width,\n height: height\n });\n }\n };\n\n textStyle.truncateMinChar = 2;\n textStyle.lineOverflow = 'truncate';\n addDrillDownIcon(textStyle, upperLabelRect, thisLayout);\n var textEmphasisState = textEl.getState('emphasis');\n addDrillDownIcon(textEmphasisState ? textEmphasisState.style : null, upperLabelRect, thisLayout);\n }\n\n function addDrillDownIcon(style, upperLabelRect, thisLayout) {\n var text = style ? style.text : null;\n\n if (!upperLabelRect && thisLayout.isLeafRoot && text != null) {\n var iconChar = seriesModel.get('drillDownIcon', true);\n style.text = iconChar ? iconChar + ' ' + text : text;\n }\n }\n\n function giveGraphic(storageName, Ctor, depth, z) {\n var element = oldRawIndex != null && oldStorage[storageName][oldRawIndex];\n var lasts = lastsForAnimation[storageName];\n\n if (element) {\n // Remove from oldStorage\n oldStorage[storageName][oldRawIndex] = null;\n prepareAnimationWhenHasOld(lasts, element);\n } // If invisible and no old element, do not create new element (for optimizing).\n else if (!thisInvisible) {\n element = new Ctor();\n\n if (element instanceof Displayable) {\n element.z2 = calculateZ2(depth, z);\n }\n\n prepareAnimationWhenNoOld(lasts, element);\n } // Set to thisStorage\n\n\n return thisStorage[storageName][thisRawIndex] = element;\n }\n\n function prepareAnimationWhenHasOld(lasts, element) {\n var lastCfg = lasts[thisRawIndex] = {};\n\n if (element instanceof Group) {\n lastCfg.oldX = element.x;\n lastCfg.oldY = element.y;\n } else {\n lastCfg.oldShape = extend({}, element.shape);\n }\n } // If a element is new, we need to find the animation start point carefully,\n // otherwise it will looks strange when 'zoomToNode'.\n\n\n function prepareAnimationWhenNoOld(lasts, element) {\n var lastCfg = lasts[thisRawIndex] = {};\n var parentNode = thisNode.parentNode;\n var isGroup = element instanceof graphic.Group;\n\n if (parentNode && (!reRoot || reRoot.direction === 'drillDown')) {\n var parentOldX = 0;\n var parentOldY = 0; // New nodes appear from right-bottom corner in 'zoomToNode' animation.\n // For convenience, get old bounding rect from background.\n\n var parentOldBg = lastsForAnimation.background[parentNode.getRawIndex()];\n\n if (!reRoot && parentOldBg && parentOldBg.oldShape) {\n parentOldX = parentOldBg.oldShape.width;\n parentOldY = parentOldBg.oldShape.height;\n } // When no parent old shape found, its parent is new too,\n // so we can just use {x:0, y:0}.\n\n\n if (isGroup) {\n lastCfg.oldX = 0;\n lastCfg.oldY = parentOldY;\n } else {\n lastCfg.oldShape = {\n x: parentOldX,\n y: parentOldY,\n width: 0,\n height: 0\n };\n }\n } // Fade in, user can be aware that these nodes are new.\n\n\n lastCfg.fadein = !isGroup;\n }\n} // We cannot set all background with the same z, because the behaviour of\n// drill down and roll up differ background creation sequence from tree\n// hierarchy sequence, which cause lower background elements to overlap\n// upper ones. So we calculate z based on depth.\n// Moreover, we try to shrink down z interval to [0, 1] to avoid that\n// treemap with large z overlaps other components.\n\n\nfunction calculateZ2(depth, z2InLevel) {\n return depth * Z2_BASE + z2InLevel;\n}\n\nexport default TreemapView;","map":{"version":3,"sources":["D:/Work/WorkSpace/GitWorkSpace/TenShop/resource/ElectronicMall/src啊/ElectronicMallVue/node_modules/echarts/lib/chart/treemap/TreemapView.js"],"names":["__extends","bind","each","indexOf","curry","extend","normalizeCssArray","isFunction","graphic","getECData","isHighDownDispatcher","setAsHighDownDispatcher","setDefaultStateProxy","enableHoverFocus","Z2_EMPHASIS_LIFT","DataDiffer","helper","Breadcrumb","RoamController","BoundingRect","matrix","animationUtil","makeStyleMapper","ChartView","Displayable","makeInner","convertOptionIdName","windowOpen","setLabelStyle","getLabelStatesModels","Group","Rect","DRAG_THRESHOLD","PATH_LABEL_NOAMAL","PATH_UPPERLABEL_NORMAL","Z2_BASE","Z2_BG","Z2_CONTENT","getStateItemStyle","getItemStyleNormal","model","itemStyle","stroke","fill","lineWidth","inner","TreemapView","_super","_this","apply","arguments","type","_state","_storage","createStorage","prototype","render","seriesModel","ecModel","api","payload","models","findComponents","mainType","subType","query","types","targetInfo","retrieveTargetInfo","payloadType","layoutInfo","isInit","_oldTree","thisStorage","reRoot","rootNodeGroup","nodeGroup","node","getRawIndex","direction","containerGroup","_giveContainerGroup","hasAnimation","get","renderResult","_doRender","_doAnimation","renderFinally","_resetController","_renderBreadcrumb","_containerGroup","_initEvents","group","add","x","y","thisTree","getData","tree","oldTree","lastsForAnimation","oldStorage","willInvisibleEls","doRenderNode","thisNode","oldNode","parentGroup","depth","renderNode","dualTravel","root","willDeleteEls","clearStorage","thisViewChildren","oldViewChildren","sameTree","child","index","isRemoved","processNode","getKey","update","remove","execute","getId","newIndex","oldIndex","viewChildren","storage","store","storageName","delEls","el","push","willDelete","els","parent","invisible","dirty","durationOption","easingOption","duration","easing","animationWrap","createWrap","rawIndex","target","innerStore","shape","width","nodeWidth","height","nodeHeight","style","opacity","targetX","targetY","last","oldX","oldY","oldShape","setShape","fadein","setStyle","finished","start","controller","_controller","getZr","enable","on","_onPan","_onZoom","rect","getWidth","getHeight","setPointerChecker","e","contain","_clearController","dispose","Math","abs","dx","dy","rootLayout","getLayout","dispatchAction","from","uid","seriesId","id","rootRect","mouseX","originX","mouseY","originY","m","create","translate","scale","applyTransform","nodeClick","findTarget","offsetX","offsetY","isLeafRoot","_rootToNode","_zoomToNode","itemModel","hostTree","data","getItemModel","dataIndex","link","linkTarget","getViewRoot","_breadcrumb","aboveViewRoot","removeAll","targetNode","viewRoot","eachNode","attr","order","bgEl","background","point","transformCoordToLocal","content","thisLayout","nodeModel","getModel","setItemGraphicEl","isInView","thisWidth","thisHeight","borderWidth","thisInvisible","thisRawIndex","oldRawIndex","upperHeight","isParent","length","itemStyleNormalModel","itemStyleEmphasisModel","itemStyleBlurModel","itemStyleSelectModel","borderRadius","giveGraphic","markRedraw","isAboveViewRoot","bg","renderBackground","upperLabelHeight","emphasisModel","focus","blurScope","isDisabled","focusOrIndices","getAncestorsIndices","getDescendantIndices","renderContent","disableMorphing","useUpperLabel","ecData","seriesIndex","r","processInvisible","getVisual","visualBorderColor","normalStyle","emphasisStyle","blurStyle","selectStyle","upperLabelWidth","prepareText","removeTextContent","ensureState","contentWidth","max","contentHeight","culling","nodeStyle","visualColor","decal","element","rectEl","visualOpacity","upperLabelRect","normalLabelModel","defaultText","isShow","getShallow","inheritColor","defaultOpacity","labelFetcher","labelDataIndex","textEl","getTextContent","textStyle","textPadding","padding","setTextConfig","layoutRect","disableLabelLayout","beforeUpdate","truncateMinChar","lineOverflow","addDrillDownIcon","textEmphasisState","getState","text","iconChar","Ctor","z","lasts","prepareAnimationWhenHasOld","z2","calculateZ2","prepareAnimationWhenNoOld","lastCfg","parentNode","isGroup","parentOldX","parentOldY","parentOldBg","z2InLevel"],"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*/\nimport { __extends } from \"tslib\";\nimport { bind, each, indexOf, curry, extend, normalizeCssArray, isFunction } from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { isHighDownDispatcher, setAsHighDownDispatcher, setDefaultStateProxy, enableHoverFocus, Z2_EMPHASIS_LIFT } from '../../util/states.js';\nimport DataDiffer from '../../data/DataDiffer.js';\nimport * as helper from '../helper/treeHelper.js';\nimport Breadcrumb from './Breadcrumb.js';\nimport RoamController from '../../component/helper/RoamController.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport * as matrix from 'zrender/lib/core/matrix.js';\nimport * as animationUtil from '../../util/animation.js';\nimport makeStyleMapper from '../../model/mixin/makeStyleMapper.js';\nimport ChartView from '../../view/Chart.js';\nimport Displayable from 'zrender/lib/graphic/Displayable.js';\nimport { makeInner, convertOptionIdName } from '../../util/model.js';\nimport { windowOpen } from '../../util/format.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nvar Group = graphic.Group;\nvar Rect = graphic.Rect;\nvar DRAG_THRESHOLD = 3;\nvar PATH_LABEL_NOAMAL = 'label';\nvar PATH_UPPERLABEL_NORMAL = 'upperLabel'; // Should larger than emphasis states lift z\n\nvar Z2_BASE = Z2_EMPHASIS_LIFT * 10; // Should bigger than every z2.\n\nvar Z2_BG = Z2_EMPHASIS_LIFT * 2;\nvar Z2_CONTENT = Z2_EMPHASIS_LIFT * 3;\nvar getStateItemStyle = makeStyleMapper([['fill', 'color'], // `borderColor` and `borderWidth` has been occupied,\n// so use `stroke` to indicate the stroke of the rect.\n['stroke', 'strokeColor'], ['lineWidth', 'strokeWidth'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor'] // Option decal is in `DecalObject` but style.decal is in `PatternObject`.\n// So do not transfer decal directly.\n]);\n\nvar getItemStyleNormal = function (model) {\n // Normal style props should include emphasis style props.\n var itemStyle = getStateItemStyle(model); // Clear styles set by emphasis.\n\n itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null;\n return itemStyle;\n};\n\nvar inner = makeInner();\n\nvar TreemapView =\n/** @class */\nfunction (_super) {\n __extends(TreemapView, _super);\n\n function TreemapView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = TreemapView.type;\n _this._state = 'ready';\n _this._storage = createStorage();\n return _this;\n }\n /**\n * @override\n */\n\n\n TreemapView.prototype.render = function (seriesModel, ecModel, api, payload) {\n var models = ecModel.findComponents({\n mainType: 'series',\n subType: 'treemap',\n query: payload\n });\n\n if (indexOf(models, seriesModel) < 0) {\n return;\n }\n\n this.seriesModel = seriesModel;\n this.api = api;\n this.ecModel = ecModel;\n var types = ['treemapZoomToNode', 'treemapRootToNode'];\n var targetInfo = helper.retrieveTargetInfo(payload, types, seriesModel);\n var payloadType = payload && payload.type;\n var layoutInfo = seriesModel.layoutInfo;\n var isInit = !this._oldTree;\n var thisStorage = this._storage; // Mark new root when action is treemapRootToNode.\n\n var reRoot = payloadType === 'treemapRootToNode' && targetInfo && thisStorage ? {\n rootNodeGroup: thisStorage.nodeGroup[targetInfo.node.getRawIndex()],\n direction: payload.direction\n } : null;\n\n var containerGroup = this._giveContainerGroup(layoutInfo);\n\n var hasAnimation = seriesModel.get('animation');\n\n var renderResult = this._doRender(containerGroup, seriesModel, reRoot);\n\n hasAnimation && !isInit && (!payloadType || payloadType === 'treemapZoomToNode' || payloadType === 'treemapRootToNode') ? this._doAnimation(containerGroup, renderResult, seriesModel, reRoot) : renderResult.renderFinally();\n\n this._resetController(api);\n\n this._renderBreadcrumb(seriesModel, api, targetInfo);\n };\n\n TreemapView.prototype._giveContainerGroup = function (layoutInfo) {\n var containerGroup = this._containerGroup;\n\n if (!containerGroup) {\n // FIXME\n // 加一层containerGroup是为了clip,但是现在clip功能并没有实现。\n containerGroup = this._containerGroup = new Group();\n\n this._initEvents(containerGroup);\n\n this.group.add(containerGroup);\n }\n\n containerGroup.x = layoutInfo.x;\n containerGroup.y = layoutInfo.y;\n return containerGroup;\n };\n\n TreemapView.prototype._doRender = function (containerGroup, seriesModel, reRoot) {\n var thisTree = seriesModel.getData().tree;\n var oldTree = this._oldTree; // Clear last shape records.\n\n var lastsForAnimation = createStorage();\n var thisStorage = createStorage();\n var oldStorage = this._storage;\n var willInvisibleEls = [];\n\n function doRenderNode(thisNode, oldNode, parentGroup, depth) {\n return renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth);\n } // Notice: When thisTree and oldTree are the same tree (see list.cloneShallow),\n // the oldTree is actually losted, so we cannot find all of the old graphic\n // elements from tree. So we use this strategy: make element storage, move\n // from old storage to new storage, clear old storage.\n\n\n dualTravel(thisTree.root ? [thisTree.root] : [], oldTree && oldTree.root ? [oldTree.root] : [], containerGroup, thisTree === oldTree || !oldTree, 0); // Process all removing.\n\n var willDeleteEls = clearStorage(oldStorage);\n this._oldTree = thisTree;\n this._storage = thisStorage;\n return {\n lastsForAnimation: lastsForAnimation,\n willDeleteEls: willDeleteEls,\n renderFinally: renderFinally\n };\n\n function dualTravel(thisViewChildren, oldViewChildren, parentGroup, sameTree, depth) {\n // When 'render' is triggered by action,\n // 'this' and 'old' may be the same tree,\n // we use rawIndex in that case.\n if (sameTree) {\n oldViewChildren = thisViewChildren;\n each(thisViewChildren, function (child, index) {\n !child.isRemoved() && processNode(index, index);\n });\n } // Diff hierarchically (diff only in each subtree, but not whole).\n // because, consistency of view is important.\n else {\n new DataDiffer(oldViewChildren, thisViewChildren, getKey, getKey).add(processNode).update(processNode).remove(curry(processNode, null)).execute();\n }\n\n function getKey(node) {\n // Identify by name or raw index.\n return node.getId();\n }\n\n function processNode(newIndex, oldIndex) {\n var thisNode = newIndex != null ? thisViewChildren[newIndex] : null;\n var oldNode = oldIndex != null ? oldViewChildren[oldIndex] : null;\n var group = doRenderNode(thisNode, oldNode, parentGroup, depth);\n group && dualTravel(thisNode && thisNode.viewChildren || [], oldNode && oldNode.viewChildren || [], group, sameTree, depth + 1);\n }\n }\n\n function clearStorage(storage) {\n var willDeleteEls = createStorage();\n storage && each(storage, function (store, storageName) {\n var delEls = willDeleteEls[storageName];\n each(store, function (el) {\n el && (delEls.push(el), inner(el).willDelete = true);\n });\n });\n return willDeleteEls;\n }\n\n function renderFinally() {\n each(willDeleteEls, function (els) {\n each(els, function (el) {\n el.parent && el.parent.remove(el);\n });\n });\n each(willInvisibleEls, function (el) {\n el.invisible = true; // Setting invisible is for optimizing, so no need to set dirty,\n // just mark as invisible.\n\n el.dirty();\n });\n }\n };\n\n TreemapView.prototype._doAnimation = function (containerGroup, renderResult, seriesModel, reRoot) {\n var durationOption = seriesModel.get('animationDurationUpdate');\n var easingOption = seriesModel.get('animationEasing'); // TODO: do not support function until necessary.\n\n var duration = (isFunction(durationOption) ? 0 : durationOption) || 0;\n var easing = (isFunction(easingOption) ? null : easingOption) || 'cubicOut';\n var animationWrap = animationUtil.createWrap(); // Make delete animations.\n\n each(renderResult.willDeleteEls, function (store, storageName) {\n each(store, function (el, rawIndex) {\n if (el.invisible) {\n return;\n }\n\n var parent = el.parent; // Always has parent, and parent is nodeGroup.\n\n var target;\n var innerStore = inner(parent);\n\n if (reRoot && reRoot.direction === 'drillDown') {\n target = parent === reRoot.rootNodeGroup // This is the content element of view root.\n // Only `content` will enter this branch, because\n // `background` and `nodeGroup` will not be deleted.\n ? {\n shape: {\n x: 0,\n y: 0,\n width: innerStore.nodeWidth,\n height: innerStore.nodeHeight\n },\n style: {\n opacity: 0\n }\n } // Others.\n : {\n style: {\n opacity: 0\n }\n };\n } else {\n var targetX = 0;\n var targetY = 0;\n\n if (!innerStore.willDelete) {\n // Let node animate to right-bottom corner, cooperating with fadeout,\n // which is appropriate for user understanding.\n // Divided by 2 for reRoot rolling up effect.\n targetX = innerStore.nodeWidth / 2;\n targetY = innerStore.nodeHeight / 2;\n }\n\n target = storageName === 'nodeGroup' ? {\n x: targetX,\n y: targetY,\n style: {\n opacity: 0\n }\n } : {\n shape: {\n x: targetX,\n y: targetY,\n width: 0,\n height: 0\n },\n style: {\n opacity: 0\n }\n };\n } // TODO: do not support delay until necessary.\n\n\n target && animationWrap.add(el, target, duration, 0, easing);\n });\n }); // Make other animations\n\n each(this._storage, function (store, storageName) {\n each(store, function (el, rawIndex) {\n var last = renderResult.lastsForAnimation[storageName][rawIndex];\n var target = {};\n\n if (!last) {\n return;\n }\n\n if (el instanceof graphic.Group) {\n if (last.oldX != null) {\n target.x = el.x;\n target.y = el.y;\n el.x = last.oldX;\n el.y = last.oldY;\n }\n } else {\n if (last.oldShape) {\n target.shape = extend({}, el.shape);\n el.setShape(last.oldShape);\n }\n\n if (last.fadein) {\n el.setStyle('opacity', 0);\n target.style = {\n opacity: 1\n };\n } // When animation is stopped for succedent animation starting,\n // el.style.opacity might not be 1\n else if (el.style.opacity !== 1) {\n target.style = {\n opacity: 1\n };\n }\n }\n\n animationWrap.add(el, target, duration, 0, easing);\n });\n }, this);\n this._state = 'animating';\n animationWrap.finished(bind(function () {\n this._state = 'ready';\n renderResult.renderFinally();\n }, this)).start();\n };\n\n TreemapView.prototype._resetController = function (api) {\n var controller = this._controller; // Init controller.\n\n if (!controller) {\n controller = this._controller = new RoamController(api.getZr());\n controller.enable(this.seriesModel.get('roam'));\n controller.on('pan', bind(this._onPan, this));\n controller.on('zoom', bind(this._onZoom, this));\n }\n\n var rect = new BoundingRect(0, 0, api.getWidth(), api.getHeight());\n controller.setPointerChecker(function (e, x, y) {\n return rect.contain(x, y);\n });\n };\n\n TreemapView.prototype._clearController = function () {\n var controller = this._controller;\n\n if (controller) {\n controller.dispose();\n controller = null;\n }\n };\n\n TreemapView.prototype._onPan = function (e) {\n if (this._state !== 'animating' && (Math.abs(e.dx) > DRAG_THRESHOLD || Math.abs(e.dy) > DRAG_THRESHOLD)) {\n // These param must not be cached.\n var root = this.seriesModel.getData().tree.root;\n\n if (!root) {\n return;\n }\n\n var rootLayout = root.getLayout();\n\n if (!rootLayout) {\n return;\n }\n\n this.api.dispatchAction({\n type: 'treemapMove',\n from: this.uid,\n seriesId: this.seriesModel.id,\n rootRect: {\n x: rootLayout.x + e.dx,\n y: rootLayout.y + e.dy,\n width: rootLayout.width,\n height: rootLayout.height\n }\n });\n }\n };\n\n TreemapView.prototype._onZoom = function (e) {\n var mouseX = e.originX;\n var mouseY = e.originY;\n\n if (this._state !== 'animating') {\n // These param must not be cached.\n var root = this.seriesModel.getData().tree.root;\n\n if (!root) {\n return;\n }\n\n var rootLayout = root.getLayout();\n\n if (!rootLayout) {\n return;\n }\n\n var rect = new BoundingRect(rootLayout.x, rootLayout.y, rootLayout.width, rootLayout.height);\n var layoutInfo = this.seriesModel.layoutInfo; // Transform mouse coord from global to containerGroup.\n\n mouseX -= layoutInfo.x;\n mouseY -= layoutInfo.y; // Scale root bounding rect.\n\n var m = matrix.create();\n matrix.translate(m, m, [-mouseX, -mouseY]);\n matrix.scale(m, m, [e.scale, e.scale]);\n matrix.translate(m, m, [mouseX, mouseY]);\n rect.applyTransform(m);\n this.api.dispatchAction({\n type: 'treemapRender',\n from: this.uid,\n seriesId: this.seriesModel.id,\n rootRect: {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n }\n });\n }\n };\n\n TreemapView.prototype._initEvents = function (containerGroup) {\n var _this = this;\n\n containerGroup.on('click', function (e) {\n if (_this._state !== 'ready') {\n return;\n }\n\n var nodeClick = _this.seriesModel.get('nodeClick', true);\n\n if (!nodeClick) {\n return;\n }\n\n var targetInfo = _this.findTarget(e.offsetX, e.offsetY);\n\n if (!targetInfo) {\n return;\n }\n\n var node = targetInfo.node;\n\n if (node.getLayout().isLeafRoot) {\n _this._rootToNode(targetInfo);\n } else {\n if (nodeClick === 'zoomToNode') {\n _this._zoomToNode(targetInfo);\n } else if (nodeClick === 'link') {\n var itemModel = node.hostTree.data.getItemModel(node.dataIndex);\n var link = itemModel.get('link', true);\n var linkTarget = itemModel.get('target', true) || 'blank';\n link && windowOpen(link, linkTarget);\n }\n }\n }, this);\n };\n\n TreemapView.prototype._renderBreadcrumb = function (seriesModel, api, targetInfo) {\n var _this = this;\n\n if (!targetInfo) {\n targetInfo = seriesModel.get('leafDepth', true) != null ? {\n node: seriesModel.getViewRoot()\n } // FIXME\n // better way?\n // Find breadcrumb tail on center of containerGroup.\n : this.findTarget(api.getWidth() / 2, api.getHeight() / 2);\n\n if (!targetInfo) {\n targetInfo = {\n node: seriesModel.getData().tree.root\n };\n }\n }\n\n (this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group))).render(seriesModel, api, targetInfo.node, function (node) {\n if (_this._state !== 'animating') {\n helper.aboveViewRoot(seriesModel.getViewRoot(), node) ? _this._rootToNode({\n node: node\n }) : _this._zoomToNode({\n node: node\n });\n }\n });\n };\n /**\n * @override\n */\n\n\n TreemapView.prototype.remove = function () {\n this._clearController();\n\n this._containerGroup && this._containerGroup.removeAll();\n this._storage = createStorage();\n this._state = 'ready';\n this._breadcrumb && this._breadcrumb.remove();\n };\n\n TreemapView.prototype.dispose = function () {\n this._clearController();\n };\n\n TreemapView.prototype._zoomToNode = function (targetInfo) {\n this.api.dispatchAction({\n type: 'treemapZoomToNode',\n from: this.uid,\n seriesId: this.seriesModel.id,\n targetNode: targetInfo.node\n });\n };\n\n TreemapView.prototype._rootToNode = function (targetInfo) {\n this.api.dispatchAction({\n type: 'treemapRootToNode',\n from: this.uid,\n seriesId: this.seriesModel.id,\n targetNode: targetInfo.node\n });\n };\n /**\n * @public\n * @param {number} x Global coord x.\n * @param {number} y Global coord y.\n * @return {Object} info If not found, return undefined;\n * @return {number} info.node Target node.\n * @return {number} info.offsetX x refer to target node.\n * @return {number} info.offsetY y refer to target node.\n */\n\n\n TreemapView.prototype.findTarget = function (x, y) {\n var targetInfo;\n var viewRoot = this.seriesModel.getViewRoot();\n viewRoot.eachNode({\n attr: 'viewChildren',\n order: 'preorder'\n }, function (node) {\n var bgEl = this._storage.background[node.getRawIndex()]; // If invisible, there might be no element.\n\n\n if (bgEl) {\n var point = bgEl.transformCoordToLocal(x, y);\n var shape = bgEl.shape; // For performance consideration, don't use 'getBoundingRect'.\n\n if (shape.x <= point[0] && point[0] <= shape.x + shape.width && shape.y <= point[1] && point[1] <= shape.y + shape.height) {\n targetInfo = {\n node: node,\n offsetX: point[0],\n offsetY: point[1]\n };\n } else {\n return false; // Suppress visit subtree.\n }\n }\n }, this);\n return targetInfo;\n };\n\n TreemapView.type = 'treemap';\n return TreemapView;\n}(ChartView);\n/**\n * @inner\n */\n\n\nfunction createStorage() {\n return {\n nodeGroup: [],\n background: [],\n content: []\n };\n}\n/**\n * @inner\n * @return Return undefined means do not travel further.\n */\n\n\nfunction renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth) {\n // Whether under viewRoot.\n if (!thisNode) {\n // Deleting nodes will be performed finally. This method just find\n // element from old storage, or create new element, set them to new\n // storage, and set styles.\n return;\n } // -------------------------------------------------------------------\n // Start of closure variables available in \"Procedures in renderNode\".\n\n\n var thisLayout = thisNode.getLayout();\n var data = seriesModel.getData();\n var nodeModel = thisNode.getModel(); // Only for enabling highlight/downplay. Clear firstly.\n // Because some node will not be rendered.\n\n data.setItemGraphicEl(thisNode.dataIndex, null);\n\n if (!thisLayout || !thisLayout.isInView) {\n return;\n }\n\n var thisWidth = thisLayout.width;\n var thisHeight = thisLayout.height;\n var borderWidth = thisLayout.borderWidth;\n var thisInvisible = thisLayout.invisible;\n var thisRawIndex = thisNode.getRawIndex();\n var oldRawIndex = oldNode && oldNode.getRawIndex();\n var thisViewChildren = thisNode.viewChildren;\n var upperHeight = thisLayout.upperHeight;\n var isParent = thisViewChildren && thisViewChildren.length;\n var itemStyleNormalModel = nodeModel.getModel('itemStyle');\n var itemStyleEmphasisModel = nodeModel.getModel(['emphasis', 'itemStyle']);\n var itemStyleBlurModel = nodeModel.getModel(['blur', 'itemStyle']);\n var itemStyleSelectModel = nodeModel.getModel(['select', 'itemStyle']);\n var borderRadius = itemStyleNormalModel.get('borderRadius') || 0; // End of closure ariables available in \"Procedures in renderNode\".\n // -----------------------------------------------------------------\n // Node group\n\n var group = giveGraphic('nodeGroup', Group);\n\n if (!group) {\n return;\n }\n\n parentGroup.add(group); // x,y are not set when el is above view root.\n\n group.x = thisLayout.x || 0;\n group.y = thisLayout.y || 0;\n group.markRedraw();\n inner(group).nodeWidth = thisWidth;\n inner(group).nodeHeight = thisHeight;\n\n if (thisLayout.isAboveViewRoot) {\n return group;\n } // Background\n\n\n var bg = giveGraphic('background', Rect, depth, Z2_BG);\n bg && renderBackground(group, bg, isParent && thisLayout.upperLabelHeight);\n var emphasisModel = nodeModel.getModel('emphasis');\n var focus = emphasisModel.get('focus');\n var blurScope = emphasisModel.get('blurScope');\n var isDisabled = emphasisModel.get('disabled');\n var focusOrIndices = focus === 'ancestor' ? thisNode.getAncestorsIndices() : focus === 'descendant' ? thisNode.getDescendantIndices() : focus; // No children, render content.\n\n if (isParent) {\n // Because of the implementation about \"traverse\" in graphic hover style, we\n // can not set hover listener on the \"group\" of non-leaf node. Otherwise the\n // hover event from the descendents will be listenered.\n if (isHighDownDispatcher(group)) {\n setAsHighDownDispatcher(group, false);\n }\n\n if (bg) {\n setAsHighDownDispatcher(bg, !isDisabled); // Only for enabling highlight/downplay.\n\n data.setItemGraphicEl(thisNode.dataIndex, bg);\n enableHoverFocus(bg, focusOrIndices, blurScope);\n }\n } else {\n var content = giveGraphic('content', Rect, depth, Z2_CONTENT);\n content && renderContent(group, content);\n bg.disableMorphing = true;\n\n if (bg && isHighDownDispatcher(bg)) {\n setAsHighDownDispatcher(bg, false);\n }\n\n setAsHighDownDispatcher(group, !isDisabled); // Only for enabling highlight/downplay.\n\n data.setItemGraphicEl(thisNode.dataIndex, group);\n enableHoverFocus(group, focusOrIndices, blurScope);\n }\n\n return group; // ----------------------------\n // | Procedures in renderNode |\n // ----------------------------\n\n function renderBackground(group, bg, useUpperLabel) {\n var ecData = getECData(bg); // For tooltip.\n\n ecData.dataIndex = thisNode.dataIndex;\n ecData.seriesIndex = seriesModel.seriesIndex;\n bg.setShape({\n x: 0,\n y: 0,\n width: thisWidth,\n height: thisHeight,\n r: borderRadius\n });\n\n if (thisInvisible) {\n // If invisible, do not set visual, otherwise the element will\n // change immediately before animation. We think it is OK to\n // remain its origin color when moving out of the view window.\n processInvisible(bg);\n } else {\n bg.invisible = false;\n var style = thisNode.getVisual('style');\n var visualBorderColor = style.stroke;\n var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n normalStyle.fill = visualBorderColor;\n var emphasisStyle = getStateItemStyle(itemStyleEmphasisModel);\n emphasisStyle.fill = itemStyleEmphasisModel.get('borderColor');\n var blurStyle = getStateItemStyle(itemStyleBlurModel);\n blurStyle.fill = itemStyleBlurModel.get('borderColor');\n var selectStyle = getStateItemStyle(itemStyleSelectModel);\n selectStyle.fill = itemStyleSelectModel.get('borderColor');\n\n if (useUpperLabel) {\n var upperLabelWidth = thisWidth - 2 * borderWidth;\n prepareText( // PENDING: convert ZRColor to ColorString for text.\n bg, visualBorderColor, style.opacity, {\n x: borderWidth,\n y: 0,\n width: upperLabelWidth,\n height: upperHeight\n });\n } // For old bg.\n else {\n bg.removeTextContent();\n }\n\n bg.setStyle(normalStyle);\n bg.ensureState('emphasis').style = emphasisStyle;\n bg.ensureState('blur').style = blurStyle;\n bg.ensureState('select').style = selectStyle;\n setDefaultStateProxy(bg);\n }\n\n group.add(bg);\n }\n\n function renderContent(group, content) {\n var ecData = getECData(content); // For tooltip.\n\n ecData.dataIndex = thisNode.dataIndex;\n ecData.seriesIndex = seriesModel.seriesIndex;\n var contentWidth = Math.max(thisWidth - 2 * borderWidth, 0);\n var contentHeight = Math.max(thisHeight - 2 * borderWidth, 0);\n content.culling = true;\n content.setShape({\n x: borderWidth,\n y: borderWidth,\n width: contentWidth,\n height: contentHeight,\n r: borderRadius\n });\n\n if (thisInvisible) {\n // If invisible, do not set visual, otherwise the element will\n // change immediately before animation. We think it is OK to\n // remain its origin color when moving out of the view window.\n processInvisible(content);\n } else {\n content.invisible = false;\n var nodeStyle = thisNode.getVisual('style');\n var visualColor = nodeStyle.fill;\n var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n normalStyle.fill = visualColor;\n normalStyle.decal = nodeStyle.decal;\n var emphasisStyle = getStateItemStyle(itemStyleEmphasisModel);\n var blurStyle = getStateItemStyle(itemStyleBlurModel);\n var selectStyle = getStateItemStyle(itemStyleSelectModel); // PENDING: convert ZRColor to ColorString for text.\n\n prepareText(content, visualColor, nodeStyle.opacity, null);\n content.setStyle(normalStyle);\n content.ensureState('emphasis').style = emphasisStyle;\n content.ensureState('blur').style = blurStyle;\n content.ensureState('select').style = selectStyle;\n setDefaultStateProxy(content);\n }\n\n group.add(content);\n }\n\n function processInvisible(element) {\n // Delay invisible setting utill animation finished,\n // avoid element vanish suddenly before animation.\n !element.invisible && willInvisibleEls.push(element);\n }\n\n function prepareText(rectEl, visualColor, visualOpacity, // Can be null/undefined\n upperLabelRect) {\n var normalLabelModel = nodeModel.getModel(upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL);\n var defaultText = convertOptionIdName(nodeModel.get('name'), null);\n var isShow = normalLabelModel.getShallow('show');\n setLabelStyle(rectEl, getLabelStatesModels(nodeModel, upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL), {\n defaultText: isShow ? defaultText : null,\n inheritColor: visualColor,\n defaultOpacity: visualOpacity,\n labelFetcher: seriesModel,\n labelDataIndex: thisNode.dataIndex\n });\n var textEl = rectEl.getTextContent();\n\n if (!textEl) {\n return;\n }\n\n var textStyle = textEl.style;\n var textPadding = normalizeCssArray(textStyle.padding || 0);\n\n if (upperLabelRect) {\n rectEl.setTextConfig({\n layoutRect: upperLabelRect\n });\n textEl.disableLabelLayout = true;\n }\n\n textEl.beforeUpdate = function () {\n var width = Math.max((upperLabelRect ? upperLabelRect.width : rectEl.shape.width) - textPadding[1] - textPadding[3], 0);\n var height = Math.max((upperLabelRect ? upperLabelRect.height : rectEl.shape.height) - textPadding[0] - textPadding[2], 0);\n\n if (textStyle.width !== width || textStyle.height !== height) {\n textEl.setStyle({\n width: width,\n height: height\n });\n }\n };\n\n textStyle.truncateMinChar = 2;\n textStyle.lineOverflow = 'truncate';\n addDrillDownIcon(textStyle, upperLabelRect, thisLayout);\n var textEmphasisState = textEl.getState('emphasis');\n addDrillDownIcon(textEmphasisState ? textEmphasisState.style : null, upperLabelRect, thisLayout);\n }\n\n function addDrillDownIcon(style, upperLabelRect, thisLayout) {\n var text = style ? style.text : null;\n\n if (!upperLabelRect && thisLayout.isLeafRoot && text != null) {\n var iconChar = seriesModel.get('drillDownIcon', true);\n style.text = iconChar ? iconChar + ' ' + text : text;\n }\n }\n\n function giveGraphic(storageName, Ctor, depth, z) {\n var element = oldRawIndex != null && oldStorage[storageName][oldRawIndex];\n var lasts = lastsForAnimation[storageName];\n\n if (element) {\n // Remove from oldStorage\n oldStorage[storageName][oldRawIndex] = null;\n prepareAnimationWhenHasOld(lasts, element);\n } // If invisible and no old element, do not create new element (for optimizing).\n else if (!thisInvisible) {\n element = new Ctor();\n\n if (element instanceof Displayable) {\n element.z2 = calculateZ2(depth, z);\n }\n\n prepareAnimationWhenNoOld(lasts, element);\n } // Set to thisStorage\n\n\n return thisStorage[storageName][thisRawIndex] = element;\n }\n\n function prepareAnimationWhenHasOld(lasts, element) {\n var lastCfg = lasts[thisRawIndex] = {};\n\n if (element instanceof Group) {\n lastCfg.oldX = element.x;\n lastCfg.oldY = element.y;\n } else {\n lastCfg.oldShape = extend({}, element.shape);\n }\n } // If a element is new, we need to find the animation start point carefully,\n // otherwise it will looks strange when 'zoomToNode'.\n\n\n function prepareAnimationWhenNoOld(lasts, element) {\n var lastCfg = lasts[thisRawIndex] = {};\n var parentNode = thisNode.parentNode;\n var isGroup = element instanceof graphic.Group;\n\n if (parentNode && (!reRoot || reRoot.direction === 'drillDown')) {\n var parentOldX = 0;\n var parentOldY = 0; // New nodes appear from right-bottom corner in 'zoomToNode' animation.\n // For convenience, get old bounding rect from background.\n\n var parentOldBg = lastsForAnimation.background[parentNode.getRawIndex()];\n\n if (!reRoot && parentOldBg && parentOldBg.oldShape) {\n parentOldX = parentOldBg.oldShape.width;\n parentOldY = parentOldBg.oldShape.height;\n } // When no parent old shape found, its parent is new too,\n // so we can just use {x:0, y:0}.\n\n\n if (isGroup) {\n lastCfg.oldX = 0;\n lastCfg.oldY = parentOldY;\n } else {\n lastCfg.oldShape = {\n x: parentOldX,\n y: parentOldY,\n width: 0,\n height: 0\n };\n }\n } // Fade in, user can be aware that these nodes are new.\n\n\n lastCfg.fadein = !isGroup;\n }\n} // We cannot set all background with the same z, because the behaviour of\n// drill down and roll up differ background creation sequence from tree\n// hierarchy sequence, which cause lower background elements to overlap\n// upper ones. So we calculate z based on depth.\n// Moreover, we try to shrink down z interval to [0, 1] to avoid that\n// treemap with large z overlaps other components.\n\n\nfunction calculateZ2(depth, z2InLevel) {\n return depth * Z2_BASE + z2InLevel;\n}\n\nexport default TreemapView;"]},"metadata":{},"sourceType":"module"} |