From 224d418b5f75f474986086b8c735605408c05a67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Wed, 1 Feb 2017 17:39:01 -0500 Subject: [PATCH 1/3] use _needsExpand to determine if new rangeslider range is required - instead of `(!rangeslider.range)`-based criterion - which allows for data update to correctly expand the range slider - rm now useless axis.autorange criterion for _needsExpand --- src/components/rangeslider/defaults.js | 2 +- src/components/rangeslider/draw.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/rangeslider/defaults.js b/src/components/rangeslider/defaults.js index 379a4596b84..98b20b5ae9f 100644 --- a/src/components/rangeslider/defaults.js +++ b/src/components/rangeslider/defaults.js @@ -36,7 +36,7 @@ module.exports = function handleDefaults(layoutIn, layoutOut, axName) { coerce('range'); // Expand slider range to the axis range - if(containerOut.range && !axOut.autorange) { + if(containerOut.range) { // TODO: what if the ranges are reversed? var outRange = containerOut.range, axRange = axOut.range; diff --git a/src/components/rangeslider/draw.js b/src/components/rangeslider/draw.js index ded3198d316..56f39ce64d9 100644 --- a/src/components/rangeslider/draw.js +++ b/src/components/rangeslider/draw.js @@ -82,7 +82,7 @@ module.exports = function(gd) { // compute new slider range using axis autorange if necessary // copy back range to input range slider container to skip // this step in subsequent draw calls - if(!opts.range) { + if(axisOpts._needsExpand && axisOpts._min.length && axisOpts._max.length) { opts._input.range = opts.range = Axes.getAutoRange(axisOpts); } From 12e1286787fe2f698d83dc95f9ee118bcc6966f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Wed, 1 Feb 2017 17:39:33 -0500 Subject: [PATCH 2/3] add cases the range slider range updates under data array updates --- test/jasmine/tests/range_slider_test.js | 81 +++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/test/jasmine/tests/range_slider_test.js b/test/jasmine/tests/range_slider_test.js index 0348c8cfaac..ade1f55d119 100644 --- a/test/jasmine/tests/range_slider_test.js +++ b/test/jasmine/tests/range_slider_test.js @@ -536,6 +536,10 @@ describe('the range slider', function() { describe('in general', function() { + beforeAll(function() { + jasmine.addMatchers(customMatchers); + }); + beforeEach(function() { gd = createGraphDiv(); }); @@ -561,6 +565,83 @@ describe('the range slider', function() { }) .then(done); }); + + it('should expand its range in accordance with new data arrays', function(done) { + + function assertRange(expected) { + expect(gd.layout.xaxis.range).toBeCloseToArray(expected); + expect(gd.layout.xaxis.rangeslider.range).toBeCloseToArray(expected); + } + + Plotly.plot(gd, [{ + y: [2, 1, 2] + }], { + xaxis: { rangeslider: {} } + }) + .then(function() { + assertRange([-0.13, 2.13]); + + return Plotly.restyle(gd, 'y', [[2, 1, 2, 1]]); + }) + .then(function() { + assertRange([-0.19, 3.19]); + + return Plotly.extendTraces(gd, { y: [[2, 1]] }, [0]); + }) + .then(function() { + assertRange([-0.32, 5.32]); + + return Plotly.addTraces(gd, { x: [0, 10], y: [2, 1] }); + }) + .then(function() { + assertRange([-0.68, 10.68]); + + return Plotly.deleteTraces(gd, [1]); + }) + .then(function() { + assertRange([-0.31, 5.31]); + }) + .then(done); + }); + + it('should not expand its range when range slider range is set', function(done) { + var rangeSliderRange = [-1, 11]; + + function assertRange(expected) { + expect(gd.layout.xaxis.range).toBeCloseToArray(expected); + expect(gd.layout.xaxis.rangeslider.range).toEqual(rangeSliderRange); + } + + Plotly.plot(gd, [{ + y: [2, 1, 2] + }], { + xaxis: { rangeslider: { range: [-1, 11]} } + }) + .then(function() { + assertRange([-0.13, 2.13]); + + return Plotly.restyle(gd, 'y', [[2, 1, 2, 1]]); + }) + .then(function() { + assertRange([-0.19, 3.19]); + + return Plotly.extendTraces(gd, { y: [[2, 1]] }, [0]); + }) + .then(function() { + assertRange([-0.32, 5.32]); + + return Plotly.addTraces(gd, { x: [0, 10], y: [2, 1] }); + }) + .then(function() { + assertRange([-0.68, 10.68]); + + return Plotly.deleteTraces(gd, [1]); + }) + .then(function() { + assertRange([-0.31, 5.31]); + }) + .then(done); + }); }); }); From 6bc83830d2b302d03cd304d0de855fb56cf1552a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Thu, 2 Feb 2017 11:29:18 -0500 Subject: [PATCH 3/3] lower precision to make range slider pass on ci --- test/jasmine/tests/range_slider_test.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/test/jasmine/tests/range_slider_test.js b/test/jasmine/tests/range_slider_test.js index ade1f55d119..8057814fa62 100644 --- a/test/jasmine/tests/range_slider_test.js +++ b/test/jasmine/tests/range_slider_test.js @@ -536,6 +536,9 @@ describe('the range slider', function() { describe('in general', function() { + // lower toBeCloseToArray precision for FF38 on CI + var precision = 1e-2; + beforeAll(function() { jasmine.addMatchers(customMatchers); }); @@ -569,8 +572,8 @@ describe('the range slider', function() { it('should expand its range in accordance with new data arrays', function(done) { function assertRange(expected) { - expect(gd.layout.xaxis.range).toBeCloseToArray(expected); - expect(gd.layout.xaxis.rangeslider.range).toBeCloseToArray(expected); + expect(gd.layout.xaxis.range).toBeCloseToArray(expected, precision); + expect(gd.layout.xaxis.rangeslider.range).toBeCloseToArray(expected, precision); } Plotly.plot(gd, [{ @@ -608,8 +611,8 @@ describe('the range slider', function() { var rangeSliderRange = [-1, 11]; function assertRange(expected) { - expect(gd.layout.xaxis.range).toBeCloseToArray(expected); - expect(gd.layout.xaxis.rangeslider.range).toEqual(rangeSliderRange); + expect(gd.layout.xaxis.range).toBeCloseToArray(expected, precision); + expect(gd.layout.xaxis.rangeslider.range).toEqual(rangeSliderRange, precision); } Plotly.plot(gd, [{