-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathposition_defaults.js
89 lines (75 loc) · 3.19 KB
/
position_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
'use strict';
var isNumeric = require('fast-isnumeric');
var Lib = require('../../lib');
module.exports = function handlePositionDefaults(containerIn, containerOut, coerce, options) {
var counterAxes = options.counterAxes || [];
var overlayableAxes = options.overlayableAxes || [];
var letter = options.letter;
var grid = options.grid;
var overlayingDomain = options.overlayingDomain;
var dfltAnchor, dfltDomain, dfltSide, dfltPosition, dfltShift, dfltAutomargin;
if(grid) {
dfltDomain = grid._domains[letter][grid._axisMap[containerOut._id]];
dfltAnchor = grid._anchors[containerOut._id];
if(dfltDomain) {
dfltSide = grid[letter + 'side'].split(' ')[0];
dfltPosition = grid.domain[letter][dfltSide === 'right' || dfltSide === 'top' ? 1 : 0];
}
}
// Even if there's a grid, this axis may not be in it - fall back on non-grid defaults
dfltDomain = dfltDomain || [0, 1];
dfltAnchor = dfltAnchor || (isNumeric(containerIn.position) ? 'free' : (counterAxes[0] || 'free'));
dfltSide = dfltSide || (letter === 'x' ? 'bottom' : 'left');
dfltPosition = dfltPosition || 0;
dfltShift = dfltShift || false;
dfltAutomargin = dfltAutomargin || false;
var anchor = Lib.coerce(containerIn, containerOut, {
anchor: {
valType: 'enumerated',
values: ['free'].concat(counterAxes),
dflt: dfltAnchor
}
}, 'anchor');
var side = Lib.coerce(containerIn, containerOut, {
side: {
valType: 'enumerated',
values: letter === 'x' ? ['bottom', 'top'] : ['left', 'right'],
dflt: dfltSide
}
}, 'side');
if(anchor === 'free') {
var shift = coerce('shift', dfltShift);
if(shift !== false && shift !== undefined) {
dfltPosition = side === 'left' ? overlayingDomain[0] : overlayingDomain[1];
}
if(shift === true) {
dfltAutomargin = containerOut.automargin ? containerOut.automargin : true;
}
coerce('position', dfltPosition);
}
coerce('automargin', dfltAutomargin);
var overlaying = false;
if(overlayableAxes.length) {
overlaying = Lib.coerce(containerIn, containerOut, {
overlaying: {
valType: 'enumerated',
values: [false].concat(overlayableAxes),
dflt: false
}
}, 'overlaying');
}
if(!overlaying) {
// TODO: right now I'm copying this domain over to overlaying axes
// in ax.setscale()... but this means we still need (imperfect) logic
// in the axes popover to hide domain for the overlaying axis.
// perhaps I should make a private version _domain that all axes get???
var domain = coerce('domain', dfltDomain);
// according to https://www.npmjs.com/package/canvas-size
// the minimum value of max canvas width across browsers and devices is 4096
// which applied in the calculation below:
if(domain[0] > domain[1] - 1 / 4096) containerOut.domain = dfltDomain;
Lib.noneOrAll(containerIn.domain, containerOut.domain, dfltDomain);
}
coerce('layer');
return containerOut;
};