From 20ec5c00bdffc9609c7470269bfa3f1799de9cea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Tusz?= Date: Mon, 18 Apr 2016 13:43:41 -0400 Subject: [PATCH 1/2] Use existing data conversion for rangesliders --- src/components/rangeslider/data_processors.js | 18 ------------- src/components/rangeslider/range_plot.js | 26 ++++++++++++------- 2 files changed, 16 insertions(+), 28 deletions(-) delete mode 100644 src/components/rangeslider/data_processors.js diff --git a/src/components/rangeslider/data_processors.js b/src/components/rangeslider/data_processors.js deleted file mode 100644 index 4cd72e218c8..00000000000 --- a/src/components/rangeslider/data_processors.js +++ /dev/null @@ -1,18 +0,0 @@ -/** -* Copyright 2012-2016, Plotly, Inc. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ - -'use strict'; - -var Lib = require('../../lib'); - -module.exports = { - 'linear': function(val) { return val; }, - 'log': function(val) { return Math.log(val)/Math.log(10); }, - 'date': function(val) { return Lib.dateTime2ms(val); }, - 'category': function(_, i) { return i; } -}; diff --git a/src/components/rangeslider/range_plot.js b/src/components/rangeslider/range_plot.js index 36b019aa88b..e1c119ba09c 100644 --- a/src/components/rangeslider/range_plot.js +++ b/src/components/rangeslider/range_plot.js @@ -12,7 +12,6 @@ var Symbols = require('../drawing/symbol_defs'); var Drawing = require('../drawing'); var helpers = require('./helpers'); -var dataProcessors = require('./data_processors'); var svgNS = require('../../constants/xmlns_namespaces').svg; module.exports = function rangePlot(gd, w, h) { @@ -42,10 +41,6 @@ module.exports = function rangePlot(gd, w, h) { rangePlot.appendChild(clipDefs); - var processX = dataProcessors[gd._fullLayout.xaxis.type || 'category'], - processY = dataProcessors[gd._fullLayout.yaxis.type || 'category']; - - // for now, only scatter traces are supported var allowedTypes = ['scatter']; @@ -59,12 +54,13 @@ module.exports = function rangePlot(gd, w, h) { continue; } - for(var k = 0; k < trace.x.length; k++) { - var x = processX(trace.x[k], k), - y = processY(trace.y[k], k); + var x = makeLinearData(trace, xaxis), + y = makeLinearData(trace, yaxis); - var posX = w * (x - minX) / (maxX - minX), - posY = h * (1 - (y - minY) / (maxY - minY)); + for(var k = 0; k < x.length; k++) { + + var posX = w * (x[k] - minX) / (maxX - minX), + posY = h * (1 - (y[k] - minY) / (maxY - minY)); pointPairs.push([posX, posY]); } @@ -77,6 +73,16 @@ module.exports = function rangePlot(gd, w, h) { return rangePlot; }; +function makeLinearData(trace, axis) { + var data = axis.makeCalcdata(trace || [], axis._id[0]); + + for(var i = 0; i < data.length; i++) { + data[i] = axis.c2l(data[i]); + } + + return data; +} + function makeScatter(trace, pointPairs, w, h) { From ca7c1750c29f9b8345d0d4a8b1dc4e7ba8cdc8e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Tusz?= Date: Tue, 19 Apr 2016 10:19:53 -0400 Subject: [PATCH 2/2] Add test for rangesliders when incomplete data provided --- test/jasmine/tests/range_slider_test.js | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/test/jasmine/tests/range_slider_test.js b/test/jasmine/tests/range_slider_test.js index 1c0dc2ddced..c2faaeac982 100644 --- a/test/jasmine/tests/range_slider_test.js +++ b/test/jasmine/tests/range_slider_test.js @@ -308,6 +308,35 @@ describe('the range slider', function() { expect(layoutOut).toEqual(expected); }); }); + + describe('in general', function() { + + beforeEach(function() { + gd = createGraphDiv(); + }); + + afterEach(destroyGraphDiv); + + it('should plot when only x data is provided', function(done) { + Plotly.plot(gd, [{ x: [1,2,3] }], { xaxis: { rangeslider: {} }}) + .then(function() { + var rangeslider = document.getElementsByClassName('range-slider'); + + expect(rangeslider.length).toBe(1); + }) + .then(done); + }); + + it('should plot when only y data is provided', function(done) { + Plotly.plot(gd, [{ y: [1,2,3] }], { xaxis: { rangeslider: {} }}) + .then(function() { + var rangeslider = document.getElementsByClassName('range-slider'); + + expect(rangeslider.length).toBe(1); + }) + .then(done); + }); + }); });