From 7f0163ebbcd0bee37f30e6f692082bc090035cb6 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 15 Jul 2022 12:12:27 -0400 Subject: [PATCH 1/5] strict subplot test to detect zero subplot e.g. sankey in determineSearchTraces & fix 6264 --- src/components/selections/select.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/components/selections/select.js b/src/components/selections/select.js index 1ec463183b4..a3338865a69 100644 --- a/src/components/selections/select.js +++ b/src/components/selections/select.js @@ -50,7 +50,14 @@ var p2r = helpers.p2r; var axValue = helpers.axValue; var getTransform = helpers.getTransform; +function cartesianDrag(dragOptions) { + // N.B. subplot may be falsy e.g zero sankey index! + return dragOptions.subplot !== undefined; +} + function prepSelect(evt, startX, startY, dragOptions, mode) { + var isCartesianDrag = cartesianDrag(dragOptions); + var isFreeMode = freeMode(mode); var isRectMode = rectMode(mode); var isOpenMode = openMode(mode); @@ -64,7 +71,7 @@ function prepSelect(evt, startX, startY, dragOptions, mode) { var gd = dragOptions.gd; var fullLayout = gd._fullLayout; var immediateSelect = isSelectMode && fullLayout.newselection.mode === 'immediate' && - !dragOptions.subplot; // N.B. only cartesian subplots have persistent selection + !isCartesianDrag; // N.B. only cartesian subplots have persistent selection var zoomLayer = fullLayout._zoomlayer; var dragBBox = dragOptions.element.getBoundingClientRect(); @@ -112,7 +119,7 @@ function prepSelect(evt, startX, startY, dragOptions, mode) { opacity: isDrawMode ? newStyle.opacity / 2 : 1, fill: (isDrawMode && !isOpenMode) ? newStyle.fillcolor : 'none', stroke: newStyle.line.color || ( - dragOptions.subplot !== undefined ? + isCartesianDrag ? '#7f7f7f' : // non-cartesian subplot Color.contrast(gd._fullLayout.plot_bgcolor) // cartesian subplot ), @@ -145,6 +152,8 @@ function prepSelect(evt, startX, startY, dragOptions, mode) { if(immediateSelect && !evt.shiftKey) { dragOptions._clearSubplotSelections = function() { + if(isCartesianDrag) return; + var xRef = xAxis._id; var yRef = yAxis._id; deselectSubplot(gd, xRef, yRef, searchTraces); @@ -709,7 +718,7 @@ function clearSelectionsCache(dragOptions, immediateSelect) { var selections; if( isSelectMode && - !dragOptions.subplot // only allow cartesian - no mapbox for now + !cartesianDrag(dragOptions) // only allow cartesian - no mapbox for now ) { selections = newSelections(outlines, dragOptions); } @@ -748,7 +757,10 @@ function determineSearchTraces(gd, xAxes, yAxes, subplot) { if(trace.visible !== true || !trace._module || !trace._module.selectPoints) continue; - if(subplot && (trace.subplot === subplot || trace.geo === subplot)) { + if( + cartesianDrag({subplot: subplot}) && + (trace.subplot === subplot || trace.geo === subplot) + ) { searchTraces.push(createSearchInfo(trace._module, cd, xAxes[0], yAxes[0])); } else if(trace.type === 'splom') { // FIXME: make sure we don't have more than single axis for splom From 015fe2f841790fc2a025f4de62fa840459b568dd Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 15 Jul 2022 13:07:42 -0400 Subject: [PATCH 2/5] draft log for PR 6265 --- draftlogs/6265_fix.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 draftlogs/6265_fix.md diff --git a/draftlogs/6265_fix.md b/draftlogs/6265_fix.md new file mode 100644 index 00000000000..8f77b23b7c5 --- /dev/null +++ b/draftlogs/6265_fix.md @@ -0,0 +1 @@ + - Fix `sankey` select error [[#6265](https://github.com/plotly/plotly.js/pull/6265)] From d4b64f71eb98d3981f1dbdac1e63cc360f4171a7 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 15 Jul 2022 16:21:25 -0400 Subject: [PATCH 3/5] revise function and variable names --- src/components/selections/select.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/selections/select.js b/src/components/selections/select.js index a3338865a69..43928ceea9a 100644 --- a/src/components/selections/select.js +++ b/src/components/selections/select.js @@ -50,13 +50,13 @@ var p2r = helpers.p2r; var axValue = helpers.axValue; var getTransform = helpers.getTransform; -function cartesianDrag(dragOptions) { +function hasSubplot(dragOptions) { // N.B. subplot may be falsy e.g zero sankey index! return dragOptions.subplot !== undefined; } function prepSelect(evt, startX, startY, dragOptions, mode) { - var isCartesianDrag = cartesianDrag(dragOptions); + var isCartesian = hasSubplot(dragOptions); var isFreeMode = freeMode(mode); var isRectMode = rectMode(mode); @@ -71,7 +71,7 @@ function prepSelect(evt, startX, startY, dragOptions, mode) { var gd = dragOptions.gd; var fullLayout = gd._fullLayout; var immediateSelect = isSelectMode && fullLayout.newselection.mode === 'immediate' && - !isCartesianDrag; // N.B. only cartesian subplots have persistent selection + !isCartesian; // N.B. only cartesian subplots have persistent selection var zoomLayer = fullLayout._zoomlayer; var dragBBox = dragOptions.element.getBoundingClientRect(); @@ -119,7 +119,7 @@ function prepSelect(evt, startX, startY, dragOptions, mode) { opacity: isDrawMode ? newStyle.opacity / 2 : 1, fill: (isDrawMode && !isOpenMode) ? newStyle.fillcolor : 'none', stroke: newStyle.line.color || ( - isCartesianDrag ? + isCartesian ? '#7f7f7f' : // non-cartesian subplot Color.contrast(gd._fullLayout.plot_bgcolor) // cartesian subplot ), @@ -152,7 +152,7 @@ function prepSelect(evt, startX, startY, dragOptions, mode) { if(immediateSelect && !evt.shiftKey) { dragOptions._clearSubplotSelections = function() { - if(isCartesianDrag) return; + if(isCartesian) return; var xRef = xAxis._id; var yRef = yAxis._id; @@ -718,7 +718,7 @@ function clearSelectionsCache(dragOptions, immediateSelect) { var selections; if( isSelectMode && - !cartesianDrag(dragOptions) // only allow cartesian - no mapbox for now + !hasSubplot(dragOptions) // only allow cartesian - no mapbox for now ) { selections = newSelections(outlines, dragOptions); } @@ -758,7 +758,7 @@ function determineSearchTraces(gd, xAxes, yAxes, subplot) { if(trace.visible !== true || !trace._module || !trace._module.selectPoints) continue; if( - cartesianDrag({subplot: subplot}) && + hasSubplot({subplot: subplot}) && (trace.subplot === subplot || trace.geo === subplot) ) { searchTraces.push(createSearchInfo(trace._module, cd, xAxes[0], yAxes[0])); From c8e9c2c2220b8cd8fc0900a4430f8f00374a6da7 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 15 Jul 2022 16:24:58 -0400 Subject: [PATCH 4/5] fix isCartesian checks in select.js --- src/components/selections/select.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/selections/select.js b/src/components/selections/select.js index 43928ceea9a..e4ca60c9137 100644 --- a/src/components/selections/select.js +++ b/src/components/selections/select.js @@ -56,7 +56,7 @@ function hasSubplot(dragOptions) { } function prepSelect(evt, startX, startY, dragOptions, mode) { - var isCartesian = hasSubplot(dragOptions); + var isCartesian = !hasSubplot(dragOptions); var isFreeMode = freeMode(mode); var isRectMode = rectMode(mode); @@ -71,7 +71,7 @@ function prepSelect(evt, startX, startY, dragOptions, mode) { var gd = dragOptions.gd; var fullLayout = gd._fullLayout; var immediateSelect = isSelectMode && fullLayout.newselection.mode === 'immediate' && - !isCartesian; // N.B. only cartesian subplots have persistent selection + isCartesian; // N.B. only cartesian subplots have persistent selection var zoomLayer = fullLayout._zoomlayer; var dragBBox = dragOptions.element.getBoundingClientRect(); @@ -152,7 +152,7 @@ function prepSelect(evt, startX, startY, dragOptions, mode) { if(immediateSelect && !evt.shiftKey) { dragOptions._clearSubplotSelections = function() { - if(isCartesian) return; + if(!isCartesian) return; var xRef = xAxis._id; var yRef = yAxis._id; From b1cee567c1c163613fdc5fe88cd388ffc9542e98 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 15 Jul 2022 16:27:21 -0400 Subject: [PATCH 5/5] fix outline stroke color --- src/components/selections/select.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/selections/select.js b/src/components/selections/select.js index e4ca60c9137..3a1cf577d3e 100644 --- a/src/components/selections/select.js +++ b/src/components/selections/select.js @@ -120,8 +120,8 @@ function prepSelect(evt, startX, startY, dragOptions, mode) { fill: (isDrawMode && !isOpenMode) ? newStyle.fillcolor : 'none', stroke: newStyle.line.color || ( isCartesian ? - '#7f7f7f' : // non-cartesian subplot - Color.contrast(gd._fullLayout.plot_bgcolor) // cartesian subplot + Color.contrast(gd._fullLayout.plot_bgcolor) : + '#7f7f7f' // non-cartesian subplot ), 'stroke-dasharray': dashStyle(newStyle.line.dash, newStyle.line.width), 'stroke-width': newStyle.line.width + 'px',