@@ -199,7 +199,7 @@ function handleCartesian(gd, ev) {
199
199
var fullLayout = gd . _fullLayout ;
200
200
var aobj = { } ;
201
201
var axList = axisIds . list ( gd , null , true ) ;
202
- var allSpikesEnabled = 'on' ;
202
+ var allSpikesEnabled = fullLayout . _cartesianSpikesEnabled ;
203
203
204
204
var ax , i ;
205
205
@@ -214,15 +214,18 @@ function handleCartesian(gd, ev) {
214
214
215
215
if ( ! ax . fixedrange ) {
216
216
axName = ax . _name ;
217
- if ( val === 'auto' ) aobj [ axName + '.autorange' ] = true ;
218
- else if ( val === 'reset' ) {
217
+ if ( val === 'auto' ) {
218
+ aobj [ axName + '.autorange' ] = true ;
219
+ } else if ( val === 'reset' ) {
219
220
if ( ax . _rangeInitial === undefined ) {
220
221
aobj [ axName + '.autorange' ] = true ;
221
222
} else {
222
223
var rangeInitial = ax . _rangeInitial . slice ( ) ;
223
224
aobj [ axName + '.range[0]' ] = rangeInitial [ 0 ] ;
224
225
aobj [ axName + '.range[1]' ] = rangeInitial [ 1 ] ;
225
226
}
227
+
228
+ // N.B. "reset" also resets showspikes
226
229
if ( ax . _showSpikeInitial !== undefined ) {
227
230
aobj [ axName + '.showspikes' ] = ax . _showSpikeInitial ;
228
231
if ( allSpikesEnabled === 'on' && ! ax . _showSpikeInitial ) {
@@ -245,25 +248,18 @@ function handleCartesian(gd, ev) {
245
248
}
246
249
}
247
250
}
248
- fullLayout . _cartesianSpikesEnabled = allSpikesEnabled ;
249
251
} else {
250
252
// if ALL traces have orientation 'h', 'hovermode': 'x' otherwise: 'y'
251
253
if ( astr === 'hovermode' && ( val === 'x' || val === 'y' ) ) {
252
254
val = fullLayout . _isHoriz ? 'y' : 'x' ;
253
255
button . setAttribute ( 'data-val' , val ) ;
254
- } else if ( astr === 'hovermode' && val === 'closest' ) {
255
- for ( i = 0 ; i < axList . length ; i ++ ) {
256
- ax = axList [ i ] ;
257
- if ( allSpikesEnabled === 'on' && ! ax . showspikes ) {
258
- allSpikesEnabled = 'off' ;
259
- }
260
- }
261
- fullLayout . _cartesianSpikesEnabled = allSpikesEnabled ;
262
256
}
263
257
264
258
aobj [ astr ] = val ;
265
259
}
266
260
261
+ fullLayout . _cartesianSpikesEnabled = allSpikesEnabled ;
262
+
267
263
Registry . call ( '_guiRelayout' , gd , aobj ) ;
268
264
}
269
265
@@ -581,26 +577,22 @@ modeBarButtons.toggleSpikelines = {
581
577
val : 'on' ,
582
578
click : function ( gd ) {
583
579
var fullLayout = gd . _fullLayout ;
580
+ var allSpikesEnabled = fullLayout . _cartesianSpikesEnabled ;
584
581
585
- fullLayout . _cartesianSpikesEnabled = fullLayout . _cartesianSpikesEnabled === 'on' ? 'off' : 'on' ;
586
-
587
- var aobj = setSpikelineVisibility ( gd ) ;
588
-
589
- Registry . call ( '_guiRelayout' , gd , aobj ) ;
582
+ fullLayout . _cartesianSpikesEnabled = allSpikesEnabled === 'on' ? 'off' : 'on' ;
583
+ Registry . call ( '_guiRelayout' , gd , setSpikelineVisibility ( gd ) ) ;
590
584
}
591
585
} ;
592
586
593
587
function setSpikelineVisibility ( gd ) {
594
588
var fullLayout = gd . _fullLayout ;
589
+ var areSpikesOn = fullLayout . _cartesianSpikesEnabled === 'on' ;
595
590
var axList = axisIds . list ( gd , null , true ) ;
596
591
var aobj = { } ;
597
592
598
- var ax , axName ;
599
-
600
593
for ( var i = 0 ; i < axList . length ; i ++ ) {
601
- ax = axList [ i ] ;
602
- axName = ax . _name ;
603
- aobj [ axName + '.showspikes' ] = fullLayout . _cartesianSpikesEnabled === 'on' ? true : ax . _showSpikeInitial ;
594
+ var ax = axList [ i ] ;
595
+ aobj [ ax . _name + '.showspikes' ] = areSpikesOn ? true : ax . _showSpikeInitial ;
604
596
}
605
597
606
598
return aobj ;
0 commit comments