@@ -16,8 +16,6 @@ var Drawing = require('../../components/drawing');
16
16
var d3sankey = require ( './d3-sankey.js' ) ;
17
17
var d3Force = require ( 'd3-force' ) ;
18
18
var Lib = require ( '../../lib' ) ;
19
- var isArrayOrTypedArray = Lib . isArrayOrTypedArray ;
20
- var isIndex = Lib . isIndex ;
21
19
var gup = require ( '../../lib/gup' ) ;
22
20
var keyFun = gup . keyFun ;
23
21
var repeat = gup . repeat ;
@@ -67,78 +65,18 @@ function switchToSankeyFormat(nodes) {
67
65
// view models
68
66
69
67
function sankeyModel ( layout , d , traceIndex ) {
70
- var trace = unwrap ( d ) . trace ;
68
+ var calcData = unwrap ( d ) ;
69
+ var trace = calcData . trace ;
71
70
var domain = trace . domain ;
72
- var nodeSpec = trace . node ;
73
- var linkSpec = trace . link ;
74
- var arrangement = trace . arrangement ;
75
71
var horizontal = trace . orientation === 'h' ;
76
72
var nodePad = trace . node . pad ;
77
73
var nodeThickness = trace . node . thickness ;
78
- var nodeLineColor = trace . node . line . color ;
79
- var nodeLineWidth = trace . node . line . width ;
80
- var linkLineColor = trace . link . line . color ;
81
- var linkLineWidth = trace . link . line . width ;
82
- var valueFormat = trace . valueformat ;
83
- var valueSuffix = trace . valuesuffix ;
84
- var textFont = trace . textfont ;
85
74
86
75
var width = layout . width * ( domain . x [ 1 ] - domain . x [ 0 ] ) ;
87
76
var height = layout . height * ( domain . y [ 1 ] - domain . y [ 0 ] ) ;
88
77
89
- var links = [ ] ;
90
- var hasLinkColorArray = isArrayOrTypedArray ( linkSpec . color ) ;
91
- var linkedNodes = { } ;
92
-
93
- var nodeCount = nodeSpec . label . length ;
94
- var i ;
95
- for ( i = 0 ; i < linkSpec . value . length ; i ++ ) {
96
- var val = linkSpec . value [ i ] ;
97
- // remove negative values, but keep zeros with special treatment
98
- var source = linkSpec . source [ i ] ;
99
- var target = linkSpec . target [ i ] ;
100
- if ( ! ( val > 0 && isIndex ( source , nodeCount ) && isIndex ( target , nodeCount ) ) ) {
101
- continue ;
102
- }
103
-
104
- source = + source ;
105
- target = + target ;
106
- linkedNodes [ source ] = linkedNodes [ target ] = true ;
107
-
108
- links . push ( {
109
- pointNumber : i ,
110
- label : linkSpec . label [ i ] ,
111
- color : hasLinkColorArray ? linkSpec . color [ i ] : linkSpec . color ,
112
- source : source ,
113
- target : target ,
114
- value : + val
115
- } ) ;
116
- }
117
-
118
- var hasNodeColorArray = isArrayOrTypedArray ( nodeSpec . color ) ;
119
- var nodes = [ ] ;
120
- var removedNodes = false ;
121
- var nodeIndices = { } ;
122
- for ( i = 0 ; i < nodeCount ; i ++ ) {
123
- if ( linkedNodes [ i ] ) {
124
- var l = nodeSpec . label [ i ] ;
125
- nodeIndices [ i ] = nodes . length ;
126
- nodes . push ( {
127
- pointNumber : i ,
128
- label : l ,
129
- color : hasNodeColorArray ? nodeSpec . color [ i ] : nodeSpec . color
130
- } ) ;
131
- }
132
- else removedNodes = true ;
133
- }
134
-
135
- // need to re-index links now, since we didn't put all the nodes in
136
- if ( removedNodes ) {
137
- for ( i = 0 ; i < links . length ; i ++ ) {
138
- links [ i ] . source = nodeIndices [ links [ i ] . source ] ;
139
- links [ i ] . target = nodeIndices [ links [ i ] . target ] ;
140
- }
141
- }
78
+ var nodes = calcData . _nodes ;
79
+ var links = calcData . _links ;
142
80
143
81
var sankey = d3sankey ( )
144
82
. size ( horizontal ? [ width , height ] : [ height , width ] )
@@ -152,13 +90,6 @@ function sankeyModel(layout, d, traceIndex) {
152
90
Lib . warn ( 'node.pad was reduced to ' , sankey . nodePadding ( ) , ' to fit within the figure.' ) ;
153
91
}
154
92
155
- var node , sankeyNodes = sankey . nodes ( ) ;
156
- for ( var n = 0 ; n < sankeyNodes . length ; n ++ ) {
157
- node = sankeyNodes [ n ] ;
158
- node . width = width ;
159
- node . height = height ;
160
- }
161
-
162
93
switchToForceFormat ( nodes ) ;
163
94
164
95
return {
@@ -168,21 +99,21 @@ function sankeyModel(layout, d, traceIndex) {
168
99
horizontal : horizontal ,
169
100
width : width ,
170
101
height : height ,
171
- nodePad : nodePad ,
172
- nodeLineColor : nodeLineColor ,
173
- nodeLineWidth : nodeLineWidth ,
174
- linkLineColor : linkLineColor ,
175
- linkLineWidth : linkLineWidth ,
176
- valueFormat : valueFormat ,
177
- valueSuffix : valueSuffix ,
178
- textFont : textFont ,
102
+ nodePad : trace . node . pad ,
103
+ nodeLineColor : trace . node . line . color ,
104
+ nodeLineWidth : trace . node . line . width ,
105
+ linkLineColor : trace . link . line . color ,
106
+ linkLineWidth : trace . link . line . width ,
107
+ valueFormat : trace . valueformat ,
108
+ valueSuffix : trace . valuesuffix ,
109
+ textFont : trace . textfont ,
179
110
translateX : domain . x [ 0 ] * layout . width + layout . margin . l ,
180
111
translateY : layout . height - domain . y [ 1 ] * layout . height + layout . margin . t ,
181
112
dragParallel : horizontal ? height : width ,
182
113
dragPerpendicular : horizontal ? width : height ,
183
114
nodes : nodes ,
184
115
links : links ,
185
- arrangement : arrangement ,
116
+ arrangement : trace . arrangement ,
186
117
sankey : sankey ,
187
118
forceLayouts : { } ,
188
119
interactionState : {
@@ -454,12 +385,14 @@ function snappingForce(sankeyNode, forceKey, nodes, d) {
454
385
}
455
386
456
387
// scene graph
457
- module . exports = function ( svg , styledData , layout , callbacks ) {
388
+ module . exports = function ( svg , calcData , layout , callbacks ) {
389
+
390
+ var styledData = calcData
391
+ . filter ( function ( d ) { return unwrap ( d ) . trace . visible ; } )
392
+ . map ( sankeyModel . bind ( null , layout ) ) ;
393
+
458
394
var sankey = svg . selectAll ( '.' + c . cn . sankey )
459
- . data ( styledData
460
- . filter ( function ( d ) { return unwrap ( d ) . trace . visible ; } )
461
- . map ( sankeyModel . bind ( null , layout ) ) ,
462
- keyFun ) ;
395
+ . data ( styledData , keyFun ) ;
463
396
464
397
sankey . exit ( )
465
398
. remove ( ) ;
0 commit comments