Skip to content

Commit d3c59da

Browse files
authored
Merge pull request #1122 from plotly/transform-supply-layout-defaults
Allow transform to have supply layout defaults handler
2 parents e05a098 + 7145247 commit d3c59da

File tree

3 files changed

+49
-17
lines changed

3 files changed

+49
-17
lines changed

src/plots/plots.js

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,9 @@ plots.sendDataToCloud = function(gd) {
364364
// gd._fullLayout._basePlotModules
365365
// is a list of all the plot modules required to draw the plot.
366366
//
367+
// gd._fullLayout._transformModules
368+
// is a list of all the transform modules invoked.
369+
//
367370
plots.supplyDefaults = function(gd) {
368371
var oldFullLayout = gd._fullLayout || {},
369372
newFullLayout = gd._fullLayout = {},
@@ -375,6 +378,9 @@ plots.supplyDefaults = function(gd) {
375378

376379
var i;
377380

381+
// Create all the storage space for frames, but only if doesn't already exist
382+
if(!gd._transitionData) plots.createTransitionData(gd);
383+
378384
// first fill in what we can of layout without looking at data
379385
// because fullData needs a few things from layout
380386

@@ -435,7 +441,7 @@ plots.supplyDefaults = function(gd) {
435441
}
436442

437443
// finally, fill in the pieces of layout that may need to look at data
438-
plots.supplyLayoutModuleDefaults(newLayout, newFullLayout, newFullData);
444+
plots.supplyLayoutModuleDefaults(newLayout, newFullLayout, newFullData, gd._transitionData);
439445

440446
// TODO remove in v2.0.0
441447
// add has-plot-type refs to fullLayout for backward compatibility
@@ -474,12 +480,6 @@ plots.supplyDefaults = function(gd) {
474480
(gd.calcdata[i][0] || {}).trace = trace;
475481
}
476482
}
477-
478-
// Create all the storage space for frames, but only if doesn't already
479-
// exist:
480-
if(!gd._transitionData) {
481-
plots.createTransitionData(gd);
482-
}
483483
};
484484

485485
// Create storage for all of the data related to frames and transitions:
@@ -646,6 +646,8 @@ plots.supplyDataDefaults = function(dataIn, dataOut, layout, fullLayout) {
646646
basePlotModules = fullLayout._basePlotModules = [],
647647
cnt = 0;
648648

649+
fullLayout._transformModules = [];
650+
649651
function pushModule(fullTrace) {
650652
dataOut.push(fullTrace);
651653

@@ -863,6 +865,8 @@ function supplyTransformDefaults(traceIn, traceOut, layout) {
863865
transformOut = _module.supplyDefaults(transformIn, traceOut, layout, traceIn);
864866
transformOut.type = type;
865867
transformOut._module = _module;
868+
869+
Lib.pushUnique(layout._transformModules, _module);
866870
}
867871
else {
868872
transformOut = Lib.extendFlat({}, transformIn);
@@ -1032,7 +1036,7 @@ function calculateReservedMargins(margins) {
10321036
return resultingMargin;
10331037
}
10341038

1035-
plots.supplyLayoutModuleDefaults = function(layoutIn, layoutOut, fullData) {
1039+
plots.supplyLayoutModuleDefaults = function(layoutIn, layoutOut, fullData, transitionData) {
10361040
var i, _module;
10371041

10381042
// can't be be part of basePlotModules loop
@@ -1063,6 +1067,16 @@ plots.supplyLayoutModuleDefaults = function(layoutIn, layoutOut, fullData) {
10631067
}
10641068
}
10651069

1070+
// transform module layout defaults
1071+
var transformModules = layoutOut._transformModules;
1072+
for(i = 0; i < transformModules.length; i++) {
1073+
_module = transformModules[i];
1074+
1075+
if(_module.supplyLayoutDefaults) {
1076+
_module.supplyLayoutDefaults(layoutIn, layoutOut, fullData, transitionData);
1077+
}
1078+
}
1079+
10661080
// should FX be a component?
10671081
Plotly.Fx.supplyLayoutDefaults(layoutIn, layoutOut, fullData);
10681082

test/jasmine/tests/transform_filter_test.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ var assertStyle = require('../assets/assert_style');
1111

1212
describe('filter transforms defaults:', function() {
1313

14+
var fullLayout = { _transformModules: [] };
15+
1416
var traceIn, traceOut;
1517

1618
it('supplyTraceDefaults should coerce all attributes', function() {
@@ -22,7 +24,7 @@ describe('filter transforms defaults:', function() {
2224
}]
2325
};
2426

25-
traceOut = Plots.supplyTraceDefaults(traceIn, 0, {});
27+
traceOut = Plots.supplyTraceDefaults(traceIn, 0, fullLayout);
2628

2729
expect(traceOut.transforms).toEqual([{
2830
type: 'filter',
@@ -44,7 +46,7 @@ describe('filter transforms defaults:', function() {
4446
}]
4547
};
4648

47-
traceOut = Plots.supplyTraceDefaults(traceIn, 0, {});
49+
traceOut = Plots.supplyTraceDefaults(traceIn, 0, fullLayout);
4850

4951
expect(traceOut.transforms).toEqual([{
5052
type: 'filter',
@@ -70,7 +72,7 @@ describe('filter transforms defaults:', function() {
7072
}]
7173
};
7274

73-
traceOut = Plots.supplyTraceDefaults(traceIn, 0, {});
75+
traceOut = Plots.supplyTraceDefaults(traceIn, 0, fullLayout);
7476

7577
expect(traceOut.transforms[0].target).toEqual('x');
7678
expect(traceOut.transforms[1].target).toEqual('x');

test/jasmine/tests/transform_multi_test.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ var assertStyle = require('../assets/assert_style');
1313
describe('general transforms:', function() {
1414
'use strict';
1515

16+
var fullLayout = { _transformModules: [] };
17+
1618
var traceIn, traceOut;
1719

1820
it('supplyTraceDefaults should supply the transform defaults', function() {
@@ -21,7 +23,7 @@ describe('general transforms:', function() {
2123
transforms: [{ type: 'filter' }]
2224
};
2325

24-
traceOut = Plots.supplyTraceDefaults(traceIn, 0, {});
26+
traceOut = Plots.supplyTraceDefaults(traceIn, 0, fullLayout);
2527

2628
expect(traceOut.transforms).toEqual([{
2729
type: 'filter',
@@ -39,7 +41,7 @@ describe('general transforms:', function() {
3941
transforms: [{ type: 'invalid' }]
4042
};
4143

42-
traceOut = Plots.supplyTraceDefaults(traceIn, 0, {});
44+
traceOut = Plots.supplyTraceDefaults(traceIn, 0, fullLayout);
4345

4446
expect(traceOut.y).toBe(traceIn.y);
4547
});
@@ -56,6 +58,7 @@ describe('general transforms:', function() {
5658
};
5759

5860
var layout = {
61+
_transformModules: [],
5962
_globalTransforms: [{
6063
type: 'filter'
6164
}]
@@ -80,6 +83,8 @@ describe('general transforms:', function() {
8083
target: 'x',
8184
_module: Filter
8285
}, '- trace second');
86+
87+
expect(layout._transformModules).toEqual([Filter]);
8388
});
8489

8590
it('supplyDataDefaults should apply the transform while', function() {
@@ -164,8 +169,10 @@ describe('user-defined transforms:', function() {
164169
transforms: [transformIn]
165170
}];
166171

167-
var layout = {},
168-
fullLayout = {};
172+
var fullData = [],
173+
layout = {},
174+
fullLayout = { _has: function() {} },
175+
transitionData = {};
169176

170177
function assertSupplyDefaultsArgs(_transformIn, traceOut, _layout) {
171178
expect(_transformIn).toBe(transformIn);
@@ -184,16 +191,25 @@ describe('user-defined transforms:', function() {
184191
return dataOut;
185192
}
186193

194+
function assertSupplyLayoutDefaultsArgs(_layout, _fullLayout, _fullData, _transitionData) {
195+
expect(_layout).toBe(layout);
196+
expect(_fullLayout).toBe(fullLayout);
197+
expect(_fullData).toBe(fullData);
198+
expect(_transitionData).toBe(transitionData);
199+
}
200+
187201
var fakeTransformModule = {
188202
moduleType: 'transform',
189203
name: 'fake',
190204
attributes: {},
191205
supplyDefaults: assertSupplyDefaultsArgs,
192-
transform: assertTransformArgs
206+
transform: assertTransformArgs,
207+
supplyLayoutDefaults: assertSupplyLayoutDefaultsArgs
193208
};
194209

195210
Plotly.register(fakeTransformModule);
196-
Plots.supplyDataDefaults(dataIn, [], layout, fullLayout);
211+
Plots.supplyDataDefaults(dataIn, fullData, layout, fullLayout);
212+
Plots.supplyLayoutModuleDefaults(layout, fullLayout, fullData, transitionData);
197213
delete Plots.transformsRegistry.fake;
198214
});
199215

0 commit comments

Comments
 (0)