@@ -248,6 +248,11 @@ drawing.symbolNumber = function(v) {
248
248
return Math . floor ( Math . max ( v , 0 ) ) ;
249
249
} ;
250
250
251
+ function makePointPath ( symbolNumber , r ) {
252
+ var base = symbolNumber % 100 ;
253
+ return drawing . symbolFuncs [ base ] ( r ) + ( symbolNumber >= 200 ? DOTPATH : '' ) ;
254
+ }
255
+
251
256
function singlePointStyle ( d , sel , trace , markerScale , lineScale , marker , markerLine , gd ) {
252
257
if ( Registry . traceIs ( trace , 'symbols' ) ) {
253
258
var sizeFn = makeBubbleSizeFn ( trace ) ;
@@ -256,8 +261,9 @@ function singlePointStyle(d, sel, trace, markerScale, lineScale, marker, markerL
256
261
var r ;
257
262
258
263
// handle multi-trace graph edit case
259
- if ( d . ms === 'various' || marker . size === 'various' ) r = 3 ;
260
- else {
264
+ if ( d . ms === 'various' || marker . size === 'various' ) {
265
+ r = 3 ;
266
+ } else {
261
267
r = subTypes . isBubble ( trace ) ?
262
268
sizeFn ( d . ms ) : ( marker . size || 6 ) / 2 ;
263
269
}
@@ -266,15 +272,13 @@ function singlePointStyle(d, sel, trace, markerScale, lineScale, marker, markerL
266
272
d . mrc = r ;
267
273
268
274
// turn the symbol into a sanitized number
269
- var x = drawing . symbolNumber ( d . mx || marker . symbol ) || 0 ,
270
- xBase = x % 100 ;
275
+ var x = drawing . symbolNumber ( d . mx || marker . symbol ) || 0 ;
271
276
272
277
// save if this marker is open
273
278
// because that impacts how to handle colors
274
279
d . om = x % 200 >= 100 ;
275
280
276
- return drawing . symbolFuncs [ xBase ] ( r ) +
277
- ( x >= 200 ? DOTPATH : '' ) ;
281
+ return makePointPath ( x , r ) ;
278
282
} ) ;
279
283
}
280
284
@@ -443,14 +447,42 @@ drawing.selectedPointStyle = function(s, trace) {
443
447
444
448
s . each ( function ( d ) {
445
449
var pt = d3 . select ( this ) ;
446
- var smc = ( selectedAttrs . marker || { } ) . color ;
447
- var usmc = ( unselectedAttrs . marker || { } ) . color ;
450
+ var marker = trace . marker || { } ;
451
+ var selectedMarker = selectedAttrs . marker || { } ;
452
+ var unselectedMarker = unselectedAttrs . marker || { } ;
453
+
454
+ var smc = selectedMarker . color ;
455
+ var usmc = unselectedMarker . color ;
448
456
449
457
if ( d . selected ) {
450
458
if ( smc ) Color . fill ( pt , smc ) ;
451
459
} else {
452
460
if ( usmc ) Color . fill ( pt , usmc ) ;
453
461
}
462
+
463
+ if ( Registry . traceIs ( trace , 'symbols' ) ) {
464
+ var sms = selectedMarker . size ;
465
+ var smx = selectedMarker . symbol ;
466
+ var usms = unselectedMarker . size ;
467
+ var usmx = unselectedMarker . symbol ;
468
+ var mrc = d . mrc ;
469
+ var mx = d . mx || marker . symbol || 0 ;
470
+ var mrc2 ;
471
+ var mx2 ;
472
+
473
+ if ( d . selected ) {
474
+ mrc2 = ( sms + 1 ) ? sms / 2 : mrc ;
475
+ mx2 = smx || mx ;
476
+ } else {
477
+ mrc2 = ( usms + 1 ) ? usms / 2 : mrc ;
478
+ mx2 = usmx || mx ;
479
+ }
480
+
481
+ // save for selectedTextStyle
482
+ d . mrc2 = mrc2 ;
483
+
484
+ pt . attr ( 'd' , makePointPath ( drawing . symbolNumber ( mx2 ) , mrc2 ) ) ;
485
+ }
454
486
} ) ;
455
487
} ;
456
488
@@ -467,8 +499,39 @@ drawing.tryColorscale = function(marker, prefix) {
467
499
else return Lib . identity ;
468
500
} ;
469
501
470
- // draw text at points
471
502
var TEXTOFFSETSIGN = { start : 1 , end : - 1 , middle : 0 , bottom : 1 , top : - 1 } ;
503
+
504
+ function textPointPosition ( s , textPosition , fontSize , markerRadius ) {
505
+ var group = d3 . select ( s . node ( ) . parentNode ) ;
506
+
507
+ var v = textPosition . indexOf ( 'top' ) !== - 1 ?
508
+ 'top' :
509
+ textPosition . indexOf ( 'bottom' ) !== - 1 ? 'bottom' : 'middle' ;
510
+ var h = textPosition . indexOf ( 'left' ) !== - 1 ?
511
+ 'end' :
512
+ textPosition . indexOf ( 'right' ) !== - 1 ? 'start' : 'middle' ;
513
+
514
+ // if markers are shown, offset a little more than
515
+ // the nominal marker size
516
+ // ie 2/1.6 * nominal, bcs some markers are a bit bigger
517
+ var r = markerRadius ? markerRadius / 0.8 + 1 : 0 ;
518
+
519
+ var numLines = ( svgTextUtils . lineCount ( s ) - 1 ) * LINE_SPACING + 1 ;
520
+ var dx = TEXTOFFSETSIGN [ h ] * r ;
521
+ var dy = fontSize * 0.75 + TEXTOFFSETSIGN [ v ] * r +
522
+ ( TEXTOFFSETSIGN [ v ] - 1 ) * numLines * fontSize / 2 ;
523
+
524
+ // fix the overall text group position
525
+ s . attr ( 'text-anchor' , h ) ;
526
+ group . attr ( 'transform' , 'translate(' + dx + ',' + dy + ')' ) ;
527
+ }
528
+
529
+ function extracTextFontSize ( d , trace ) {
530
+ var fontSize = d . ts || trace . textfont . size ;
531
+ return ( isNumeric ( fontSize ) && fontSize > 0 ) ? fontSize : 0 ;
532
+ }
533
+
534
+ // draw text at points
472
535
drawing . textPointStyle = function ( s , trace , gd ) {
473
536
s . each ( function ( d ) {
474
537
var p = d3 . select ( this ) ;
@@ -479,35 +542,16 @@ drawing.textPointStyle = function(s, trace, gd) {
479
542
return ;
480
543
}
481
544
482
- var pos = d . tp || trace . textposition ,
483
- v = pos . indexOf ( 'top' ) !== - 1 ? 'top' :
484
- pos . indexOf ( 'bottom' ) !== - 1 ? 'bottom' : 'middle' ,
485
- h = pos . indexOf ( 'left' ) !== - 1 ? 'end' :
486
- pos . indexOf ( 'right' ) !== - 1 ? 'start' : 'middle' ,
487
- fontSize = d . ts || trace . textfont . size ,
488
- // if markers are shown, offset a little more than
489
- // the nominal marker size
490
- // ie 2/1.6 * nominal, bcs some markers are a bit bigger
491
- r = d . mrc ? ( d . mrc / 0.8 + 1 ) : 0 ;
492
-
493
- fontSize = ( isNumeric ( fontSize ) && fontSize > 0 ) ? fontSize : 0 ;
545
+ var pos = d . tp || trace . textposition ;
546
+ var fontSize = extracTextFontSize ( d , trace ) ;
494
547
495
548
p . call ( drawing . font ,
496
549
d . tf || trace . textfont . family ,
497
550
fontSize ,
498
551
d . tc || trace . textfont . color )
499
- . attr ( 'text-anchor' , h )
500
552
. text ( text )
501
- . call ( svgTextUtils . convertToTspans , gd ) ;
502
-
503
- var pgroup = d3 . select ( this . parentNode ) ;
504
- var numLines = ( svgTextUtils . lineCount ( p ) - 1 ) * LINE_SPACING + 1 ;
505
- var dx = TEXTOFFSETSIGN [ h ] * r ;
506
- var dy = fontSize * 0.75 + TEXTOFFSETSIGN [ v ] * r +
507
- ( TEXTOFFSETSIGN [ v ] - 1 ) * numLines * fontSize / 2 ;
508
-
509
- // fix the overall text group position
510
- pgroup . attr ( 'transform' , 'translate(' + dx + ',' + dy + ')' ) ;
553
+ . call ( svgTextUtils . convertToTspans , gd )
554
+ . call ( textPointPosition , pos , fontSize , d . mrc ) ;
511
555
} ) ;
512
556
} ;
513
557
@@ -520,6 +564,8 @@ drawing.selectedTextStyle = function(s, trace) {
520
564
s . each ( function ( d ) {
521
565
var tx = d3 . select ( this ) ;
522
566
var tc = d . tc || trace . textfont . color ;
567
+ var tp = d . tp || trace . textposition ;
568
+ var fontSize = extracTextFontSize ( d , trace ) ;
523
569
var stc = ( selectedAttrs . textfont || { } ) . color ;
524
570
var utc = ( unselectedAttrs . textfont || { } ) . color ;
525
571
var tc2 ;
@@ -533,6 +579,7 @@ drawing.selectedTextStyle = function(s, trace) {
533
579
}
534
580
535
581
Color . fill ( tx , tc2 ) ;
582
+ textPointPosition ( tx , tp , fontSize , d . mrc2 || d . mrc ) ;
536
583
} ) ;
537
584
} ;
538
585
0 commit comments