From 8cf9e02711710089252f4a7be72dad282d6da500 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Fri, 4 Jan 2019 17:34:35 -0500 Subject: [PATCH 1/3] fix hoverData 'posref' for horiz traces in hovermode:'closest' - that 'posref' val is used to sort the labels before the during the 'avoid-overlap' algo. --- src/components/fx/hover.js | 3 +-- test/jasmine/tests/box_test.js | 23 +++++++++++++++++++++++ test/jasmine/tests/violin_test.js | 23 +++++++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/components/fx/hover.js b/src/components/fx/hover.js index 3b5e15e0ced..a41acae141d 100644 --- a/src/components/fx/hover.js +++ b/src/components/fx/hover.js @@ -1080,7 +1080,6 @@ function createHoverText(hoverData, opts, gd) { // information then. function hoverAvoidOverlaps(hoverData, ax, fullLayout) { var nummoves = 0; - var axSign = 1; // make groups of touching points @@ -1326,7 +1325,7 @@ function cleanPoint(d, hovermode) { fill('fontColor', 'htc', 'hoverlabel.font.color'); fill('nameLength', 'hnl', 'hoverlabel.namelength'); - d.posref = hovermode === 'y' ? + d.posref = (hovermode === 'y' || (hovermode === 'closest' && trace.orientation === 'h')) ? (d.xa._offset + (d.x0 + d.x1) / 2) : (d.ya._offset + (d.y0 + d.y1) / 2); diff --git a/test/jasmine/tests/box_test.js b/test/jasmine/tests/box_test.js index e18a7ac2536..2cb49cba153 100644 --- a/test/jasmine/tests/box_test.js +++ b/test/jasmine/tests/box_test.js @@ -312,6 +312,29 @@ describe('Test box hover:', function() { }, nums: 'look:0.7', name: '' + }, { + desc: 'orientation:h | hovermode;y', + mock: require('@mocks/box_grouped_horz.json'), + pos: [430, 130], + nums: [ + 'max: 1', 'mean ± σ: 0.6833333 ± 0.2409472', 'min: 0.3', + 'q1: 0.5', 'q3: 0.9', 'median: 0.7'], + name: ['', '', '', '', '', 'carrots'], + axis: 'day 2', + hOrder: [0, 4, 5, 1, 3, 2] + }, { + desc: 'orientation:h | hovermode:closest', + mock: require('@mocks/box_grouped_horz.json'), + patch: function(fig) { + fig.layout.hovermode = 'closest'; + return fig; + }, + pos: [430, 130], + nums: [ + '(max: 1, day 2)', '(mean ± σ: 0.6833333 ± 0.2409472, day 2)', '(min: 0.3, day 2)', + '(q1: 0.5, day 2)', '(q3: 0.9, day 2)', '(median: 0.7, day 2)'], + name: ['', '', '', '', '', 'carrots'], + hOrder: [0, 4, 5, 1, 3, 2] }].forEach(function(specs) { it('should generate correct hover labels ' + specs.desc, function(done) { run(specs).catch(failTest).then(done); diff --git a/test/jasmine/tests/violin_test.js b/test/jasmine/tests/violin_test.js index c925b096acb..7a4ce0e1b17 100644 --- a/test/jasmine/tests/violin_test.js +++ b/test/jasmine/tests/violin_test.js @@ -489,6 +489,29 @@ describe('Test violin hover:', function() { nums: '(96, Old Faithful)', name: '', isRotated: false + }, { + desc: 'orientation:h | hovermode;y', + mock: require('@mocks/violin_grouped_horz-multicategory.json'), + pos: [430, 130], + nums: ['max: 0.9', 'min: 0.1', 'q1: 0.2', 'q3: 0.7', 'x: 0.7963605, kde: 0.445', 'median: 0.4'], + name: ['', '', '', '', '', 'kale'], + axis: '2018 - day 2', + hOrder: [0, 4, 3, 5, 2, 1] + }, { + desc: 'orientation:h | hovermode:closest', + mock: require('@mocks/violin_grouped_horz-multicategory.json'), + patch: function(fig) { + fig.layout.hovermode = 'closest'; + return fig; + }, + pos: [430, 130], + nums: [ + '(max: 0.9, 2018 - day 2)', '(min: 0.1, 2018 - day 2)', + '(q1: 0.2, 2018 - day 2)', '(q3: 0.7, 2018 - day 2)', + '(x: 0.7963605, kde: 0.445, 2018 - day 2)', '(median: 0.4, 2018 - day 2)' + ], + name: ['', '', '', '', '', 'kale'], + hOrder: [0, 4, 3, 5, 2, 1] }] .forEach(function(specs) { it('should generate correct hover labels ' + specs.desc, function(done) { From 14f676d6e12f5d4e58ee76b92aaefd7fb8a3578d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Fri, 4 Jan 2019 18:04:33 -0500 Subject: [PATCH 2/3] don't hover on kde, to avoid local vs CI discrepancies ... and still tests what we want to test --- test/jasmine/tests/violin_test.js | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/test/jasmine/tests/violin_test.js b/test/jasmine/tests/violin_test.js index 7a4ce0e1b17..2335c923226 100644 --- a/test/jasmine/tests/violin_test.js +++ b/test/jasmine/tests/violin_test.js @@ -492,15 +492,26 @@ describe('Test violin hover:', function() { }, { desc: 'orientation:h | hovermode;y', mock: require('@mocks/violin_grouped_horz-multicategory.json'), + patch: function(fig) { + // don't hover on kde, to avoid local vs CI discrepancies + fig.data.forEach(function(t) { + t.hoveron = 'violins'; + }); + return fig; + }, pos: [430, 130], - nums: ['max: 0.9', 'min: 0.1', 'q1: 0.2', 'q3: 0.7', 'x: 0.7963605, kde: 0.445', 'median: 0.4'], - name: ['', '', '', '', '', 'kale'], + nums: ['max: 0.9', 'min: 0.1', 'q1: 0.2', 'q3: 0.7', 'median: 0.4'], + name: ['', '', '', '', 'kale'], axis: '2018 - day 2', - hOrder: [0, 4, 3, 5, 2, 1] + hOrder: [0, 3, 4, 2, 1] }, { desc: 'orientation:h | hovermode:closest', mock: require('@mocks/violin_grouped_horz-multicategory.json'), patch: function(fig) { + // don't hover on kde, to avoid local vs CI discrepancies + fig.data.forEach(function(t) { + t.hoveron = 'violins'; + }); fig.layout.hovermode = 'closest'; return fig; }, @@ -508,10 +519,10 @@ describe('Test violin hover:', function() { nums: [ '(max: 0.9, 2018 - day 2)', '(min: 0.1, 2018 - day 2)', '(q1: 0.2, 2018 - day 2)', '(q3: 0.7, 2018 - day 2)', - '(x: 0.7963605, kde: 0.445, 2018 - day 2)', '(median: 0.4, 2018 - day 2)' + '(median: 0.4, 2018 - day 2)' ], - name: ['', '', '', '', '', 'kale'], - hOrder: [0, 4, 3, 5, 2, 1] + name: ['', '', '', '', 'kale'], + hOrder: [0, 3, 4, 2, 1] }] .forEach(function(specs) { it('should generate correct hover labels ' + specs.desc, function(done) { From e3e5f318e5fba983424e3302f928cb91278d3f1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 7 Jan 2019 09:34:05 -0500 Subject: [PATCH 3/3] fix typo in test descriptions --- test/jasmine/tests/box_test.js | 2 +- test/jasmine/tests/violin_test.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/jasmine/tests/box_test.js b/test/jasmine/tests/box_test.js index 2cb49cba153..5d15f42e0de 100644 --- a/test/jasmine/tests/box_test.js +++ b/test/jasmine/tests/box_test.js @@ -313,7 +313,7 @@ describe('Test box hover:', function() { nums: 'look:0.7', name: '' }, { - desc: 'orientation:h | hovermode;y', + desc: 'orientation:h | hovermode:y', mock: require('@mocks/box_grouped_horz.json'), pos: [430, 130], nums: [ diff --git a/test/jasmine/tests/violin_test.js b/test/jasmine/tests/violin_test.js index 2335c923226..d4149927eb4 100644 --- a/test/jasmine/tests/violin_test.js +++ b/test/jasmine/tests/violin_test.js @@ -490,7 +490,7 @@ describe('Test violin hover:', function() { name: '', isRotated: false }, { - desc: 'orientation:h | hovermode;y', + desc: 'orientation:h | hovermode:y', mock: require('@mocks/violin_grouped_horz-multicategory.json'), patch: function(fig) { // don't hover on kde, to avoid local vs CI discrepancies