From 42c96ef63a80dd96d7fad46b31296d9888ea0976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Tusz?= Date: Wed, 16 Dec 2015 17:23:39 -0500 Subject: [PATCH 1/2] Destroy modebar in purge step --- src/plots/plots.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plots/plots.js b/src/plots/plots.js index f83e424769b..e455e4dc156 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -682,6 +682,9 @@ plots.purge = function(gd) { if(fullLayout._glcontainer !== undefined) fullLayout._glcontainer.remove(); if(fullLayout._geocontainer !== undefined) fullLayout._geocontainer.remove(); + // remove modebar + if(fullLayout._modeBar) fullLayout._modeBar.destroy(); + // data and layout delete gd.data; delete gd.layout; From d38a61b4310210f1c698e1856b6b83dbc7eeea49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Tusz?= Date: Wed, 16 Dec 2015 19:21:56 -0500 Subject: [PATCH 2/2] Added Plots.purge test --- test/jasmine/tests/plots_test.js | 48 ++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/test/jasmine/tests/plots_test.js b/test/jasmine/tests/plots_test.js index 76d7200f700..bf413008892 100644 --- a/test/jasmine/tests/plots_test.js +++ b/test/jasmine/tests/plots_test.js @@ -1,4 +1,6 @@ var Plotly = require('@src/plotly'); +var createGraphDiv = require('../assets/create_graph_div'); +var destroyGraphDiv = require('../assets/destroy_graph_div'); describe('Test Plotly.Plots', function () { 'use strict'; @@ -298,4 +300,50 @@ describe('Test Plotly.Plots', function () { }); }); + + describe('Plotly.Plots.purge', function () { + var gd; + + beforeEach(function (done) { + gd = createGraphDiv(); + Plotly.plot(gd, [{ x: [1,2,3], y: [2,3,4] }], {}).then(done); + }); + + afterEach(destroyGraphDiv); + + it('should unset everything in the gd except _context', function () { + var expectedKeys = [ + '_ev', 'on', 'once', 'removeListener', 'removeAllListeners', + 'emit', '_context', '_replotPending', '_mouseDownTime', + '_hmpixcount', '_hmlumcount' + ]; + + Plotly.Plots.purge(gd); + expect(Object.keys(gd)).toEqual(expectedKeys); + expect(gd.data).toBeUndefined(); + expect(gd.layout).toBeUndefined(); + expect(gd._fullData).toBeUndefined(); + expect(gd._fullLayout).toBeUndefined(); + expect(gd.calcdata).toBeUndefined(); + expect(gd.framework).toBeUndefined(); + expect(gd.empty).toBeUndefined(); + expect(gd.fid).toBeUndefined(); + expect(gd.undoqueue).toBeUndefined(); + expect(gd.undonum).toBeUndefined(); + expect(gd.autoplay).toBeUndefined(); + expect(gd.changed).toBeUndefined(); + expect(gd._modules).toBeUndefined(); + expect(gd._tester).toBeUndefined(); + expect(gd._testref).toBeUndefined(); + expect(gd._promises).toBeUndefined(); + expect(gd._redrawTimer).toBeUndefined(); + expect(gd._replotting).toBeUndefined(); + expect(gd.firstscatter).toBeUndefined(); + expect(gd.hmlumcount).toBeUndefined(); + expect(gd.hmpixcount).toBeUndefined(); + expect(gd.numboxes).toBeUndefined(); + expect(gd._hoverTimer).toBeUndefined(); + expect(gd._lastHoverTime).toBeUndefined(); + }); + }); });