123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- /*
- * 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 createGraphFromNodeEdge = require("../helper/createGraphFromNodeEdge");
- var _format = require("../../util/format");
- var encodeHTML = _format.encodeHTML;
- var Model = require("../../model/Model");
- var _config = require("../../config");
- var __DEV__ = _config.__DEV__;
- /*
- * 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 SankeySeries = SeriesModel.extend({
- type: 'series.sankey',
- layoutInfo: null,
- levelModels: null,
- /**
- * Init a graph 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, ecModel) {
- var links = option.edges || option.links;
- var nodes = option.data || option.nodes;
- var levels = option.levels;
- var levelModels = this.levelModels = {};
- for (var i = 0; i < levels.length; i++) {
- if (levels[i].depth != null && levels[i].depth >= 0) {
- levelModels[levels[i].depth] = new Model(levels[i], this, ecModel);
- } else {}
- }
- if (nodes && links) {
- var graph = createGraphFromNodeEdge(nodes, links, this, true, beforeLink);
- return graph.data;
- }
- function beforeLink(nodeData, edgeData) {
- nodeData.wrapMethod('getItemModel', function (model, idx) {
- model.customizeGetParent(function (path) {
- var parentModel = this.parentModel;
- var nodeDepth = parentModel.getData().getItemLayout(idx).depth;
- var levelModel = parentModel.levelModels[nodeDepth];
- return levelModel || this.parentModel;
- });
- return model;
- });
- edgeData.wrapMethod('getItemModel', function (model, idx) {
- model.customizeGetParent(function (path) {
- var parentModel = this.parentModel;
- var edge = parentModel.getGraph().getEdgeByIndex(idx);
- var depth = edge.node1.getLayout().depth;
- var levelModel = parentModel.levelModels[depth];
- return levelModel || this.parentModel;
- });
- return model;
- });
- }
- },
- setNodePosition: function (dataIndex, localPosition) {
- var dataItem = this.option.data[dataIndex];
- dataItem.localX = localPosition[0];
- dataItem.localY = localPosition[1];
- },
- /**
- * Return the graphic data structure
- *
- * @return {module:echarts/data/Graph} graphic data structure
- */
- getGraph: function () {
- return this.getData().graph;
- },
- /**
- * Get edge data of graphic data structure
- *
- * @return {module:echarts/data/List} data structure of list
- */
- getEdgeData: function () {
- return this.getGraph().edgeData;
- },
- /**
- * @override
- */
- formatTooltip: function (dataIndex, multipleSeries, dataType) {
- // dataType === 'node' or empty do not show tooltip by default
- if (dataType === 'edge') {
- var params = this.getDataParams(dataIndex, dataType);
- var rawDataOpt = params.data;
- var html = rawDataOpt.source + ' -- ' + rawDataOpt.target;
- if (params.value) {
- html += ' : ' + params.value;
- }
- return encodeHTML(html);
- } else if (dataType === 'node') {
- var node = this.getGraph().getNodeByIndex(dataIndex);
- var value = node.getLayout().value;
- var name = this.getDataParams(dataIndex, dataType).data.name;
- if (value) {
- var html = name + ' : ' + value;
- }
- return encodeHTML(html);
- }
- return SankeySeries.superCall(this, 'formatTooltip', dataIndex, multipleSeries);
- },
- optionUpdated: function () {
- var option = this.option;
- if (option.focusNodeAdjacency === true) {
- option.focusNodeAdjacency = 'allEdges';
- }
- },
- // Override Series.getDataParams()
- getDataParams: function (dataIndex, dataType) {
- var params = SankeySeries.superCall(this, 'getDataParams', dataIndex, dataType);
- if (params.value == null && dataType === 'node') {
- var node = this.getGraph().getNodeByIndex(dataIndex);
- var nodeValue = node.getLayout().value;
- params.value = nodeValue;
- }
- return params;
- },
- defaultOption: {
- zlevel: 0,
- z: 2,
- coordinateSystem: 'view',
- layout: null,
- // The position of the whole view
- left: '5%',
- top: '5%',
- right: '20%',
- bottom: '5%',
- // Value can be 'vertical'
- orient: 'horizontal',
- // The dx of the node
- nodeWidth: 20,
- // The vertical distance between two nodes
- nodeGap: 8,
- // Control if the node can move or not
- draggable: true,
- // Value can be 'inEdges', 'outEdges', 'allEdges', true (the same as 'allEdges').
- focusNodeAdjacency: false,
- // The number of iterations to change the position of the node
- layoutIterations: 32,
- label: {
- show: true,
- position: 'right',
- color: '#000',
- fontSize: 12
- },
- levels: [],
- // Value can be 'left' or 'right'
- nodeAlign: 'justify',
- itemStyle: {
- borderWidth: 1,
- borderColor: '#333'
- },
- lineStyle: {
- color: '#314656',
- opacity: 0.2,
- curveness: 0.5
- },
- emphasis: {
- label: {
- show: true
- },
- lineStyle: {
- opacity: 0.5
- }
- },
- animationEasing: 'linear',
- animationDuration: 1000
- }
- });
- var _default = SankeySeries;
- module.exports = _default;
|