1111var Lib = require ( '../lib' ) ;
1212var Registry = require ( '../registry' ) ;
1313var 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' ) ;
1715
1816var COMPARISON_OPS = [ '=' , '!=' , '<' , '>=' , '>' , '<=' ] ;
1917var INTERVAL_OPS = [ '[]' , '()' , '[)' , '(]' , '][' , ')(' , '](' , ')[' ] ;
@@ -144,12 +142,11 @@ exports.supplyDefaults = function(transformIn) {
144142exports . calcTransform = function ( gd , trace , opts ) {
145143 if ( ! opts . enabled ) return ;
146144
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 ;
152147
148+ var target = opts . target ;
149+ var len = targetArray . length ;
153150 var targetCalendar = opts . targetcalendar ;
154151
155152 // even if you provide targetcalendar, if target is a string and there
@@ -159,13 +156,8 @@ exports.calcTransform = function(gd, trace, opts) {
159156 if ( attrTargetCalendar ) targetCalendar = attrTargetCalendar ;
160157 }
161158
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 ) ;
169161 var arrayAttrs = PlotSchema . findArrayAttributes ( trace ) ;
170162 var originalArrays = { } ;
171163
@@ -203,60 +195,11 @@ exports.calcTransform = function(gd, trace, opts) {
203195
204196 // loop through filter array, fill trace arrays if passed
205197 for ( var i = 0 ; i < len ; i ++ ) {
206- var passed = filterFunc ( filterArray [ i ] ) ;
198+ var passed = filterFunc ( targetArray [ i ] ) ;
207199 if ( passed ) forAllAttrs ( fillFn , i ) ;
208200 }
209201} ;
210202
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-
260203function getFilterFunc ( opts , d2c , targetCalendar ) {
261204 var operation = opts . operation ,
262205 value = opts . value ,
0 commit comments