From 18bee20eba2a70812dcc210c96ebe2ab062c8e39 Mon Sep 17 00:00:00 2001 From: Andrew Yan <ayan@usgs.gov> Date: Mon, 12 Feb 2018 08:54:11 -0600 Subject: [PATCH] fix incorrect legend positioning on window resize --- .../src/scripts/components/hydrograph/index.js | 7 ++++--- .../src/scripts/components/hydrograph/legend.js | 13 ++++++++++++- .../components/hydrograph/legend.spec.js | 17 ++++++++++++++++- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/assets/src/scripts/components/hydrograph/index.js b/assets/src/scripts/components/hydrograph/index.js index 06dc5796b..deef709d6 100644 --- a/assets/src/scripts/components/hydrograph/index.js +++ b/assets/src/scripts/components/hydrograph/index.js @@ -123,10 +123,10 @@ const plotTooltips = function (elem, {xScale, yScale, data}) { }; -const plotLegend = function(elem, {displayItems}) { +const plotLegend = function(elem, {displayItems, width}) { elem.select('.legend').remove(); let markers = createLegendMarkers(displayItems); - drawSimpleLegend(elem, markers); + drawSimpleLegend(elem, markers, width); }; @@ -184,7 +184,8 @@ const timeSeriesGraph = function (elem) { isInteractive: () => true }))) .call(link(plotLegend, createStructuredSelector({ - displayItems: legendDisplaySelector + displayItems: legendDisplaySelector, + width: state => state.width }))) .append('g') .attr('transform', `translate(${MARGIN.left},${MARGIN.top})`) diff --git a/assets/src/scripts/components/hydrograph/legend.js b/assets/src/scripts/components/hydrograph/legend.js index a72688d4c..2b465a4f4 100644 --- a/assets/src/scripts/components/hydrograph/legend.js +++ b/assets/src/scripts/components/hydrograph/legend.js @@ -9,6 +9,7 @@ const { CIRCLE_RADIUS } = require('./layout'); * * @param svg * @param legendMarkers + * @param width * @param startingXPosition * @param markerYPosition * @param textYPosition @@ -17,6 +18,7 @@ const { CIRCLE_RADIUS } = require('./layout'); */ function drawSimpleLegend(svg, legendMarkers, + width=null, startingXPosition=0, markerYPosition=-4, textYPosition=0, @@ -69,7 +71,16 @@ function drawSimpleLegend(svg, } // center the legend group in the svg let legendBBox = legend.node().getBBox(); - let legendXPosition = (svgBBox.width - legendBBox.width) / 2; + + let legendXPosition; + + if (width) { + legendXPosition = (width - legendBBox.width) / 2; + } + else { + legendXPosition = (svgBBox.width - legendBBox.width) / 2; + } + legend.attr('transform', `translate(${legendXPosition}, ${svgBBox.height-15})`); } diff --git a/assets/src/scripts/components/hydrograph/legend.spec.js b/assets/src/scripts/components/hydrograph/legend.spec.js index 1e3849a3e..ba693852e 100644 --- a/assets/src/scripts/components/hydrograph/legend.spec.js +++ b/assets/src/scripts/components/hydrograph/legend.spec.js @@ -41,7 +41,7 @@ describe('Legend module', () => { svgNode.remove(); }); - it('Adds a legend', () => { + it('Adds a legend when width is not provided', () => { drawSimpleLegend(svgNode, legendMarkers); expect(svgNode.selectAll('.legend').size()).toBe(1); expect(svgNode.selectAll('line').size()).toBe(1); @@ -52,8 +52,23 @@ describe('Legend module', () => { expect(line.attr('x2')).toBe('20'); let circle = svgNode.select('circle'); expect(circle.attr('class')).toBe('some-other-class'); + expect(select('g.legend').attr('transform')).toEqual('translate(-127.5, -15)'); }); + + it('Adds a legend when width is provided', () => { + drawSimpleLegend(svgNode, legendMarkers, 200); + expect(svgNode.selectAll('.legend').size()).toBe(1); + expect(svgNode.selectAll('line').size()).toBe(1); + expect(svgNode.selectAll('circle').size()).toBe(1); + expect(svgNode.selectAll('text').size()).toBe(2); + let line = svgNode.select('line'); + expect(line.attr('x1')).toBe('0'); + expect(line.attr('x2')).toBe('20'); + let circle = svgNode.select('circle'); + expect(circle.attr('class')).toBe('some-other-class'); + expect(select('g.legend').attr('transform')).toEqual('translate(-27.5, -15)'); + }); }); describe('createLegendMarkers', () => { -- GitLab