Skip to content

Commit a375c99

Browse files
committed
fix legend valign middle and lock down with test
1 parent a02910a commit a375c99

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

src/components/legend/style.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ module.exports = function style(s, gd) {
3030
if(gd._fullLayout.legend.valign === 'top') valignFactor = 1.0;
3131
if(gd._fullLayout.legend.valign === 'bottom') valignFactor = -1.0;
3232
var markerOffsetY = valignFactor * (0.5 * (d[0].lineHeight - d[0].height + 3));
33-
if(markerOffsetY) layers.attr('transform', 'translate(0,' + markerOffsetY + ')');
33+
if(!isNaN(markerOffsetY)) layers.attr('transform', 'translate(0,' + markerOffsetY + ')');
3434

3535
var fill = layers
3636
.selectAll('g.legendfill')

test/jasmine/tests/legend_test.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,43 @@ describe('legend relayout update', function() {
665665
.catch(failTest)
666666
.then(done);
667667
});
668+
669+
describe('should update legend valign', function() {
670+
var mock = require('@mocks/legend_valign_top.json');
671+
var gd;
672+
673+
beforeEach(function() {
674+
gd = createGraphDiv();
675+
});
676+
afterEach(destroyGraphDiv);
677+
678+
function markerOffsetY() {
679+
var translateY = d3.select('.legend .traces .layers').attr('transform').match(/translate\(\d+,(-?\d+)\)/)[1];
680+
return parseFloat(translateY);
681+
}
682+
683+
it('it should translate markers', function(done) {
684+
var mockCopy = Lib.extendDeep({}, mock);
685+
686+
var top, middle, bottom;
687+
Plotly.plot(gd, mockCopy.data, mockCopy.layout)
688+
.then(function() {
689+
top = markerOffsetY();
690+
return Plotly.relayout(gd, 'legend.valign', 'middle');
691+
})
692+
.then(function() {
693+
middle = markerOffsetY();
694+
expect(middle).toBeGreaterThan(top);
695+
return Plotly.relayout(gd, 'legend.valign', 'bottom');
696+
})
697+
.then(function() {
698+
bottom = markerOffsetY();
699+
expect(bottom).toBeGreaterThan(middle);
700+
})
701+
.catch(failTest)
702+
.then(done);
703+
});
704+
});
668705
});
669706

670707
describe('legend orientation change:', function() {

0 commit comments

Comments
 (0)