You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by de...@apache.org on 2019/02/26 14:13:13 UTC
[incubator-echarts] branch master updated: refactor some part of
sankey layout (#9995)
This is an automated email from the ASF dual-hosted git repository.
deqingli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git
The following commit(s) were added to refs/heads/master by this push:
new aaabdcc refactor some part of sankey layout (#9995)
aaabdcc is described below
commit aaabdcc2764c035f9ee26149f1a7f9cd3309e164
Author: abigale Li <an...@gmail.com>
AuthorDate: Tue Feb 26 22:12:15 2019 +0800
refactor some part of sankey layout (#9995)
* fix(singleAxis): fix line width in singleAxis
* refactor(sankey): refactor some part of sankey layout
---
build/amd2common.js | 89 +++++++++++++++++++++-------------------
src/chart/sankey/sankeyLayout.js | 32 ++++-----------
2 files changed, 55 insertions(+), 66 deletions(-)
diff --git a/build/amd2common.js b/build/amd2common.js
index d14794f..5d6f8d8 100644
--- a/build/amd2common.js
+++ b/build/amd2common.js
@@ -46,15 +46,15 @@ else {
}
var MAGIC_DEPS = {
- 'exports' : true,
- 'module' : true,
- 'require' : true
+ 'exports': true,
+ 'module': true,
+ 'require': true
};
var SIMPLIFIED_CJS = ['require', 'exports', 'module'];
// Convert AMD-style JavaScript string into node.js compatible module
-function parse (raw){
+function parse(raw) {
var output = '';
var ast = esprima.parse(raw, {
range: true,
@@ -63,50 +63,52 @@ function parse (raw){
var defines = ast.body.filter(isDefine);
- if ( defines.length > 1 ){
- throw new Error('Each file can have only a single define call. Found "'+ defines.length +'"');
- } else if (!defines.length){
+ if (defines.length > 1) {
+ throw new Error('Each file can have only a single define call. Found "' + defines.length + '"');
+ }
+ else if (!defines.length) {
return raw;
}
var def = defines[0];
var args = def.expression['arguments'];
- var factory = getFactory( args );
- var useStrict = getUseStrict( factory );
+ var factory = getFactory(args);
+ var useStrict = getUseStrict(factory);
// do replacements in-place to avoid modifying the code more than needed
if (useStrict) {
- output += useStrict.expression.raw +';\n';
+ output += useStrict.expression.raw + ';\n';
}
- output += raw.substring( 0, def.range[0] ); // anything before define
+ output += raw.substring(0, def.range[0]); // anything before define
output += getRequires(args, factory); // add requires
output += getBody(raw, factory.body, useStrict); // module body
- output += raw.substring( def.range[1], raw.length ); // anything after define
+ output += raw.substring(def.range[1], raw.length); // anything after define
return output;
}
-function getRequires(args, factory){
+function getRequires(args, factory) {
var requires = [];
- var deps = getDependenciesNames( args );
- var params = factory.params.map(function(param, i){
+ var deps = getDependenciesNames(args);
+ var params = factory.params.map(function (param, i) {
return {
- name : param.name,
+ name: param.name,
// simplified cjs doesn't have deps
- dep : (deps.length)? deps[i] : SIMPLIFIED_CJS[i]
+ dep: (deps.length) ? deps[i] : SIMPLIFIED_CJS[i]
};
});
- params.forEach(function(param){
- if ( MAGIC_DEPS[param.dep] && !MAGIC_DEPS[param.name] ) {
+ params.forEach(function (param) {
+ if (MAGIC_DEPS[param.dep] && !MAGIC_DEPS[param.name]) {
// if user remaped magic dependency we declare a var
- requires.push( 'var '+ param.name +' = '+ param.dep +';' );
- } else if ( param.dep && !MAGIC_DEPS[param.dep] ) {
+ requires.push('var ' + param.name + ' = ' + param.dep + ';');
+ }
+ else if (param.dep && !MAGIC_DEPS[param.dep]) {
// only do require for params that have a matching dependency also
// skip "magic" dependencies
- requires.push( 'var '+ param.name +' = require(\''+ param.dep +'\');' );
+ requires.push('var ' + param.name + ' = require(\'' + param.dep + '\');');
}
});
@@ -114,14 +116,14 @@ function getRequires(args, factory){
}
-function getDependenciesNames(args){
+function getDependenciesNames(args) {
var deps = [];
- var arr = args.filter(function(arg){
+ var arr = args.filter(function (arg) {
return arg.type === 'ArrayExpression';
})[0];
if (arr) {
- deps = arr.elements.map(function(el){
+ deps = arr.elements.map(function (el) {
return el.value;
});
}
@@ -130,23 +132,23 @@ function getDependenciesNames(args){
}
-function isDefine(node){
- return node.type === 'ExpressionStatement' &&
- node.expression.type === 'CallExpression' &&
- node.expression.callee.type === 'Identifier' &&
- node.expression.callee.name === 'define';
+function isDefine(node) {
+ return node.type === 'ExpressionStatement'
+ && node.expression.type === 'CallExpression'
+ && node.expression.callee.type === 'Identifier'
+ && node.expression.callee.name === 'define';
}
-function getFactory(args){
- return args.filter(function(arg){
+function getFactory(args) {
+ return args.filter(function (arg) {
return arg.type === 'FunctionExpression';
})[0];
}
-function getBody(raw, factoryBody, useStrict){
- var returnStatement = factoryBody.body.filter(function(node){
+function getBody(raw, factoryBody, useStrict) {
+ var returnStatement = factoryBody.body.filter(function (node) {
return node.type === 'ReturnStatement';
})[0];
@@ -154,26 +156,27 @@ function getBody(raw, factoryBody, useStrict){
var bodyStart = useStrict ? useStrict.expression.range[1] + 1 : factoryBody.range[0] + 1;
if (returnStatement) {
- body += raw.substring( bodyStart, returnStatement.range[0] );
+ body += raw.substring(bodyStart, returnStatement.range[0]);
// "return ".length === 7 so we add "6" to returnStatement start
- body += 'module.exports ='+ raw.substring( returnStatement.range[0] + 6, factoryBody.range[1] - 1 );
- } else {
+ body += 'module.exports =' + raw.substring(returnStatement.range[0] + 6, factoryBody.range[1] - 1);
+ }
+ else {
// if using exports or module.exports or just a private module we
// simply return the factoryBody content
- body = raw.substring( bodyStart, factoryBody.range[1] - 1 );
+ body = raw.substring(bodyStart, factoryBody.range[1] - 1);
}
return body;
}
-function getUseStrict(factory){
+function getUseStrict(factory) {
return factory.body.body.filter(isUseStrict)[0];
}
-function isUseStrict(node){
- return node.type === 'ExpressionStatement' &&
- node.expression.type === 'Literal' &&
- node.expression.value === 'use strict';
+function isUseStrict(node) {
+ return node.type === 'ExpressionStatement'
+ && node.expression.type === 'Literal'
+ && node.expression.value === 'use strict';
}
diff --git a/src/chart/sankey/sankeyLayout.js b/src/chart/sankey/sankeyLayout.js
index 4b775b2..99cae51 100644
--- a/src/chart/sankey/sankeyLayout.js
+++ b/src/chart/sankey/sankeyLayout.js
@@ -18,14 +18,13 @@
*/
/**
- * @file The layout algorithm of sankey view
+ * @file The layout algorithm of sankey diagram.
* @author Deqing Li(annong035@gmail.com)
*/
import * as layout from '../../util/layout';
import * as zrUtil from 'zrender/src/core/util';
import {groupData} from '../../util/model';
-import { __DEV__ } from '../../config';
export default function (ecModel, api, payload) {
@@ -135,6 +134,9 @@ function computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nod
}
}
+ // Traversing nodes using topological sorting to calculate the
+ // horizontal(if orient === 'horizontal') or vertical(if orient === 'vertical')
+ // position of the nodes.
while (zeroIndegrees.length) {
for (var idx = 0; idx < zeroIndegrees.length; idx++) {
var node = zeroIndegrees[idx];
@@ -162,30 +164,15 @@ function computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nod
nextTargetNode = [];
}
- var nodesCopy = nodes.slice(0);
-
for (i = 0; i < remainEdges.length; i++) {
if (remainEdges[i] === 1) {
- if (__DEV__) {
- throw new Error('Sankey is a DAG, the original data has cycle!');
- }
- if (nodeAlign === 'right') {
- var edge = edges[i];
- var index1 = nodesCopy.indexOf(edge.node1);
- if (index1 > -1) {
- nodesCopy.splice(index1, 1);
- }
- var index2 = nodesCopy.indexOf(edge.node2);
- if (index2 > -1) {
- nodesCopy.splice(index2, 1);
- }
- }
+ throw new Error('Sankey is a DAG, the original data has cycle!');
}
}
if (nodeAlign === 'right') {
var nextSourceNode = [];
- var remainNodes = nodesCopy;
+ var remainNodes = nodes;
var nodeHeight = 0;
while (remainNodes.length) {
for (var i = 0; i < remainNodes.length; i++) {
@@ -203,7 +190,7 @@ function computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nod
++nodeHeight;
}
- zrUtil.each(nodesCopy, function (node) {
+ zrUtil.each(nodes, function (node) {
if (orient === 'vertical') {
node.setLayout({y: Math.max(0, x - 1 - node.getLayout().skNodeHeight)}, true);
}
@@ -212,13 +199,12 @@ function computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nod
}
});
}
-
- if (nodeAlign === 'justify') {
+ else if (nodeAlign === 'justify') {
moveSinksRight(nodes, x, orient);
}
var maxDepth = x - 1;
- zrUtil.each(nodesCopy, function (node) {
+ zrUtil.each(nodes, function (node) {
var item = node.hostGraph.data.getRawDataItem(node.dataIndex);
if (item.depth && !isNaN(item.depth) && item.depth >= 0) {
if (item.depth > maxDepth) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org