11
11
var Lib = require ( '../lib' ) ;
12
12
var Registry = require ( '../registry' ) ;
13
13
var PlotSchema = require ( '../plot_api/plot_schema' ) ;
14
- var axisIds = require ( '../plots/cartesian/axis_ids' ) ;
15
- var autoType = require ( '../plots/cartesian/axis_autotype' ) ;
16
- var setConvert = require ( '../plots/cartesian/set_convert' ) ;
14
+ var Axes = require ( '../plots/cartesian/axes' ) ;
17
15
18
16
var COMPARISON_OPS = [ '=' , '!=' , '<' , '>=' , '>' , '<=' ] ;
19
17
var INTERVAL_OPS = [ '[]' , '()' , '[)' , '(]' , '][' , ')(' , '](' , ')[' ] ;
@@ -144,12 +142,11 @@ exports.supplyDefaults = function(transformIn) {
144
142
exports . calcTransform = function ( gd , trace , opts ) {
145
143
if ( ! opts . enabled ) return ;
146
144
147
- var target = opts . target ,
148
- filterArray = getFilterArray ( trace , target ) ,
149
- len = filterArray . length ;
150
-
151
- if ( ! len ) return ;
145
+ var targetArray = Lib . getTargetArray ( trace , opts ) ;
146
+ if ( ! targetArray ) return ;
152
147
148
+ var target = opts . target ;
149
+ var len = targetArray . length ;
153
150
var targetCalendar = opts . targetcalendar ;
154
151
155
152
// even if you provide targetcalendar, if target is a string and there
@@ -159,13 +156,8 @@ exports.calcTransform = function(gd, trace, opts) {
159
156
if ( attrTargetCalendar ) targetCalendar = attrTargetCalendar ;
160
157
}
161
158
162
- // if target points to an axis, use the type we already have for that
163
- // axis to find the data type. Otherwise use the values to autotype.
164
- var d2cTarget = ( target === 'x' || target === 'y' || target === 'z' ) ?
165
- target : filterArray ;
166
-
167
- var dataToCoord = getDataToCoordFunc ( gd , trace , d2cTarget ) ;
168
- var filterFunc = getFilterFunc ( opts , dataToCoord , targetCalendar ) ;
159
+ var d2c = Axes . getDataToCoordFunc ( gd , trace , target , targetArray ) ;
160
+ var filterFunc = getFilterFunc ( opts , d2c , targetCalendar ) ;
169
161
var arrayAttrs = PlotSchema . findArrayAttributes ( trace ) ;
170
162
var originalArrays = { } ;
171
163
@@ -203,60 +195,11 @@ exports.calcTransform = function(gd, trace, opts) {
203
195
204
196
// loop through filter array, fill trace arrays if passed
205
197
for ( var i = 0 ; i < len ; i ++ ) {
206
- var passed = filterFunc ( filterArray [ i ] ) ;
198
+ var passed = filterFunc ( targetArray [ i ] ) ;
207
199
if ( passed ) forAllAttrs ( fillFn , i ) ;
208
200
}
209
201
} ;
210
202
211
- function getFilterArray ( trace , target ) {
212
- if ( typeof target === 'string' && target ) {
213
- var array = Lib . nestedProperty ( trace , target ) . get ( ) ;
214
-
215
- return Array . isArray ( array ) ? array : [ ] ;
216
- }
217
- else if ( Array . isArray ( target ) ) return target . slice ( ) ;
218
-
219
- return false ;
220
- }
221
-
222
- function getDataToCoordFunc ( gd , trace , target ) {
223
- var ax ;
224
-
225
- // In the case of an array target, make a mock data array
226
- // and call supplyDefaults to the data type and
227
- // setup the data-to-calc method.
228
- if ( Array . isArray ( target ) ) {
229
- ax = {
230
- type : autoType ( target ) ,
231
- _categories : [ ]
232
- } ;
233
-
234
- setConvert ( ax ) ;
235
-
236
- if ( ax . type === 'category' ) {
237
- // build up ax._categories (usually done during ax.makeCalcdata()
238
- for ( var i = 0 ; i < target . length ; i ++ ) {
239
- ax . d2c ( target [ i ] ) ;
240
- }
241
- }
242
- }
243
- else {
244
- ax = axisIds . getFromTrace ( gd , trace , target ) ;
245
- }
246
-
247
- // if 'target' has corresponding axis
248
- // -> use setConvert method
249
- if ( ax ) return ax . d2c ;
250
-
251
- // special case for 'ids'
252
- // -> cast to String
253
- if ( target === 'ids' ) return function ( v ) { return String ( v ) ; } ;
254
-
255
- // otherwise (e.g. numeric-array of 'marker.color' or 'marker.size')
256
- // -> cast to Number
257
- return function ( v ) { return + v ; } ;
258
- }
259
-
260
203
function getFilterFunc ( opts , d2c , targetCalendar ) {
261
204
var operation = opts . operation ,
262
205
value = opts . value ,
0 commit comments