@@ -439,8 +439,8 @@ drawing.pointStyle = function(s, trace, gd) {
439439 } ) ;
440440} ;
441441
442- drawing . selectedPointStyle = function ( s , trace ) {
443- if ( ! s . size ( ) || ! trace . selectedpoints ) return ;
442+ drawing . makeSelectedPointStyleFns = function ( trace ) {
443+ var out = { } ;
444444
445445 var selectedAttrs = trace . selected || { } ;
446446 var unselectedAttrs = trace . unselected || { } ;
@@ -455,59 +455,77 @@ drawing.selectedPointStyle = function(s, trace) {
455455 var smoIsDefined = smo !== undefined ;
456456 var usmoIsDefined = usmo !== undefined ;
457457
458- s . each ( function ( d ) {
459- var pt = d3 . select ( this ) ;
458+ out . opacityFn = function ( d ) {
460459 var dmo = d . mo ;
461460 var dmoIsDefined = dmo !== undefined ;
462- var mo2 ;
463461
464462 if ( dmoIsDefined || smoIsDefined || usmoIsDefined ) {
465463 if ( d . selected ) {
466- if ( smoIsDefined ) mo2 = smo ;
464+ if ( smoIsDefined ) return smo ;
467465 } else {
468- if ( usmoIsDefined ) mo2 = usmo ;
469- else mo2 = DESELECTDIM * ( dmoIsDefined ? dmo : mo ) ;
466+ if ( usmoIsDefined ) return usmo ;
467+ return DESELECTDIM * ( dmoIsDefined ? dmo : mo ) ;
470468 }
471469 }
472-
473- if ( mo2 !== undefined ) pt . style ( 'opacity' , mo2 ) ;
474- } ) ;
470+ } ;
475471
476472 var smc = selectedMarker . color ;
477473 var usmc = unselectedMarker . color ;
478474
479475 if ( smc || usmc ) {
480- s . each ( function ( d ) {
481- var pt = d3 . select ( this ) ;
482- var mc2 ;
483-
476+ out . colorFn = function ( d ) {
484477 if ( d . selected ) {
485- if ( smc ) mc2 = smc ;
478+ if ( smc ) return smc ;
486479 } else {
487- if ( usmc ) mc2 = usmc ;
480+ if ( usmc ) return usmc ;
488481 }
489-
490- if ( mc2 ) Color . fill ( pt , mc2 ) ;
491- } ) ;
482+ } ;
492483 }
493484
494485 var sms = selectedMarker . size ;
495486 var usms = unselectedMarker . size ;
496487 var smsIsDefined = sms !== undefined ;
497488 var usmsIsDefined = usms !== undefined ;
498489
499- if ( Registry . traceIs ( trace , 'symbols' ) && ( smsIsDefined || usmsIsDefined ) ) {
500- s . each ( function ( d ) {
501- var pt = d3 . select ( this ) ;
490+ if ( smsIsDefined || usmsIsDefined ) {
491+ out . sizeFn = function ( d ) {
502492 var mrc = d . mrc ;
503- var mx = d . mx || marker . symbol || 0 ;
504- var mrc2 ;
505-
506493 if ( d . selected ) {
507- mrc2 = ( smsIsDefined ) ? sms / 2 : mrc ;
494+ return smsIsDefined ? sms / 2 : mrc ;
508495 } else {
509- mrc2 = ( usmsIsDefined ) ? usms / 2 : mrc ;
496+ return usmsIsDefined ? usms / 2 : mrc ;
510497 }
498+ } ;
499+ }
500+
501+ return out ;
502+ } ;
503+
504+ drawing . selectedPointStyle = function ( s , trace ) {
505+ if ( ! s . size ( ) || ! trace . selectedpoints ) return ;
506+
507+ var fns = drawing . makeSelectedPointStyleFns ( trace ) ;
508+ var marker = trace . marker || { } ;
509+
510+ s . each ( function ( d ) {
511+ var pt = d3 . select ( this ) ;
512+ var mo2 = fns . opacityFn ( d ) ;
513+ if ( mo2 !== undefined ) pt . style ( 'opacity' , mo2 ) ;
514+ } ) ;
515+
516+ if ( fns . colorFn ) {
517+ s . each ( function ( d ) {
518+ var pt = d3 . select ( this ) ;
519+ var mc2 = fns . colorFn ( d ) ;
520+ if ( mc2 ) Color . fill ( pt , mc2 ) ;
521+ } ) ;
522+ }
523+
524+ if ( Registry . traceIs ( trace , 'symbols' ) && fns . sizeFn ) {
525+ s . each ( function ( d ) {
526+ var pt = d3 . select ( this ) ;
527+ var mx = d . mx || marker . symbol || 0 ;
528+ var mrc2 = fns . sizeFn ( d ) ;
511529
512530 pt . attr ( 'd' , makePointPath ( drawing . symbolNumber ( mx ) , mrc2 ) ) ;
513531
0 commit comments