123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- 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__;
- var SankeySeries = SeriesModel.extend({
- type: 'series.sankey',
- layoutInfo: null,
- levelModels: null,
-
- 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];
- },
-
- getGraph: function () {
- return this.getData().graph;
- },
-
- getEdgeData: function () {
- return this.getGraph().edgeData;
- },
-
- formatTooltip: function (dataIndex, multipleSeries, dataType) {
-
- 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';
- }
- },
-
- 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,
-
- left: '5%',
- top: '5%',
- right: '20%',
- bottom: '5%',
-
- orient: 'horizontal',
-
- nodeWidth: 20,
-
- nodeGap: 8,
-
- draggable: true,
-
- focusNodeAdjacency: false,
-
- layoutIterations: 32,
- label: {
- show: true,
- position: 'right',
- color: '#000',
- fontSize: 12
- },
- levels: [],
-
- 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;
|