@@ -15,14 +15,15 @@ var tinycolor = require('tinycolor2');
15
15
var Color = require ( '../../components/color' ) ;
16
16
var helpers = require ( './helpers' ) ;
17
17
18
- exports . calc = function calc ( gd , trace ) {
18
+ var pieExtendedColorWays = { } ;
19
+
20
+ function calc ( gd , trace ) {
19
21
var vals = trace . values ;
20
22
var hasVals = isArrayOrTypedArray ( vals ) && vals . length ;
21
23
var labels = trace . labels ;
22
24
var colors = trace . marker . colors || [ ] ;
23
25
var cd = [ ] ;
24
26
var fullLayout = gd . _fullLayout ;
25
- var colorMap = fullLayout . _piecolormap ;
26
27
var allThisTraceLabels = { } ;
27
28
var vTotal = 0 ;
28
29
var hiddenLabels = fullLayout . hiddenlabels || [ ] ;
@@ -36,18 +37,7 @@ exports.calc = function calc(gd, trace) {
36
37
}
37
38
}
38
39
39
- function pullColor ( color , label ) {
40
- if ( ! color ) return false ;
41
-
42
- color = tinycolor ( color ) ;
43
- if ( ! color . isValid ( ) ) return false ;
44
-
45
- color = Color . addOpacity ( color , color . getAlpha ( ) ) ;
46
- if ( ! colorMap [ label ] ) colorMap [ label ] = color ;
47
-
48
- return color ;
49
- }
50
-
40
+ var pullColor = makePullColorFn ( fullLayout . _piecolormap ) ;
51
41
var seriesLen = ( hasVals ? vals : labels ) . length ;
52
42
53
43
for ( i = 0 ; i < seriesLen ; i ++ ) {
@@ -121,7 +111,21 @@ exports.calc = function calc(gd, trace) {
121
111
}
122
112
123
113
return cd ;
124
- } ;
114
+ }
115
+
116
+ function makePullColorFn ( colorMap ) {
117
+ return function pullColor ( color , id ) {
118
+ if ( ! color ) return false ;
119
+
120
+ color = tinycolor ( color ) ;
121
+ if ( ! color . isValid ( ) ) return false ;
122
+
123
+ color = Color . addOpacity ( color , color . getAlpha ( ) ) ;
124
+ if ( ! colorMap [ id ] ) colorMap [ id ] = color ;
125
+
126
+ return color ;
127
+ } ;
128
+ }
125
129
126
130
/*
127
131
* `calc` filled in (and collated) explicit colors.
@@ -130,45 +134,41 @@ exports.calc = function calc(gd, trace) {
130
134
* This is done after sorting, so we pick defaults
131
135
* in the order slices will be displayed
132
136
*/
133
- exports . crossTraceCalc = function ( gd ) {
137
+ function crossTraceCalc ( gd ) {
134
138
var fullLayout = gd . _fullLayout ;
135
139
var calcdata = gd . calcdata ;
136
140
var pieColorWay = fullLayout . piecolorway ;
137
141
var colorMap = fullLayout . _piecolormap ;
138
142
139
143
if ( fullLayout . extendpiecolors ) {
140
- pieColorWay = generateExtendedColors ( pieColorWay ) ;
144
+ pieColorWay = generateExtendedColors ( pieColorWay , pieExtendedColorWays ) ;
141
145
}
142
146
var dfltColorCount = 0 ;
143
147
144
- var i , j , cd , pt ;
145
- for ( i = 0 ; i < calcdata . length ; i ++ ) {
146
- cd = calcdata [ i ] ;
148
+ for ( var i = 0 ; i < calcdata . length ; i ++ ) {
149
+ var cd = calcdata [ i ] ;
147
150
if ( cd [ 0 ] . trace . type !== 'pie' ) continue ;
148
151
149
- for ( j = 0 ; j < cd . length ; j ++ ) {
150
- pt = cd [ j ] ;
152
+ for ( var j = 0 ; j < cd . length ; j ++ ) {
153
+ var pt = cd [ j ] ;
151
154
if ( pt . color === false ) {
152
155
// have we seen this label and assigned a color to it in a previous trace?
153
156
if ( colorMap [ pt . label ] ) {
154
157
pt . color = colorMap [ pt . label ] ;
155
- }
156
- else {
158
+ } else {
157
159
colorMap [ pt . label ] = pt . color = pieColorWay [ dfltColorCount % pieColorWay . length ] ;
158
160
dfltColorCount ++ ;
159
161
}
160
162
}
161
163
}
162
164
}
163
- } ;
165
+ }
164
166
165
167
/**
166
168
* pick a default color from the main default set, augmented by
167
169
* itself lighter then darker before repeating
168
170
*/
169
- var extendedColorWays = { } ;
170
-
171
- function generateExtendedColors ( colorList ) {
171
+ function generateExtendedColors ( colorList , extendedColorWays ) {
172
172
var i ;
173
173
var colorString = JSON . stringify ( colorList ) ;
174
174
var pieColors = extendedColorWays [ colorString ] ;
@@ -187,3 +187,11 @@ function generateExtendedColors(colorList) {
187
187
188
188
return pieColors ;
189
189
}
190
+
191
+ module . exports = {
192
+ calc : calc ,
193
+ crossTraceCalc : crossTraceCalc ,
194
+
195
+ makePullColorFn : makePullColorFn ,
196
+ generateExtendedColors : generateExtendedColors
197
+ } ;
0 commit comments