@@ -15,14 +15,15 @@ var tinycolor = require('tinycolor2');
1515var Color = require ( '../../components/color' ) ;
1616var helpers = require ( './helpers' ) ;
1717
18- exports . calc = function calc ( gd , trace ) {
18+ var pieExtendedColorWays = { } ;
19+
20+ function calc ( gd , trace ) {
1921 var vals = trace . values ;
2022 var hasVals = isArrayOrTypedArray ( vals ) && vals . length ;
2123 var labels = trace . labels ;
2224 var colors = trace . marker . colors || [ ] ;
2325 var cd = [ ] ;
2426 var fullLayout = gd . _fullLayout ;
25- var colorMap = fullLayout . _piecolormap ;
2627 var allThisTraceLabels = { } ;
2728 var vTotal = 0 ;
2829 var hiddenLabels = fullLayout . hiddenlabels || [ ] ;
@@ -36,18 +37,7 @@ exports.calc = function calc(gd, trace) {
3637 }
3738 }
3839
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 ) ;
5141 var seriesLen = ( hasVals ? vals : labels ) . length ;
5242
5343 for ( i = 0 ; i < seriesLen ; i ++ ) {
@@ -121,7 +111,21 @@ exports.calc = function calc(gd, trace) {
121111 }
122112
123113 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+ }
125129
126130/*
127131 * `calc` filled in (and collated) explicit colors.
@@ -130,45 +134,41 @@ exports.calc = function calc(gd, trace) {
130134 * This is done after sorting, so we pick defaults
131135 * in the order slices will be displayed
132136 */
133- exports . crossTraceCalc = function ( gd ) {
137+ function crossTraceCalc ( gd ) {
134138 var fullLayout = gd . _fullLayout ;
135139 var calcdata = gd . calcdata ;
136140 var pieColorWay = fullLayout . piecolorway ;
137141 var colorMap = fullLayout . _piecolormap ;
138142
139143 if ( fullLayout . extendpiecolors ) {
140- pieColorWay = generateExtendedColors ( pieColorWay ) ;
144+ pieColorWay = generateExtendedColors ( pieColorWay , pieExtendedColorWays ) ;
141145 }
142146 var dfltColorCount = 0 ;
143147
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 ] ;
147150 if ( cd [ 0 ] . trace . type !== 'pie' ) continue ;
148151
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 ] ;
151154 if ( pt . color === false ) {
152155 // have we seen this label and assigned a color to it in a previous trace?
153156 if ( colorMap [ pt . label ] ) {
154157 pt . color = colorMap [ pt . label ] ;
155- }
156- else {
158+ } else {
157159 colorMap [ pt . label ] = pt . color = pieColorWay [ dfltColorCount % pieColorWay . length ] ;
158160 dfltColorCount ++ ;
159161 }
160162 }
161163 }
162164 }
163- } ;
165+ }
164166
165167/**
166168 * pick a default color from the main default set, augmented by
167169 * itself lighter then darker before repeating
168170 */
169- var extendedColorWays = { } ;
170-
171- function generateExtendedColors ( colorList ) {
171+ function generateExtendedColors ( colorList , extendedColorWays ) {
172172 var i ;
173173 var colorString = JSON . stringify ( colorList ) ;
174174 var pieColors = extendedColorWays [ colorString ] ;
@@ -187,3 +187,11 @@ function generateExtendedColors(colorList) {
187187
188188 return pieColors ;
189189}
190+
191+ module . exports = {
192+ calc : calc ,
193+ crossTraceCalc : crossTraceCalc ,
194+
195+ makePullColorFn : makePullColorFn ,
196+ generateExtendedColors : generateExtendedColors
197+ } ;
0 commit comments