@@ -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
407415modeBarButtons . zoomInGeo = {
408416 name : 'zoomInGeo' ,
0 commit comments