@@ -36,15 +36,17 @@ var position = {
3636
3737var SI_PREFIX = / [ y z a f p n µ m k M G T P E Z Y ] / ;
3838
39+ function hasTransition ( transitionOpts ) {
40+ // If transition config is provided, then it is only a partial replot and traces not
41+ // updated are removed.
42+ return transitionOpts && transitionOpts . duration > 0 ;
43+ }
44+
3945module . exports = function plot ( gd , cdModule , transitionOpts , makeOnCompleteCallback ) {
4046 var fullLayout = gd . _fullLayout ;
4147 var onComplete ;
4248
43- // If transition config is provided, then it is only a partial replot and traces not
44- // updated are removed.
45- var hasTransition = transitionOpts && transitionOpts . duration > 0 ;
46-
47- if ( hasTransition ) {
49+ if ( hasTransition ( transitionOpts ) ) {
4850 if ( makeOnCompleteCallback ) {
4951 // If it was passed a callback to register completion, make a callback. If
5052 // this is created, then it must be executed on completion, otherwise the
@@ -56,6 +58,7 @@ module.exports = function plot(gd, cdModule, transitionOpts, makeOnCompleteCallb
5658 Lib . makeTraceGroups ( fullLayout . _indicatorlayer , cdModule , 'trace' ) . each ( function ( cd ) {
5759 var cd0 = cd [ 0 ] ;
5860 var trace = cd0 . trace ;
61+
5962 var plotGroup = d3 . select ( this ) ;
6063
6164 // Elements in trace
@@ -109,15 +112,13 @@ module.exports = function plot(gd, cdModule, transitionOpts, makeOnCompleteCallb
109112 }
110113
111114 // Draw numbers
112- var numbersOpts = {
115+ drawNumbers ( gd , plotGroup , cd , {
113116 numbersX : numbersX ,
114117 numbersY : numbersY ,
115118 numbersScaler : numbersScaler ,
116- hasTransition : hasTransition ,
117119 transitionOpts : transitionOpts ,
118120 onComplete : onComplete
119- } ;
120- drawNumbers ( gd , plotGroup , cd , numbersOpts ) ;
121+ } ) ;
121122
122123 // Reexpress our gauge background attributes for drawing
123124 var gaugeBg , gaugeOutline ;
@@ -149,37 +150,38 @@ module.exports = function plot(gd, cdModule, transitionOpts, makeOnCompleteCallb
149150 var angularaxisLayer = plotGroup . selectAll ( 'g.angularaxis' ) . data ( isAngular ? cd : [ ] ) ;
150151 angularaxisLayer . exit ( ) . remove ( ) ;
151152
152- var gaugeOpts = {
153- size : size ,
154- radius : radius ,
155- innerRadius : innerRadius ,
156- gaugeBg : gaugeBg ,
157- gaugeOutline : gaugeOutline ,
158- angularaxisLayer : angularaxisLayer ,
159- angularGauge : angularGauge ,
160- hasTransition : hasTransition ,
161- transitionOpts : transitionOpts ,
162- onComplete : onComplete
163- } ;
164- if ( isAngular ) drawAngularGauge ( gd , plotGroup , cd , gaugeOpts ) ;
153+ if ( isAngular ) {
154+ drawAngularGauge ( gd , plotGroup , cd , {
155+ radius : radius ,
156+ innerRadius : innerRadius ,
157+
158+ gauge : angularGauge ,
159+ layer : angularaxisLayer ,
160+ size : size ,
161+ gaugeBg : gaugeBg ,
162+ gaugeOutline : gaugeOutline ,
163+ transitionOpts : transitionOpts ,
164+ onComplete : onComplete
165+ } ) ;
166+ }
165167
166168 // Prepare bullet layers
167169 var bulletGauge = plotGroup . selectAll ( 'g.bullet' ) . data ( isBullet ? cd : [ ] ) ;
168170 bulletGauge . exit ( ) . remove ( ) ;
169171 var bulletaxisLayer = plotGroup . selectAll ( 'g.bulletaxis' ) . data ( isBullet ? cd : [ ] ) ;
170172 bulletaxisLayer . exit ( ) . remove ( ) ;
171173
172- gaugeOpts = {
173- size : size ,
174- gaugeBg : gaugeBg ,
175- gaugeOutline : gaugeOutline ,
176- bulletGauge : bulletGauge ,
177- bulletaxisLayer : bulletaxisLayer ,
178- hasTransition : hasTransition ,
179- transitionOpts : transitionOpts ,
180- onComplete : onComplete
181- } ;
182- if ( isBullet ) drawBulletGauge ( gd , plotGroup , cd , gaugeOpts ) ;
174+ if ( isBullet ) {
175+ drawBulletGauge ( gd , plotGroup , cd , {
176+ gauge : bulletGauge ,
177+ layer : bulletaxisLayer ,
178+ size : size ,
179+ gaugeBg : gaugeBg ,
180+ gaugeOutline : gaugeOutline ,
181+ transitionOpts : transitionOpts ,
182+ onComplete : onComplete
183+ } ) ;
184+ }
183185
184186 // title
185187 var title = plotGroup . selectAll ( 'text.title' ) . data ( cd ) ;
@@ -223,40 +225,38 @@ module.exports = function plot(gd, cdModule, transitionOpts, makeOnCompleteCallb
223225 } ) ;
224226} ;
225227
226- function drawBulletGauge ( gd , plotGroup , cd , gaugeOpts ) {
228+ function drawBulletGauge ( gd , plotGroup , cd , opts ) {
227229 var trace = cd [ 0 ] . trace ;
228230
229- var bullet = gaugeOpts . bulletGauge ;
230- var bulletaxis = gaugeOpts . bulletaxisLayer ;
231- var gaugeBg = gaugeOpts . gaugeBg ;
232- var gaugeOutline = gaugeOpts . gaugeOutline ;
233- var size = gaugeOpts . size ;
231+ var bullet = opts . gauge ;
232+ var layer = opts . layer ;
233+ var gaugeBg = opts . gaugeBg ;
234+ var gaugeOutline = opts . gaugeOutline ;
235+ var size = opts . size ;
234236 var domain = trace . domain ;
235237
236- var hasTransition = gaugeOpts . hasTransition ;
237- var transitionOpts = gaugeOpts . transitionOpts ;
238- var onComplete = gaugeOpts . onComplete ;
238+ var transitionOpts = opts . transitionOpts ;
239+ var onComplete = opts . onComplete ;
239240
240241 // preparing axis
241242 var ax , vals , transFn , tickSign , shift ;
242- var opts = trace . gauge . axis ;
243243
244244 // Enter bullet, axis
245245 bullet . enter ( ) . append ( 'g' ) . classed ( 'bullet' , true ) ;
246246 bullet . attr ( 'transform' , 'translate(' + size . l + ', ' + size . t + ')' ) ;
247247
248- bulletaxis . enter ( ) . append ( 'g' )
248+ layer . enter ( ) . append ( 'g' )
249249 . classed ( 'bulletaxis' , true )
250250 . classed ( 'crisp' , true ) ;
251- bulletaxis . selectAll ( 'g.' + 'xbulletaxis' + 'tick,path,text' ) . remove ( ) ;
251+ layer . selectAll ( 'g.' + 'xbulletaxis' + 'tick,path,text' ) . remove ( ) ;
252252
253253 // Draw bullet
254254 var bulletHeight = size . h ; // use all vertical domain
255255 var innerBulletHeight = trace . gauge . bar . thickness * bulletHeight ;
256256 var bulletLeft = domain . x [ 0 ] ;
257257 var bulletRight = domain . x [ 0 ] + ( domain . x [ 1 ] - domain . x [ 0 ] ) * ( ( trace . _hasNumber || trace . _hasDelta ) ? ( 1 - cn . bulletNumberDomainSize ) : 1 ) ;
258258
259- ax = mockAxis ( gd , opts , trace . gauge . axis . range ) ;
259+ ax = mockAxis ( gd , trace . gauge . axis , trace . gauge . axis . range ) ;
260260 ax . _id = 'xbulletaxis' ;
261261 ax . domain = [ bulletLeft , bulletRight ] ;
262262 ax . setScale ( ) ;
@@ -269,14 +269,14 @@ function drawBulletGauge(gd, plotGroup, cd, gaugeOpts) {
269269 if ( ax . visible ) {
270270 Axes . drawTicks ( gd , ax , {
271271 vals : ax . ticks === 'inside' ? Axes . clipEnds ( ax , vals ) : vals ,
272- layer : bulletaxis ,
272+ layer : layer ,
273273 path : Axes . makeTickPath ( ax , shift , tickSign ) ,
274274 transFn : transFn
275275 } ) ;
276276
277277 Axes . drawLabels ( gd , ax , {
278278 vals : vals ,
279- layer : bulletaxis ,
279+ layer : layer ,
280280 transFn : transFn ,
281281 labelFns : Axes . makeLabelFns ( ax , shift )
282282 } ) ;
@@ -306,7 +306,7 @@ function drawBulletGauge(gd, plotGroup, cd, gaugeOpts) {
306306 . attr ( 'height' , innerBulletHeight )
307307 . attr ( 'y' , ( bulletHeight - innerBulletHeight ) / 2 )
308308 . call ( styleShape ) ;
309- if ( hasTransition ) {
309+ if ( hasTransition ( transitionOpts ) ) {
310310 fgBullet . select ( 'rect' )
311311 . transition ( )
312312 . duration ( transitionOpts . duration )
@@ -340,21 +340,20 @@ function drawBulletGauge(gd, plotGroup, cd, gaugeOpts) {
340340 bulletOutline . exit ( ) . remove ( ) ;
341341}
342342
343- function drawAngularGauge ( gd , plotGroup , cd , gaugeOpts ) {
343+ function drawAngularGauge ( gd , plotGroup , cd , opts ) {
344344 var trace = cd [ 0 ] . trace ;
345345
346- var size = gaugeOpts . size ;
347- var radius = gaugeOpts . radius ;
348- var innerRadius = gaugeOpts . innerRadius ;
349- var gaugeBg = gaugeOpts . gaugeBg ;
350- var gaugeOutline = gaugeOpts . gaugeOutline ;
346+ var size = opts . size ;
347+ var radius = opts . radius ;
348+ var innerRadius = opts . innerRadius ;
349+ var gaugeBg = opts . gaugeBg ;
350+ var gaugeOutline = opts . gaugeOutline ;
351351 var gaugePosition = [ size . l + size . w / 2 , size . t + size . h / 2 + radius / 2 ] ;
352- var angularGauge = gaugeOpts . angularGauge ;
353- var angularaxisLayer = gaugeOpts . angularaxisLayer ;
352+ var gauge = opts . gauge ;
353+ var layer = opts . layer ;
354354
355- var hasTransition = gaugeOpts . hasTransition ;
356- var transitionOpts = gaugeOpts . transitionOpts ;
357- var onComplete = gaugeOpts . onComplete ;
355+ var transitionOpts = opts . transitionOpts ;
356+ var onComplete = opts . onComplete ;
358357
359358 // circular gauge
360359 var theta = Math . PI / 2 ;
@@ -385,18 +384,17 @@ function drawAngularGauge(gd, plotGroup, cd, gaugeOpts) {
385384
386385 // preparing axis
387386 var ax , vals , transFn , tickSign ;
388- var opts = trace . gauge . axis ;
389387
390388 // Enter gauge and axis
391- angularGauge . enter ( ) . append ( 'g' ) . classed ( 'angular' , true ) ;
392- angularGauge . attr ( 'transform' , strTranslate ( gaugePosition [ 0 ] , gaugePosition [ 1 ] ) ) ;
389+ gauge . enter ( ) . append ( 'g' ) . classed ( 'angular' , true ) ;
390+ gauge . attr ( 'transform' , strTranslate ( gaugePosition [ 0 ] , gaugePosition [ 1 ] ) ) ;
393391
394- angularaxisLayer . enter ( ) . append ( 'g' )
392+ layer . enter ( ) . append ( 'g' )
395393 . classed ( 'angularaxis' , true )
396394 . classed ( 'crisp' , true ) ;
397- angularaxisLayer . selectAll ( 'g.' + 'xangularaxis' + 'tick,path,text' ) . remove ( ) ;
395+ layer . selectAll ( 'g.' + 'xangularaxis' + 'tick,path,text' ) . remove ( ) ;
398396
399- ax = mockAxis ( gd , opts ) ;
397+ ax = mockAxis ( gd , trace . gauge . axis ) ;
400398 ax . type = 'linear' ;
401399 ax . range = trace . gauge . axis . range ;
402400 ax . _id = 'xangularaxis' ; // or 'y', but I don't think this makes a difference here
@@ -451,31 +449,31 @@ function drawAngularGauge(gd, plotGroup, cd, gaugeOpts) {
451449 var pad = ( ax . linewidth || 1 ) / 2 ;
452450 Axes . drawTicks ( gd , ax , {
453451 vals : vals ,
454- layer : angularaxisLayer ,
452+ layer : layer ,
455453 path : 'M' + ( tickSign * pad ) + ',0h' + ( tickSign * ax . ticklen ) ,
456454 transFn : transFn2
457455 } ) ;
458456 Axes . drawLabels ( gd , ax , {
459457 vals : vals ,
460- layer : angularaxisLayer ,
458+ layer : layer ,
461459 transFn : transFn ,
462460 labelFns : labelFns
463461 } ) ;
464462 }
465463
466464 // Draw background + steps
467465 var arcs = [ gaugeBg ] . concat ( trace . gauge . steps ) ;
468- var bgArc = angularGauge . selectAll ( 'g.bg-arc' ) . data ( arcs ) ;
466+ var bgArc = gauge . selectAll ( 'g.bg-arc' ) . data ( arcs ) ;
469467 bgArc . enter ( ) . append ( 'g' ) . classed ( 'bg-arc' , true ) . append ( 'path' ) ;
470468 bgArc . select ( 'path' ) . call ( drawArc ) . call ( styleShape ) ;
471469 bgArc . exit ( ) . remove ( ) ;
472470
473471 // Draw foreground with transition
474472 var valueArcPathGenerator = arcPathGenerator ( trace . gauge . bar . thickness ) ;
475- var valueArc = angularGauge . selectAll ( 'g.value-arc' ) . data ( [ trace . gauge . bar ] ) ;
473+ var valueArc = gauge . selectAll ( 'g.value-arc' ) . data ( [ trace . gauge . bar ] ) ;
476474 valueArc . enter ( ) . append ( 'g' ) . classed ( 'value-arc' , true ) . append ( 'path' ) ;
477475 var valueArcPath = valueArc . select ( 'path' ) ;
478- if ( hasTransition ) {
476+ if ( hasTransition ( transitionOpts ) ) {
479477 valueArcPath
480478 . transition ( )
481479 . duration ( transitionOpts . duration )
@@ -505,26 +503,26 @@ function drawAngularGauge(gd, plotGroup, cd, gaugeOpts) {
505503 thickness : trace . gauge . threshold . thickness
506504 } ) ;
507505 }
508- var thresholdArc = angularGauge . selectAll ( 'g.threshold-arc' ) . data ( arcs ) ;
506+ var thresholdArc = gauge . selectAll ( 'g.threshold-arc' ) . data ( arcs ) ;
509507 thresholdArc . enter ( ) . append ( 'g' ) . classed ( 'threshold-arc' , true ) . append ( 'path' ) ;
510508 thresholdArc . select ( 'path' ) . call ( drawArc ) . call ( styleShape ) ;
511509 thresholdArc . exit ( ) . remove ( ) ;
512510
513511 // Draw border last
514- var gaugeBorder = angularGauge . selectAll ( 'g.gauge-outline' ) . data ( [ gaugeOutline ] ) ;
512+ var gaugeBorder = gauge . selectAll ( 'g.gauge-outline' ) . data ( [ gaugeOutline ] ) ;
515513 gaugeBorder . enter ( ) . append ( 'g' ) . classed ( 'gauge-outline' , true ) . append ( 'path' ) ;
516514 gaugeBorder . select ( 'path' ) . call ( drawArc ) . call ( styleShape ) ;
517515 gaugeBorder . exit ( ) . remove ( ) ;
518516}
519517
520518function drawNumbers ( gd , plotGroup , cd , opts ) {
521519 var trace = cd [ 0 ] . trace ;
520+
522521 var numbersX = opts . numbersX ;
523522 var numbersY = opts . numbersY ;
524523 var numbersAlign = trace . align || 'center' ;
525524 var numbersAnchor = anchor [ numbersAlign ] ;
526525
527- var hasTransition = opts . hasTransition ;
528526 var transitionOpts = opts . transitionOpts ;
529527 var onComplete = opts . onComplete ;
530528
@@ -582,7 +580,8 @@ function drawNumbers(gd, plotGroup, cd, opts) {
582580 function writeNumber ( ) {
583581 number . text ( bignumberPrefix + fmt ( cd [ 0 ] . y ) + bignumberSuffix ) ;
584582 }
585- if ( hasTransition ) {
583+
584+ if ( hasTransition ( transitionOpts ) ) {
586585 number
587586 . transition ( )
588587 . duration ( transitionOpts . duration )
@@ -635,7 +634,7 @@ function drawNumbers(gd, plotGroup, cd, opts) {
635634 . call ( Color . fill , deltaFill ( cd [ 0 ] ) ) ;
636635 }
637636
638- if ( hasTransition ) {
637+ if ( hasTransition ( transitionOpts ) ) {
639638 delta
640639 . transition ( )
641640 . duration ( transitionOpts . duration )
0 commit comments