@@ -74,7 +74,6 @@ module.exports = function plot(gd, cdModule, transitionOpts, makeOnCompleteCallb
74
74
var centerX = size . l + size . w / 2 ;
75
75
var centerY = size . t + size . h / 2 ;
76
76
77
-
78
77
// Angular gauge size
79
78
var radius = Math . min ( size . w / 2 , size . h ) ; // fill domain
80
79
var innerRadius = cn . innerRadius * radius ;
@@ -519,59 +518,31 @@ function drawNumbers(gd, plotGroup, cd, opts) {
519
518
var trace = cd [ 0 ] . trace ;
520
519
var numbersX = opts . numbersX ;
521
520
var numbersY = opts . numbersY ;
522
- var numbersAnchor = anchor [ trace . align || 'center' ] ;
521
+ var numbersAlign = trace . align || 'center' ;
522
+ var numbersAnchor = anchor [ numbersAlign ] ;
523
523
524
524
var hasTransition = opts . hasTransition ;
525
525
var transitionOpts = opts . transitionOpts ;
526
526
var onComplete = opts . onComplete ;
527
527
528
- var bignumberFontSize , deltaFontSize ;
529
- if ( trace . _hasNumber ) bignumberFontSize = trace . number . font . size ;
530
- if ( trace . _hasDelta ) deltaFontSize = trace . delta . font . size ;
531
-
532
- // Position delta relative to bignumber
533
- var deltaDy = 0 ;
534
- var deltaX = 0 ;
535
- var bignumberY = 0 ;
536
-
537
- if ( trace . _hasDelta && trace . _hasNumber ) {
538
- if ( trace . delta . position === 'bottom' ) {
539
- deltaDy = deltaFontSize * 1.5 ;
540
- }
541
- if ( trace . delta . position === 'top' ) {
542
- deltaDy = - bignumberFontSize + MID_SHIFT * deltaFontSize ;
543
- }
544
- if ( trace . delta . position === 'right' ) {
545
- deltaX = undefined ;
546
- }
547
- if ( trace . delta . position === 'left' ) {
548
- deltaX = undefined ;
549
- bignumberY = MID_SHIFT * bignumberFontSize / 2 ;
550
- }
551
- }
552
- deltaDy -= MID_SHIFT * deltaFontSize ;
553
-
554
- var numbers = Lib . ensureSingle ( plotGroup , 'text' , 'numbers' ) ;
528
+ var numbers = Lib . ensureSingle ( plotGroup , 'g' , 'numbers' ) ;
529
+ var bignumberbBox , deltabBox ;
555
530
556
531
var data = [ ] ;
557
532
if ( trace . _hasNumber ) data . push ( 'number' ) ;
558
533
if ( trace . _hasDelta ) {
559
534
data . push ( 'delta' ) ;
560
535
if ( trace . delta . position === 'left' ) data . reverse ( ) ;
561
536
}
562
- var sel = numbers . selectAll ( 'tspan ' ) . data ( data ) ;
563
- sel . enter ( ) . append ( 'tspan ' ) ;
537
+ var sel = numbers . selectAll ( 'text ' ) . data ( data ) ;
538
+ sel . enter ( ) . append ( 'text ' ) ;
564
539
sel
565
540
. attr ( 'text-anchor' , function ( ) { return numbersAnchor ; } )
566
541
. attr ( 'class' , function ( d ) { return d ; } )
567
- . attr ( 'dx' , function ( d , i ) {
568
- // Add padding to the second tspan when it's a one-liner
569
- if ( i === 1 ) {
570
- var pos = trace . delta . position ;
571
- if ( pos === 'left' || pos === 'right' ) return 10 ;
572
- }
573
- return null ;
574
- } ) ;
542
+ . attr ( 'x' , null )
543
+ . attr ( 'y' , null )
544
+ . attr ( 'dx' , null )
545
+ . attr ( 'dy' , null ) ;
575
546
sel . exit ( ) . remove ( ) ;
576
547
577
548
function drawBignumber ( ) {
@@ -581,11 +552,9 @@ function drawNumbers(gd, plotGroup, cd, opts) {
581
552
var bignumberSuffix = trace . number . suffix ;
582
553
var bignumberPrefix = trace . number . prefix ;
583
554
584
- var number = numbers . select ( 'tspan .number' ) ;
555
+ var number = numbers . select ( 'text .number' ) ;
585
556
number
586
- . call ( Drawing . font , trace . number . font )
587
- . attr ( 'x' , null )
588
- . attr ( 'dy' , bignumberY ) ;
557
+ . call ( Drawing . font , trace . number . font ) ;
589
558
590
559
if ( hasTransition ) {
591
560
number
@@ -604,6 +573,11 @@ function drawNumbers(gd, plotGroup, cd, opts) {
604
573
} else {
605
574
number . text ( bignumberPrefix + fmt ( cd [ 0 ] . y ) + bignumberSuffix ) ;
606
575
}
576
+
577
+ number . attr ( 'data-unformatted' , bignumberPrefix + fmt ( cd [ 0 ] . y ) + bignumberSuffix ) ;
578
+ bignumberbBox = Drawing . bBox ( number . node ( ) ) ;
579
+
580
+ return number ;
607
581
}
608
582
609
583
function drawDelta ( ) {
@@ -622,12 +596,10 @@ function drawNumbers(gd, plotGroup, cd, opts) {
622
596
var deltaFill = function ( d ) {
623
597
return d . delta >= 0 ? trace . delta . increasing . color : trace . delta . decreasing . color ;
624
598
} ;
625
- var delta = numbers . select ( 'tspan .delta' ) ;
599
+ var delta = numbers . select ( 'text .delta' ) ;
626
600
delta
627
601
. call ( Drawing . font , trace . delta . font )
628
- . call ( Color . fill , deltaFill ( cd [ 0 ] ) )
629
- . attr ( 'x' , deltaX )
630
- . attr ( 'dy' , deltaDy ) ;
602
+ . call ( Color . fill , deltaFill ( cd [ 0 ] ) ) ;
631
603
632
604
if ( hasTransition ) {
633
605
delta
@@ -650,11 +622,46 @@ function drawNumbers(gd, plotGroup, cd, opts) {
650
622
return deltaFormatText ( deltaValue ( cd [ 0 ] ) ) ;
651
623
} ) ;
652
624
}
625
+
626
+ delta . attr ( 'data-unformatted' , deltaFormatText ( deltaValue ( cd [ 0 ] ) ) ) ;
627
+ deltabBox = Drawing . bBox ( delta . node ( ) ) ;
628
+
629
+ return delta ;
653
630
}
654
631
655
- if ( trace . _hasDelta ) drawDelta ( ) ;
632
+ // Position delta relative to bignumber
633
+ var delta ;
634
+ if ( trace . _hasDelta ) delta = drawDelta ( ) ;
656
635
if ( trace . _hasNumber ) drawBignumber ( ) ;
657
636
637
+ if ( trace . _hasDelta && trace . _hasNumber ) {
638
+ var bignumberCenter = [
639
+ ( bignumberbBox . left + bignumberbBox . right ) / 2 ,
640
+ ( bignumberbBox . top + bignumberbBox . bottom ) / 2
641
+ ] ;
642
+ var deltaCenter = [
643
+ ( deltabBox . left + deltabBox . right ) / 2 ,
644
+ ( deltabBox . top + deltabBox . bottom ) / 2
645
+ ] ;
646
+
647
+ if ( trace . delta . position === 'left' ) {
648
+ delta . attr ( 'dx' , bignumberbBox . left - deltabBox . right - cn . horizontalPadding ) ;
649
+ delta . attr ( 'dy' , bignumberCenter [ 1 ] - deltaCenter [ 1 ] ) ;
650
+ }
651
+ if ( trace . delta . position === 'right' ) {
652
+ delta . attr ( 'dx' , bignumberbBox . right - deltabBox . left + cn . horizontalPadding ) ;
653
+ delta . attr ( 'dy' , bignumberCenter [ 1 ] - deltaCenter [ 1 ] ) ;
654
+ }
655
+ if ( trace . delta . position === 'bottom' ) {
656
+ delta . attr ( 'dx' , null ) ;
657
+ delta . attr ( 'dy' , deltabBox . height ) ;
658
+ }
659
+ if ( trace . delta . position === 'top' ) {
660
+ delta . attr ( 'dx' , null ) ;
661
+ delta . attr ( 'dy' , bignumberbBox . top ) ;
662
+ }
663
+ }
664
+
658
665
// Resize numbers to fit within space and position
659
666
numbers . attr ( 'transform' , function ( ) {
660
667
var m = opts . numbersScaler ( numbers ) ;
@@ -677,7 +684,10 @@ function drawNumbers(gd, plotGroup, cd, opts) {
677
684
// Stash the top position of numbersbBox for title positioning
678
685
trace . _numbersTop = scaleRatio * ( numbersbBox . top ) + translateY ;
679
686
680
- return strTranslate ( numbersX , translateY ) + ' scale(' + scaleRatio + ')' ;
687
+ var ref = numbersbBox [ numbersAlign ] ;
688
+ if ( numbersAlign === 'center' ) ref = ( numbersbBox . left + numbersbBox . right ) / 2 ;
689
+ var translateX = numbersX - scaleRatio * ref ;
690
+ return strTranslate ( translateX , translateY ) + ' scale(' + scaleRatio + ')' ;
681
691
} ) ;
682
692
}
683
693
0 commit comments