From aacfbf6f3c1184c8a012bad20300ba3bc78af0eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Wed, 22 May 2019 16:11:18 -0400 Subject: [PATCH] push kde hover label item before q1/median/q3 ... so that hoverAvoirOverlaps in Fx.hover can do its job properly. --- src/components/fx/hover.js | 2 +- src/traces/violin/hover.js | 8 +- test/image/baselines/violin_zoomed-in.png | Bin 0 -> 17763 bytes test/image/mocks/violin_zoomed-in.json | 274 ++++++++++++++++++++++ test/jasmine/tests/violin_test.js | 34 +++ 5 files changed, 313 insertions(+), 5 deletions(-) create mode 100644 test/image/baselines/violin_zoomed-in.png create mode 100644 test/image/mocks/violin_zoomed-in.json diff --git a/src/components/fx/hover.js b/src/components/fx/hover.js index 7fe5f429c81..a32ad3f0922 100644 --- a/src/components/fx/hover.js +++ b/src/components/fx/hover.js @@ -1177,7 +1177,7 @@ function hoverAvoidOverlaps(hoverLabels, ax, fullLayout) { donepositioning = true; i = 0; while(i < pointgroups.length - 1) { - // the higher (g0) and lower (g1) point group + // the higher (g0) and lower (g1) point group var g0 = pointgroups[i]; var g1 = pointgroups[i + 1]; diff --git a/src/traces/violin/hover.js b/src/traces/violin/hover.js index 184e41744c7..30305e4b87e 100644 --- a/src/traces/violin/hover.js +++ b/src/traces/violin/hover.js @@ -26,10 +26,6 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay if(hasHoveronViolins || hasHoveronKDE) { var closeBoxData = boxHoverPoints.hoverOnBoxes(pointData, xval, yval, hovermode); - if(hasHoveronViolins) { - closeData = closeData.concat(closeBoxData); - } - if(hasHoveronKDE && closeBoxData.length > 0) { var xa = pointData.xa; var ya = pointData.ya; @@ -82,6 +78,10 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay violinLineAttrs[vLetter + '1'] = violinLineAttrs[vLetter + '2'] = vAxis._offset + vValPx; } } + + if(hasHoveronViolins) { + closeData = closeData.concat(closeBoxData); + } } if(hoveron.indexOf('points') !== -1) { diff --git a/test/image/baselines/violin_zoomed-in.png b/test/image/baselines/violin_zoomed-in.png new file mode 100644 index 0000000000000000000000000000000000000000..ae8e8e3225b754e2c7882f75f76e7509e1dc2024 GIT binary patch literal 17763 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