From 2b2690696de4c51a9c725683f07b96679b21cbd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 3 Dec 2018 13:03:42 -0500 Subject: [PATCH 1/3] fix rangeslider range expansion on reversed-range axes --- src/components/rangeslider/draw.js | 23 +++++--- test/jasmine/tests/range_slider_test.js | 70 +++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 7 deletions(-) diff --git a/src/components/rangeslider/draw.js b/src/components/rangeslider/draw.js index 76ef7a04a78..dfefe0098f4 100644 --- a/src/components/rangeslider/draw.js +++ b/src/components/rangeslider/draw.js @@ -77,19 +77,28 @@ module.exports = function(gd) { // update range // Expand slider range to the axis range - // TODO: what if the ranges are reversed? if(opts.range) { - var outRange = opts.range; - var axRange = axisOpts.range; + var rng = Lib.simpleMap(opts.range, axisOpts.r2l); + var axRng = Lib.simpleMap(axisOpts.range, axisOpts.r2l); + var newRng; + + if(axRng[0] < axRng[1]) { + newRng = [ + Math.min(rng[0], axRng[0]), + Math.max(rng[1], axRng[1]) + ]; + } else { + newRng = [ + Math.max(rng[0], axRng[0]), + Math.min(rng[1], axRng[1]) + ]; + } - outRange[0] = axisOpts.l2r(Math.min(axisOpts.r2l(outRange[0]), axisOpts.r2l(axRange[0]))); - outRange[1] = axisOpts.l2r(Math.max(axisOpts.r2l(outRange[1]), axisOpts.r2l(axRange[1]))); - opts._input.range = outRange.slice(); + opts.range = opts._input.range = Lib.simpleMap(newRng, axisOpts.l2r); } axisOpts.cleanRange('rangeslider.range'); - // update range slider dimensions var margin = fullLayout.margin; diff --git a/test/jasmine/tests/range_slider_test.js b/test/jasmine/tests/range_slider_test.js index 6ba00809e06..4ed84f4bf69 100644 --- a/test/jasmine/tests/range_slider_test.js +++ b/test/jasmine/tests/range_slider_test.js @@ -1019,6 +1019,76 @@ describe('rangesliders in general', function() { .catch(failTest) .then(done); }); + + it('should give correct rangeslider range on reversed axes', function(done) { + function _assert(msg, exp) { + var xa = gd._fullLayout.xaxis; + + expect(xa.range) + .toBeCloseToArray(exp.axRng, 1, 'x-axis rng ' + msg); + expect(xa.rangeslider.range) + .toBeCloseToArray(exp.rangesliderRng, 1, 'rangeslider rng ' + msg); + expect(xa.rangeslider._input.range) + .toBeCloseToArray(exp.rangesliderRng, 1, 'rangeslider input rng ' + msg); + } + + Plotly.plot(gd, [{ + x: [1, 2, 1] + }], { + xaxis: { rangeslider: {visible: true} } + }) + .then(function() { + _assert('base', { + axRng: [0.935, 2.06], + rangesliderRng: [0.935, 2.06] + }); + + return Plotly.relayout(gd, 'xaxis.autorange', 'reversed'); + }) + .then(function() { + _assert('reversed!', { + axRng: [2.06, 0.935], + rangesliderRng: [2.06, 0.935] + }); + + return Plotly.relayout(gd, 'xaxis.range', [0, 3]); + }) + .then(function() { + _assert('set increasing rng', { + axRng: [0, 3], + rangesliderRng: [0, 3] + }); + + return Plotly.relayout(gd, 'xaxis.range', [3, 0]); + }) + .then(function() { + _assert('set reversed rng', { + axRng: [3, 0], + rangesliderRng: [3, 0] + }); + + return Plotly.relayout(gd, 'xaxis.rangeslider.range', [0, 3]); + }) + .then(function() { + _assert('reversed ax rng / increasing rangeslider rng', { + axRng: [3, 0], + rangesliderRng: [3, 0] + }); + + return Plotly.relayout(gd, { + 'xaxis.range': [0, 3], + 'xaxis.rangeslider.range': [3, 0] + }); + }) + .then(function() { + _assert('increasing ax rng / reversed rangeslider rng', { + axRng: [0, 3], + rangesliderRng: [0, 3] + }); + }) + .catch(failTest) + .then(done); + }); }); function slide(fromX, fromY, toX, toY) { From 65821bde02fb1d6cfcd2fc55bf34f497959616a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 3 Dec 2018 13:03:55 -0500 Subject: [PATCH 2/3] add range slider on reversed-range ax mock --- .../baselines/range_slider_reversed-range.png | Bin 0 -> 15576 bytes .../mocks/range_slider_reversed-range.json | 29 ++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 test/image/baselines/range_slider_reversed-range.png create mode 100644 test/image/mocks/range_slider_reversed-range.json diff --git a/test/image/baselines/range_slider_reversed-range.png b/test/image/baselines/range_slider_reversed-range.png new file mode 100644 index 0000000000000000000000000000000000000000..41c0540ced800a31fde4348e7abf43e3c5c11b3b GIT binary patch literal 15576 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 Date: Wed, 12 Dec 2018 14:14:06 -0500 Subject: [PATCH 3/3] rm shape:'spline' from range slider reversed range mock ... which rendered oddly in our nw.js imagetest container. --- .../baselines/range_slider_reversed-range.png | Bin 15576 -> 15467 bytes .../mocks/range_slider_reversed-range.json | 3 +-- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/test/image/baselines/range_slider_reversed-range.png b/test/image/baselines/range_slider_reversed-range.png index 41c0540ced800a31fde4348e7abf43e3c5c11b3b..c4f87c0c31eec66b582d9d50016237b910c7fe32 100644 GIT binary patch literal 15467 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 literal 15576 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