Skip to content

Commit c62cf25

Browse files
committed
clean up handleHover3d
it was putting the whole layout into the relayout call
1 parent b134a52 commit c62cf25

File tree

1 file changed

+27
-33
lines changed

1 file changed

+27
-33
lines changed

src/components/modebar/buttons.js

+27-33
Original file line numberDiff line numberDiff line change
@@ -370,53 +370,47 @@ modeBarButtons.hoverClosest3d = {
370370
click: handleHover3d
371371
};
372372

373-
function handleHover3d(gd, ev) {
373+
function getNextHover3d(gd, ev) {
374374
var button = ev.currentTarget;
375-
var val = button._previousVal || false;
376-
var layout = gd.layout;
375+
var val = button._previousVal;
377376
var fullLayout = gd._fullLayout;
378377
var sceneIds = fullLayout._subplots.gl3d;
379378

380379
var axes = ['xaxis', 'yaxis', 'zaxis'];
381-
var spikeAttrs = ['showspikes', 'spikesides', 'spikethickness', 'spikecolor'];
382380

383381
// initialize 'current spike' object to be stored in the DOM
384382
var currentSpikes = {};
385-
var axisSpikes = {};
386383
var layoutUpdate = {};
387384

388385
if(val) {
389-
layoutUpdate = Lib.extendDeep(layout, val);
386+
layoutUpdate = val;
390387
button._previousVal = null;
391388
}
392389
else {
393-
layoutUpdate = {
394-
'allaxes.showspikes': false
395-
};
396-
397390
for(var i = 0; i < sceneIds.length; i++) {
398-
var sceneId = sceneIds[i],
399-
sceneLayout = fullLayout[sceneId],
400-
sceneSpikes = currentSpikes[sceneId] = {};
391+
var sceneId = sceneIds[i];
392+
var sceneLayout = fullLayout[sceneId];
401393

402-
sceneSpikes.hovermode = sceneLayout.hovermode;
403-
layoutUpdate[sceneId + '.hovermode'] = false;
394+
var hovermodeAStr = sceneId + '.hovermode';
395+
currentSpikes[hovermodeAStr] = sceneLayout.hovermode;
396+
layoutUpdate[hovermodeAStr] = false;
404397

405398
// copy all the current spike attrs
406399
for(var j = 0; j < 3; j++) {
407400
var axis = axes[j];
408-
axisSpikes = sceneSpikes[axis] = {};
409-
410-
for(var k = 0; k < spikeAttrs.length; k++) {
411-
var spikeAttr = spikeAttrs[k];
412-
axisSpikes[spikeAttr] = sceneLayout[axis][spikeAttr];
413-
}
401+
var spikeAStr = sceneId + '.' + axis + '.showspikes';
402+
layoutUpdate[spikeAStr] = false;
403+
currentSpikes[spikeAStr] = sceneLayout[axis].showspikes;
414404
}
415405
}
416406

417-
button._previousVal = Lib.extendDeep({}, currentSpikes);
407+
button._previousVal = currentSpikes;
418408
}
409+
return layoutUpdate;
410+
}
419411

412+
function handleHover3d(gd, ev) {
413+
var layoutUpdate = getNextHover3d(gd, ev);
420414
Registry.call('relayout', gd, layoutUpdate);
421415
}
422416

@@ -501,17 +495,19 @@ modeBarButtons.hoverClosestPie = {
501495
click: toggleHover
502496
};
503497

504-
function toggleHover(gd) {
498+
function getNextHover(gd) {
505499
var fullLayout = gd._fullLayout;
506500

507-
var onHoverVal;
501+
if(fullLayout.hovermode) return false;
502+
508503
if(fullLayout._has('cartesian')) {
509-
onHoverVal = fullLayout._isHoriz ? 'y' : 'x';
504+
return fullLayout._isHoriz ? 'y' : 'x';
510505
}
511-
else onHoverVal = 'closest';
512-
513-
var newHover = gd._fullLayout.hovermode ? false : onHoverVal;
506+
return 'closest';
507+
}
514508

509+
function toggleHover(gd) {
510+
var newHover = getNextHover(gd);
515511
Registry.call('relayout', gd, 'hovermode', newHover);
516512
}
517513

@@ -526,12 +522,10 @@ modeBarButtons.toggleHover = {
526522
icon: Icons.tooltip_basic,
527523
gravity: 'ne',
528524
click: function(gd, ev) {
529-
toggleHover(gd);
525+
var layoutUpdate = getNextHover3d(gd, ev);
526+
layoutUpdate.hovermode = getNextHover(gd);
530527

531-
// the 3d hovermode update must come
532-
// last so that layout.hovermode update does not
533-
// override scene?.hovermode?.layout.
534-
handleHover3d(gd, ev);
528+
Registry.call('relayout', gd, layoutUpdate);
535529
}
536530
};
537531

0 commit comments

Comments
 (0)