1 line
57 KiB
JSON
1 line
57 KiB
JSON
{"ast":null,"code":"import \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.array.splice.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\n/*\n* A third-party license is embedded for some of the code in this file:\n* The treemap layout implementation was originally copied from\n* \"d3.js\" with some modifications made for this project.\n* (See more details in the comment of the method \"squarify\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport { parsePercent, MAX_SAFE_INTEGER } from '../../util/number.js';\nimport * as layout from '../../util/layout.js';\nimport * as helper from '../helper/treeHelper.js';\nvar mathMax = Math.max;\nvar mathMin = Math.min;\nvar retrieveValue = zrUtil.retrieve;\nvar each = zrUtil.each;\nvar PATH_BORDER_WIDTH = ['itemStyle', 'borderWidth'];\nvar PATH_GAP_WIDTH = ['itemStyle', 'gapWidth'];\nvar PATH_UPPER_LABEL_SHOW = ['upperLabel', 'show'];\nvar PATH_UPPER_LABEL_HEIGHT = ['upperLabel', 'height'];\n;\n/**\n * @public\n */\n\nexport default {\n seriesType: 'treemap',\n reset: function reset(seriesModel, ecModel, api, payload) {\n // Layout result in each node:\n // {x, y, width, height, area, borderWidth}\n var ecWidth = api.getWidth();\n var ecHeight = api.getHeight();\n var seriesOption = seriesModel.option;\n var layoutInfo = layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n var size = seriesOption.size || []; // Compatible with ec2.\n\n var containerWidth = parsePercent(retrieveValue(layoutInfo.width, size[0]), ecWidth);\n var containerHeight = parsePercent(retrieveValue(layoutInfo.height, size[1]), ecHeight); // Fetch payload info.\n\n var payloadType = payload && payload.type;\n var types = ['treemapZoomToNode', 'treemapRootToNode'];\n var targetInfo = helper.retrieveTargetInfo(payload, types, seriesModel);\n var rootRect = payloadType === 'treemapRender' || payloadType === 'treemapMove' ? payload.rootRect : null;\n var viewRoot = seriesModel.getViewRoot();\n var viewAbovePath = helper.getPathToRoot(viewRoot);\n\n if (payloadType !== 'treemapMove') {\n var rootSize = payloadType === 'treemapZoomToNode' ? estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) : rootRect ? [rootRect.width, rootRect.height] : [containerWidth, containerHeight];\n var sort_1 = seriesOption.sort;\n\n if (sort_1 && sort_1 !== 'asc' && sort_1 !== 'desc') {\n // Default to be desc order.\n sort_1 = 'desc';\n }\n\n var options = {\n squareRatio: seriesOption.squareRatio,\n sort: sort_1,\n leafDepth: seriesOption.leafDepth\n }; // layout should be cleared because using updateView but not update.\n\n viewRoot.hostTree.clearLayouts(); // TODO\n // optimize: if out of view clip, do not layout.\n // But take care that if do not render node out of view clip,\n // how to calculate start po\n\n var viewRootLayout_1 = {\n x: 0,\n y: 0,\n width: rootSize[0],\n height: rootSize[1],\n area: rootSize[0] * rootSize[1]\n };\n viewRoot.setLayout(viewRootLayout_1);\n squarify(viewRoot, options, false, 0); // Supplement layout.\n\n viewRootLayout_1 = viewRoot.getLayout();\n each(viewAbovePath, function (node, index) {\n var childValue = (viewAbovePath[index + 1] || viewRoot).getValue();\n node.setLayout(zrUtil.extend({\n dataExtent: [childValue, childValue],\n borderWidth: 0,\n upperHeight: 0\n }, viewRootLayout_1));\n });\n }\n\n var treeRoot = seriesModel.getData().tree.root;\n treeRoot.setLayout(calculateRootPosition(layoutInfo, rootRect, targetInfo), true);\n seriesModel.setLayoutInfo(layoutInfo); // FIXME\n // 现在没有clip功能,暂时取ec高宽。\n\n prunning(treeRoot, // Transform to base element coordinate system.\n new BoundingRect(-layoutInfo.x, -layoutInfo.y, ecWidth, ecHeight), viewAbovePath, viewRoot, 0);\n }\n};\n/**\n * Layout treemap with squarify algorithm.\n * The original presentation of this algorithm\n * was made by Mark Bruls, Kees Huizing, and Jarke J. van Wijk\n * <https://graphics.ethz.ch/teaching/scivis_common/Literature/squarifiedTreeMaps.pdf>.\n * The implementation of this algorithm was originally copied from \"d3.js\"\n * <https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/layout/treemap.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * @protected\n * @param {module:echarts/data/Tree~TreeNode} node\n * @param {Object} options\n * @param {string} options.sort 'asc' or 'desc'\n * @param {number} options.squareRatio\n * @param {boolean} hideChildren\n * @param {number} depth\n */\n\nfunction squarify(node, options, hideChildren, depth) {\n var width;\n var height;\n\n if (node.isRemoved()) {\n return;\n }\n\n var thisLayout = node.getLayout();\n width = thisLayout.width;\n height = thisLayout.height; // Considering border and gap\n\n var nodeModel = node.getModel();\n var borderWidth = nodeModel.get(PATH_BORDER_WIDTH);\n var halfGapWidth = nodeModel.get(PATH_GAP_WIDTH) / 2;\n var upperLabelHeight = getUpperLabelHeight(nodeModel);\n var upperHeight = Math.max(borderWidth, upperLabelHeight);\n var layoutOffset = borderWidth - halfGapWidth;\n var layoutOffsetUpper = upperHeight - halfGapWidth;\n node.setLayout({\n borderWidth: borderWidth,\n upperHeight: upperHeight,\n upperLabelHeight: upperLabelHeight\n }, true);\n width = mathMax(width - 2 * layoutOffset, 0);\n height = mathMax(height - layoutOffset - layoutOffsetUpper, 0);\n var totalArea = width * height;\n var viewChildren = initChildren(node, nodeModel, totalArea, options, hideChildren, depth);\n\n if (!viewChildren.length) {\n return;\n }\n\n var rect = {\n x: layoutOffset,\n y: layoutOffsetUpper,\n width: width,\n height: height\n };\n var rowFixedLength = mathMin(width, height);\n var best = Infinity; // the best row score so far\n\n var row = [];\n row.area = 0;\n\n for (var i = 0, len = viewChildren.length; i < len;) {\n var child = viewChildren[i];\n row.push(child);\n row.area += child.getLayout().area;\n var score = worst(row, rowFixedLength, options.squareRatio); // continue with this orientation\n\n if (score <= best) {\n i++;\n best = score;\n } // abort, and try a different orientation\n else {\n row.area -= row.pop().getLayout().area;\n position(row, rowFixedLength, rect, halfGapWidth, false);\n rowFixedLength = mathMin(rect.width, rect.height);\n row.length = row.area = 0;\n best = Infinity;\n }\n }\n\n if (row.length) {\n position(row, rowFixedLength, rect, halfGapWidth, true);\n }\n\n if (!hideChildren) {\n var childrenVisibleMin = nodeModel.get('childrenVisibleMin');\n\n if (childrenVisibleMin != null && totalArea < childrenVisibleMin) {\n hideChildren = true;\n }\n }\n\n for (var i = 0, len = viewChildren.length; i < len; i++) {\n squarify(viewChildren[i], options, hideChildren, depth + 1);\n }\n}\n/**\n * Set area to each child, and calculate data extent for visual coding.\n */\n\n\nfunction initChildren(node, nodeModel, totalArea, options, hideChildren, depth) {\n var viewChildren = node.children || [];\n var orderBy = options.sort;\n orderBy !== 'asc' && orderBy !== 'desc' && (orderBy = null);\n var overLeafDepth = options.leafDepth != null && options.leafDepth <= depth; // leafDepth has higher priority.\n\n if (hideChildren && !overLeafDepth) {\n return node.viewChildren = [];\n } // Sort children, order by desc.\n\n\n viewChildren = zrUtil.filter(viewChildren, function (child) {\n return !child.isRemoved();\n });\n sort(viewChildren, orderBy);\n var info = statistic(nodeModel, viewChildren, orderBy);\n\n if (info.sum === 0) {\n return node.viewChildren = [];\n }\n\n info.sum = filterByThreshold(nodeModel, totalArea, info.sum, orderBy, viewChildren);\n\n if (info.sum === 0) {\n return node.viewChildren = [];\n } // Set area to each child.\n\n\n for (var i = 0, len = viewChildren.length; i < len; i++) {\n var area = viewChildren[i].getValue() / info.sum * totalArea; // Do not use setLayout({...}, true), because it is needed to clear last layout.\n\n viewChildren[i].setLayout({\n area: area\n });\n }\n\n if (overLeafDepth) {\n viewChildren.length && node.setLayout({\n isLeafRoot: true\n }, true);\n viewChildren.length = 0;\n }\n\n node.viewChildren = viewChildren;\n node.setLayout({\n dataExtent: info.dataExtent\n }, true);\n return viewChildren;\n}\n/**\n * Consider 'visibleMin'. Modify viewChildren and get new sum.\n */\n\n\nfunction filterByThreshold(nodeModel, totalArea, sum, orderBy, orderedChildren) {\n // visibleMin is not supported yet when no option.sort.\n if (!orderBy) {\n return sum;\n }\n\n var visibleMin = nodeModel.get('visibleMin');\n var len = orderedChildren.length;\n var deletePoint = len; // Always travel from little value to big value.\n\n for (var i = len - 1; i >= 0; i--) {\n var value = orderedChildren[orderBy === 'asc' ? len - i - 1 : i].getValue();\n\n if (value / sum * totalArea < visibleMin) {\n deletePoint = i;\n sum -= value;\n }\n }\n\n orderBy === 'asc' ? orderedChildren.splice(0, len - deletePoint) : orderedChildren.splice(deletePoint, len - deletePoint);\n return sum;\n}\n/**\n * Sort\n */\n\n\nfunction sort(viewChildren, orderBy) {\n if (orderBy) {\n viewChildren.sort(function (a, b) {\n var diff = orderBy === 'asc' ? a.getValue() - b.getValue() : b.getValue() - a.getValue();\n return diff === 0 ? orderBy === 'asc' ? a.dataIndex - b.dataIndex : b.dataIndex - a.dataIndex : diff;\n });\n }\n\n return viewChildren;\n}\n/**\n * Statistic\n */\n\n\nfunction statistic(nodeModel, children, orderBy) {\n // Calculate sum.\n var sum = 0;\n\n for (var i = 0, len = children.length; i < len; i++) {\n sum += children[i].getValue();\n } // Statistic data extent for latter visual coding.\n // Notice: data extent should be calculate based on raw children\n // but not filtered view children, otherwise visual mapping will not\n // be stable when zoom (where children is filtered by visibleMin).\n\n\n var dimension = nodeModel.get('visualDimension');\n var dataExtent; // The same as area dimension.\n\n if (!children || !children.length) {\n dataExtent = [NaN, NaN];\n } else if (dimension === 'value' && orderBy) {\n dataExtent = [children[children.length - 1].getValue(), children[0].getValue()];\n orderBy === 'asc' && dataExtent.reverse();\n } // Other dimension.\n else {\n dataExtent = [Infinity, -Infinity];\n each(children, function (child) {\n var value = child.getValue(dimension);\n value < dataExtent[0] && (dataExtent[0] = value);\n value > dataExtent[1] && (dataExtent[1] = value);\n });\n }\n\n return {\n sum: sum,\n dataExtent: dataExtent\n };\n}\n/**\n * Computes the score for the specified row,\n * as the worst aspect ratio.\n */\n\n\nfunction worst(row, rowFixedLength, ratio) {\n var areaMax = 0;\n var areaMin = Infinity;\n\n for (var i = 0, area = void 0, len = row.length; i < len; i++) {\n area = row[i].getLayout().area;\n\n if (area) {\n area < areaMin && (areaMin = area);\n area > areaMax && (areaMax = area);\n }\n }\n\n var squareArea = row.area * row.area;\n var f = rowFixedLength * rowFixedLength * ratio;\n return squareArea ? mathMax(f * areaMax / squareArea, squareArea / (f * areaMin)) : Infinity;\n}\n/**\n * Positions the specified row of nodes. Modifies `rect`.\n */\n\n\nfunction position(row, rowFixedLength, rect, halfGapWidth, flush) {\n // When rowFixedLength === rect.width,\n // it is horizontal subdivision,\n // rowFixedLength is the width of the subdivision,\n // rowOtherLength is the height of the subdivision,\n // and nodes will be positioned from left to right.\n // wh[idx0WhenH] means: when horizontal,\n // wh[idx0WhenH] => wh[0] => 'width'.\n // xy[idx1WhenH] => xy[1] => 'y'.\n var idx0WhenH = rowFixedLength === rect.width ? 0 : 1;\n var idx1WhenH = 1 - idx0WhenH;\n var xy = ['x', 'y'];\n var wh = ['width', 'height'];\n var last = rect[xy[idx0WhenH]];\n var rowOtherLength = rowFixedLength ? row.area / rowFixedLength : 0;\n\n if (flush || rowOtherLength > rect[wh[idx1WhenH]]) {\n rowOtherLength = rect[wh[idx1WhenH]]; // over+underflow\n }\n\n for (var i = 0, rowLen = row.length; i < rowLen; i++) {\n var node = row[i];\n var nodeLayout = {};\n var step = rowOtherLength ? node.getLayout().area / rowOtherLength : 0;\n var wh1 = nodeLayout[wh[idx1WhenH]] = mathMax(rowOtherLength - 2 * halfGapWidth, 0); // We use Math.max/min to avoid negative width/height when considering gap width.\n\n var remain = rect[xy[idx0WhenH]] + rect[wh[idx0WhenH]] - last;\n var modWH = i === rowLen - 1 || remain < step ? remain : step;\n var wh0 = nodeLayout[wh[idx0WhenH]] = mathMax(modWH - 2 * halfGapWidth, 0);\n nodeLayout[xy[idx1WhenH]] = rect[xy[idx1WhenH]] + mathMin(halfGapWidth, wh1 / 2);\n nodeLayout[xy[idx0WhenH]] = last + mathMin(halfGapWidth, wh0 / 2);\n last += modWH;\n node.setLayout(nodeLayout, true);\n }\n\n rect[xy[idx1WhenH]] += rowOtherLength;\n rect[wh[idx1WhenH]] -= rowOtherLength;\n} // Return [containerWidth, containerHeight] as default.\n\n\nfunction estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) {\n // If targetInfo.node exists, we zoom to the node,\n // so estimate whole width and height by target node.\n var currNode = (targetInfo || {}).node;\n var defaultSize = [containerWidth, containerHeight];\n\n if (!currNode || currNode === viewRoot) {\n return defaultSize;\n }\n\n var parent;\n var viewArea = containerWidth * containerHeight;\n var area = viewArea * seriesModel.option.zoomToNodeRatio;\n\n while (parent = currNode.parentNode) {\n // jshint ignore:line\n var sum = 0;\n var siblings = parent.children;\n\n for (var i = 0, len = siblings.length; i < len; i++) {\n sum += siblings[i].getValue();\n }\n\n var currNodeValue = currNode.getValue();\n\n if (currNodeValue === 0) {\n return defaultSize;\n }\n\n area *= sum / currNodeValue; // Considering border, suppose aspect ratio is 1.\n\n var parentModel = parent.getModel();\n var borderWidth = parentModel.get(PATH_BORDER_WIDTH);\n var upperHeight = Math.max(borderWidth, getUpperLabelHeight(parentModel));\n area += 4 * borderWidth * borderWidth + (3 * borderWidth + upperHeight) * Math.pow(area, 0.5);\n area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER);\n currNode = parent;\n }\n\n area < viewArea && (area = viewArea);\n var scale = Math.pow(area / viewArea, 0.5);\n return [containerWidth * scale, containerHeight * scale];\n} // Root position based on coord of containerGroup\n\n\nfunction calculateRootPosition(layoutInfo, rootRect, targetInfo) {\n if (rootRect) {\n return {\n x: rootRect.x,\n y: rootRect.y\n };\n }\n\n var defaultPosition = {\n x: 0,\n y: 0\n };\n\n if (!targetInfo) {\n return defaultPosition;\n } // If targetInfo is fetched by 'retrieveTargetInfo',\n // old tree and new tree are the same tree,\n // so the node still exists and we can visit it.\n\n\n var targetNode = targetInfo.node;\n var layout = targetNode.getLayout();\n\n if (!layout) {\n return defaultPosition;\n } // Transform coord from local to container.\n\n\n var targetCenter = [layout.width / 2, layout.height / 2];\n var node = targetNode;\n\n while (node) {\n var nodeLayout = node.getLayout();\n targetCenter[0] += nodeLayout.x;\n targetCenter[1] += nodeLayout.y;\n node = node.parentNode;\n }\n\n return {\n x: layoutInfo.width / 2 - targetCenter[0],\n y: layoutInfo.height / 2 - targetCenter[1]\n };\n} // Mark nodes visible for prunning when visual coding and rendering.\n// Prunning depends on layout and root position, so we have to do it after layout.\n\n\nfunction prunning(node, clipRect, viewAbovePath, viewRoot, depth) {\n var nodeLayout = node.getLayout();\n var nodeInViewAbovePath = viewAbovePath[depth];\n var isAboveViewRoot = nodeInViewAbovePath && nodeInViewAbovePath === node;\n\n if (nodeInViewAbovePath && !isAboveViewRoot || depth === viewAbovePath.length && node !== viewRoot) {\n return;\n }\n\n node.setLayout({\n // isInView means: viewRoot sub tree + viewAbovePath\n isInView: true,\n // invisible only means: outside view clip so that the node can not\n // see but still layout for animation preparation but not render.\n invisible: !isAboveViewRoot && !clipRect.intersect(nodeLayout),\n isAboveViewRoot: isAboveViewRoot\n }, true); // Transform to child coordinate.\n\n var childClipRect = new BoundingRect(clipRect.x - nodeLayout.x, clipRect.y - nodeLayout.y, clipRect.width, clipRect.height);\n each(node.viewChildren || [], function (child) {\n prunning(child, childClipRect, viewAbovePath, viewRoot, depth + 1);\n });\n}\n\nfunction getUpperLabelHeight(model) {\n return model.get(PATH_UPPER_LABEL_SHOW) ? model.get(PATH_UPPER_LABEL_HEIGHT) : 0;\n}","map":{"version":3,"sources":["D:/Work/WorkSpace/GitWorkSpace/TenShop/resource/ElectronicMall/src/ElectronicMallVue/node_modules/echarts/lib/chart/treemap/treemapLayout.js"],"names":["zrUtil","BoundingRect","parsePercent","MAX_SAFE_INTEGER","layout","helper","mathMax","Math","max","mathMin","min","retrieveValue","retrieve","each","PATH_BORDER_WIDTH","PATH_GAP_WIDTH","PATH_UPPER_LABEL_SHOW","PATH_UPPER_LABEL_HEIGHT","seriesType","reset","seriesModel","ecModel","api","payload","ecWidth","getWidth","ecHeight","getHeight","seriesOption","option","layoutInfo","getLayoutRect","getBoxLayoutParams","width","height","size","containerWidth","containerHeight","payloadType","type","types","targetInfo","retrieveTargetInfo","rootRect","viewRoot","getViewRoot","viewAbovePath","getPathToRoot","rootSize","estimateRootSize","sort_1","sort","options","squareRatio","leafDepth","hostTree","clearLayouts","viewRootLayout_1","x","y","area","setLayout","squarify","getLayout","node","index","childValue","getValue","extend","dataExtent","borderWidth","upperHeight","treeRoot","getData","tree","root","calculateRootPosition","setLayoutInfo","prunning","hideChildren","depth","isRemoved","thisLayout","nodeModel","getModel","get","halfGapWidth","upperLabelHeight","getUpperLabelHeight","layoutOffset","layoutOffsetUpper","totalArea","viewChildren","initChildren","length","rect","rowFixedLength","best","Infinity","row","i","len","child","push","score","worst","pop","position","childrenVisibleMin","children","orderBy","overLeafDepth","filter","info","statistic","sum","filterByThreshold","isLeafRoot","orderedChildren","visibleMin","deletePoint","value","splice","a","b","diff","dataIndex","dimension","NaN","reverse","ratio","areaMax","areaMin","squareArea","f","flush","idx0WhenH","idx1WhenH","xy","wh","last","rowOtherLength","rowLen","nodeLayout","step","wh1","remain","modWH","wh0","currNode","defaultSize","parent","viewArea","zoomToNodeRatio","parentNode","siblings","currNodeValue","parentModel","pow","scale","defaultPosition","targetNode","targetCenter","clipRect","nodeInViewAbovePath","isAboveViewRoot","isInView","invisible","intersect","childClipRect","model"],"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\n/*\n* A third-party license is embedded for some of the code in this file:\n* The treemap layout implementation was originally copied from\n* \"d3.js\" with some modifications made for this project.\n* (See more details in the comment of the method \"squarify\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport { parsePercent, MAX_SAFE_INTEGER } from '../../util/number.js';\nimport * as layout from '../../util/layout.js';\nimport * as helper from '../helper/treeHelper.js';\nvar mathMax = Math.max;\nvar mathMin = Math.min;\nvar retrieveValue = zrUtil.retrieve;\nvar each = zrUtil.each;\nvar PATH_BORDER_WIDTH = ['itemStyle', 'borderWidth'];\nvar PATH_GAP_WIDTH = ['itemStyle', 'gapWidth'];\nvar PATH_UPPER_LABEL_SHOW = ['upperLabel', 'show'];\nvar PATH_UPPER_LABEL_HEIGHT = ['upperLabel', 'height'];\n;\n/**\n * @public\n */\n\nexport default {\n seriesType: 'treemap',\n reset: function (seriesModel, ecModel, api, payload) {\n // Layout result in each node:\n // {x, y, width, height, area, borderWidth}\n var ecWidth = api.getWidth();\n var ecHeight = api.getHeight();\n var seriesOption = seriesModel.option;\n var layoutInfo = layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n var size = seriesOption.size || []; // Compatible with ec2.\n\n var containerWidth = parsePercent(retrieveValue(layoutInfo.width, size[0]), ecWidth);\n var containerHeight = parsePercent(retrieveValue(layoutInfo.height, size[1]), ecHeight); // Fetch payload info.\n\n var payloadType = payload && payload.type;\n var types = ['treemapZoomToNode', 'treemapRootToNode'];\n var targetInfo = helper.retrieveTargetInfo(payload, types, seriesModel);\n var rootRect = payloadType === 'treemapRender' || payloadType === 'treemapMove' ? payload.rootRect : null;\n var viewRoot = seriesModel.getViewRoot();\n var viewAbovePath = helper.getPathToRoot(viewRoot);\n\n if (payloadType !== 'treemapMove') {\n var rootSize = payloadType === 'treemapZoomToNode' ? estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) : rootRect ? [rootRect.width, rootRect.height] : [containerWidth, containerHeight];\n var sort_1 = seriesOption.sort;\n\n if (sort_1 && sort_1 !== 'asc' && sort_1 !== 'desc') {\n // Default to be desc order.\n sort_1 = 'desc';\n }\n\n var options = {\n squareRatio: seriesOption.squareRatio,\n sort: sort_1,\n leafDepth: seriesOption.leafDepth\n }; // layout should be cleared because using updateView but not update.\n\n viewRoot.hostTree.clearLayouts(); // TODO\n // optimize: if out of view clip, do not layout.\n // But take care that if do not render node out of view clip,\n // how to calculate start po\n\n var viewRootLayout_1 = {\n x: 0,\n y: 0,\n width: rootSize[0],\n height: rootSize[1],\n area: rootSize[0] * rootSize[1]\n };\n viewRoot.setLayout(viewRootLayout_1);\n squarify(viewRoot, options, false, 0); // Supplement layout.\n\n viewRootLayout_1 = viewRoot.getLayout();\n each(viewAbovePath, function (node, index) {\n var childValue = (viewAbovePath[index + 1] || viewRoot).getValue();\n node.setLayout(zrUtil.extend({\n dataExtent: [childValue, childValue],\n borderWidth: 0,\n upperHeight: 0\n }, viewRootLayout_1));\n });\n }\n\n var treeRoot = seriesModel.getData().tree.root;\n treeRoot.setLayout(calculateRootPosition(layoutInfo, rootRect, targetInfo), true);\n seriesModel.setLayoutInfo(layoutInfo); // FIXME\n // 现在没有clip功能,暂时取ec高宽。\n\n prunning(treeRoot, // Transform to base element coordinate system.\n new BoundingRect(-layoutInfo.x, -layoutInfo.y, ecWidth, ecHeight), viewAbovePath, viewRoot, 0);\n }\n};\n/**\n * Layout treemap with squarify algorithm.\n * The original presentation of this algorithm\n * was made by Mark Bruls, Kees Huizing, and Jarke J. van Wijk\n * <https://graphics.ethz.ch/teaching/scivis_common/Literature/squarifiedTreeMaps.pdf>.\n * The implementation of this algorithm was originally copied from \"d3.js\"\n * <https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/layout/treemap.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * @protected\n * @param {module:echarts/data/Tree~TreeNode} node\n * @param {Object} options\n * @param {string} options.sort 'asc' or 'desc'\n * @param {number} options.squareRatio\n * @param {boolean} hideChildren\n * @param {number} depth\n */\n\nfunction squarify(node, options, hideChildren, depth) {\n var width;\n var height;\n\n if (node.isRemoved()) {\n return;\n }\n\n var thisLayout = node.getLayout();\n width = thisLayout.width;\n height = thisLayout.height; // Considering border and gap\n\n var nodeModel = node.getModel();\n var borderWidth = nodeModel.get(PATH_BORDER_WIDTH);\n var halfGapWidth = nodeModel.get(PATH_GAP_WIDTH) / 2;\n var upperLabelHeight = getUpperLabelHeight(nodeModel);\n var upperHeight = Math.max(borderWidth, upperLabelHeight);\n var layoutOffset = borderWidth - halfGapWidth;\n var layoutOffsetUpper = upperHeight - halfGapWidth;\n node.setLayout({\n borderWidth: borderWidth,\n upperHeight: upperHeight,\n upperLabelHeight: upperLabelHeight\n }, true);\n width = mathMax(width - 2 * layoutOffset, 0);\n height = mathMax(height - layoutOffset - layoutOffsetUpper, 0);\n var totalArea = width * height;\n var viewChildren = initChildren(node, nodeModel, totalArea, options, hideChildren, depth);\n\n if (!viewChildren.length) {\n return;\n }\n\n var rect = {\n x: layoutOffset,\n y: layoutOffsetUpper,\n width: width,\n height: height\n };\n var rowFixedLength = mathMin(width, height);\n var best = Infinity; // the best row score so far\n\n var row = [];\n row.area = 0;\n\n for (var i = 0, len = viewChildren.length; i < len;) {\n var child = viewChildren[i];\n row.push(child);\n row.area += child.getLayout().area;\n var score = worst(row, rowFixedLength, options.squareRatio); // continue with this orientation\n\n if (score <= best) {\n i++;\n best = score;\n } // abort, and try a different orientation\n else {\n row.area -= row.pop().getLayout().area;\n position(row, rowFixedLength, rect, halfGapWidth, false);\n rowFixedLength = mathMin(rect.width, rect.height);\n row.length = row.area = 0;\n best = Infinity;\n }\n }\n\n if (row.length) {\n position(row, rowFixedLength, rect, halfGapWidth, true);\n }\n\n if (!hideChildren) {\n var childrenVisibleMin = nodeModel.get('childrenVisibleMin');\n\n if (childrenVisibleMin != null && totalArea < childrenVisibleMin) {\n hideChildren = true;\n }\n }\n\n for (var i = 0, len = viewChildren.length; i < len; i++) {\n squarify(viewChildren[i], options, hideChildren, depth + 1);\n }\n}\n/**\n * Set area to each child, and calculate data extent for visual coding.\n */\n\n\nfunction initChildren(node, nodeModel, totalArea, options, hideChildren, depth) {\n var viewChildren = node.children || [];\n var orderBy = options.sort;\n orderBy !== 'asc' && orderBy !== 'desc' && (orderBy = null);\n var overLeafDepth = options.leafDepth != null && options.leafDepth <= depth; // leafDepth has higher priority.\n\n if (hideChildren && !overLeafDepth) {\n return node.viewChildren = [];\n } // Sort children, order by desc.\n\n\n viewChildren = zrUtil.filter(viewChildren, function (child) {\n return !child.isRemoved();\n });\n sort(viewChildren, orderBy);\n var info = statistic(nodeModel, viewChildren, orderBy);\n\n if (info.sum === 0) {\n return node.viewChildren = [];\n }\n\n info.sum = filterByThreshold(nodeModel, totalArea, info.sum, orderBy, viewChildren);\n\n if (info.sum === 0) {\n return node.viewChildren = [];\n } // Set area to each child.\n\n\n for (var i = 0, len = viewChildren.length; i < len; i++) {\n var area = viewChildren[i].getValue() / info.sum * totalArea; // Do not use setLayout({...}, true), because it is needed to clear last layout.\n\n viewChildren[i].setLayout({\n area: area\n });\n }\n\n if (overLeafDepth) {\n viewChildren.length && node.setLayout({\n isLeafRoot: true\n }, true);\n viewChildren.length = 0;\n }\n\n node.viewChildren = viewChildren;\n node.setLayout({\n dataExtent: info.dataExtent\n }, true);\n return viewChildren;\n}\n/**\n * Consider 'visibleMin'. Modify viewChildren and get new sum.\n */\n\n\nfunction filterByThreshold(nodeModel, totalArea, sum, orderBy, orderedChildren) {\n // visibleMin is not supported yet when no option.sort.\n if (!orderBy) {\n return sum;\n }\n\n var visibleMin = nodeModel.get('visibleMin');\n var len = orderedChildren.length;\n var deletePoint = len; // Always travel from little value to big value.\n\n for (var i = len - 1; i >= 0; i--) {\n var value = orderedChildren[orderBy === 'asc' ? len - i - 1 : i].getValue();\n\n if (value / sum * totalArea < visibleMin) {\n deletePoint = i;\n sum -= value;\n }\n }\n\n orderBy === 'asc' ? orderedChildren.splice(0, len - deletePoint) : orderedChildren.splice(deletePoint, len - deletePoint);\n return sum;\n}\n/**\n * Sort\n */\n\n\nfunction sort(viewChildren, orderBy) {\n if (orderBy) {\n viewChildren.sort(function (a, b) {\n var diff = orderBy === 'asc' ? a.getValue() - b.getValue() : b.getValue() - a.getValue();\n return diff === 0 ? orderBy === 'asc' ? a.dataIndex - b.dataIndex : b.dataIndex - a.dataIndex : diff;\n });\n }\n\n return viewChildren;\n}\n/**\n * Statistic\n */\n\n\nfunction statistic(nodeModel, children, orderBy) {\n // Calculate sum.\n var sum = 0;\n\n for (var i = 0, len = children.length; i < len; i++) {\n sum += children[i].getValue();\n } // Statistic data extent for latter visual coding.\n // Notice: data extent should be calculate based on raw children\n // but not filtered view children, otherwise visual mapping will not\n // be stable when zoom (where children is filtered by visibleMin).\n\n\n var dimension = nodeModel.get('visualDimension');\n var dataExtent; // The same as area dimension.\n\n if (!children || !children.length) {\n dataExtent = [NaN, NaN];\n } else if (dimension === 'value' && orderBy) {\n dataExtent = [children[children.length - 1].getValue(), children[0].getValue()];\n orderBy === 'asc' && dataExtent.reverse();\n } // Other dimension.\n else {\n dataExtent = [Infinity, -Infinity];\n each(children, function (child) {\n var value = child.getValue(dimension);\n value < dataExtent[0] && (dataExtent[0] = value);\n value > dataExtent[1] && (dataExtent[1] = value);\n });\n }\n\n return {\n sum: sum,\n dataExtent: dataExtent\n };\n}\n/**\n * Computes the score for the specified row,\n * as the worst aspect ratio.\n */\n\n\nfunction worst(row, rowFixedLength, ratio) {\n var areaMax = 0;\n var areaMin = Infinity;\n\n for (var i = 0, area = void 0, len = row.length; i < len; i++) {\n area = row[i].getLayout().area;\n\n if (area) {\n area < areaMin && (areaMin = area);\n area > areaMax && (areaMax = area);\n }\n }\n\n var squareArea = row.area * row.area;\n var f = rowFixedLength * rowFixedLength * ratio;\n return squareArea ? mathMax(f * areaMax / squareArea, squareArea / (f * areaMin)) : Infinity;\n}\n/**\n * Positions the specified row of nodes. Modifies `rect`.\n */\n\n\nfunction position(row, rowFixedLength, rect, halfGapWidth, flush) {\n // When rowFixedLength === rect.width,\n // it is horizontal subdivision,\n // rowFixedLength is the width of the subdivision,\n // rowOtherLength is the height of the subdivision,\n // and nodes will be positioned from left to right.\n // wh[idx0WhenH] means: when horizontal,\n // wh[idx0WhenH] => wh[0] => 'width'.\n // xy[idx1WhenH] => xy[1] => 'y'.\n var idx0WhenH = rowFixedLength === rect.width ? 0 : 1;\n var idx1WhenH = 1 - idx0WhenH;\n var xy = ['x', 'y'];\n var wh = ['width', 'height'];\n var last = rect[xy[idx0WhenH]];\n var rowOtherLength = rowFixedLength ? row.area / rowFixedLength : 0;\n\n if (flush || rowOtherLength > rect[wh[idx1WhenH]]) {\n rowOtherLength = rect[wh[idx1WhenH]]; // over+underflow\n }\n\n for (var i = 0, rowLen = row.length; i < rowLen; i++) {\n var node = row[i];\n var nodeLayout = {};\n var step = rowOtherLength ? node.getLayout().area / rowOtherLength : 0;\n var wh1 = nodeLayout[wh[idx1WhenH]] = mathMax(rowOtherLength - 2 * halfGapWidth, 0); // We use Math.max/min to avoid negative width/height when considering gap width.\n\n var remain = rect[xy[idx0WhenH]] + rect[wh[idx0WhenH]] - last;\n var modWH = i === rowLen - 1 || remain < step ? remain : step;\n var wh0 = nodeLayout[wh[idx0WhenH]] = mathMax(modWH - 2 * halfGapWidth, 0);\n nodeLayout[xy[idx1WhenH]] = rect[xy[idx1WhenH]] + mathMin(halfGapWidth, wh1 / 2);\n nodeLayout[xy[idx0WhenH]] = last + mathMin(halfGapWidth, wh0 / 2);\n last += modWH;\n node.setLayout(nodeLayout, true);\n }\n\n rect[xy[idx1WhenH]] += rowOtherLength;\n rect[wh[idx1WhenH]] -= rowOtherLength;\n} // Return [containerWidth, containerHeight] as default.\n\n\nfunction estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) {\n // If targetInfo.node exists, we zoom to the node,\n // so estimate whole width and height by target node.\n var currNode = (targetInfo || {}).node;\n var defaultSize = [containerWidth, containerHeight];\n\n if (!currNode || currNode === viewRoot) {\n return defaultSize;\n }\n\n var parent;\n var viewArea = containerWidth * containerHeight;\n var area = viewArea * seriesModel.option.zoomToNodeRatio;\n\n while (parent = currNode.parentNode) {\n // jshint ignore:line\n var sum = 0;\n var siblings = parent.children;\n\n for (var i = 0, len = siblings.length; i < len; i++) {\n sum += siblings[i].getValue();\n }\n\n var currNodeValue = currNode.getValue();\n\n if (currNodeValue === 0) {\n return defaultSize;\n }\n\n area *= sum / currNodeValue; // Considering border, suppose aspect ratio is 1.\n\n var parentModel = parent.getModel();\n var borderWidth = parentModel.get(PATH_BORDER_WIDTH);\n var upperHeight = Math.max(borderWidth, getUpperLabelHeight(parentModel));\n area += 4 * borderWidth * borderWidth + (3 * borderWidth + upperHeight) * Math.pow(area, 0.5);\n area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER);\n currNode = parent;\n }\n\n area < viewArea && (area = viewArea);\n var scale = Math.pow(area / viewArea, 0.5);\n return [containerWidth * scale, containerHeight * scale];\n} // Root position based on coord of containerGroup\n\n\nfunction calculateRootPosition(layoutInfo, rootRect, targetInfo) {\n if (rootRect) {\n return {\n x: rootRect.x,\n y: rootRect.y\n };\n }\n\n var defaultPosition = {\n x: 0,\n y: 0\n };\n\n if (!targetInfo) {\n return defaultPosition;\n } // If targetInfo is fetched by 'retrieveTargetInfo',\n // old tree and new tree are the same tree,\n // so the node still exists and we can visit it.\n\n\n var targetNode = targetInfo.node;\n var layout = targetNode.getLayout();\n\n if (!layout) {\n return defaultPosition;\n } // Transform coord from local to container.\n\n\n var targetCenter = [layout.width / 2, layout.height / 2];\n var node = targetNode;\n\n while (node) {\n var nodeLayout = node.getLayout();\n targetCenter[0] += nodeLayout.x;\n targetCenter[1] += nodeLayout.y;\n node = node.parentNode;\n }\n\n return {\n x: layoutInfo.width / 2 - targetCenter[0],\n y: layoutInfo.height / 2 - targetCenter[1]\n };\n} // Mark nodes visible for prunning when visual coding and rendering.\n// Prunning depends on layout and root position, so we have to do it after layout.\n\n\nfunction prunning(node, clipRect, viewAbovePath, viewRoot, depth) {\n var nodeLayout = node.getLayout();\n var nodeInViewAbovePath = viewAbovePath[depth];\n var isAboveViewRoot = nodeInViewAbovePath && nodeInViewAbovePath === node;\n\n if (nodeInViewAbovePath && !isAboveViewRoot || depth === viewAbovePath.length && node !== viewRoot) {\n return;\n }\n\n node.setLayout({\n // isInView means: viewRoot sub tree + viewAbovePath\n isInView: true,\n // invisible only means: outside view clip so that the node can not\n // see but still layout for animation preparation but not render.\n invisible: !isAboveViewRoot && !clipRect.intersect(nodeLayout),\n isAboveViewRoot: isAboveViewRoot\n }, true); // Transform to child coordinate.\n\n var childClipRect = new BoundingRect(clipRect.x - nodeLayout.x, clipRect.y - nodeLayout.y, clipRect.width, clipRect.height);\n each(node.viewChildren || [], function (child) {\n prunning(child, childClipRect, viewAbovePath, viewRoot, depth + 1);\n });\n}\n\nfunction getUpperLabelHeight(model) {\n return model.get(PATH_UPPER_LABEL_SHOW) ? model.get(PATH_UPPER_LABEL_HEIGHT) : 0;\n}"]},"metadata":{},"sourceType":"module"} |