-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathdefaults.js
111 lines (87 loc) · 3.29 KB
/
defaults.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/**
* Copyright 2012-2018, Plotly, Inc.
* All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
var Lib = require('../../lib');
var attributes = require('./attributes');
var hasColorscale = require('../../components/colorscale/has_colorscale');
var colorscaleDefaults = require('../../components/colorscale/defaults');
var maxDimensionCount = require('./constants').maxDimensionCount;
function handleLineDefaults(traceIn, traceOut, defaultColor, layout, coerce) {
coerce('line.color', defaultColor);
if(hasColorscale(traceIn, 'line') && Lib.isArrayOrTypedArray(traceIn.line.color)) {
coerce('line.colorscale');
colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: 'line.', cLetter: 'c'});
}
else {
coerce('line.color', defaultColor);
}
}
function dimensionsDefaults(traceIn, traceOut) {
var dimensionsIn = traceIn.dimensions || [],
dimensionsOut = traceOut.dimensions = [];
var dimensionIn, dimensionOut, i;
var commonLength = Infinity;
if(dimensionsIn.length > maxDimensionCount) {
Lib.log('parcoords traces support up to ' + maxDimensionCount + ' dimensions at the moment');
dimensionsIn.splice(maxDimensionCount);
}
function coerce(attr, dflt) {
return Lib.coerce(dimensionIn, dimensionOut, attributes.dimensions, attr, dflt);
}
for(i = 0; i < dimensionsIn.length; i++) {
dimensionIn = dimensionsIn[i];
dimensionOut = {};
if(!Lib.isPlainObject(dimensionIn)) {
continue;
}
var values = coerce('values');
var visible = coerce('visible', values.length > 0);
if(visible) {
coerce('label');
coerce('tickvals');
coerce('ticktext');
coerce('tickformat');
coerce('range');
coerce('constraintrange');
commonLength = Math.min(commonLength, dimensionOut.values.length);
}
dimensionOut._index = i;
dimensionsOut.push(dimensionOut);
}
if(isFinite(commonLength)) {
for(i = 0; i < dimensionsOut.length; i++) {
dimensionOut = dimensionsOut[i];
if(dimensionOut.visible && dimensionOut.values.length > commonLength) {
dimensionOut.values = dimensionOut.values.slice(0, commonLength);
}
}
}
return dimensionsOut;
}
module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
function coerce(attr, dflt) {
return Lib.coerce(traceIn, traceOut, attributes, attr, dflt);
}
var dimensions = dimensionsDefaults(traceIn, traceOut);
handleLineDefaults(traceIn, traceOut, defaultColor, layout, coerce);
coerce('domain.x');
coerce('domain.y');
if(!Array.isArray(dimensions) || !dimensions.length) {
traceOut.visible = false;
}
// make default font size 10px,
// scale linearly with global font size
var fontDflt = {
family: layout.font.family,
size: Math.round(layout.font.size * (10 / 12)),
color: layout.font.color
};
Lib.coerceFont(coerce, 'labelfont', fontDflt);
Lib.coerceFont(coerce, 'tickfont', fontDflt);
Lib.coerceFont(coerce, 'rangefont', fontDflt);
};