@@ -15,20 +15,63 @@ var hasColorbar = require('../colorbar/has_colorbar');
1515var colorbarDefaults = require ( '../colorbar/defaults' ) ;
1616
1717var isValidScale = require ( './scales' ) . isValid ;
18+ var traceIs = require ( '../../registry' ) . traceIs ;
1819
19- function npMaybe ( cont , prefix ) {
20+ function npMaybe ( outerCont , prefix ) {
2021 var containerStr = prefix . slice ( 0 , prefix . length - 1 ) ;
2122 return prefix ?
22- Lib . nestedProperty ( cont , containerStr ) . get ( ) || { } :
23- cont ;
23+ Lib . nestedProperty ( outerCont , containerStr ) . get ( ) || { } :
24+ outerCont ;
2425}
2526
26- module . exports = function colorScaleDefaults ( traceIn , traceOut , layout , coerce , opts ) {
27+ module . exports = function colorScaleDefaults ( outerContIn , outerContOut , layout , coerce , opts ) {
2728 var prefix = opts . prefix ;
2829 var cLetter = opts . cLetter ;
29- var containerIn = npMaybe ( traceIn , prefix ) ;
30- var containerOut = npMaybe ( traceOut , prefix ) ;
31- var template = npMaybe ( traceOut . _template || { } , prefix ) || { } ;
30+ var inTrace = '_module' in outerContOut ;
31+ var containerIn = npMaybe ( outerContIn , prefix ) ;
32+ var containerOut = npMaybe ( outerContOut , prefix ) ;
33+ var template = npMaybe ( outerContOut . _template || { } , prefix ) || { } ;
34+
35+ // colorScaleDefaults wrapper called if-ever we need to reset the colorscale
36+ // attributes for containers that were linked to invalid color axes
37+ var thisFn = function ( ) {
38+ delete outerContIn . coloraxis ;
39+ delete outerContOut . coloraxis ;
40+ return colorScaleDefaults ( outerContIn , outerContOut , layout , coerce , opts ) ;
41+ } ;
42+
43+ if ( inTrace ) {
44+ var colorAxes = layout . _colorAxes || { } ;
45+ var colorAx = coerce ( prefix + 'coloraxis' ) ;
46+
47+ if ( colorAx ) {
48+ var colorbarVisuals = (
49+ traceIs ( outerContOut , 'contour' ) &&
50+ Lib . nestedProperty ( outerContOut , 'contours.coloring' ) . get ( )
51+ ) || 'heatmap' ;
52+
53+ var stash = colorAxes [ colorAx ] ;
54+
55+ if ( stash ) {
56+ stash [ 2 ] . push ( thisFn ) ;
57+
58+ if ( stash [ 0 ] !== colorbarVisuals ) {
59+ stash [ 0 ] = false ;
60+ Lib . warn ( [
61+ 'Ignoring coloraxis:' , colorAx , 'setting' ,
62+ 'as it is linked to incompatible colorscales.'
63+ ] . join ( ' ' ) ) ;
64+ }
65+ } else {
66+ // stash:
67+ // - colorbar visual 'type'
68+ // - colorbar options to help in Colorbar.draw
69+ // - list of colorScaleDefaults wrapper functions
70+ colorAxes [ colorAx ] = [ colorbarVisuals , outerContOut , [ thisFn ] ] ;
71+ }
72+ return ;
73+ }
74+ }
3275
3376 var minIn = containerIn [ cLetter + 'min' ] ;
3477 var maxIn = containerIn [ cLetter + 'max' ] ;
@@ -58,7 +101,7 @@ module.exports = function colorScaleDefaults(traceIn, traceOut, layout, coerce,
58101 // handles both the trace case where the dflt is listed in attributes and
59102 // the marker case where the dflt is determined by hasColorbar
60103 var showScaleDflt ;
61- if ( prefix ) showScaleDflt = hasColorbar ( containerIn ) ;
104+ if ( prefix && inTrace ) showScaleDflt = hasColorbar ( containerIn ) ;
62105
63106 var showScale = coerce ( prefix + 'showscale' , showScaleDflt ) ;
64107 if ( showScale ) colorbarDefaults ( containerIn , containerOut , layout ) ;
0 commit comments