192 lines
5.7 KiB
JavaScript
192 lines
5.7 KiB
JavaScript
|
|
/*
|
|
* 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.
|
|
*/
|
|
|
|
var SeriesModel = require("../../model/Series");
|
|
|
|
var Tree = require("../../data/Tree");
|
|
|
|
var _format = require("../../util/format");
|
|
|
|
var encodeHTML = _format.encodeHTML;
|
|
|
|
var Model = require("../../model/Model");
|
|
|
|
/*
|
|
* 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.
|
|
*/
|
|
var _default = SeriesModel.extend({
|
|
type: 'series.tree',
|
|
layoutInfo: null,
|
|
// can support the position parameters 'left', 'top','right','bottom', 'width',
|
|
// 'height' in the setOption() with 'merge' mode normal.
|
|
layoutMode: 'box',
|
|
|
|
/**
|
|
* Init a tree data structure from data in option series
|
|
* @param {Object} option the object used to config echarts view
|
|
* @return {module:echarts/data/List} storage initial data
|
|
*/
|
|
getInitialData: function (option) {
|
|
//create an virtual root
|
|
var root = {
|
|
name: option.name,
|
|
children: option.data
|
|
};
|
|
var leaves = option.leaves || {};
|
|
var leavesModel = new Model(leaves, this, this.ecModel);
|
|
var tree = Tree.createTree(root, this, beforeLink);
|
|
|
|
function beforeLink(nodeData) {
|
|
nodeData.wrapMethod('getItemModel', function (model, idx) {
|
|
var node = tree.getNodeByDataIndex(idx);
|
|
|
|
if (!node.children.length || !node.isExpand) {
|
|
model.parentModel = leavesModel;
|
|
}
|
|
|
|
return model;
|
|
});
|
|
}
|
|
|
|
var treeDepth = 0;
|
|
tree.eachNode('preorder', function (node) {
|
|
if (node.depth > treeDepth) {
|
|
treeDepth = node.depth;
|
|
}
|
|
});
|
|
var expandAndCollapse = option.expandAndCollapse;
|
|
var expandTreeDepth = expandAndCollapse && option.initialTreeDepth >= 0 ? option.initialTreeDepth : treeDepth;
|
|
tree.root.eachNode('preorder', function (node) {
|
|
var item = node.hostTree.data.getRawDataItem(node.dataIndex); // Add item.collapsed != null, because users can collapse node original in the series.data.
|
|
|
|
node.isExpand = item && item.collapsed != null ? !item.collapsed : node.depth <= expandTreeDepth;
|
|
});
|
|
return tree.data;
|
|
},
|
|
|
|
/**
|
|
* Make the configuration 'orient' backward compatibly, with 'horizontal = LR', 'vertical = TB'.
|
|
* @returns {string} orient
|
|
*/
|
|
getOrient: function () {
|
|
var orient = this.get('orient');
|
|
|
|
if (orient === 'horizontal') {
|
|
orient = 'LR';
|
|
} else if (orient === 'vertical') {
|
|
orient = 'TB';
|
|
}
|
|
|
|
return orient;
|
|
},
|
|
setZoom: function (zoom) {
|
|
this.option.zoom = zoom;
|
|
},
|
|
setCenter: function (center) {
|
|
this.option.center = center;
|
|
},
|
|
|
|
/**
|
|
* @override
|
|
* @param {number} dataIndex
|
|
*/
|
|
formatTooltip: function (dataIndex) {
|
|
var tree = this.getData().tree;
|
|
var realRoot = tree.root.children[0];
|
|
var node = tree.getNodeByDataIndex(dataIndex);
|
|
var value = node.getValue();
|
|
var name = node.name;
|
|
|
|
while (node && node !== realRoot) {
|
|
name = node.parentNode.name + '.' + name;
|
|
node = node.parentNode;
|
|
}
|
|
|
|
return encodeHTML(name + (isNaN(value) || value == null ? '' : ' : ' + value));
|
|
},
|
|
defaultOption: {
|
|
zlevel: 0,
|
|
z: 2,
|
|
coordinateSystem: 'view',
|
|
// the position of the whole view
|
|
left: '12%',
|
|
top: '12%',
|
|
right: '12%',
|
|
bottom: '12%',
|
|
// the layout of the tree, two value can be selected, 'orthogonal' or 'radial'
|
|
layout: 'orthogonal',
|
|
// value can be 'polyline'
|
|
edgeShape: 'curve',
|
|
edgeForkPosition: '50%',
|
|
// true | false | 'move' | 'scale', see module:component/helper/RoamController.
|
|
roam: false,
|
|
// Symbol size scale ratio in roam
|
|
nodeScaleRatio: 0.4,
|
|
// Default on center of graph
|
|
center: null,
|
|
zoom: 1,
|
|
// The orient of orthoginal layout, can be setted to 'LR', 'TB', 'RL', 'BT'.
|
|
// and the backward compatibility configuration 'horizontal = LR', 'vertical = TB'.
|
|
orient: 'LR',
|
|
symbol: 'emptyCircle',
|
|
symbolSize: 7,
|
|
expandAndCollapse: true,
|
|
initialTreeDepth: 2,
|
|
lineStyle: {
|
|
color: '#ccc',
|
|
width: 1.5,
|
|
curveness: 0.5
|
|
},
|
|
itemStyle: {
|
|
color: 'lightsteelblue',
|
|
borderColor: '#c23531',
|
|
borderWidth: 1.5
|
|
},
|
|
label: {
|
|
show: true,
|
|
color: '#555'
|
|
},
|
|
leaves: {
|
|
label: {
|
|
show: true
|
|
}
|
|
},
|
|
animationEasing: 'linear',
|
|
animationDuration: 700,
|
|
animationDurationUpdate: 1000
|
|
}
|
|
});
|
|
|
|
module.exports = _default; |