From 2b2690696de4c51a9c725683f07b96679b21cbd1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= <etienne@plot.ly>
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?= <etienne@plot.ly>
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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

literal 0
HcmV?d00001

diff --git a/test/image/mocks/range_slider_reversed-range.json b/test/image/mocks/range_slider_reversed-range.json
new file mode 100644
index 00000000000..65133cc2230
--- /dev/null
+++ b/test/image/mocks/range_slider_reversed-range.json
@@ -0,0 +1,29 @@
+{
+  "data": [
+    {
+      "mode": "lines",
+      "hoverinfo": "x",
+      "showlegend": false,
+      "line": {
+        "color": "blue",
+        "shape": "spline"
+      },
+      "x": [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
+      "y": [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]
+    }
+  ],
+  "layout": {
+    "xaxis": {
+      "autorange": "reversed",
+      "zeroline": false,
+      "rangeslider": {
+        "yaxis": {
+          "rangemode": "match"
+        }
+      }
+    },
+    "yaxis": {
+      "visible": false
+    }
+  }
+}

From d2a57e3fda4af197c149bb4e59c86d18f03acf1d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= <etienne@plot.ly>
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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

diff --git a/test/image/mocks/range_slider_reversed-range.json b/test/image/mocks/range_slider_reversed-range.json
index 65133cc2230..fd031523b74 100644
--- a/test/image/mocks/range_slider_reversed-range.json
+++ b/test/image/mocks/range_slider_reversed-range.json
@@ -5,8 +5,7 @@
       "hoverinfo": "x",
       "showlegend": false,
       "line": {
-        "color": "blue",
-        "shape": "spline"
+        "color": "blue"
       },
       "x": [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
       "y": [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]