Skip to content

Commit 88fb812

Browse files
committed
aj-proof [un]selected logic
1 parent ab7b8f1 commit 88fb812

File tree

3 files changed

+66
-8
lines changed

3 files changed

+66
-8
lines changed

src/components/drawing/index.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -442,21 +442,25 @@ drawing.selectedPointStyle = function(s, trace) {
442442
var mo = marker.opacity;
443443
var smo = selectedMarker.opacity;
444444
var usmo = unselectedMarker.opacity;
445+
var smoIsDefined = smo !== undefined;
446+
var usmoIsDefined = usmo !== undefined;
445447

446448
s.each(function(d) {
447449
var pt = d3.select(this);
450+
var dmo = d.mo;
451+
var dmoIsDefined = dmo !== undefined;
448452
var mo2;
449453

450-
if(d.mo + 1 || smo || usmo) {
454+
if(dmoIsDefined || smoIsDefined || usmoIsDefined) {
451455
if(d.selected) {
452-
if(smo + 1) mo2 = smo;
456+
if(smoIsDefined) mo2 = smo;
453457
} else {
454-
if(usmo + 1) mo2 = usmo;
455-
else mo2 = DESELECTDIM * ((d.mo + 1) ? d.mo : mo);
458+
if(usmoIsDefined) mo2 = usmo;
459+
else mo2 = DESELECTDIM * (dmoIsDefined ? dmo : mo);
456460
}
457461
}
458462

459-
if(mo2 + 1) pt.style('opacity', mo2);
463+
if(mo2 !== undefined) pt.style('opacity', mo2);
460464
});
461465

462466
var smc = selectedMarker.color;
@@ -479,18 +483,20 @@ drawing.selectedPointStyle = function(s, trace) {
479483

480484
var sms = selectedMarker.size;
481485
var usms = unselectedMarker.size;
486+
var smsIsDefined = sms !== undefined;
487+
var usmsIsDefined = usms !== undefined;
482488

483-
if(Registry.traceIs(trace, 'symbols') && (sms + 1 || usms + 1)) {
489+
if(Registry.traceIs(trace, 'symbols') && (smsIsDefined || usmsIsDefined)) {
484490
s.each(function(d) {
485491
var pt = d3.select(this);
486492
var mrc = d.mrc;
487493
var mx = d.mx || marker.symbol || 0;
488494
var mrc2;
489495

490496
if(d.selected) {
491-
mrc2 = (sms + 1) ? sms / 2 : mrc;
497+
mrc2 = (smsIsDefined) ? sms / 2 : mrc;
492498
} else {
493-
mrc2 = (usms + 1) ? usms / 2 : mrc;
499+
mrc2 = (usmsIsDefined) ? usms / 2 : mrc;
494500
}
495501

496502
pt.attr('d', makePointPath(drawing.symbolNumber(mx), mrc2));

src/lib/coerce.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,9 @@ exports.coerceHoverinfo = function(traceIn, traceOut, layoutOut) {
382382
* default selection behavior while allowing to be overtaken by any other
383383
* [un]selected attribute.
384384
*
385+
* N.B. This must be called *after* coercing all the other [un]selected attrs,
386+
* to give the intended result.
387+
*
385388
* @param {object} traceOut : fullData item
386389
* @param {function} coerce : lib.coerce wrapper with implied first three arguments
387390
*/

test/jasmine/tests/scatter_test.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -864,6 +864,34 @@ describe('Test Scatter.style', function() {
864864
'selected pt 1 w/ set selected.marker.opacity'
865865
);
866866
})
867+
.then(function() {
868+
return check(
869+
{selectedpoints: [[1, 2]]},
870+
[[0.12, 1, 1], [0.1, 1, 1]],
871+
'selected pt 1-2 w/ set selected.marker.opacity'
872+
);
873+
})
874+
.then(function() {
875+
return check(
876+
{selectedpoints: [[2]]},
877+
[[0.12, 0.12, 1], [0.1, 0.1, 1]],
878+
'selected pt 2 w/ set selected.marker.opacity'
879+
);
880+
})
881+
.then(function() {
882+
return check(
883+
{selectedpoints: null},
884+
[[0.6, 0.6, 0.6], [0.5, 0.5, 0.5]],
885+
'no selected pts w/ set selected.marker.opacity'
886+
);
887+
})
888+
.then(function() {
889+
return check(
890+
{selectedpoints: [[1]]},
891+
[[0.12, 1, 0.12], [0.1, 1, 0.1]],
892+
'selected pt 1 w/o [un]selected setting (take 2)'
893+
);
894+
})
867895
.then(function() {
868896
return check(
869897
{'unselected.marker.opacity': 0},
@@ -930,6 +958,27 @@ describe('Test Scatter.style', function() {
930958
'selected pts 0-2 w/o [un]selected setting [should NOT change opacity]'
931959
);
932960
})
961+
.then(function() {
962+
return check(
963+
{selectedpoints: [[1, 2]]},
964+
[[b, y, y], [r, y, y]],
965+
'selected pt 1-2 w/ set selected.marker.color'
966+
);
967+
})
968+
.then(function() {
969+
return check(
970+
{selectedpoints: null},
971+
[[b, b, b], [r, g, b]],
972+
'no selected pts w/ set selected.marker.color'
973+
);
974+
})
975+
.then(function() {
976+
return check(
977+
{selectedpoints: [[0, 2]]},
978+
[[y, b, y], [y, g, y]],
979+
'selected pts 0-2 w/ set selected.marker.color (take 2)'
980+
);
981+
})
933982
.then(function() {
934983
return check(
935984
{'unselected.marker.color': c},

0 commit comments

Comments
 (0)