Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit a1a2a2b

Browse filesBrowse files
committed
rework text transform to move inside slice function
- cast _text to pt for easier debugging - pass pt object to the function instead of separated arguments - do not return in the middle of draw functions - expand void area for blank text
1 parent 31ed977 commit a1a2a2b
Copy full SHA for a1a2a2b

File tree

Expand file treeCollapse file tree

4 files changed

+53
-58
lines changed
Filter options
Expand file treeCollapse file tree

4 files changed

+53
-58
lines changed

‎src/traces/treemap/draw_ancestors.js

Copy file name to clipboardExpand all lines: src/traces/treemap/draw_ancestors.js
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,23 +132,23 @@ module.exports = function drawAncestors(gd, cd, entry, slices, opts) {
132132
hovered: false
133133
});
134134

135+
pt._text = (helpers.getPtLabel(pt) || '').split('<br>').join(' ') || '';
136+
135137
var sliceTextGroup = Lib.ensureSingle(sliceTop, 'g', 'slicetext');
136138
var sliceText = Lib.ensureSingle(sliceTextGroup, 'text', '', function(s) {
137139
// prohibit tex interpretation until we can handle
138140
// tex and regular text together
139141
s.attr('data-notex', 1);
140142
});
141143

142-
var tx = (helpers.getPtLabel(pt) || ' ').split('<br>').join(' ');
143-
144-
sliceText.text(tx)
144+
sliceText.text(pt._text)
145145
.classed('slicetext', true)
146146
.attr('text-anchor', 'start')
147147
.call(Drawing.font, helpers.determineTextFont(trace, pt, fullLayout.font, trace.pathdir))
148148
.call(svgTextUtils.convertToTspans, gd);
149149

150150
pt.textBB = Drawing.bBox(sliceText.node());
151-
pt.transform = toMoveInsideSlice(pt.x0, pt.x1, pt.y0, pt.y1, pt.textBB, {
151+
pt.transform = toMoveInsideSlice(pt, {
152152
onPathbar: true
153153
});
154154

‎src/traces/treemap/draw_descendants.js

Copy file name to clipboardExpand all lines: src/traces/treemap/draw_descendants.js
+13-27Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ var d3 = require('d3');
1212
var Lib = require('../../lib');
1313
var Drawing = require('../../components/drawing');
1414
var svgTextUtils = require('../../lib/svg_text_utils');
15-
var TEXTPAD = require('../bar/constants').TEXTPAD;
15+
1616
var partition = require('./partition');
1717
var styleOne = require('./style').styleOne;
1818
var constants = require('./constants');
@@ -157,45 +157,31 @@ module.exports = function drawDescendants(gd, cd, entry, slices, opts) {
157157
hovered: false
158158
});
159159

160+
if(pt.x0 === pt.x1 && pt.y0 === pt.y1) {
161+
pt._text = ' '; // use one space character instead of a blank string in this case
162+
} else {
163+
if(isHeader) {
164+
pt._text = noRoomForHeader ? '' : helpers.getPtLabel(pt) || '';
165+
} else {
166+
pt._text = formatSliceLabel(pt, entry, trace, cd, fullLayout) || '';
167+
}
168+
}
169+
160170
var sliceTextGroup = Lib.ensureSingle(sliceTop, 'g', 'slicetext');
161171
var sliceText = Lib.ensureSingle(sliceTextGroup, 'text', '', function(s) {
162172
// prohibit tex interpretation until we can handle
163173
// tex and regular text together
164174
s.attr('data-notex', 1);
165175
});
166176

167-
var _x0 = pt.x0;
168-
var _x1 = pt.x1;
169-
var _y0 = pt.y0;
170-
var _y1 = pt.y1;
171-
172-
var tx;
173-
if(_x0 < _x1 && _y0 < _y1) {
174-
if(isHeader) {
175-
if(noRoomForHeader) return;
176-
177-
tx = helpers.getPtLabel(pt);
178-
} else {
179-
tx = formatSliceLabel(pt, entry, trace, cd, fullLayout) || ' ';
180-
}
181-
} else { // handle text positions for out of range cases e.g. with maxdepth
182-
tx = ' ';
183-
184-
var expand = 2 * TEXTPAD;
185-
_x0 -= expand;
186-
_x1 += expand;
187-
_y0 -= expand;
188-
_y1 += expand;
189-
}
190-
191-
sliceText.text(tx)
177+
sliceText.text(pt._text)
192178
.classed('slicetext', true)
193179
.attr('text-anchor', hasRight ? 'end' : (hasLeft || isHeader) ? 'start' : 'middle')
194180
.call(Drawing.font, helpers.determineTextFont(trace, pt, fullLayout.font))
195181
.call(svgTextUtils.convertToTspans, gd);
196182

197183
pt.textBB = Drawing.bBox(sliceText.node());
198-
pt.transform = toMoveInsideSlice(_x0, _x1, _y0, _y1, pt.textBB, {
184+
pt.transform = toMoveInsideSlice(pt, {
199185
isHeader: isHeader
200186
});
201187

‎src/traces/treemap/plot.js

Copy file name to clipboardExpand all lines: src/traces/treemap/plot.js
+33-24Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -162,14 +162,14 @@ function plotOne(gd, cd, element, transitionOpts) {
162162
var cenX = -vpw / 2 + gs.l + gs.w * (domain.x[1] + domain.x[0]) / 2;
163163
var cenY = -vph / 2 + gs.t + gs.h * (1 - (domain.y[1] + domain.y[0]) / 2);
164164

165-
var viewMapX = function(x) { return cenX + x; };
166-
var viewMapY = function(y) { return cenY + y; };
165+
var viewMapX = function(x) { return cenX + (x || 0); };
166+
var viewMapY = function(y) { return cenY + (y || 0); };
167167

168168
var barY0 = viewMapY(0);
169169
var barX0 = viewMapX(0);
170170

171-
var viewBarX = function(x) { return barX0 + x; };
172-
var viewBarY = function(y) { return barY0 + y; };
171+
var viewBarX = function(x) { return barX0 + (x || 0); };
172+
var viewBarY = function(y) { return barY0 + (y || 0); };
173173

174174
function pos(x, y) {
175175
return x + ',' + y;
@@ -273,7 +273,23 @@ function plotOne(gd, cd, element, transitionOpts) {
273273
);
274274
};
275275

276-
var toMoveInsideSlice = function(x0, x1, y0, y1, textBB, opts) {
276+
var toMoveInsideSlice = function(pt, opts) {
277+
var x0 = pt.x0;
278+
var x1 = pt.x1;
279+
var y0 = pt.y0;
280+
var y1 = pt.y1;
281+
var textBB = pt.textBB;
282+
283+
if(x0 === x1) {
284+
x0 -= TEXTPAD;
285+
x1 += TEXTPAD;
286+
}
287+
288+
if(y0 === y1) {
289+
y0 -= TEXTPAD;
290+
y1 += TEXTPAD;
291+
}
292+
277293
var hasFlag = function(f) { return trace.textposition.indexOf(f) !== -1; };
278294

279295
var hasBottom = hasFlag('bottom');
@@ -327,20 +343,13 @@ function plotOne(gd, cd, element, transitionOpts) {
327343
else if(offsetDir === 'right') transform.targetX += deltaX;
328344
}
329345

330-
transform.targetX = viewMapX(transform.targetX);
331-
transform.targetY = viewMapY(transform.targetY);
332-
333-
if(isNaN(transform.targetX) || isNaN(transform.targetY)) {
334-
return {};
335-
}
336-
337346
return {
338347
scale: transform.scale,
339348
rotate: transform.rotate,
340349
textX: transform.textX,
341350
textY: transform.textY,
342-
targetX: transform.targetX,
343-
targetY: transform.targetY
351+
targetX: viewMapX(transform.targetX),
352+
targetY: viewMapY(transform.targetY)
344353
};
345354
};
346355

@@ -428,16 +437,16 @@ function plotOne(gd, cd, element, transitionOpts) {
428437
var origin = getOrigin(pt, onPathbar, refRect, size);
429438

430439
Lib.extendFlat(prev, {
431-
transform: toMoveInsideSlice(
432-
origin.x0,
433-
origin.x1,
434-
origin.y0,
435-
origin.y1,
436-
pt.textBB,
437-
{
438-
isHeader: helpers.isHeader(pt, trace)
439-
}
440-
)
440+
transform: toMoveInsideSlice({
441+
x0: origin.x0,
442+
x1: origin.x1,
443+
y0: origin.y0,
444+
y1: origin.y1,
445+
textBB: pt.textBB,
446+
_text: pt._text
447+
}, {
448+
isHeader: helpers.isHeader(pt, trace)
449+
})
441450
});
442451

443452
if(prev0) {

‎test/jasmine/tests/treemap_test.js

Copy file name to clipboardExpand all lines: test/jasmine/tests/treemap_test.js
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,7 +1066,7 @@ describe('Test treemap restyle:', function() {
10661066
.then(_restyle({textinfo: 'value'}))
10671067
.then(_assert('show input values', ['Root', 'B', '1', '3']))
10681068
.then(_restyle({textinfo: 'none'}))
1069-
.then(_assert('no textinfo', ['Root', 'B', ' ', ' '])) // N.B. replaced empty string with space character for better transitions
1069+
.then(_assert('no textinfo', ['Root', 'B', '', '']))
10701070
.then(_restyle({textinfo: 'label+text+value'}))
10711071
.then(_assert('show everything', ['Root', 'B', 'A\n1\nnode1', 'b\n3\nnode3']))
10721072
.then(_restyle({textinfo: null}))
@@ -1127,7 +1127,7 @@ describe('Test treemap tweening:', function() {
11271127
if(attrName === 'transform') {
11281128
var fake = {attr: function() { return actual; }};
11291129
var xy = Drawing.getTranslate(fake);
1130-
expect([xy.x, xy.y]).toBeWithinArray(exp, 1, msg2);
1130+
expect([xy.x, xy.y]).toBeWithinArray(exp, 2, msg2);
11311131
} else {
11321132
// we could maybe to bring in:
11331133
// https://github.com/hughsk/svg-path-parser
@@ -1225,7 +1225,7 @@ describe('Test treemap tweening:', function() {
12251225
'M284.375,188.5L548.375,188.5L548.375,308.5L284.375,308.5Z'
12261226
);
12271227
_assert('move B text to new position', 'transform', 'B', [220.25126, 0]);
1228-
_assert('enter b text to new position', 'transform', 'b', [284.66071, 35714285714286]);
1228+
_assert('enter b text to new position', 'transform', 'b', [286.16071428571433, 35714285714286]);
12291229
})
12301230
.catch(failTest)
12311231
.then(done);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.