Skip to content

Commit 8d3ef29

Browse files
committed
tweak purge related to @etpinard's extra fix in #2055
1 parent 5ec5dbf commit 8d3ef29

File tree

3 files changed

+32
-11
lines changed

3 files changed

+32
-11
lines changed

src/plot_api/plot_api.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -2734,12 +2734,8 @@ Plotly.purge = function purge(gd) {
27342734
// remove plot container
27352735
if(fullLayout._container) fullLayout._container.remove();
27362736

2737+
// in contrast to Plotly.Plots.purge which does NOT clear _context!
27372738
delete gd._context;
2738-
delete gd._replotPending;
2739-
delete gd._mouseDownTime;
2740-
delete gd._legendMouseDownTime;
2741-
delete gd._hmpixcount;
2742-
delete gd._hmlumcount;
27432739

27442740
return gd;
27452741
};

src/plots/plots.js

+13-2
Original file line numberDiff line numberDiff line change
@@ -1341,14 +1341,25 @@ plots.purge = function(gd) {
13411341
delete gd._promises;
13421342
delete gd._redrawTimer;
13431343
delete gd.firstscatter;
1344-
delete gd.hmlumcount;
1345-
delete gd.hmpixcount;
1344+
delete gd._hmlumcount;
1345+
delete gd._hmpixcount;
13461346
delete gd.numboxes;
13471347
delete gd._transitionData;
13481348
delete gd._transitioning;
13491349
delete gd._initialAutoSize;
13501350
delete gd._transitioningWithDuration;
13511351

1352+
// created during certain events, that *should* clean them up
1353+
// themselves, but may not if there was an error
1354+
delete gd._dragging;
1355+
delete gd._dragged;
1356+
delete gd._hoverdata;
1357+
delete gd._snapshotInProgress;
1358+
delete gd._editing;
1359+
delete gd._replotPending;
1360+
delete gd._mouseDownTime;
1361+
delete gd._legendMouseDownTime;
1362+
13521363
// remove all event listeners
13531364
if(gd.removeAllListeners) gd.removeAllListeners();
13541365
};

test/jasmine/tests/plots_test.js

+18-4
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,19 @@ describe('Test Plots', function() {
408408
beforeEach(function(done) {
409409
gd = createGraphDiv();
410410
Plotly.plot(gd, [{ x: [1, 2, 3], y: [2, 3, 4] }], {}).then(done);
411+
412+
// hacky: simulate getting stuck with these flags due to an error
413+
// see #2055 and commit 6a44a9a - before fixing that error, we would
414+
// end up in an inconsistent state that prevented future Plotly.newPlot
415+
// because _dragging and _dragged were not cleared by purge.
416+
gd._dragging = true;
417+
gd._dragged = true;
418+
gd._hoverdata = true;
419+
gd._snapshotInProgress = true;
420+
gd._editing = true;
421+
gd._replotPending = true;
422+
gd._mouseDownTime = true;
423+
gd._legendMouseDownTime = true;
411424
});
412425

413426
afterEach(destroyGraphDiv);
@@ -416,15 +429,16 @@ describe('Test Plots', function() {
416429
var expectedKeys = [
417430
'_ev', '_internalEv', 'on', 'once', 'removeListener', 'removeAllListeners',
418431
'_internalOn', '_internalOnce', '_removeInternalListener',
419-
'_removeAllInternalListeners', 'emit', '_context', '_replotPending',
420-
'_hmpixcount', '_hmlumcount', '_mouseDownTime', '_legendMouseDownTime',
432+
'_removeAllInternalListeners', 'emit', '_context'
421433
];
422434

423435
var expectedUndefined = [
424436
'data', 'layout', '_fullData', '_fullLayout', 'calcdata', 'framework',
425437
'empty', 'fid', 'undoqueue', 'undonum', 'autoplay', 'changed',
426-
'_promises', '_redrawTimer', 'firstscatter', 'hmlumcount', 'hmpixcount',
427-
'numboxes', '_transitionData', '_transitioning'
438+
'_promises', '_redrawTimer', 'firstscatter', 'numboxes',
439+
'_transitionData', '_transitioning', '_hmpixcount', '_hmlumcount',
440+
'_dragging', '_dragged', '_hoverdata', '_snapshotInProgress', '_editing',
441+
'_replotPending', '_mouseDownTime', '_legendMouseDownTime'
428442
];
429443

430444
Plots.purge(gd);

0 commit comments

Comments
 (0)