diff --git a/draftlogs/6727_fix.md b/draftlogs/6727_fix.md new file mode 100644 index 00000000000..7e8805335da --- /dev/null +++ b/draftlogs/6727_fix.md @@ -0,0 +1 @@ + - Addressing issue [[#5350](https://github.com/plotly/plotly.js/issues/5350)] via pull request [[#6727](https://github.com/plotly/plotly.js/pull/6727)]. This small change allows custom plotly_legenddoubleclick handlers to execute even when the default plotly_legendclick event is cancelled (returns false). diff --git a/src/components/legend/draw.js b/src/components/legend/draw.js index 741bb089895..967f55ea629 100644 --- a/src/components/legend/draw.js +++ b/src/components/legend/draw.js @@ -464,11 +464,9 @@ function clickOrDoubleClick(gd, legend, legendItem, numClicks, evt) { if(Registry.traceIs(trace, 'pie-like')) { evtData.label = legendItem.datum()[0].label; } - var clickVal = Events.triggerHandler(gd, 'plotly_legendclick', evtData); - if(clickVal === false) return; - if(numClicks === 1) { + if(clickVal === false) return; legend._clickTimeout = setTimeout(function() { if(!gd._fullLayout) return; handleClick(legendItem, gd, numClicks); @@ -478,7 +476,8 @@ function clickOrDoubleClick(gd, legend, legendItem, numClicks, evt) { gd._legendMouseDownTime = 0; var dblClickVal = Events.triggerHandler(gd, 'plotly_legenddoubleclick', evtData); - if(dblClickVal !== false) handleClick(legendItem, gd, numClicks); + // Activate default double click behaviour only when both single click and double click values are not false + if(dblClickVal !== false && clickVal !== false) handleClick(legendItem, gd, numClicks); } } diff --git a/test/jasmine/tests/legend_test.js b/test/jasmine/tests/legend_test.js index 3dd140ffe95..ded26277656 100644 --- a/test/jasmine/tests/legend_test.js +++ b/test/jasmine/tests/legend_test.js @@ -2742,6 +2742,38 @@ describe('legend with custom doubleClickDelay', function() { .then(_assert('[short] after click + (1.1*t) delay + click', 2, 0)) .then(done, done.fail); }, 3 * jasmine.DEFAULT_TIMEOUT_INTERVAL); + + it('custom plotly_legenddoubleclick handler should fire even when plotly_legendclick has been cancelled', function(done) { + var tShort = 0.75 * DBLCLICKDELAY; + var dblClickCnt = 0; + var newPlot = function(fig) { + return Plotly.newPlot(gd, fig).then(function() { + gd.on('plotly_legendclick', function() { return false; }); + gd.on('plotly_legenddoubleclick', function() { dblClickCnt++; }); + }); + }; + + function _assert(msg, _dblClickCnt) { + return function() { + expect(dblClickCnt).toBe(_dblClickCnt, msg + '| dblClickCnt'); + dblClickCnt = 0; + }; + } + + newPlot({ + data: [ + {y: [1, 2, 1]}, + {y: [2, 1, 2]} + ], + layout: {}, + config: {} + }) + .then(click(0)) + .then(delay(tShort)) + .then(click(0)) + .then(_assert('Double click increases count', 1)) + .then(done); + }, 3 * jasmine.DEFAULT_TIMEOUT_INTERVAL); }); describe('legend with custom legendwidth', function() {