@@ -17,16 +17,38 @@ var Color = require('../color');
17
17
18
18
var subTypes = require ( '../../traces/scatter/subtypes' ) ;
19
19
var stylePie = require ( '../../traces/pie/style_one' ) ;
20
+ var pieCastOption = require ( '../../traces/pie/helpers' ) . castOption ;
21
+
22
+ var CST_MARKER_SIZE = 12 ;
23
+ var CST_LINE_WIDTH = 5 ;
24
+ var CST_MARKER_LINE_WIDTH = 2 ;
25
+ var MAX_LINE_WIDTH = 10 ;
26
+ var MAX_MARKER_LINE_WIDTH = 5 ;
20
27
21
28
module . exports = function style ( s , gd ) {
29
+ var fullLayout = gd . _fullLayout ;
30
+ var legend = fullLayout . legend ;
31
+ var constantItemSizing = legend . itemsizing === 'constant' ;
32
+
33
+ function boundLineWidth ( mlw , cont , max , cst ) {
34
+ var v ;
35
+ if ( mlw + 1 ) {
36
+ v = mlw ;
37
+ } else if ( cont && cont . width > 0 ) {
38
+ v = cont . width ;
39
+ } else {
40
+ return 0 ;
41
+ }
42
+ return constantItemSizing ? cst : Math . min ( v , max ) ;
43
+ }
44
+
22
45
s . each ( function ( d ) {
23
46
var traceGroup = d3 . select ( this ) ;
24
47
25
48
var layers = Lib . ensureSingle ( traceGroup , 'g' , 'layers' ) ;
26
49
layers . style ( 'opacity' , d [ 0 ] . trace . opacity ) ;
27
50
28
- // Marker vertical alignment
29
- var valign = gd . _fullLayout . legend . valign ;
51
+ var valign = legend . valign ;
30
52
var lineHeight = d [ 0 ] . lineHeight ;
31
53
var height = d [ 0 ] . height ;
32
54
@@ -71,12 +93,14 @@ module.exports = function style(s, gd) {
71
93
. each ( styleOHLC ) ;
72
94
73
95
function styleLines ( d ) {
74
- var trace = d [ 0 ] . trace ;
96
+ var d0 = d [ 0 ] ;
97
+ var trace = d0 . trace ;
75
98
var showFill = trace . visible && trace . fill && trace . fill !== 'none' ;
76
99
var showLine = subTypes . hasLines ( trace ) ;
77
100
var contours = trace . contours ;
78
101
var showGradientLine = false ;
79
102
var showGradientFill = false ;
103
+ var dMod , tMod ;
80
104
81
105
if ( contours ) {
82
106
var coloring = contours . coloring ;
@@ -113,8 +137,14 @@ module.exports = function style(s, gd) {
113
137
fill . attr ( 'd' , pathStart + 'h30v6h-30z' )
114
138
. call ( showFill ? Drawing . fillGroupStyle : fillGradient ) ;
115
139
140
+ if ( showLine || showGradientLine ) {
141
+ var lw = boundLineWidth ( undefined , trace . line , MAX_LINE_WIDTH , CST_LINE_WIDTH ) ;
142
+ tMod = Lib . minExtend ( trace , { line : { width : lw } } ) ;
143
+ dMod = [ Lib . minExtend ( d0 , { trace : tMod } ) ] ;
144
+ }
145
+
116
146
var line = this3 . select ( '.legendlines' ) . selectAll ( 'path' )
117
- . data ( showLine || showGradientLine ? [ d ] : [ ] ) ;
147
+ . data ( showLine || showGradientLine ? [ dMod ] : [ ] ) ;
118
148
line . enter ( ) . append ( 'path' ) . classed ( 'js-line' , true ) ;
119
149
line . exit ( ) . remove ( ) ;
120
150
@@ -156,12 +186,16 @@ module.exports = function style(s, gd) {
156
186
// 'scatter3d' don't use gd.calcdata,
157
187
// use d0.trace to infer arrayOk attributes
158
188
159
- function boundVal ( attrIn , arrayToValFn , bounds ) {
189
+ function boundVal ( attrIn , arrayToValFn , bounds , cst ) {
160
190
var valIn = Lib . nestedProperty ( trace , attrIn ) . get ( ) ;
161
191
var valToBound = ( Lib . isArrayOrTypedArray ( valIn ) && arrayToValFn ) ?
162
192
arrayToValFn ( valIn ) :
163
193
valIn ;
164
194
195
+ if ( constantItemSizing && valToBound && cst !== undefined ) {
196
+ valToBound = cst ;
197
+ }
198
+
165
199
if ( bounds ) {
166
200
if ( valToBound < bounds [ 0 ] ) return bounds [ 0 ] ;
167
201
else if ( valToBound > bounds [ 1 ] ) return bounds [ 1 ] ;
@@ -181,21 +215,21 @@ module.exports = function style(s, gd) {
181
215
dEdit . mx = boundVal ( 'marker.symbol' , pickFirst ) ;
182
216
dEdit . mo = boundVal ( 'marker.opacity' , Lib . mean , [ 0.2 , 1 ] ) ;
183
217
dEdit . mlc = boundVal ( 'marker.line.color' , pickFirst ) ;
184
- dEdit . mlw = boundVal ( 'marker.line.width' , Lib . mean , [ 0 , 5 ] ) ;
218
+ dEdit . mlw = boundVal ( 'marker.line.width' , Lib . mean , [ 0 , 5 ] , CST_MARKER_LINE_WIDTH ) ;
185
219
tEdit . marker = {
186
220
sizeref : 1 ,
187
221
sizemin : 1 ,
188
222
sizemode : 'diameter'
189
223
} ;
190
224
191
- var ms = boundVal ( 'marker.size' , Lib . mean , [ 2 , 16 ] ) ;
225
+ var ms = boundVal ( 'marker.size' , Lib . mean , [ 2 , 16 ] , CST_MARKER_SIZE ) ;
192
226
dEdit . ms = ms ;
193
227
tEdit . marker . size = ms ;
194
228
}
195
229
196
230
if ( showLines ) {
197
231
tEdit . line = {
198
- width : boundVal ( 'line.width' , pickFirst , [ 0 , 10 ] )
232
+ width : boundVal ( 'line.width' , pickFirst , [ 0 , 10 ] , CST_LINE_WIDTH )
199
233
} ;
200
234
}
201
235
@@ -259,12 +293,13 @@ module.exports = function style(s, gd) {
259
293
pts . each ( function ( dd ) {
260
294
var pt = d3 . select ( this ) ;
261
295
var cont = trace [ dd [ 0 ] ] . marker ;
296
+ var lw = boundLineWidth ( undefined , cont . line , MAX_MARKER_LINE_WIDTH , CST_MARKER_LINE_WIDTH ) ;
262
297
263
298
pt . attr ( 'd' , dd [ 1 ] )
264
- . style ( 'stroke-width' , cont . line . width + 'px' )
299
+ . style ( 'stroke-width' , lw + 'px' )
265
300
. call ( Color . fill , cont . color ) ;
266
301
267
- if ( cont . line . width ) {
302
+ if ( lw ) {
268
303
pt . call ( Color . stroke , cont . line . color ) ;
269
304
}
270
305
} ) ;
@@ -286,7 +321,7 @@ module.exports = function style(s, gd) {
286
321
barpath . each ( function ( d ) {
287
322
var p = d3 . select ( this ) ;
288
323
var d0 = d [ 0 ] ;
289
- var w = ( d0 . mlw + 1 || markerLine . width + 1 ) - 1 ;
324
+ var w = boundLineWidth ( d0 . mlw , marker . line , MAX_MARKER_LINE_WIDTH , CST_MARKER_LINE_WIDTH ) ;
290
325
291
326
p . style ( 'stroke-width' , w + 'px' )
292
327
. call ( Color . fill , d0 . mc || marker . color ) ;
@@ -308,8 +343,8 @@ module.exports = function style(s, gd) {
308
343
pts . exit ( ) . remove ( ) ;
309
344
310
345
pts . each ( function ( ) {
311
- var w = trace . line . width ;
312
346
var p = d3 . select ( this ) ;
347
+ var w = boundLineWidth ( undefined , trace . line , MAX_MARKER_LINE_WIDTH , CST_MARKER_LINE_WIDTH ) ;
313
348
314
349
p . style ( 'stroke-width' , w + 'px' )
315
350
. call ( Color . fill , trace . fillcolor ) ;
@@ -334,16 +369,14 @@ module.exports = function style(s, gd) {
334
369
pts . exit ( ) . remove ( ) ;
335
370
336
371
pts . each ( function ( _ , i ) {
337
- var container = trace [ i ? 'increasing' : 'decreasing' ] ;
338
- var w = container . line . width ;
339
372
var p = d3 . select ( this ) ;
373
+ var cont = trace [ i ? 'increasing' : 'decreasing' ] ;
374
+ var w = boundLineWidth ( undefined , cont . line , MAX_MARKER_LINE_WIDTH , CST_MARKER_LINE_WIDTH ) ;
340
375
341
376
p . style ( 'stroke-width' , w + 'px' )
342
- . call ( Color . fill , container . fillcolor ) ;
377
+ . call ( Color . fill , cont . fillcolor ) ;
343
378
344
- if ( w ) {
345
- Color . stroke ( p , container . line . color ) ;
346
- }
379
+ if ( w ) Color . stroke ( p , cont . line . color ) ;
347
380
} ) ;
348
381
}
349
382
@@ -363,21 +396,20 @@ module.exports = function style(s, gd) {
363
396
pts . exit ( ) . remove ( ) ;
364
397
365
398
pts . each ( function ( _ , i ) {
366
- var container = trace [ i ? 'increasing' : 'decreasing' ] ;
367
- var w = container . line . width ;
368
399
var p = d3 . select ( this ) ;
400
+ var cont = trace [ i ? 'increasing' : 'decreasing' ] ;
401
+ var w = boundLineWidth ( undefined , cont . line , MAX_MARKER_LINE_WIDTH , CST_MARKER_LINE_WIDTH ) ;
369
402
370
403
p . style ( 'fill' , 'none' )
371
- . call ( Drawing . dashLine , container . line . dash , w ) ;
404
+ . call ( Drawing . dashLine , cont . line . dash , w ) ;
372
405
373
- if ( w ) {
374
- Color . stroke ( p , container . line . color ) ;
375
- }
406
+ if ( w ) Color . stroke ( p , cont . line . color ) ;
376
407
} ) ;
377
408
}
378
409
379
410
function stylePies ( d ) {
380
- var trace = d [ 0 ] . trace ;
411
+ var d0 = d [ 0 ] ;
412
+ var trace = d0 . trace ;
381
413
382
414
var pts = d3 . select ( this ) . select ( 'g.legendpoints' )
383
415
. selectAll ( 'path.legendpie' )
@@ -387,6 +419,12 @@ module.exports = function style(s, gd) {
387
419
. attr ( 'transform' , 'translate(20,0)' ) ;
388
420
pts . exit ( ) . remove ( ) ;
389
421
390
- if ( pts . size ( ) ) pts . call ( stylePie , d [ 0 ] , trace ) ;
422
+ if ( pts . size ( ) ) {
423
+ var cont = ( trace . marker || { } ) . line ;
424
+ var lw = boundLineWidth ( pieCastOption ( cont . width , d0 . pts ) , cont , MAX_MARKER_LINE_WIDTH , CST_MARKER_LINE_WIDTH ) ;
425
+ var tMod = Lib . minExtend ( trace , { marker : { line : { width : lw } } } ) ;
426
+ var d0Mod = Lib . minExtend ( d0 , { trace : tMod } ) ;
427
+ stylePie ( pts , d0Mod , tMod ) ;
428
+ }
391
429
}
392
430
} ;
0 commit comments