@@ -20,14 +20,14 @@ module.exports = function getLegendData(calcdata, opts) {
20
20
// TODO: check this against fullData legendgroups?
21
21
var uniqueGroup = '~~i' + lgroupi ;
22
22
lgroups . push ( uniqueGroup ) ;
23
- lgroupToTraces [ uniqueGroup ] = [ [ legendItem ] ] ;
23
+ lgroupToTraces [ uniqueGroup ] = [ legendItem ] ;
24
24
lgroupi ++ ;
25
25
} else if ( lgroups . indexOf ( legendGroup ) === - 1 ) {
26
26
lgroups . push ( legendGroup ) ;
27
27
hasOneNonBlankGroup = true ;
28
- lgroupToTraces [ legendGroup ] = [ [ legendItem ] ] ;
28
+ lgroupToTraces [ legendGroup ] = [ legendItem ] ;
29
29
} else {
30
- lgroupToTraces [ legendGroup ] . push ( [ legendItem ] ) ;
30
+ lgroupToTraces [ legendGroup ] . push ( legendItem ) ;
31
31
}
32
32
}
33
33
@@ -68,36 +68,46 @@ module.exports = function getLegendData(calcdata, opts) {
68
68
// won't draw a legend in this case
69
69
if ( ! lgroups . length ) return [ ] ;
70
70
71
+ // collapse all groups into one if all groups are blank
72
+ var shouldCollapse = ! hasOneNonBlankGroup || ! helpers . isGrouped ( opts ) ;
73
+
71
74
// rearrange lgroupToTraces into a d3-friendly array of arrays
72
75
var legendData ;
73
76
74
- var shouldCollapse = ! hasOneNonBlankGroup || ! helpers . isGrouped ( opts ) ;
75
- legendData = shouldCollapse ? [ [ ] ] : [ ] ;
77
+ legendData = [ ] ;
76
78
for ( i = 0 ; i < lgroups . length ; i ++ ) {
77
79
var t = lgroupToTraces [ lgroups [ i ] ] ;
78
80
if ( shouldCollapse ) {
79
- // collapse all groups into one if all groups are blank
80
- legendData [ 0 ] . push ( t [ 0 ] ) ;
81
+ legendData . push ( t [ 0 ] ) ;
81
82
} else {
82
83
legendData . push ( t ) ;
83
84
}
84
85
}
86
+ if ( shouldCollapse ) legendData = [ legendData ] ;
85
87
86
88
// sort considering trace.legendrank and legend.traceorder
87
- var dir = helpers . isReversed ( opts ) ? - 1 : 1 ;
88
89
var orderFn = function ( a , b ) {
89
- var A = a [ 0 ] . trace ;
90
- var B = b [ 0 ] . trace ;
90
+ var A = a . trace ;
91
+ var B = b . trace ;
91
92
var delta = A . legendrank - B . legendrank ;
92
- if ( ! delta ) delta = A . index - B . index ;
93
- if ( ! delta ) delta = a [ 0 ] . _initID - b [ 0 ] . _initID ;
93
+ if ( ! delta ) delta = A . _initID - B . _initID ;
94
94
95
- return dir * delta ;
95
+ return delta ;
96
96
} ;
97
-
97
+ var rev = helpers . isReversed ( opts ) ;
98
98
for ( i = 0 ; i < legendData . length ; i ++ ) {
99
99
legendData [ i ] . sort ( orderFn ) ;
100
+ if ( rev ) legendData [ i ] . reverse ( ) ;
101
+ }
102
+
103
+ var arr = [ ] ;
104
+ for ( i = 0 ; i < legendData . length ; i ++ ) {
105
+ arr [ i ] = [ ] ;
106
+ for ( j = 0 ; j < legendData [ i ] . length ; j ++ ) {
107
+ arr [ i ] [ j ] = [ legendData [ i ] [ j ] ] ;
108
+ }
100
109
}
110
+ legendData = arr ;
101
111
102
112
// number of legend groups - needed in legend/draw.js
103
113
opts . _lgroupsLength = legendData . length ;
0 commit comments