@@ -86,6 +86,13 @@ function plotOne(gd, cd, element, transitionOpts) {
8686 var trace = cd0 . trace ;
8787 var hierarchy = cd0 . hierarchy ;
8888 var entry = helpers . findEntryWithLevel ( hierarchy , trace . level ) ;
89+ var ancestorNodes = helpers . listPath ( entry . data ) ;
90+ var numAncestors = ancestorNodes . length ;
91+ entry . _parent = ( numAncestors ?
92+ ancestorNodes [ numAncestors - 1 ] :
93+ hierarchy // parent of root is itself
94+ ) . data ;
95+
8996 var maxDepth = helpers . getMaxDepth ( trace ) ;
9097
9198 var gs = fullLayout . _size ;
@@ -482,9 +489,11 @@ exports.formatSliceLabel = function(pt, entry, trace, cd, fullLayout) {
482489 var hierarchy = cd0 . hierarchy ;
483490 var ref ;
484491 var calcPercent = function ( ) {
492+ var refData = ref . data ? ref . data . data : ref ;
493+
485494 return cdi . hasOwnProperty ( 'v' ) ?
486- cdi . v / ref . data . data . v :
487- cdi . value / ref . data . data . value ;
495+ cdi . v / refData . v :
496+ cdi . value / refData . value ;
488497 } ;
489498
490499 if ( trace . type === 'treemap' && helpers . isHeader ( pt , trace ) ) {
@@ -504,6 +513,8 @@ exports.formatSliceLabel = function(pt, entry, trace, cd, fullLayout) {
504513 var hasFlag = function ( flag ) { return parts . indexOf ( flag ) !== - 1 ; } ;
505514 var thisText = [ ] ;
506515 var tx ;
516+ var parent = helpers . isEntry ( pt ) ? pt . _parent : pt . parent ;
517+ var isRoot = helpers . isHierarchyRoot ( pt ) ;
507518
508519 if ( hasFlag ( 'label' ) && cdi . label ) {
509520 thisText . push ( cdi . label ) ;
@@ -513,41 +524,43 @@ exports.formatSliceLabel = function(pt, entry, trace, cd, fullLayout) {
513524 thisText . push ( helpers . formatValue ( cdi . v , separators ) ) ;
514525 }
515526
516- if ( hasFlag ( 'current path' ) ) {
517- thisText . push ( helpers . getPath ( pt . data ) ) ;
518- }
519-
520- var nPercent = 0 ;
521- if ( hasFlag ( 'percent parent' ) ) nPercent ++ ;
522- if ( hasFlag ( 'percent entry' ) ) nPercent ++ ;
523- if ( hasFlag ( 'percent root' ) ) nPercent ++ ;
524- var hasMultiplePercents = nPercent > 1 ;
525-
526- if ( nPercent ) {
527- var percent ;
528- var addPercent = function ( key ) {
529- tx = helpers . formatPercent ( percent , separators ) ;
530-
531- if ( hasMultiplePercents ) tx += ' of ' + key + ' ' ;
532- thisText . push ( tx ) ;
533- } ;
534-
535- var makePercent = function ( key ) {
536- percent = calcPercent ( ) ;
537- addPercent ( key ) ;
538- } ;
539-
540- if ( hasFlag ( 'percent parent' ) && pt . parent ) {
541- ref = pt . parent ;
542- makePercent ( 'parent' ) ;
527+ if ( ! isRoot ) {
528+ if ( hasFlag ( 'current path' ) ) {
529+ thisText . push ( helpers . getPath ( pt . data ) ) ;
543530 }
544- if ( hasFlag ( 'percent entry' ) && pt . parent ) {
545- ref = entry ;
546- makePercent ( 'entry' ) ;
547- }
548- if ( hasFlag ( 'percent root' ) && ( pt . parent || helpers . isLeaf ( pt ) ) ) {
549- ref = hierarchy ;
550- makePercent ( 'root' ) ;
531+
532+ var nPercent = 0 ;
533+ if ( hasFlag ( 'percent parent' ) ) nPercent ++ ;
534+ if ( hasFlag ( 'percent entry' ) ) nPercent ++ ;
535+ if ( hasFlag ( 'percent root' ) ) nPercent ++ ;
536+ var hasMultiplePercents = nPercent > 1 ;
537+
538+ if ( nPercent ) {
539+ var percent ;
540+ var addPercent = function ( key ) {
541+ tx = helpers . formatPercent ( percent , separators ) ;
542+
543+ if ( hasMultiplePercents ) tx += ' of ' + key + ' ' ;
544+ thisText . push ( tx ) ;
545+ } ;
546+
547+ var makePercent = function ( key ) {
548+ percent = calcPercent ( ) ;
549+ addPercent ( key ) ;
550+ } ;
551+
552+ if ( hasFlag ( 'percent parent' ) && parent ) {
553+ ref = parent ;
554+ makePercent ( 'parent' ) ;
555+ }
556+ if ( hasFlag ( 'percent entry' ) && parent ) {
557+ ref = entry ;
558+ makePercent ( 'entry' ) ;
559+ }
560+ if ( hasFlag ( 'percent root' ) && ( parent || helpers . isLeaf ( pt ) ) ) {
561+ ref = hierarchy ;
562+ makePercent ( 'root' ) ;
563+ }
551564 }
552565 }
553566
0 commit comments