From 279e732e31387a0db71dce2a7bcc46e89b2d3927 Mon Sep 17 00:00:00 2001 From: Marcel Pursche Date: Mon, 11 Feb 2019 18:38:29 +0100 Subject: [PATCH 1/2] Fix bug in scattergl plot --- src/traces/scattergl/index.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/traces/scattergl/index.js b/src/traces/scattergl/index.js index 5a722ce79db..0a058e1e5d3 100644 --- a/src/traces/scattergl/index.js +++ b/src/traces/scattergl/index.js @@ -389,7 +389,20 @@ function plot(gd, subplot, cdata) { } // update main marker options - if(scene.glText) { + if(scene.glText) { + if (scene.count > scene.glText.length) { + // add gl text marker + var textsToAdd = scene.count - scene.glText.length; + for(i=0; i < textsToAdd; i++) { + scene.glText.push(new Text(regl)); + } + } else if (scene.count < scene.glText.length) { + // remove gl text marker + var textsToRemove = scene.glText.length - scene.count; + var removedTexts = scene.glText.splice(scene.count, textsToRemove); + removedTexts.forEach(function (text) { text.destroy(); }); + } + for(i = 0; i < scene.count; i++) { scene.glText[i].update(scene.textOptions[i]); } From 998518c54b033828c9c561356b904b1b605845fe Mon Sep 17 00:00:00 2001 From: Marcel Pursche Date: Tue, 12 Feb 2019 11:11:24 +0100 Subject: [PATCH 2/2] Added tests for scattergl plot update --- test/jasmine/tests/scattergl_test.js | 97 ++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 test/jasmine/tests/scattergl_test.js diff --git a/test/jasmine/tests/scattergl_test.js b/test/jasmine/tests/scattergl_test.js new file mode 100644 index 00000000000..94b720b182f --- /dev/null +++ b/test/jasmine/tests/scattergl_test.js @@ -0,0 +1,97 @@ +var Plotly = require('@lib/index'); +var createGraphDiv = require('../assets/create_graph_div'); +var destroyGraphDiv = require('../assets/destroy_graph_div'); +var failTest = require('../assets/fail_test'); + +describe('end-to-end scattergl tests', function() { + var gd; + + beforeEach(function() { + gd = createGraphDiv(); + }); + + afterEach(destroyGraphDiv); + + it('should create a plot with text labels', function(done) { + Plotly.react(gd, [{ + type: 'scattergl', + mode: 'text+lines', + x: [1, 2, 3, 4, 5, 6, 7], + y: [2, 3, 4, 5, 6, 7, 8], + text: 'Test' + }]).then(function () { + var fullLayout = gd._fullLayout; + var subplot = fullLayout._plots['xy']; + var scene = subplot._scene; + expect(scene.glText.length).toEqual(1); + }).catch(failTest).then(done); + }); + + it('should update a plot with text labels', function (done) { + Plotly.react(gd, [{ + type: 'scattergl', + mode: 'text+lines', + x: [1, 2, 3, 4, 5, 6, 7], + y: [2, 3, 4, 5, 6, 7, 8], + text: 'Test' + }]).then(function () { + var fullLayout = gd._fullLayout; + var subplot = fullLayout._plots['xy']; + var scene = subplot._scene; + expect(scene.glText.length).toEqual(1); + + // add plots + return Plotly.react(gd, [ + { + type: 'scattergl', + mode: 'text+lines', + x: [1, 2, 3, 4, 5, 6, 7], + y: [2, 3, 4, 5, 6, 7, 8], + text: 'Test' + }, + { + type: 'scattergl', + mode: 'text+lines', + x: [1, 2, 3, 4, 5, 6, 7], + y: [3, 4, 5, 6, 7, 8, 9], + text: 'Test 2' + }, + { + type: 'scattergl', + mode: 'text+lines', + x: [1, 2, 3, 4, 5, 6, 7], + y: [4, 5, 6, 7, 8, 9, 10], + text: 'Test 3' + } + ]); + }).then(function () { + var fullLayout = gd._fullLayout; + var subplot = fullLayout._plots['xy']; + var scene = subplot._scene; + expect(scene.glText.length).toEqual(3); + + // remove plots + return Plotly.react(gd, [ + { + type: 'scattergl', + mode: 'text+lines', + x: [1, 2, 3, 4, 5, 6, 7], + y: [2, 3, 4, 5, 6, 7, 8], + text: 'Test' + }, + { + type: 'scattergl', + mode: 'text+lines', + x: [1, 2, 3, 4, 5, 6, 7], + y: [3, 4, 5, 6, 7, 8, 9], + text: 'Test 2' + } + ]); + }).then(function () { + var fullLayout = gd._fullLayout; + var subplot = fullLayout._plots['xy']; + var scene = subplot._scene; + expect(scene.glText.length).toEqual(2); + }).catch(failTest).then(done); + }); +});