UNPKG

plotly.js

Version:

The open source javascript graphing library that powers plotly

123 lines (98 loc) 3.94 kB
'use strict'; var Lib = require('../../lib'); var attributes = require('./attributes'); var Color = require('../../components/color'); var handleDomainDefaults = require('../../plots/domain').defaults; var handleHoverLabelDefaults = require('../../components/fx/hoverlabel_defaults'); var Template = require('../../plot_api/plot_template'); var handleArrayContainerDefaults = require('../../plots/array_container_defaults'); module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { function coerce(attr, dflt) { return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); } var hoverlabelDefault = Lib.extendDeep(layout.hoverlabel, traceIn.hoverlabel); // node attributes var nodeIn = traceIn.node; var nodeOut = Template.newContainer(traceOut, 'node'); function coerceNode(attr, dflt) { return Lib.coerce(nodeIn, nodeOut, attributes.node, attr, dflt); } coerceNode('label'); coerceNode('groups'); coerceNode('x'); coerceNode('y'); coerceNode('pad'); coerceNode('thickness'); coerceNode('line.color'); coerceNode('line.width'); coerceNode('hoverinfo', traceIn.hoverinfo); handleHoverLabelDefaults(nodeIn, nodeOut, coerceNode, hoverlabelDefault); coerceNode('hovertemplate'); coerceNode('align'); coerceNode('sort'); var colors = layout.colorway; const defaultNodePalette = (i) => colors[i % colors.length]; coerceNode( 'color', nodeOut.label.map((d, i) => Color.addOpacity(defaultNodePalette(i), 0.8)) ); coerceNode('customdata'); // link attributes var linkIn = traceIn.link || {}; var linkOut = Template.newContainer(traceOut, 'link'); function coerceLink(attr, dflt) { return Lib.coerce(linkIn, linkOut, attributes.link, attr, dflt); } coerceLink('label'); coerceLink('arrowlen'); coerceLink('source'); coerceLink('target'); coerceLink('value'); coerceLink('line.color'); coerceLink('line.width'); coerceLink('hoverinfo', traceIn.hoverinfo); handleHoverLabelDefaults(linkIn, linkOut, coerceLink, hoverlabelDefault); coerceLink('hovertemplate'); coerceLink('sort'); var darkBG = Color.luminosity(layout.paper_bgcolor) < 0.333; var defaultLinkColor = darkBG ? 'rgba(255, 255, 255, 0.6)' : 'rgba(0, 0, 0, 0.2)'; var linkColor = coerceLink('color', defaultLinkColor); function makeDefaultHoverColor(_linkColor) { // hopefully the user-specified color is valid, but if not that can be caught elsewhere if (!Color.isValid(_linkColor)) return _linkColor; const alpha = Color.opacity(_linkColor); if (alpha <= 0.8) { return Color.addOpacity(_linkColor, alpha + 0.2); } else { return darkBG ? Color.brighten(_linkColor, 10) : Color.adjustLightness(_linkColor, -10); } } coerceLink( 'hovercolor', Array.isArray(linkColor) ? linkColor.map(makeDefaultHoverColor) : makeDefaultHoverColor(linkColor) ); coerceLink('customdata'); handleArrayContainerDefaults(linkIn, linkOut, { name: 'colorscales', handleItemDefaults: concentrationscalesDefaults }); handleDomainDefaults(traceOut, layout, coerce); coerce('orientation'); coerce('direction'); coerce('valueformat'); coerce('valuesuffix'); const dfltArrangement = nodeOut.x.length && nodeOut.y.length ? 'freeform' : undefined; coerce('arrangement', dfltArrangement); Lib.coerceFont(coerce, 'textfont', layout.font, { autoShadowDflt: true }); // Ensure _length is defined traceOut._length = null; }; function concentrationscalesDefaults(In, Out) { function coerce(attr, dflt) { return Lib.coerce(In, Out, attributes.link.colorscales, attr, dflt); } coerce('label'); coerce('cmin'); coerce('cmax'); coerce('colorscale'); }