From f3cc465da84fdae98bf7ff9718efb899a71b434e Mon Sep 17 00:00:00 2001 From: archmoj Date: Wed, 31 Jul 2019 14:46:26 -0400 Subject: [PATCH 1/4] address phx issue 250 - hover should return latest point when two points have identical position --- package-lock.json | 17 ++++++++--------- package.json | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 88bdf90f11b..f8b594a7a18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4653,9 +4653,8 @@ } }, "gl-plot3d": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/gl-plot3d/-/gl-plot3d-2.2.1.tgz", - "integrity": "sha512-WSzZ9118mUal3uW/9bCPqdrlncmD/T0zWoOY9PiskIOAJ5dxKhzPbY2XkjDs+jGh/ce1yCSEh6LO9aB9SirGow==", + "version": "git://github.com/gl-vis/gl-plot3d.git#a574eb87198f9d46367e603b74d2a5e21be6ef4d", + "from": "git://github.com/gl-vis/gl-plot3d.git#a574eb87198f9d46367e603b74d2a5e21be6ef4d", "requires": { "3d-view": "^2.0.0", "a-big-triangle": "^1.0.3", @@ -4749,9 +4748,9 @@ "integrity": "sha512-QVeOZsi9nQuJJl7NB3132CCv5KA10BWxAY2QgJNsKqbLsG53B/TrGJpjIAohnJftdZ4fT6b3ZojWgeaXk8bOOA==" }, "gl-spikes3d": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/gl-spikes3d/-/gl-spikes3d-1.0.8.tgz", - "integrity": "sha512-C9Ij2/vpyjFGQBO2dDG4WsS8ZLWbFdL+nnqBeWqYe8SER96R+ZBMH/wddwZsxPV2iKlK9x2a8z3fSohw6V8Ayg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/gl-spikes3d/-/gl-spikes3d-1.0.9.tgz", + "integrity": "sha512-laMxydgGdnE8kvd1YD9cNWrx0uSmrPj1Oi02cHhnxWIklut97w3F7mZKnmLMEyUkxpRLkEeQ7YkYy7Y+aUEblw==", "requires": { "gl-buffer": "^2.1.2", "gl-shader": "^4.2.1", @@ -5930,9 +5929,9 @@ "integrity": "sha1-HXK8ZtP+Iur2Fw3ajPEJQySM/HY=" }, "is-mobile": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-2.0.0.tgz", - "integrity": "sha512-k2+p7BBCzhqHMdYJwGUNNo+6zegGiMIVbM6bEPzxWXpQV6BUzV892UW0oDFgqxT6DygO7LdxRbwC0xmOhJdbew==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-2.1.0.tgz", + "integrity": "sha512-M5OhlZwh+aTlmRUvDg0Wq3uWVNa+w4DyZ2SjbrS+BhSLu9Po+JXHendC305ZEu+Hh7lywb19Zu4kYXu3L1Oo8A==" }, "is-number": { "version": "3.0.0", diff --git a/package.json b/package.json index df566bbee13..d7ff49ca6c4 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "gl-mat4": "^1.2.0", "gl-mesh3d": "^2.1.1", "gl-plot2d": "^1.4.2", - "gl-plot3d": "^2.2.1", + "gl-plot3d": "git://github.com/gl-vis/gl-plot3d.git#a574eb87198f9d46367e603b74d2a5e21be6ef4d", "gl-pointcloud2d": "^1.0.2", "gl-scatter3d": "^1.2.2", "gl-select-box": "^1.0.3", From 79897337567246a37368f0c1bace82b2d1106da6 Mon Sep 17 00:00:00 2001 From: archmoj Date: Wed, 31 Jul 2019 16:20:35 -0400 Subject: [PATCH 2/4] add a mock two scatter3d traces each has 8 points on identical corners --- .../baselines/gl3d_transparent_same-depth.png | Bin 0 -> 26698 bytes .../mocks/gl3d_transparent_same-depth.json | 107 ++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 test/image/baselines/gl3d_transparent_same-depth.png create mode 100644 test/image/mocks/gl3d_transparent_same-depth.json diff --git a/test/image/baselines/gl3d_transparent_same-depth.png b/test/image/baselines/gl3d_transparent_same-depth.png new file mode 100644 index 0000000000000000000000000000000000000000..b0757516867ec433dd0aee7c2a5fc9b294292720 GIT binary patch literal 26698 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

4I`m(=O##poqMq37+L6zR%6&lOC^mg=7 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 Ag8%>k literal 0 HcmV?d00001 diff --git a/test/image/mocks/gl3d_transparent_same-depth.json b/test/image/mocks/gl3d_transparent_same-depth.json new file mode 100644 index 00000000000..626828453ce --- /dev/null +++ b/test/image/mocks/gl3d_transparent_same-depth.json @@ -0,0 +1,107 @@ +{ + "data": [ + { + "x": [ + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 0 + ], + "y": [ + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1 + ], + "z": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "text": [ + "first below", + "second below", + "third below", + "fourth below", + "first above", + "second above", + "third above", + "fourth above" + ], + "type": "scatter3d", + "opacity": 0.5, + "marker": { + "opacity": 0.5, + "size": 50 + } + }, + { + "x": [ + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 0 + ], + "y": [ + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1 + ], + "z": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "text": [ + "first below", + "second below", + "third below", + "fourth below", + "first above", + "second above", + "third above", + "fourth above" + ], + "type": "scatter3d", + "opacity": 0.5, + "marker": { + "opacity": 0.5, + "size": 50 + } + } + ], + "layout": { + "width": 400, + "height": 400, + "title": { + "text": "hover should generally pick latest
points on the same position
and display above not below" + } + } +} From 4bbd55188cee3fcbf06d41f051f2be8359015a32 Mon Sep 17 00:00:00 2001 From: archmoj Date: Wed, 31 Jul 2019 16:42:39 -0400 Subject: [PATCH 3/4] add jasmine test to describe and lock the issue reported in PHX 250 --- test/jasmine/tests/gl3d_hover_click_test.js | 33 +++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/test/jasmine/tests/gl3d_hover_click_test.js b/test/jasmine/tests/gl3d_hover_click_test.js index 2492b76a8f0..34ff57afc14 100644 --- a/test/jasmine/tests/gl3d_hover_click_test.js +++ b/test/jasmine/tests/gl3d_hover_click_test.js @@ -24,6 +24,7 @@ mock2.data[0].surfaceaxis = 2; mock2.layout.showlegend = true; var mock3 = require('@mocks/gl3d_autocolorscale'); +var mock4 = require('@mocks/gl3d_transparent_same-depth.json'); describe('Test gl3d trace click/hover:', function() { var gd, ptData; @@ -39,13 +40,16 @@ describe('Test gl3d trace click/hover:', function() { destroyGraphDiv(); }); - function assertHoverText(xLabel, yLabel, zLabel, textLabel) { + function assertHoverText(xLabel, yLabel, zLabel, textLabel, traceName) { var content = []; if(xLabel) content.push(xLabel); if(yLabel) content.push(yLabel); if(zLabel) content.push(zLabel); if(textLabel) content.push(textLabel); - assertHoverLabelContent({nums: content.join('\n')}); + assertHoverLabelContent({ + name: traceName, + nums: content.join('\n') + }); } function assertEventData(x, y, z, curveNumber, pointNumber, extra) { @@ -539,4 +543,29 @@ describe('Test gl3d trace click/hover:', function() { .catch(failTest) .then(done); }); + + it('@gl should pick latest & closest points on hover if two points overlap', function(done) { + var _mock = Lib.extendDeep({}, mock4); + + function _hover() { + mouseEvent('mouseover', 0, 0); + mouseEvent('mouseover', 200, 200); + } + + Plotly.plot(gd, _mock) + .then(delay(20)) + .then(function() { + gd.on('plotly_hover', function(eventData) { + ptData = eventData.points[0]; + }); + }) + .then(delay(20)) + .then(_hover) + .then(delay(20)) + .then(function() { + assertHoverText('x: 1', 'y: 1', 'z: 1', 'third above', 'trace 1'); + }) + .catch(failTest) + .then(done); + }); }); From e1e759bc42a16d90fd97b6fabab8f5681aadc63a Mon Sep 17 00:00:00 2001 From: archmoj Date: Wed, 31 Jul 2019 17:25:10 -0400 Subject: [PATCH 4/4] bump gl-plot3d to 2.2.2 --- package-lock.json | 9 +++++---- package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8b594a7a18..23389250ccc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4653,8 +4653,9 @@ } }, "gl-plot3d": { - "version": "git://github.com/gl-vis/gl-plot3d.git#a574eb87198f9d46367e603b74d2a5e21be6ef4d", - "from": "git://github.com/gl-vis/gl-plot3d.git#a574eb87198f9d46367e603b74d2a5e21be6ef4d", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/gl-plot3d/-/gl-plot3d-2.2.2.tgz", + "integrity": "sha512-is8RoDVUEbUM7kJ2qjhKJlfGLECH3ML9pTCW1V7ylUdmUACmcZ4lzJrQr/NIRkHC5WcUNOp3QJKPjBND3ngZ2A==", "requires": { "3d-view": "^2.0.0", "a-big-triangle": "^1.0.3", @@ -4663,10 +4664,10 @@ "gl-mat4": "^1.2.0", "gl-select-static": "^2.0.4", "gl-shader": "^4.2.1", - "gl-spikes3d": "^1.0.8", + "gl-spikes3d": "^1.0.9", "glslify": "^7.0.0", "has-passive-events": "^1.0.0", - "is-mobile": "^2.0.0", + "is-mobile": "^2.1.0", "mouse-change": "^1.4.0", "mouse-event-offset": "^3.0.2", "mouse-wheel": "^1.2.0", diff --git a/package.json b/package.json index d7ff49ca6c4..1f5f1a851a0 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "gl-mat4": "^1.2.0", "gl-mesh3d": "^2.1.1", "gl-plot2d": "^1.4.2", - "gl-plot3d": "git://github.com/gl-vis/gl-plot3d.git#a574eb87198f9d46367e603b74d2a5e21be6ef4d", + "gl-plot3d": "^2.2.2", "gl-pointcloud2d": "^1.0.2", "gl-scatter3d": "^1.2.2", "gl-select-box": "^1.0.3",