@@ -95,13 +95,16 @@ module.exports = function style(s, gd, legend) {
95
95
. each ( styleOHLC ) ;
96
96
97
97
function styleLines ( d ) {
98
+ var styleGuide = getStyleGuide ( d ) ;
99
+ var showFill = styleGuide . showFill ;
100
+ var showLine = styleGuide . showLine ;
101
+ var showGradientLine = styleGuide . showGradientLine ;
102
+ var showGradientFill = styleGuide . showGradientFill ;
103
+ var anyFill = styleGuide . anyFill ;
104
+ var anyLine = styleGuide . anyLine ;
105
+
98
106
var d0 = d [ 0 ] ;
99
107
var trace = d0 . trace ;
100
- var showFill = trace . visible && trace . fill && trace . fill !== 'none' ;
101
- var showLine = subTypes . hasLines ( trace ) ;
102
- var contours = trace . contours ;
103
- var showGradientLine = false ;
104
- var showGradientFill = false ;
105
108
var dMod , tMod ;
106
109
107
110
var cOpts = extractOpts ( trace ) ;
@@ -127,28 +130,10 @@ module.exports = function style(s, gd, legend) {
127
130
}
128
131
} ;
129
132
130
- if ( contours ) {
131
- var coloring = contours . coloring ;
132
-
133
- if ( coloring === 'lines' ) {
134
- showGradientLine = true ;
135
- } else {
136
- showLine = coloring === 'none' || coloring === 'heatmap' || contours . showlines ;
137
- }
138
-
139
- if ( contours . type === 'constraint' ) {
140
- showFill = contours . _operation !== '=' ;
141
- } else if ( coloring === 'fill' || coloring === 'heatmap' ) {
142
- showGradientFill = true ;
143
- }
144
- }
145
-
146
133
// with fill and no markers or text, move the line and fill up a bit
147
134
// so it's more centered
148
- var markersOrText = subTypes . hasMarkers ( trace ) || subTypes . isText ( trace ) ;
149
- var anyFill = showFill || showGradientFill ;
150
- var anyLine = showLine || showGradientLine ;
151
- var pathStart = ( markersOrText || ! anyFill ) ? 'M5,0' :
135
+
136
+ var pathStart = ( subTypes . hasMarkers ( trace ) || ! anyFill ) ? 'M5,0' :
152
137
// with a line leave it slightly below center, to leave room for the
153
138
// line thickness and because the line is usually more prominent
154
139
anyLine ? 'M5,-2' : 'M5,-3' ;
@@ -184,11 +169,15 @@ module.exports = function style(s, gd, legend) {
184
169
}
185
170
186
171
function stylePoints ( d ) {
172
+ var styleGuide = getStyleGuide ( d ) ;
173
+ var anyFill = styleGuide . anyFill ;
174
+ var anyLine = styleGuide . anyLine ;
175
+ var showLine = styleGuide . showLine ;
176
+ var showMarker = styleGuide . showMarker ;
177
+
187
178
var d0 = d [ 0 ] ;
188
179
var trace = d0 . trace ;
189
- var showMarkers = subTypes . hasMarkers ( trace ) ;
190
- var showText = subTypes . isText ( trace ) ;
191
- var showLines = subTypes . hasLines ( trace ) ;
180
+ var showText = ! showMarker && ! anyLine && ! anyFill && subTypes . hasText ( trace ) ;
192
181
var dMod , tMod ;
193
182
194
183
// 'scatter3d' don't use gd.calcdata,
@@ -217,11 +206,11 @@ module.exports = function style(s, gd, legend) {
217
206
}
218
207
219
208
// constrain text, markers, etc so they'll fit on the legend
220
- if ( showMarkers || showText || showLines ) {
209
+ if ( showMarker || showText || showLine ) {
221
210
var dEdit = { } ;
222
211
var tEdit = { } ;
223
212
224
- if ( showMarkers ) {
213
+ if ( showMarker ) {
225
214
dEdit . mc = boundVal ( 'marker.color' , pickFirst ) ;
226
215
dEdit . mx = boundVal ( 'marker.symbol' , pickFirst ) ;
227
216
dEdit . mo = boundVal ( 'marker.opacity' , Lib . mean , [ 0.2 , 1 ] ) ;
@@ -238,7 +227,7 @@ module.exports = function style(s, gd, legend) {
238
227
tEdit . marker . size = ms ;
239
228
}
240
229
241
- if ( showLines ) {
230
+ if ( showLine ) {
242
231
tEdit . line = {
243
232
width : boundVal ( 'line.width' , pickFirst , [ 0 , 10 ] , CST_LINE_WIDTH )
244
233
} ;
@@ -265,7 +254,7 @@ module.exports = function style(s, gd, legend) {
265
254
var ptgroup = d3 . select ( this ) . select ( 'g.legendpoints' ) ;
266
255
267
256
var pts = ptgroup . selectAll ( 'path.scatterpts' )
268
- . data ( showMarkers ? dMod : [ ] ) ;
257
+ . data ( showMarker ? dMod : [ ] ) ;
269
258
// make sure marker is on the bottom, in case it enters after text
270
259
pts . enter ( ) . insert ( 'path' , ':first-child' )
271
260
. classed ( 'scatterpts' , true )
@@ -275,7 +264,7 @@ module.exports = function style(s, gd, legend) {
275
264
276
265
// 'mrc' is set in pointStyle and used in textPointStyle:
277
266
// constrain it here
278
- if ( showMarkers ) dMod [ 0 ] . mrc = 3 ;
267
+ if ( showMarker ) dMod [ 0 ] . mrc = 3 ;
279
268
280
269
var txt = ptgroup . selectAll ( 'g.pointtext' )
281
270
. data ( showText ? dMod : [ ] ) ;
@@ -636,3 +625,40 @@ function getGradientDirection(reversescale, isRadial) {
636
625
var str = isRadial ? 'radial' : 'horizontal' ;
637
626
return str + ( reversescale ? '' : 'reversed' ) ;
638
627
}
628
+
629
+ function getStyleGuide ( d ) {
630
+ var trace = d [ 0 ] . trace ;
631
+ var contours = trace . contours ;
632
+ var showLine = subTypes . hasLines ( trace ) ;
633
+ var showMarker = subTypes . hasMarkers ( trace ) ;
634
+
635
+ var showFill = trace . visible && trace . fill && trace . fill !== 'none' ;
636
+ var showGradientLine = false ;
637
+ var showGradientFill = false ;
638
+
639
+ if ( contours ) {
640
+ var coloring = contours . coloring ;
641
+
642
+ if ( coloring === 'lines' ) {
643
+ showGradientLine = true ;
644
+ } else {
645
+ showLine = coloring === 'none' || coloring === 'heatmap' || contours . showlines ;
646
+ }
647
+
648
+ if ( contours . type === 'constraint' ) {
649
+ showFill = contours . _operation !== '=' ;
650
+ } else if ( coloring === 'fill' || coloring === 'heatmap' ) {
651
+ showGradientFill = true ;
652
+ }
653
+ }
654
+
655
+ return {
656
+ showMarker : showMarker ,
657
+ showLine : showLine ,
658
+ showFill : showFill ,
659
+ showGradientLine : showGradientLine ,
660
+ showGradientFill : showGradientFill ,
661
+ anyLine : showLine || showGradientLine ,
662
+ anyFill : showFill || showGradientFill ,
663
+ } ;
664
+ }
0 commit comments