Skip to content

Commit 6a4b451

Browse files
committed
treemap pathbar.textfont should have an effect similar to insidetext.textfont
- fixing issue 4451
1 parent 2cf7def commit 6a4b451

14 files changed

+721
-32
lines changed

src/traces/bar/defaults.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ function handleText(traceIn, traceOut, layout, coerce, textposition, opts) {
127127
var moduleHasCliponaxis = !(opts.moduleHasCliponaxis === false);
128128
var moduleHasTextangle = !(opts.moduleHasTextangle === false);
129129
var moduleHasInsideanchor = !(opts.moduleHasInsideanchor === false);
130+
var hasPathbar = !!opts.hasPathbar;
130131

131132
var hasBoth = Array.isArray(textposition) || textposition === 'auto';
132133
var hasInside = hasBoth || textposition === 'inside';
@@ -147,8 +148,15 @@ function handleText(traceIn, traceOut, layout, coerce, textposition, opts) {
147148
}
148149
coerceFont(coerce, 'insidetextfont', insideTextFontDefault);
149150

150-
if(hasOutside) coerceFont(coerce, 'outsidetextfont', dfltFont);
151+
if(hasPathbar) {
152+
var pathbarTextFontDefault = Lib.extendFlat({}, dfltFont);
153+
if(isColorInheritedFromLayoutFont) {
154+
delete pathbarTextFontDefault.color;
155+
}
156+
coerceFont(coerce, 'pathbar.textfont', pathbarTextFontDefault);
157+
}
151158

159+
if(hasOutside) coerceFont(coerce, 'outsidetextfont', dfltFont);
152160

153161
if(moduleHasSelected) coerce('selected.textfont.color');
154162
if(moduleHasUnselected) coerce('unselected.textfont.color');

src/traces/bar/style.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,19 @@ function resizeText(gd, gTrace, traceType) {
2626
if(minSize) {
2727
var shouldHide = fullLayout.uniformtext.mode === 'hide';
2828

29-
var t;
29+
var selector;
3030
switch(traceType) {
3131
case 'funnelarea' :
3232
case 'pie' :
3333
case 'sunburst' :
3434
case 'treemap' :
35-
t = gTrace.selectAll('g.slice');
35+
selector = 'g.slice';
3636
break;
3737
default :
38-
t = gTrace.selectAll('g.points > g.point');
38+
selector = 'g.points > g.point';
3939
}
4040

41-
t.each(function(d) {
41+
gTrace.selectAll(selector).each(function(d) {
4242
var transform = d.transform;
4343
if(transform) {
4444
transform.scale = (shouldHide && transform.hide) ? 0 : minSize / transform.fontSize;

src/traces/sunburst/helpers.js

+15-8
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,16 @@ function determineOutsideTextFont(trace, pt, layoutFont) {
8383
};
8484
}
8585

86-
function determineInsideTextFont(trace, pt, layoutFont, cont) {
86+
function determineInsideTextFont(trace, pt, layoutFont, opts) {
87+
var onPathbar = (opts || {}).onPathbar;
88+
8789
var cdi = pt.data.data;
8890
var ptNumber = cdi.i;
8991

90-
var customColor = Lib.castOption(trace, ptNumber, 'insidetextfont.color');
92+
var customColor = Lib.castOption(trace, ptNumber,
93+
(onPathbar ? 'pathbar.textfont' : 'insidetextfont') + '.color'
94+
);
95+
9196
if(!customColor && trace._input.textfont) {
9297
// Why not simply using trace.textfont? Because if not set, it
9398
// defaults to layout.font which has a default color. But if
@@ -98,16 +103,18 @@ function determineInsideTextFont(trace, pt, layoutFont, cont) {
98103

99104
return {
100105
color: customColor || Color.contrast(cdi.color),
101-
family: exports.getInsideTextFontKey('family', cont || trace, pt, layoutFont),
102-
size: exports.getInsideTextFontKey('size', cont || trace, pt, layoutFont)
106+
family: exports.getInsideTextFontKey('family', trace, pt, layoutFont, opts),
107+
size: exports.getInsideTextFontKey('size', trace, pt, layoutFont, opts)
103108
};
104109
}
105110

106-
exports.getInsideTextFontKey = function(keyStr, trace, pt, layoutFont) {
111+
exports.getInsideTextFontKey = function(keyStr, trace, pt, layoutFont, opts) {
112+
var onPathbar = (opts || {}).onPathbar;
113+
var cont = onPathbar ? 'pathbar.textfont' : 'insidetextfont';
107114
var ptNumber = pt.data.data.i;
108115

109116
return (
110-
Lib.castOption(trace, ptNumber, 'insidetextfont.' + keyStr) ||
117+
Lib.castOption(trace, ptNumber, cont + '.' + keyStr) ||
111118
Lib.castOption(trace, ptNumber, 'textfont.' + keyStr) ||
112119
layoutFont.size
113120
);
@@ -127,10 +134,10 @@ exports.isOutsideText = function(trace, pt) {
127134
return !trace._hasColorscale && exports.isHierarchyRoot(pt);
128135
};
129136

130-
exports.determineTextFont = function(trace, pt, layoutFont, cont) {
137+
exports.determineTextFont = function(trace, pt, layoutFont, opts) {
131138
return exports.isOutsideText(trace, pt) ?
132139
determineOutsideTextFont(trace, pt, layoutFont) :
133-
determineInsideTextFont(trace, pt, layoutFont, cont);
140+
determineInsideTextFont(trace, pt, layoutFont, opts);
134141
};
135142

136143
exports.hasTransition = function(transitionOpts) {

src/traces/treemap/defaults.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,11 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
5757
coerce('hovertext');
5858
coerce('hovertemplate');
5959

60+
var hasPathbar = coerce('pathbar.visible');
61+
6062
var textposition = 'auto';
6163
handleText(traceIn, traceOut, layout, coerce, textposition, {
64+
hasPathbar: hasPathbar,
6265
moduleHasSelected: false,
6366
moduleHasUnselected: false,
6467
moduleHasConstrain: false,
@@ -103,10 +106,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
103106
}
104107
};
105108

106-
var hasPathbar = coerce('pathbar.visible');
107109
if(hasPathbar) {
108-
Lib.coerceFont(coerce, 'pathbar.textfont', layout.font);
109-
110110
// This works even for multi-line labels as treemap pathbar trim out line breaks
111111
coerce('pathbar.thickness', traceOut.pathbar.textfont.size + 2 * TEXTPAD);
112112

src/traces/treemap/draw_ancestors.js

+4-14
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ module.exports = function drawAncestors(gd, cd, entry, slices, opts) {
9797
}
9898

9999
updateSlices.each(function(pt) {
100-
pt._hoverX = viewX(pt.x1 - height / 2);
100+
pt._hoverX = viewX(pt.x1 - Math.min(width, height) / 2);
101101
pt._hoverY = viewY(pt.y1 - height / 2);
102102

103103
var sliceTop = d3.select(this);
@@ -141,7 +141,9 @@ module.exports = function drawAncestors(gd, cd, entry, slices, opts) {
141141
s.attr('data-notex', 1);
142142
});
143143

144-
var font = Lib.ensureUniformFontSize(gd, helpers.determineTextFont(trace, pt, fullLayout.font, trace.pathdir));
144+
var font = Lib.ensureUniformFontSize(gd, helpers.determineTextFont(trace, pt, fullLayout.font, {
145+
onPathbar: true
146+
}));
145147

146148
sliceText.text(pt._text || ' ') // use one space character instead of a blank string to avoid jumps during transition
147149
.classed('slicetext', true)
@@ -154,20 +156,8 @@ module.exports = function drawAncestors(gd, cd, entry, slices, opts) {
154156
fontSize: font.size,
155157
onPathbar: true
156158
});
157-
158159
pt.transform.fontSize = font.size;
159160

160-
if(helpers.isOutsideText(trace, pt)) {
161-
// consider in/out diff font sizes
162-
var outsideFont = helpers.getOutsideTextFontKey('size', trace, pt, fullLayout.font);
163-
var insideFont = helpers.getInsideTextFontKey('size', trace, pt, fullLayout.font);
164-
165-
var diffFontSize = outsideFont - insideFont;
166-
167-
pt.transform.targetY -= diffFontSize;
168-
pt.transform.fontSize -= diffFontSize;
169-
}
170-
171161
if(hasTransition) {
172162
sliceText.transition().attrTween('transform', function(pt2) {
173163
var interp = makeUpdateTextInterpolator(pt2, onPathbar, refRect, [width, height]);
72.8 KB
Loading
Loading
-60 Bytes
Loading
791 Bytes
Loading
907 Bytes
Loading

0 commit comments

Comments
 (0)