|
| 1 | +/** |
| 2 | +* Copyright 2012-2017, Plotly, Inc. |
| 3 | +* All rights reserved. |
| 4 | +* |
| 5 | +* This source code is licensed under the MIT license found in the |
| 6 | +* LICENSE file in the root directory of this source tree. |
| 7 | +*/ |
| 8 | + |
| 9 | +'use strict'; |
| 10 | + |
| 11 | +var Lib = require('../../lib'); |
| 12 | + |
| 13 | +var subTypes = require('../scatter/subtypes'); |
| 14 | +var handleMarkerDefaults = require('../scatter/marker_defaults'); |
| 15 | +var handleLineDefaults = require('../scatter/line_defaults'); |
| 16 | +var handleLineShapeDefaults = require('../scatter/line_shape_defaults'); |
| 17 | +var handleTextDefaults = require('../scatter/text_defaults'); |
| 18 | +var handleFillColorDefaults = require('../scatter/fillcolor_defaults'); |
| 19 | + |
| 20 | +var attributes = require('./attributes'); |
| 21 | + |
| 22 | +module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { |
| 23 | + function coerce(attr, dflt) { |
| 24 | + return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); |
| 25 | + } |
| 26 | + |
| 27 | + var r = coerce('r'); |
| 28 | + var theta = coerce('theta'); |
| 29 | + var len = (r && theta) ? Math.min(r.length, theta.length) : 0; |
| 30 | + |
| 31 | + if(!len) { |
| 32 | + traceOut.visible = false; |
| 33 | + return; |
| 34 | + } |
| 35 | + |
| 36 | + if(len < r.length) traceOut.r = r.slice(0, len); |
| 37 | + if(len < theta.length) traceOut.theta = theta.slice(0, len); |
| 38 | + |
| 39 | + coerce('thetaunit'); |
| 40 | + coerce('mode'); |
| 41 | + coerce('text'); |
| 42 | + coerce('hovertext'); |
| 43 | + |
| 44 | + if(subTypes.hasLines(traceOut)) { |
| 45 | + handleLineDefaults(traceIn, traceOut, defaultColor, layout, coerce); |
| 46 | + handleLineShapeDefaults(traceIn, traceOut, coerce); |
| 47 | + coerce('connectgaps'); |
| 48 | + } |
| 49 | + |
| 50 | + if(subTypes.hasMarkers(traceOut)) { |
| 51 | + handleMarkerDefaults(traceIn, traceOut, defaultColor, layout, coerce, {gradient: true}); |
| 52 | + } |
| 53 | + |
| 54 | + if(subTypes.hasText(traceOut)) { |
| 55 | + handleTextDefaults(traceIn, traceOut, layout, coerce); |
| 56 | + } |
| 57 | + |
| 58 | + var dfltHoverOn = []; |
| 59 | + |
| 60 | + if(subTypes.hasMarkers(traceOut) || subTypes.hasText(traceOut)) { |
| 61 | + // TODO update other scatter*/defaults |
| 62 | + // cliponaxis has no effect on `mode: 'lines'` traces |
| 63 | + coerce('cliponaxis'); |
| 64 | + |
| 65 | + coerce('marker.maxdisplayed'); |
| 66 | + dfltHoverOn.push('points'); |
| 67 | + } |
| 68 | + |
| 69 | + coerce('fill'); |
| 70 | + |
| 71 | + // TODO time for a subTypes.hasFill |
| 72 | + if(traceOut.fill !== 'none') { |
| 73 | + handleFillColorDefaults(traceIn, traceOut, defaultColor, coerce); |
| 74 | + if(!subTypes.hasLines(traceOut)) handleLineShapeDefaults(traceIn, traceOut, coerce); |
| 75 | + } |
| 76 | + |
| 77 | + if(traceOut.fill === 'tonext' || traceOut.fill === 'toself') { |
| 78 | + dfltHoverOn.push('fills'); |
| 79 | + } |
| 80 | + coerce('hoveron', dfltHoverOn.join('+') || 'points'); |
| 81 | + |
| 82 | + Lib.coerceSelectionMarkerOpacity(traceOut, coerce); |
| 83 | +}; |
0 commit comments