From 1fdb14f24a14207411fffa8921487a6213a9888b Mon Sep 17 00:00:00 2001 From: Antoine Roy-Gobeil Date: Wed, 13 Mar 2019 18:29:26 -0400 Subject: [PATCH 1/2] legend: draw `legendtoggle` last to make it unobstructed --- src/components/legend/draw.js | 9 ++++++--- test/jasmine/tests/legend_test.js | 25 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/components/legend/draw.js b/src/components/legend/draw.js index 6c1baf89ce5..6ca5b72f31d 100644 --- a/src/components/legend/draw.js +++ b/src/components/legend/draw.js @@ -118,10 +118,13 @@ module.exports = function draw(gd) { }) .each(function() { d3.select(this) - .call(drawTexts, gd, maxLength) - .call(setupTraceToggle, gd); + .call(drawTexts, gd, maxLength); }) - .call(style, gd); + .call(style, gd) + .each(function() { + d3.select(this) + .call(setupTraceToggle, gd); + }); Lib.syncOrAsync([Plots.previousPromises, function() { diff --git a/test/jasmine/tests/legend_test.js b/test/jasmine/tests/legend_test.js index 5c0b3b9cf28..dda4c79eadd 100644 --- a/test/jasmine/tests/legend_test.js +++ b/test/jasmine/tests/legend_test.js @@ -15,6 +15,8 @@ var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); var assertPlotSize = require('../assets/custom_assertions').assertPlotSize; +var mock = require('@mocks/legend_horizontal.json'); + var Drawing = require('@src/components/drawing'); describe('legend defaults', function() { @@ -1639,3 +1641,26 @@ describe('legend interaction', function() { }); }); }); + +describe('legend DOM', function() { + 'use strict'; + + it('draws `legendtoggle` last to make sure it is unobstructed', function(done) { + var gd = createGraphDiv(); + Plotly.newPlot(gd, mock) + .then(function() { + // Find legend in figure + var legend = document.getElementsByClassName('legend')[0]; + + // For each legend item + var legendItems = legend.getElementsByClassName('traces'); + Array.prototype.slice.call(legendItems).forEach(function(legendItem) { + // Check that the last element is our `legendtoggle` + var lastEl = legendItem.children[legendItem.children.length - 1]; + expect(lastEl.getAttribute('class')).toBe('legendtoggle'); + }); + }) + .catch(failTest) + .then(done); + }); +}); From 8d08500756b24792324dfbb7c0827da70047647c Mon Sep 17 00:00:00 2001 From: Antoine Roy-Gobeil Date: Wed, 13 Mar 2019 19:11:14 -0400 Subject: [PATCH 2/2] legend tests: destroyGraphDiv after tests --- test/jasmine/tests/legend_test.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/jasmine/tests/legend_test.js b/test/jasmine/tests/legend_test.js index dda4c79eadd..f6cb5b0b63d 100644 --- a/test/jasmine/tests/legend_test.js +++ b/test/jasmine/tests/legend_test.js @@ -1645,6 +1645,8 @@ describe('legend interaction', function() { describe('legend DOM', function() { 'use strict'; + afterEach(destroyGraphDiv); + it('draws `legendtoggle` last to make sure it is unobstructed', function(done) { var gd = createGraphDiv(); Plotly.newPlot(gd, mock)