9
9
'use strict' ;
10
10
11
11
var Lib = require ( '../../lib' ) ;
12
- var attributes = require ( './attributes' ) ;
13
12
var hasColorscale = require ( '../../components/colorscale/has_colorscale' ) ;
14
13
var colorscaleDefaults = require ( '../../components/colorscale/defaults' ) ;
15
- var maxDimensionCount = require ( './constants' ) . maxDimensionCount ;
16
14
var handleDomainDefaults = require ( '../../plots/domain' ) . defaults ;
15
+ var handleArrayContainerDefaults = require ( '../../plots/array_container_defaults' ) ;
16
+
17
+ var attributes = require ( './attributes' ) ;
17
18
var axisBrush = require ( './axisbrush' ) ;
19
+ var maxDimensionCount = require ( './constants' ) . maxDimensionCount ;
20
+ var mergeLength = require ( './merge_length' ) ;
18
21
19
22
function handleLineDefaults ( traceIn , traceOut , defaultColor , layout , coerce ) {
20
23
var lineColor = coerce ( 'line.color' , defaultColor ) ;
@@ -26,90 +29,66 @@ function handleLineDefaults(traceIn, traceOut, defaultColor, layout, coerce) {
26
29
// TODO: I think it would be better to keep showing lines beyond the last line color
27
30
// but I'm not sure what color to give these lines - probably black or white
28
31
// depending on the background color?
29
- traceOut . _length = Math . min ( traceOut . _length , lineColor . length ) ;
32
+ return lineColor . length ;
30
33
}
31
34
else {
32
35
traceOut . line . color = defaultColor ;
33
36
}
34
37
}
38
+ return Infinity ;
35
39
}
36
40
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 ) {
49
42
function coerce ( attr , dflt ) {
50
43
return Lib . coerce ( dimensionIn , dimensionOut , attributes . dimensions , attr , dflt ) ;
51
44
}
52
45
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
+ }
79
51
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 ) ;
81
63
}
82
-
83
- dimensionOut . _index = i ;
84
- dimensionsOut . push ( dimensionOut ) ;
85
64
}
86
-
87
- traceOut . _length = commonLength ;
88
-
89
- return dimensionsOut ;
90
65
}
91
66
92
67
module . exports = function supplyDefaults ( traceIn , traceOut , defaultColor , layout ) {
93
68
function coerce ( attr , dflt ) {
94
69
return Lib . coerce ( traceIn , traceOut , attributes , attr , dflt ) ;
95
70
}
96
71
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
+ } ) ;
98
82
99
- handleLineDefaults ( traceIn , traceOut , defaultColor , layout , coerce ) ;
83
+ var len = handleLineDefaults ( traceIn , traceOut , defaultColor , layout , coerce ) ;
100
84
101
85
handleDomainDefaults ( traceOut , layout , coerce ) ;
102
86
103
87
if ( ! Array . isArray ( dimensions ) || ! dimensions . length ) {
104
88
traceOut . visible = false ;
105
89
}
106
90
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 ) ;
113
92
114
93
// make default font size 10px (default is 12),
115
94
// scale linearly with global font size
0 commit comments