99'use strict' ;
1010
1111var Lib = require ( '../../lib' ) ;
12- var attributes = require ( './attributes' ) ;
1312var hasColorscale = require ( '../../components/colorscale/has_colorscale' ) ;
1413var colorscaleDefaults = require ( '../../components/colorscale/defaults' ) ;
15- var maxDimensionCount = require ( './constants' ) . maxDimensionCount ;
1614var handleDomainDefaults = require ( '../../plots/domain' ) . defaults ;
15+ var handleArrayContainerDefaults = require ( '../../plots/array_container_defaults' ) ;
16+
17+ var attributes = require ( './attributes' ) ;
1718var axisBrush = require ( './axisbrush' ) ;
19+ var maxDimensionCount = require ( './constants' ) . maxDimensionCount ;
20+ var mergeLength = require ( './merge_length' ) ;
1821
1922function handleLineDefaults ( traceIn , traceOut , defaultColor , layout , coerce ) {
2023 var lineColor = coerce ( 'line.color' , defaultColor ) ;
@@ -26,90 +29,66 @@ function handleLineDefaults(traceIn, traceOut, defaultColor, layout, coerce) {
2629 // TODO: I think it would be better to keep showing lines beyond the last line color
2730 // but I'm not sure what color to give these lines - probably black or white
2831 // depending on the background color?
29- traceOut . _length = Math . min ( traceOut . _length , lineColor . length ) ;
32+ return lineColor . length ;
3033 }
3134 else {
3235 traceOut . line . color = defaultColor ;
3336 }
3437 }
38+ return Infinity ;
3539}
3640
37- function dimensionsDefaults ( traceIn , traceOut ) {
38- var dimensionsIn = traceIn . dimensions || [ ] ,
39- dimensionsOut = traceOut . dimensions = [ ] ;
40-
41- var dimensionIn , dimensionOut , i ;
42- var commonLength = Infinity ;
43-
44- if ( dimensionsIn . length > maxDimensionCount ) {
45- Lib . log ( 'parcoords traces support up to ' + maxDimensionCount + ' dimensions at the moment' ) ;
46- dimensionsIn . splice ( maxDimensionCount ) ;
47- }
48-
41+ function dimensionDefaults ( dimensionIn , dimensionOut , traceOut , opts , itemOpts ) {
4942 function coerce ( attr , dflt ) {
5043 return Lib . coerce ( dimensionIn , dimensionOut , attributes . dimensions , attr , dflt ) ;
5144 }
5245
53- for ( i = 0 ; i < dimensionsIn . length ; i ++ ) {
54- dimensionIn = dimensionsIn [ i ] ;
55- dimensionOut = { } ;
56-
57- if ( ! Lib . isPlainObject ( dimensionIn ) ) {
58- continue ;
59- }
60-
61- var values = coerce ( 'values' ) ;
62- var visible = coerce ( 'visible' ) ;
63- if ( ! ( values && values . length ) ) {
64- visible = dimensionOut . visible = false ;
65- }
66-
67- if ( visible ) {
68- coerce ( 'label' ) ;
69- coerce ( 'tickvals' ) ;
70- coerce ( 'ticktext' ) ;
71- coerce ( 'tickformat' ) ;
72- coerce ( 'range' ) ;
73-
74- coerce ( 'multiselect' ) ;
75- var constraintRange = coerce ( 'constraintrange' ) ;
76- if ( constraintRange ) {
77- dimensionOut . constraintrange = axisBrush . cleanRanges ( constraintRange , dimensionOut ) ;
78- }
46+ var values = coerce ( 'values' ) ;
47+ var visible = coerce ( 'visible' ) ;
48+ if ( ! ( values && values . length && ! itemOpts . itemIsNotPlainObject ) ) {
49+ visible = dimensionOut . visible = false ;
50+ }
7951
80- commonLength = Math . min ( commonLength , values . length ) ;
52+ if ( visible ) {
53+ coerce ( 'label' ) ;
54+ coerce ( 'tickvals' ) ;
55+ coerce ( 'ticktext' ) ;
56+ coerce ( 'tickformat' ) ;
57+ coerce ( 'range' ) ;
58+
59+ coerce ( 'multiselect' ) ;
60+ var constraintRange = coerce ( 'constraintrange' ) ;
61+ if ( constraintRange ) {
62+ dimensionOut . constraintrange = axisBrush . cleanRanges ( constraintRange , dimensionOut ) ;
8163 }
82-
83- dimensionOut . _index = i ;
84- dimensionsOut . push ( dimensionOut ) ;
8564 }
86-
87- traceOut . _length = commonLength ;
88-
89- return dimensionsOut ;
9065}
9166
9267module . exports = function supplyDefaults ( traceIn , traceOut , defaultColor , layout ) {
9368 function coerce ( attr , dflt ) {
9469 return Lib . coerce ( traceIn , traceOut , attributes , attr , dflt ) ;
9570 }
9671
97- var dimensions = dimensionsDefaults ( traceIn , traceOut ) ;
72+ var dimensionsIn = traceIn . dimensions ;
73+ if ( Array . isArray ( dimensionsIn ) && dimensionsIn . length > maxDimensionCount ) {
74+ Lib . log ( 'parcoords traces support up to ' + maxDimensionCount + ' dimensions at the moment' ) ;
75+ dimensionsIn . splice ( maxDimensionCount ) ;
76+ }
77+
78+ var dimensions = handleArrayContainerDefaults ( traceIn , traceOut , {
79+ name : 'dimensions' ,
80+ handleItemDefaults : dimensionDefaults
81+ } ) ;
9882
99- handleLineDefaults ( traceIn , traceOut , defaultColor , layout , coerce ) ;
83+ var len = handleLineDefaults ( traceIn , traceOut , defaultColor , layout , coerce ) ;
10084
10185 handleDomainDefaults ( traceOut , layout , coerce ) ;
10286
10387 if ( ! Array . isArray ( dimensions ) || ! dimensions . length ) {
10488 traceOut . visible = false ;
10589 }
10690
107- // since we're not slicing uneven arrays anymore, stash the length in each dimension
108- // but we can't do this in dimensionsDefaults (yet?) because line.color can also
109- // truncate
110- for ( var i = 0 ; i < dimensions . length ; i ++ ) {
111- if ( dimensions [ i ] . visible ) dimensions [ i ] . _length = traceOut . _length ;
112- }
91+ mergeLength ( traceOut , dimensions , 'values' , len ) ;
11392
11493 // make default font size 10px (default is 12),
11594 // scale linearly with global font size
0 commit comments