Skip to content

Commit 278adec

Browse files
committed
resolves #2346 - add (un)selected.marker color/size support
... to scattermapbox traces, along with fixing existing bugs and cleaning up the convert logic (in 0.44.0, we no longer have to generate a hacky hash stops array 🎉
1 parent fcb8c25 commit 278adec

File tree

7 files changed

+198
-266
lines changed

7 files changed

+198
-266
lines changed

src/components/drawing/index.js

Lines changed: 46 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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

src/traces/scattermapbox/attributes.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ var overrideAll = require('../../plot_api/edit_types').overrideAll;
2020
var lineAttrs = scatterGeoAttrs.line;
2121
var markerAttrs = scatterGeoAttrs.marker;
2222

23-
2423
module.exports = overrideAll({
2524
lon: scatterGeoAttrs.lon,
2625
lat: scatterGeoAttrs.lat,
@@ -108,14 +107,10 @@ module.exports = overrideAll({
108107
textposition: mapboxAttrs.layers.symbol.textposition,
109108

110109
selected: {
111-
marker: {
112-
opacity: scatterAttrs.selected.marker.opacity
113-
}
110+
marker: scatterAttrs.selected.marker
114111
},
115112
unselected: {
116-
marker: {
117-
opacity: scatterAttrs.unselected.marker.opacity
118-
}
113+
marker: scatterAttrs.unselected.marker
119114
},
120115

121116
hoverinfo: extendFlat({}, plotAttrs.hoverinfo, {

0 commit comments

Comments
 (0)