@@ -370,53 +370,47 @@ modeBarButtons.hoverClosest3d = {
370
370
click : handleHover3d
371
371
} ;
372
372
373
- function handleHover3d ( gd , ev ) {
373
+ function getNextHover3d ( gd , ev ) {
374
374
var button = ev . currentTarget ;
375
- var val = button . _previousVal || false ;
376
- var layout = gd . layout ;
375
+ var val = button . _previousVal ;
377
376
var fullLayout = gd . _fullLayout ;
378
377
var sceneIds = fullLayout . _subplots . gl3d ;
379
378
380
379
var axes = [ 'xaxis' , 'yaxis' , 'zaxis' ] ;
381
- var spikeAttrs = [ 'showspikes' , 'spikesides' , 'spikethickness' , 'spikecolor' ] ;
382
380
383
381
// initialize 'current spike' object to be stored in the DOM
384
382
var currentSpikes = { } ;
385
- var axisSpikes = { } ;
386
383
var layoutUpdate = { } ;
387
384
388
385
if ( val ) {
389
- layoutUpdate = Lib . extendDeep ( layout , val ) ;
386
+ layoutUpdate = val ;
390
387
button . _previousVal = null ;
391
388
}
392
389
else {
393
- layoutUpdate = {
394
- 'allaxes.showspikes' : false
395
- } ;
396
-
397
390
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 ] ;
401
393
402
- sceneSpikes . hovermode = sceneLayout . hovermode ;
403
- layoutUpdate [ sceneId + '.hovermode' ] = false ;
394
+ var hovermodeAStr = sceneId + '.hovermode' ;
395
+ currentSpikes [ hovermodeAStr ] = sceneLayout . hovermode ;
396
+ layoutUpdate [ hovermodeAStr ] = false ;
404
397
405
398
// copy all the current spike attrs
406
399
for ( var j = 0 ; j < 3 ; j ++ ) {
407
400
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 ;
414
404
}
415
405
}
416
406
417
- button . _previousVal = Lib . extendDeep ( { } , currentSpikes ) ;
407
+ button . _previousVal = currentSpikes ;
418
408
}
409
+ return layoutUpdate ;
410
+ }
419
411
412
+ function handleHover3d ( gd , ev ) {
413
+ var layoutUpdate = getNextHover3d ( gd , ev ) ;
420
414
Registry . call ( 'relayout' , gd , layoutUpdate ) ;
421
415
}
422
416
@@ -501,17 +495,19 @@ modeBarButtons.hoverClosestPie = {
501
495
click : toggleHover
502
496
} ;
503
497
504
- function toggleHover ( gd ) {
498
+ function getNextHover ( gd ) {
505
499
var fullLayout = gd . _fullLayout ;
506
500
507
- var onHoverVal ;
501
+ if ( fullLayout . hovermode ) return false ;
502
+
508
503
if ( fullLayout . _has ( 'cartesian' ) ) {
509
- onHoverVal = fullLayout . _isHoriz ? 'y' : 'x' ;
504
+ return fullLayout . _isHoriz ? 'y' : 'x' ;
510
505
}
511
- else onHoverVal = 'closest' ;
512
-
513
- var newHover = gd . _fullLayout . hovermode ? false : onHoverVal ;
506
+ return 'closest' ;
507
+ }
514
508
509
+ function toggleHover ( gd ) {
510
+ var newHover = getNextHover ( gd ) ;
515
511
Registry . call ( 'relayout' , gd , 'hovermode' , newHover ) ;
516
512
}
517
513
@@ -526,12 +522,10 @@ modeBarButtons.toggleHover = {
526
522
icon : Icons . tooltip_basic ,
527
523
gravity : 'ne' ,
528
524
click : function ( gd , ev ) {
529
- toggleHover ( gd ) ;
525
+ var layoutUpdate = getNextHover3d ( gd , ev ) ;
526
+ layoutUpdate . hovermode = getNextHover ( gd ) ;
530
527
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 ) ;
535
529
}
536
530
} ;
537
531
0 commit comments