/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import { __extends } from "tslib"; import * as zrUtil from 'zrender/lib/core/util.js'; import SeriesModel from '../../model/Series.js'; import Tree from '../../data/Tree.js'; import Model from '../../model/Model.js'; import { wrapTreePathInfo } from '../helper/treeHelper.js'; import { normalizeToArray } from '../../util/model.js'; import { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup.js'; import enableAriaDecalForTree from '../helper/enableAriaDecalForTree.js'; var TreemapSeriesModel = /** @class */function (_super) { __extends(TreemapSeriesModel, _super); function TreemapSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = TreemapSeriesModel.type; _this.preventUsingHoverLayer = true; return _this; } /** * @override */ TreemapSeriesModel.prototype.getInitialData = function (option, ecModel) { // Create a virtual root. var root = { name: option.name, children: option.data }; completeTreeValue(root); var levels = option.levels || []; // Used in "visual priority" in `treemapVisual.js`. // This way is a little tricky, must satisfy the precondition: // 1. There is no `treeNode.getModel('itemStyle.xxx')` used. // 2. The `Model.prototype.getModel()` will not use any clone-like way. var designatedVisualItemStyle = this.designatedVisualItemStyle = {}; var designatedVisualModel = new Model({ itemStyle: designatedVisualItemStyle }, this, ecModel); levels = option.levels = setDefault(levels, ecModel); var levelModels = zrUtil.map(levels || [], function (levelDefine) { return new Model(levelDefine, designatedVisualModel, ecModel); }, this); // Make sure always a new tree is created when setOption, // in TreemapView, we check whether oldTree === newTree // to choose mappings approach among old shapes and new shapes. var tree = Tree.createTree(root, this, beforeLink); function beforeLink(nodeData) { nodeData.wrapMethod('getItemModel', function (model, idx) { var node = tree.getNodeByDataIndex(idx); var levelModel = node ? levelModels[node.depth] : null; // If no levelModel, we also need `designatedVisualModel`. model.parentModel = levelModel || designatedVisualModel; return model; }); } return tree.data; }; TreemapSeriesModel.prototype.optionUpdated = function () { this.resetViewRoot(); }; /** * @override * @param {number} dataIndex * @param {boolean} [mutipleSeries=false] */ TreemapSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) { var data = this.getData(); var value = this.getRawValue(dataIndex); var name = data.getName(dataIndex); return createTooltipMarkup('nameValue', { name: name, value: value }); }; /** * Add tree path to tooltip param * * @override * @param {number} dataIndex * @return {Object} */ TreemapSeriesModel.prototype.getDataParams = function (dataIndex) { var params = _super.prototype.getDataParams.apply(this, arguments); var node = this.getData().tree.getNodeByDataIndex(dataIndex); params.treeAncestors = wrapTreePathInfo(node, this); // compatitable the previous code. params.treePathInfo = params.treeAncestors; return params; }; /** * @public * @param {Object} layoutInfo { * x: containerGroup x * y: containerGroup y * width: containerGroup width * height: containerGroup height * } */ TreemapSeriesModel.prototype.setLayoutInfo = function (layoutInfo) { /** * @readOnly * @type {Object} */ this.layoutInfo = this.layoutInfo || {}; zrUtil.extend(this.layoutInfo, layoutInfo); }; /** * @param {string} id * @return {number} index */ TreemapSeriesModel.prototype.mapIdToIndex = function (id) { // A feature is implemented: // index is monotone increasing with the sequence of // input id at the first time. // This feature can make sure that each data item and its // mapped color have the same index between data list and // color list at the beginning, which is useful for user // to adjust data-color mapping. /** * @private * @type {Object} */ var idIndexMap = this._idIndexMap; if (!idIndexMap) { idIndexMap = this._idIndexMap = zrUtil.createHashMap(); /** * @private * @type {number} */ this._idIndexMapCount = 0; } var index = idIndexMap.get(id); if (index == null) { idIndexMap.set(id, index = this._idIndexMapCount++); } return index; }; TreemapSeriesModel.prototype.getViewRoot = function () { return this._viewRoot; }; TreemapSeriesModel.prototype.resetViewRoot = function (viewRoot) { viewRoot ? this._viewRoot = viewRoot : viewRoot = this._viewRoot; var root = this.getRawData().tree.root; if (!viewRoot || viewRoot !== root && !root.contains(viewRoot)) { this._viewRoot = root; } }; TreemapSeriesModel.prototype.enableAriaDecal = function () { enableAriaDecalForTree(this); }; TreemapSeriesModel.type = 'series.treemap'; TreemapSeriesModel.layoutMode = 'box'; TreemapSeriesModel.defaultOption = { // Disable progressive rendering progressive: 0, // size: ['80%', '80%'], // deprecated, compatible with ec2. left: 'center', top: 'middle', width: '80%', height: '80%', sort: true, clipWindow: 'origin', squareRatio: 0.5 * (1 + Math.sqrt(5)), leafDepth: null, drillDownIcon: '▶', // to align specialized icon. ▷▶❒❐▼✚ zoomToNodeRatio: 0.32 * 0.32, scaleLimit: null, roam: true, nodeClick: 'zoomToNode', animation: true, animationDurationUpdate: 900, animationEasing: 'quinticInOut', breadcrumb: { show: true, height: 22, left: 'center', top: 'bottom', // right // bottom emptyItemWidth: 25, itemStyle: { color: 'rgba(0,0,0,0.7)', textStyle: { color: '#fff' } }, emphasis: { itemStyle: { color: 'rgba(0,0,0,0.9)' // '#5793f3', } } }, label: { show: true, // Do not use textDistance, for ellipsis rect just the same as treemap node rect. distance: 0, padding: 5, position: 'inside', // formatter: null, color: '#fff', overflow: 'truncate' // align // verticalAlign }, upperLabel: { show: false, position: [0, '50%'], height: 20, // formatter: null, // color: '#fff', overflow: 'truncate', // align: null, verticalAlign: 'middle' }, itemStyle: { color: null, colorAlpha: null, colorSaturation: null, borderWidth: 0, gapWidth: 0, borderColor: '#fff', borderColorSaturation: null // If specified, borderColor will be ineffective, and the // border color is evaluated by color of current node and // borderColorSaturation. }, emphasis: { upperLabel: { show: true, position: [0, '50%'], overflow: 'truncate', verticalAlign: 'middle' } }, visualDimension: 0, visualMin: null, visualMax: null, color: [], // level[n].color (if necessary). // + Specify color list of each level. level[0].color would be global // color list if not specified. (see method `setDefault`). // + But set as a empty array to forbid fetch color from global palette // when using nodeModel.get('color'), otherwise nodes on deep level // will always has color palette set and are not able to inherit color // from parent node. // + TreemapSeries.color can not be set as 'none', otherwise effect // legend color fetching (see seriesColor.js). colorAlpha: null, colorSaturation: null, colorMappingBy: 'index', visibleMin: 10, // be rendered. Only works when sort is 'asc' or 'desc'. childrenVisibleMin: null, // grandchildren will not show. // Why grandchildren? If not grandchildren but children, // some siblings show children and some not, // the appearance may be mess and not consistent, levels: [] // Each item: { // visibleMin, itemStyle, visualDimension, label // } }; return TreemapSeriesModel; }(SeriesModel); /** * @param {Object} dataNode */ function completeTreeValue(dataNode) { // Postorder travel tree. // If value of none-leaf node is not set, // calculate it by suming up the value of all children. var sum = 0; zrUtil.each(dataNode.children, function (child) { completeTreeValue(child); var childValue = child.value; zrUtil.isArray(childValue) && (childValue = childValue[0]); sum += childValue; }); var thisValue = dataNode.value; if (zrUtil.isArray(thisValue)) { thisValue = thisValue[0]; } if (thisValue == null || isNaN(thisValue)) { thisValue = sum; } // Value should not less than 0. if (thisValue < 0) { thisValue = 0; } zrUtil.isArray(dataNode.value) ? dataNode.value[0] = thisValue : dataNode.value = thisValue; } /** * set default to level configuration */ function setDefault(levels, ecModel) { var globalColorList = normalizeToArray(ecModel.get('color')); var globalDecalList = normalizeToArray(ecModel.get(['aria', 'decal', 'decals'])); if (!globalColorList) { return; } levels = levels || []; var hasColorDefine; var hasDecalDefine; zrUtil.each(levels, function (levelDefine) { var model = new Model(levelDefine); var modelColor = model.get('color'); var modelDecal = model.get('decal'); if (model.get(['itemStyle', 'color']) || modelColor && modelColor !== 'none') { hasColorDefine = true; } if (model.get(['itemStyle', 'decal']) || modelDecal && modelDecal !== 'none') { hasDecalDefine = true; } }); var level0 = levels[0] || (levels[0] = {}); if (!hasColorDefine) { level0.color = globalColorList.slice(); } if (!hasDecalDefine && globalDecalList) { level0.decal = globalDecalList.slice(); } return levels; } export default TreemapSeriesModel;