|
9 | 9 |
|
10 | 10 | 'use strict'; |
11 | 11 |
|
12 | | -var isNumeric = require('fast-isnumeric'); |
13 | | - |
14 | | -var Plots = require('../../plots/plots'); |
15 | 12 | var Lib = require('../../lib'); |
16 | 13 | var Colorscale = require('../../components/colorscale'); |
17 | 14 |
|
18 | | -var histogramSupplyDefaults = require('../histogram/defaults'); |
19 | | -var attributes = require('./attributes'); |
20 | 15 | var hasColumns = require('./has_columns'); |
| 16 | +var handleXYZDefaults = require('./xyz_defaults'); |
| 17 | +var attributes = require('./attributes'); |
21 | 18 |
|
22 | 19 |
|
23 | 20 | module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { |
24 | | - var isContour = Plots.traceIs(traceOut, 'contour'); |
25 | | - |
26 | 21 | function coerce(attr, dflt) { |
27 | 22 | return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); |
28 | 23 | } |
29 | 24 |
|
30 | | - if(!isContour) coerce('zsmooth'); |
31 | | - |
32 | | - if(Plots.traceIs(traceOut, 'histogram')) { |
33 | | - // x, y, z, marker.color, and x0, dx, y0, dy are coerced |
34 | | - // in Histogram.supplyDefaults |
35 | | - // (along with histogram-specific attributes) |
36 | | - histogramSupplyDefaults(traceIn, traceOut); |
37 | | - if(traceOut.visible === false) return; |
| 25 | + var len = handleXYZDefaults(traceIn, traceOut, coerce); |
| 26 | + if(!len) { |
| 27 | + traceOut.visible = false; |
| 28 | + return; |
38 | 29 | } |
39 | | - else { |
40 | | - var len = handleXYZDefaults(traceIn, traceOut, coerce); |
41 | | - if(!len) { |
42 | | - traceOut.visible = false; |
43 | | - return; |
44 | | - } |
45 | | - |
46 | | - coerce('text'); |
47 | 30 |
|
48 | | - var _hasColumns = hasColumns(traceOut); |
| 31 | + coerce('text'); |
| 32 | + coerce('zsmooth'); |
| 33 | + coerce('connectgaps', hasColumns(traceOut) && (traceOut.zsmooth !== false)); |
49 | 34 |
|
50 | | - if(!_hasColumns) coerce('transpose'); |
51 | | - coerce('connectgaps', _hasColumns && |
52 | | - (isContour || traceOut.zsmooth !== false)); |
53 | | - } |
54 | | - |
55 | | - if(!isContour || (traceOut.contours || {}).coloring!=='none') { |
56 | | - Colorscale.handleDefaults( |
57 | | - traceIn, traceOut, layout, coerce, {prefix: '', cLetter: 'z'} |
58 | | - ); |
59 | | - } |
| 35 | + Colorscale.handleDefaults( |
| 36 | + traceIn, traceOut, layout, coerce, {prefix: '', cLetter: 'z'} |
| 37 | + ); |
60 | 38 | }; |
61 | | - |
62 | | -function handleXYZDefaults(traceIn, traceOut, coerce) { |
63 | | - var z = coerce('z'); |
64 | | - var x, y; |
65 | | - |
66 | | - if(z===undefined || !z.length) return 0; |
67 | | - |
68 | | - if(hasColumns(traceIn)) { |
69 | | - x = coerce('x'); |
70 | | - y = coerce('y'); |
71 | | - |
72 | | - // column z must be accompanied by 'x' and 'y' arrays |
73 | | - if(!x || !y) return 0; |
74 | | - } |
75 | | - else { |
76 | | - x = coordDefaults('x', coerce); |
77 | | - y = coordDefaults('y', coerce); |
78 | | - |
79 | | - // TODO put z validation elsewhere |
80 | | - if(!isValidZ(z)) return 0; |
81 | | - } |
82 | | - |
83 | | - return traceOut.z.length; |
84 | | -} |
85 | | - |
86 | | -function coordDefaults(coordStr, coerce) { |
87 | | - var coord = coerce(coordStr), |
88 | | - coordType = coord ? |
89 | | - coerce(coordStr + 'type', 'array') : |
90 | | - 'scaled'; |
91 | | - |
92 | | - if(coordType === 'scaled') { |
93 | | - coerce(coordStr + '0'); |
94 | | - coerce('d' + coordStr); |
95 | | - } |
96 | | - |
97 | | - return coord; |
98 | | -} |
99 | | - |
100 | | -function isValidZ(z) { |
101 | | - var allRowsAreArrays = true, |
102 | | - oneRowIsFilled = false, |
103 | | - hasOneNumber = false, |
104 | | - zi; |
105 | | - |
106 | | - /* |
107 | | - * Without this step: |
108 | | - * |
109 | | - * hasOneNumber = false breaks contour but not heatmap |
110 | | - * allRowsAreArrays = false breaks contour but not heatmap |
111 | | - * oneRowIsFilled = false breaks both |
112 | | - */ |
113 | | - |
114 | | - for(var i = 0; i < z.length; i++) { |
115 | | - zi = z[i]; |
116 | | - if(!Array.isArray(zi)) { |
117 | | - allRowsAreArrays = false; |
118 | | - break; |
119 | | - } |
120 | | - if(zi.length > 0) oneRowIsFilled = true; |
121 | | - for(var j = 0; j < zi.length; j++) { |
122 | | - if(isNumeric(zi[j])) { |
123 | | - hasOneNumber = true; |
124 | | - break; |
125 | | - } |
126 | | - } |
127 | | - } |
128 | | - |
129 | | - return (allRowsAreArrays && oneRowIsFilled && hasOneNumber); |
130 | | -} |
0 commit comments