Skip to content

Commit 11189ae

Browse files
committed
make hover button extend current scene layout,
- the previous version overrode the current scene layout
1 parent 9010006 commit 11189ae

File tree

1 file changed

+47
-39
lines changed

1 file changed

+47
-39
lines changed

src/components/modebar/buttons.js

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -359,50 +359,58 @@ modeBarButtons.hoverClosest3d = {
359359
toggle: true,
360360
icon: Icons.tooltip_basic,
361361
gravity: 'ne',
362-
click: function(gd, ev) {
363-
var button = ev.currentTarget,
364-
val = JSON.parse(button.getAttribute('data-val')) || false,
365-
fullLayout = gd._fullLayout,
366-
sceneIds = Plotly.Plots.getSubplotIds(fullLayout, 'gl3d');
367-
368-
var axes = ['xaxis', 'yaxis', 'zaxis'],
369-
spikeAttrs = ['showspikes', 'spikesides', 'spikethickness', 'spikecolor'];
370-
371-
// initialize 'current spike' object to be stored in the DOM
372-
var currentSpikes = {},
373-
axisSpikes = {},
374-
layoutUpdate = {};
375-
376-
if(val) {
377-
layoutUpdate = val;
378-
button.setAttribute('data-val', JSON.stringify(null));
379-
}
380-
else {
381-
layoutUpdate = {'allaxes.showspikes': false};
382-
383-
for(var i = 0; i < sceneIds.length; i++) {
384-
var sceneId = sceneIds[i],
385-
sceneLayout = fullLayout[sceneId],
386-
sceneSpikes = currentSpikes[sceneId] = {};
387-
388-
// copy all the current spike attrs
389-
for(var j = 0; j < 3; j++) {
390-
var axis = axes[j];
391-
axisSpikes = sceneSpikes[axis] = {};
392-
393-
for(var k = 0; k < spikeAttrs.length; k++) {
394-
var spikeAttr = spikeAttrs[k];
395-
axisSpikes[spikeAttr] = sceneLayout[axis][spikeAttr];
396-
}
362+
click: handleHover3d
363+
};
364+
365+
function handleHover3d(gd, ev) {
366+
var button = ev.currentTarget,
367+
val = JSON.parse(button.getAttribute('data-val')) || false,
368+
layout = gd.layout,
369+
fullLayout = gd._fullLayout,
370+
sceneIds = Plotly.Plots.getSubplotIds(fullLayout, 'gl3d');
371+
372+
var axes = ['xaxis', 'yaxis', 'zaxis'],
373+
spikeAttrs = ['showspikes', 'spikesides', 'spikethickness', 'spikecolor'];
374+
375+
// initialize 'current spike' object to be stored in the DOM
376+
var currentSpikes = {},
377+
axisSpikes = {},
378+
layoutUpdate = {};
379+
380+
if(val) {
381+
layoutUpdate = Lib.extendDeep(layout, val);
382+
button.setAttribute('data-val', JSON.stringify(null));
383+
}
384+
else {
385+
layoutUpdate = {
386+
'allaxes.showspikes': false
387+
};
388+
389+
for(var i = 0; i < sceneIds.length; i++) {
390+
var sceneId = sceneIds[i],
391+
sceneLayout = fullLayout[sceneId],
392+
sceneSpikes = currentSpikes[sceneId] = {};
393+
394+
sceneSpikes.hovermode = sceneLayout.hovermode;
395+
layoutUpdate[sceneId + '.hovermode'] = false;
396+
397+
// copy all the current spike attrs
398+
for(var j = 0; j < 3; j++) {
399+
var axis = axes[j];
400+
axisSpikes = sceneSpikes[axis] = {};
401+
402+
for(var k = 0; k < spikeAttrs.length; k++) {
403+
var spikeAttr = spikeAttrs[k];
404+
axisSpikes[spikeAttr] = sceneLayout[axis][spikeAttr];
397405
}
398406
}
399-
400-
button.setAttribute('data-val', JSON.stringify(currentSpikes));
401407
}
402408

403-
Plotly.relayout(gd, layoutUpdate);
409+
button.setAttribute('data-val', JSON.stringify(currentSpikes));
404410
}
405-
};
411+
412+
Plotly.relayout(gd, layoutUpdate);
413+
}
406414

407415
modeBarButtons.zoomInGeo = {
408416
name: 'zoomInGeo',

0 commit comments

Comments
 (0)