@@ -15,20 +15,63 @@ var hasColorbar = require('../colorbar/has_colorbar');
15
15
var colorbarDefaults = require ( '../colorbar/defaults' ) ;
16
16
17
17
var isValidScale = require ( './scales' ) . isValid ;
18
+ var traceIs = require ( '../../registry' ) . traceIs ;
18
19
19
- function npMaybe ( cont , prefix ) {
20
+ function npMaybe ( outerCont , prefix ) {
20
21
var containerStr = prefix . slice ( 0 , prefix . length - 1 ) ;
21
22
return prefix ?
22
- Lib . nestedProperty ( cont , containerStr ) . get ( ) || { } :
23
- cont ;
23
+ Lib . nestedProperty ( outerCont , containerStr ) . get ( ) || { } :
24
+ outerCont ;
24
25
}
25
26
26
- module . exports = function colorScaleDefaults ( traceIn , traceOut , layout , coerce , opts ) {
27
+ module . exports = function colorScaleDefaults ( outerContIn , outerContOut , layout , coerce , opts ) {
27
28
var prefix = opts . prefix ;
28
29
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
+ }
32
75
33
76
var minIn = containerIn [ cLetter + 'min' ] ;
34
77
var maxIn = containerIn [ cLetter + 'max' ] ;
@@ -58,7 +101,7 @@ module.exports = function colorScaleDefaults(traceIn, traceOut, layout, coerce,
58
101
// handles both the trace case where the dflt is listed in attributes and
59
102
// the marker case where the dflt is determined by hasColorbar
60
103
var showScaleDflt ;
61
- if ( prefix ) showScaleDflt = hasColorbar ( containerIn ) ;
104
+ if ( prefix && inTrace ) showScaleDflt = hasColorbar ( containerIn ) ;
62
105
63
106
var showScale = coerce ( prefix + 'showscale' , showScaleDflt ) ;
64
107
if ( showScale ) colorbarDefaults ( containerIn , containerOut , layout ) ;
0 commit comments