@@ -261,7 +261,7 @@ function handleCartesian(gd, ev) {
261
261
aobj [ astr ] = val ;
262
262
}
263
263
264
- Registry . call ( 'relayout ' , gd , aobj ) ;
264
+ Registry . call ( '_guiRelayout ' , gd , aobj ) ;
265
265
}
266
266
267
267
modeBarButtons . zoom3d = {
@@ -317,7 +317,7 @@ function handleDrag3d(gd, ev) {
317
317
var val2d = ( val === 'pan' ) ? val : 'zoom' ;
318
318
layoutUpdate . dragmode = val2d ;
319
319
320
- Registry . call ( 'relayout ' , gd , layoutUpdate ) ;
320
+ Registry . call ( '_guiRelayout ' , gd , layoutUpdate ) ;
321
321
}
322
322
323
323
modeBarButtons . resetCameraDefault3d = {
@@ -356,7 +356,7 @@ function handleCamera3d(gd, ev) {
356
356
}
357
357
}
358
358
359
- Registry . call ( 'relayout ' , gd , aobj ) ;
359
+ Registry . call ( '_guiRelayout ' , gd , aobj ) ;
360
360
}
361
361
362
362
modeBarButtons . hoverClosest3d = {
@@ -370,54 +370,48 @@ 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
420
- Registry . call ( 'relayout' , gd , layoutUpdate ) ;
412
+ function handleHover3d ( gd , ev ) {
413
+ var layoutUpdate = getNextHover3d ( gd , ev ) ;
414
+ Registry . call ( '_guiRelayout' , gd , layoutUpdate ) ;
421
415
}
422
416
423
417
modeBarButtons . zoomInGeo = {
@@ -473,7 +467,7 @@ function handleGeo(gd, ev) {
473
467
var scale = geoLayout . projection . scale ;
474
468
var newScale = ( val === 'in' ) ? 2 * scale : 0.5 * scale ;
475
469
476
- Registry . call ( 'relayout ' , gd , id + '.projection.scale' , newScale ) ;
470
+ Registry . call ( '_guiRelayout ' , gd , id + '.projection.scale' , newScale ) ;
477
471
} else if ( attr === 'reset' ) {
478
472
resetView ( gd , 'geo' ) ;
479
473
}
@@ -501,18 +495,20 @@ 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
515
- Registry . call ( 'relayout' , gd , 'hovermode' , newHover ) ;
509
+ function toggleHover ( gd ) {
510
+ var newHover = getNextHover ( gd ) ;
511
+ Registry . call ( '_guiRelayout' , gd , 'hovermode' , newHover ) ;
516
512
}
517
513
518
514
// buttons when more then one plot types are present
@@ -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 ( '_guiRelayout' , gd , layoutUpdate ) ;
535
529
}
536
530
} ;
537
531
@@ -567,7 +561,7 @@ modeBarButtons.toggleSpikelines = {
567
561
568
562
var aobj = setSpikelineVisibility ( gd ) ;
569
563
570
- Registry . call ( 'relayout ' , gd , aobj ) ;
564
+ Registry . call ( '_guiRelayout ' , gd , aobj ) ;
571
565
}
572
566
} ;
573
567
@@ -614,5 +608,5 @@ function resetView(gd, subplotType) {
614
608
}
615
609
}
616
610
617
- Registry . call ( 'relayout ' , gd , aObj ) ;
611
+ Registry . call ( '_guiRelayout ' , gd , aObj ) ;
618
612
}
0 commit comments