From 6f9f2984e0b67adbb1b9ff5effd203923bdda151 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Mon, 22 Oct 2018 18:31:55 -0400 Subject: [PATCH] fix for transforms operating on auto-invisible traces --- src/plots/plots.js | 13 +++++++++++++ test/jasmine/tests/splom_test.js | 31 +++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/plots/plots.js b/src/plots/plots.js index 8e661a99edc..fb27601f276 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -951,6 +951,8 @@ plots.supplyDataDefaults = function(dataIn, dataOut, layout, fullLayout) { fullTrace._expandedIndex = cnt; if(fullTrace.transforms && fullTrace.transforms.length) { + var sdInvisible = trace.visible !== false && fullTrace.visible === false; + var expandedTraces = applyTransforms(fullTrace, dataOut, layout, fullLayout); for(var j = 0; j < expandedTraces.length; j++) { @@ -964,6 +966,17 @@ plots.supplyDataDefaults = function(dataIn, dataOut, layout, fullLayout) { // to promote consistency between update calls uid: fullTrace.uid + j }; + + // If the first supplyDefaults created `visible: false`, + // clear it before running supplyDefaults a second time, + // because sometimes there are items we still want to coerce + // inside trace modules before determining that the trace is + // again `visible: false`, for example partial visibilities + // in `splom` traces. + if(sdInvisible && expandedTrace.visible === false) { + delete expandedTrace.visible; + } + plots.supplyTraceDefaults(expandedTrace, fullExpandedTrace, cnt, fullLayout, i); // relink private (i.e. underscore) keys expanded trace to full expanded trace so diff --git a/test/jasmine/tests/splom_test.js b/test/jasmine/tests/splom_test.js index ab8c21c7a92..3015ed78d52 100644 --- a/test/jasmine/tests/splom_test.js +++ b/test/jasmine/tests/splom_test.js @@ -49,6 +49,37 @@ describe('Test splom trace defaults:', function() { }); expect(gd._fullData[0].visible).toBe(false); + + // make sure these are still coerced - so you can get back via GUI! + expect(gd._fullData[0].showupperhalf).toBe(false); + expect(gd._fullData[0].showlowerhalf).toBe(false); + expect(gd._fullData[0].diagonal.visible).toBe(false); + }); + + it('still coerces partial visibilities even if all are false with transforms', function() { + _supply({ + dimensions: [{ + values: [1, 2, 3] + }], + showupperhalf: false, + showlowerhalf: false, + diagonal: {visible: false}, + transforms: [{ + type: 'filter', + target: 'dimensions[0].values', + operation: '>', + value: 2 + }] + }); + + expect(gd._fullData[0].visible).toBe(false); + + expect(gd._fullData[0].transforms[0].enabled).toBe(true); + + // make sure these are still coerced - so you can get back via GUI! + expect(gd._fullData[0].showupperhalf).toBe(false); + expect(gd._fullData[0].showlowerhalf).toBe(false); + expect(gd._fullData[0].diagonal.visible).toBe(false); }); it('should set `visible: false` to values-less dimensions', function() {