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