Skip to content

Commit 40158ef

Browse files
committed
extracting out common function
1 parent 70a0f68 commit 40158ef

File tree

3 files changed

+30
-10
lines changed

3 files changed

+30
-10
lines changed

src/transforms/aggregate.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
var Axes = require('../plots/cartesian/axes');
1212
var Lib = require('../lib');
1313
var PlotSchema = require('../plot_api/plot_schema');
14+
var pointsAccessorFunction = require('./helpers').pointsAccessorFunction;
1415
var BADNUM = require('../constants/numerical').BADNUM;
1516

1617
exports.moduleType = 'transform';
@@ -221,10 +222,7 @@ exports.calcTransform = function(gd, trace, opts) {
221222
var indexToPoints = {};
222223
var groupings = [];
223224

224-
var prevTransforms = trace.transforms.filter(function(tr) {return tr._indexToPoints;});
225-
var originalPointsAccessor = prevTransforms.length ?
226-
function(i) {return prevTransforms[prevTransforms.length - 1]._indexToPoints[i];} :
227-
function(i) {return [i];};
225+
var originalPointsAccessor = pointsAccessorFunction(trace.transforms, opts);
228226

229227
for(i = 0; i < groupArray.length; i++) {
230228
vi = groupArray[i];
@@ -237,7 +235,7 @@ exports.calcTransform = function(gd, trace, opts) {
237235
}
238236
else {
239237
groupings[groupIndex].push(i);
240-
indexToPoints[groupIndices[vi]] = indexToPoints[groupIndices[vi]].concat(originalPointsAccessor(i));
238+
indexToPoints[groupIndices[vi]] = (indexToPoints[groupIndices[vi]] || []).concat(originalPointsAccessor(i));
241239
}
242240
}
243241

src/transforms/filter.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
var Lib = require('../lib');
1212
var Registry = require('../registry');
1313
var Axes = require('../plots/cartesian/axes');
14+
var pointsAccessorFunction = require('./helpers').pointsAccessorFunction;
1415

1516
var COMPARISON_OPS = ['=', '!=', '<', '>=', '>', '<='];
1617
var INTERVAL_OPS = ['[]', '()', '[)', '(]', '][', ')(', '](', ')['];
@@ -205,11 +206,8 @@ exports.calcTransform = function(gd, trace, opts) {
205206
// copy all original array attribute values, and clear arrays in trace
206207
forAllAttrs(initFn);
207208

208-
var prevTransforms = trace.transforms.filter(function(tr) {return tr._indexToPoints;});
209-
var originalPointsAccessor = prevTransforms.length ?
210-
function(i) {return prevTransforms[prevTransforms.length - 1]._indexToPoints[i];} :
211-
function(i) {return [i];};
212-
209+
var originalPointsAccessor = pointsAccessorFunction(trace.transforms, opts);
210+
213211
// loop through filter array, fill trace arrays if passed
214212
for(var i = 0; i < len; i++) {
215213
var passed = filterFunc(targetArray[i]);

src/transforms/helpers.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Copyright 2012-2017, Plotly, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
9+
'use strict';
10+
11+
exports.pointsAccessorFunction = function(transforms, opts) {
12+
var tr;
13+
var prevIndexToPoints;
14+
for(var i = 0; i < transforms.length; i++) {
15+
tr = transforms[i];
16+
if(tr === opts) break;
17+
if(!tr._indexToPoints || tr.enabled === false) continue;
18+
prevIndexToPoints = tr._indexToPoints;
19+
}
20+
var originalPointsAccessor = prevIndexToPoints ?
21+
function(i) {return prevIndexToPoints[i];} :
22+
function(i) {return [i];};
23+
return originalPointsAccessor;
24+
};

0 commit comments

Comments
 (0)