@@ -542,55 +542,43 @@ function computeLegendDimensions(gd, groups, traces) {
542
542
combinedItemWidth += w ;
543
543
} ) ;
544
544
545
+ var maxRowWidth = 0 ;
546
+
545
547
if ( isGrouped ) {
546
- var groupData = groups . data ( ) ;
547
- var i ;
548
+ var maxGroupHeightInRow = 0 ;
549
+ var groupOffsetX = 0 ;
550
+ var groupOffsetY = 0 ;
551
+ groups . each ( function ( ) {
552
+ var maxWidthInGroup = 0 ;
553
+ var offsetY = 0 ;
554
+ d3 . select ( this ) . selectAll ( 'g.traces' ) . each ( function ( d ) {
555
+ var h = d [ 0 ] . height ;
556
+ Drawing . setTranslate ( this , 0 , itemGap + bw + h / 2 + offsetY ) ;
557
+ offsetY += h ;
558
+ maxWidthInGroup = Math . max ( maxWidthInGroup , textGap + d [ 0 ] . width ) ;
559
+ } ) ;
560
+ maxGroupHeightInRow = Math . max ( maxGroupHeightInRow , offsetY ) ;
548
561
549
- var maxGroupHeight = 0 ;
550
- for ( i = 0 ; i < groupData . length ; i ++ ) {
551
- var groupHeight = groupData [ i ] . reduce ( function ( a , b ) { return a + b [ 0 ] . height ; } , 0 ) ;
552
- maxGroupHeight = Math . max ( maxGroupHeight , groupHeight ) ;
553
- }
562
+ var next = maxWidthInGroup + itemGap ;
554
563
555
- var groupXOffsets = [ opts . _width ] ;
556
- var groupYOffsets = [ ] ;
557
- var rowNum = 0 ;
558
- for ( i = 0 ; i < groupData . length ; i ++ ) {
559
- if ( ( opts . _width + itemGap + maxItemWidth + bw ) > opts . _maxWidth ) {
560
- groupXOffsets [ groupXOffsets . length - 1 ] = groupXOffsets [ 0 ] ;
561
- opts . _width = maxItemWidth + itemGap ;
562
- rowNum ++ ;
563
- } else {
564
- opts . _width += maxItemWidth + itemGap ;
564
+ if ( ( next + bw + groupOffsetX ) > opts . _maxWidth ) {
565
+ maxRowWidth = Math . max ( maxRowWidth , groupOffsetX ) ;
566
+ groupOffsetX = 0 ;
567
+ groupOffsetY += maxGroupHeightInRow + opts . tracegroupgap ;
568
+ maxGroupHeightInRow = offsetY ;
565
569
}
566
570
567
- groupXOffsets . push ( opts . _width ) ;
568
- groupYOffsets . push ( rowNum * maxGroupHeight + ( rowNum > 0 ? opts . tracegroupgap : 0 ) ) ;
569
- }
570
-
571
- groups . each ( function ( d , i ) {
572
- Drawing . setTranslate ( this , groupXOffsets [ i ] , groupYOffsets [ i ] ) ;
573
- } ) ;
571
+ Drawing . setTranslate ( this , groupOffsetX , groupOffsetY ) ;
574
572
575
- groups . each ( function ( ) {
576
- var group = d3 . select ( this ) ;
577
- var groupTraces = group . selectAll ( 'g.traces' ) ;
578
- var groupHeight = 0 ;
579
-
580
- groupTraces . each ( function ( d ) {
581
- var h = d [ 0 ] . height ;
582
- Drawing . setTranslate ( this , 0 , itemGap + bw + groupHeight + h / 2 ) ;
583
- groupHeight += h ;
584
- } ) ;
573
+ groupOffsetX += next ;
585
574
} ) ;
586
575
587
- opts . _height = groupYOffsets [ groupYOffsets . length - 1 ] + maxGroupHeight + endPad ;
588
- opts . _width = Math . max . apply ( null , groupXOffsets ) + maxItemWidth + textGap + bw2 ;
589
576
toggleRectWidth = maxItemWidth ;
577
+ opts . _width = Math . max ( maxRowWidth , groupOffsetX ) + bw ;
578
+ opts . _height = groupOffsetY + maxGroupHeightInRow + endPad ;
590
579
} else {
591
580
var oneRowLegend = ( combinedItemWidth + bw2 + ( traces . size ( ) - 1 ) * itemGap ) < opts . _maxWidth ;
592
581
593
- var maxRowWidth = 0 ;
594
582
var maxItemHeightInRow = 0 ;
595
583
var offsetX = 0 ;
596
584
var offsetY = 0 ;
0 commit comments