Skip to content

Commit eb090db

Browse files
committed
Merge branch 'master' into null-frames
2 parents aaf9087 + d3c59da commit eb090db

File tree

6 files changed

+90
-22
lines changed

6 files changed

+90
-22
lines changed

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,18 @@
5959
"es6-promise": "^3.0.2",
6060
"fast-isnumeric": "^1.1.1",
6161
"gl-contour2d": "^1.1.2",
62-
"gl-error2d": "^1.2.0",
62+
"gl-error2d": "^1.2.1",
6363
"gl-error3d": "^1.0.0",
6464
"gl-heatmap2d": "^1.0.2",
65-
"gl-line2d": "^1.4.0",
65+
"gl-line2d": "^1.4.1",
6666
"gl-line3d": "^1.1.0",
6767
"gl-mat4": "^1.1.2",
6868
"gl-mesh3d": "^1.2.0",
6969
"gl-plot2d": "^1.2.0",
7070
"gl-plot3d": "^1.5.1",
7171
"gl-pointcloud2d": "^1.0.0",
72-
"gl-scatter2d": "^1.2.0",
73-
"gl-scatter2d-fancy": "^1.2.0",
72+
"gl-scatter2d": "^1.2.1",
73+
"gl-scatter2d-fancy": "^1.2.1",
7474
"gl-scatter3d": "^1.0.4",
7575
"gl-select-box": "^1.0.1",
7676
"gl-shader": "4.2.0",

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

src/transforms/filter.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,13 @@ function getDataToCoordFunc(gd, trace, target) {
184184
type: autoType(target),
185185
_categories: []
186186
};
187+
187188
setConvert(ax);
189+
190+
// build up ax._categories (usually done during ax.makeCalcdata()
191+
for(var i = 0; i < target.length; i++) {
192+
ax.d2c(target[i]);
193+
}
188194
}
189195
else {
190196
ax = axisIds.getFromTrace(gd, trace, target);
-63 Bytes
Loading

test/jasmine/tests/transform_filter_test.js

Lines changed: 36 additions & 4 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');
@@ -638,7 +640,7 @@ describe('filter transforms calc:', function() {
638640
expect(out[0].transforms[0].target).toEqual([0, 0, 0]);
639641
});
640642

641-
it('with categorical items', function() {
643+
it('with categorical items and *{}*', function() {
642644
var out = _transform([Lib.extendDeep({}, _base, {
643645
transforms: [{
644646
target: ['a', 'a', 'b', 'b', 'a', 'b', 'a'],
@@ -651,6 +653,36 @@ describe('filter transforms calc:', function() {
651653
expect(out[0].transforms[0].target).toEqual(['b', 'b', 'b']);
652654
});
653655

656+
it('with categorical items and *<* & *>=*', function() {
657+
var out = _transform([{
658+
x: [1, 2, 3],
659+
y: [10, 20, 30],
660+
transforms: [{
661+
type: 'filter',
662+
operation: '<',
663+
target: ['a', 'b', 'c'],
664+
value: 'c'
665+
}]
666+
}, {
667+
x: [1, 2, 3],
668+
y: [30, 20, 10],
669+
transforms: [{
670+
type: 'filter',
671+
operation: '>=',
672+
target: ['a', 'b', 'c'],
673+
value: 'b'
674+
}]
675+
}]);
676+
677+
expect(out[0].x).toEqual([1, 2]);
678+
expect(out[0].y).toEqual([10, 20]);
679+
expect(out[0].transforms[0].target).toEqual(['a', 'b']);
680+
681+
expect(out[1].x).toEqual([2, 3]);
682+
expect(out[1].y).toEqual([20, 10]);
683+
expect(out[1].transforms[0].target).toEqual(['b', 'c']);
684+
});
685+
654686
it('with dates items', function() {
655687
var out = _transform([Lib.extendDeep({}, _base, {
656688
transforms: [{

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)