diff --git a/src/traces/candlestick/transform.js b/src/traces/candlestick/transform.js index 3d290a46ca2..ce0aaeb03ad 100644 --- a/src/traces/candlestick/transform.js +++ b/src/traces/candlestick/transform.js @@ -42,7 +42,7 @@ exports.transform = function transform(dataIn, state) { ); } - helpers.addRangeSlider(state.layout); + helpers.addRangeSlider(dataOut, state.layout); return dataOut; }; diff --git a/src/traces/ohlc/helpers.js b/src/traces/ohlc/helpers.js index e5eccf20a1a..e7fca7d0d60 100644 --- a/src/traces/ohlc/helpers.js +++ b/src/traces/ohlc/helpers.js @@ -104,7 +104,18 @@ exports.getFilterFn = function(direction) { } }; -exports.addRangeSlider = function(layout) { - if(!layout.xaxis) layout.xaxis = {}; - if(!layout.xaxis.rangeslider) layout.xaxis.rangeslider = {}; +exports.addRangeSlider = function(data, layout) { + var hasOneVisibleTrace = false; + + for(var i = 0; i < data.length; i++) { + if(data[i].visible === true) { + hasOneVisibleTrace = true; + break; + } + } + + if(hasOneVisibleTrace) { + if(!layout.xaxis) layout.xaxis = {}; + if(!layout.xaxis.rangeslider) layout.xaxis.rangeslider = {}; + } }; diff --git a/src/traces/ohlc/transform.js b/src/traces/ohlc/transform.js index 47c2b5b6219..236536056ac 100644 --- a/src/traces/ohlc/transform.js +++ b/src/traces/ohlc/transform.js @@ -44,7 +44,7 @@ exports.transform = function transform(dataIn, state) { ); } - helpers.addRangeSlider(state.layout); + helpers.addRangeSlider(dataOut, state.layout); return dataOut; }; diff --git a/test/jasmine/tests/finance_test.js b/test/jasmine/tests/finance_test.js index f6e292cf4dc..89515ff3138 100644 --- a/test/jasmine/tests/finance_test.js +++ b/test/jasmine/tests/finance_test.js @@ -962,4 +962,44 @@ describe('finance charts updates:', function() { done(); }); }); + + it('Plotly.plot with data-less trace and adding with Plotly.restyle', function(done) { + var data = [ + { type: 'candlestick' }, + { type: 'ohlc' }, + { type: 'bar', y: [2, 1, 2] } + ]; + + Plotly.plot(gd, data).then(function() { + expect(countScatterTraces()).toEqual(0); + expect(countBoxTraces()).toEqual(0); + expect(countRangeSliders()).toEqual(0); + + return Plotly.restyle(gd, { + open: [mock0.open], + high: [mock0.high], + low: [mock0.low], + close: [mock0.close] + }, [0]); + }) + .then(function() { + expect(countScatterTraces()).toEqual(0); + expect(countBoxTraces()).toEqual(2); + expect(countRangeSliders()).toEqual(1); + + return Plotly.restyle(gd, { + open: [mock0.open], + high: [mock0.high], + low: [mock0.low], + close: [mock0.close] + }, [1]); + }) + .then(function() { + expect(countScatterTraces()).toEqual(2); + expect(countBoxTraces()).toEqual(2); + expect(countRangeSliders()).toEqual(1); + }) + .then(done); + }); + });